<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>abi.exdream.com - Benjamin Nitschke's Blog - Programming</title>
    <link>http://exdream.no-ip.info/blog/</link>
    <description>Benjamin Nitschke's Blog about .NET, Game Development and my daily life.</description>
    <language>en-us</language>
    <copyright>abi.exdream.com</copyright>
    <lastBuildDate>Mon, 11 Feb 2008 23:48:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>abi@exDream.com</managingEditor>
    <webMaster>abi@exDream.com</webMaster>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5bab5e3e-0bde-4092-96cc-012bcee7656e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5bab5e3e-0bde-4092-96cc-012bcee7656e</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
Games in this article: 
<ul><li><a href="#Chapter1Game">Chapter1Game</a></li><li><a href="#XnaPong">Xna Pong</a></li><li><a href="#XnaBreakout">Xna Breakout</a></li><li><a href="#XnaTetris">Xna Tetris</a></li><li><a href="#RocketCommanderXna">Rocket Commander Xna</a></li><li><a href="#XnaShooter">Xna Shooter</a></li><li><a href="#XnaRacingGame">Xna Racing Game</a></li><li><a href="#DungeonQuestGDC">Dungeon Quest GDC</a></li></ul><br />
Please read my previous post about <a href="http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx">Converting
XNA 1.0 games to XNA 2.0 for all technical tips</a>. All the games can also be found
on <a href="http://XnaProjects.net">http://XnaProjects.net</a>, 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) ^^<br /><br />
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 <a href="http://exdream.no-ip.info/blog/2007/07/19/XnaProjectChangerToolWithVS2008Support.aspx">convert
the files over and over again like in the past</a>. The Icons for all games were also
improved. Lets take a look at the Icons (.ico files) on Windows:<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsWindows.jpg" border="0" /><br />
For the Xbox 360 game icons the .png files (usually named GameThumbnail.png) are used:<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsXbox360.jpg" border="0" width="382" /><br />
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.<br /><br /><ul><li><a name="Chapter1Game"></a><b>Chapter1Game</b>: 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 <a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470126779.html">"Professional
XNA Game Programming"</a>. 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.<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/Chapter1GameSetup.exe">Chapter1GameSetup.exe
(210 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/Chapter1GameSourceCode.zip">Chapter1GameSourceCode.zip
(57 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/Chapter1GameScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=Chapter1GameScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaPong"></a><b>Xna Pong</b>: 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.<br /><br />
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)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaPongSetup.exe">XnaPongSetup.exe
(309 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaPongSourceCode.zip">XnaPongSourceCode.zip
(258 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNAPongScreenshot.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNAPongScreenshot.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaBreakout"></a><b>Xna Breakout</b>: XNA Breakout is a simple Breakout/Arcanoid
game based on the XNA Pong game from the previous chapter.<br /><br />
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)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaBreakoutSetup.exe">XnaBreakoutSetup.exe
(383 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaBreakoutSourceCode.zip">XnaBreakoutSourceCode.zip
(316 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNABreakoutScreenshot.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNABreakoutScreenshot.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaTetris"></a><b>Xna Tetris</b>: 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)<br /><br />
This game introduces the helper classes (chapter 4 of my book) and makes more use
of unit testing and game components in XNA.<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaTetrisSetup.exe">XnaTetrisSetup.exe
(310 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaTetrisSourceCode.zip">XnaTetrisSourceCode.zip
(277 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNATetrisScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNATetrisScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="RocketCommanderXna"></a><b>Rocket Commander Xna</b>: 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.<br /><br />
If you want to learn more about the Rocket Commander game, check out its official
website <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> 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)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSetup.exe">RocketCommanderXnaSetup.exe
(16.5 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSourceCode.zip">RocketCommanderXnaSourceCode.zip
(52.8 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/RocketCommanderXnaScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=RocketCommanderXnaScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaShooter"></a><b>Xna Shooter</b>: 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)<br /><br />
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. 
<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaShooterSetup.exe">XnaShooterSetup.exe
(14.9 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaShooterSourceCode.zip">XnaShooterSourceCode.zip
(32.2 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XnaShooterScreenshot0014.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XnaShooterScreenshot0014.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaRacingGame"></a><b>Xna Racing Game</b>: XNA Racing Game Starter Kit I
wrote for <a href="http://creators.xna.com">http://creators.xna.com</a>. More information
and more downloads can be found on <a href="http://XnaRacingGame.com">http://XnaRacingGame.com</a>.
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).<br /><br />
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. 
<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaRacingGameSetup.exe">XnaRacingGameSetup.exe
(40.2 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaRacingGameSourceCode.zip">XnaRacingGameSourceCode.zip
(95.4 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/RacingGameScreenshotBig03.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=RacingGameScreenshotBig03.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="DungeonQuestGDC"></a><b>Dungeon Quest GDC</b>: 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.<br /><br />
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.<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSetup.exe">DungeonQuestGDCSetup.exe
(25.6 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSourceCode.zip">DungeonQuestGDCSourceCode.zip
(67.2 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/DungeonQuest_Day4_01.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=DungeonQuest_Day4_01.jpg" border="0" /><br /><br /></a></li></ul></li></ul>
Have fun with all the games :)<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5bab5e3e-0bde-4092-96cc-012bcee7656e" /></body>
      <title>All XNA Games converted to XNA 2.0 from Rocket Commander to the Racing Game.</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/02/11/AllXNAGamesConvertedToXNA20FromRocketCommanderToTheRacingGame.aspx</link>
      <pubDate>Mon, 11 Feb 2008 23:48:36 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
Games in this article: 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Chapter1Game"&gt;Chapter1Game&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaPong"&gt;Xna Pong&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaBreakout"&gt;Xna Breakout&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaTetris"&gt;Xna Tetris&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#RocketCommanderXna"&gt;Rocket Commander Xna&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaShooter"&gt;Xna Shooter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaRacingGame"&gt;Xna Racing Game&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#DungeonQuestGDC"&gt;Dungeon Quest GDC&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
Please read my previous post about &lt;a href="http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx"&gt;Converting
XNA 1.0 games to XNA 2.0 for all technical tips&lt;/a&gt;. All the games can also be found
on &lt;a href="http://XnaProjects.net"&gt;http://XnaProjects.net&lt;/a&gt;, 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) ^^&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://exdream.no-ip.info/blog/2007/07/19/XnaProjectChangerToolWithVS2008Support.aspx"&gt;convert
the files over and over again like in the past&lt;/a&gt;. The Icons for all games were also
improved. Lets take a look at the Icons (.ico files) on Windows:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsWindows.jpg" border="0"&gt; 
&lt;br&gt;
For the Xbox 360 game icons the .png files (usually named GameThumbnail.png) are used:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsXbox360.jpg" border="0" width="382"&gt; 
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a name="Chapter1Game"&gt;&lt;/a&gt;&lt;b&gt;Chapter1Game&lt;/b&gt;: 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 &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470126779.html"&gt;"Professional
XNA Game Programming"&lt;/a&gt;. 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.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/Chapter1GameSetup.exe"&gt;Chapter1GameSetup.exe
(210 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/Chapter1GameSourceCode.zip"&gt;Chapter1GameSourceCode.zip
(57 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/Chapter1GameScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=Chapter1GameScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaPong"&gt;&lt;/a&gt;&lt;b&gt;Xna Pong&lt;/b&gt;: 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.&lt;br&gt;
&lt;br&gt;
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)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaPongSetup.exe"&gt;XnaPongSetup.exe
(309 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaPongSourceCode.zip"&gt;XnaPongSourceCode.zip
(258 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNAPongScreenshot.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNAPongScreenshot.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaBreakout"&gt;&lt;/a&gt;&lt;b&gt;Xna Breakout&lt;/b&gt;: XNA Breakout is a simple Breakout/Arcanoid
game based on the XNA Pong game from the previous chapter.&lt;br&gt;
&lt;br&gt;
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)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaBreakoutSetup.exe"&gt;XnaBreakoutSetup.exe
(383 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaBreakoutSourceCode.zip"&gt;XnaBreakoutSourceCode.zip
(316 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNABreakoutScreenshot.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNABreakoutScreenshot.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaTetris"&gt;&lt;/a&gt;&lt;b&gt;Xna Tetris&lt;/b&gt;: 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)&lt;br&gt;
&lt;br&gt;
This game introduces the helper classes (chapter 4 of my book) and makes more use
of unit testing and game components in XNA.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaTetrisSetup.exe"&gt;XnaTetrisSetup.exe
(310 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaTetrisSourceCode.zip"&gt;XnaTetrisSourceCode.zip
(277 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNATetrisScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNATetrisScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="RocketCommanderXna"&gt;&lt;/a&gt;&lt;b&gt;Rocket Commander Xna&lt;/b&gt;: 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.&lt;br&gt;
&lt;br&gt;
If you want to learn more about the Rocket Commander game, check out its official
website &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; 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)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSetup.exe"&gt;RocketCommanderXnaSetup.exe
(16.5 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSourceCode.zip"&gt;RocketCommanderXnaSourceCode.zip
(52.8 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=RocketCommanderXnaScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaShooter"&gt;&lt;/a&gt;&lt;b&gt;Xna Shooter&lt;/b&gt;: 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)&lt;br&gt;
&lt;br&gt;
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. 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaShooterSetup.exe"&gt;XnaShooterSetup.exe
(14.9 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaShooterSourceCode.zip"&gt;XnaShooterSourceCode.zip
(32.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XnaShooterScreenshot0014.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XnaShooterScreenshot0014.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaRacingGame"&gt;&lt;/a&gt;&lt;b&gt;Xna Racing Game&lt;/b&gt;: XNA Racing Game Starter Kit I
wrote for &lt;a href="http://creators.xna.com"&gt;http://creators.xna.com&lt;/a&gt;. More information
and more downloads can be found on &lt;a href="http://XnaRacingGame.com"&gt;http://XnaRacingGame.com&lt;/a&gt;.
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).&lt;br&gt;
&lt;br&gt;
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. 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaRacingGameSetup.exe"&gt;XnaRacingGameSetup.exe
(40.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaRacingGameSourceCode.zip"&gt;XnaRacingGameSourceCode.zip
(95.4 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/RacingGameScreenshotBig03.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=RacingGameScreenshotBig03.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="DungeonQuestGDC"&gt;&lt;/a&gt;&lt;b&gt;Dungeon Quest GDC&lt;/b&gt;: 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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSetup.exe"&gt;DungeonQuestGDCSetup.exe
(25.6 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSourceCode.zip"&gt;DungeonQuestGDCSourceCode.zip
(67.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/DungeonQuest_Day4_01.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=DungeonQuest_Day4_01.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
Have fun with all the games :)&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5bab5e3e-0bde-4092-96cc-012bcee7656e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=7597edbd-a105-4d85-98a9-ced60522acf9</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7597edbd-a105-4d85-98a9-ced60522acf9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://exdream.no-ip.info/blog/content/binary/Xna1toXna2.jpg" border="0" />
        <br />
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.<br /><br />
Some Notes about <b>XNA 2.0</b>: 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 <a href="http://creators.xna.com/">XNA Creators Club</a> website for us game programmers
and artists :)<a href="http://creators.xna.com"><br /><img src="http://creators.xna.com/Themes/default/images/common/logo_xna.png" border="0" /></a><br /><br />
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.<br /><br />
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. <a href="http://creators.xna.com/Education/whatsnew.aspx">More
information about converting projects can be found here</a> (read this first, this
article is based on the stuff there). You can also use the <a href="http://msdn2.microsoft.com/en-us/library/bb976061.aspx">Cross-Platform
Game Project Converter from XNA 2.0</a> 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).<br /><br />
Let's go through the steps:<br /><br /><ol><li>
Either use the <a href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm">XNA
project conversion utility</a> (can be found on the XNA Creators Club website) or
just create a new XNA 2.0 project in VS 2005.<br /><br /></li><li>
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 <b>Content </b>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 "<b>compile</b>"
to "<b>content</b>" (and then use the "<b>copy to output directory</b>" switch) or
to "<b>none</b>" if you want them to be ignored like for .wav files, which are automatically
processed by the .xct (XACT) file for you.<br /><br /></li><li>
Find the line <b>content = new ContentManager(Services);</b> and replace it with <b>Content.RootDirectory
= "Content";</b>. 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 <b>content = new ContentManager(Services, "Content");</b>.
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.<br /><br /></li><li>
Replace the <b>LoadGraphicsContent(bool)</b> method with <b>LoadContent</b>, remove
all the <b>if (loadAllContent)</b> commands (was never false anyway, just let the
content of the if loop stay) and also remove the call to <b>base.LoadGraphicsContent(bool)</b> (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.<br /><br /></li><li>
Finally delete the <b>UnloadGraphicsContent</b> method unless it did anything beside <b>base.Unload</b> and <b>base.UnloadGraphicsContent</b>.
In my XNA games the <b>UnloadGraphicsContent</b> usually looked like this and can
be safely removed now (at least if nothing else is in there):</li></ol><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
Unload graphic content if the device gets lost.</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;/summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;param name="unloadAllContent"&gt;Unload everything?&lt;/param&gt;</span><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">protected</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">override</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> UnloadGraphicsContent(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">bool</span> unloadAllContent)<br />
{<br />
  <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (unloadAllContent
== <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">true</span>)<br />
    content.Unload();<br /><br />
  <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">base</span>.UnloadGraphicsContent(unloadAllContent);<br />
} <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
UnloadGraphicsContent(loadAllContent)</span></span></p><br /><li>
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:<br /><br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> audioEngine <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> AudioEngine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"YourSound.xgs"</span>);<br />
waveBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> WaveBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Wave
Bank.xwb"</span>);<br />
soundBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> SoundBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Sound
Bank.xsb"</span>);<br /></span></p>
with:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> audioEngine <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> AudioEngine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\YourSound.xgs"</span>);<br />
waveBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> WaveBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\Wave
Bank.xwb"</span>);<br />
soundBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> SoundBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\Sound
Bank.xsb"</span>);</span></p>
   <br /></li><li>
In case you have used the <b>StorageDevice </b>and specifically the <b>ShowStorageDeviceGuide </b>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.<br /><br /></li><li>
In case you use any <b>ResourceUsage </b>enum, replace it with <b>TextureUsage </b>instead
or remove it if the issue is not texture related. You can also safely remove any <b>ResourceManagementMode</b>.<b>Automatic </b>parameters,
which are not longer supported. Everything is now automatic anyway. Just if you have
been using <b>ResourceUsage</b>.<b>RenderTarget </b>you will need to change the <b>Texture2D </b>class
to a <b>ResolveTexture2D</b> class in order to archive the same behaviour as before.
Some calls to the device (e.g. <b>ResolveBackBuffer</b>) have also changed and require
a <b>ResolveTexture2D </b>now. You may also want to check if you have any manual texture
management or disposing, which you can remove or simplify.<br /><br /></li><li>
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.</li><br />
The following only applies to the <b>RocketCommanderXna</b>, <b>XnaShooter </b>and <b>XnaRacingGame </b>engines,
but you might find similarities with other XNA games and the converting process:<br /><br /><ol><li>
First of all make sure the old XNA 1.1 code gets compileable by going though the changes
mentioned above (e.g. replacing <b>ResourceUsage </b>with <b>TextureUsage </b>or <b>BufferUsage</b>)
and removing everything that does not exist anymore (like <b>ResourceManagementMode</b>.<b>Automatic</b>).
If a method is non-existent in XNA 2.0 like <b>ResolveRenderTarget</b>, comment it
out and remember where it happened.<br /><br /></li><li>
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 <b>RenderTargets </b>in XNA 2.0).
For that reason always make sure that rendering to textures still works while you
make changing. I always used the <b>TestCreateRenderToTexture </b>unit test inside
the <b>RenderToTexture </b>class to figure things out.<br /><br /></li><li>
Additionally to making some changes in the <b>BaseGame </b>class (loading content
via <b>LoadContent</b>, using the <b>base.Content</b> instead of creating a new content
manager, etc.) I also removed all the <b>RenderTarget </b>helper methods and fields
from the BaseGame class (<b>SetRenderTarget</b>, <b>ResetRenderTarget</b>, etc.) and
moved them into the <b>RenderToTexture </b>class. While this makes the code more clean
and restructured by making a few more fields private, if you do not call the new <b>InitializeDepthBufferFormatAndMultisampling </b>of
the <b>RenderToTexture </b>class the calls to <b>SetRenderTarget </b>and <b>ResetRenderTarget </b>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 <b>DepthBuffer
Device.DepthStencilBuffer</b> was set to null, but is obviously still used. In order
to fix that make sure the <b>remDepthBuffer </b>variable is set to a correct value
in the <b>InitializeDepthBufferFormatAndMultisampling </b>method!<br /></li></ol><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><br />
An error has occurred during the Clear operation <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">while</span> trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.<br />
System.InvalidOperationException: An error has occurred during the Clear operation <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">while</span> trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(Color color)</span></p>
    
<br /><li>
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:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><br />
The active render target and depth stencil surface must have the same pixel size and
multisampling type.<br />
System.InvalidOperationException: The active render target and depth stencil surface
must have the same pixel size and multisampling type.<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.VerifyDepthRenderTargetCompat()<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)</span></p>
    
<br />
In order to get rid of this error without changing the <b>RenderToTexture </b>class
a lot, you can just comment out the line where multi sampling is activated in <b>BaseGame</b>:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//this.graphics.PreferMultiSampling
= true;</span></span></p></li>
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.<br /><br />
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 <a href="http://XnaProjects.net">http://XnaProjects.net</a> (and
here).<br /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7597edbd-a105-4d85-98a9-ced60522acf9" /></body>
      <title>Converting XNA 1.0 Projects to XNA 2.0</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx</link>
      <pubDate>Fri, 01 Feb 2008 00:32:32 GMT</pubDate>
      <description>&lt;img src="http://exdream.no-ip.info/blog/content/binary/Xna1toXna2.jpg" border="0"&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
Some Notes about &lt;b&gt;XNA 2.0&lt;/b&gt;: 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 &lt;a href="http://creators.xna.com/"&gt;XNA Creators Club&lt;/a&gt; website for us game programmers
and artists :)&lt;a href="http://creators.xna.com"&gt;
&lt;br&gt;
&lt;img src="http://creators.xna.com/Themes/default/images/common/logo_xna.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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. &lt;a href="http://creators.xna.com/Education/whatsnew.aspx"&gt;More
information about converting projects can be found here&lt;/a&gt; (read this first, this
article is based on the stuff there). You can also use the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb976061.aspx"&gt;Cross-Platform
Game Project Converter from XNA 2.0&lt;/a&gt; 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).&lt;br&gt;
&lt;br&gt;
Let's go through the steps:&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Either use the &lt;a href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm"&gt;XNA
project conversion utility&lt;/a&gt; (can be found on the XNA Creators Club website) or
just create a new XNA 2.0 project in VS 2005.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
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 &lt;b&gt;Content &lt;/b&gt;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 "&lt;b&gt;compile&lt;/b&gt;"
to "&lt;b&gt;content&lt;/b&gt;" (and then use the "&lt;b&gt;copy to output directory&lt;/b&gt;" switch) or
to "&lt;b&gt;none&lt;/b&gt;" if you want them to be ignored like for .wav files, which are automatically
processed by the .xct (XACT) file for you.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Find the line &lt;b&gt;content = new ContentManager(Services);&lt;/b&gt; and replace it with &lt;b&gt;Content.RootDirectory
= "Content";&lt;/b&gt;. 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 &lt;b&gt;content = new ContentManager(Services, "Content");&lt;/b&gt;.
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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Replace the &lt;b&gt;LoadGraphicsContent(bool)&lt;/b&gt; method with &lt;b&gt;LoadContent&lt;/b&gt;, remove
all the &lt;b&gt;if (loadAllContent)&lt;/b&gt; commands (was never false anyway, just let the
content of the if loop stay) and also remove the call to &lt;b&gt;base.LoadGraphicsContent(bool)&lt;/b&gt; (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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Finally delete the &lt;b&gt;UnloadGraphicsContent&lt;/b&gt; method unless it did anything beside &lt;b&gt;base.Unload&lt;/b&gt; and &lt;b&gt;base.UnloadGraphicsContent&lt;/b&gt;.
In my XNA games the &lt;b&gt;UnloadGraphicsContent&lt;/b&gt; usually looked like this and can
be safely removed now (at least if nothing else is in there):&lt;/li&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
Unload graphic content if the device gets lost.&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;param name="unloadAllContent"&amp;gt;Unload everything?&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;override&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; UnloadGraphicsContent(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;bool&lt;/span&gt; unloadAllContent)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (unloadAllContent
== &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;true&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; content.Unload();&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;.UnloadGraphicsContent(unloadAllContent);&lt;br&gt;
} &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
UnloadGraphicsContent(loadAllContent)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;li&gt;
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:&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; audioEngine &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; AudioEngine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"YourSound.xgs"&lt;/span&gt;);&lt;br&gt;
waveBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; WaveBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Wave
Bank.xwb"&lt;/span&gt;);&lt;br&gt;
soundBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; SoundBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Sound
Bank.xsb"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
with:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; audioEngine &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; AudioEngine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\YourSound.xgs"&lt;/span&gt;);&lt;br&gt;
waveBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; WaveBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\Wave
Bank.xwb"&lt;/span&gt;);&lt;br&gt;
soundBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; SoundBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\Sound
Bank.xsb"&lt;/span&gt;);&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
In case you have used the &lt;b&gt;StorageDevice &lt;/b&gt;and specifically the &lt;b&gt;ShowStorageDeviceGuide &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
In case you use any &lt;b&gt;ResourceUsage &lt;/b&gt;enum, replace it with &lt;b&gt;TextureUsage &lt;/b&gt;instead
or remove it if the issue is not texture related. You can also safely remove any &lt;b&gt;ResourceManagementMode&lt;/b&gt;.&lt;b&gt;Automatic &lt;/b&gt;parameters,
which are not longer supported. Everything is now automatic anyway. Just if you have
been using &lt;b&gt;ResourceUsage&lt;/b&gt;.&lt;b&gt;RenderTarget &lt;/b&gt;you will need to change the &lt;b&gt;Texture2D &lt;/b&gt;class
to a &lt;b&gt;ResolveTexture2D&lt;/b&gt; class in order to archive the same behaviour as before.
Some calls to the device (e.g. &lt;b&gt;ResolveBackBuffer&lt;/b&gt;) have also changed and require
a &lt;b&gt;ResolveTexture2D &lt;/b&gt;now. You may also want to check if you have any manual texture
management or disposing, which you can remove or simplify.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
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.&lt;/li&gt;&gt;
&lt;br&gt;
The following only applies to the &lt;b&gt;RocketCommanderXna&lt;/b&gt;, &lt;b&gt;XnaShooter &lt;/b&gt;and &lt;b&gt;XnaRacingGame &lt;/b&gt;engines,
but you might find similarities with other XNA games and the converting process:&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
First of all make sure the old XNA 1.1 code gets compileable by going though the changes
mentioned above (e.g. replacing &lt;b&gt;ResourceUsage &lt;/b&gt;with &lt;b&gt;TextureUsage &lt;/b&gt;or &lt;b&gt;BufferUsage&lt;/b&gt;)
and removing everything that does not exist anymore (like &lt;b&gt;ResourceManagementMode&lt;/b&gt;.&lt;b&gt;Automatic&lt;/b&gt;).
If a method is non-existent in XNA 2.0 like &lt;b&gt;ResolveRenderTarget&lt;/b&gt;, comment it
out and remember where it happened.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
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 &lt;b&gt;RenderTargets &lt;/b&gt;in XNA 2.0).
For that reason always make sure that rendering to textures still works while you
make changing. I always used the &lt;b&gt;TestCreateRenderToTexture &lt;/b&gt;unit test inside
the &lt;b&gt;RenderToTexture &lt;/b&gt;class to figure things out.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Additionally to making some changes in the &lt;b&gt;BaseGame &lt;/b&gt;class (loading content
via &lt;b&gt;LoadContent&lt;/b&gt;, using the &lt;b&gt;base.Content&lt;/b&gt; instead of creating a new content
manager, etc.) I also removed all the &lt;b&gt;RenderTarget &lt;/b&gt;helper methods and fields
from the BaseGame class (&lt;b&gt;SetRenderTarget&lt;/b&gt;, &lt;b&gt;ResetRenderTarget&lt;/b&gt;, etc.) and
moved them into the &lt;b&gt;RenderToTexture &lt;/b&gt;class. While this makes the code more clean
and restructured by making a few more fields private, if you do not call the new &lt;b&gt;InitializeDepthBufferFormatAndMultisampling &lt;/b&gt;of
the &lt;b&gt;RenderToTexture &lt;/b&gt;class the calls to &lt;b&gt;SetRenderTarget &lt;/b&gt;and &lt;b&gt;ResetRenderTarget &lt;/b&gt;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 &lt;b&gt;DepthBuffer
Device.DepthStencilBuffer&lt;/b&gt; was set to null, but is obviously still used. In order
to fix that make sure the &lt;b&gt;remDepthBuffer &lt;/b&gt;variable is set to a correct value
in the &lt;b&gt;InitializeDepthBufferFormatAndMultisampling &lt;/b&gt;method!&lt;br&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
An error has occurred during the Clear operation &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.&lt;br&gt;
System.InvalidOperationException: An error has occurred during the Clear operation &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(Color color)&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;li&gt;
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:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
The active render target and depth stencil surface must have the same pixel size and
multisampling type.&lt;br&gt;
System.InvalidOperationException: The active render target and depth stencil surface
must have the same pixel size and multisampling type.&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.VerifyDepthRenderTargetCompat()&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
In order to get rid of this error without changing the &lt;b&gt;RenderToTexture &lt;/b&gt;class
a lot, you can just comment out the line where multi sampling is activated in &lt;b&gt;BaseGame&lt;/b&gt;:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//this.graphics.PreferMultiSampling
= true;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/li&gt;&gt;
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.&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://XnaProjects.net"&gt;http://XnaProjects.net&lt;/a&gt; (and
here).&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7597edbd-a105-4d85-98a9-ced60522acf9" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=8c7cff4a-3610-4200-a52b-302c6f0c331b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,8c7cff4a-3610-4200-a52b-302c6f0c331b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,8c7cff4a-3610-4200-a52b-302c6f0c331b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8c7cff4a-3610-4200-a52b-302c6f0c331b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">In the past I usually updated any local
database changes directly at the server everytime I uploaded something. If your database
is small and the changes occur not very often, this is not a big issue, but once the
database grows and especially if you update something here and there very often, it
is an absolute waste of time and annoying to do all this by hand. The SQL Management
Studio does not really help you out like for example when you are trying to backup
data or restore them again. You can connect to two databases, but you can't even have
them side by side in a window and you certainly cannot drop anything from one db to
the other. You will be able to copy some data from one table into a table of the other
db, but that is pretty much about it.<br /><br />
Scripts are helpful, but if you are not a SQL pro and do not want to waste even more
time getting involved with that (keep in mind I did most of my SQL coding in either
LinQ or some other object releational mapper like EntitySpaces). I checked out some
tools a year ago, but saw not really the need to purcase them (especially when you
need these tools once a month for 5 minutes and they cost like 500 bucks). I think
I bought something cheap and crappy for a few bugs, but it does not work anylonger
and did not support my 64bit system. If you do a google search on sql tools you will
find a lot of tools, and quite a lot cheap and crappy ones too, probably also quite
a few free tools. But the more business related the problem is, the more unlikely
it is to find freeware and open source (nobody wants to do this for free). Sometimes
I get lucky and find exactly what I'm looking for and it only costs somethink like
19 bucks, then it is ok, even if you use it just for a short while.<br /><a href="http://www.teratrax.com/tdc/"><br /><img src="http://www.teratrax.com/images/logo160x50.gif" border="0" /></a><br />
Anyway, today I checked out some tools again, first the <a href="http://www.teratrax.com/tdc/">Teratrax
Database Compare tool</a>, which is nice and simple, but does cost quite a bit ($200
per developer). After I entered all the data for both databases it was able to figure
out where there are changes, but once I tried to actually synchronize the database
schemas (remember, I'm not interested in the data, copying that over is not so hard,
I even have some functions in my code that do that) the program stopped and cleared
all fields. I checked both dbs and nothing happend. I tried it some more times, but
no errors appeared, it just did not work. This was very frustrating.<br /><a href="http://www.red-gate.com"><br /><img src="http://www.red-gate.com/images/logo_v4.1.gif" border="0" /></a><br />
Instead I went to the next google search result ^^ It was <a href="http://www.red-gate.com/">SQL
Compare 6 from Red-Gate</a>. I'm already a Red-Gate customer (using the <a href="http://www.red-gate.com/products/ants_profiler/index.htm">Ants
Profiler</a> quite a lot and recently have been using the new <a href="http://www.red-gate.com/products/exception_hunter/index.htm">Exception
Hunter</a> tool), but I always found their SQL tools to expensive for me, especially
since I do not do much SQL work (at least I don't want to ^^). Anyway, I fired up
SQL Compare after installing their whole SQL toolbelt and quickly entered the connection
data for both db connections, clicked next a couple of times, saw some nice statistics
and messages and was all done. I checked my local database I used for testing and
yes, everything from the other server was there, with default values, descriptions
and so on. SQL Compare 6 is priced at around $300, so even more expensive then Teratrax
and certainly more expensive than some of the other tools I have encountered. But
it works and if I need it again for a few more times in the next 2 weeks (the trial
period) I will probably buy it. The amazing thing is that they claim they have already
150 000 customers of the SQL tools, that is quite a lot of money they have generated
with some developer-specific-tools. But then again, more than a million people have
downloaded XNA Game Studio Express and I would not have guessed there are even so
many programmers around (at least I do not see them in the real world, maybe they
are all hiding).<br /><br />
Ok, end of story, all the boring database stuff is well again. Also makes generating
database code much faster when done locally from a synchronized database instead of
pulling the schema from some online server.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8c7cff4a-3610-4200-a52b-302c6f0c331b" /></body>
      <title>SQL Tools for synchronizing databases</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,8c7cff4a-3610-4200-a52b-302c6f0c331b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/01/31/SQLToolsForSynchronizingDatabases.aspx</link>
      <pubDate>Thu, 31 Jan 2008 19:10:32 GMT</pubDate>
      <description>In the past I usually updated any local database changes directly at the server everytime I uploaded something. If your database is small and the changes occur not very often, this is not a big issue, but once the database grows and especially if you update something here and there very often, it is an absolute waste of time and annoying to do all this by hand. The SQL Management Studio does not really help you out like for example when you are trying to backup data or restore them again. You can connect to two databases, but you can't even have them side by side in a window and you certainly cannot drop anything from one db to the other. You will be able to copy some data from one table into a table of the other db, but that is pretty much about it.&lt;br&gt;
&lt;br&gt;
Scripts are helpful, but if you are not a SQL pro and do not want to waste even more
time getting involved with that (keep in mind I did most of my SQL coding in either
LinQ or some other object releational mapper like EntitySpaces). I checked out some
tools a year ago, but saw not really the need to purcase them (especially when you
need these tools once a month for 5 minutes and they cost like 500 bucks). I think
I bought something cheap and crappy for a few bugs, but it does not work anylonger
and did not support my 64bit system. If you do a google search on sql tools you will
find a lot of tools, and quite a lot cheap and crappy ones too, probably also quite
a few free tools. But the more business related the problem is, the more unlikely
it is to find freeware and open source (nobody wants to do this for free). Sometimes
I get lucky and find exactly what I'm looking for and it only costs somethink like
19 bucks, then it is ok, even if you use it just for a short while.&lt;br&gt;
&lt;a href="http://www.teratrax.com/tdc/"&gt;
&lt;br&gt;
&lt;img src="http://www.teratrax.com/images/logo160x50.gif" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Anyway, today I checked out some tools again, first the &lt;a href="http://www.teratrax.com/tdc/"&gt;Teratrax
Database Compare tool&lt;/a&gt;, which is nice and simple, but does cost quite a bit ($200
per developer). After I entered all the data for both databases it was able to figure
out where there are changes, but once I tried to actually synchronize the database
schemas (remember, I'm not interested in the data, copying that over is not so hard,
I even have some functions in my code that do that) the program stopped and cleared
all fields. I checked both dbs and nothing happend. I tried it some more times, but
no errors appeared, it just did not work. This was very frustrating.&lt;br&gt;
&lt;a href="http://www.red-gate.com"&gt;
&lt;br&gt;
&lt;img src="http://www.red-gate.com/images/logo_v4.1.gif" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Instead I went to the next google search result ^^ It was &lt;a href="http://www.red-gate.com/"&gt;SQL
Compare 6 from Red-Gate&lt;/a&gt;. I'm already a Red-Gate customer (using the &lt;a href="http://www.red-gate.com/products/ants_profiler/index.htm"&gt;Ants
Profiler&lt;/a&gt; quite a lot and recently have been using the new &lt;a href="http://www.red-gate.com/products/exception_hunter/index.htm"&gt;Exception
Hunter&lt;/a&gt; tool), but I always found their SQL tools to expensive for me, especially
since I do not do much SQL work (at least I don't want to ^^). Anyway, I fired up
SQL Compare after installing their whole SQL toolbelt and quickly entered the connection
data for both db connections, clicked next a couple of times, saw some nice statistics
and messages and was all done. I checked my local database I used for testing and
yes, everything from the other server was there, with default values, descriptions
and so on. SQL Compare 6 is priced at around $300, so even more expensive then Teratrax
and certainly more expensive than some of the other tools I have encountered. But
it works and if I need it again for a few more times in the next 2 weeks (the trial
period) I will probably buy it. The amazing thing is that they claim they have already
150 000 customers of the SQL tools, that is quite a lot of money they have generated
with some developer-specific-tools. But then again, more than a million people have
downloaded XNA Game Studio Express and I would not have guessed there are even so
many programmers around (at least I do not see them in the real world, maybe they
are all hiding).&lt;br&gt;
&lt;br&gt;
Ok, end of story, all the boring database stuff is well again. Also makes generating
database code much faster when done locally from a synchronized database instead of
pulling the schema from some online server.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8c7cff4a-3610-4200-a52b-302c6f0c331b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,8c7cff4a-3610-4200-a52b-302c6f0c331b.aspx</comments>
      <category>All;Development;meinSport.de;Other;Programming;SQL</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=982c549d-1bb6-4ccd-8126-ad8f189b9b69</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,982c549d-1bb6-4ccd-8126-ad8f189b9b69.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,982c549d-1bb6-4ccd-8126-ad8f189b9b69.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=982c549d-1bb6-4ccd-8126-ad8f189b9b69</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">A friend of mine (Hi Frederic Schneider
^^) wrote a little article on <a href="http://www.gameports.net">gameports.net</a> 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).<br /><br />
Here is the article:<br /><ul><li><a href="http://www.gameports.net/cms/meldung,medien-kritik-an-arbeitsbedingungen-in-der-spielebranche,2292.html">http://www.gameports.net/cms/meldung,medien-kritik-an-arbeitsbedingungen-in-der-spielebranche,2292.html</a></li></ul><br />
And here is a followup article:<br /><ul><li><a href="http://www.gameports.net/cms/artikel,medien-eine-branche-im-aufwrtstrend,801.html">http://www.gameports.net/cms/artikel,medien-eine-branche-im-aufwrtstrend,801.html</a></li></ul><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=982c549d-1bb6-4ccd-8126-ad8f189b9b69" /></body>
      <title>German: Arbeitsbedingungen in der Spielebranche</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,982c549d-1bb6-4ccd-8126-ad8f189b9b69.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/01/29/GermanArbeitsbedingungenInDerSpielebranche.aspx</link>
      <pubDate>Tue, 29 Jan 2008 16:44:20 GMT</pubDate>
      <description>A friend of mine (Hi Frederic Schneider ^^) wrote a little article on &lt;a href="http://www.gameports.net"&gt;gameports.net&lt;/a&gt; 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).&lt;br&gt;
&lt;br&gt;
Here is the article:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.gameports.net/cms/meldung,medien-kritik-an-arbeitsbedingungen-in-der-spielebranche,2292.html"&gt;http://www.gameports.net/cms/meldung,medien-kritik-an-arbeitsbedingungen-in-der-spielebranche,2292.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
And here is a followup article:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.gameports.net/cms/artikel,medien-eine-branche-im-aufwrtstrend,801.html"&gt;http://www.gameports.net/cms/artikel,medien-eine-branche-im-aufwrtstrend,801.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=982c549d-1bb6-4ccd-8126-ad8f189b9b69" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,982c549d-1bb6-4ccd-8126-ad8f189b9b69.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=c620677e-9e3a-41ad-b4f0-4e012747dd31</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,c620677e-9e3a-41ad-b4f0-4e012747dd31.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,c620677e-9e3a-41ad-b4f0-4e012747dd31.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c620677e-9e3a-41ad-b4f0-4e012747dd31</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">In case you run into the following error:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">Could
not load file or assembly 'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">null</span>'
or one of its dependencies. The system cannot find the file specified.<br />
    System.IO.FileNotFoundException: Could not load file or assembly
'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">null</span>'
or one of its dependencies. The system cannot find the file specified.<br />
    File name: 'xunit, Version=7.10.25.1028, Culture=neutral,
PublicKeyToken=<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">null</span>'<br />
    at Xunit.TdNet.TdNetRunner.RunTests(Type type, MethodInfo
method, ITestListener listener, TestRunState&amp; runState)<br />
    at Xunit.TdNet.TdNetRunner.RunMethod(MethodInfo method, ITestListener
testListener)<br />
    at TestDriven.TestRunner.AdaptorTestRunner.Run(ITestListener
testListener, ITraceListener traceListener, String assemblyPath, String testPath)<br />
    at TestDriven.TestRunner.ThreadTestRunner.Runner.Run()<br />
    <br />
    WRN: Assembly binding logging <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">is</span> turned
OFF.<br />
    To enable assembly bind failure logging, set the registry
value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.<br />
    Note: There <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">is</span> some
performance penalty associated with assembly bind failure logging.<br />
    To turn <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">this</span> feature
off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].</span></p>
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.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=c620677e-9e3a-41ad-b4f0-4e012747dd31" /></body>
      <title>Fixing the 'Could not load file or assembly 'xunit, Version=7.10.25.1028'' error</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,c620677e-9e3a-41ad-b4f0-4e012747dd31.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/01/28/FixingTheCouldNotLoadFileOrAssemblyXunitVersion710251028Error.aspx</link>
      <pubDate>Mon, 28 Jan 2008 17:25:26 GMT</pubDate>
      <description>In case you run into the following error:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;Could
not load file or assembly 'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;'
or one of its dependencies. The system cannot find the file specified.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.FileNotFoundException: Could not load file or assembly
'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;'
or one of its dependencies. The system cannot find the file specified.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;File name: 'xunit, Version=7.10.25.1028, Culture=neutral,
PublicKeyToken=&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at Xunit.TdNet.TdNetRunner.RunTests(Type type, MethodInfo
method, ITestListener listener, TestRunState&amp;amp; runState)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at Xunit.TdNet.TdNetRunner.RunMethod(MethodInfo method, ITestListener
testListener)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at TestDriven.TestRunner.AdaptorTestRunner.Run(ITestListener
testListener, ITraceListener traceListener, String assemblyPath, String testPath)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at TestDriven.TestRunner.ThreadTestRunner.Runner.Run()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WRN: Assembly binding logging &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;is&lt;/span&gt; turned
OFF.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To enable assembly bind failure logging, set the registry
value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Note: There &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;is&lt;/span&gt; some
performance penalty associated with assembly bind failure logging.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To turn &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt; feature
off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].&lt;/span&gt;
&lt;/p&gt;
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.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=c620677e-9e3a-41ad-b4f0-4e012747dd31" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,c620677e-9e3a-41ad-b4f0-4e012747dd31.aspx</comments>
      <category>All;Development;Other;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=c81aabe2-e19c-4639-9b09-908378bf1fb1</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,c81aabe2-e19c-4639-9b09-908378bf1fb1.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,c81aabe2-e19c-4639-9b09-908378bf1fb1.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c81aabe2-e19c-4639-9b09-908378bf1fb1</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Hi everyone,<br /><br />
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.<br /><br />
Recently one of my companies (namely <a href="http://realis-communities.com">realis</a>)
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 <a href="http://msdn2.microsoft.com/en-us/teamsystem/default.aspx">Team System</a>,
I ran into some problems. BTW: The Team System trial will end next month and I will
probably not switch back to <a href="http://subversion.tigris.org/">SubVersion</a>,
but instead go back to <a href="http://msdn2.microsoft.com/en-us/vs2005/aa718670.aspx">Visual
SourceSafe</a> 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.<br /><br />
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 (<a href="http://www.codeplex.com/xunit">xunit</a>, <a href="http://www.asp.net/ajax/">Ajax
stuff</a>, <a href="http://silverlight.net/">Silverlight</a>, <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython">IronPython</a>, <a href="http://www.entityspaces.net/Portal/Default.aspx">EntitySpaces</a>,
etc.). But even after making sure Silverlight and the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=25144C27-6514-4AD4-8BCB-E2E051416E03&amp;displaylang=en">Silverlight
Tools for Visual Studio Alpha</a> 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.<br /><br />
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.<br /><br />
If you have such a <b>InteropServices.COMException</b>, 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).<br /><br />
Hope this helps (phase stolen from <a href="http://weblogs.asp.net/scottgu/">ScottGu</a>,
btw: really cool stuff going on over there, the <a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx">ASP.NET
MVC framework</a> is nice and <a href="http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx">the
.NET Framework SourceCode</a> is very helpful!)<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=c81aabe2-e19c-4639-9b09-908378bf1fb1" /></body>
      <title>What to do if you receive the System.Runtime. InteropServices.COMException error in Visual Studio</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,c81aabe2-e19c-4639-9b09-908378bf1fb1.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/01/28/WhatToDoIfYouReceiveTheSystemRuntimeInteropServicesCOMExceptionErrorInVisualStudio.aspx</link>
      <pubDate>Mon, 28 Jan 2008 15:21:17 GMT</pubDate>
      <description>Hi everyone,&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
Recently one of my companies (namely &lt;a href="http://realis-communities.com"&gt;realis&lt;/a&gt;)
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 &lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/default.aspx"&gt;Team System&lt;/a&gt;,
I ran into some problems. BTW: The Team System trial will end next month and I will
probably not switch back to &lt;a href="http://subversion.tigris.org/"&gt;SubVersion&lt;/a&gt;,
but instead go back to &lt;a href="http://msdn2.microsoft.com/en-us/vs2005/aa718670.aspx"&gt;Visual
SourceSafe&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
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 (&lt;a href="http://www.codeplex.com/xunit"&gt;xunit&lt;/a&gt;, &lt;a href="http://www.asp.net/ajax/"&gt;Ajax
stuff&lt;/a&gt;, &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython"&gt;IronPython&lt;/a&gt;, &lt;a href="http://www.entityspaces.net/Portal/Default.aspx"&gt;EntitySpaces&lt;/a&gt;,
etc.). But even after making sure Silverlight and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=25144C27-6514-4AD4-8BCB-E2E051416E03&amp;amp;displaylang=en"&gt;Silverlight
Tools for Visual Studio Alpha&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
If you have such a &lt;b&gt;InteropServices.COMException&lt;/b&gt;, 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).&lt;br&gt;
&lt;br&gt;
Hope this helps (phase stolen from &lt;a href="http://weblogs.asp.net/scottgu/"&gt;ScottGu&lt;/a&gt;,
btw: really cool stuff going on over there, the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx"&gt;ASP.NET
MVC framework&lt;/a&gt; is nice and &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx"&gt;the
.NET Framework SourceCode&lt;/a&gt; is very helpful!)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=c81aabe2-e19c-4639-9b09-908378bf1fb1" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,c81aabe2-e19c-4639-9b09-908378bf1fb1.aspx</comments>
      <category>Ajax;All;Development;IronPython;Programming;Reviews;Silverlight;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=11a36dbc-948c-4de6-94c6-58210ce0936b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,11a36dbc-948c-4de6-94c6-58210ce0936b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,11a36dbc-948c-4de6-94c6-58210ce0936b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=11a36dbc-948c-4de6-94c6-58210ce0936b</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.gamesindustry.biz/images/xna%20new.jpg" style="float:right; margin:5px;" /> As
mentioned <a href="http://www.microsoft.com/Presspass/press/2007/dec07/12-12XNAGS20PR.mspx">here
in the official press message from Microsoft</a> XNA 2.0 was released today after
a very short beta phase which did only run for a few weeks.<br /><br />
You can download <a href="http://creators.xna.com/Education/GettingStarted.aspx">XNA
2.0 from Creators.Xna.Com</a>, but for now it just says "<span id="ctl00_ctl00_bcr_ContentPart3"><font color="#eb7337">XNA
Game Studio 2.0 will be available early morning, Thursday Dec 13th, 2007 PST.</font></span>".
This will hopefully change soon ^^<br /><br /><a href="http://creators.xna.com/Education/GettingStarted.aspx">http://creators.xna.com/Education/GettingStarted.aspx</a><br /><p></p>
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.<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=11a36dbc-948c-4de6-94c6-58210ce0936b" /></body>
      <title>XNA 2.0 released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,11a36dbc-948c-4de6-94c6-58210ce0936b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/12/13/XNA20Released.aspx</link>
      <pubDate>Thu, 13 Dec 2007 08:35:44 GMT</pubDate>
      <description>&lt;img src='http://www.gamesindustry.biz/images/xna%20new.jpg' style='float:right; margin:5px;' /&gt; As
mentioned &lt;a href="http://www.microsoft.com/Presspass/press/2007/dec07/12-12XNAGS20PR.mspx"&gt;here
in the official press message from Microsoft&lt;/a&gt; XNA 2.0 was released today after
a very short beta phase which did only run for a few weeks.&lt;br&gt;
&lt;br&gt;
You can download &lt;a href="http://creators.xna.com/Education/GettingStarted.aspx"&gt;XNA
2.0 from Creators.Xna.Com&lt;/a&gt;, but for now it just says "&lt;span id="ctl00_ctl00_bcr_ContentPart3"&gt;&lt;font color="#eb7337"&gt;XNA
Game Studio 2.0 will be available early morning, Thursday Dec 13th, 2007 PST.&lt;/font&gt;&lt;/span&gt;".
This will hopefully change soon ^^&lt;br&gt;
&lt;br&gt;
&lt;a href="http://creators.xna.com/Education/GettingStarted.aspx"&gt;http://creators.xna.com/Education/GettingStarted.aspx&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
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.&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=11a36dbc-948c-4de6-94c6-58210ce0936b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,11a36dbc-948c-4de6-94c6-58210ce0936b.aspx</comments>
      <category>All;Development;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=780f02f6-ba94-4410-baf6-cafc5c098367</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,780f02f6-ba94-4410-baf6-cafc5c098367.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,780f02f6-ba94-4410-baf6-cafc5c098367.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=780f02f6-ba94-4410-baf6-cafc5c098367</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.gamesindustry.biz/images/xna%20new.jpg" style="float:right; margin-left:10px" /> The
long awaited XNA Game Studio 2.0 beta is now available and can be downloaded from
the XNA Creators Club website: <a href="http://creators.xna.com/beta/betahome.aspx">http://creators.xna.com/beta/betahome.aspx</a><br /><br />
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.<br /><br />
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).<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=780f02f6-ba94-4410-baf6-cafc5c098367" /></body>
      <title>XNA Game Studio 2.0 beta is now available</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,780f02f6-ba94-4410-baf6-cafc5c098367.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/11/20/XNAGameStudio20BetaIsNowAvailable.aspx</link>
      <pubDate>Tue, 20 Nov 2007 12:24:41 GMT</pubDate>
      <description>&lt;img src='http://www.gamesindustry.biz/images/xna%20new.jpg' style='float:right; margin-left:10px' /&gt; The
long awaited XNA Game Studio 2.0 beta is now available and can be downloaded from
the XNA Creators Club website: &lt;a href="http://creators.xna.com/beta/betahome.aspx"&gt;http://creators.xna.com/beta/betahome.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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).&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=780f02f6-ba94-4410-baf6-cafc5c098367" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,780f02f6-ba94-4410-baf6-cafc5c098367.aspx</comments>
      <category>All;Development;Game Development;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=a3de41e6-2d25-42d8-8ca2-814eee20835c</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,a3de41e6-2d25-42d8-8ca2-814eee20835c.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,a3de41e6-2d25-42d8-8ca2-814eee20835c.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a3de41e6-2d25-42d8-8ca2-814eee20835c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.publicvoid.dk/content/binary/visualstudio_logo.gif" style="float: right;" /> Great
news from <a href="http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-released.aspx">ScottGu's
blog: The final Visual Studio 2008 version and .NET 3.5</a> were just released :) 
<br /><br />
I have been waiting the whole day and kept refreshing the MSDN page, but I could not
really believe that they actually ship today ^^ 
<br /><br />
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. 
<br /><br />
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: <a href="http://ironpython-urls.blogspot.com/">IronPython Url's</a><br /><br />
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.<br /><br /><b>Update 2007-11-20</b>: 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 <a href="http://weblogs.asp.net/scottgu/">ScottGu's
blog</a><br /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=a3de41e6-2d25-42d8-8ca2-814eee20835c" /></body>
      <title>Visual Studio 2008 and .NET 3.5 released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,a3de41e6-2d25-42d8-8ca2-814eee20835c.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/11/19/VisualStudio2008AndNET35Released.aspx</link>
      <pubDate>Mon, 19 Nov 2007 19:59:45 GMT</pubDate>
      <description>&lt;img src="http://www.publicvoid.dk/content/binary/visualstudio_logo.gif" style="float: right;"&gt; Great
news from &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-released.aspx"&gt;ScottGu's
blog: The final Visual Studio 2008 version and .NET 3.5&lt;/a&gt; were just released :) 
&lt;br&gt;
&lt;br&gt;
I have been waiting the whole day and kept refreshing the MSDN page, but I could not
really believe that they actually ship today ^^ 
&lt;br&gt;
&lt;br&gt;
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. 
&lt;br&gt;
&lt;br&gt;
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: &lt;a href="http://ironpython-urls.blogspot.com/"&gt;IronPython Url's&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Update 2007-11-20&lt;/b&gt;: 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 &lt;a href="http://weblogs.asp.net/scottgu/"&gt;ScottGu's
blog&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=a3de41e6-2d25-42d8-8ca2-814eee20835c" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,a3de41e6-2d25-42d8-8ca2-814eee20835c.aspx</comments>
      <category>Ajax;All;Development;IronPython;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=fc3ecad7-cf29-40df-b852-70cd6424c95e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,fc3ecad7-cf29-40df-b852-70cd6424c95e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,fc3ecad7-cf29-40df-b852-70cd6424c95e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fc3ecad7-cf29-40df-b852-70cd6424c95e</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://silverlight.net/Themes/silverlight/images/logo.jpg" style="float: right;" /> From <a href="http://nerddawg.blogspot.com/2007/09/nothing-beats-shipping-silverlight-10.html">http://nerddawg.blogspot.com/2007/09/
nothing-beats-shipping-silverlight-10.html</a>:<br />
Today Microsoft <a href="http://www.microsoft.com/presspass/press/2007/sep07/09-04SilverlightPR.mspx" title="Silverlight 1.0 press release">announced </a>the
debut release of <a href="http://www.microsoft.com/silverlight">Silverlight</a>, 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.<br /><br />
I agree with that statement, not much I can add. I'm glad to see Silverlight 1.0 is
now final and <a href="http://weblogs.asp.net/scottgu/">Scott Guthrie</a> and his
team will now focus on improving Silverlight 1.1. In our german sport community website <a href="http://meinSport.de">meinSport.de</a> we
already use Silverlight too and we plan to add even more features with that exciting
technology in the near future.<br /><br /><a href="http://www.microsoft.com/Silverlight/Install.aspx">You can get Silverlight
at Silverlight.net<br /></a><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fc3ecad7-cf29-40df-b852-70cd6424c95e" /></body>
      <title>Silverlight 1.0 Final Released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,fc3ecad7-cf29-40df-b852-70cd6424c95e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/09/05/Silverlight10FinalReleased.aspx</link>
      <pubDate>Wed, 05 Sep 2007 17:15:37 GMT</pubDate>
      <description>&lt;img src="http://silverlight.net/Themes/silverlight/images/logo.jpg" style="float: right;"&gt; From &lt;a href="http://nerddawg.blogspot.com/2007/09/nothing-beats-shipping-silverlight-10.html"&gt;http://nerddawg.blogspot.com/2007/09/
nothing-beats-shipping-silverlight-10.html&lt;/a&gt;:&lt;br&gt;
Today Microsoft &lt;a href="http://www.microsoft.com/presspass/press/2007/sep07/09-04SilverlightPR.mspx" title="Silverlight 1.0 press release"&gt;announced &lt;/a&gt;the
debut release of &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt;, 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.&lt;br&gt;
&lt;br&gt;
I agree with that statement, not much I can add. I'm glad to see Silverlight 1.0 is
now final and &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; and his
team will now focus on improving Silverlight 1.1. In our german sport community website &lt;a href="http://meinSport.de"&gt;meinSport.de&lt;/a&gt; we
already use Silverlight too and we plan to add even more features with that exciting
technology in the near future.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.microsoft.com/Silverlight/Install.aspx"&gt;You can get Silverlight
at Silverlight.net&lt;br&gt;
&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fc3ecad7-cf29-40df-b852-70cd6424c95e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,fc3ecad7-cf29-40df-b852-70cd6424c95e.aspx</comments>
      <category>All;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=9e3bfc3f-3baf-4798-938b-36693bf10008</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,9e3bfc3f-3baf-4798-938b-36693bf10008.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,9e3bfc3f-3baf-4798-938b-36693bf10008.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9e3bfc3f-3baf-4798-938b-36693bf10008</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Warning: Shameless plug ahead.<br /><br />
We at realis communities (german community website builder company, bla bla, see links
at the right side: <a href="http://meinSport.de">meinSport.de</a>, <a href="http://StudiHelp.de">StudiHelp.de</a>)
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 ^^).<br /><br /><p></p><img src="http://exdream.no-ip.info/blog/content/binary/SearchingForMeinSportCoder.png" border="0" /><br /><br />
And the same thing as a word document:<br /><a href="http://exdream.no-ip.info/blog/content/binary/SearchingForMeinSportCoder.doc">SearchingForMeinSportCoder.doc
(216.5 KB)</a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9e3bfc3f-3baf-4798-938b-36693bf10008" /></body>
      <title>Searching for a C#/ASP.NET Programmer for meinSport.de</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,9e3bfc3f-3baf-4798-938b-36693bf10008.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/09/04/SearchingForACASPNETProgrammerForMeinSportde.aspx</link>
      <pubDate>Tue, 04 Sep 2007 19:29:32 GMT</pubDate>
      <description>Warning: Shameless plug ahead.&lt;br&gt;
&lt;br&gt;
We at realis communities (german community website builder company, bla bla, see links
at the right side: &lt;a href="http://meinSport.de"&gt;meinSport.de&lt;/a&gt;, &lt;a href="http://StudiHelp.de"&gt;StudiHelp.de&lt;/a&gt;)
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 ^^).&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/SearchingForMeinSportCoder.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
And the same thing as a word document:&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/SearchingForMeinSportCoder.doc"&gt;SearchingForMeinSportCoder.doc
(216.5 KB)&lt;/a&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9e3bfc3f-3baf-4798-938b-36693bf10008" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,9e3bfc3f-3baf-4798-938b-36693bf10008.aspx</comments>
      <category>All;Development;Programming;Reviews;StudiHelp.de;meinSport.de</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=1f011f48-dedb-4ea5-bc5d-51245bb6f52e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,1f011f48-dedb-4ea5-bc5d-51245bb6f52e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,1f011f48-dedb-4ea5-bc5d-51245bb6f52e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1f011f48-dedb-4ea5-bc5d-51245bb6f52e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
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 :)
</p>
        <p>
          <a href="http://www.ziggyware.com/news.php?readmore=407">http://www.ziggyware.com/news.php?readmore=407</a>
        </p>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1f011f48-dedb-4ea5-bc5d-51245bb6f52e" />
      </body>
      <title>Lots of Information about XNA 2.0</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,1f011f48-dedb-4ea5-bc5d-51245bb6f52e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/08/16/LotsOfInformationAboutXNA20.aspx</link>
      <pubDate>Thu, 16 Aug 2007 20:59:02 GMT</pubDate>
      <description>&lt;p&gt;
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 :)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ziggyware.com/news.php?readmore=407"&gt;http://www.ziggyware.com/news.php?readmore=407&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1f011f48-dedb-4ea5-bc5d-51245bb6f52e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,1f011f48-dedb-4ea5-bc5d-51245bb6f52e.aspx</comments>
      <category>All;Development;Game Development;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=005392e3-336b-4237-ab63-ab366a1fcefe</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,005392e3-336b-4237-ab63-ab366a1fcefe.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,005392e3-336b-4237-ab63-ab366a1fcefe.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=005392e3-336b-4237-ab63-ab366a1fcefe</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <span id="article_content">
            <font color="darkblue" face="Verdana, Arial, Helvetica, sans-serif" size="5">
              <b>
                <a href="http://www.code-magazine.com/article.aspx?quickid=0709041&amp;page=1">Microsoft
XNA: Ready for Prime Time?</a>
                <br />
                <br />
              </b>
            </font>
          </span>
        </font> 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.<br />
Together with 6 other guys I was interviewed about my experiences with XNA and the
development process of the<br />
XNA Racing Game and Dungeon Quest, which are 2 of the best looking XNA games so far
:)<br /><br />
Check it out, good work Nick Landry.<br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=005392e3-336b-4237-ab63-ab366a1fcefe" /></body>
      <title>CoDe Magazine: Microsoft XNA: Ready for Prime Time?</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,005392e3-336b-4237-ab63-ab366a1fcefe.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/08/09/CoDeMagazineMicrosoftXNAReadyForPrimeTime.aspx</link>
      <pubDate>Thu, 09 Aug 2007 18:43:04 GMT</pubDate>
      <description>&lt;font face="Verdana, Arial, Helvetica, sans-serif" size="2"&gt;&lt;span id="article_content"&gt;&lt;font color="darkblue" face="Verdana, Arial, Helvetica, sans-serif" size="5"&gt;&lt;b&gt;&lt;a href="http://www.code-magazine.com/article.aspx?quickid=0709041&amp;amp;page=1"&gt;Microsoft
XNA: Ready for Prime Time?&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; 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.&lt;br&gt;
Together with 6 other guys I was interviewed about my experiences with XNA and the
development process of the&lt;br&gt;
XNA Racing Game and Dungeon Quest, which are 2 of the best looking XNA games so far
:)&lt;br&gt;
&lt;br&gt;
Check it out, good work Nick Landry.&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=005392e3-336b-4237-ab63-ab366a1fcefe" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,005392e3-336b-4237-ab63-ab366a1fcefe.aspx</comments>
      <category>All;Development;Game Development;Programming;Racing Game;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=30ba6cdc-0565-4701-8b72-643700a2cedf</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,30ba6cdc-0565-4701-8b72-643700a2cedf.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,30ba6cdc-0565-4701-8b72-643700a2cedf.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=30ba6cdc-0565-4701-8b72-643700a2cedf</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Hey! Finally some News about Game Development
again. All this Silverlight and VS2008 stuff is nice, but XNA has become pretty popular
recently (lots of posts in blogs, more articles everywhere and a lot more news).<br /><br />
Anyway, I wanted to release the Dungeon Quest Source Code for several months now,
but I never found the time to package everything up, do some cleanup and release it.
Recently some people have requested the source code and emails keep coming in. To
finally make everyone happy, here is the new Dungeon Quest version with some nice
additions, much cleaner code with quite a lot of refactoring and some nice unit tests
(see below). This version also does not require PS3.0 anymore, you can now run Dungeon
Quest on a PS2.0 graphic card!<br /><br />
First of all: The downloads, all of them can be found on <a href="http://XnaProjects.net">XnaProjects.net</a> too:<br /><ul><li><a href="http://ArenaWars.net/XnaProjects/DungeonQuestSetup.exe">DungeonQuestSetup.exe
(40 MB)</a>: Game installer for Windows with everything you need to play.<br /><br /></li><li><a href="http://ArenaWars.net/XnaProjects/DungeonQuestSourceCodeAndContent.zip">DungeonQuestSourceCodeAndContent.zip
(103 MB)</a>: Full Dungeon Quest source code with all content files.<br />
Please note that the collada files (xml text format) and the sound/music are very
big (extracted ~200 MB).<br />
This download also contains the full game in the bin/debug/ directory, you only need
to download this file<br />
for development and testing.<br />
Contains solution and project files for VS2005, VC# Express (XNA Express) and Xbox
360!<br /><br /></li><li><a href="http://ArenaWars.net/XnaProjects/DungeonQuest.wmv">DungeonQuest.wmv (21 MB)</a>:
Higher quality version of the YouTube video below<br /><br /></li></ul>
Here is the good old YouTube video from the game to give you a first view if you don't
know about Dungeon Quest yet.<br /><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/FO1PNgIwjB4" /><param name="wmode" value="transparent" /><embed src="http://www.youtube.com/v/FO1PNgIwjB4" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"></embed></object><br /><br /><br />
If you want to drive into the source code I highly recommend starting all the unit
tests in Program.cs after checking out the directory structure of the project:<br /><br /><ul><li><b>UIManager.TestUI();<br /></b>Show the graphical user interface of the game (boxes for health, player values,
rpg levels, etc.)<br /><br /></li></ul><ul><li><b>ShaderTests.TestNormalMappingShader();<br /></b>Test the normal mapping shader, for more shader tests check out the XNA Rocket
Commander and XNA Racing Game projects.<br /><br /></li></ul><ul><li><b>ColladaModel.TestCaveColladaModelScene();<br /></b>This tests the big cave collada file (80 MB) and renders it with the cave shader.
Looks very nice.<br /><br /></li></ul><ul><li><b>ColladaModel.TestLoadStaticModel();<br /></b>This is straight from the SkiningColladaModelsWithXNA project from February. This
test show shows a static collada model.<br /><br /></li></ul><ul><li><b>AnimatedColladaModel.TestPlayerColladaModelScene();<br /></b>Also from the SkinningColladaModelsWithXNA project. This shows the player or the
goblins running, dying, staying, etc.<br />
This is a useful unit test to test animations for skinned collada models.<br /><br /></li></ul><ul><li><b>PostScreenGlow.TestPostScreenGlow();<br /></b>Test post screen glow, more details can be found in the Rocket Commander tutorials
and most of my XNA projects.<br /><b><br /></b></li></ul><ul><li><b>PlaneRenderer.TestRenderingPlaneXY();<br /></b>Test to render a plane on the ground, which is also used in some other tests.
Also good for testing shaders.<br /><b><br /></b></li></ul><ul><li><b>ShadowMapShader.TestShadowMapping();<br /></b>Test Shadow Mapping unit test, pretty complex stuff, but kinda nice for this game.
More details can be found in my book, this is a complex topic and involves a lot of
finetuning to get it right.<br /><b><br /></b></li></ul><ul><li><b>EffectManager.TestEffects();<br /></b>Since DungeonQuest uses some effects for fire, smoke, blood, etc. it has a simple
effect system build in. Use this test to see whats possible and to extend the effect
system.<br /><b><br /></b></li></ul><ul><li><b>StringHelper.TestConvertStringToFloatArray();<br /></b>An example of a dynamic unit test, which can also be started from NUnit or TestDriven.Net
(right click if you have the addin installed).<br /><br /></li></ul><ul><li><b>Sound.TestPlaySounds();<br /></b>And another test to play the sound effects used in the game, just press A, B,
1, 2, 3, etc. to play sounds.<br /><b><br /></b></li></ul><ul><li><b>ColladaModel.TestCaveColladaModelSceneSplitScreen();<br /></b>This test shows how the engine supports split screen support, but it was never
fully implemented into the game itself yet.<br />
To finish this the game logic + handling input from 2nd player has to be implemented.</li></ul><br />
Some Screenshots from the <a href="http://exdream.no-ip.info/blog/2007/03/16/TheDungeonQuestGame.aspx">last
post on my blog about Dungeon Quest</a>:<br /><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0001.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001small.jpg" border="0" /></a><br />
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!<br /></p><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0004.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004small.jpg" border="0" /></a><br />
First quest completed. This key is important to open the door to the second level.<br /></p><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0006.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006small.jpg" border="0" /></a><br />
Nonstop fighting action. Well, at least if you don't lose your way.<br /></p><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0009.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009small.jpg" border="0" /></a><br />
This is how it looks like after I got angry. I told those guys, don't start any fights!<br /></p><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0011.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011small.jpg" border="0" /></a><br />
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.<br /></p><p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0012.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012small.jpg" border="0" /></a><br />
The credit screen when the game ends. Notice my book :)<br /></p><a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0016.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016small.jpg" border="0" /></a><br />
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.<br /><br />
I hope you like Dungeon Quest and that the source code can be useful for your XNA
projects. Enjoy!<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=30ba6cdc-0565-4701-8b72-643700a2cedf" /></body>
      <title>Dungeon Quest Updated with Source Code now</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,30ba6cdc-0565-4701-8b72-643700a2cedf.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/31/DungeonQuestUpdatedWithSourceCodeNow.aspx</link>
      <pubDate>Tue, 31 Jul 2007 06:35:30 GMT</pubDate>
      <description>Hey! Finally some News about Game Development again. All this Silverlight and VS2008 stuff is nice, but XNA has become pretty popular recently (lots of posts in blogs, more articles everywhere and a lot more news).&lt;br&gt;
&lt;br&gt;
Anyway, I wanted to release the Dungeon Quest Source Code for several months now,
but I never found the time to package everything up, do some cleanup and release it.
Recently some people have requested the source code and emails keep coming in. To
finally make everyone happy, here is the new Dungeon Quest version with some nice
additions, much cleaner code with quite a lot of refactoring and some nice unit tests
(see below). This version also does not require PS3.0 anymore, you can now run Dungeon
Quest on a PS2.0 graphic card!&lt;br&gt;
&lt;br&gt;
First of all: The downloads, all of them can be found on &lt;a href="http://XnaProjects.net"&gt;XnaProjects.net&lt;/a&gt; too:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://ArenaWars.net/XnaProjects/DungeonQuestSetup.exe"&gt;DungeonQuestSetup.exe
(40 MB)&lt;/a&gt;: Game installer for Windows with everything you need to play.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://ArenaWars.net/XnaProjects/DungeonQuestSourceCodeAndContent.zip"&gt;DungeonQuestSourceCodeAndContent.zip
(103 MB)&lt;/a&gt;: Full Dungeon Quest source code with all content files.&lt;br&gt;
Please note that the collada files (xml text format) and the sound/music are very
big (extracted ~200 MB).&lt;br&gt;
This download also contains the full game in the bin/debug/ directory, you only need
to download this file&lt;br&gt;
for development and testing.&lt;br&gt;
Contains solution and project files for VS2005, VC# Express (XNA Express) and Xbox
360!&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://ArenaWars.net/XnaProjects/DungeonQuest.wmv"&gt;DungeonQuest.wmv (21 MB)&lt;/a&gt;:
Higher quality version of the YouTube video below&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
Here is the good old YouTube video from the game to give you a first view if you don't
know about Dungeon Quest yet.&lt;br&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/FO1PNgIwjB4"&gt;
&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/FO1PNgIwjB4" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;
&lt;/object&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
If you want to drive into the source code I highly recommend starting all the unit
tests in Program.cs after checking out the directory structure of the project:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;UIManager.TestUI();&lt;br&gt;
&lt;/b&gt;Show the graphical user interface of the game (boxes for health, player values,
rpg levels, etc.)&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;ShaderTests.TestNormalMappingShader();&lt;br&gt;
&lt;/b&gt;Test the normal mapping shader, for more shader tests check out the XNA Rocket
Commander and XNA Racing Game projects.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;ColladaModel.TestCaveColladaModelScene();&lt;br&gt;
&lt;/b&gt;This tests the big cave collada file (80 MB) and renders it with the cave shader.
Looks very nice.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;ColladaModel.TestLoadStaticModel();&lt;br&gt;
&lt;/b&gt;This is straight from the SkiningColladaModelsWithXNA project from February. This
test show shows a static collada model.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;AnimatedColladaModel.TestPlayerColladaModelScene();&lt;br&gt;
&lt;/b&gt;Also from the SkinningColladaModelsWithXNA project. This shows the player or the
goblins running, dying, staying, etc.&lt;br&gt;
This is a useful unit test to test animations for skinned collada models.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;PostScreenGlow.TestPostScreenGlow();&lt;br&gt;
&lt;/b&gt;Test post screen glow, more details can be found in the Rocket Commander tutorials
and most of my XNA projects.&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;PlaneRenderer.TestRenderingPlaneXY();&lt;br&gt;
&lt;/b&gt;Test to render a plane on the ground, which is also used in some other tests.
Also good for testing shaders.&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;ShadowMapShader.TestShadowMapping();&lt;br&gt;
&lt;/b&gt;Test Shadow Mapping unit test, pretty complex stuff, but kinda nice for this game.
More details can be found in my book, this is a complex topic and involves a lot of
finetuning to get it right.&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;EffectManager.TestEffects();&lt;br&gt;
&lt;/b&gt;Since DungeonQuest uses some effects for fire, smoke, blood, etc. it has a simple
effect system build in. Use this test to see whats possible and to extend the effect
system.&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;StringHelper.TestConvertStringToFloatArray();&lt;br&gt;
&lt;/b&gt;An example of a dynamic unit test, which can also be started from NUnit or TestDriven.Net
(right click if you have the addin installed).&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Sound.TestPlaySounds();&lt;br&gt;
&lt;/b&gt;And another test to play the sound effects used in the game, just press A, B,
1, 2, 3, etc. to play sounds.&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;ColladaModel.TestCaveColladaModelSceneSplitScreen();&lt;br&gt;
&lt;/b&gt;This test shows how the engine supports split screen support, but it was never
fully implemented into the game itself yet.&lt;br&gt;
To finish this the game logic + handling input from 2nd player has to be implemented.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
Some Screenshots from the &lt;a href="http://exdream.no-ip.info/blog/2007/03/16/TheDungeonQuestGame.aspx"&gt;last
post on my blog about Dungeon Quest&lt;/a&gt;:&lt;br&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0001.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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!&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0004.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
First quest completed. This key is important to open the door to the second level.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0006.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Nonstop fighting action. Well, at least if you don't lose your way.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0009.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
This is how it looks like after I got angry. I told those guys, don't start any fights!&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0011.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0012.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
The credit screen when the game ends. Notice my book :)&lt;br&gt;
&lt;/p&gt;
&lt;a href="http://exdream.no-ip.info/blog/ct.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b&amp;amp;url=http%3a%2f%2fexdream.no-ip.info%2fblog%2fcontent%2fbinary%2fDungeonQuestScreenshot0016.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
I hope you like Dungeon Quest and that the source code can be useful for your XNA
projects. Enjoy!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=30ba6cdc-0565-4701-8b72-643700a2cedf" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,30ba6cdc-0565-4701-8b72-643700a2cedf.aspx</comments>
      <category>All;Development;Game Development;Programming;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5a146202-65f6-429e-84d1-acaa1a866d05</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5a146202-65f6-429e-84d1-acaa1a866d05.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5a146202-65f6-429e-84d1-acaa1a866d05.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5a146202-65f6-429e-84d1-acaa1a866d05</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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:<br /><ul><li>
Replace Silverlight.js with the newer version from alpha refresh (you probably have
done that already)</li></ul><ul><li>
Replace Sys.Silverlight.createObjectEx with Silverlight.createObjectEx in all your
.js files</li></ul><ul><li>
Also replace all version="0.95" with version="1.1" in all .js files!</li></ul><ul><li>
Finally replace enableHtmlAccess: true with enableHtmlAccess: "true"<br />
This change is very important and will finally get rid of the Html access restricted
error above.<br />
If you like the error, you can "enable" it again by setting enableHtmlAccess to "false"
^^</li></ul><br />
There are probably much more little changes and fixes, but this should get the simpler
pages up and running again.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5a146202-65f6-429e-84d1-acaa1a866d05" /></body>
      <title>Migrating from Silverlight 1.1 alpha to 1.1 alpha refresh and that lovely AG_E_RUNTIME_ HTML_ACCESS_RESTRICTED error</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5a146202-65f6-429e-84d1-acaa1a866d05.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/29/MigratingFromSilverlight11AlphaTo11AlphaRefreshAndThatLovelyAGERUNTIMEHTMLACCESSRESTRICTEDError.aspx</link>
      <pubDate>Sun, 29 Jul 2007 18:57:29 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Replace Silverlight.js with the newer version from alpha refresh (you probably have
done that already)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Replace Sys.Silverlight.createObjectEx with Silverlight.createObjectEx in all your
.js files&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Also replace all version="0.95" with version="1.1" in all .js files!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Finally replace enableHtmlAccess: true with enableHtmlAccess: "true"&lt;br&gt;
This change is very important and will finally get rid of the Html access restricted
error above.&lt;br&gt;
If you like the error, you can "enable" it again by setting enableHtmlAccess to "false"
^^&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
There are probably much more little changes and fixes, but this should get the simpler
pages up and running again.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5a146202-65f6-429e-84d1-acaa1a866d05" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5a146202-65f6-429e-84d1-acaa1a866d05.aspx</comments>
      <category>All;Development;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d7585559-9415-4f62-9f0b-76777de1621b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d7585559-9415-4f62-9f0b-76777de1621b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d7585559-9415-4f62-9f0b-76777de1621b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d7585559-9415-4f62-9f0b-76777de1621b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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.<br /><br />
Download links:<br /><ul><li><a href="http://go.microsoft.com/fwlink/?LinkID=89015&amp;clcid=0x409">Silverlight
1.0 RC (for da browser)<br /></a></li><li><a href="http://go.microsoft.com/fwlink/?LinkID=88986&amp;clcid=0x409">Silverlight
1.1 Alpha Refresh (for da browser)<br /></a></li><li><a href="http://go.microsoft.com/fwlink/?LinkID=89145&amp;clcid=0x409">Silverlight
1.1 Alpha Refresh SDK (some new samples and updated code)<br /></a></li><li><a href="http://go.microsoft.com/fwlink/?LinkID=79076&amp;clcid=0x409">Blend 2 Preview
(August CTP, important for designers)</a></li><li><a href="http://go.microsoft.com/fwlink/?LinkID=89149&amp;clcid=0x409">Microsoft Silverlight
Tools Alpha for VS2008 Beta 2 (for Alpha Refresh, July 2007)</a></li><li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A5189BCB-EF81-4C12-9733-E294D13A58E6&amp;displaylang=en">Microsoft
ASP.NET Futures (July 2007, also kinda important for ASP.NET Ajax and Silverlight)</a><br /></li></ul>
Seen first on:<br /><ul><li><a href="http://www.codeflakes.net/blog/">http://www.codeflakes.net/blog/<br /></a></li><li><a href="http://silverlight.net/blogs/jesseliberty/archive/2007/07/27/silverlight-1-0-rc-and-1-1-alpha-refresh.aspx">http://silverlight.net/blogs/jesseliberty/archive/2007/07/27/<br />
silverlight-1-0-rc-and-1-1-alpha-refresh.aspx</a><br /></li></ul>
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.<br /><ul><li><a href="http://weblogs.asp.net/scottgu/archive/2007/07/28/nice-vs-2008-code-editing-improvements.aspx">Scott
Gu's Blog about VS2008 Intellisense</a><br /></li></ul><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d7585559-9415-4f62-9f0b-76777de1621b" /></body>
      <title>Silverlight 1.0 RC and 1.1 Alpha Refresh released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d7585559-9415-4f62-9f0b-76777de1621b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/29/Silverlight10RCAnd11AlphaRefreshReleased.aspx</link>
      <pubDate>Sun, 29 Jul 2007 12:43:40 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
Download links:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=89015&amp;amp;clcid=0x409"&gt;Silverlight
1.0 RC (for da browser)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=88986&amp;amp;clcid=0x409"&gt;Silverlight
1.1 Alpha Refresh (for da browser)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=89145&amp;amp;clcid=0x409"&gt;Silverlight
1.1 Alpha Refresh SDK (some new samples and updated code)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=79076&amp;amp;clcid=0x409"&gt;Blend 2 Preview
(August CTP, important for designers)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=89149&amp;amp;clcid=0x409"&gt;Microsoft Silverlight
Tools Alpha for VS2008 Beta 2 (for Alpha Refresh, July 2007)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A5189BCB-EF81-4C12-9733-E294D13A58E6&amp;amp;displaylang=en"&gt;Microsoft
ASP.NET Futures (July 2007, also kinda important for ASP.NET Ajax and Silverlight)&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
Seen first on:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.codeflakes.net/blog/"&gt;http://www.codeflakes.net/blog/&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://silverlight.net/blogs/jesseliberty/archive/2007/07/27/silverlight-1-0-rc-and-1-1-alpha-refresh.aspx"&gt;http://silverlight.net/blogs/jesseliberty/archive/2007/07/27/&lt;br&gt;
silverlight-1-0-rc-and-1-1-alpha-refresh.aspx&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
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.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/28/nice-vs-2008-code-editing-improvements.aspx"&gt;Scott
Gu's Blog about VS2008 Intellisense&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d7585559-9415-4f62-9f0b-76777de1621b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d7585559-9415-4f62-9f0b-76777de1621b.aspx</comments>
      <category>All;Development;Other;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=3b72e1d9-7e04-4fa8-861c-25f240848e0b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,3b72e1d9-7e04-4fa8-861c-25f240848e0b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,3b72e1d9-7e04-4fa8-861c-25f240848e0b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3b72e1d9-7e04-4fa8-861c-25f240848e0b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Great News, read all about it on Scott
Guthries Blog:<br /><a href="http://weblogs.asp.net/scottgu/archive/2007/07/26/vs-2008-and-net-3-5-beta-2-released.aspx">http://weblogs.asp.net/scottgu/archive/2007/07/26/<br />
vs-2008-and-net-3-5-beta-2-released.aspx</a><br /><br />
It features major improvements to ASP.NET Ajax, Linq, the build in Webdesigner and
CSS/Javascript.<br />
Seems like nothing for Silverlight yet, still awaiting some updates there :)<br /><br />
Have to check VS 2008 out now ^^<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3b72e1d9-7e04-4fa8-861c-25f240848e0b" /></body>
      <title>VS 2008 and .NET 3.5 Beta 2 Released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,3b72e1d9-7e04-4fa8-861c-25f240848e0b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/27/VS2008AndNET35Beta2Released.aspx</link>
      <pubDate>Fri, 27 Jul 2007 04:52:59 GMT</pubDate>
      <description>Great News, read all about it on Scott Guthries Blog:&lt;br&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/26/vs-2008-and-net-3-5-beta-2-released.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/07/26/&lt;br&gt;
vs-2008-and-net-3-5-beta-2-released.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
It features major improvements to ASP.NET Ajax, Linq, the build in Webdesigner and
CSS/Javascript.&lt;br&gt;
Seems like nothing for Silverlight yet, still awaiting some updates there :)&lt;br&gt;
&lt;br&gt;
Have to check VS 2008 out now ^^&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3b72e1d9-7e04-4fa8-861c-25f240848e0b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,3b72e1d9-7e04-4fa8-861c-25f240848e0b.aspx</comments>
      <category>Ajax;All;Development;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=66be904a-7091-4a08-87ed-4d21a93c61a6</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,66be904a-7091-4a08-87ed-4d21a93c61a6.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,66be904a-7091-4a08-87ed-4d21a93c61a6.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=66be904a-7091-4a08-87ed-4d21a93c61a6</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Side note: <a href="http://developer.nvidia.com/object/fx_composer_home.html">FX
Composer 2 RC1 </a>is out. Check it out, works even better now.<br /><br />
I worked a bit with Silverlight 1.1 (alpha) over the last few weeks and I noticed
a lot of annoying<br />
javascript error messages with just stupid error codes and no stack trace for the
exceptions.<br />
This is definately the worst thing about Silverlight, you have to do a lot of trial
and error testing,<br />
unit testing and debugging silverlight is also hard to do.<br /><br />
I wrote down all the errors I have encountered and some solutions to them, which might
be<br />
helpful to other people coding Silverlight too. Now whenever I get an error I just
look into this<br />
list and follow the steps from top to bottom and this way I save a lot of time ^^
maybe I will<br />
also rewrite the javascript on_error code that throws these errors to a more useful
version.<br /><br />
Silverlight Error Codes:<br /><ul><li>
1001: usually AG_E_UNKNOWN_ERROR (yeah, thats really helpful)</li></ul><blockquote><ul><li>
some element is null while loading a control<br />
Fix: Check all controls constructors and fields, set breakpoints there!<br /></li></ul></blockquote><blockquote><ul><li>
Namespace duplicate found (usually error code 2254)<br />
Fix: Check all namespaces, make sure each name and namespace is only set once<br /><br /></li><li>
Control has no default Constructor and can't be instantiated<br />
Fix: Provide a default constructor with no parameters, it can be empty!<br /></li></ul></blockquote><blockquote><ul><li>
NullReferenceException (or other exceptions) happend somewhere<br />
(usually in the Control constructor somewhere)<br />
Fix: Catch the exception or set breakpoints to find it, then fix it.<br />
Often it is also useful to comment code out and test if it works again.<br /><br /></li><li>
If this all not helps and the 1001 errors keeps coming up when you use the 
<br />
control use the following approach:<br /><br />
Fix: Comment out the control, the page should now work.<br />
Comment it in again and check every single property you set, try removing<br />
as much as possible and test again. If it still does not work, check out<br />
the control itself, comment everything out here inside the control canvas.<br />
It should work now except for some errors of missing inner control names.<br />
Now slowly comment everything in again and try to see which inner control<br />
did not work. Often a depreciacted, commented out or deleted property is<br />
used and causes this error. Again try to work with as little as possible<br />
control properties and increase until the error pops up again.<br /><br />
This more complex case will hopefully not happen to you in the beginning,<br />
but the more controls you build, the more likely it is that this one<br />
will annoy the hell out of you. Keep calm and go forward as methodically<br />
as possible, it will also help you for future error encounters.<br /></li></ul></blockquote><blockquote><ul><li>
Can happen if a TargetName for a Storyboard (or something similar) cannot<br />
be found. Make sure the target control name is still valid.<br /></li></ul></blockquote><br /><ul><li>
2005:    ParserError: Unknown namespace xy</li></ul><blockquote><ul><li>
The line should tell you which namespace is unknown and this should<br />
be quite easy to fix. It usually means you have either forgotten to<br />
add a namespace or add an element into an unsupported location.<br />
E.g. adding something to a nested Canvas can sometimes cause this error.<br /></li></ul></blockquote><br /><ul><li>
2024: ParserError:</li></ul><blockquote><ul><li>
Invalid attribute value text/python, usually happens in the main xaml file.<br />
Similar to 2265, use the same fixes.<br /><br /></li><li>
It can also happen when the mime type<br />
is not available (e.g. in IIS) and .py files can't be used.<br />
Fix: Define .py as mime type in IIS as 'text/ironpython'<br /></li></ul></blockquote>        <br /><ul><li>
2101: can be:</li></ul><blockquote><ul><li>
LostFocus event (or similar) not supported here<br />
Fix: Move global events to the main canvas, they are only supported there!<br /></li></ul></blockquote><br /><ul><li>
2207: AG_E_RUNTIME_METHOD</li></ul><blockquote><ul><li>
playing media failed, unable to play it, loading probably failed with 403<br />
or 404<br /></li></ul></blockquote><br /><ul><li>
2210: AG_E_INVALID_ARGUMENT</li></ul><blockquote><ul><li>
Short: In 90% of your cases the embedded resource cannot be found, make<br />
sure that the name of your embedded resource is correct in the<br />
GetManifestResourceStream function in your control constructor. Also make<br />
sure the file is marked as an embedded resource in VS Orcas!<br /></li></ul></blockquote><blockquote><ul><li>
This means the embedded resource could not be found, which means either the<br />
call to GetManifestResourceStream uses the wrong string OR the resource<br />
is just not existant because of a wrong content type! make sure the<br />
control you are trying to access is actually an Embedded Resource and not<br />
just a Content or Silverlight Page.<br /><br />
Fix: Set control xaml as Embedded Resource and make sure all strings are<br />
correct! GetManifestResourceStream should succeed! Using the Silverlight<br />
1.1 API UI Controls is also helpful because they figure out the path<br />
for you (just leaving you with misstyping the control name or forgetting<br />
to set the embedded resource type or one of the million errors below).<br /><br />
Note: This is very annoying because SourceControl sometimes messes this up<br />
and just merges 2 files and setting it as Content or Silverlight Page,<br />
which make this error hard to track, so always check for the correct<br />
file build action first, it should always be Embedded Resource for controls.<br /></li></ul></blockquote><blockquote><ul><li>
Another way this error can happen is when inside the control a namespace<br />
error occurs (similar to 1001 or 2254), you just get 2210 and trying to<br />
find why it does not work while all names are set ok and the resource is<br />
found, etc. One example of this failing is that a namespace or assembly<br />
used inside a control to reference other controls cannot be found or is<br />
misspelled (e.g. path does not longer fit, can be stupid things like<br />
ClientBin/Some.dll should be ../ClientBin/Some.dll)<br /><br />
Fix: Check all namespaces in the control too, make sure all names are<br />
correct and files (especially assemblies) can be found the way they<br />
are specified!<br /><br />
Advanced Fix: I use reflection to find out about the class name and use<br />
that same name for the .xaml file, this way I never have to specify<br />
any name and merging files does not lead to problems as long as the xaml<br />
file has the same name as the class (which is easy to spot in VS Orcas).<br /></li></ul></blockquote><blockquote><ul><li>
Another VERY crazy way for this to happen is when one of your controls is<br />
using the partial keyword for its control class and overwrites some of the<br />
autogenerated background fields (through x:Class in the main Canvas of the<br />
control), it is probably better to always remove the partial and make sure<br />
the control is all managed by you (like in the SDK samples).<br /><br />
Fix: Remove the partial in c# and the x:Class in xaml if you get compile<br />
errors, after that it usually just works :)<br /></li></ul></blockquote><blockquote><ul><li>
Older notes (before I figured this out):<br />
Seems to happen with perfectly fine xaml code, no c# breakpoint is ever<br />
hit, so this must happen while parsing the xaml. Often also changes to error<br />
2254 if some name or namespace is wrong, but then gets back to 2210 if that<br />
is fixed.<br /></li></ul></blockquote><blockquote><ul><li>
Someone here traced the 2210 back to “InitializeFromXaml” being called<br />
with an invalid resource stream (GetManifestResourceStream), which failed<br />
one line above it:<br /><a href="http://silverlight.net/forums/t/1755.aspx">http://silverlight.net/forums/t/1755.aspx</a><br /></li></ul></blockquote>    <br /><ul><li>
2251: ParserError, AG_E_RUNTIME_MANAGED_ACTIVATION</li></ul><blockquote><ul><li>
Probably a security issue, seems to happen on a Max when the xaml file<br />
could not be loaded or accesses something that is not available (assemblies)<br />
Fix: Seems to be a Mac bug, will hopefully be fixed in the future.<br /></li></ul></blockquote>        <br /><ul><li>
2252: can be:</li></ul><blockquote><ul><li>
Canvas Load Error, canvas could not be loaded because something is wrong<br />
it may help to check out the line and error description for more details.<br />
Fix: Look through the xaml line by line, annoying, but something is wrong<br /></li></ul></blockquote><blockquote><ul><li>
AG_E_RUNTIME_MANAGED_ASSEMBLY_DOWNLOAD:<br />
When this happens the control at the line specified failed to load.<br />
This can be because it crashed somewhere in the constructor, setting a<br />
breakpoint usually tells you wether it crashed in C# or already in the<br />
xaml. If it is in the xaml, you have to figure out the error there (try<br />
to uncomment, check namings, etc.). If it happens in C# setting a<br />
breakpoint makes it much easier, but the error is still annoying. For<br />
that reason you should make sure to test your controls as much as<br />
possible before using them on a complex page.<br /><br />
Fix: Set a breakpoint in the constructor of the control and fix the<br />
exception! Or if that does not help, take a close look at the xaml<br />
and comment it out to see what works and what does not.<br /></li></ul></blockquote><blockquote><ul><li>
More help about 2252 from <a href="http://silverlight.net/forums/t/370.aspx">http://silverlight.net/forums/t/370.aspx</a><br />
Assembly loading failed, this can happen because of the IIS being<br />
misconfigured (unlikely if you doing development) or because the<br />
path to the assembly could not be found (much more likely).<br /><br />
Fix: Make sure both the page xaml and the control xaml point to the<br />
correct directory for the dll and make sure this works from the<br />
perspective of the page, not the directories the xaml files are in!<br />
In my case changing ClientBin/.dll to ../ClientBin/.dll often did<br />
the trick!<br /></li></ul></blockquote><blockquote><ul><li>
Another issue can happen when you rename the assembly, but not all the<br />
.dll links are correct. It can also be problematic if there are special<br />
letters like - in the assembly, which will get renamed to _, but the<br />
filename is still with -, see here:<br /><a href="http://silverlight.net/forums/t/370.aspx">http://silverlight.net/forums/t/370.aspx</a><br /><br />
Fix: Just check all .dll links and make sure both the name and the path<br />
are correct.<br /></li></ul></blockquote>        <br /><ul><li>
2254: AG_E_RUNTIME_MANAGER_ASSEMBLY_DOWNLOAD, can be:</li></ul><blockquote><ul><li>
Control type not found because a namespace is not set correctly, this can<br />
happen if you just copy a file from another project and do not change the<br />
namespace accordingly.<br />
Fix: Make sure all namespaces are correct (same in xaml as in the controls)<br /><br /></li><li>
Namespace duplicate found, make sure that all namespaces and names only<br />
occur once.<br />
Fix: See above 1001<br /></li></ul></blockquote>        <br /><ul><li>
2255: AG_E_PARSER_BAD_TYPE</li></ul><blockquote><ul><li>
An unsupported type was found, which usually means you are specifying a<br />
control or class for the xaml, which does not exist (anymore). Make sure<br />
that the x:Class parameter points to an existing class and uses a correct<br />
namespace.<br /></li></ul></blockquote><blockquote><ul><li>
Also seems to happen when there are multiple comment blocks mixed in the<br />
xaml file or some name contains an invalid character because of that.<br />
Clear the xaml file and test until it works again, then insert the removed<br />
code again to figure out where the error is happening. The line/position<br />
information of this error is usually not very helpful!<br /></li></ul></blockquote>        <br /><ul><li>
2265: Error: Parser code</li></ul><blockquote><ul><li>
Parsing xaml failed, this has been reported after saving some xaml in Blend<br />
but it could not be parsed in Visual Studio.<br />
Fix: Try using only parts of the xaml, use smaller files, dunno.<br /><br /></li><li>
Parsing xmal failed, some syntax error.<br />
Fix: You should be able to spot the error and fix it if it is a smaller<br />
file, for bigger files comment most of it out and comment it back in until<br />
it breaks again. Then fix the issue.<br /></li></ul></blockquote><br /><ul><li>
3001: AG_E_INVALID_FILE_FORMAT</li></ul><blockquote><ul><li>
Often a ImageError, which usually means you are trying to load an<br />
unsupported image format like the .GIF format, which is not supported<br />
by Silverlight yet.<br />
Fix: Use .PNG instead of .GIF, etc.<br /></li></ul></blockquote>        <br /><ul><li>
3002: AG_E_NOT_FOUND:</li></ul><blockquote><ul><li>
Error type should describe which kind of resource was not found (usually<br />
ImageError). Check your constructor and Page_Loaded methods and check<br />
all the files that are loaded there and make sure they exist. This is<br />
probably the equivalent of FileNotFoundException, just all the helpful<br />
information (which file, why, etc.) is missing. Sometimes the error type is<br />
confusing because it may report an ImageError, but in reality just the xaml<br />
file could not be loaded, always check the xaml file (name, loading, etc.)!<br /></li></ul></blockquote>        <br /><ul><li>
3010: can be:</li></ul><blockquote><ul><li>
Silverlight installation is not complete yet, restart browser (or computer<br />
if this error persists).<br />
Fix: Tell user to restart browser.<br /></li></ul></blockquote><br />
Link to the silverlight.net forum (post this here too), 13 known issues<br />
with Silverlight 1.1. It is good to know them:<br /><a href="http://silverlight.net/forums/t/2400.aspx">http://silverlight.net/forums/t/2400.aspx</a><br /><br />
Other helpful links:<br /><a href="http://blogs.conchango.com/stevenevans/archive/2007/06/06/Silverlight-Adventures-with-Blend.aspx">http://blogs.conchango.com/stevenevans/archive/2007/06/06/<br />
Silverlight-Adventures-with-Blend.aspx</a><br /><a href="http://www.thescripts.com/forum/thread650457.html">http://www.thescripts.com/forum/thread650457.html</a><br /><a href="http://silverlight.org/forums/t/1422.aspx">http://silverlight.org/forums/t/1422.aspx</a><br /><br />
Note: I will add more errors to this list for Silverlight 1.1 alpha, but I will probably
just<br />
write a new blog entry for newer Silverlight versions. Still pretty excited about
the new<br />
VS Orcas Beta 2 release ^^<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=66be904a-7091-4a08-87ed-4d21a93c61a6" /></body>
      <title>Silverlight Error Codes Explained!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,66be904a-7091-4a08-87ed-4d21a93c61a6.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/20/SilverlightErrorCodesExplained.aspx</link>
      <pubDate>Fri, 20 Jul 2007 23:49:28 GMT</pubDate>
      <description>Side note: &lt;a href="http://developer.nvidia.com/object/fx_composer_home.html"&gt;FX Composer
2 RC1 &lt;/a&gt;is out. Check it out, works even better now.&lt;br&gt;
&lt;br&gt;
I worked a bit with Silverlight 1.1 (alpha) over the last few weeks and I noticed
a lot of annoying&lt;br&gt;
javascript error messages with just stupid error codes and no stack trace for the
exceptions.&lt;br&gt;
This is definately the worst thing about Silverlight, you have to do a lot of trial
and error testing,&lt;br&gt;
unit testing and debugging silverlight is also hard to do.&lt;br&gt;
&lt;br&gt;
I wrote down all the errors I have encountered and some solutions to them, which might
be&lt;br&gt;
helpful to other people coding Silverlight too. Now whenever I get an error I just
look into this&lt;br&gt;
list and follow the steps from top to bottom and this way I save a lot of time ^^
maybe I will&lt;br&gt;
also rewrite the javascript on_error code that throws these errors to a more useful
version.&lt;br&gt;
&lt;br&gt;
Silverlight Error Codes:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
1001: usually AG_E_UNKNOWN_ERROR (yeah, thats really helpful)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
some element is null while loading a control&lt;br&gt;
Fix: Check all controls constructors and fields, set breakpoints there!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Namespace duplicate found (usually error code 2254)&lt;br&gt;
Fix: Check all namespaces, make sure each name and namespace is only set once&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Control has no default Constructor and can't be instantiated&lt;br&gt;
Fix: Provide a default constructor with no parameters, it can be empty!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
NullReferenceException (or other exceptions) happend somewhere&lt;br&gt;
(usually in the Control constructor somewhere)&lt;br&gt;
Fix: Catch the exception or set breakpoints to find it, then fix it.&lt;br&gt;
Often it is also useful to comment code out and test if it works again.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
If this all not helps and the 1001 errors keeps coming up when you use the 
&lt;br&gt;
control use the following approach:&lt;br&gt;
&lt;br&gt;
Fix: Comment out the control, the page should now work.&lt;br&gt;
Comment it in again and check every single property you set, try removing&lt;br&gt;
as much as possible and test again. If it still does not work, check out&lt;br&gt;
the control itself, comment everything out here inside the control canvas.&lt;br&gt;
It should work now except for some errors of missing inner control names.&lt;br&gt;
Now slowly comment everything in again and try to see which inner control&lt;br&gt;
did not work. Often a depreciacted, commented out or deleted property is&lt;br&gt;
used and causes this error. Again try to work with as little as possible&lt;br&gt;
control properties and increase until the error pops up again.&lt;br&gt;
&lt;br&gt;
This more complex case will hopefully not happen to you in the beginning,&lt;br&gt;
but the more controls you build, the more likely it is that this one&lt;br&gt;
will annoy the hell out of you. Keep calm and go forward as methodically&lt;br&gt;
as possible, it will also help you for future error encounters.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Can happen if a TargetName for a Storyboard (or something similar) cannot&lt;br&gt;
be found. Make sure the target control name is still valid.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2005:&amp;nbsp;&amp;nbsp; &amp;nbsp;ParserError: Unknown namespace xy&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
The line should tell you which namespace is unknown and this should&lt;br&gt;
be quite easy to fix. It usually means you have either forgotten to&lt;br&gt;
add a namespace or add an element into an unsupported location.&lt;br&gt;
E.g. adding something to a nested Canvas can sometimes cause this error.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2024: ParserError:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Invalid attribute value text/python, usually happens in the main xaml file.&lt;br&gt;
Similar to 2265, use the same fixes.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
It can also happen when the mime type&lt;br&gt;
is not available (e.g. in IIS) and .py files can't be used.&lt;br&gt;
Fix: Define .py as mime type in IIS as 'text/ironpython'&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2101: can be:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
LostFocus event (or similar) not supported here&lt;br&gt;
Fix: Move global events to the main canvas, they are only supported there!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2207: AG_E_RUNTIME_METHOD&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
playing media failed, unable to play it, loading probably failed with 403&lt;br&gt;
or 404&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2210: AG_E_INVALID_ARGUMENT&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Short: In 90% of your cases the embedded resource cannot be found, make&lt;br&gt;
sure that the name of your embedded resource is correct in the&lt;br&gt;
GetManifestResourceStream function in your control constructor. Also make&lt;br&gt;
sure the file is marked as an embedded resource in VS Orcas!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
This means the embedded resource could not be found, which means either the&lt;br&gt;
call to GetManifestResourceStream uses the wrong string OR the resource&lt;br&gt;
is just not existant because of a wrong content type! make sure the&lt;br&gt;
control you are trying to access is actually an Embedded Resource and not&lt;br&gt;
just a Content or Silverlight Page.&lt;br&gt;
&lt;br&gt;
Fix: Set control xaml as Embedded Resource and make sure all strings are&lt;br&gt;
correct! GetManifestResourceStream should succeed! Using the Silverlight&lt;br&gt;
1.1 API UI Controls is also helpful because they figure out the path&lt;br&gt;
for you (just leaving you with misstyping the control name or forgetting&lt;br&gt;
to set the embedded resource type or one of the million errors below).&lt;br&gt;
&lt;br&gt;
Note: This is very annoying because SourceControl sometimes messes this up&lt;br&gt;
and just merges 2 files and setting it as Content or Silverlight Page,&lt;br&gt;
which make this error hard to track, so always check for the correct&lt;br&gt;
file build action first, it should always be Embedded Resource for controls.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Another way this error can happen is when inside the control a namespace&lt;br&gt;
error occurs (similar to 1001 or 2254), you just get 2210 and trying to&lt;br&gt;
find why it does not work while all names are set ok and the resource is&lt;br&gt;
found, etc. One example of this failing is that a namespace or assembly&lt;br&gt;
used inside a control to reference other controls cannot be found or is&lt;br&gt;
misspelled (e.g. path does not longer fit, can be stupid things like&lt;br&gt;
ClientBin/Some.dll should be ../ClientBin/Some.dll)&lt;br&gt;
&lt;br&gt;
Fix: Check all namespaces in the control too, make sure all names are&lt;br&gt;
correct and files (especially assemblies) can be found the way they&lt;br&gt;
are specified!&lt;br&gt;
&lt;br&gt;
Advanced Fix: I use reflection to find out about the class name and use&lt;br&gt;
that same name for the .xaml file, this way I never have to specify&lt;br&gt;
any name and merging files does not lead to problems as long as the xaml&lt;br&gt;
file has the same name as the class (which is easy to spot in VS Orcas).&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Another VERY crazy way for this to happen is when one of your controls is&lt;br&gt;
using the partial keyword for its control class and overwrites some of the&lt;br&gt;
autogenerated background fields (through x:Class in the main Canvas of the&lt;br&gt;
control), it is probably better to always remove the partial and make sure&lt;br&gt;
the control is all managed by you (like in the SDK samples).&lt;br&gt;
&lt;br&gt;
Fix: Remove the partial in c# and the x:Class in xaml if you get compile&lt;br&gt;
errors, after that it usually just works :)&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Older notes (before I figured this out):&lt;br&gt;
Seems to happen with perfectly fine xaml code, no c# breakpoint is ever&lt;br&gt;
hit, so this must happen while parsing the xaml. Often also changes to error&lt;br&gt;
2254 if some name or namespace is wrong, but then gets back to 2210 if that&lt;br&gt;
is fixed.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Someone here traced the 2210 back to “InitializeFromXaml” being called&lt;br&gt;
with an invalid resource stream (GetManifestResourceStream), which failed&lt;br&gt;
one line above it:&lt;br&gt;
&lt;a href="http://silverlight.net/forums/t/1755.aspx"&gt;http://silverlight.net/forums/t/1755.aspx&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2251: ParserError, AG_E_RUNTIME_MANAGED_ACTIVATION&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Probably a security issue, seems to happen on a Max when the xaml file&lt;br&gt;
could not be loaded or accesses something that is not available (assemblies)&lt;br&gt;
Fix: Seems to be a Mac bug, will hopefully be fixed in the future.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2252: can be:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Canvas Load Error, canvas could not be loaded because something is wrong&lt;br&gt;
it may help to check out the line and error description for more details.&lt;br&gt;
Fix: Look through the xaml line by line, annoying, but something is wrong&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
AG_E_RUNTIME_MANAGED_ASSEMBLY_DOWNLOAD:&lt;br&gt;
When this happens the control at the line specified failed to load.&lt;br&gt;
This can be because it crashed somewhere in the constructor, setting a&lt;br&gt;
breakpoint usually tells you wether it crashed in C# or already in the&lt;br&gt;
xaml. If it is in the xaml, you have to figure out the error there (try&lt;br&gt;
to uncomment, check namings, etc.). If it happens in C# setting a&lt;br&gt;
breakpoint makes it much easier, but the error is still annoying. For&lt;br&gt;
that reason you should make sure to test your controls as much as&lt;br&gt;
possible before using them on a complex page.&lt;br&gt;
&lt;br&gt;
Fix: Set a breakpoint in the constructor of the control and fix the&lt;br&gt;
exception! Or if that does not help, take a close look at the xaml&lt;br&gt;
and comment it out to see what works and what does not.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
More help about 2252 from &lt;a href="http://silverlight.net/forums/t/370.aspx"&gt;http://silverlight.net/forums/t/370.aspx&lt;/a&gt;
&lt;br&gt;
Assembly loading failed, this can happen because of the IIS being&lt;br&gt;
misconfigured (unlikely if you doing development) or because the&lt;br&gt;
path to the assembly could not be found (much more likely).&lt;br&gt;
&lt;br&gt;
Fix: Make sure both the page xaml and the control xaml point to the&lt;br&gt;
correct directory for the dll and make sure this works from the&lt;br&gt;
perspective of the page, not the directories the xaml files are in!&lt;br&gt;
In my case changing ClientBin/.dll to ../ClientBin/.dll often did&lt;br&gt;
the trick!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Another issue can happen when you rename the assembly, but not all the&lt;br&gt;
.dll links are correct. It can also be problematic if there are special&lt;br&gt;
letters like - in the assembly, which will get renamed to _, but the&lt;br&gt;
filename is still with -, see here:&lt;br&gt;
&lt;a href="http://silverlight.net/forums/t/370.aspx"&gt;http://silverlight.net/forums/t/370.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Fix: Just check all .dll links and make sure both the name and the path&lt;br&gt;
are correct.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2254: AG_E_RUNTIME_MANAGER_ASSEMBLY_DOWNLOAD, can be:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Control type not found because a namespace is not set correctly, this can&lt;br&gt;
happen if you just copy a file from another project and do not change the&lt;br&gt;
namespace accordingly.&lt;br&gt;
Fix: Make sure all namespaces are correct (same in xaml as in the controls)&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Namespace duplicate found, make sure that all namespaces and names only&lt;br&gt;
occur once.&lt;br&gt;
Fix: See above 1001&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2255: AG_E_PARSER_BAD_TYPE&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
An unsupported type was found, which usually means you are specifying a&lt;br&gt;
control or class for the xaml, which does not exist (anymore). Make sure&lt;br&gt;
that the x:Class parameter points to an existing class and uses a correct&lt;br&gt;
namespace.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Also seems to happen when there are multiple comment blocks mixed in the&lt;br&gt;
xaml file or some name contains an invalid character because of that.&lt;br&gt;
Clear the xaml file and test until it works again, then insert the removed&lt;br&gt;
code again to figure out where the error is happening. The line/position&lt;br&gt;
information of this error is usually not very helpful!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
2265: Error: Parser code&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Parsing xaml failed, this has been reported after saving some xaml in Blend&lt;br&gt;
but it could not be parsed in Visual Studio.&lt;br&gt;
Fix: Try using only parts of the xaml, use smaller files, dunno.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Parsing xmal failed, some syntax error.&lt;br&gt;
Fix: You should be able to spot the error and fix it if it is a smaller&lt;br&gt;
file, for bigger files comment most of it out and comment it back in until&lt;br&gt;
it breaks again. Then fix the issue.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
3001: AG_E_INVALID_FILE_FORMAT&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Often a ImageError, which usually means you are trying to load an&lt;br&gt;
unsupported image format like the .GIF format, which is not supported&lt;br&gt;
by Silverlight yet.&lt;br&gt;
Fix: Use .PNG instead of .GIF, etc.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
3002: AG_E_NOT_FOUND:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Error type should describe which kind of resource was not found (usually&lt;br&gt;
ImageError). Check your constructor and Page_Loaded methods and check&lt;br&gt;
all the files that are loaded there and make sure they exist. This is&lt;br&gt;
probably the equivalent of FileNotFoundException, just all the helpful&lt;br&gt;
information (which file, why, etc.) is missing. Sometimes the error type is&lt;br&gt;
confusing because it may report an ImageError, but in reality just the xaml&lt;br&gt;
file could not be loaded, always check the xaml file (name, loading, etc.)!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
3010: can be:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
Silverlight installation is not complete yet, restart browser (or computer&lt;br&gt;
if this error persists).&lt;br&gt;
Fix: Tell user to restart browser.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Link to the silverlight.net forum (post this here too), 13 known issues&lt;br&gt;
with Silverlight 1.1. It is good to know them:&lt;br&gt;
&lt;a href="http://silverlight.net/forums/t/2400.aspx"&gt;http://silverlight.net/forums/t/2400.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Other helpful links:&lt;br&gt;
&lt;a href="http://blogs.conchango.com/stevenevans/archive/2007/06/06/Silverlight-Adventures-with-Blend.aspx"&gt;http://blogs.conchango.com/stevenevans/archive/2007/06/06/&lt;br&gt;
Silverlight-Adventures-with-Blend.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.thescripts.com/forum/thread650457.html"&gt;http://www.thescripts.com/forum/thread650457.html&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://silverlight.org/forums/t/1422.aspx"&gt;http://silverlight.org/forums/t/1422.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Note: I will add more errors to this list for Silverlight 1.1 alpha, but I will probably
just&lt;br&gt;
write a new blog entry for newer Silverlight versions. Still pretty excited about
the new&lt;br&gt;
VS Orcas Beta 2 release ^^&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=66be904a-7091-4a08-87ed-4d21a93c61a6" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,66be904a-7091-4a08-87ed-4d21a93c61a6.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=753a7839-18ed-4623-8a79-6c9f81dff953</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,753a7839-18ed-4623-8a79-6c9f81dff953.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,753a7839-18ed-4623-8a79-6c9f81dff953.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=753a7839-18ed-4623-8a79-6c9f81dff953</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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!).<br /><br />
This tool does not do much, but it is still very useful like the <a href="http://exdream.no-ip.info/blog/2007/04/06/AnnoyingFilesRemoverTool.aspx">AnnoyingFilesRemover</a>.
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 :)<br /><br />
The tool looks like this, the most useful button is "Save and Open Project", which
convert and then starts the selected VS version:<br /><p></p><a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChangerSetup.zip"><img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectChanger.png" border="0" /></a><br /><br />
And here is the installer plus source code:<br /><ul><li><a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChangerSetup.zip">XnaProjectChangerSetup.zip
(79.76 KB)</a></li></ul><ul><li><a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChanger.zip">XnaProjectChanger.zip
(34.95 KB)</a></li></ul><br />
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).<br /><br />
You can also use the also use the XNA Content Builder to create .xnb files yourself:<br /><a href="http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=XNA%20Content%20Builder%20%28XCB%29">http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=XNA%20Content%20Builder%20(XCB)</a><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=753a7839-18ed-4623-8a79-6c9f81dff953" /></body>
      <title>Xna Project Changer Tool (with VS 2008 support)</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,753a7839-18ed-4623-8a79-6c9f81dff953.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/19/XnaProjectChangerToolWithVS2008Support.aspx</link>
      <pubDate>Thu, 19 Jul 2007 03:21:43 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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!).&lt;br&gt;
&lt;br&gt;
This tool does not do much, but it is still very useful like the &lt;a href="http://exdream.no-ip.info/blog/2007/04/06/AnnoyingFilesRemoverTool.aspx"&gt;AnnoyingFilesRemover&lt;/a&gt;.
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 :)&lt;br&gt;
&lt;br&gt;
The tool looks like this, the most useful button is "Save and Open Project", which
convert and then starts the selected VS version:&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChangerSetup.zip"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectChanger.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
And here is the installer plus source code:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChangerSetup.zip"&gt;XnaProjectChangerSetup.zip
(79.76 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/XnaProjectChanger.zip"&gt;XnaProjectChanger.zip
(34.95 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
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).&lt;br&gt;
&lt;br&gt;
You can also use the also use the XNA Content Builder to create .xnb files yourself:&lt;br&gt;
&lt;a href="http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=XNA%20Content%20Builder%20%28XCB%29"&gt;http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=XNA%20Content%20Builder%20(XCB)&lt;/a&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=753a7839-18ed-4623-8a79-6c9f81dff953" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,753a7839-18ed-4623-8a79-6c9f81dff953.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=0fe65b3e-7d53-49d5-a001-c2d4b8cece7d</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,0fe65b3e-7d53-49d5-a001-c2d4b8cece7d.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,0fe65b3e-7d53-49d5-a001-c2d4b8cece7d.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0fe65b3e-7d53-49d5-a001-c2d4b8cece7d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">When you try to implement a Silverlight
project into an existing ASP.NET Ajax<br />
website you will just click Add Silverlight link to a specific directory in your<br />
website (don't spam everything into your main directory). Then you might want<br />
to use same the html code from your test sites in the ASPX page, like this:<br /><b><br />
&lt;head runat="server"&gt;<br />
  &lt;title&gt;Some title&lt;/title&gt;<br />
  &lt;script type="text/javascript" src="Silverlight.js"&gt;&lt;/script&gt;<br />
  &lt;script type="text/javascript" src="Default.aspx.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;</b><br /><br />
And the SilverlightControlHost somewhere in the body (in the form).<br />
You also might want to move the body onload method to a div panel in case you<br />
are using a master page or you want multiple silverlight controls:<br /><br />
  <b>      &lt;div id="SilverlightControlHost"<br />
            onload="document.getElementById('SilverlightControl').focus()"&gt;<br />
            &lt;script type="text/javascript"&gt;<br />
                createSilverlight();<br />
            &lt;/script&gt;<br />
        &lt;/div&gt;</b><br /><br />
You might be able to compile and start that without any problems, BUT if you<br />
already have a lot of ASP.NET Ajax code you might end up with this error (and<br />
a bunch more, most of them with Sys.Res in the error description).<br /><b><br />
Line: 967<br />
Error: Sys.Res.namespaceContainsObject is null or not an object<br /></b><br /><img src="http://exdream.no-ip.info/blog/content/binary/SilverlightScriptSysResError.png" border="0" /><br /><br />
The problem is that both Silverlight and some generated ASP.NET Ajax javascript<br />
files use the same javascript object (Sys.Res), but overwrite it and disable the<br />
functionality that is needed. You won't find much information on that with<br />
google, but the solution is very simple! Just put the scripts directly into<br />
your ScriptManager of the site like this and remove the scripts from the header:<br /><br /><b>        &lt;asp:ScriptManager ID="ScriptManager1"
runat="server"&gt;<br />
            &lt;Scripts&gt;<br />
                &lt;asp:ScriptReference
Path="Silverlight.js" /&gt;<br />
                &lt;asp:ScriptReference
Path="Default.aspx.js" /&gt;<br />
            &lt;/Scripts&gt;<br />
        &lt;/asp:ScriptManager&gt;</b><br />
        <br />
Hope this helps and saves you some time.<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=0fe65b3e-7d53-49d5-a001-c2d4b8cece7d" /></body>
      <title>Fixing the Sys.Res. namespaceContainsObject error with ASP.NET Ajax+Silverlight</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,0fe65b3e-7d53-49d5-a001-c2d4b8cece7d.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/17/FixingTheSysResNamespaceContainsObjectErrorWithASPNETAjaxSilverlight.aspx</link>
      <pubDate>Tue, 17 Jul 2007 18:58:07 GMT</pubDate>
      <description>When you try to implement a Silverlight project into an existing ASP.NET Ajax&lt;br&gt;
website you will just click Add Silverlight link to a specific directory in your&lt;br&gt;
website (don't spam everything into your main directory). Then you might want&lt;br&gt;
to use same the html code from your test sites in the ASPX page, like this:&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&amp;lt;head runat="server"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;title&amp;gt;Some title&amp;lt;/title&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;script type="text/javascript" src="Silverlight.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;script type="text/javascript" src="Default.aspx.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;
&amp;lt;/head&amp;gt;&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
And the SilverlightControlHost somewhere in the body (in the form).&lt;br&gt;
You also might want to move the body onload method to a div panel in case you&lt;br&gt;
are using a master page or you want multiple silverlight controls:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;b&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;div id="SilverlightControlHost"&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;onload="document.getElementById('SilverlightControl').focus()"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;createSilverlight();&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/script&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
You might be able to compile and start that without any problems, BUT if you&lt;br&gt;
already have a lot of ASP.NET Ajax code you might end up with this error (and&lt;br&gt;
a bunch more, most of them with Sys.Res in the error description).&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
Line: 967&lt;br&gt;
Error: Sys.Res.namespaceContainsObject is null or not an object&lt;br&gt;
&lt;/b&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/SilverlightScriptSysResError.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
The problem is that both Silverlight and some generated ASP.NET Ajax javascript&lt;br&gt;
files use the same javascript object (Sys.Res), but overwrite it and disable the&lt;br&gt;
functionality that is needed. You won't find much information on that with&lt;br&gt;
google, but the solution is very simple! Just put the scripts directly into&lt;br&gt;
your ScriptManager of the site like this and remove the scripts from the header:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;asp:ScriptManager ID="ScriptManager1"
runat="server"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Scripts&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ScriptReference
Path="Silverlight.js" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ScriptReference
Path="Default.aspx.js" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/Scripts&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/asp:ScriptManager&amp;gt;&lt;/b&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
Hope this helps and saves you some time.&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=0fe65b3e-7d53-49d5-a001-c2d4b8cece7d" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,0fe65b3e-7d53-49d5-a001-c2d4b8cece7d.aspx</comments>
      <category>Ajax;All;Development;Programming;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=28fc066a-3a82-4973-90c6-664ee9905bf4</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,28fc066a-3a82-4973-90c6-664ee9905bf4.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,28fc066a-3a82-4973-90c6-664ee9905bf4.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=28fc066a-3a82-4973-90c6-664ee9905bf4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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.<br /><br />
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.<br /><br />
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.<br /><br />
RegionAddin Hotkeys:<br /><ul><li>
Ctrl+1, Ctrl+2: Comment code like CR_Commenter (not implemented yet, it is commented
out, too much features from CR_Commenter missing).</li><li>
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</li><li>
Ctrl+4: Collapse or expand the current region you are in</li><li>
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</li><li>
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 ...<br /></li></ul><br />
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.<br /><br /><p></p><img src="http://exdream.no-ip.info/blog/content/binary/IronPythonRegions600.jpg" border="0" /><br /><br /><br />
As always here is the full SourceCode and a Installer:<br /><ul><li>
   <a href="http://exdream.no-ip.info/blog/content/binary/RegionAddinSourceCode.zip">RegionAddinSourceCode.zip
(25.67 KB)<br /><br /></a></li><li>
   <a href="http://exdream.no-ip.info/blog/content/binary/RegionAddinSetup.exe">RegionAddinSetup.exe
(80.1 KB)<br /></a></li></ul>
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++.<br /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=28fc066a-3a82-4973-90c6-664ee9905bf4" /></body>
      <title>RegionAddin to fix collapsing and expanding regions in Orcas and IronPython region support!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,28fc066a-3a82-4973-90c6-664ee9905bf4.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/09/RegionAddinToFixCollapsingAndExpandingRegionsInOrcasAndIronPythonRegionSupport.aspx</link>
      <pubDate>Mon, 09 Jul 2007 18:19:33 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
RegionAddin Hotkeys:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Ctrl+1, Ctrl+2: Comment code like CR_Commenter (not implemented yet, it is commented
out, too much features from CR_Commenter missing).&lt;/li&gt;
&lt;li&gt;
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&lt;/li&gt;
&lt;li&gt;
Ctrl+4: Collapse or expand the current region you are in&lt;/li&gt;
&lt;li&gt;
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&lt;/li&gt;
&lt;li&gt;
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 ...&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/IronPythonRegions600.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
As always here is the full SourceCode and a Installer:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&amp;nbsp;&amp;nbsp; &lt;a href="http://exdream.no-ip.info/blog/content/binary/RegionAddinSourceCode.zip"&gt;RegionAddinSourceCode.zip
(25.67 KB)&lt;br&gt;
&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&amp;nbsp;&amp;nbsp; &lt;a href="http://exdream.no-ip.info/blog/content/binary/RegionAddinSetup.exe"&gt;RegionAddinSetup.exe
(80.1 KB)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
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++.&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=28fc066a-3a82-4973-90c6-664ee9905bf4" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,28fc066a-3a82-4973-90c6-664ee9905bf4.aspx</comments>
      <category>All;Development;IronPython;Other;Programming;Reviews;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=7bd830fe-0fa6-4339-9836-35ff4d7c1382</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,7bd830fe-0fa6-4339-9836-35ff4d7c1382.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,7bd830fe-0fa6-4339-9836-35ff4d7c1382.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7bd830fe-0fa6-4339-9836-35ff4d7c1382</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="https://mvp.support.microsoft.com/">
          <img src="pics/MVPLogo.jpg" style="border: 0px none ; float: right;" />
        </a> Yeah!
I have been awarded as a <a href="https://mvp.support.microsoft.com/">MVP (Most Valueable
Professional)</a> by Microsoft in the Windows - DirectX Category again.<br />
Last year I got this award and each year it is renewed (or not) if you are still great
enough ^^<br /><br />
I guess mainly my XNA projects and the Professional XNA Game Programming book are
the reason to become MVP again.<br />
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.<br /><br />
A nice warm thank you to all people happy with my work and publications and thanks
so much to Microsoft for awarding me again.<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p></p><hints id="hah_hints"></hints><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7bd830fe-0fa6-4339-9836-35ff4d7c1382" /></body>
      <title>MVP again!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,7bd830fe-0fa6-4339-9836-35ff4d7c1382.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/07/09/MVPAgain.aspx</link>
      <pubDate>Mon, 09 Jul 2007 13:33:12 GMT</pubDate>
      <description>&lt;a href="https://mvp.support.microsoft.com/"&gt;&lt;img src="pics/MVPLogo.jpg" style="border: 0px none ; float: right;"&gt;&lt;/a&gt; Yeah!
I have been awarded as a &lt;a href="https://mvp.support.microsoft.com/"&gt;MVP (Most Valueable
Professional)&lt;/a&gt; by Microsoft in the Windows - DirectX Category again.&lt;br&gt;
Last year I got this award and each year it is renewed (or not) if you are still great
enough ^^&lt;br&gt;
&lt;br&gt;
I guess mainly my XNA projects and the Professional XNA Game Programming book are
the reason to become MVP again.&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
A nice warm thank you to all people happy with my work and publications and thanks
so much to Microsoft for awarding me again.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hints id="hah_hints"&gt;
&lt;/hints&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7bd830fe-0fa6-4339-9836-35ff4d7c1382" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,7bd830fe-0fa6-4339-9836-35ff4d7c1382.aspx</comments>
      <category>All;Development;Other;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=6d95b5e3-8359-4976-b6b7-6f318289e638</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,6d95b5e3-8359-4976-b6b7-6f318289e638.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,6d95b5e3-8359-4976-b6b7-6f318289e638.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6d95b5e3-8359-4976-b6b7-6f318289e638</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had often the problem that after a while of using Visual Studio 2005 (especially
in beta) and now with Visual Studio Orcas that when the solution grows and grows to
many projects you encounter the following error quite often:
</p>
        <p>
          <b>Unable to copy file "obj\Debug\&lt;projectname&gt;</b>
          <b>.dll" to "bin\Debug\&lt;projectname&gt;</b>
          <b>.dll".</b>
        </p>
        <p>
          <b>The process cannot access the file 'bin\Debug\&lt;projectname&gt;</b>
          <b>.dll' because
it is being used by another process.</b>
        </p>
This can be caused if you have not closed the app yet or use the dll/exe somewhere
or even if a unit test is still running and does not quit. But these cases are not
the problem, that is easily fixed by killing the process. More often this is caused
by some bug in Visual Studio. Some designer locked the file, some resource was not
released, etc.<br />
The usual "solution" to this problem was to close Visual Studio and start it up again,
then it worked for a while until you end up with the same issue. Just having 2-3 projects
in a solution is not very problematic because this error just occurs once in a while.
With 5+ projects and using a lot of unit testing, starting tests all over the place,
and compiling every couple of minutes (or seconds) this is really an annoying problem
that can slow you down.<br /><br />
The easy fix is to delete the &lt;projectname&gt;.dll.locked file in the bin\Debug\
directory, after that compiling works again and it can copy the file now.<br />
A better and more clever solution is to add the following lines to each Pre-Build-Events
texbox in each project:<b><br /></b><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> exist <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath).locked"</span> del <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath).locked"</span><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> exist <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath)"</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> not
exist <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath).locked"</span> move <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath)"</span><span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"$(TargetPath).locked"</span></span></p>
After doing that no more "<b>Unable to copy file</b>" errors anymore :)<br /><br />
BTW: My last attempt to polynap recently (1.5 hours sleep every 6 hours) failed after
doing it for about a week, have to find a better schedule, maybe every 4 hours was
a better idea because it was more strict.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=6d95b5e3-8359-4976-b6b7-6f318289e638" /></body>
      <title>Quick Tip: Getting rid of the "Unable to copy file" error in Visual Studio</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,6d95b5e3-8359-4976-b6b7-6f318289e638.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/21/QuickTipGettingRidOfTheUnableToCopyFileErrorInVisualStudio.aspx</link>
      <pubDate>Thu, 21 Jun 2007 18:59:03 GMT</pubDate>
      <description>&lt;p&gt;
I had often the problem that after a while of using Visual Studio 2005 (especially
in beta) and now with Visual Studio Orcas that when the solution grows and grows to
many projects you encounter the following error quite often:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Unable to copy file "obj\Debug\&amp;lt;projectname&amp;gt;&lt;/b&gt;&lt;b&gt;.dll" to "bin\Debug\&amp;lt;projectname&amp;gt;&lt;/b&gt;&lt;b&gt;.dll".&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;The process cannot access the file 'bin\Debug\&amp;lt;projectname&amp;gt;&lt;/b&gt;&lt;b&gt;.dll' because
it is being used by another process.&lt;/b&gt;
&lt;/p&gt;
This can be caused if you have not closed the app yet or use the dll/exe somewhere
or even if a unit test is still running and does not quit. But these cases are not
the problem, that is easily fixed by killing the process. More often this is caused
by some bug in Visual Studio. Some designer locked the file, some resource was not
released, etc.&lt;br&gt;
The usual "solution" to this problem was to close Visual Studio and start it up again,
then it worked for a while until you end up with the same issue. Just having 2-3 projects
in a solution is not very problematic because this error just occurs once in a while.
With 5+ projects and using a lot of unit testing, starting tests all over the place,
and compiling every couple of minutes (or seconds) this is really an annoying problem
that can slow you down.&lt;br&gt;
&lt;br&gt;
The easy fix is to delete the &amp;lt;projectname&amp;gt;.dll.locked file in the bin\Debug\
directory, after that compiling works again and it can copy the file now.&lt;br&gt;
A better and more clever solution is to add the following lines to each Pre-Build-Events
texbox in each project:&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; exist &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath).locked"&lt;/span&gt; del &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath).locked"&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; exist &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath)"&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; not
exist &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath).locked"&lt;/span&gt; move &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath)"&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"$(TargetPath).locked"&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
After doing that no more "&lt;b&gt;Unable to copy file&lt;/b&gt;" errors anymore :)&lt;br&gt;
&lt;br&gt;
BTW: My last attempt to polynap recently (1.5 hours sleep every 6 hours) failed after
doing it for about a week, have to find a better schedule, maybe every 4 hours was
a better idea because it was more strict.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=6d95b5e3-8359-4976-b6b7-6f318289e638" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,6d95b5e3-8359-4976-b6b7-6f318289e638.aspx</comments>
      <category>All;Development;Polynapping;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=14529361-1295-4229-8ed4-4101f91ea2dd</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,14529361-1295-4229-8ed4-4101f91ea2dd.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,14529361-1295-4229-8ed4-4101f91ea2dd.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=14529361-1295-4229-8ed4-4101f91ea2dd</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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.<br /><br /><a href="http://developer.nvidia.com/object/fx_composer_home.html#downloads">http://developer.nvidia.com/object/fx_composer_home.html#downloads<br /><br /><img src="http://www.nvidia.com/dev_content/blast/img/2007/6/ShaderPerf4.jpg" border="0" height="240" width="310" /></a><br /><br />
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.<br /><br />
Mental Mill:<p></p><img src="http://exdream.no-ip.info/blog/content/binary/MentalMill.jpg" border="0" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=14529361-1295-4229-8ed4-4101f91ea2dd" /></body>
      <title>FX Composer 2!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,14529361-1295-4229-8ed4-4101f91ea2dd.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/17/FXComposer2.aspx</link>
      <pubDate>Sun, 17 Jun 2007 11:30:48 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://developer.nvidia.com/object/fx_composer_home.html#downloads"&gt;http://developer.nvidia.com/object/fx_composer_home.html#downloads&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.nvidia.com/dev_content/blast/img/2007/6/ShaderPerf4.jpg" border="0" height="240" width="310"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
Mental Mill:&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/MentalMill.jpg" border="0"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=14529361-1295-4229-8ed4-4101f91ea2dd" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,14529361-1295-4229-8ed4-4101f91ea2dd.aspx</comments>
      <category>All;Development;Game Development;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=33f4c796-2431-4665-9b0f-c12aadaa8f1e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,33f4c796-2431-4665-9b0f-c12aadaa8f1e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,33f4c796-2431-4665-9b0f-c12aadaa8f1e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=33f4c796-2431-4665-9b0f-c12aadaa8f1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I recently had the problem that a directory
called "Cache" was always adding new files automatically<br />
and adding them like crazy to our source control system. It was really annoying because
we do not<br />
need those cache files in source control and every developer had his own cache files,
which always<br />
had to be replaced. The simple solution is to make the folder <b>hidden</b>, this
way it does not show up<br />
in visual studio (except you show hidden files) and this way it does not get added
to the source<br />
control system.<br /><br />
Works with SourceSafe, Vault, Perforce and SubVersion.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=33f4c796-2431-4665-9b0f-c12aadaa8f1e" /></body>
      <title>Quick Tip: Exclude Files and Folders from Source Control</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,33f4c796-2431-4665-9b0f-c12aadaa8f1e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/16/QuickTipExcludeFilesAndFoldersFromSourceControl.aspx</link>
      <pubDate>Sat, 16 Jun 2007 15:05:19 GMT</pubDate>
      <description>I recently had the problem that a directory called "Cache" was always adding new files automatically&lt;br&gt;
and adding them like crazy to our source control system. It was really annoying because
we do not&lt;br&gt;
need those cache files in source control and every developer had his own cache files,
which always&lt;br&gt;
had to be replaced. The simple solution is to make the folder &lt;b&gt;hidden&lt;/b&gt;, this
way it does not show up&lt;br&gt;
in visual studio (except you show hidden files) and this way it does not get added
to the source&lt;br&gt;
control system.&lt;br&gt;
&lt;br&gt;
Works with SourceSafe, Vault, Perforce and SubVersion.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=33f4c796-2431-4665-9b0f-c12aadaa8f1e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,33f4c796-2431-4665-9b0f-c12aadaa8f1e.aspx</comments>
      <category>All;Development;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=7f81cd8c-b29f-41ac-93b4-03b6f59f8017</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,7f81cd8c-b29f-41ac-93b4-03b6f59f8017.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,7f81cd8c-b29f-41ac-93b4-03b6f59f8017.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7f81cd8c-b29f-41ac-93b4-03b6f59f8017</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://studihelp.de/blog/content/binary/microsoft_silverlight.jpg" border="0" />
        <br />
        <br />
Couple of tips if you want to debug Silverlight applications in Visual Studio. Please
note I have not worked myself with Silverlight much, I was just observing my colleagues
and helping them out when they were unable to debug their Silverlight code.<br /><br /><ul><li>
First of all: Visual Studio 2005 is NOT supported, you need Visual Studio Orcas Beta
1 (see my last 2 posts about it)<br /><br /></li><li>
You need the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=6c2b309b-8f2d-44a5-b04f-836f0d4ec1c4&amp;displaylang=en">VS_SilverlightTools_Alpha_Setup.exe</a> setup
file to get started with silverlight and allow debugging<br /><br /></li><li>
The XAML designer view never seems to work and it usually does not even show up. If
you want to hide it, switch the design and xaml views and then click the button on
the very right to hide the design view on the bottom.<br /><br /></li><li>
Most importantly: If debugging does not work for you make sure that:<br /><br /></li><ul><li>
Close ALL your instances of Firefox and Internet Explorer first. Then start the debugger
of VS Orcas with F5 and let it create a new instance of your browser. This is VERY
important because if you leave the browser open and start to set some breakpoints
and debug the application, it won't work. Every time you press F5 in VS Orcas to start
the project a new browser instance must be created, else debugging is just skipped
and you just see the website, the debugger ends immediately. I tested it with Internet
Explorer first, but Firefox is ok too if you can live with the constant opening and
closing. For me it is much more comfortable to use Firefox for browsing and then Internet
Explorer for testing the Silverlight stuff.<br /><br /></li><li>
Your project/website/etc. does not contain any spaces. Like the .NET 3.5 installation
there are still issues with spaces. Just make sure there are none. This wasn't a problem
at my PC, but on a Vista machine it caused problems.<br /><br /></li><li>
Exceptions seem to be ignored and there seems to be some Exception-Eating-Monster
in the Silverlight runtime because no matter what happens or what you throw, it will
not be passed to the debugger. Instead it just seems to end the debugging session
and shows the page as far as it got. It is probably best to catch all exceptions yourself
and display them in some label or flush them to a log file ..</li></ul></ul><br /><img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=1f5d61a9-2708-47f8-bf17-1ed3c7f23ea9" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7f81cd8c-b29f-41ac-93b4-03b6f59f8017" /></body>
      <title>Debugging Silverlight in Visual Studio</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,7f81cd8c-b29f-41ac-93b4-03b6f59f8017.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/08/DebuggingSilverlightInVisualStudio.aspx</link>
      <pubDate>Fri, 08 Jun 2007 10:46:55 GMT</pubDate>
      <description>&lt;img src="http://studihelp.de/blog/content/binary/microsoft_silverlight.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Couple of tips if you want to debug Silverlight applications in Visual Studio. Please
note I have not worked myself with Silverlight much, I was just observing my colleagues
and helping them out when they were unable to debug their Silverlight code.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
First of all: Visual Studio 2005 is NOT supported, you need Visual Studio Orcas Beta
1 (see my last 2 posts about it)&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
You need the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=6c2b309b-8f2d-44a5-b04f-836f0d4ec1c4&amp;amp;displaylang=en"&gt;VS_SilverlightTools_Alpha_Setup.exe&lt;/a&gt; setup
file to get started with silverlight and allow debugging&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
The XAML designer view never seems to work and it usually does not even show up. If
you want to hide it, switch the design and xaml views and then click the button on
the very right to hide the design view on the bottom.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Most importantly: If debugging does not work for you make sure that:&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Close ALL your instances of Firefox and Internet Explorer first. Then start the debugger
of VS Orcas with F5 and let it create a new instance of your browser. This is VERY
important because if you leave the browser open and start to set some breakpoints
and debug the application, it won't work. Every time you press F5 in VS Orcas to start
the project a new browser instance must be created, else debugging is just skipped
and you just see the website, the debugger ends immediately. I tested it with Internet
Explorer first, but Firefox is ok too if you can live with the constant opening and
closing. For me it is much more comfortable to use Firefox for browsing and then Internet
Explorer for testing the Silverlight stuff.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Your project/website/etc. does not contain any spaces. Like the .NET 3.5 installation
there are still issues with spaces. Just make sure there are none. This wasn't a problem
at my PC, but on a Vista machine it caused problems.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Exceptions seem to be ignored and there seems to be some Exception-Eating-Monster
in the Silverlight runtime because no matter what happens or what you throw, it will
not be passed to the debugger. Instead it just seems to end the debugging session
and shows the page as far as it got. It is probably best to catch all exceptions yourself
and display them in some label or flush them to a log file ..&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=1f5d61a9-2708-47f8-bf17-1ed3c7f23ea9"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7f81cd8c-b29f-41ac-93b4-03b6f59f8017" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,7f81cd8c-b29f-41ac-93b4-03b6f59f8017.aspx</comments>
      <category>All;Development;Programming;Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=29e8a720-7a7a-4681-98b0-57b892b1e038</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,29e8a720-7a7a-4681-98b0-57b892b1e038.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,29e8a720-7a7a-4681-98b0-57b892b1e038.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=29e8a720-7a7a-4681-98b0-57b892b1e038</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://studihelp.de/blog/content/binary/VsOrcas.png" border="0" />
        <br />
After installing <a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx">Visual
Studio Orcas Beta 1</a> on Windows Vista you might run into the following problem
after just creating a ASP.NET webpage (or a <a href="http://www.asp.net/downloads/futures/default.aspx">ASP.NET
Futures</a> or ASP.NET Ajax webpage, doesn't matter). This happend on a fresh Vista
installation with just Visual Studio Orcas installed:<br /><br /><img src="http://studihelp.de/blog/content/binary/VsOrcasChildNodesNotAllowed.png" border="0" height="168" width="641" /><br /><br />
Visual Studio Orcas Beta 1 is not able to recognize the compiler settings in the web.config
file, but the exact same file runs fine in Windows XP.<br /><br /><img src="http://studihelp.de/blog/content/binary/VsOrcasWebConfigCompilersError.png" border="0" /><br /><br />
There are a couple of guys in the MSDN Forums having the same problem, but not solution
there yet:<br /><ul><li><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1683227&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1683227&amp;SiteID=1</a></li><li><a href="http://forums.asp.net/p/1114611/1733120.aspx">http://forums.asp.net/p/1114611/1733120.aspx</a></li><li><a href="http://blogs.msdn.com/vstsqualitytools/archive/2007/04/26/known-issues-and-workarounds-for-orcas-beta1-asp-net.aspx">http://blogs.msdn.com/vstsqualitytools/archive/2007/04/26/<br />
known-issues-and-workarounds-for-orcas-beta1-asp-net.aspx</a></li><li><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1312399&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1312399&amp;SiteID=1</a></li><li><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1354397&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1354397&amp;SiteID=1</a></li></ul>
After reading those you might think that the .NET 3.5 Framework installation might
be messed up, but everything else just works fine on Vista and you can create all
kinds of projects including silverlight, wpf, forms, etc. with .NET 2.0, 3.0 and 3.5.
We tried to uninstall Orcas and .NET 3.5 several times, reinstalling it, etc., but
that did not help with the problem.<br /><br />
The relatively easy solution to all this is not to install XP (which probably some
people did and I still use XP on my main development PC because of too many issues
with drivers, games and applications), but to create a simple ASP.NET (or ASP.NET
Ajax or ASP.NET Futures) in Visual Studio 2005 (which you have to install first, if
you just have VS Orcas yet) and then to just load it with Visual Studio Orcas!<br /><br />
1. Start VS 2005 and Create a new website project:<br /><br /><img src="http://studihelp.de/blog/content/binary/CreateAspNetProject.png" border="0" /><br /><br />
2. Open as existing website in VS Orcas Beta 1:<br /><br /><img src="http://studihelp.de/blog/content/binary/OpenExistingWebsiteProject.png" border="0" /><br /><br />
3. You can compile and run the project now (and even add silverlight links and do
whatever you want, it will run just fine), but you might get a warning that "System.Web.Extensions,
Version=1.0.61025.0" was not found and that the website will use the "2.0.0.0" version
instead.<br />
Ignore the warning or just replace all "1.0.61025.0" with "2.0.0.0" texts in the web.config
to get rid of it.<br /><br />
Hope this helps :)<img src="http://studihelp.de/blog/cptrk.ashx?id=2f46886f-c0cd-4db5-a9dc-f2dca25f0487" height="0" width="0" /><hints id="hah_hints"></hints><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=29e8a720-7a7a-4681-98b0-57b892b1e038" /></body>
      <title>Fixing the "Child nodes not allowed." bug in Visual Studio Orcas under Vista</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,29e8a720-7a7a-4681-98b0-57b892b1e038.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/07/FixingTheChildNodesNotAllowedBugInVisualStudioOrcasUnderVista.aspx</link>
      <pubDate>Thu, 07 Jun 2007 08:36:53 GMT</pubDate>
      <description>&lt;img src="http://studihelp.de/blog/content/binary/VsOrcas.png" border="0"&gt;
&lt;br&gt;
After installing &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;Visual
Studio Orcas Beta 1&lt;/a&gt; on Windows Vista you might run into the following problem
after just creating a ASP.NET webpage (or a &lt;a href="http://www.asp.net/downloads/futures/default.aspx"&gt;ASP.NET
Futures&lt;/a&gt; or ASP.NET Ajax webpage, doesn't matter). This happend on a fresh Vista
installation with just Visual Studio Orcas installed:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://studihelp.de/blog/content/binary/VsOrcasChildNodesNotAllowed.png" border="0" height="168" width="641"&gt;
&lt;br&gt;
&lt;br&gt;
Visual Studio Orcas Beta 1 is not able to recognize the compiler settings in the web.config
file, but the exact same file runs fine in Windows XP.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://studihelp.de/blog/content/binary/VsOrcasWebConfigCompilersError.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
There are a couple of guys in the MSDN Forums having the same problem, but not solution
there yet:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1683227&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1683227&amp;amp;SiteID=1&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.asp.net/p/1114611/1733120.aspx"&gt;http://forums.asp.net/p/1114611/1733120.aspx&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2007/04/26/known-issues-and-workarounds-for-orcas-beta1-asp-net.aspx"&gt;http://blogs.msdn.com/vstsqualitytools/archive/2007/04/26/&lt;br&gt;
known-issues-and-workarounds-for-orcas-beta1-asp-net.aspx&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1312399&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1312399&amp;amp;SiteID=1&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1354397&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1354397&amp;amp;SiteID=1&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
After reading those you might think that the .NET 3.5 Framework installation might
be messed up, but everything else just works fine on Vista and you can create all
kinds of projects including silverlight, wpf, forms, etc. with .NET 2.0, 3.0 and 3.5.
We tried to uninstall Orcas and .NET 3.5 several times, reinstalling it, etc., but
that did not help with the problem.&lt;br&gt;
&lt;br&gt;
The relatively easy solution to all this is not to install XP (which probably some
people did and I still use XP on my main development PC because of too many issues
with drivers, games and applications), but to create a simple ASP.NET (or ASP.NET
Ajax or ASP.NET Futures) in Visual Studio 2005 (which you have to install first, if
you just have VS Orcas yet) and then to just load it with Visual Studio Orcas!&lt;br&gt;
&lt;br&gt;
1. Start VS 2005 and Create a new website project:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://studihelp.de/blog/content/binary/CreateAspNetProject.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
2. Open as existing website in VS Orcas Beta 1:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://studihelp.de/blog/content/binary/OpenExistingWebsiteProject.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
3. You can compile and run the project now (and even add silverlight links and do
whatever you want, it will run just fine), but you might get a warning that "System.Web.Extensions,
Version=1.0.61025.0" was not found and that the website will use the "2.0.0.0" version
instead.&lt;br&gt;
Ignore the warning or just replace all "1.0.61025.0" with "2.0.0.0" texts in the web.config
to get rid of it.&lt;br&gt;
&lt;br&gt;
Hope this helps :)&lt;img src="http://studihelp.de/blog/cptrk.ashx?id=2f46886f-c0cd-4db5-a9dc-f2dca25f0487" height="0" width="0"&gt;
&lt;hints id="hah_hints"&gt;
&lt;/hints&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=29e8a720-7a7a-4681-98b0-57b892b1e038" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,29e8a720-7a7a-4681-98b0-57b892b1e038.aspx</comments>
      <category>All;Development;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=1ba24296-df8f-40c6-8f30-5dff3b429add</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,1ba24296-df8f-40c6-8f30-5dff3b429add.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,1ba24296-df8f-40c6-8f30-5dff3b429add.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1ba24296-df8f-40c6-8f30-5dff3b429add</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/">
          <img border="0" src="http://www.hanselman.com/blog/content/binary/codeRushNunitTemplates_thumb.jpg" />
        </a>
        <br />
        <br />
Now this is really good news because I have been working with Orcas for over 2 months
now and most of the features of <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/">CodeRush </a>did
not work in Visual Studio Orcas (even with my hack I posted a few months back). The
new version of <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/">CodeRush</a>,
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 ^^). <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/">Refactor!</a> 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 :)<br /><br />
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:<br /><ul><li><a href="http://weblogs.asp.net/gmilano/archive/2006/05/10/446010.aspx">CoolCommands
3.0</a> adds some nice features to VS, mainly to improve interaction between VS, projects
and the explorer or command line<br /><br /></li><li><a href="http://www.mztools.com/index.htm">MZ-Tools</a> 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.<br /><br /></li><li><a href="http://submain.com/?nav=products.cio">CodeIt.Right and CodeIt.Once</a> 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.<br /><br /></li><li><a href="http://submain.com/?nav=products.smartoutline">SmartOutline </a>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).<br /><br /></li><li><a href="http://www.exactmagic.com/products/testmatrix/index.html">TestMatrix for
Visual Studio .NET</a> is a unit testing, code coverage and profiling addin. I'm not
sure where the profiling comes in (I got <a href="http://www.red-gate.com/products/ants_profiler/index.htm">Ants
Profiler</a> 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 <a href="http://www.testdriven.net/">TestDriven.Net</a> like
me. Code coverage can also be covered via <a href="http://ncover.org/site/">NCover</a> (a
lot of covering in this sentence ^^).<br /><a href="http://blogs.msdn.com/mikhailarkhipov/archive/2006/04/17/577471.aspx"><br /></a></li><li><a href="http://www.rthand.com/DesktopModules/Articles/ArticlesView.aspx?tabID=0&amp;alias=RightHand&amp;lang=en-US&amp;ItemID=4&amp;mid=10244">Spell
Checker</a> 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 <a href="http://www.koders.com/info.aspx?c=tools#IDEs">SpellChecker
for CodeRush from RindHand</a>, but Spell Checker is also very good.<br /><br /></li><li><a href="http://www.codekeep.net/">Koders Addin for Visual Studio 2005</a> 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.<br /><br /></li><li><a href="http://www.testdriven.net/">CodeKeep</a> 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.<br /><br /></li><li>
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 <a href="http://www.codeproject.com/csharp/LineCounterAddin.asp">TestDriven.Net</a>, <a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/">LineCounter</a>, <a href="http://www.wholetomato.com/">CodeRush</a>, <a href="http://www.codesmithtools.com/">VisualAssist</a> (for
C++), <a href="http://tempuri.org/tempuri.html">CodeSmith </a>and more. They are still
great addins, no reason to mention them again, you know them probably already ^^<br /></li></ul>
Take care.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1ba24296-df8f-40c6-8f30-5dff3b429add" /></body>
      <title>CodeRush has now VS Orcas support</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,1ba24296-df8f-40c6-8f30-5dff3b429add.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/06/06/CodeRushHasNowVSOrcasSupport.aspx</link>
      <pubDate>Wed, 06 Jun 2007 07:33:41 GMT</pubDate>
      <description>&lt;a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/"&gt;&lt;img border="0" src="http://www.hanselman.com/blog/content/binary/codeRushNunitTemplates_thumb.jpg" /&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Now this is really good news because I have been working with Orcas for over 2 months
now and most of the features of &lt;a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/"&gt;CodeRush &lt;/a&gt;did
not work in Visual Studio Orcas (even with my hack I posted a few months back). The
new version of &lt;a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/"&gt;CodeRush&lt;/a&gt;,
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 ^^). &lt;a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/"&gt;Refactor!&lt;/a&gt; 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 :)&lt;br&gt;
&lt;br&gt;
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:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://weblogs.asp.net/gmilano/archive/2006/05/10/446010.aspx"&gt;CoolCommands
3.0&lt;/a&gt; adds some nice features to VS, mainly to improve interaction between VS, projects
and the explorer or command line&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.mztools.com/index.htm"&gt;MZ-Tools&lt;/a&gt; is a great addin for Visual
Studio I never have heard of before (and I know a lot of addins).&amp;nbsp; 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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://submain.com/?nav=products.cio"&gt;CodeIt.Right and CodeIt.Once&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://submain.com/?nav=products.smartoutline"&gt;SmartOutline &lt;/a&gt;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).&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.exactmagic.com/products/testmatrix/index.html"&gt;TestMatrix for
Visual Studio .NET&lt;/a&gt; is a unit testing, code coverage and profiling addin. I'm not
sure where the profiling comes in (I got &lt;a href="http://www.red-gate.com/products/ants_profiler/index.htm"&gt;Ants
Profiler&lt;/a&gt; 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 &lt;a href="http://www.testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; like
me. Code coverage can also be covered via &lt;a href="http://ncover.org/site/"&gt;NCover&lt;/a&gt; (a
lot of covering in this sentence ^^).&lt;br&gt;
&lt;a href="http://blogs.msdn.com/mikhailarkhipov/archive/2006/04/17/577471.aspx"&gt;
&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rthand.com/DesktopModules/Articles/ArticlesView.aspx?tabID=0&amp;amp;alias=RightHand&amp;amp;lang=en-US&amp;amp;ItemID=4&amp;amp;mid=10244"&gt;Spell
Checker&lt;/a&gt; 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 &lt;a href="http://www.koders.com/info.aspx?c=tools#IDEs"&gt;SpellChecker
for CodeRush from RindHand&lt;/a&gt;, but Spell Checker is also very good.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.codekeep.net/"&gt;Koders Addin for Visual Studio 2005&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.testdriven.net/"&gt;CodeKeep&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
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 &lt;a href="http://www.codeproject.com/csharp/LineCounterAddin.asp"&gt;TestDriven.Net&lt;/a&gt;, &lt;a href="http://www.devexpress.com/Products/NET/IDETools/CodeRush/"&gt;LineCounter&lt;/a&gt;, &lt;a href="http://www.wholetomato.com/"&gt;CodeRush&lt;/a&gt;, &lt;a href="http://www.codesmithtools.com/"&gt;VisualAssist&lt;/a&gt; (for
C++), &lt;a href="http://tempuri.org/tempuri.html"&gt;CodeSmith &lt;/a&gt;and more. They are still
great addins, no reason to mention them again, you know them probably already ^^&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
Take care.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1ba24296-df8f-40c6-8f30-5dff3b429add" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,1ba24296-df8f-40c6-8f30-5dff3b429add.aspx</comments>
      <category>All;Development;Other;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=8f10f43b-2863-4503-b6c4-3f0aa14539d0</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,8f10f43b-2863-4503-b6c4-3f0aa14539d0.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,8f10f43b-2863-4503-b6c4-3f0aa14539d0.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8f10f43b-2863-4503-b6c4-3f0aa14539d0</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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.<br /><br />
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.<br /><p>
First of all, I'm exclusively using <b>Visual Studio Orcas</b> now. I mentioned the <a href="http://exdream.no-ip.info/blog/2007/04/04/InstallingVisualStudioOrcasMarchCTPAndGettingAddinsLikeCodeRushToWorkWithIt.aspx">Visual
Studio Orcas Beta1 a month ago</a> and explained how to import unsupported addins
and fix some issues. I did not have much time to check out <a href="http://www.microsoft.com/silverlight/">Silverlight</a> yet,
but it still looks very promising. There is also a new website from Microsoft called <a href="http://www.techcrunch.com/2007/05/18/microsoft-launches-popfly-mashup-app-creator-built-on-silverlight/">PopFly</a> that
is using it.<br /><br />
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.<br /></p><img src="http://exdream.no-ip.info/blog/content/binary/VsOnTwoScreens.jpg" border="0" /><br /><br />
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 ^^<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/VsOnTwoScreens2.jpg" border="0" /><br /><br /><br />
Ok, let's go on with some tools. I downloaded <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page">FreeMind</a> 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.<br /><br /><a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"><img src="http://freemind.sourceforge.net/wiki/skins/common/images/wiki.png" border="0" /></a><br /><br />
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).<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/FreeMindScreenshot2.jpg" border="0" /><br /><br /><br />
Then on the recent <a href="http://www.dotnetrocks.com/">DotNetRocks</a> radio show
I heard <a href="http://www.ericsink.com/scm/source_control.html">Eric Sink from SourceGear</a> talking
about Source Control and his tool <a href="http://www.sourcegear.com/vault/">SourceGear
Vault</a>, which is very similar to SourceSafe. This year I went crazy and tried all
kinds of source controlling systems, including the following:<br /><br /><ul><li><a href="http://subversion.tigris.org/"><img src="http://subversion.tigris.org/subversion_logo_hor-468x64.png" border="0" /></a><br /><a href="http://subversion.tigris.org/">SubVersion</a> (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 <a href="http://www.visualsvn.com/">VisualSVN</a> 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.<br /><br /><br /></li><li><a href="http://www.perforce.com/"><img src="http://www.perforce.com/images/logo.gif" border="0" /></a><br /><a href="http://www.perforce.com/">Perforce</a>: 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).<br /><br /><br /></li><li><img src="http://img.shopping.com/cctool/PrdImg/images/pr/177X150/00/01/b1/b0/8e/28422286.JPG" border="0" /><br />
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.<br /><br /><br /></li><li><a href="http://www.sourcegear.com/vault/"><img src="http://www.sourcegear.com/images/Vault75.png" border="0" /></a><br />
And then I tried <a href="http://www.sourcegear.com/vault/">SourceGear Vault</a>:
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.<br /><br /><a href="http://www.softimage.com/products/alienbrain/"><br /></a></li><li><a href="http://www.softimage.com/products/alienbrain/"><img src="http://www.3vis.com/imagesDatabase/AlienbrainStudio.gif" border="0" /></a><br />
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 <a href="http://www.softimage.com/products/alienbrain/">AlienBrain</a> 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. 
</li></ul><br /><br />
I also use another tool called <a href="http://www.axosoft.com/">OnTime (Ship Software
OnTime)</a> 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 <a href="http://www.mantisbt.org/">Mantis</a> or <a href="http://www.bugzilla.org/">BugZilla</a> 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.<br />
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.<br /><a href="http://www.axosoft.com/"><img src="http://www.axosoft.com/images/Boxes/OT2007/07BoxReflected140x181.gif" border="0" /></a><br /><br />
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 <a href="http://www.donationcoder.com/Software/Mouser/screenshotcaptor/index.html">Screenshot
Captor</a>, 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 :) 
<br /><br />
And finally to finish this big monster post: Blizzard announced today that <a href="http://starcraft2.com">StarCraft
II</a> is in the making and I was totally blown away by this. Many sites like <a href="http://sc.gosugamers.net">GosuGamers.Net</a> 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.<br /><br /><a href="http://starcraft2.com"><img src="http://us.media.blizzard.com/starcraft2/images/wallpapers/wall3/wall3-800x600.jpg" border="0" height="300" width="400" /></a><br /><br />
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.<br /><br />
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!<br /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8f10f43b-2863-4503-b6c4-3f0aa14539d0" /></body>
      <title>Tools 2007: Using VS Orcas, Multiple monitors, FreeMind, SourceGear Vault, OnTime, Screenshot Captor and StarCraft II</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,8f10f43b-2863-4503-b6c4-3f0aa14539d0.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/05/20/Tools2007UsingVSOrcasMultipleMonitorsFreeMindSourceGearVaultOnTimeScreenshotCaptorAndStarCraftII.aspx</link>
      <pubDate>Sun, 20 May 2007 03:38:12 GMT</pubDate>
      <description>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.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;p&gt;
First of all, I'm exclusively using &lt;b&gt;Visual Studio Orcas&lt;/b&gt; now. I mentioned the &lt;a href="http://exdream.no-ip.info/blog/2007/04/04/InstallingVisualStudioOrcasMarchCTPAndGettingAddinsLikeCodeRushToWorkWithIt.aspx"&gt;Visual
Studio Orcas Beta1 a month ago&lt;/a&gt; and explained how to import unsupported addins
and fix some issues. I did not have much time to check out &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt; yet,
but it still looks very promising. There is also a new website from Microsoft called &lt;a href="http://www.techcrunch.com/2007/05/18/microsoft-launches-popfly-mashup-app-creator-built-on-silverlight/"&gt;PopFly&lt;/a&gt; that
is using it.&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;/p&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/VsOnTwoScreens.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
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 ^^&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/VsOnTwoScreens2.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Ok, let's go on with some tools. I downloaded &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;&lt;img src="http://freemind.sourceforge.net/wiki/skins/common/images/wiki.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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).&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/FreeMindScreenshot2.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Then on the recent &lt;a href="http://www.dotnetrocks.com/"&gt;DotNetRocks&lt;/a&gt; radio show
I heard &lt;a href="http://www.ericsink.com/scm/source_control.html"&gt;Eric Sink from SourceGear&lt;/a&gt; talking
about Source Control and his tool &lt;a href="http://www.sourcegear.com/vault/"&gt;SourceGear
Vault&lt;/a&gt;, which is very similar to SourceSafe. This year I went crazy and tried all
kinds of source controlling systems, including the following:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://subversion.tigris.org/"&gt;&lt;img src="http://subversion.tigris.org/subversion_logo_hor-468x64.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://subversion.tigris.org/"&gt;SubVersion&lt;/a&gt; (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 &lt;a href="http://www.visualsvn.com/"&gt;VisualSVN&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.perforce.com/"&gt;&lt;img src="http://www.perforce.com/images/logo.gif" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;: 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).&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;img src="http://img.shopping.com/cctool/PrdImg/images/pr/177X150/00/01/b1/b0/8e/28422286.JPG" border="0"&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sourcegear.com/vault/"&gt;&lt;img src="http://www.sourcegear.com/images/Vault75.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
And then I tried &lt;a href="http://www.sourcegear.com/vault/"&gt;SourceGear Vault&lt;/a&gt;:
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.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.softimage.com/products/alienbrain/"&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.softimage.com/products/alienbrain/"&gt;&lt;img src="http://www.3vis.com/imagesDatabase/AlienbrainStudio.gif" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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 &lt;a href="http://www.softimage.com/products/alienbrain/"&gt;AlienBrain&lt;/a&gt; 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. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
I also use another tool called &lt;a href="http://www.axosoft.com/"&gt;OnTime (Ship Software
OnTime)&lt;/a&gt; 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 &lt;a href="http://www.mantisbt.org/"&gt;Mantis&lt;/a&gt; or &lt;a href="http://www.bugzilla.org/"&gt;BugZilla&lt;/a&gt; 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.&lt;br&gt;
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.&lt;br&gt;
&lt;a href="http://www.axosoft.com/"&gt;&lt;img src="http://www.axosoft.com/images/Boxes/OT2007/07BoxReflected140x181.gif" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://www.donationcoder.com/Software/Mouser/screenshotcaptor/index.html"&gt;Screenshot
Captor&lt;/a&gt;, 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 :) 
&lt;br&gt;
&lt;br&gt;
And finally to finish this big monster post: Blizzard announced today that &lt;a href="http://starcraft2.com"&gt;StarCraft
II&lt;/a&gt; is in the making and I was totally blown away by this. Many sites like &lt;a href="http://sc.gosugamers.net"&gt;GosuGamers.Net&lt;/a&gt; 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.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://starcraft2.com"&gt;&lt;img src="http://us.media.blizzard.com/starcraft2/images/wallpapers/wall3/wall3-800x600.jpg" border="0" height="300" width="400"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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!&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8f10f43b-2863-4503-b6c4-3f0aa14539d0" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,8f10f43b-2863-4503-b6c4-3f0aa14539d0.aspx</comments>
      <category>All;BroodWar;Development;Game Development;Programming;Reviews</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5580d6e4-f031-429e-95dd-a9bee7c1769f</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5580d6e4-f031-429e-95dd-a9bee7c1769f.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5580d6e4-f031-429e-95dd-a9bee7c1769f.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5580d6e4-f031-429e-95dd-a9bee7c1769f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <img src="http://exdream.no-ip.info/blog/content/binary/wired.jpg" border="0" />
        <br />
        <br />
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 <a href="http://blog.wired.com/games/">Mary Jane Irwin from the
Wired Games Blog</a>, thanks :). There is also a <a href="http://www.wired.com/gaming/gamingreviews/multimedia/2007/04/pl_games?slide=1&amp;slideView=4">nice
picture gallery with 21 images</a> from the 4 days, which nicely shows the advancements
we made each day. Enjoy!<br /><br />
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.<br /><a href="http://www.wired.com/gaming/gamingreviews/multimedia/2007/04/pl_games?slide=1&amp;slideView=4"><br /><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestPics.jpg" border="0" /></a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5580d6e4-f031-429e-95dd-a9bee7c1769f" /></body>
      <title>Article in Wired about Dungeon Quest from the GDC 2007</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5580d6e4-f031-429e-95dd-a9bee7c1769f.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/05/09/ArticleInWiredAboutDungeonQuestFromTheGDC2007.aspx</link>
      <pubDate>Wed, 09 May 2007 03:45:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/wired.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://blog.wired.com/games/"&gt;Mary Jane Irwin from the
Wired Games Blog&lt;/a&gt;, thanks :). There is also a &lt;a href="http://www.wired.com/gaming/gamingreviews/multimedia/2007/04/pl_games?slide=1&amp;amp;slideView=4"&gt;nice
picture gallery with 21 images&lt;/a&gt; from the 4 days, which nicely shows the advancements
we made each day. Enjoy!&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;a href="http://www.wired.com/gaming/gamingreviews/multimedia/2007/04/pl_games?slide=1&amp;amp;slideView=4"&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestPics.jpg" border="0"&gt;&lt;/a&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5580d6e4-f031-429e-95dd-a9bee7c1769f" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5580d6e4-f031-429e-95dd-a9bee7c1769f.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=96983850-cc43-4572-a54a-453ced39db25</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,96983850-cc43-4572-a54a-453ced39db25.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,96983850-cc43-4572-a54a-453ced39db25.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=96983850-cc43-4572-a54a-453ced39db25</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.microsoft.com/silverlight/">
          <img src="http://www.microsoft.com/silverlight/images/logo_main_sl.gif" border="0" />
        </a>
        <br />
I heard about all the <a href="http://www.microsoft.com/silverlight/">Silverlight </a>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 <a href="http://www.microsoft.com/silverlight/">Silverlight</a>, 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.<br /><br />
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 href="http://www.microsoft.com/silverlight/why-compelling.aspx">a
lot of other reasons you can checkout yourself</a>!<br /><br />
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 :)<br /><br />
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 <a href="http://go.microsoft.com/fwlink/?linkid=89068&amp;clcid=0x409">FOX
Movies site</a> and some <a href="http://go.microsoft.com/fwlink/?linkid=89367&amp;clcid=0x409">widgets
on MSDN</a> or <a href="http://www.telerik.com/products/silverlight/overview.aspx">some
early test controls from Telerik</a>.<br /><br />
BTW: <a href="http://games.archor.com/">Archor </a>wrote me an email about his <a href="http://xbox360.archor.com/">Cyber
Car XNA</a> 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!<br /><br /><a href="http://xbox360.archor.com/">http://xbox360.archor.com/</a><br /><br /><a href="http://xbox360.archor.com/"><img src="http://www.archorwright.com/games/xbox360/cybercar1s.jpg" border="0" /></a><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=96983850-cc43-4572-a54a-453ced39db25" /></body>
      <title>Silverlight and I spotted A Racing Game Mod: Cyber Car</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,96983850-cc43-4572-a54a-453ced39db25.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/05/08/SilverlightAndISpottedARacingGameModCyberCar.aspx</link>
      <pubDate>Tue, 08 May 2007 03:55:20 GMT</pubDate>
      <description>&lt;a href="http://www.microsoft.com/silverlight/"&gt;&lt;img src="http://www.microsoft.com/silverlight/images/logo_main_sl.gif" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
I heard about all the &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight &lt;/a&gt;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 &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt;, 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.&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://www.microsoft.com/silverlight/why-compelling.aspx"&gt;a
lot of other reasons you can checkout yourself&lt;/a&gt;!&lt;br&gt;
&lt;br&gt;
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 :)&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://go.microsoft.com/fwlink/?linkid=89068&amp;amp;clcid=0x409"&gt;FOX
Movies site&lt;/a&gt; and some &lt;a href="http://go.microsoft.com/fwlink/?linkid=89367&amp;amp;clcid=0x409"&gt;widgets
on MSDN&lt;/a&gt; or &lt;a href="http://www.telerik.com/products/silverlight/overview.aspx"&gt;some
early test controls from Telerik&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
BTW: &lt;a href="http://games.archor.com/"&gt;Archor &lt;/a&gt;wrote me an email about his &lt;a href="http://xbox360.archor.com/"&gt;Cyber
Car XNA&lt;/a&gt; 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!&lt;br&gt;
&lt;br&gt;
&lt;a href="http://xbox360.archor.com/"&gt;http://xbox360.archor.com/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://xbox360.archor.com/"&gt;&lt;img src="http://www.archorwright.com/games/xbox360/cybercar1s.jpg" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=96983850-cc43-4572-a54a-453ced39db25" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,96983850-cc43-4572-a54a-453ced39db25.aspx</comments>
      <category>Ajax;All;Development;Game Development;Other;Programming;Racing Game;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=3d592154-492b-4b20-891a-da296f00e61b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3d592154-492b-4b20-891a-da296f00e61b</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Yes. <a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779">My
XNA book</a> 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 <a href="http://p2p.wrox.com/forum.asp?FORUM_ID=322">official
Wrox forum for the book</a>. 
<p></p>
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. 
<p><a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"><img src="http://exdream.no-ip.info/blog/images/XnaBookSmall.jpg" border="0" /></a></p><p>
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 <a href="http://XnaProjects.net/">XnaProjects.Net</a>. The idea
is for everyone to submit their games and links. News are grabbed with <a href="http://blogsearch.google.com/">Google
Blog Search</a> and more features will come in July 2007 when I got more than 5 minutes
time in a row. 
</p><p>
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): 
</p><ul><li>
XNA Pong 
</li><li>
XNA Breakout 
</li><li>
XNA Tetris 
</li><li>
Rocket Commander XNA 
</li><li>
XNA Shooter 
</li><li>
XNA Racing Game 
</li><li>
SimpleRacingGame 
</li><li>
SpeedyRacer 
</li><li>
Dungeon Quest 
</li><li>
Skinning with Collada Models in XNA 
</li></ul>
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 <a href="http://XnaProjects.net/">XnaProjects.Net</a> website.
Check it out:<br /><a href="http://XnaProjects.net/"><img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectsNet.PNG" border="0" /></a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3d592154-492b-4b20-891a-da296f00e61b" /></body>
      <title>My XNA book is out and XnaProjects.Net launches</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/05/04/MyXNABookIsOutAndXnaProjectsNetLaunches.aspx</link>
      <pubDate>Fri, 04 May 2007 13:29:43 GMT</pubDate>
      <description>Yes. &lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;My XNA
book&lt;/a&gt; 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 &lt;a href="http://p2p.wrox.com/forum.asp?FORUM_ID=322"&gt;official
Wrox forum for the book&lt;/a&gt;. 
&lt;p&gt;
&lt;/p&gt;
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. 
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/XnaBookSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
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 &lt;a href="http://XnaProjects.net/"&gt;XnaProjects.Net&lt;/a&gt;. The idea
is for everyone to submit their games and links. News are grabbed with &lt;a href="http://blogsearch.google.com/"&gt;Google
Blog Search&lt;/a&gt; and more features will come in July 2007 when I got more than 5 minutes
time in a row. 
&lt;/p&gt;
&lt;p&gt;
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): 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
XNA Pong 
&lt;/li&gt;
&lt;li&gt;
XNA Breakout 
&lt;/li&gt;
&lt;li&gt;
XNA Tetris 
&lt;/li&gt;
&lt;li&gt;
Rocket Commander XNA 
&lt;/li&gt;
&lt;li&gt;
XNA Shooter 
&lt;/li&gt;
&lt;li&gt;
XNA Racing Game 
&lt;/li&gt;
&lt;li&gt;
SimpleRacingGame 
&lt;/li&gt;
&lt;li&gt;
SpeedyRacer 
&lt;/li&gt;
&lt;li&gt;
Dungeon Quest 
&lt;/li&gt;
&lt;li&gt;
Skinning with Collada Models in XNA 
&lt;/li&gt;
&lt;/ul&gt;
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 &lt;a href="http://XnaProjects.net/"&gt;XnaProjects.Net&lt;/a&gt; website.
Check it out:&lt;br&gt;
&lt;a href="http://XnaProjects.net/"&gt; &lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectsNet.PNG" border="0"&gt; &lt;/a&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3d592154-492b-4b20-891a-da296f00e61b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=e77763fe-625d-4cb3-9d1e-e91c7e9c7f36</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,e77763fe-625d-4cb3-9d1e-e91c7e9c7f36.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,e77763fe-625d-4cb3-9d1e-e91c7e9c7f36.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e77763fe-625d-4cb3-9d1e-e91c7e9c7f36</wfw:commentRss>
      <slash:comments>14</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
I have put together a little website for the XNA Racing Game Starter Kit released
yesterday on<br /><a href="http://creators.xna.com/Education/StarterKits.aspx">http://creators.xna.com/Education/StarterKits.aspx</a><br /><br />
Here you go: <a href="http://www.XnaRacingGame.com">http://www.XnaRacingGame.com</a><br /><br /><a href="http://www.XnaRacingGame.com"><img src="http://exdream.no-ip.info/blog/content/binary/XnaRacingGameWebsite.png" border="0" /></a><br /><br /><br />
A little rant about the XNA Racing Game Starter Kit download: The download file is
130 MB in size and will eat up almost 290 MB of your hard disk space extracted. It
is also only available in the .vsi format and can't be used in anything but XNA Game
Studio Express or Visual C# Express. The main reason for this incredible size is the
Textures directory, with uses mainly uncompressed .TGA files. The original Racing
Game version had only about 50-70 MB in total with DDS textures and the Simple Racing
Game version from my book is even smaller (30 MB I think, but a lot of content is
not in there, its a also a much smaller and simplified project).<br /><br />
Microsoft has also removed all credits of me, all readmes, all unit tests, most comments,
some screens like the credit screens. It's a little bit sad for me because all references
to me or my website were removed and I'm not even mentioned on the starter kit download
page :( I think the starter kit is now much harder to understand because there are
no unit tests in the code to test anything out. Anyway, I just hope the XNA Racing
Game Starter Kit is useful for you guys, it helps XNA and everyone wins :-)<br /><br /><b>Update 2007-05-01: I'm now mentioned on <a href="http://creators.xna.com/Education/StarterKits.aspx">http://creators.xna.com</a> and
happy :)</b><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e77763fe-625d-4cb3-9d1e-e91c7e9c7f36" /></body>
      <title>XnaRacingGame.com goes online</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,e77763fe-625d-4cb3-9d1e-e91c7e9c7f36.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/27/XnaRacingGamecomGoesOnline.aspx</link>
      <pubDate>Fri, 27 Apr 2007 19:24:34 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
I have put together a little website for the XNA Racing Game Starter Kit released
yesterday on&lt;br&gt;
&lt;a href="http://creators.xna.com/Education/StarterKits.aspx"&gt;http://creators.xna.com/Education/StarterKits.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Here you go: &lt;a href="http://www.XnaRacingGame.com"&gt;http://www.XnaRacingGame.com&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.XnaRacingGame.com"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaRacingGameWebsite.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
A little rant about the XNA Racing Game Starter Kit download: The download file is
130 MB in size and will eat up almost 290 MB of your hard disk space extracted. It
is also only available in the .vsi format and can't be used in anything but XNA Game
Studio Express or Visual C# Express. The main reason for this incredible size is the
Textures directory, with uses mainly uncompressed .TGA files. The original Racing
Game version had only about 50-70 MB in total with DDS textures and the Simple Racing
Game version from my book is even smaller (30 MB I think, but a lot of content is
not in there, its a also a much smaller and simplified project).&lt;br&gt;
&lt;br&gt;
Microsoft has also removed all credits of me, all readmes, all unit tests, most comments,
some screens like the credit screens. It's a little bit sad for me because all references
to me or my website were removed and I'm not even mentioned on the starter kit download
page :( I think the starter kit is now much harder to understand because there are
no unit tests in the code to test anything out. Anyway, I just hope the XNA Racing
Game Starter Kit is useful for you guys, it helps XNA and everyone wins :-)&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Update 2007-05-01: I'm now mentioned on &lt;a href="http://creators.xna.com/Education/StarterKits.aspx"&gt;http://creators.xna.com&lt;/a&gt; and
happy :)&lt;/b&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e77763fe-625d-4cb3-9d1e-e91c7e9c7f36" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,e77763fe-625d-4cb3-9d1e-e91c7e9c7f36.aspx</comments>
      <category>All;Development;Game Development;Programming;Racing Game;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=fbff73eb-6107-4163-8f29-3d6694780687</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,fbff73eb-6107-4163-8f29-3d6694780687.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,fbff73eb-6107-4163-8f29-3d6694780687.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fbff73eb-6107-4163-8f29-3d6694780687</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://creators.xna.com/Education/StarterKits.aspx">
          <img src="http://creators.xna.com/themes/default/images/common/skits_racer_template.png" border="0" />
        </a>
        <br />
Nice one. The Racing Game Starter kit for XNA Game Studio Express I made last year
is now available on<br /><a href="http://creators.xna.com/Education/StarterKits.aspx">http://creators.xna.com/Education/StarterKits.aspx</a><br /><br />
More information will be available shortly on the in-official website for the Racing
Game (link to the xna creators club, screenshots, mod support and forums later):<br /><a href="http://www.XnaRacingGame.com">http://www.XnaRacingGame.com</a><br /><br />
Enjoy the Racing Game ;-)<br /><br />
My book <b>Professional XNA Game Programming</b> for the Xbox 360 and Windows seems
to be out too. I have not received a copy myself yet, but I received some emails about
other guys already holding it in their hands ^^ If you try to download the source
code for the book from the Wrox website and encounter problems, please be aware that
the download link is currently pointing to an older version, which still has some
issues. I will try to sort that out as soon as possible. The official release date
was 11 May, 2007, but <a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779">Amazon
says it is already available</a>, while their own release date is stated as 30 April,
2007. Confusing, isn't it?<br /><br />
If you find any issues with the starter kit or the book download please write me a
message so I can fix it as soon as possible. Many thanks to <a href="http://thezbuffer.com">ZMan
(Andy Dunn) </a>for an early bug report.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fbff73eb-6107-4163-8f29-3d6694780687" /></body>
      <title>XNA Racing Game downloads now available on creators.xna.com</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,fbff73eb-6107-4163-8f29-3d6694780687.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/27/XNARacingGameDownloadsNowAvailableOnCreatorsxnacom.aspx</link>
      <pubDate>Fri, 27 Apr 2007 09:28:15 GMT</pubDate>
      <description>&lt;a href="http://creators.xna.com/Education/StarterKits.aspx"&gt;&lt;img src="http://creators.xna.com/themes/default/images/common/skits_racer_template.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Nice one. The Racing Game Starter kit for XNA Game Studio Express I made last year
is now available on&lt;br&gt;
&lt;a href="http://creators.xna.com/Education/StarterKits.aspx"&gt;http://creators.xna.com/Education/StarterKits.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
More information will be available shortly on the in-official website for the Racing
Game (link to the xna creators club, screenshots, mod support and forums later):&lt;br&gt;
&lt;a href="http://www.XnaRacingGame.com"&gt;http://www.XnaRacingGame.com&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Enjoy the Racing Game ;-)&lt;br&gt;
&lt;br&gt;
My book &lt;b&gt;Professional XNA Game Programming&lt;/b&gt; for the Xbox 360 and Windows seems
to be out too. I have not received a copy myself yet, but I received some emails about
other guys already holding it in their hands ^^ If you try to download the source
code for the book from the Wrox website and encounter problems, please be aware that
the download link is currently pointing to an older version, which still has some
issues. I will try to sort that out as soon as possible. The official release date
was 11 May, 2007, but &lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;Amazon
says it is already available&lt;/a&gt;, while their own release date is stated as 30 April,
2007. Confusing, isn't it?&lt;br&gt;
&lt;br&gt;
If you find any issues with the starter kit or the book download please write me a
message so I can fix it as soon as possible. Many thanks to &lt;a href="http://thezbuffer.com"&gt;ZMan
(Andy Dunn) &lt;/a&gt;for an early bug report.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fbff73eb-6107-4163-8f29-3d6694780687" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,fbff73eb-6107-4163-8f29-3d6694780687.aspx</comments>
      <category>Development;Game Development;Other;Programming;XNA;Racing Game</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=1886d88d-d6bc-43ea-a5f7-2ec314b650af</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,1886d88d-d6bc-43ea-a5f7-2ec314b650af.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,1886d88d-d6bc-43ea-a5f7-2ec314b650af.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1886d88d-d6bc-43ea-a5f7-2ec314b650af</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">My blog posts are getting shorter ^^<br /><br />
Usually you can't execute web service methods from the autogenerated web service site
remotely to test them. By default you will get the following message where the web
service test is supposed to be:<br /><ul><li><b>The test form is only available for requests from the local machine</b></li></ul>
Fix this by adding the following to your web.config file of your web service:<p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;configuration&gt;<br />
    &lt;system.web&gt;<br />
        &lt;webServices&gt; 
<br />
            &lt;protocols&gt; 
<br />
                &lt;add
name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"HttpGet"</span>/&gt; 
<br />
                &lt;add
name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"HttpPost"</span>/&gt; 
<br />
            &lt;/protocols&gt; 
<br />
        &lt;/webServices&gt;<br />
    &lt;/system.web&gt;<br />
&lt;/configuration&gt;<br /></span></p><br />
BTW: Any messages in the Test section of the web service site will be "<b>The test
form is only available for requests from the local machine</b><span>" even if the
problem is something else, which you will see when testing locally like "<b>The test
form is only available for methods with primitive types as parameters.</b>". There
seem to be no way around that.<br /></span><img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=da9ea418-8aec-4f4f-a727-ea69aa76a3b2" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1886d88d-d6bc-43ea-a5f7-2ec314b650af" /></body>
      <title>How to allow web services to be called and tested remotely</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,1886d88d-d6bc-43ea-a5f7-2ec314b650af.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/13/HowToAllowWebServicesToBeCalledAndTestedRemotely.aspx</link>
      <pubDate>Fri, 13 Apr 2007 10:39:20 GMT</pubDate>
      <description>My blog posts are getting shorter ^^&lt;br&gt;
&lt;br&gt;
Usually you can't execute web service methods from the autogenerated web service site
remotely to test them. By default you will get the following message where the web
service test is supposed to be:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;The test form is only available for requests from the local machine&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
Fix this by adding the following to your web.config file of your web service:&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;configuration&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;system.web&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;webServices&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;protocols&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"HttpGet"&lt;/span&gt;/&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"HttpPost"&lt;/span&gt;/&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/protocols&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/webServices&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/system.web&amp;gt;&lt;br&gt;
&amp;lt;/configuration&amp;gt;&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;br&gt;
BTW: Any messages in the Test section of the web service site will be "&lt;b&gt;The test
form is only available for requests from the local machine&lt;/b&gt;&lt;span&gt;" even if the
problem is something else, which you will see when testing locally like "&lt;b&gt;The test
form is only available for methods with primitive types as parameters.&lt;/b&gt;". There
seem to be no way around that.&lt;br&gt;
&lt;/span&gt;&lt;img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=da9ea418-8aec-4f4f-a727-ea69aa76a3b2"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=1886d88d-d6bc-43ea-a5f7-2ec314b650af" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,1886d88d-d6bc-43ea-a5f7-2ec314b650af.aspx</comments>
      <category>All;Development;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=f5d9bed0-dded-47f7-8c9c-3c7d24668627</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,f5d9bed0-dded-47f7-8c9c-3c7d24668627.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,f5d9bed0-dded-47f7-8c9c-3c7d24668627.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f5d9bed0-dded-47f7-8c9c-3c7d24668627</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Just found this by accident: <a href="http://nunitasp.sourceforge.net/index.html">NUnitAsp</a>.
Seems to be very useful. I was always wondering why <a href="http://www.testdriven.net/">TestDriven.NET</a> does
not support testing web sites or services. It gives you the following message if you
try to run tests from a website:<br /><ul><li><b>Can't execute tests in 'Web Site' application.</b><br /></li></ul>
There are probably other reasons why this does not work yet, but maybe it is possible
to find a way around that. Currently I use a extra project and call the web site or
web service from there with my custom methods. It looks much cleaner with <a href="http://nunitasp.sourceforge.net/index.html">NUnitAsp</a>.
For me it would even be better if I could write and run unit tests directly on the
website without that extra project. Maybe I should drop <span class="headermaintitle"><a href="http://weblogs.asp.net/nunitaddin/default.aspx">Jamie
Cansdale of TestDriven.NET</a> a short message asking him for some support in the
future for ASP.NET. There does not seem to be anything on his blog about ASP.NET yet,
at least the search returned 0 results.<br /><br />
Here is a little example from <a href="http://nunitasp.sourceforge.net/index.html">NUnitAsp</a>,
which shows you how to test a label on a website:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">[Test]<br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> TestExample()<br />
{<br />
  <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
First, instantiate "Tester" objects:</span><br />
  LabelTester label <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> LabelTester(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"textLabel"</span>,
CurrentWebForm);<br />
  LinkButtonTester link <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> LinkButtonTester(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"linkButton"</span>,
CurrentWebForm);<br /><br />
  <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
Second, visit the page being tested:</span><br />
  Browser.GetPage(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"http://localhost/example/example.aspx"</span>);<br /><br />
  <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
Third, use tester objects to test the page:</span><br />
  AssertEquals(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Not
clicked."</span>, label.Text);<br />
  link.Click();<br />
  AssertEquals(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Clicked
once."</span>, label.Text);<br />
  link.Click();<br />
  AssertEquals(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Clicked
twice."</span>, label.Text);<br />
}</span></p></span><p></p><img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=445fbb30-3c00-4ffb-8d90-1fae05de9ec1" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f5d9bed0-dded-47f7-8c9c-3c7d24668627" /></body>
      <title>Unit testing for web sites</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,f5d9bed0-dded-47f7-8c9c-3c7d24668627.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/13/UnitTestingForWebSites.aspx</link>
      <pubDate>Fri, 13 Apr 2007 08:42:28 GMT</pubDate>
      <description>Just found this by accident: &lt;a href="http://nunitasp.sourceforge.net/index.html"&gt;NUnitAsp&lt;/a&gt;.
Seems to be very useful. I was always wondering why &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt; does
not support testing web sites or services. It gives you the following message if you
try to run tests from a website:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Can't execute tests in 'Web Site' application.&lt;/b&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
There are probably other reasons why this does not work yet, but maybe it is possible
to find a way around that. Currently I use a extra project and call the web site or
web service from there with my custom methods. It looks much cleaner with &lt;a href="http://nunitasp.sourceforge.net/index.html"&gt;NUnitAsp&lt;/a&gt;.
For me it would even be better if I could write and run unit tests directly on the
website without that extra project. Maybe I should drop &lt;span class="headermaintitle"&gt;&lt;a href="http://weblogs.asp.net/nunitaddin/default.aspx"&gt;Jamie
Cansdale of TestDriven.NET&lt;/a&gt; a short message asking him for some support in the
future for ASP.NET. There does not seem to be anything on his blog about ASP.NET yet,
at least the search returned 0 results.&lt;br&gt;
&lt;br&gt;
Here is a little example from &lt;a href="http://nunitasp.sourceforge.net/index.html"&gt;NUnitAsp&lt;/a&gt;,
which shows you how to test a label on a website:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;[Test]&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; TestExample()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
First, instantiate "Tester" objects:&lt;/span&gt;
&lt;br&gt;
&amp;nbsp; LabelTester label &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; LabelTester(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"textLabel"&lt;/span&gt;,
CurrentWebForm);&lt;br&gt;
&amp;nbsp; LinkButtonTester link &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; LinkButtonTester(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"linkButton"&lt;/span&gt;,
CurrentWebForm);&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
Second, visit the page being tested:&lt;/span&gt;
&lt;br&gt;
&amp;nbsp; Browser.GetPage(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"http://localhost/example/example.aspx"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
Third, use tester objects to test the page:&lt;/span&gt;
&lt;br&gt;
&amp;nbsp; AssertEquals(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Not
clicked."&lt;/span&gt;, label.Text);&lt;br&gt;
&amp;nbsp; link.Click();&lt;br&gt;
&amp;nbsp; AssertEquals(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Clicked
once."&lt;/span&gt;, label.Text);&lt;br&gt;
&amp;nbsp; link.Click();&lt;br&gt;
&amp;nbsp; AssertEquals(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Clicked
twice."&lt;/span&gt;, label.Text);&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=445fbb30-3c00-4ffb-8d90-1fae05de9ec1"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f5d9bed0-dded-47f7-8c9c-3c7d24668627" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,f5d9bed0-dded-47f7-8c9c-3c7d24668627.aspx</comments>
      <category>All;Development;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d35a473b-58e0-4b4b-8727-19aa755a251a</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d35a473b-58e0-4b4b-8727-19aa755a251a.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d35a473b-58e0-4b4b-8727-19aa755a251a.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d35a473b-58e0-4b4b-8727-19aa755a251a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">After developing and testing some ascx
web controls in the past I was woundering why I have to copy them over to a new web
project today instead of just referencing them. When you write a normal windows application
and then want to reuse some library parts in another project (or if you just want
to structurize your app a little bit better) you would obviously use a dll library
for the job to share functionality.<br /><br />
Not that easy with web controls. My first thought was just to copy the .ascx and .ascx.cs
files over to a new dll project and start compiling. After adding the missing images
and scripts the following thing happend:<br /><p></p><img src="http://studihelp.de/blog/content/binary/WebControlsError.png" border="0" /><br /><br />
Well, the code does compile on a website, but in a dll project it will not build the
ascx code for you and merge the controls defined there with your .cs file. If you
do not define controls or do any visual stuff you can probably just use WebControls
instead of UserControls, but you still have to implement the Render method yourself
and you just do not have any design support. <a href="http://msdn2.microsoft.com/en-us/library/ms972970.aspx">More
information about creating server controls can be found here.</a><br /><br />
While that solution is probably the cleanest one and has the advantage of hidding
the source code and make it easy to just drag and drop controls on your page, it is
the hardest to develop. And I already have my .ascx controls working, I just want
them in another project without copying them over again and again.<br /><br />
I searched for a while on the web for some solutions, see below for all the links.
The best solution for me was the one from <a href="http://weblogs.asp.net/scottgu">ScottGu</a>,
which just uses a normal website and then uses a post build copy to get all the files
into your current website project. The controls dummy website can then be used all
over the place, you just have to add the copy command to each website that should
use your controls. This solution might not be the best, so if you have more complex
problems, check out the links below.<br /><br />
No reason to repeat all the stuff <a href="http://weblogs.asp.net/scottgu">ScottGu </a>has
already written, <a href="http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx">check
out his great article here</a> or <a href="http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx">here</a>.<br /><br />
BTW: I use this just for simpler web controls or when I have something that needs
to be duplicated on some pages. For Ajax controls on the other hand I got a project
similar to the AjaxControlToolkit, but there you live without design time editors
anyway.<br /><br />
Links: 
<br /><ul><li><p><a href="http://blogs.msdn.com/davidebb/archive/2005/10/30/487160.aspx">Turning an
ascx user control into a redistributable custom control </a>from David Ebbo's ASP.NET
blog<br />
5 step tutorial on building redistributable custom controls. Pretty good article,
but the solution is too complex for me.<br /></p></li><li><p><a set="yes" id="viewpost.ascx_TitleUrl" href="http://geekswithblogs.net/dotnetrodent/archive/2006/06/16/82136.aspx">Reusing
Web User Controls accross applications</a> by <span class="headermaintitle">Adrian
Hara's blog<br /></span>Overview about 3 different approaches and some useful notes.<br /></p></li><li><p><a href="http://odetocode.com/Blogs/scott/archive/2005/10/06/2326.aspx">Using MSBuild
and ILMerge to Package User Controls For Reuse</a> from K. Scott Allen's blog<br />
A more complete, but also complexer, solution.<br /></p></li><li><p><a href="http://www.cmswire.com/cms/tips-tricks/aspnet-reusing-web-user-controls-and-forms-000915.php">ASP.NET:
Reusing Web User Controls</a> and Forms by CMS Wire<br />
Using virtual paths, looks very messy to me. Btw: Why are they using .php for their
blog and talk about asp?<br /></p></li><li><a href="http://www.codeproject.com/useritems/ConvertUserToCustom.asp">WYSIWYG For
Custom Web Controls on CodeProject.net</a> by Alex Soldatov<br />
Nice article on how to use .ascx files and converting them to a custom controls library.<br /><br /></li><li><a href="http://msdn2.microsoft.com/en-us/library/ms972970.aspx">MSDN Information
about creating server controls.<br /><br /></a></li><li><a href="http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx">ScottGu's
article on </a><a href="http://tempuri.org/tempuri.html">Creating and Using User Control
Libraries</a><br />
This was the easiest and most useful way to reuse my controls for me.<br /><a href="http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx">This is the
same article on his blog</a>.</li></ul><img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=3bcf4596-d881-4ef0-848f-c22a29bc7526" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d35a473b-58e0-4b4b-8727-19aa755a251a" /></body>
      <title>Reusing ascx web controls</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d35a473b-58e0-4b4b-8727-19aa755a251a.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/11/ReusingAscxWebControls.aspx</link>
      <pubDate>Wed, 11 Apr 2007 20:50:47 GMT</pubDate>
      <description>After developing and testing some ascx web controls in the past I was woundering why I have to copy them over to a new web project today instead of just referencing them. When you write a normal windows application and then want to reuse some library parts in another project (or if you just want to structurize your app a little bit better) you would obviously use a dll library for the job to share functionality.&lt;br&gt;
&lt;br&gt;
Not that easy with web controls. My first thought was just to copy the .ascx and .ascx.cs
files over to a new dll project and start compiling. After adding the missing images
and scripts the following thing happend:&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://studihelp.de/blog/content/binary/WebControlsError.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Well, the code does compile on a website, but in a dll project it will not build the
ascx code for you and merge the controls defined there with your .cs file. If you
do not define controls or do any visual stuff you can probably just use WebControls
instead of UserControls, but you still have to implement the Render method yourself
and you just do not have any design support. &lt;a href="http://msdn2.microsoft.com/en-us/library/ms972970.aspx"&gt;More
information about creating server controls can be found here.&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
While that solution is probably the cleanest one and has the advantage of hidding
the source code and make it easy to just drag and drop controls on your page, it is
the hardest to develop. And I already have my .ascx controls working, I just want
them in another project without copying them over again and again.&lt;br&gt;
&lt;br&gt;
I searched for a while on the web for some solutions, see below for all the links.
The best solution for me was the one from &lt;a href="http://weblogs.asp.net/scottgu"&gt;ScottGu&lt;/a&gt;,
which just uses a normal website and then uses a post build copy to get all the files
into your current website project. The controls dummy website can then be used all
over the place, you just have to add the copy command to each website that should
use your controls. This solution might not be the best, so if you have more complex
problems, check out the links below.&lt;br&gt;
&lt;br&gt;
No reason to repeat all the stuff &lt;a href="http://weblogs.asp.net/scottgu"&gt;ScottGu &lt;/a&gt;has
already written, &lt;a href="http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx"&gt;check
out his great article here&lt;/a&gt; or &lt;a href="http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
BTW: I use this just for simpler web controls or when I have something that needs
to be duplicated on some pages. For Ajax controls on the other hand I got a project
similar to the AjaxControlToolkit, but there you live without design time editors
anyway.&lt;br&gt;
&lt;br&gt;
Links: 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/davidebb/archive/2005/10/30/487160.aspx"&gt;Turning an
ascx user control into a redistributable custom control &lt;/a&gt;from David Ebbo's ASP.NET
blog&lt;br&gt;
5 step tutorial on building redistributable custom controls. Pretty good article,
but the solution is too complex for me.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a set="yes" id="viewpost.ascx_TitleUrl" href="http://geekswithblogs.net/dotnetrodent/archive/2006/06/16/82136.aspx"&gt;Reusing
Web User Controls accross applications&lt;/a&gt; by &lt;span class="headermaintitle"&gt;Adrian
Hara's blog&lt;br&gt;
&lt;/span&gt;Overview about 3 different approaches and some useful notes.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href="http://odetocode.com/Blogs/scott/archive/2005/10/06/2326.aspx"&gt;Using MSBuild
and ILMerge to Package User Controls For Reuse&lt;/a&gt; from K. Scott Allen's blog&lt;br&gt;
A more complete, but also complexer, solution.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href="http://www.cmswire.com/cms/tips-tricks/aspnet-reusing-web-user-controls-and-forms-000915.php"&gt;ASP.NET:
Reusing Web User Controls&lt;/a&gt; and Forms by CMS Wire&lt;br&gt;
Using virtual paths, looks very messy to me. Btw: Why are they using .php for their
blog and talk about asp?&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.codeproject.com/useritems/ConvertUserToCustom.asp"&gt;WYSIWYG For
Custom Web Controls on CodeProject.net&lt;/a&gt; by Alex Soldatov&lt;br&gt;
Nice article on how to use .ascx files and converting them to a custom controls library.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/library/ms972970.aspx"&gt;MSDN Information
about creating server controls.&lt;br&gt;
&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx"&gt;ScottGu's
article on &lt;/a&gt;&lt;a href="http://tempuri.org/tempuri.html"&gt;Creating and Using User Control
Libraries&lt;/a&gt;
&lt;br&gt;
This was the easiest and most useful way to reuse my controls for me.&lt;br&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx"&gt;This is the
same article on his blog&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://studihelp.de/blog/cptrk.ashx?id=3bcf4596-d881-4ef0-848f-c22a29bc7526"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d35a473b-58e0-4b4b-8727-19aa755a251a" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d35a473b-58e0-4b4b-8727-19aa755a251a.aspx</comments>
      <category>All;Development;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=56da23ad-02dc-4dcc-8690-a63e0b1e9a00</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,56da23ad-02dc-4dcc-8690-a63e0b1e9a00.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,56da23ad-02dc-4dcc-8690-a63e0b1e9a00.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=56da23ad-02dc-4dcc-8690-a63e0b1e9a00</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip">
          <img src="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.png" border="0" />
          <br />
        </a>
        <a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip">AnnoyingFilesRemover.zip
(6.1 KB)</a>
        <br />
        <br />
Recently I had to remove a lot of .svn and Thumbs.db files from certain directories
because I wanted to move them or someone else had created thumb files (which is really
annoying). After deleteing those files by hand a couple of times I decided it would
be better to have some tool doing that for me. That should be easy to do, shouldn't
it?<br /><br />
I started by opening VS Orcas and coding for a while, but for some reason the commenter
plugin for CodeRush was not working anymore, which already annoyed me. Then the Intellisense
crashed several times, but VS Orcas did not close, which was a nice feature. But without
CodeRush it was a little bit annoying to generate all that code by hand and then to
write all the comments also by hand. I removed the LINQ test code I used to go through
all directories and added some foreach loops (just 2 lines more, how cares) and went
back to VS 2005 for this project.<br /><br />
The next big problem was the removal of read-only files and directories, which is
just not allowed in the .NET framework, you will get the following exception:<br /><br /><b>System.UnauthorizedAccessException occurred</b><br />
  Message="Der Zugriff auf den Pfad entries wurde verweigert."<br />
  Source="mscorlib"<br />
  StackTrace:<br />
       bei System.IO.Directory.DeleteHelper(String fullPath,
String userPath, Boolean recursive)<br />
       bei System.IO.Directory.Delete(String fullPath,
String userPath, Boolean recursive)<br />
       bei System.IO.Directory.Delete(String path, Boolean
recursive)<br />
       bei AnnoyingFilesRemover.RemoverForm.SafeDeleteDirectory(String
directory) in C:\code\Communities\AnnoyingFilesRemover\RemoverForm.cs:Zeile 153.<br /><br />
The <a href="http://msdn2.microsoft.com/en-us/library/fxeahc5f.aspx">MSDN help for
Directory.Delete</a> gives you the explanation that this happens because you are trying
to delete a read-only file.<br /><br />
   <b><a set="yes" onclick="javascript:Track('ctl00_LibFrame_ctl15|ctl00_LibFrame_ctl17',this);" href="http://msdn2.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx">UnauthorizedAccessException</a>:
The caller does not have the required permission.</b><p></p>
This is only half the story because if you look in <a href="http://msdn2.microsoft.com/en-us/library/system.io.file.delete.aspx">File.Delete</a> you
see a more detailed error explanation:<br /><b><br />
    <a set="yes" onclick="javascript:Track('ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl24',this);" href="http://msdn2.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx">UnauthorizedAccessException</a>:
The caller does not have the required permission.<br /></b><p><b>    -or-<span class="parameter"> path</span> is a directory.</b></p><p><b>    -or- <span class="parameter">path</span> specified a read-only
file.</b></p><b><br /></b>And the directory I wanted to delete was ".svn", which is read-only and hidden.
An easy way around that is to change the directory attributes. But that won't help
if there are still files in the directory because you will still get the same error.
Instead you have to replace all the file attribute for all sub directories and files
too. I wrote the following method to do that.<br /><br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">#region</span> RemoveAllAttributes<br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
Helper to remove all file and sub directory readonly attributes</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
to make SafeDeleteDirectory work!</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;/summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;param name="directory"&gt;Directory to change (will be deleted later</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
anyway)&lt;/param&gt;</span><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">private</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> RemoveAllAttributes(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> directory)<br />
{<br />
    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
Get all files and sub directories.</span><br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>[]
files <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> Directory.GetFiles(directory);<br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>[]
directories <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> Directory.GetDirectories(directory);<br /><br />
    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
Kill all attributes, make files normal and directories just directories</span><br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">foreach</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> file <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">in</span> files)<br />
        File.SetAttributes(file, FileAttributes.Normal);<br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">foreach</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> dir <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">in</span> directories)<br />
        RemoveAllAttributes(dir);<br /><br />
    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
Finally set the main directory to a normal directory!</span><br />
    File.SetAttributes(directory, FileAttributes.Directory);<br />
} <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
RemoveAllAttributes(directory)</span><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">#endregion</span><br /></span></p><br />
The rest of the tool is easy to understand and there is nothing special about this
tool except that I find it very useful right now. It is also very fast, I let it run
over 20 000 files and it was done immediately and had deleted several hundert files
in the process. Again: Be careful what you type in the filters textbox and save important
directories before messing with them.<br /><br />
As always, here is the download and source code (both in .NET 2.0 since I have removed
all LINQ features that were not important for this project anyway):<br /><ul><li><a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip">AnnoyingFilesRemover.zip
(6.1 KB)</a></li></ul><ul><li><a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemoverSourceCode.zip">AnnoyingFilesRemoverSourceCode.zip
(12.27 KB)</a></li></ul><img src="http://studihelp.de/blog/cptrk.ashx?id=725bf8a1-428a-441c-b8c0-4790a1bae1f3" height="0" width="0" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=56da23ad-02dc-4dcc-8690-a63e0b1e9a00" /></body>
      <title>Annoying Files Remover Tool</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,56da23ad-02dc-4dcc-8690-a63e0b1e9a00.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/06/AnnoyingFilesRemoverTool.aspx</link>
      <pubDate>Fri, 06 Apr 2007 23:25:01 GMT</pubDate>
      <description>&lt;a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip"&gt;&lt;img src="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.png" border="0"&gt;
&lt;br&gt;
&lt;/a&gt;&lt;a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip"&gt;AnnoyingFilesRemover.zip
(6.1 KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Recently I had to remove a lot of .svn and Thumbs.db files from certain directories
because I wanted to move them or someone else had created thumb files (which is really
annoying). After deleteing those files by hand a couple of times I decided it would
be better to have some tool doing that for me. That should be easy to do, shouldn't
it?&lt;br&gt;
&lt;br&gt;
I started by opening VS Orcas and coding for a while, but for some reason the commenter
plugin for CodeRush was not working anymore, which already annoyed me. Then the Intellisense
crashed several times, but VS Orcas did not close, which was a nice feature. But without
CodeRush it was a little bit annoying to generate all that code by hand and then to
write all the comments also by hand. I removed the LINQ test code I used to go through
all directories and added some foreach loops (just 2 lines more, how cares) and went
back to VS 2005 for this project.&lt;br&gt;
&lt;br&gt;
The next big problem was the removal of read-only files and directories, which is
just not allowed in the .NET framework, you will get the following exception:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;System.UnauthorizedAccessException occurred&lt;/b&gt;
&lt;br&gt;
&amp;nbsp; Message="Der Zugriff auf den Pfad entries wurde verweigert."&lt;br&gt;
&amp;nbsp; Source="mscorlib"&lt;br&gt;
&amp;nbsp; StackTrace:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bei System.IO.Directory.DeleteHelper(String fullPath,
String userPath, Boolean recursive)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bei System.IO.Directory.Delete(String fullPath,
String userPath, Boolean recursive)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bei System.IO.Directory.Delete(String path, Boolean
recursive)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bei AnnoyingFilesRemover.RemoverForm.SafeDeleteDirectory(String
directory) in C:\code\Communities\AnnoyingFilesRemover\RemoverForm.cs:Zeile 153.&lt;br&gt;
&lt;br&gt;
The &lt;a href="http://msdn2.microsoft.com/en-us/library/fxeahc5f.aspx"&gt;MSDN help for
Directory.Delete&lt;/a&gt; gives you the explanation that this happens because you are trying
to delete a read-only file.&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;a set="yes" onclick="javascript:Track('ctl00_LibFrame_ctl15|ctl00_LibFrame_ctl17',this);" href="http://msdn2.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx"&gt;UnauthorizedAccessException&lt;/a&gt;:
The caller does not have the required permission.&lt;/b&gt;
&lt;p&gt;
&lt;/p&gt;
This is only half the story because if you look in &lt;a href="http://msdn2.microsoft.com/en-us/library/system.io.file.delete.aspx"&gt;File.Delete&lt;/a&gt; you
see a more detailed error explanation:&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a set="yes" onclick="javascript:Track('ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl24',this);" href="http://msdn2.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx"&gt;UnauthorizedAccessException&lt;/a&gt;:
The caller does not have the required permission.&lt;br&gt;
&lt;/b&gt; 
&lt;p&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -or-&lt;span class="parameter"&gt; path&lt;/span&gt; is a directory.&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -or- &lt;span class="parameter"&gt;path&lt;/span&gt; specified a read-only
file.&lt;/b&gt;
&lt;/p&gt;
&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;And the directory I wanted to delete was ".svn", which is read-only and hidden.
An easy way around that is to change the directory attributes. But that won't help
if there are still files in the directory because you will still get the same error.
Instead you have to replace all the file attribute for all sub directories and files
too. I wrote the following method to do that.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;#region&lt;/span&gt; RemoveAllAttributes&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
Helper to remove all file and sub directory readonly attributes&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
to make SafeDeleteDirectory work!&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;param name="directory"&amp;gt;Directory to change (will be deleted later&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
anyway)&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;private&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; RemoveAllAttributes(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; directory)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
Get all files and sub directories.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;[]
files &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; Directory.GetFiles(directory);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;[]
directories &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; Directory.GetDirectories(directory);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
Kill all attributes, make files normal and directories just directories&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;foreach&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; file &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; files)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;File.SetAttributes(file, FileAttributes.Normal);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;foreach&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; dir &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; directories)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RemoveAllAttributes(dir);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
Finally set the main directory to a normal directory!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;File.SetAttributes(directory, FileAttributes.Directory);&lt;br&gt;
} &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
RemoveAllAttributes(directory)&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;#endregion&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;br&gt;
The rest of the tool is easy to understand and there is nothing special about this
tool except that I find it very useful right now. It is also very fast, I let it run
over 20 000 files and it was done immediately and had deleted several hundert files
in the process. Again: Be careful what you type in the filters textbox and save important
directories before messing with them.&lt;br&gt;
&lt;br&gt;
As always, here is the download and source code (both in .NET 2.0 since I have removed
all LINQ features that were not important for this project anyway):&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemover.zip"&gt;AnnoyingFilesRemover.zip
(6.1 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://studihelp.de/blog/content/binary/AnnoyingFilesRemoverSourceCode.zip"&gt;AnnoyingFilesRemoverSourceCode.zip
(12.27 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://studihelp.de/blog/cptrk.ashx?id=725bf8a1-428a-441c-b8c0-4790a1bae1f3" height="0" width="0"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=56da23ad-02dc-4dcc-8690-a63e0b1e9a00" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,56da23ad-02dc-4dcc-8690-a63e0b1e9a00.aspx</comments>
      <category>All;Development;Other;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=f4bb14be-433c-417d-a902-9d6fe56548f7</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,f4bb14be-433c-417d-a902-9d6fe56548f7.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,f4bb14be-433c-417d-a902-9d6fe56548f7.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f4bb14be-433c-417d-a902-9d6fe56548f7</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://searchdotnet.com">
          <img src="http://searchdotnet.com/images/searchnet.jpg" border="0" />
        </a>
        <br />
        <br />
I just heard this on the <a href="http://www.dotnetrocks.com">DotNetRocks</a> podcast,
where <a href="http://www.danappleman.com/">Dan Appleman</a> talks about Discoverability
with <a href="http://www.intellectualhedonism.com/">Carl</a> and <a href="http://www.campbellassociates.ca/blog/default.aspx">Richard</a>.
He uses <a href="http://google.com/coop/cse/">Google Custom Search</a> to create <a href="http://SearchDotNet.com">SearchDotNet.com</a> (which
was created in one day) and the idea is really cool.<br /><br />
You as a .NET developer will only get useful handpicked urls as search results and
not any spam or meaningless sites. Dan seems to check every site himself and currently
most MSDN blogs and sites are linked in there (as well as MVPs as he tells us on the
show, but I could not find direct links to my blog yet).<br /><br />
Anyway, great idea, hopefully it will not die in a few weeks. Google Custom Search
looks kinda cool too, have to check that out some time in the future.<br /><p></p><img src="http://unifaces.de/blog/cptrk.ashx?id=2109373c-bf2d-419c-8683-789a8f6a6207" height="0" width="0" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f4bb14be-433c-417d-a902-9d6fe56548f7" /></body>
      <title>SearchDotNet, a new search site just for .NET Developers</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,f4bb14be-433c-417d-a902-9d6fe56548f7.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/04/SearchDotNetANewSearchSiteJustForNETDevelopers.aspx</link>
      <pubDate>Wed, 04 Apr 2007 04:48:03 GMT</pubDate>
      <description>&lt;a href="http://searchdotnet.com"&gt;&lt;img src="http://searchdotnet.com/images/searchnet.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
I just heard this on the &lt;a href="http://www.dotnetrocks.com"&gt;DotNetRocks&lt;/a&gt; podcast,
where &lt;a href="http://www.danappleman.com/"&gt;Dan Appleman&lt;/a&gt; talks about Discoverability
with &lt;a href="http://www.intellectualhedonism.com/"&gt;Carl&lt;/a&gt; and &lt;a href="http://www.campbellassociates.ca/blog/default.aspx"&gt;Richard&lt;/a&gt;.
He uses &lt;a href="http://google.com/coop/cse/"&gt;Google Custom Search&lt;/a&gt; to create &lt;a href="http://SearchDotNet.com"&gt;SearchDotNet.com&lt;/a&gt; (which
was created in one day) and the idea is really cool.&lt;br&gt;
&lt;br&gt;
You as a .NET developer will only get useful handpicked urls as search results and
not any spam or meaningless sites. Dan seems to check every site himself and currently
most MSDN blogs and sites are linked in there (as well as MVPs as he tells us on the
show, but I could not find direct links to my blog yet).&lt;br&gt;
&lt;br&gt;
Anyway, great idea, hopefully it will not die in a few weeks. Google Custom Search
looks kinda cool too, have to check that out some time in the future.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://unifaces.de/blog/cptrk.ashx?id=2109373c-bf2d-419c-8683-789a8f6a6207" height="0" width="0"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f4bb14be-433c-417d-a902-9d6fe56548f7" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,f4bb14be-433c-417d-a902-9d6fe56548f7.aspx</comments>
      <category>All;Game Development;Other;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Yeah, blogging every 5 minutes. I'm really
trying to blog more again, let's see how this works out.<br /><br />
Ok, here is there problem: Visual Studio Orcas (March CTP) does support ASP.NET web
projects and you can even load and use previously created ASP.NET Ajax projects, but
you can't create new projects because the Ajax templates are missing!<br /><br />
The solution: Just point the user projects templates directory to your old VS 2005
project templates directory (or copy the templates over to your user projects template
directory) like in the following picture. Make you you have <a href="http://ajax.asp.net/">ASP.NET
Ajax</a> installed and working in your VS 2005 installation.<br /><br />
Path to set:<br /><br /><b>    C:\Program files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Web\CSharp\<br /><br /></b>Btw: The new path in VS Orcas is:<br /><br /><b>    C:\Program files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Web\<br /><br /></b>But just copying the files over there will not do it because VS 9.0 will still
use the cached templates, which are not updated automatically when you change something
there. Just point to the VS 8 template files, that is much easier:<b><br /></b><p></p><img src="http://unifaces.de/blog/content/binary/VisualStudioOrcasAjax1.png" border="0" /><br /><br /><br />
Now you can create new ASP.NET Ajax projects in Visual Studio Orcas with File -&gt;
New -&gt; Web Site:<br /><br /><img src="http://unifaces.de/blog/content/binary/VisualStudioOrcasAjax2.png" border="0" /><img src="http://unifaces.de/blog/cptrk.ashx?id=ff1bb812-9c68-4ec7-bcd9-6fbcb9b48368" height="0" width="0" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22" /></body>
      <title>ASP.NET Ajax Template support in Visual Studio Orcas</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/04/ASPNETAjaxTemplateSupportInVisualStudioOrcas.aspx</link>
      <pubDate>Wed, 04 Apr 2007 02:41:47 GMT</pubDate>
      <description>Yeah, blogging every 5 minutes. I'm really trying to blog more again, let's see how this works out.&lt;br&gt;
&lt;br&gt;
Ok, here is there problem: Visual Studio Orcas (March CTP) does support ASP.NET web
projects and you can even load and use previously created ASP.NET Ajax projects, but
you can't create new projects because the Ajax templates are missing!&lt;br&gt;
&lt;br&gt;
The solution: Just point the user projects templates directory to your old VS 2005
project templates directory (or copy the templates over to your user projects template
directory) like in the following picture. Make you you have &lt;a href="http://ajax.asp.net/"&gt;ASP.NET
Ajax&lt;/a&gt; installed and working in your VS 2005 installation.&lt;br&gt;
&lt;br&gt;
Path to set:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\Program files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Web\CSharp\&lt;br&gt;
&lt;br&gt;
&lt;/b&gt;Btw: The new path in VS Orcas is:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\Program files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Web\&lt;br&gt;
&lt;br&gt;
&lt;/b&gt;But just copying the files over there will not do it because VS 9.0 will still
use the cached templates, which are not updated automatically when you change something
there. Just point to the VS 8 template files, that is much easier:&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://unifaces.de/blog/content/binary/VisualStudioOrcasAjax1.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Now you can create new ASP.NET Ajax projects in Visual Studio Orcas with File -&amp;gt;
New -&amp;gt; Web Site:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://unifaces.de/blog/content/binary/VisualStudioOrcasAjax2.png" border="0"&gt;&lt;img src="http://unifaces.de/blog/cptrk.ashx?id=ff1bb812-9c68-4ec7-bcd9-6fbcb9b48368" height="0" width="0"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,89ec28c3-19f2-4da2-8ccd-01b2cdfb2a22.aspx</comments>
      <category>Ajax;All;Other;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=9c026a06-6d24-4ee2-9485-7db1f89ed573</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,9c026a06-6d24-4ee2-9485-7db1f89ed573.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,9c026a06-6d24-4ee2-9485-7db1f89ed573.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9c026a06-6d24-4ee2-9485-7db1f89ed573</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.publicvoid.dk/content/binary/VisualStudioLogo.gif" />
        <br />
        <br />
Today I found some time to install <a href="http://www.microsoft.com/downloads/details.aspx?familyid=CF76FCBA-07AF-47AC-8822-4AD346210670&amp;displaylang=en#filelist">Visual
Studio Codename Orcas CTP March 2007</a> (see below for all the download links), which
came out last month. I have worked a lot with ASP.NET Atlas (now ASP.NET Ajax) and
LINQ (C# 3.0) before, but they are now beautifully integrated in the latest CTP and
intellisense works so much better than in the early days of LINQ, so getting this
up and running for future projects would be a good thing since I'm an early adopter
anyway.<br /><br />
Initially VS Orcas would not even install at all and I thought maybe my Visual Studio
2005 is messed up because I had some problems with ASP.NET Ajax before and had to
repair VS 2005 a couple of times this year already. After completely uninstalling
VS 2005 and trying again the same fatal error message was still coming up in the Installer:<br /><br /><span id="_ctl0_MainContent_PostFlatView"><span>Microsoft Web Designer Tools failed
.. </span></span><span id="_ctl0_MainContent_PostFlatView"><span>EventType : visualstudio8setup
and then a lot of crazy numbers, which do not help (<a href="http://www.google.com">google</a>ing
did not return anything).<br /><br />
As usual clicking on the '</span></span><span id="_ctl0_MainContent_PostFlatView"><span>view
error log' gets you a site not found page, while the installer creates a couple of
log files in c:\something or c:\program files\microsoft visual studio 9\logs\ like
"dd_vserror80.txt". Those files look interessting, but they only tell me the exact
same crazy numbers and that this component failed. After googleing some more and only
finding similar problems like <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1363516&amp;SiteID=1">this
one</a> I uninstalled everything that could even remotely being used by .NET. After
restarting and trying again the exact same freaking error message appeared. Grrr ...<br /><br />
To make a long story a little bit shorter: I finally found out that Office 2007 was
the root of all the problems, after uninstalling that one (what the hell does this
have to do with web designer tools?) the Orcas installer was working and I could launch
the new version:</span></span><br /><p></p><img src="http://unifaces.de/blog/content/binary/VisualStudioOrcas.png" border="0" /><br /><br />
As you can see it looks the same way as Visual Studio 2005, some colors were just
enhanced. As you can also see I'm back to Windows XP just because so many games do
not work correctly in Vista and many drivers (hello Nvidia) are still shitty and slow.<br /><br /><a href="http://TestDriven.NET">TestDriven.NET</a> works beautifully in VS Orcas and
the developer Jamie Cansdale really does a great job updating the product so often.
He even added VS Express support again recently, which might be cool for XNA Express
developers. I also like the relatively new 'Go to Reflector' feature and especially
the 'Rerun test' I use all the time.<br /><br />
Other plugins I use like CodeRush, VisualSVN, Explorer, LineCounter and whatever do
not show up however. And reinstalling them does not help because the developers of
those just did not update the installers yet. I can live without most plugins, but
not without CodeRush and my CR_Commenter plugin, so I had to get this working. I thought
this would be a long day ahead with all the problems even installing VS Orcas, but
it turned out to be quite easy to add your existing VS 2005 addins to VS Orcas.<br /><br />
If you install VS Orcas after VS 2005 and have all your addins already installed it
will migrate most of them over to VS Orcas, but if you install VS Orcas first (like
I did because I killed VS 2005 before, see above) or install new addins, then you
will need the following tricks to make them work in VS Orcas. Some addins like CodeRush
will not be added by the VS Orcas installation because it misses the "Addins" (CodeRush
1.x) or "PreloadAddinStateManaged" (CodeRush 2.x) registry keys, but you can easily
copy them over from VS 2005 (vs 8.0) to VS Orcas (vs 9.0) the following way:<br /><ul><li>
Open up regedit</li><li>
Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AddIns</li><li>
Search for the CodeRush key and export it</li><li>
If you can't find a CodeRush key here try (probably CodeRush 2.x specific): [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\PreloadAddinStateManaged]</li><li>
If you can't find it there either try the reg installers below!</li><li>
Now edit the exported .reg file and just change the \8.0\ to \9.0\ and save.</li><li>
Finally doubleclick the file to merge it with your registry (at your own risk btw
^^)</li><li>
Start VS Orcas and enjoy the DevExpress menu and the CodeRush functionality :)<br /></li></ul><br />
If you had not installed CodeRush before installing VS Orcas most important registry
keys will be missing and you will probably get some "package could not be loaded error"
like I did. This will also happen if you install other plugins to VS 2005, which are
not installed to VS Orcas like TestDriven.NET does it. Then you have to apply the
following process:<br /><br /><ul><li>
Open up regedit again (you have to repeat this probably a few more times if you miss
any important reg key)</li><li>
Search for your Addin name or navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\InstalledProducts</li><li>
Find your product, it might not be just the name of the product, but something similar
(like DXCore for CodeRush).</li><li>
You need to open up the key and copy the internal package GUID (the long ugly id)
like {BD359A86-BF88-4c4e-A7D2-6CDDA36C3B79} for DXCore</li><li>
Now search the whole HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\ namespace
for this key and export everything to external files.</li><li>
Merge those exported .reg files and replace \8.0\ with \9.0\ like above.</li><li>
Save, import again and start Orcas to test. Repeat until it works ^^<br /></li></ul>
It would probably be better to write some tool for this, especially since there is
almost no addin that will install itself correctly to VS Orcas, but I'm too lazy right
now and have no time for that anyway. But here are a couple of .reg files I used to
restore the 2 most important addins for me:<br /><br /><ul><li>
Install CodeRush 2.1.2 to VS Orcas, uses the default paths (english), change if you
have installed it somewhere else</li><ul><li><a href="http://unifaces.de/blog/content/binary/install_coderush2_vs9.reg">install_coderush2_vs9.reg
(3.08 KB)</a><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"></a></li></ul><li>
Same with german paths (the documents and program files are different in german),
change this to other languages if your windows is not english or german:</li><ul><li><a href="http://unifaces.de/blog/content/binary/install_coderush2_vs9_german_paths.reg">install_coderush2_vs9_german_paths.reg
(3.08 KB)</a><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"></a></li></ul><li>
Same for VisualSVN 1.2.1:</li><ul><li><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9.reg">install_visualsvn_vs9.reg
(1.23 KB)</a><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"></a></li></ul><ul><li><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg">install_visualsvn_vs9_german_paths.reg
(1.22 KB)</a></li></ul></ul>
This will probably only work with the same versions of these addins, but the process
is the same if you need other addins to work. I also tested it on vista and it worked
there too. Again, if you just installed VS Orcas over your existing VS 2005 installation
most addins will be copied and work out of the box. And even addins like CodeRush
can easily be fixed with the tricks above. You probably won't need the .reg files
here, but they may still be useful for someone and if you need additional addins to
work.<br /><br />
I hope this helps if you want to work with VS Orcas too. It did not crash at my computer
yet and I did some nasty things to the registry ^^ It only crashed once at my colleagues
computer so far (and we both set the AutoRecover to 2 minutes just in case, we were
early adopters for VS 2005 too and learned our lessons).<br /><br /><br />
Links:<br /><ul><li><a href="http://www.codeproject.com/useritems/OrcasPreview.asp">A Sneaky Peek At Orcas,
short article showing you how to create a new project with lots of screenshots</a></li></ul><ul><li><a href="http://www.codeproject.com/vista/LINQ_1.asp">LINQ Introduction, very long
article, good information, especially if you need a good introduction and overview
about all features.</a></li></ul><ul><li><a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx">101 LINQ Samples:
Very useful resource to get started and see some useful examples of the new language
features.</a></li></ul><ul><li><a href="http://blogs.msdn.com/charlie/archive/2007/03/04/samples-update.aspx">LINQ
Samples Update for VS Orcas March CTP</a></li></ul><ul><li><a href="http://www.microsoft.com/downloads/details.aspx?familyid=CF76FCBA-07AF-47AC-8822-4AD346210670&amp;displaylang=en#filelist">Download
VS Orcas March CTP (self-extracting install) 4.5 GB</a></li></ul><ul><li><a href="http://www.microsoft.com/downloads/details.aspx?familyid=B533619A-0008-4DD6-9ED1-47D482683C78&amp;displaylang=en#filelist">Download
VS Orcas March CTP (Virtual Image for Virtual PC or Virtual Server in case you are
a pussy) 6.1 GB</a></li></ul><ul><li><a href="http://www.microsoft.com/downloads/details.aspx?familyid=C17C9FB8-2A4A-426D-B08B-6AE614D16A0D&amp;displaylang=en#filelist">Download
VS Orcas March CTP (Team Foundation Server) 860 MB</a></li></ul><a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"></a><img src="http://unifaces.de/blog/cptrk.ashx?id=8693c085-5b5b-4eea-bc2b-2a14d357da4c" height="0" width="0" /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9c026a06-6d24-4ee2-9485-7db1f89ed573" /></body>
      <title>Installing Visual Studio Orcas March CTP and getting Addins like CodeRush to work with it</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,9c026a06-6d24-4ee2-9485-7db1f89ed573.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/04/04/InstallingVisualStudioOrcasMarchCTPAndGettingAddinsLikeCodeRushToWorkWithIt.aspx</link>
      <pubDate>Wed, 04 Apr 2007 02:28:26 GMT</pubDate>
      <description>&lt;img src="http://www.publicvoid.dk/content/binary/VisualStudioLogo.gif"&gt;
&lt;br&gt;
&lt;br&gt;
Today I found some time to install &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=CF76FCBA-07AF-47AC-8822-4AD346210670&amp;amp;displaylang=en#filelist"&gt;Visual
Studio Codename Orcas CTP March 2007&lt;/a&gt; (see below for all the download links), which
came out last month. I have worked a lot with ASP.NET Atlas (now ASP.NET Ajax) and
LINQ (C# 3.0) before, but they are now beautifully integrated in the latest CTP and
intellisense works so much better than in the early days of LINQ, so getting this
up and running for future projects would be a good thing since I'm an early adopter
anyway.&lt;br&gt;
&lt;br&gt;
Initially VS Orcas would not even install at all and I thought maybe my Visual Studio
2005 is messed up because I had some problems with ASP.NET Ajax before and had to
repair VS 2005 a couple of times this year already. After completely uninstalling
VS 2005 and trying again the same fatal error message was still coming up in the Installer:&lt;br&gt;
&lt;br&gt;
&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;Microsoft Web Designer Tools failed
.. &lt;/span&gt;&lt;/span&gt;&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;EventType : visualstudio8setup
and then a lot of crazy numbers, which do not help (&lt;a href="http://www.google.com"&gt;google&lt;/a&gt;ing
did not return anything).&lt;br&gt;
&lt;br&gt;
As usual clicking on the '&lt;/span&gt;&lt;/span&gt;&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;view
error log' gets you a site not found page, while the installer creates a couple of
log files in c:\something or c:\program files\microsoft visual studio 9\logs\ like
"dd_vserror80.txt". Those files look interessting, but they only tell me the exact
same crazy numbers and that this component failed. After googleing some more and only
finding similar problems like &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1363516&amp;amp;SiteID=1"&gt;this
one&lt;/a&gt; I uninstalled everything that could even remotely being used by .NET. After
restarting and trying again the exact same freaking error message appeared. Grrr ...&lt;br&gt;
&lt;br&gt;
To make a long story a little bit shorter: I finally found out that Office 2007 was
the root of all the problems, after uninstalling that one (what the hell does this
have to do with web designer tools?) the Orcas installer was working and I could launch
the new version:&lt;/span&gt;&lt;/span&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://unifaces.de/blog/content/binary/VisualStudioOrcas.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
As you can see it looks the same way as Visual Studio 2005, some colors were just
enhanced. As you can also see I'm back to Windows XP just because so many games do
not work correctly in Vista and many drivers (hello Nvidia) are still shitty and slow.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://TestDriven.NET"&gt;TestDriven.NET&lt;/a&gt; works beautifully in VS Orcas and
the developer Jamie Cansdale really does a great job updating the product so often.
He even added VS Express support again recently, which might be cool for XNA Express
developers. I also like the relatively new 'Go to Reflector' feature and especially
the 'Rerun test' I use all the time.&lt;br&gt;
&lt;br&gt;
Other plugins I use like CodeRush, VisualSVN, Explorer, LineCounter and whatever do
not show up however. And reinstalling them does not help because the developers of
those just did not update the installers yet. I can live without most plugins, but
not without CodeRush and my CR_Commenter plugin, so I had to get this working. I thought
this would be a long day ahead with all the problems even installing VS Orcas, but
it turned out to be quite easy to add your existing VS 2005 addins to VS Orcas.&lt;br&gt;
&lt;br&gt;
If you install VS Orcas after VS 2005 and have all your addins already installed it
will migrate most of them over to VS Orcas, but if you install VS Orcas first (like
I did because I killed VS 2005 before, see above) or install new addins, then you
will need the following tricks to make them work in VS Orcas. Some addins like CodeRush
will not be added by the VS Orcas installation because it misses the "Addins" (CodeRush
1.x) or "PreloadAddinStateManaged" (CodeRush 2.x) registry keys, but you can easily
copy them over from VS 2005 (vs 8.0) to VS Orcas (vs 9.0) the following way:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Open up regedit&lt;/li&gt;
&lt;li&gt;
Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AddIns&lt;/li&gt;
&lt;li&gt;
Search for the CodeRush key and export it&lt;/li&gt;
&lt;li&gt;
If you can't find a CodeRush key here try (probably CodeRush 2.x specific): [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\PreloadAddinStateManaged]&lt;/li&gt;
&lt;li&gt;
If you can't find it there either try the reg installers below!&lt;/li&gt;
&lt;li&gt;
Now edit the exported .reg file and just change the \8.0\ to \9.0\ and save.&lt;/li&gt;
&lt;li&gt;
Finally doubleclick the file to merge it with your registry (at your own risk btw
^^)&lt;/li&gt;
&lt;li&gt;
Start VS Orcas and enjoy the DevExpress menu and the CodeRush functionality :)&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
If you had not installed CodeRush before installing VS Orcas most important registry
keys will be missing and you will probably get some "package could not be loaded error"
like I did. This will also happen if you install other plugins to VS 2005, which are
not installed to VS Orcas like TestDriven.NET does it. Then you have to apply the
following process:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Open up regedit again (you have to repeat this probably a few more times if you miss
any important reg key)&lt;/li&gt;
&lt;li&gt;
Search for your Addin name or navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\InstalledProducts&lt;/li&gt;
&lt;li&gt;
Find your product, it might not be just the name of the product, but something similar
(like DXCore for CodeRush).&lt;/li&gt;
&lt;li&gt;
You need to open up the key and copy the internal package GUID (the long ugly id)
like {BD359A86-BF88-4c4e-A7D2-6CDDA36C3B79} for DXCore&lt;/li&gt;
&lt;li&gt;
Now search the whole HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\ namespace
for this key and export everything to external files.&lt;/li&gt;
&lt;li&gt;
Merge those exported .reg files and replace \8.0\ with \9.0\ like above.&lt;/li&gt;
&lt;li&gt;
Save, import again and start Orcas to test. Repeat until it works ^^&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
It would probably be better to write some tool for this, especially since there is
almost no addin that will install itself correctly to VS Orcas, but I'm too lazy right
now and have no time for that anyway. But here are a couple of .reg files I used to
restore the 2 most important addins for me:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Install CodeRush 2.1.2 to VS Orcas, uses the default paths (english), change if you
have installed it somewhere else&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://unifaces.de/blog/content/binary/install_coderush2_vs9.reg"&gt;install_coderush2_vs9.reg
(3.08 KB)&lt;/a&gt;&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Same with german paths (the documents and program files are different in german),
change this to other languages if your windows is not english or german:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://unifaces.de/blog/content/binary/install_coderush2_vs9_german_paths.reg"&gt;install_coderush2_vs9_german_paths.reg
(3.08 KB)&lt;/a&gt;&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Same for VisualSVN 1.2.1:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9.reg"&gt;install_visualsvn_vs9.reg
(1.23 KB)&lt;/a&gt;&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"&gt;install_visualsvn_vs9_german_paths.reg
(1.22 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
This will probably only work with the same versions of these addins, but the process
is the same if you need other addins to work. I also tested it on vista and it worked
there too. Again, if you just installed VS Orcas over your existing VS 2005 installation
most addins will be copied and work out of the box. And even addins like CodeRush
can easily be fixed with the tricks above. You probably won't need the .reg files
here, but they may still be useful for someone and if you need additional addins to
work.&lt;br&gt;
&lt;br&gt;
I hope this helps if you want to work with VS Orcas too. It did not crash at my computer
yet and I did some nasty things to the registry ^^ It only crashed once at my colleagues
computer so far (and we both set the AutoRecover to 2 minutes just in case, we were
early adopters for VS 2005 too and learned our lessons).&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Links:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.codeproject.com/useritems/OrcasPreview.asp"&gt;A Sneaky Peek At Orcas,
short article showing you how to create a new project with lots of screenshots&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.codeproject.com/vista/LINQ_1.asp"&gt;LINQ Introduction, very long
article, good information, especially if you need a good introduction and overview
about all features.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx"&gt;101 LINQ Samples:
Very useful resource to get started and see some useful examples of the new language
features.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/charlie/archive/2007/03/04/samples-update.aspx"&gt;LINQ
Samples Update for VS Orcas March CTP&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=CF76FCBA-07AF-47AC-8822-4AD346210670&amp;amp;displaylang=en#filelist"&gt;Download
VS Orcas March CTP (self-extracting install) 4.5 GB&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=B533619A-0008-4DD6-9ED1-47D482683C78&amp;amp;displaylang=en#filelist"&gt;Download
VS Orcas March CTP (Virtual Image for Virtual PC or Virtual Server in case you are
a pussy) 6.1 GB&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C17C9FB8-2A4A-426D-B08B-6AE614D16A0D&amp;amp;displaylang=en#filelist"&gt;Download
VS Orcas March CTP (Team Foundation Server) 860 MB&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;a href="http://unifaces.de/blog/content/binary/install_visualsvn_vs9_german_paths.reg"&gt;&lt;/a&gt;&lt;img src="http://unifaces.de/blog/cptrk.ashx?id=8693c085-5b5b-4eea-bc2b-2a14d357da4c" height="0" width="0"&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9c026a06-6d24-4ee2-9485-7db1f89ed573" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,9c026a06-6d24-4ee2-9485-7db1f89ed573.aspx</comments>
      <category>All;Game Development;Other;Programming;Ajax</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,ff31f4b8-bea4-456b-8e87-68ba7cb2b07b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,ff31f4b8-bea4-456b-8e87-68ba7cb2b07b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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. 
<p>
Download the game installer here (40 MB): <a href="http://www.unifaces.de/DungeonQuest/DungeonQuestSetup.zip">DungeonQuestSetup.zip</a><br />
Alternative download (slow! from this site): <a href="http://exdream.no-ip.info/blog/DungeonQuestSetup.zip">DungeonQuestSetup.zip</a><br /><br />
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). 
</p><p>
Here is a little video from the current version of the game. Enjoy! <a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"></a><a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"></a><a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"></a><a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"></a><a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"></a><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/FO1PNgIwjB4" /><embed src="http://www.youtube.com/v/FO1PNgIwjB4" type="application/x-shockwave-flash" height="350" width="425"></embed></object></p><p><b>Screenshots:</b><br /><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001small.jpg" border="0" /></a><br />
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!<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004small.jpg" border="0" /></a><br />
First quest completed. This key is important to open the door to the second level.<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006small.jpg" border="0" /></a><br />
Nonstop fighting action. Well, at least if you don't lose your way.<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009small.jpg" border="0" /></a><br />
This is how it looks like after I got angry. I told those guys, don't start any fights!<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011small.jpg" border="0" /></a><br />
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.<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012small.jpg" border="0" /></a><br />
The credit screen when the game ends. Notice my book :)<br /></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016small.jpg" border="0" /></a><br />
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.<br /></p><p><b>Improvements:</b></p><ul><li>
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).<br />
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. 
</li><li>
Fixed parallax mapping for the cave and improved the specular effects, looks much
nicer now. Also increased view distance and light affect range. 
</li><li>
Improved the music and sound effects, also added a lot more events and little sounds. 
</li><li>
Added many text messages to help the player understand the game better 
</li><li>
Check if computer can do ps 3.0, else shows big message on screen. 
</li><li>
Support for 64 bit systems (did not start before) 
</li><li>
Reduced glow in post screen (see comments of beta version) 
</li><li>
Fixed game logic and quests (did not work at all in the beta) 
</li><li>
All game actions get a nice message now in the center (killed ogre, got key, quest
complete, new weapon, etc.) 
</li><li>
Implemented several new animations for hitting and dying 
</li><li>
Fixed text size in 3:4 resolutions (did only look correct in 16:9) 
</li><li>
Improved gravity (much stronger now) and fixed several collision bugs 
</li><li>
Fixed collecting key, added it to the UI and also allowing dropping weapons now 
</li><li>
Allow switching weapons (right/left shoulder buttons or Q/E or Mouse wheel) 
</li><li>
Selected enemy ring to help you see which enemy is attacted 
</li><li>
Rumble Xbox 360 controller when hit/getting hit 
</li><li>
Added end screen and credits with book link, credits 
</li><li>
Improved weapons, damages and made the game more balanced. 
</li><li>
Show high score list when game over 
</li><li>
Mouse support for dungeon quest (shooter like, just asdw for moving) 
</li><li>
Block door when we don't got key! Also added sphere collision for monsters (they don't
intersect anymore) 
</li><li>
Fixed shadow mapping and added a lot of cool shadow effects and pseudo point light
sources. 
</li><li>
Added nice looking vista compatible icon, also tested the whole game on vista, runs
fine :) 
</li><li>
Added some grunt sounds and an ambient theme in the background! 
</li><li>
And many more .. 
</li></ul>
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 ^^<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b" /></body>
      <title>The Dungeon Quest Game</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,ff31f4b8-bea4-456b-8e87-68ba7cb2b07b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/16/TheDungeonQuestGame.aspx</link>
      <pubDate>Fri, 16 Mar 2007 13:19:59 GMT</pubDate>
      <description>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.
&lt;p&gt;
Download the game installer here (40 MB): &lt;a href="http://www.unifaces.de/DungeonQuest/DungeonQuestSetup.zip"&gt;DungeonQuestSetup.zip&lt;/a&gt;
&lt;br&gt;
Alternative download (slow! from this site): &lt;a href="http://exdream.no-ip.info/blog/DungeonQuestSetup.zip"&gt;DungeonQuestSetup.zip&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
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). 
&lt;/p&gt;
&lt;p&gt;
Here is a little video from the current version of the game. Enjoy! &lt;a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;/a&gt;&lt;a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;/a&gt;&lt;a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;/a&gt;&lt;a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;/a&gt;&lt;a style="left: 434px ! important; top: -3px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;/a&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/FO1PNgIwjB4"&gt;&lt;embed src="http://www.youtube.com/v/FO1PNgIwjB4" type="application/x-shockwave-flash" height="350" width="425"&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Screenshots:&lt;/b&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0001small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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!&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0004small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
First quest completed. This key is important to open the door to the second level.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0006small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Nonstop fighting action. Well, at least if you don't lose your way.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0009small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
This is how it looks like after I got angry. I told those guys, don't start any fights!&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0011small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0012small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
The credit screen when the game ends. Notice my book :)&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshot0016small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Improvements:&lt;/b&gt; 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
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).&lt;br&gt;
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. 
&lt;/li&gt;
&lt;li&gt;
Fixed parallax mapping for the cave and improved the specular effects, looks much
nicer now. Also increased view distance and light affect range. 
&lt;/li&gt;
&lt;li&gt;
Improved the music and sound effects, also added a lot more events and little sounds. 
&lt;/li&gt;
&lt;li&gt;
Added many text messages to help the player understand the game better 
&lt;/li&gt;
&lt;li&gt;
Check if computer can do ps 3.0, else shows big message on screen. 
&lt;/li&gt;
&lt;li&gt;
Support for 64 bit systems (did not start before) 
&lt;/li&gt;
&lt;li&gt;
Reduced glow in post screen (see comments of beta version) 
&lt;/li&gt;
&lt;li&gt;
Fixed game logic and quests (did not work at all in the beta) 
&lt;/li&gt;
&lt;li&gt;
All game actions get a nice message now in the center (killed ogre, got key, quest
complete, new weapon, etc.) 
&lt;/li&gt;
&lt;li&gt;
Implemented several new animations for hitting and dying 
&lt;/li&gt;
&lt;li&gt;
Fixed text size in 3:4 resolutions (did only look correct in 16:9) 
&lt;/li&gt;
&lt;li&gt;
Improved gravity (much stronger now) and fixed several collision bugs 
&lt;/li&gt;
&lt;li&gt;
Fixed collecting key, added it to the UI and also allowing dropping weapons now 
&lt;/li&gt;
&lt;li&gt;
Allow switching weapons (right/left shoulder buttons or Q/E or Mouse wheel) 
&lt;/li&gt;
&lt;li&gt;
Selected enemy ring to help you see which enemy is attacted 
&lt;/li&gt;
&lt;li&gt;
Rumble Xbox 360 controller when hit/getting hit 
&lt;/li&gt;
&lt;li&gt;
Added end screen and credits with book link, credits 
&lt;/li&gt;
&lt;li&gt;
Improved weapons, damages and made the game more balanced. 
&lt;/li&gt;
&lt;li&gt;
Show high score list when game over 
&lt;/li&gt;
&lt;li&gt;
Mouse support for dungeon quest (shooter like, just asdw for moving) 
&lt;/li&gt;
&lt;li&gt;
Block door when we don't got key! Also added sphere collision for monsters (they don't
intersect anymore) 
&lt;/li&gt;
&lt;li&gt;
Fixed shadow mapping and added a lot of cool shadow effects and pseudo point light
sources. 
&lt;/li&gt;
&lt;li&gt;
Added nice looking vista compatible icon, also tested the whole game on vista, runs
fine :) 
&lt;/li&gt;
&lt;li&gt;
Added some grunt sounds and an ambient theme in the background! 
&lt;/li&gt;
&lt;li&gt;
And many more .. 
&lt;/li&gt;
&lt;/ul&gt;
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 ^^&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=ff31f4b8-bea4-456b-8e87-68ba7cb2b07b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,ff31f4b8-bea4-456b-8e87-68ba7cb2b07b.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=aacf9b5a-b152-4a21-9445-90626d8690c8</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,aacf9b5a-b152-4a21-9445-90626d8690c8.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,aacf9b5a-b152-4a21-9445-90626d8690c8.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aacf9b5a-b152-4a21-9445-90626d8690c8</wfw:commentRss>
      <slash:comments>13</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Hey everyone, we finally finished the game
yesterday for the Microsoft XNA Party here at the GDC.<br /><br />
For some strange reason my main server in germany went offline today and I finally
got it up and running again (thanks to Leif, he had to run over to the office and
restart the server in the middle of the night ^^).<br /><br />
Here is a little screenshot of the final game. I will post more later and do a video
too.<br /><p></p><p><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestDay4_0001.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestDay4_0001small.jpg" border="0" /></a><br /><br />
If you want an real early preview of the version so far, you can download it here
(with installer and everything, about 38 MB). We will fix some issues today and make
an update this weekend. There are many more features we had implemented (splitscreen,
shadowing, quest solving), but we removed all that to just make the version run because
there were still some issues. Anyway, enjoy the game so far. Thanks for all the nice
comments.<br /><br /><strong>Update: </strong>Fast Download from new Server: <a href="http://unifaces.de/DungeonQuest/DungeonQuestBetaSetup.zip">Dungeon
Quest Beta (38 MB) (Day 4 GDC version)</a><br />
Original Server (slow): <a href="http://exdream.no-ip.info/blog/DungeonQuestBetaSetup.zip">Dungeon
Quest Beta (38 MB) (Day 4 GDC version)</a> (WARNING: slow download from this
website)<br /></p><p>
Tomorrow there will be an update and all the beta issues will be fixed + more features
will come, stay tuned!
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=aacf9b5a-b152-4a21-9445-90626d8690c8" /></body>
      <title>GDC Day 4 - The Game is done</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,aacf9b5a-b152-4a21-9445-90626d8690c8.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/09/GDCDay4TheGameIsDone.aspx</link>
      <pubDate>Fri, 09 Mar 2007 23:20:35 GMT</pubDate>
      <description>Hey everyone, we finally finished the game yesterday for the Microsoft XNA Party here at the GDC.&lt;br&gt;
&lt;br&gt;
For some strange reason my main server in germany went offline today and I finally
got it up and running again (thanks to Leif, he had to run over to the office and
restart the server in the middle of the night ^^).&lt;br&gt;
&lt;br&gt;
Here is a little screenshot of the final game. I will post more later and do a video
too.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestDay4_0001.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestDay4_0001small.jpg" border=0&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
If you want an real early preview of the version so far, you can download it here
(with installer and everything, about 38 MB). We will fix some issues today and make
an update this weekend. There are many more features we had implemented (splitscreen,
shadowing, quest solving), but we removed all that to just make the version run because
there were still some issues. Anyway, enjoy the game so far. Thanks for all the nice
comments.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Update: &lt;/strong&gt;Fast Download from new Server: &lt;a href="http://unifaces.de/DungeonQuest/DungeonQuestBetaSetup.zip"&gt;Dungeon
Quest Beta (38 MB) (Day 4 GDC version)&lt;/a&gt;
&lt;br&gt;
Original Server (slow): &lt;a href="http://exdream.no-ip.info/blog/DungeonQuestBetaSetup.zip"&gt;Dungeon
Quest Beta (38 MB) (Day 4 GDC version)&lt;/a&gt;&amp;nbsp;(WARNING: slow download from this
website)&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Tomorrow there will be an update and all the beta issues will be fixed + more features
will come, stay tuned!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=aacf9b5a-b152-4a21-9445-90626d8690c8" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,aacf9b5a-b152-4a21-9445-90626d8690c8.aspx</comments>
      <category>All;Game Development;Other;Programming;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=b1039a57-e5dd-4b3c-8c24-14e03bbc4fac</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,b1039a57-e5dd-4b3c-8c24-14e03bbc4fac.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,b1039a57-e5dd-4b3c-8c24-14e03bbc4fac.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b1039a57-e5dd-4b3c-8c24-14e03bbc4fac</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">.. have no time .. got no sleep .. have
to finish game today ..<br /><br />
This is the screen from yesterday/this morning (day 3):<br /><br /><a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay3.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay3small.jpg" border="0" /></a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=b1039a57-e5dd-4b3c-8c24-14e03bbc4fac" /></body>
      <title>GDC 2007 - Dungeon Quest - Day 3</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,b1039a57-e5dd-4b3c-8c24-14e03bbc4fac.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/08/GDC2007DungeonQuestDay3.aspx</link>
      <pubDate>Thu, 08 Mar 2007 18:36:10 GMT</pubDate>
      <description>.. have no time .. got no sleep .. have to finish game today ..&lt;br&gt;
&lt;br&gt;
This is the screen from yesterday/this morning (day 3):&lt;br&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay3.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay3small.jpg" border="0"&gt;&lt;/a&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=b1039a57-e5dd-4b3c-8c24-14e03bbc4fac" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,b1039a57-e5dd-4b3c-8c24-14e03bbc4fac.aspx</comments>
      <category>All;Game Development;Other;Programming;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=4f486c75-8931-419d-8b1f-4d88c689104e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,4f486c75-8931-419d-8b1f-4d88c689104e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,4f486c75-8931-419d-8b1f-4d88c689104e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4f486c75-8931-419d-8b1f-4d88c689104e</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Really short post for yesterday. I had
not much time today to post and we are half a day behind. But tonight we are going
to improve our game a lot. 
<p>
Tomorrow I will post another screen for today and talk about what happened today (I
spoke at the Collada panel, that was a lot of fun and we took some new pictures). 
</p><p>
Our Dungeon Quest Game still looks pretty good and we advancing a lot, at least with
the graphics. Keep in mind that we started with nothing, no real engine, I have never
done point lights before and all the texture and 3d models were created in the last
2 days. 
</p><p>
Some parts of the game are also implemented, but we will still have a lot of work
to get all the quests, monsters and AI working properly and there are still some heavy
issues like implementing shadow maps indoor with point lights (uff) and I still have
no idea how to get the split screen stuff working efficiently. 
</p><p>
Here is the screen shot for day 2 (yesterday), it shows the player model and the cave. <a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay2.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay2small.jpg" border="0" /></a></p><p>
Stay tuned, more to come!<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4f486c75-8931-419d-8b1f-4d88c689104e" /></p></body>
      <title>Dungeon Quest - Day 2</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,4f486c75-8931-419d-8b1f-4d88c689104e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/08/DungeonQuestDay2.aspx</link>
      <pubDate>Thu, 08 Mar 2007 06:38:58 GMT</pubDate>
      <description>Really short post for yesterday. I had not much time today to post and we are half a day behind. But tonight we are going to improve our game a lot.
&lt;p&gt;
Tomorrow I will post another screen for today and talk about what happened today (I
spoke at the Collada panel, that was a lot of fun and we took some new pictures). 
&lt;p&gt;
Our Dungeon Quest Game still looks pretty good and we advancing a lot, at least with
the graphics. Keep in mind that we started with nothing, no real engine, I have never
done point lights before and all the texture and 3d models were created in the last
2 days. 
&lt;p&gt;
Some parts of the game are also implemented, but we will still have a lot of work
to get all the quests, monsters and AI working properly and there are still some heavy
issues like implementing shadow maps indoor with point lights (uff) and I still have
no idea how to get the split screen stuff working efficiently. 
&lt;p&gt;
Here is the screen shot for day 2 (yesterday), it shows the player model and the cave. &lt;a href="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay2.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/DungeonQuestScreenshotDay2small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Stay tuned, more to come!&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4f486c75-8931-419d-8b1f-4d88c689104e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,4f486c75-8931-419d-8b1f-4d88c689104e.aspx</comments>
      <category>All;Game Development;Other;Programming;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=999a41b7-8f24-4559-875f-706f1ca38e42</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=999a41b7-8f24-4559-875f-706f1ca38e42</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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. 
<p>
Our game is called <b>Dungeon Quest</b> 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. 
</p><p>
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. 
</p><p>
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: 
</p><ul><li>
Like just rendering some text on the screen, 
</li><li>
Finding a good font for that, 
</li><li>
Creating a bitmap font, 
</li><li>
Also making other UI elements (selected monster, health, level up, etc.) 
</li><li>
Rendering shaders and playing around with point lights 
</li><li>
Working on many other smaller issues like effects, billboards, vertex formats, etc. 
</li><li>
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. 
</li></ul>
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. 
<p>
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. 
<br /><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1small.jpg" border="0" /></a></p><p>
And here are some pictures from yesterday for your enjoyment.<br /><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01small.jpg" border="0" /></a><br />
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 ^^ 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02small.jpg" border="0" /></a><br />
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. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03small.jpg" border="0" /></a><br />
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. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04small.jpg" border="0" /></a><br />
Alcatraz at day time. I already showed you a picture at night earlier. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05small.jpg" border="0" /></a><br />
A view from my desk at the Hotel over San Francisco. Its still impressive every day
you wake up ^^ 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06small.jpg" border="0" /></a><br />
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!<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=999a41b7-8f24-4559-875f-706f1ca38e42" /></p></body>
      <title>GDC 2007 - Dungeon Quest - Day 1</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/06/GDC2007DungeonQuestDay1.aspx</link>
      <pubDate>Tue, 06 Mar 2007 23:14:02 GMT</pubDate>
      <description>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.
&lt;p&gt;
Our game is called &lt;b&gt;Dungeon Quest&lt;/b&gt; 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. 
&lt;p&gt;
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. 
&lt;p&gt;
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: 
&lt;ul&gt;
&lt;li&gt;
Like just rendering some text on the screen, 
&lt;li&gt;
Finding a good font for that, 
&lt;li&gt;
Creating a bitmap font, 
&lt;li&gt;
Also making other UI elements (selected monster, health, level up, etc.) 
&lt;li&gt;
Rendering shaders and playing around with point lights 
&lt;li&gt;
Working on many other smaller issues like effects, billboards, vertex formats, etc. 
&lt;li&gt;
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. 
&lt;/ul&gt;
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. 
&lt;p&gt;
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. 
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
And here are some pictures from yesterday for your enjoyment.&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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 ^^ 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Alcatraz at day time. I already showed you a picture at night earlier. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
A view from my desk at the Hotel over San Francisco. Its still impressive every day
you wake up ^^ 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
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!&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=999a41b7-8f24-4559-875f-706f1ca38e42" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=8a6b8e64-8c4a-472f-9453-2a8531268614</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,8a6b8e64-8c4a-472f-9453-2a8531268614.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,8a6b8e64-8c4a-472f-9453-2a8531268614.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8a6b8e64-8c4a-472f-9453-2a8531268614</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I was quiet busy this week with our current
project Arena Wars Reloaded. We got a playable version now, but there are still some
issues. It runs fast and uses glsl now (instead of CgFX, which sucks, I will talk
about that in a future blog post), there are also some new post processing shaders,
but there is still some finetuning to be done. 
<p>
Here are some screenshots from the version. More to come till the end of march, when
we will be done with the game and all new effects, etc. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/screenshot0005.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/screenshot0005small.jpg" border="0" /></a><br />
New snow texture pack and heavy glow, may need a little weaker post screen effect
^^ 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/screenshot0021.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/screenshot0021small.jpg" border="0" /></a><br />
Fight in Mission 1, water looks cooler now and some new effects, but I was to lazy
to play more and go into a later level.<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8a6b8e64-8c4a-472f-9453-2a8531268614" /></p></body>
      <title>Some new Arena Wars Reloaded pics</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,8a6b8e64-8c4a-472f-9453-2a8531268614.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/04/SomeNewArenaWarsReloadedPics.aspx</link>
      <pubDate>Sun, 04 Mar 2007 21:04:54 GMT</pubDate>
      <description>I was quiet busy this week with our current project Arena Wars Reloaded. We got a playable version now, but there are still some issues. It runs fast and uses glsl now (instead of CgFX, which sucks, I will talk about that in a future blog post), there are also some new post processing shaders, but there is still some finetuning to be done.
&lt;p&gt;
Here are some screenshots from the version. More to come till the end of march, when
we will be done with the game and all new effects, etc. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/screenshot0005.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/screenshot0005small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
New snow texture pack and heavy glow, may need a little weaker post screen effect
^^ 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/screenshot0021.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/screenshot0021small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Fight in Mission 1, water looks cooler now and some new effects, but I was to lazy
to play more and go into a later level.&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8a6b8e64-8c4a-472f-9453-2a8531268614" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,8a6b8e64-8c4a-472f-9453-2a8531268614.aspx</comments>
      <category>All;Arena Wars;Game Development;Other;Programming</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=7e7c8387-bb44-459e-ad4e-ce315836229a</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,7e7c8387-bb44-459e-ad4e-ce315836229a.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,7e7c8387-bb44-459e-ad4e-ce315836229a.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e7c8387-bb44-459e-ad4e-ce315836229a</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.gdconf.com/images/logo_gdconf.gif" />                   <img src="http://www.gdconf.com/images/datelocation.gif" /><br /><br />
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 (<a href="http://gamedev.net">gamedev.net</a> 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 <a href="http://www.exDream.com">www.exDream.com</a> we
usually attend the CeBIT here in Hannover instead and go to all the other conferences
and fairs here in Germany ^^<br /><br />
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?).<br /><br />
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 <a href="http://blogs.msdn.com/xna/">XNA
Team Blog</a>.<br /><br />
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 ^^<br />
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.<br /><br />
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 :-)<br /><br />
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.<br /><p></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7e7c8387-bb44-459e-ad4e-ce315836229a" /></body>
      <title>The GDC (Game Developers Conference) 2007 in San Francisco</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,7e7c8387-bb44-459e-ad4e-ce315836229a.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/02/27/TheGDCGameDevelopersConference2007InSanFrancisco.aspx</link>
      <pubDate>Tue, 27 Feb 2007 16:52:44 GMT</pubDate>
      <description>&lt;img src="http://www.gdconf.com/images/logo_gdconf.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://www.gdconf.com/images/datelocation.gif"&gt;
&lt;br&gt;
&lt;br&gt;
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 (&lt;a href="http://gamedev.net"&gt;gamedev.net&lt;/a&gt; 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 &lt;a href="http://www.exDream.com"&gt;www.exDream.com&lt;/a&gt; we
usually attend the CeBIT here in Hannover instead and go to all the other conferences
and fairs here in Germany ^^&lt;br&gt;
&lt;br&gt;
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?).&lt;br&gt;
&lt;br&gt;
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 &lt;a href="http://blogs.msdn.com/xna/"&gt;XNA
Team Blog&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
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 ^^&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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 :-)&lt;br&gt;
&lt;br&gt;
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.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7e7c8387-bb44-459e-ad4e-ce315836229a" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,7e7c8387-bb44-459e-ad4e-ce315836229a.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=2b9f62ce-fc9c-4696-8f7f-701903f8285b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2b9f62ce-fc9c-4696-8f7f-701903f8285b</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">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
:-) 
<p></p><h2>Content
</h2><ul><li><a href="#Downloads">Video, Screenshot and Downloads</a></li><li><a href="#Introduction">Introduction and why Collada?</a></li><li><a href="#ClassOverview">Class Overview</a></li><li><a href="#LoadingCollada">Loading collada files</a></li><li><a href="#AnimationData">Problems with the animation data</a></li><li><a href="#Optimizations1">Optimizing vertices</a></li><li><a href="#Optimizations2">Optimizing the Optimization</a></li><li><a href="#Shaders1">Adjusting the shaders for skinned meshes</a></li><li><a href="#Shaders2">Post screen shaders for the final result</a></li><li><a href="#References">References and Links</a></li></ul><p><br /><a name="Downloads"><h2>Video, Screenshot and Downloads
</h2></a>First of all, here is a video for the project I'm talking about here:<br /><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/Oyd18KokT_o" /><embed src="http://www.youtube.com/v/Oyd18KokT_o" type="application/x-shockwave-flash" height="350" width="425"></embed></object></p><p>
Screenshot of the same scene (better quality since youtube videos just suck quality
wise):<br /><a href="images/TestGobilnColladaSceneScreenshot0009.jpg"><img src="images/TestGobilnColladaSceneScreenshot0009small.jpg" border="0" /></a></p><p>
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 ^^).<br /></p><ul><li>
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.<br /><a href="SkinningWithColladaModelsInXnaSourceCode.zip">SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB)</a></li><li>
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 <b>XNA Game Studio
Express</b> installed yet. You still need the <b>XNA Framework</b> for this program, <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2E136A1F-F187-478C-9DA5-AAEB0904782B&amp;displaylang=en">download
it here</a>, if you do not have it installed yet! You also need a <b>Shader Model
2.0</b> capable graphic card.<br /><a href="SkinningWithColladaModelsInXnaExecuteable.zip">SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB)<br /><br /></a>Update <b>2007-02-26</b>: Fixed time steps, in release mode with more than 200-300
fps the animation was getting too slow. Now works flawless :)<br /></li></ul>
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 ^^). 
<p><br /><a name="Introduction"><h2>Introduction and why Collada?
</h2></a>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.<br />
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. 
</p><p>
There is a nice project on CodePlex called <a href="http://www.codeplex.com/animationcomponents">XNA
Animation Component Library</a>, 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 (<a href="http://www.andytather.co.uk/Panda/directxmax.aspx">Panda
Exporter for 3dsMax</a> was good a year ago, I still use it, now <a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html">kiloWatt
X file Exporter for 3dsMax</a> 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. 
</p><p>
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 <a href="http://www.feelingsoftware.com/content/view/16/30/">Feeling
Software</a>. 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. 
</p><p>
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. 
</p><p>
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. 
</p><p>
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 <a href="http://www.codeplex.com/animationcomponents">XNA
Animation Component Library</a> 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). 
</p><p>
After some searching I saw some guy called remi from the <a href="https://collada.org/public_forum/">collada
forum</a> 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 ^^). <a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;highlight=&amp;sid=f5b56a89076e08d6c4175db5490db4da#2373">Here
is the thread about that in the collada forum</a>. 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. 
</p><p>
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 <a href="http://www.ArenaWars.net">Arena Wars Reloaded</a>,
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. 
<br /><a name="ClassOverview"><h2>Class Overview
</h2></a>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. 
</p><p><a href="images/SkinningInColladaClassOverview.png"><img src="images/SkinningInColladaClassOverviewSmall.png" border="0" /></a></p><p>
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 <a href="http://www.khronos.org/files/collada_spec_1_4">collada
specifications</a> 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. 
</p><p>
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. 
</p><p>
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. 
</p><p>
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. 
</p><p>
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. 
</p><p><br /><a name="LoadingCollada"><h2>Loading collada files
</h2></a></p><p>
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. 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
&lt;summary&gt;</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
Collada model. Supports bones and animation for collada (.dae) exported</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
3D Models from 3D Studio Max (8 or 9).</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
This class is just for testing and it will only display one single mesh</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
with bone and skinning support, the mesh also can only have one single</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
material. Bones can be either in matrix mode or stored with transform</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
and rotation values. SkinnedTangentVertex is used to store the vertices.</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
&lt;/summary&gt;</span><br /><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">   class</span> ColladaModel
: IDisposable</span></p><p>
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). 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Constructor<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Create a model from a collada file</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="setName"&gt;Set name&lt;/param&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span> ColladaModel(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> setName)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Set name to identify this model and build the filename</span><br />
        name <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> setName;<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> filename <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> Path.Combine(ColladaDirectory,<br />
            StringHelper.ExtractFilename(name, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"."</span><span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
            ColladaExtension);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load file</span><br />
        Stream file <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> File.OpenRead(filename);<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> colladaXml <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> StreamReader(file).ReadToEnd();<br />
        XmlNode colladaFile <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> XmlHelper.LoadXmlFromText(colladaXml);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load material (we only support one)</span><br />
        LoadMaterial(colladaFile);<br />
        <br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load bones</span><br />
        LoadBones(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load mesh (vertices data, combine with bone weights)</span><br />
        LoadMesh(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And finally load bone animation data</span><br />
        LoadAnimation(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Close file, we are done.</span><br />
        file.Close();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
ColladaModel(setFilename)</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span><p><font face="Verdana" size="2">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.</font></p><p><font face="Verdana" size="2">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.</font></p><p><font face="Verdana" size="2">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.</font></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (XmlNode
boneNode <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> boneNodes)<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (boneNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"node"</span> &amp;&amp;<br />
            (XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Bone"</span>)
||<br />
            XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"type"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"JOINT"</span>)))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
[...] get matrix</span><br />
            matrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> LoadColladaMatrix(...);<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Create this node, use the current number of bones as number.</span><br />
            Bone newBone <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Bone(matrix,
parentBone, bones.Count,<br />
                XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"sid"</span>));<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add to our global bones list</span><br />
            bones.Add(newBone);<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And to our parent, this way we have a tree and a flat list in</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
the bones list :)</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (parentBone
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                parentBone.children.Add(newBone);<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Create all children (will do nothing if there are no sub bones)</span><br />
            FillBoneNodes(newBone,
boneNode);<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach if (boneNode.Name)</span></span></p><p></p></span><a name="AnimationData">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.</a> 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.
</p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><p><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Load
weights<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span>[]
weights <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (XmlNode
sourceNode <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> skinNode)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get all inv bone skin matrices</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (sourceNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"source"</span> &amp;&amp;<br />
            XmlHelper.GetXmlAttribute(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"bind_poses"</span>))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get inner float array</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span>[]
mat <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> StringHelper.ConvertStringToFloatArray(<br />
                XmlHelper.GetChildNode(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"float_array"</span>).InnerText);<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> boneNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
boneNum &lt; bones.Count; boneNum++)<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (mat.Length <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 16
&gt; boneNum)<br />
                {<br />
                    bones[boneArrayOrder[boneNum]].invBoneSkinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
                        LoadColladaMatrix(mat,
boneNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 16);<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for if</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get all weights</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (sourceNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"source"</span> &amp;&amp;<br />
            XmlHelper.GetXmlAttribute(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"skin-weights"</span>))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get inner float array</span><br />
            weights <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> StringHelper.ConvertStringToFloatArray(<br />
                XmlHelper.GetChildNode(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"float_array"</span>).InnerText);<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if</span><br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach</span><br /><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (weights
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">throw</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> InvalidOperationException(<br />
            <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"No
weights were found in our skin, unable to continue!"</span>);<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></p><p><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"><font color="#000000"><font face="Verdana" size="2">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.</font></font></span></p></span><p></p><h2>Problems with the animation data
</h2><p>
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.
</p><p>
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.
</p><p>
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:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Unit
Testing<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Note: Allow calling all this even in release mode (see Program.cs)</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> TestShowBones<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
TestShowBones</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">void</span> TestShowBones()<br />
    {<br />
        ColladaModel model <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
        PlaneRenderer groundPlane <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Bone colors for displaying bone lines.</span><br />
        Color[] BoneColors <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Color[]<br />
            { Color.Blue,
Color.Red, Color.Yellow, Color.White, Color.Teal,<br />
            Color.RosyBrown,
Color.Orange, Color.Olive, Color.Maroon, Color.Lime,<br />
            Color.LightBlue,
Color.LightGreen, Color.Lavender, Color.Green,<br />
            Color.Firebrick,
Color.DarkKhaki, Color.BlueViolet, Color.Beige };<br /><br />
        TestGame.Start(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"TestLoadColladaModel"</span>,<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">delegate</span><br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load our goblin here, you can also load one of my test models!</span><br />
                model <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> ColladaModel(<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"Goblin");</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"test_bones_simple_baked");</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"test_bones_advanced_baked");</span><br />
                    <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"test_man_baked"</span>);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And load ground plane</span><br />
                groundPlane <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> PlaneRenderer(<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Vector3(0,
0, -0.001f),<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Plane(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Vector3(0,
0, 1), 0),<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Material(<br />
                        <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStone"</span>, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStoneNormal"</span>, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStoneHeight"</span>),<br />
                    50);<br />
            },<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">delegate</span><br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show ground</span><br />
                groundPlane.Render(ShaderEffect.parallaxMapping, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"DiffuseSpecular20"</span>);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show bones without rendering the model itself</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (model.bones.Count
== 0)<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span>;<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Update bone animation.</span><br />
                model.UpdateAnimation(Matrix.Identity);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show bones (all endpoints)</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
bone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> model.bones)<br />
                {<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
childBone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> bone.children)<br />
                        BaseGame.DrawLine(<br />
                            bone.finalMatrix.Translation,<br />
                            childBone.finalMatrix.Translation,<br />
                            BoneColors[bone.num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">%</span> BoneColors.Length]);<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach (bone)</span><br />
            });<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
TestShowBones()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
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):
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Update
animation<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Update animation.</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">void</span> UpdateAnimation(Matrix
renderMatrix)<br />
    {<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> aniMatrixNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>)(BaseGame.TotalTime <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> frameRate)) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">%</span> numOfAnimations;<br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
bone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> bones)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Just assign the final matrix from the animation matrices.</span><br />
            bone.finalMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> bone.animationMatrices[aniMatrixNum];<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Also use parent matrix if we got one</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
This will always work because all the bones are in order.</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (bone.parent
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                bone.finalMatrix
*=<br />
                    bone.parent.finalMatrix;<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach</span><br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
UpdateAnimation()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
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.
</p><p>
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).
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> GetBoneMatrices<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Get bone matrices for the shader. We have to apply the invBoneSkinMatrix</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
to each final matrix, which is the recursively created matrix from</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
all the animation data (see UpdateAnimation).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span> Matrix[]
GetBoneMatrices(Matrix renderMatrix)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Update the animation data in case it is not up to date anymore.</span><br />
        UpdateAnimation(renderMatrix);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And get all bone matrices, we support max. 80 (see shader).</span><br />
        Matrix[] matrices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Matrix[Math.Min(80,
bones.Count)];<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; matrices.Length; num++)<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
The matrices are constructed from the invBoneSkinMatrix and</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
the finalMatrix, which holds the recursively added animation matrices</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
and finally we add the render matrix too here.</span><br />
            matrices[num] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
                bones[num].invBoneSkinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> bones[num].finalMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> renderMatrix;<br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> matrices;<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
GetBoneMatrices()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span><br /></span></p><p>
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.
</p><a href="images/TestShowBones_TestMan.jpg"><img src="images/TestShowBones_TestManSmall.jpg" border="0" /></a><p>
 
</p><a name="Optimizations1"><h2>Optimizing the vertices
</h2><p>
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.
</p><p>
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 :-)
</p><p>
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:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> OptimizeVertexBufferSlow<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Optimize vertex buffer. Note: The vertices list array will be changed</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and shorted quite a lot here. We are also going to create the indices</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
for the index buffer here (we don't have them yet, they are just</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
sequential from the loading process above).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">/// </span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Note: Slow version because we have to check each vertex against</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
each other vertex, which makes this method exponentially slower</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
the more vertices we have. Takes 10 seconds for 30k vertices,</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and over 40 seconds for 60k vertices. It is much easier to understand,</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
but it produces the same output as the fast OptimizeVertexBuffer</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
method and you should always use that one (it only requires a couple</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
of miliseconds instead of the many seconds this method will spend).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;ushort array for the optimized indices&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>[]
OptimizeVertexBufferSlow()<br />
    {<br />
        List&lt;SkinnedTangentVertex&gt; newVertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;SkinnedTangentVertex&gt;();<br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;
newIndices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Go over all vertices (indices are currently 1:1 with the vertices)</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; vertices.Count; num++)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Try to find already existing vertex in newVertices list that</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
matches the vertex of the current index.</span><br />
            SkinnedTangentVertex
currentVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> vertices[FlipIndexOrder(num)];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">bool</span> reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>;<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> checkNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
checkNum &lt; newVertices.Count; checkNum++)<br />
            {<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (SkinnedTangentVertex.NearlyEquals(<br />
                    currentVertex,
newVertices[checkNum]))<br />
                {<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reuse the existing vertex, don't add it again, just</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
add another index for it!</span><br />
                    newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)checkNum);<br />
                    reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>;<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">break</span>;<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (TangentVertex.NearlyEquals)</span><br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (checkNum)</span><br /><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (reusedExistingVertex
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>)<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add the currentVertex and set it as the current index</span><br />
                newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newVertices.Count);<br />
                newVertices.Add(currentVertex);<br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (reusedExistingVertex)</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (num)</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reassign the vertices, we might have deleted some duplicates!</span><br />
        vertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newVertices;<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And return index list for the caller</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> newIndices.ToArray();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
OptimizeVertexBufferSlow()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
 
</p></a><h2>Optimizing the Optimization
</h2><p>
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 (&gt;99,9%) will always be different. We only
need to check the ones that share at least the same position.
</p><p>
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.
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Initialize reuseVertexPositions and reverseReuseVertexPositions</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
to make it easier to use them below</span><br />
    reuseVertexPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>[trianglecount <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3];<br />
    reverseReuseVertexPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;[positions.Count <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3];<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> i <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
i &lt; reverseReuseVertexPositions.Length; i++)<br />
        reverseReuseVertexPositions[i] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;();<br /><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
We have to use int indices here because we often have models</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
with more than 64k triangles (even if that gets optimized later).</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> i <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
i &lt; trianglecount <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3;
i++)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
[...] vertex construction</span></span></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Remember pos for optimizing the vertices later more easily.</span><br />
        reuseVertexPositions[i] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3;<br />
        reverseReuseVertexPositions[pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3].Add(i);<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (ushort)</span></span></p><p>
And then finally the fast vesion of OptimizeVertexBuffer, which uses that data:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> OptimizeVertexBuffer<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Optimize vertex buffer. Note: The vertices list array will be changed</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and shorted quite a lot here. We are also going to create the indices</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
for the index buffer here (we don't have them yet, they are just</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
sequential from the loading process above).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">/// </span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Note: This method is highly optimized for speed, it performs</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
hundred of times faster than OptimizeVertexBufferSlow, see below!</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;ushort array for the optimized indices&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>[]
OptimizeVertexBuffer()<br />
    {<br />
        List&lt;SkinnedTangentVertex&gt; newVertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;SkinnedTangentVertex&gt;();<br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;
newIndices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Helper to only search already added newVertices and for checking the</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
old position indices by transforming them into newVertices indices.</span><br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;
newVerticesPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Go over all vertices (indices are currently 1:1 with the vertices)</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; vertices.Count; num++)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get current vertex</span><br />
            SkinnedTangentVertex
currentVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> vertices[num];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">bool</span> reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>;<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Find out which position index was used, then we can compare</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all other vertices that share this position. They will not</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all be equal, but some of them can be merged.</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> sharedPos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> reuseVertexPositions[num];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> otherVertexIndex <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> reverseReuseVertexPositions[sharedPos])<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Only check the indices that have already been added!</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (otherVertexIndex
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> num
&amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Make sure we already are that far in our new index list</span><br />
                    otherVertexIndex
&lt; newIndices.Count &amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And make sure this index has been added to newVertices yet!</span><br />
                    newIndices[otherVertexIndex]
&lt; newVertices.Count &amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Then finally compare vertices (this call is slow, but thanks to</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all the other optimizations we don't have to call it that often)</span><br />
                    SkinnedTangentVertex.NearlyEquals(<br />
                    currentVertex,
newVertices[newIndices[otherVertexIndex]]))<br />
                {<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reuse the existing vertex, don't add it again, just</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
add another index for it!</span><br />
                    newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newIndices[otherVertexIndex]);<br />
                    reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>;<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">break</span>;<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (TangentVertex.NearlyEquals)</span><br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach (otherVertexIndex)</span><br /><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (reusedExistingVertex
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>)<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add the currentVertex and set it as the current index</span><br />
                newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newVertices.Count);<br />
                newVertices.Add(currentVertex);<br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (reusedExistingVertex)</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (num)</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Finally flip order of all triangles to allow us rendering</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
with CullCounterClockwiseFace (default for XNA) because all the data</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
is in CullClockwiseFace format right now!</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; newIndices.Count <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3;
num++)<br />
        {<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span> swap <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 1];<br />
            newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 1] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 2];<br />
            newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 2] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> swap;<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reassign the vertices, we might have deleted some duplicates!</span><br />
        vertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newVertices;<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And return index list for the caller</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> newIndices.ToArray();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
OptimizeVertexBuffer()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span><br /></span></p><p>
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.<br /></p><p><a name="Shaders1"><h2>Adjusting the shaders for skinned meshes
</h2></a></p><p>
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 :) 
</p><p>
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 ^^ 
</p><p>
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.
</p><p>
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.
</p><p>
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.<br /></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">float4x4
RebuildSkinMatrix(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span> index)<br />
{<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> float4x4(<br />
        float4(skinnedMatricesVS20[index*3+0].xyz,
0),<br />
        float4(skinnedMatricesVS20[index*3+1].xyz,
0),<br />
        float4(skinnedMatricesVS20[index*3+2].xyz,
0),<br />
        float4(<br />
            skinnedMatricesVS20[index*3+0].w,<br />
            skinnedMatricesVS20[index*3+1].w,<br />
            skinnedMatricesVS20[index*3+2].w,
1));<br />
} <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
RebuildSkinMatrix(.)</span></span></p><p>
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:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Note: This returns a transposed matrix, use it in reversed order.</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
First tests used a 3x3 matrix +3 w values for the transpose values, but</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
reconstructing this in the shader costs 20+ extra instructions and after</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
some testing I found out this is finally the best way to use 4x3 matrices</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for skinning :)</span><br />
float4x4 RebuildSkinMatrix(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span> index)<br />
{<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> float4x4(<br />
        skinnedMatricesVS20[index+0],<br />
        skinnedMatricesVS20[index+1],<br />
        skinnedMatricesVS20[index+2],<br />
        float4(0, 0, 0, 1));<br />
} <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
RebuildSkinMatrix(.)</span><br /></span></p><p><font color="#000000">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).</font></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
First transform position with bones that affect this vertex</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Use the 3 indices and blend weights we have precalculated.</span><br />
    float4x4 skinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
        RebuildSkinMatrix(In.blendIndices.x) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.x <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
        RebuildSkinMatrix(In.blendIndices.y) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.y <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
        RebuildSkinMatrix(In.blendIndices.z) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.z;<br />
    <br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Calculate local world matrix with help of the skinning matrix</span><br />
    float4x4 localWorld <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(world,
skinMatrix);<br />
    <br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Now calculate final screen position with world and viewProj matrices.</span><br />
    float4 worldPos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(localWorld,
float4(In.pos, 1));<br />
    Out.pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(worldPos,
viewProj);</span></p><p><font color="#000000"></font> 
</p><a name="Shaders2"><h2>Post screen shaders for the final result
</h2></a><p>
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. 
</p><p>
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.
</p><a href="images/TestGoblinScenePostScreenPasses.jpg"><img src="images/TestGoblinScenePostScreenPassesSmall.jpg" border="0" /></a><p></p><p><a name="References">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.</a> 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
</p><p>
 
</p><h2>References and Links
</h2><ul><li><a href="SkinningWithColladaModelsInXnaSourceCode.zip">SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB) from this article</a></li><li><a href="SkinningWithColladaModelsInXnaExecuteable.zip">SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB) from this article</a></li><li><a href="http://www.codeplex.com/animationcomponents">XNA Animation Component Library</a></li><li><a href="http://www.andytather.co.uk/Panda/directxmax.aspx">Panda Exporter for 3dsMax</a></li><li><a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html">kiloWatt X file
Exporter for 3dsMax</a></li><li><a href="http://www.khronos.org/collada/">Official Collada site from the Khronos Group</a></li><li><a href="http://www.feelingsoftware.com/content/view/16/30/">Feeling Software Collada
Plugins for 3dsMax and Maya, best exporters ever!</a></li><li><a href="https://collada.org/public_forum/">Public Forum of Collada.org</a></li><li><a href="http://en.wikipedia.org/wiki/COLLADA">Wikipedia on Collada</a></li><li><a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;highlight=&amp;sid=f5b56a89076e08d6c4175db5490db4da#2373">Collada
Forum post about remi's Collada for XNA project</a></li><li><a href="http://www.khronos.org/files/collada_spec_1_4">COLLADA 1.4.1 Specification
(PDF)</a></li></ul><p>
 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"></span> 
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2b9f62ce-fc9c-4696-8f7f-701903f8285b" /></body>
      <title>Skeletal Bone Animation and Skinning with Collada Models in XNA</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/02/25/SkeletalBoneAnimationAndSkinningWithColladaModelsInXNA.aspx</link>
      <pubDate>Sun, 25 Feb 2007 21:39:45 GMT</pubDate>
      <description>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 :-) 
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Content
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Downloads"&gt;Video, Screenshot and Downloads&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Introduction"&gt;Introduction and why Collada?&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#ClassOverview"&gt;Class Overview&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#LoadingCollada"&gt;Loading collada files&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#AnimationData"&gt;Problems with the animation data&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Optimizations1"&gt;Optimizing vertices&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Optimizations2"&gt;Optimizing the Optimization&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Shaders1"&gt;Adjusting the shaders for skinned meshes&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Shaders2"&gt;Post screen shaders for the final result&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#References"&gt;References and Links&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br&gt;
&lt;a name="Downloads"&gt; 
&lt;h2&gt;Video, Screenshot and Downloads
&lt;/h2&gt;
&lt;/a&gt;First of all, here is a video for the project I'm talking about here:&lt;br&gt;
&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/Oyd18KokT_o"&gt;
&lt;embed src="http://www.youtube.com/v/Oyd18KokT_o" type="application/x-shockwave-flash" height="350" width="425"&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
Screenshot of the same scene (better quality since youtube videos just suck quality
wise):&lt;br&gt;
&lt;a href="images/TestGobilnColladaSceneScreenshot0009.jpg"&gt;&lt;img src="images/TestGobilnColladaSceneScreenshot0009small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
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 ^^).&lt;br&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
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.&lt;br&gt;
&lt;a href="SkinningWithColladaModelsInXnaSourceCode.zip"&gt;SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB)&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
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 &lt;b&gt;XNA Game Studio
Express&lt;/b&gt; installed yet. You still need the &lt;b&gt;XNA Framework&lt;/b&gt; for this program, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2E136A1F-F187-478C-9DA5-AAEB0904782B&amp;amp;displaylang=en"&gt;download
it here&lt;/a&gt;, if you do not have it installed yet! You also need a &lt;b&gt;Shader Model
2.0&lt;/b&gt; capable graphic card.&lt;br&gt;
&lt;a href="SkinningWithColladaModelsInXnaExecuteable.zip"&gt;SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB)&lt;br&gt;
&lt;br&gt;
&lt;/a&gt;Update &lt;b&gt;2007-02-26&lt;/b&gt;: Fixed time steps, in release mode with more than 200-300
fps the animation was getting too slow. Now works flawless :)&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
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 ^^). 
&lt;p&gt;
&lt;br&gt;
&lt;a name="Introduction"&gt; 
&lt;h2&gt;Introduction and why Collada?
&lt;/h2&gt;
&lt;/a&gt;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.&lt;br&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
There is a nice project on CodePlex called &lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA
Animation Component Library&lt;/a&gt;, 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 (&lt;a href="http://www.andytather.co.uk/Panda/directxmax.aspx"&gt;Panda
Exporter for 3dsMax&lt;/a&gt; was good a year ago, I still use it, now &lt;a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html"&gt;kiloWatt
X file Exporter for 3dsMax&lt;/a&gt; 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. 
&lt;/p&gt;
&lt;p&gt;
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 &lt;a href="http://www.feelingsoftware.com/content/view/16/30/"&gt;Feeling
Software&lt;/a&gt;. 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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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 &lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA
Animation Component Library&lt;/a&gt; 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). 
&lt;/p&gt;
&lt;p&gt;
After some searching I saw some guy called remi from the &lt;a href="https://collada.org/public_forum/"&gt;collada
forum&lt;/a&gt; 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 ^^). &lt;a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;amp;highlight=&amp;amp;sid=f5b56a89076e08d6c4175db5490db4da#2373"&gt;Here
is the thread about that in the collada forum&lt;/a&gt;. 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. 
&lt;/p&gt;
&lt;p&gt;
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 &lt;a href="http://www.ArenaWars.net"&gt;Arena Wars Reloaded&lt;/a&gt;,
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. 
&lt;br&gt;
&lt;a name="ClassOverview"&gt; 
&lt;h2&gt;Class Overview
&lt;/h2&gt;
&lt;/a&gt;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. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="images/SkinningInColladaClassOverview.png"&gt;&lt;img src="images/SkinningInColladaClassOverviewSmall.png" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
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 &lt;a href="http://www.khronos.org/files/collada_spec_1_4"&gt;collada
specifications&lt;/a&gt; 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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;a name="LoadingCollada"&gt; 
&lt;h2&gt;Loading collada files
&lt;/h2&gt;
&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
Collada model. Supports bones and animation for collada (.dae) exported&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
3D Models from 3D Studio Max (8 or 9).&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
This class is just for testing and it will only display one single mesh&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
with bone and skinning support, the mesh also can only have one single&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
material. Bones can be either in matrix mode or stored with transform&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
and rotation values. SkinnedTangentVertex is used to store the vertices.&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;class&lt;/span&gt; ColladaModel
: IDisposable&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
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). 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Constructor&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Create a model from a collada file&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="setName"&amp;gt;Set name&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; ColladaModel(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; setName)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Set name to identify this model and build the filename&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; setName;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; filename &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; Path.Combine(ColladaDirectory,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringHelper.ExtractFilename(name, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"."&lt;/span&gt; &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ColladaExtension);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load file&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream file &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; File.OpenRead(filename);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; colladaXml &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; StreamReader(file).ReadToEnd();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNode colladaFile &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; XmlHelper.LoadXmlFromText(colladaXml);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load material (we only support one)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadMaterial(colladaFile);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load bones&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadBones(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load mesh (vertices data, combine with bone weights)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadMesh(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And finally load bone animation data&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadAnimation(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Close file, we are done.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.Close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
ColladaModel(setFilename)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;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.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;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.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;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.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (XmlNode
boneNode &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; boneNodes)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (boneNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"node"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Bone"&lt;/span&gt;)
||&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"type"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"JOINT"&lt;/span&gt;)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
[...] get matrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; LoadColladaMatrix(...);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Create this node, use the current number of bones as number.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bone newBone &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Bone(matrix,
parentBone, bones.Count,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"sid"&lt;/span&gt;));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add to our global bones list&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones.Add(newBone);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And to our parent, this way we have a tree and a flat list in&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
the bones list :)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (parentBone
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentBone.children.Add(newBone);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Create all children (will do nothing if there are no sub bones)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FillBoneNodes(newBone,
boneNode);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach if (boneNode.Name)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;a name="AnimationData"&gt;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.&lt;/a&gt;&amp;nbsp;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.
&lt;/p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt; 
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Load
weights&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt;[]
weights &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (XmlNode
sourceNode &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; skinNode)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get all inv bone skin matrices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (sourceNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"source"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"bind_poses"&lt;/span&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get inner float array&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt;[]
mat &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; StringHelper.ConvertStringToFloatArray(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetChildNode(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"float_array"&lt;/span&gt;).InnerText);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; boneNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
boneNum &amp;lt; bones.Count; boneNum++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (mat.Length &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 16
&amp;gt; boneNum)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones[boneArrayOrder[boneNum]].invBoneSkinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadColladaMatrix(mat,
boneNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 16);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for if&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get all weights&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (sourceNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"source"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"skin-weights"&lt;/span&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get inner float array&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;weights &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; StringHelper.ConvertStringToFloatArray(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetChildNode(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"float_array"&lt;/span&gt;).InnerText);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (weights
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;throw&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; InvalidOperationException(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"No
weights were found in our skin, unable to continue!"&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;&lt;font color="#000000"&gt;&lt;font face="Verdana" size="2"&gt;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.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Problems with the animation data
&lt;/h2&gt;
&lt;p&gt;
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,&amp;nbsp;not in 3D Studio.
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;them. To test the bone
animations I used the following unit test:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Unit
Testing&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Note: Allow calling all this even in release mode (see Program.cs)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; TestShowBones&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
TestShowBones&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;void&lt;/span&gt; TestShowBones()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ColladaModel model &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlaneRenderer groundPlane &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Bone colors for displaying bone lines.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color[] BoneColors &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Color[]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ Color.Blue,
Color.Red, Color.Yellow, Color.White, Color.Teal,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.RosyBrown,
Color.Orange, Color.Olive, Color.Maroon, Color.Lime,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.LightBlue,
Color.LightGreen, Color.Lavender, Color.Green,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.Firebrick,
Color.DarkKhaki, Color.BlueViolet, Color.Beige };&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TestGame.Start(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"TestLoadColladaModel"&lt;/span&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;delegate&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load our goblin here, you can also load one of my test models!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; ColladaModel(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"Goblin");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"test_bones_simple_baked");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"test_bones_advanced_baked");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"test_man_baked"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And load ground plane&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groundPlane &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; PlaneRenderer(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Vector3(0,
0, -0.001f),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Plane(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Vector3(0,
0, 1), 0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Material(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStone"&lt;/span&gt;, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStoneNormal"&lt;/span&gt;, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStoneHeight"&lt;/span&gt;),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;50);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;delegate&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show ground&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groundPlane.Render(ShaderEffect.parallaxMapping, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"DiffuseSpecular20"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show bones without rendering the model itself&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (model.bones.Count
== 0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Update bone animation.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model.UpdateAnimation(Matrix.Identity);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show bones (all endpoints)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
bone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; model.bones)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
childBone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; bone.children)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BaseGame.DrawLine(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix.Translation,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;childBone.finalMatrix.Translation,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BoneColors[bone.num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;%&lt;/span&gt; BoneColors.Length]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach (bone)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
TestShowBones()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
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):
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Update
animation&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Update animation.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;void&lt;/span&gt; UpdateAnimation(Matrix
renderMatrix)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; aniMatrixNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;)(BaseGame.TotalTime &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; frameRate)) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;%&lt;/span&gt; numOfAnimations;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
bone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; bones)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Just assign the final matrix from the animation matrices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; bone.animationMatrices[aniMatrixNum];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Also use parent matrix if we got one&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
This will always work because all the bones are in order.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (bone.parent
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix
*=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.parent.finalMatrix;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
UpdateAnimation()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;to the initial bone matrix),&amp;nbsp;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&amp;nbsp;these absolute
matrices makes the UpdateAnimation code so much easier, so make sure you always use
them this way.
&lt;/p&gt;
&lt;p&gt;
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).
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; GetBoneMatrices&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Get bone matrices for the shader. We have to apply the invBoneSkinMatrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
to each final matrix, which is the recursively created matrix from&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
all the animation data (see UpdateAnimation).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; Matrix[]
GetBoneMatrices(Matrix renderMatrix)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Update the animation data in case it is not up to date anymore.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateAnimation(renderMatrix);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And get all bone matrices, we support max. 80 (see shader).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Matrix[] matrices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Matrix[Math.Min(80,
bones.Count)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; matrices.Length; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
The matrices are constructed from the invBoneSkinMatrix and&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
the finalMatrix, which holds the recursively added animation matrices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
and finally we add the render matrix too here.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrices[num] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones[num].invBoneSkinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; bones[num].finalMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; renderMatrix;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; matrices;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
GetBoneMatrices()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;a href="images/TestShowBones_TestMan.jpg"&gt;&lt;img src="images/TestShowBones_TestManSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;a name="Optimizations1"&gt; 
&lt;h2&gt;Optimizing the vertices
&lt;/h2&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
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 :-)
&lt;/p&gt;
&lt;p&gt;
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:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; OptimizeVertexBufferSlow&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Optimize vertex buffer. Note: The vertices list array will be changed&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and shorted quite a lot here. We are also going to create the indices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
for the index buffer here (we don't have them yet, they are just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
sequential from the loading process above).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;/// &lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Note: Slow version because we have to check each vertex against&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
each other vertex, which makes this method exponentially slower&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
the more vertices we have. Takes 10 seconds for 30k vertices,&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and over 40 seconds for 60k vertices. It is much easier to understand,&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
but it produces the same output as the fast OptimizeVertexBuffer&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
method and you should always use that one (it only requires a couple&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
of miliseconds instead of the many seconds this method will spend).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;ushort array for the optimized indices&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;[]
OptimizeVertexBufferSlow()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;SkinnedTangentVertex&amp;gt; newVertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;SkinnedTangentVertex&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;
newIndices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Go over all vertices (indices are currently 1:1 with the vertices)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; vertices.Count; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Try to find already existing vertex in newVertices list that&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
matches the vertex of the current index.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex
currentVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; vertices[FlipIndexOrder(num)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;bool&lt;/span&gt; reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; checkNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
checkNum &amp;lt; newVertices.Count; checkNum++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (SkinnedTangentVertex.NearlyEquals(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentVertex,
newVertices[checkNum]))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reuse the existing vertex, don't add it again, just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
add another index for it!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)checkNum);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;break&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (TangentVertex.NearlyEquals)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (checkNum)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (reusedExistingVertex
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add the currentVertex and set it as the current index&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newVertices.Count);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newVertices.Add(currentVertex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (reusedExistingVertex)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (num)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reassign the vertices, we might have deleted some duplicates!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newVertices;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And return index list for the caller&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; newIndices.ToArray();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
OptimizeVertexBufferSlow()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/a&gt; 
&lt;h2&gt;Optimizing the Optimization
&lt;/h2&gt;
&lt;p&gt;
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 (&amp;gt;99,9%) will always be different. We only
need to check the ones that share at least the same position.
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;vertices
share the same position, this way the whole comparison process just needs 60,000 *
6 comparisons, not 60,000*60,000 anymore.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Initialize reuseVertexPositions and reverseReuseVertexPositions&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
to make it easier to use them below&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reuseVertexPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;[trianglecount &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;[positions.Count &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; i &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
i &amp;lt; reverseReuseVertexPositions.Length; i++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions[i] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
We have to use int indices here because we often have models&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
with more than 64k triangles (even if that gets optimized later).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; i &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
i &amp;lt; trianglecount &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3;
i++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
[...] vertex construction&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Remember pos for optimizing the vertices later more easily.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reuseVertexPositions[i] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions[pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3].Add(i);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (ushort)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
And then finally the fast vesion of OptimizeVertexBuffer, which uses that data:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; OptimizeVertexBuffer&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Optimize vertex buffer. Note: The vertices list array will be changed&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and shorted quite a lot here. We are also going to create the indices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
for the index buffer here (we don't have them yet, they are just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
sequential from the loading process above).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;/// &lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Note: This method is highly optimized for speed, it performs&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
hundred of times faster than OptimizeVertexBufferSlow, see below!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;ushort array for the optimized indices&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;[]
OptimizeVertexBuffer()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;SkinnedTangentVertex&amp;gt; newVertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;SkinnedTangentVertex&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;
newIndices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Helper to only search already added newVertices and for checking the&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
old position indices by transforming them into newVertices indices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;
newVerticesPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Go over all vertices (indices are currently 1:1 with the vertices)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; vertices.Count; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get current vertex&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex
currentVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; vertices[num];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;bool&lt;/span&gt; reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Find out which position index was used, then we can compare&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all other vertices that share this position. They will not&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all be equal, but some of them can be merged.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; sharedPos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; reuseVertexPositions[num];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; otherVertexIndex &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; reverseReuseVertexPositions[sharedPos])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Only check the indices that have already been added!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (otherVertexIndex
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; num
&amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Make sure we already are that far in our new index list&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;otherVertexIndex
&amp;lt; newIndices.Count &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And make sure this index has been added to newVertices yet!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[otherVertexIndex]
&amp;lt; newVertices.Count &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Then finally compare vertices (this call is slow, but thanks to&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all the other optimizations we don't have to call it that often)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex.NearlyEquals(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentVertex,
newVertices[newIndices[otherVertexIndex]]))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reuse the existing vertex, don't add it again, just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
add another index for it!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newIndices[otherVertexIndex]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;break&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (TangentVertex.NearlyEquals)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach (otherVertexIndex)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (reusedExistingVertex
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add the currentVertex and set it as the current index&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newVertices.Count);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newVertices.Add(currentVertex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (reusedExistingVertex)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (num)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Finally flip order of all triangles to allow us rendering&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
with CullCounterClockwiseFace (default for XNA) because all the data&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
is in CullClockwiseFace format right now!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; newIndices.Count &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3;
num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt; swap &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 1];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 1] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 2];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 2] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; swap;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reassign the vertices, we might have deleted some duplicates!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newVertices;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And return index list for the caller&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; newIndices.ToArray();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
OptimizeVertexBuffer()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;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.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a name="Shaders1"&gt; 
&lt;h2&gt;Adjusting the shaders for skinned meshes
&lt;/h2&gt;
&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;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&amp;nbsp;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 :) 
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;are happy with 80 bones ^^ 
&lt;/p&gt;
&lt;p&gt;
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&amp;nbsp;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.
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
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.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;float4x4
RebuildSkinMatrix(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt; index)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; float4x4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+0].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+1].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+2].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+0].w,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+1].w,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+2].w,
1));&lt;br&gt;
} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
RebuildSkinMatrix(.)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
A better idea is to use the&amp;nbsp;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&amp;nbsp;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:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Note: This returns a transposed matrix, use it in reversed order.&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
First tests used a 3x3 matrix +3 w values for the transpose values, but&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
reconstructing this in the shader costs 20+ extra instructions and after&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
some testing I found out this is finally the best way to use 4x3 matrices&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for skinning :)&lt;/span&gt;
&lt;br&gt;
float4x4 RebuildSkinMatrix(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt; index)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; float4x4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+0],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+1],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+2],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(0, 0, 0, 1));&lt;br&gt;
} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
RebuildSkinMatrix(.)&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#000000"&gt;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).&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
First transform position with bones that affect this vertex&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Use the 3 indices and blend weights we have precalculated.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4x4 skinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.x) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.x &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.y) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.y &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.z) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.z;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Calculate local world matrix with help of the skinning matrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4x4 localWorld &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(world,
skinMatrix);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Now calculate final screen position with world and viewProj matrices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4 worldPos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(localWorld,
float4(In.pos, 1));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Out.pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(worldPos,
viewProj);&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#000000"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;a name="Shaders2"&gt; 
&lt;h2&gt;Post screen shaders for the final result
&lt;/h2&gt;
&lt;/a&gt; 
&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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)&amp;nbsp;is longer than the list of used passes. Most of
this was just trying to get the best looking values&amp;nbsp;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.
&lt;/p&gt;
&lt;a href="images/TestGoblinScenePostScreenPasses.jpg"&gt;&lt;img src="images/TestGoblinScenePostScreenPassesSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a name="References"&gt;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.&lt;/a&gt;&amp;nbsp;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
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;References and Links
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="SkinningWithColladaModelsInXnaSourceCode.zip"&gt;SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB) from this article&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="SkinningWithColladaModelsInXnaExecuteable.zip"&gt;SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB) from this article&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA Animation Component Library&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.andytather.co.uk/Panda/directxmax.aspx"&gt;Panda Exporter for 3dsMax&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html"&gt;kiloWatt X file
Exporter for 3dsMax&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.khronos.org/collada/"&gt;Official Collada site from the Khronos Group&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.feelingsoftware.com/content/view/16/30/"&gt;Feeling Software Collada
Plugins for 3dsMax and Maya, best exporters ever!&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://collada.org/public_forum/"&gt;Public Forum of Collada.org&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/COLLADA"&gt;Wikipedia on Collada&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;amp;highlight=&amp;amp;sid=f5b56a89076e08d6c4175db5490db4da#2373"&gt;Collada
Forum post about remi's Collada for XNA project&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.khronos.org/files/collada_spec_1_4"&gt;COLLADA 1.4.1 Specification
(PDF)&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2b9f62ce-fc9c-4696-8f7f-701903f8285b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=9e224a1a-d5a7-4e4e-8ae3-6e103106dd23</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,9e224a1a-d5a7-4e4e-8ae3-6e103106dd23.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,9e224a1a-d5a7-4e4e-8ae3-6e103106dd23.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9e224a1a-d5a7-4e4e-8ae3-6e103106dd23</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Not much going on here on my blog, but
in reality I was quite busy finishing some projects.<br />
Our whole team at exDream is also working hard on our upcoming game Arena Wars Reloaded.<br />
But it will take another month until we can release some cool looking screenshots
that will make you excited.<br /><br />
In the meantime you can check out this nice article with lots of interviews on gamecareerguide.com.<br />
On page 3 I do answer some questions and talk about current projects I'm involved
in, including the<br /><a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779">Professional
XNA Game Development book</a> I've done. The book will come out in early may this
year.<br /><br />
The article is 5 pages long and a nice read:<br /><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.gamecareerguide.com/features/328/microsoft_xna_.php" target="_blank">http://www.gamecareerguide.com<wbr />/features/328/microsoft_xna_<wbr />.php</a><br /><br /><br /><a set="yes" href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"><img src="http://ec1.images-amazon.com/images/P/0470126779.01._AA240_SCLZZZZZZZ_V35843563_.jpg" border="0" /></a><br /><br /><br />
While we are at it, I decided to finally post some high quality (1920x1200) Racing
Game screenshots (formerly known as XNA Racer).<br />
I don't know yet when it will be released, but it shouldn't take much longer :-)<br /><br />
Screenshot 1:<br /><a href="images/RacingGameScreenshotBig01.jpg"><img src="images/RacingGameScreenshotBig01_small.jpg" border="0" /></a><br /><br />
Screenshot 2:<br /><a href="images/RacingGameScreenshotBig02.jpg"><img src="images/RacingGameScreenshotBig02_small.jpg" border="0" /></a><br /><br />
Screenshot 3:<br /><a href="images/RacingGameScreenshotBig03.jpg"><img src="images/RacingGameScreenshotBig03_small.jpg" border="0" /></a><br /><br />
Screenshot 4:<br /><a href="images/RacingGameScreenshotBig04.jpg"><img src="images/RacingGameScreenshotBig04_small.jpg" border="0" /></a><br /><br /><br /><br />
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<br />
Visual Studio versions, but some plugins do not work and most language extensions
I have installed (like LinQ or ASP.NET Ajax) are just<br />
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.<br /><br />
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<br />
Arena Wars Reloaded and fought agains the 7000+ warnings ^^<br />
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<br />
the Racing Game XNA starter kit (see screenshots above) because that thing has already
over 20,000 lines of code and many warnings were<br />
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<br />
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<br />
FxCop rules.<br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9e224a1a-d5a7-4e4e-8ae3-6e103106dd23" /></body>
      <title>XNA News</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,9e224a1a-d5a7-4e4e-8ae3-6e103106dd23.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/01/18/XNANews.aspx</link>
      <pubDate>Thu, 18 Jan 2007 10:03:40 GMT</pubDate>
      <description>Not much going on here on my blog, but in reality I was quite busy finishing some projects.&lt;br&gt;
Our whole team at exDream is also working hard on our upcoming game Arena Wars Reloaded.&lt;br&gt;
But it will take another month until we can release some cool looking screenshots
that will make you excited.&lt;br&gt;
&lt;br&gt;
In the meantime you can check out this nice article with lots of interviews on gamecareerguide.com.&lt;br&gt;
On page 3 I do answer some questions and talk about current projects I'm involved
in, including the&lt;br&gt;
&lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;Professional
XNA Game Development book&lt;/a&gt; I've done. The book will come out in early may this
year.&lt;br&gt;
&lt;br&gt;
The article is 5 pages long and a nice read:&lt;br&gt;
&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.gamecareerguide.com/features/328/microsoft_xna_.php" target="_blank"&gt;http://www.gamecareerguide.com&lt;wbr&gt;/features/328/microsoft_xna_&lt;wbr&gt;.php&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a set="yes" href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;&lt;img src="http://ec1.images-amazon.com/images/P/0470126779.01._AA240_SCLZZZZZZZ_V35843563_.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
While we are at it, I decided to finally post some high quality (1920x1200) Racing
Game screenshots (formerly known as XNA Racer).&lt;br&gt;
I don't know yet when it will be released, but it shouldn't take much longer :-)&lt;br&gt;
&lt;br&gt;
Screenshot 1:&lt;br&gt;
&lt;a href="images/RacingGameScreenshotBig01.jpg"&gt;&lt;img src="images/RacingGameScreenshotBig01_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Screenshot 2:&lt;br&gt;
&lt;a href="images/RacingGameScreenshotBig02.jpg"&gt;&lt;img src="images/RacingGameScreenshotBig02_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Screenshot 3:&lt;br&gt;
&lt;a href="images/RacingGameScreenshotBig03.jpg"&gt;&lt;img src="images/RacingGameScreenshotBig03_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Screenshot 4:&lt;br&gt;
&lt;a href="images/RacingGameScreenshotBig04.jpg"&gt;&lt;img src="images/RacingGameScreenshotBig04_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
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&lt;br&gt;
Visual Studio versions, but some plugins do not work and most language extensions
I have installed (like LinQ or ASP.NET Ajax) are just&lt;br&gt;
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.&lt;br&gt;
&lt;br&gt;
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&lt;br&gt;
Arena Wars Reloaded and fought agains the 7000+ warnings ^^&lt;br&gt;
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&lt;br&gt;
the Racing Game XNA starter kit (see screenshots above) because that thing has already
over 20,000 lines of code and many warnings were&lt;br&gt;
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&lt;br&gt;
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&lt;br&gt;
FxCop rules.&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9e224a1a-d5a7-4e4e-8ae3-6e103106dd23" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,9e224a1a-d5a7-4e4e-8ae3-6e103106dd23.aspx</comments>
      <category>All;Arena Wars;Game Development;Other;Programming;Reviews;XNA</category>
    </item>
  </channel>
</rss>