The logo of the WiX XNA intaller, a cheap montage of the WiX and XNA logos

WiX XNA Installer 3.0

WiX XNA Installer Logo

This past week I’ve been working on my WiX XNA installer template again because I really wanted to integrate installer generation into my continuous integration builds. That way, I can hand test versions to friends without explaining in detail how to get it to run and it’s one less worry I have when I release the game.

After some FAQ reading and some questions on the XNA Forums, I had the certainty that XNA 3.0 can be deployed with .NET 2.0 only (if you change your project configurations to target .NET 2.0). This is good news because the .NET 3.5 installer is huge and, on a fresh system, I’ve had about a 1 in 10 success quote of the installer finishing without an error, so my trust in the .NET 3.5 installer is completely shattered.

Screenshot of an installer showing that DirectX 9.0c and XNA 3.0 are installed

Read More

Island War Day 7

Today, I’ve got some new screen shots! Read on :-)

Over the weekend, I implemented proper camera and terrain selection controls. Getting keyboard, mouse and gamepad working at the same time proved a bit of a nightmare. PC RTS players will expect the arrow keys to move around their view and the mouse to be usable as a selection tool. XBox 360 RTS players need some way of telling the game where to place buildings, but the gamepad isn’t suited for this task as well as the mouse is.

So I decided to split my terrain into a regular grid in which a terrain cursor can be moved. The grid is in units of 3×3 terrain quads, which allows me to add some detail to the terrain on the sub-grid-cell level. Otherwise, it would look fairly obvious to the player that the terrain is based on a heightmap with regular X/Y samples.

Screenshot of an island with flak buildings intercepting an incoming missile

Read More

Island War Day 6

During the past week, I got missiles working to a point where they will launch, gain altitude, head towards their target and dive for the attack. They will damage the island (which means scraping off texture layers and possibly alter the terrain, not sure whether I want this, however). Buildings in the vicinity are then destroyed.

For the missile trajectory, I went for the simplest thing that could possibly work:

  • Until the missile has reached its cruise altitude, it will ascend at a 45 degree angle. If during this phase, missile closes in to the target so much that it needs to start diving, the diving phase will be entered.

  • Once at its cruise altitude, the missile will simply fly in a horizontal line towards its target. If the missile gets closes enough to its target, it will enter the diving phase.

  • In the diving phase, the missile accelerates to maximum speed and descends towards its target at a 45 degree angle. Once it hits the ground, it explodes.

Read More
The logo of Microsoft's XNA platform, a framework for writing games in .NET

Why Beginners Should Start with XNA

Today, I watched an interesting discussion on gamedev.net where someone asked why everyone is recommending beginners to start off with XNA and C# whereas the entire gaming industry is based on C/C++.

I would have expected to read something along the lines of

“We recommend XNA because it’s very easy to learn and you will hit the ground running fast. It teaches beginners the kind of thinking required to lay out the logic of a program and doesn’t discourage them by forcing them to write boring console applications for months until they know the semantics of the language well enough to use a graphics library such as SDL, DirectX or OpenGL. Some people may not even want to enter the industry, so C# and XNA is a fine choice for them. Those that do can switch over to C/C++ after they’re fluent in C# and it will be a mostly easy going, incremental learning process.”

Instead, an ugly mess resulted with people firmly stating that .NET/Mono is the way to go for games, that the gaming industry is using it for prototyping, scripting and development tools and that the only reasons for not adopting C# yet are legacy code bases and unwillingness by developers to learn new stuff or to change proven ways. People began dissecting each other’s posts one by one and, well, if you’ve been on the internet some time, you can probably imagine how it turns out.

Read More

Island War Day 5

Last time, I wrote about how I set sail for the Island War project and how my motivation faltered slowly over time. And I promised to write a follow-up post that explains how I believe to get back on track and finish development of my Island War project. Well, here it is, folks!

I see the primary reason for my loss of motivation in my tendency to write and fully implement systems instead of just the piece of code I need. While I knew that I had to “write a game, not an engine”, I still fell for the same old trap: I didn’t technically write an engine, but I started to design entire systems and fully implement them when all I needed was a small routine to get the job done.

Read More

Island War Day 4

It’s baack!

Slowly, the Island War project begins to grind its wheels again. Time for a review of what’s happened so far. When I started this project, I was still intoxicated from the successful completion of my just-for-fun project “Ball Race”. I was eager to build a real, full-blown game taking no shortcuts and doing everything in the best way imaginable.

This turned out to be a real time waster and motivation sapper.

Read More

XBox 360 Elite

For the past two years, I couldn’t test all the XNA stuff I made on a real XBox 360. Whenever something went wrong, I had to guess and diagnose from the feedback I was getting from users.

I’ve become quite good at remote-diagnosing problems. It didn’t ever take me more than 3 emails or postings in my forum exchanged with the people who discovered a bug until I had gathered enough feedback to locate a bug and fix it in my code. But that certainly isn’t how I want to get in contact with my customers when I start to sell games on XBox Live :)

Photo of a Microsoft XBox 360 Elite in black with a black wireless controller

That’s why, as of now, I’ve ordered an XBox 360 Elite, which finally has the right color: black. I just love black, I’ve got a black keyboard, black mouse, black mouse mat, my PC sits in a Lian Li PC-71 Black and my monitors are also black — erm well, at least their frames are, otherwise I’d be having a really hard time posting this blog entry, I think :D

The Inheritance Cycle

(Spoiler free!)

I’ve just read my way through 3 of the finest books I’ve had the chance to enjoy in my life:

I have to admit that I have a certain bias towards fantasy stories set in medieval times and that, especially if dragons are involved, it’s hard for me not to give such books a bonus in my personal rating, but still, I think the books in the inheritance cycle are very well written and provide excellent narration.

Read More

Bridging SigC++ to .NET via P/Invoke

If you’re a seasoned C++ developer, chances are you’ve come into contact with a signals/slots library at least once during your work, maybe you’re even using one right now.

If you haven’t heard of this before, let me give you a short introduction: a signals/slots library is nothing more than a fancy callback system: A class, let’s think of a fictional Button class for now, can provide signals like Pushed signal. A signal is just a list of callbacks that can be invoked when the signal is triggered.

Now any party interested in getting notified when the button is pushed can subscribe itself to the Pushed signal and will be notified by means of a callback. Typically you can bind any plain function, class method or functor to a signal.

Read More

GeForce 8800 GTS 512 O/C

My PowerColor Radeon X1950 with its supposedly ultra-silent Arctic Cooling cooler was beginning to make annoying noises. Seems like the cooler’s bearing is broken after just 14 months of usage. I tried cleaning it out, squeezing some oil where I suspect the noises to be coming from (no idea if this is a good idea :/), but it didn’t change anything.

So before I have to take another forced break from my work, I decided to upgrade to a new graphics card. Currently, the second generation GeForce 8800 GTS based on nVidia’s G92 chip is fresh in stores. The overclocked versions some manufacturers are offering are faster than the original GeForce 8800 GTX, so nVidia is not allowing production of any further overclocked G92 cards starting at the end of february.

This has caused a tremendous demand for these overclocked graphics cards. But I’m in luck: I got one of the last Asus G92 TOP cards. Those are the highest overclocked G92 graphics cards on the market *happy*

An Asus EN8800GTS TOP graphics card in front of its package

Read More