Hurricane in my Area

Originally, my plan was to put together a new release of Nuclex.Fonts this evening, but there was a small hurricane in the area near the end of the week that uprooted lots of trees, creating a great obstacle course in the local forests. My favorite jogging route was totally buried. Well, I couldn’t help but go out there every day since the past week. Today, I took my camera with me, here are some shots from the forest trail I used to jog on:

Images of a forest road filled with fallen trees in stacks up to 2 meters high Images of a forest road filled with fallen trees in stacks up to 2 meters high Images of a forest road filled with fallen trees in stacks up to 2 meters high

I haven’t had such an intense workout with so diversified movements (due to the constant jumping and climbing) in a long time. Normally I can do the 10 km (~ 6.2 mi) in about 55 minutes (it’s rough terrain!). Now, after 55 minutes, I barely managed to pave my way through about half of the trail. My heart rate often got close to 200 bpm, making it quite difficult to jump from tree to tree. Here’s an image I tried to take of my watch’s recording after the run:

Photo of a Polar AXN 700 showing 196 beats per minute average for 55 minutes

196 beats per minute average(!) heart rate for 55 minutes. I’m not getting old quite yet :)

This shouldn’t stall my projects for long, but it was immense fun!

CeGui#

If your game needs advanced GUI capabilities, CeGui# might just hit the nail on the head for you. Marketese aside, this is a seriously good GUI library with Buttons, ListBoxes, Scrollbars, ProgressBars, Sliders, ComboBoxes and more.

Screenshot of CEGUI# rendering its GUI into an XNA window

Being a port of the well known CeGui C++ library, it is not bound to a single graphics API but can instead be easily extended to run on a multitude of environments. Out of the box, it already provides extensions to be used with: XNA Framework 1.0, Managed DirectX 1.0, SDL.NET and Tao.OpenGL.

The only real problem for XNA developers might be that it does not yet work on the Xbox 360 due to several restrictions in the functionality of the .NET Compact Framework 2.0 that XNA applications have to build against on the Xbox 360.

Sexy Beach 3 ;-)

Just in case you have never heard of this game, Sexy Beach 3 is an adult title sold exclusively in Japan. In the game, you take the role of some random guy who gets invited for a holiday on “Sexy Island”, a small vacation island populated with a handful of other guests, which, by mere chance, are all good-looking women. You can probably see where this is heading to now… :D

Right, Sexy Beach 3 is basically just another sex simulation game, only that the Japanese are miles and miles ahead of the stuff churned out by western development studios. The game features beautiful anime girls, deforming clothing, real-time skin tanning and realistic boob physics. Yes, really.
Getting this game to install in Windows Vista is quite a headache, so I took the liberty to write down exactly what I did to make it work in a western Windows Vista system.

Read More

Ball Race – Day 14

Today it dawned upon me that I forgot something important in the geometry generation engine of my game: How can the player distinguish the goals from the traps? Both are holes, only that the former one makes you win the game while the latter one makes you lose the game. Oops! :)

After today’s changes, the maze consisted of three parts: The walls, the floor (with donut gaps around holes that are goals) and the goal rings. The goal rings fill the gaps left open in the floor and use a different effect that draws a checkered flag texture so the player can clearly recognize the goal holes.

Screenshot of several maze boards with holes, one hole in each marked by a checkered ring

All that’s left now is to polish the game a bit, add gamepad support and create the 10 challenge mode levels. Looking back at the progress, I have to say that I underestimated the amount of work required quite a bit. It’s great to see some interest from the XNA community, some people have linked me in their blogs and I even got interviewed about my game and my thoughts on XNA. More on that if everything works out as expected.

The release of “Project Balance” will be on December 11th the same day the XNA final is due.

Ball Race – Day 13

Finally got a new graphics card. I had seriously considered buying a GeForce 8800, but given the card’s insane price tag, the fact that I’m developing for XNA (nothing to gain from DirectX 10) and ATI’s recent announcement about their next generation GPU being out soon to lower the prices, I decided to go for a cheap ATI Radeon X1950 card.

Photo of a PowerColor Radeon X1950 and its box

I didn’t totally stop working on the game, however, and wrote a small menu system that I now use to display the game’s main menu and the level selector. Debugging could still be accomplished running the game in a 320×240 window by using the reference rasterizer for rendering, which produces about 1 frame in the time it takes you to wash your car, take a walk or phone a friend…

Aforementioned menu system is already being used to drive the main menu and a level selector, both fully working at the time of this writing. The buttons themselfes are looking rather dull and I’m not sure yet whether I should just try to do my best in Paint.NET or whether I should go looking for an artist…

Screenshot of several maze game boards and buttons to select between them

There will be 10 built-in levels that the player can try to beat in a certain time to complete the game. I think 10 levels are just right to entertain the player for a while and then let him off before the game gets boring. I truly think it’s a nice and fun game, but, after all, it’s just a ball rolling around on a table — hardly enough variety to make 100 levels worthwhile :)

Forced Break for Ball Race

This Monday, my graphics card decided that 18 months of service are more than enough and, well, quit. During bootup, it now displays utter garbage and as soon as windows loads the graphics driver, it hangs. The only good thing is that, as long as I run the generic VGA driver, my desktop displays fine.

I guess I should have taken the scratching noises that the card’s fan made for some months now more serious. The fan is still rotating, but probably not at full speed. Needless to say that this is quite a show stopper for my XNA development during this week, still hoping that the new card I ordered will be here before the weekend…

My 5 Reasons for Going Indie

Becoming an independent software developer is the dream of many people doing their daily 9-to-5 slavery. It is mine, too. However, you can’t just decide to do this step, quit your job and tomorrow you’re an independent developer.

If you decide to walk this path, you will first be forced to give up a lot of your precious free time by working on your own projects on the evenings and weekends in addition to your day job. You’ll have to do this for months or even years to come in order to build a portfolio of products that generate enough additional income so you can switch to only working your day job half-time.

That’s exactly the point I’m at now and I’ve got the feeling that, just like in a marathon race, there will be a time when you reach the thirty kilometer mark and you’ll ask yourself: “Why am I doing this?”. Then you need a good answer that keeps you going, one that gives you drive. My 5 reasons for becoming and indie, for going all the way, will be:

  • I want to set my own times. With a job, I cannot just decide to go out jogging on sunny days or when I feel like it. It’s depressing to get up while it’s dark, work the entire day and drive home in the dark again during the winter months.

  • I want to decide what I do, and why. In the corporate environment, you are assigned a task and then that’s what you’re going to do. Granted, I have quite some influence here in my current job, but I still have to help fulfill the company goal. It’s like driving in a bus: You are free to choose your seat, but you have to cope with other passengers and neither the route nor the time are under your control.

  • I want to be proud of what I produce. At least for me, things produced in the corporate environment never live up to my standards. There are other developers with other priorities that produce tons of uncommented, badly abstracted code all the time. I’m not free to choose whether I accept these people on my team or not. I have to live with them.

  • I want to become rich. You’re reading right. Call me a dreamer then, a heretic even, for thinking that I can become rich as an indie developer. But fact is, I do. One thing should be clear: You will not become rich as a corporate working slave. If you want to get the money, you need to be the one in control. Maybe I’ll have to turn my indie business into a startup game development company some day to achieve this goal. So be it. I will not stop there.

  • I want to be in control. Have a bad feeling about some concept and would rather put it aside to see how it develops before doing the grunt work? Forced to do crunch time but know for sure that the deadline is but an artificial one? It’s not about choosing the easy way out – it’s about who decides what to do!

Ball Race – Day 12

I have found a way to solve the ball-falling-into-hole simulation that I am quite happy with as it won’t let the ball sink into the solid parts of the floor and still looks convincing. As soon as the ball crosses a hole, I remember that hole and start the ball’s downward acceleration. While the ball is falling, I adjust its position towards the holes center as far as needed so it doesn’t intersect with the outline of the hole.

With the gameplay mechanics working well, I spent some more work implementing the actual logic. The gameplay controller now knows the game status and updates it accordingly when the time runs out, the ball falls into a wrong hole or into the exit hole.

Next component to implement was a simple game state management system. Originally I didn’t want to do this, but as I see it now, I would otherwise end up coding all the different states (main menu, level selector, ingame) into several big if or switch statements which would be a very awkward way to handle this.

Ball Race – Day 11

The first thing I did this day was to implement the Farseer physics engine into my project. What a tremendous step forward. Not only was it easy to do, it also delivered the results I had been hoping for from the moment on I got it working.

Screenshot of a tilted wooden maze with a ball in it

I’m still not sure what to do about the holes in the floor. Farseer is a pure 2D physics engine and it simulated the effect of tilting the maze board simply by applying forces to the ball, but, essentially, the ball is a circle that’s moving around inbetween rectangles for Farseer. Maybe I can get away with a fake simulation where I apply forces that push the ball further towards the center of the hole and let it accelerate downwards on the Y axis without the knowledge of Farseer.

The ball is still looking rather dull and I’m beginning to think about implementing real-time reflection mapping in my little game, so it properly reflects the walls around it. The other solution would be to make the ball non-reflective, however, however, the ball must not be textured since the rotation would never be right as long as the physics are 2D.

Ball Race – Day 10

Beta 2 of XNA Game Studio Express has been released to the public today. Porting my code to Beta 2 took me about one hour since some genius decided to make the all the model framework classes sealed and remove their generic versions. Also, the GameServices collection now lost its generics as well and requires manual downcasting.

While updating the code, I also broke something in the stencil buffer drawing code which now, instead of limiting the shadow to shadowed regions, limits the walls to holes in the floor. Fiddling around with the shader effect files for the stencil and shadow drawing solved the problem.

Next, finding some swept circle vs. aligned rectangle collision detection code on the net has prooven itself to be harder than it seemed. I don’t have the strong math backgound needed to code such stuff myself. I ported the only code that seemed usable, even thought it was originally intended for sphere/polygon collisions. My first attempt at simple ball physics doesn’t go to well and I fear I will have to integrate something like Ode at the end. Maybe the pure .NET Farseer Physics Engine can fill this gap?