Fez

This little independent game called Fez has a great concept.
Flat a 3d world and only allow the player to move in 2d. Except ... the player can rotate the world.

Watch the trailer, its a lot easier to see than to read about it ;)

Posted at at 4:38 PM on Wednesday, November 26, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

David Perry at Leipzig GC '08

I just finished going through this presentation from David Perry at Leipzig GC '08.

For those of you who don't know him, here are a few titles you might just recognize:

  • Earthworm Jim
  • MDK
  • Enter the Matrix
I'm a great fan of his work and this presentation shows some of his current projects (not just games).

One of the key points is the way games are headed, with some enphasis on ad-supported games.


TenTonHammer (via DPerry.com)

Posted at at 11:33 PM on Tuesday, August 26, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Monitoring memory usage

This article at gamasutra covers some interesting stuff (memory usage, fragmentation ...).
It's not for the faint of heart, but for those wanting to delve deep into the inner workings of their application, this is a great way to do it.

This should be in every game platform SDK ... or in every game developers toolkit.
Maybe one day we'll get there.

Posted at at 5:34 PM on Thursday, July 03, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

story is the antithesis of game

After reading this post from Jamie Fristrom, and agreeing to most of what he was saying, I decided to read the article that originated his post.


This article by Greg Costikyan nails it down perfectly. If you are interested in game design, you should really read this.

I recently played a lot of Super Mario Galaxy, and this makes perfect sense. I was not really interested in the story, what kept me wanting to play more was just having fun and seeing what they would think of for the next level.
The game reinvented itself at almost every new galaxy I found...
I don't think it needs to be infinite (it was big enough!), it just needs to be fun.


But truth be told, I never really dedicated myself to playing RPGs (I did play a few) so one might argue I don't know what I'm missing ...

Posted at at 1:40 PM on Tuesday, July 01, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

blender-ogrexml

Getting on with my project, I decided it was time to try and export something from blender, which I want to learn to use at some point in the not too distant future.

The default scene (a cube) looks perfect for a test drive.
But ... I found a bug in ubuntu.
The package blender-ogrexml is installing the export scripts in the wrong directory, so blender does not load them. And I don't feel like fixing this manually. At least not now...

I guess tomorrow I'll see if this is a know issue and if not open a bug report.



EDIT: apparently this bug is already reported for ubuntu (and has a workaround).

Posted at at 12:31 AM on by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Object ownership

Ogre3D's object ownership policies are really getting on my nerves ...
Maybe I just skipped the wrong piece of documentation, but being rewarded with a segfault kind of sucks ...



Edit: this post on the ogre forums says it all... why, oh why didn't I see this on the documentation? I was expecting to see it somewhere around here

Posted at at 11:21 PM on Monday, June 23, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Getting back to Ogre3D

It's been a while since I've used this.
Setting up the Ogre3D SDK is always a tough job, so I decided not to get all smarty-pantsy and to just install 1.4.5 from ubuntu's repositores (instead of 1.4.8 from svn ...).
Well, now it's working, and now I'm going to take some time to get to know this sucker a little better than I did last time!


Ogre3D

Posted at at 10:08 PM on Tuesday, June 17, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

OpenAL and error handling

I'm writing a thin wrapper for OpenAL that only does some basic checking after doing some work.
After writing a few modifier/inspector methods, one thing is impossible to miss. The error handling mechanism in OpenAL is not exactly the most user (in this case user-programmer) friendly.

OpenAL was designed as a C library (which I fully support, although I would like an official C++ wrapper, so that there was no need to reinvent the wheel). After that decision, using C++ exceptions was really not an option anymore. So they were left with returning NULL/an error code or going the errno way. Set an error code and leave it up to the user-programmer to poll it.

Why, oh why did they not put a return code in every function so that one would now when to poll for errors ? Oh no, just return void and force the poor programmer to poll for errors after every call.
Now that hardly seems efficient ... Maybe if I was using OpenAL directly, I could do the error checking after a block of OpenAL instructions ...

My options now ?
1 - check for errors after every OpenAL call (at least the ones with no return code)
2 - implement some mechanism to check for errors at appropriate times (a sentry class? a simple function?)

I'm following Donald Knuth's advice and keep optimization to a later stage.
After all, that's what profilers are for.

Posted at at 10:17 PM on Wednesday, June 11, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

OpenAL up and running

Well, not quite yet, but I managed to play a wav file wohoo!!!

...It's about time! I'm getting rusty at this stuff!
The problem was all mine (as usual when coding alone ;) )
And I was blamming ubuntu for it! Shame on me :(

Now I'm just going to create a thin wrapper around openal so that I can make it a little bit more object oriented. And also error safe. I'll check for errors after each method call and launch a nice descriptive exception when something fails.

Posted at at 11:58 PM on Friday, June 06, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Havok is free

At least for non-commercial use.
The announcement is here (via gamedev.net).

Thank you Intel!

I hope pal takes advantage of this ;)

update:
I guess pal support for havok is confirmed and will take about 3 weeks...
Thank you adrian!

Posted at at 10:22 AM on Tuesday, June 03, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

OpenAL in Ubuntu

I still didn't get this to work :(

alcGetString (NULL, ALC_DEVICE_SPECIFIER)
always returns NULL.
My problem is similar to this, except in my case it's not for capture, but for output.
I'm hoping this is related to this bug (that didn't get corrected for Hardy Heron).
Let's see ...

Posted at at 10:02 AM on by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

OpenAL does not like me

It seems either I'm doing something wrong, or OpenAL does not like me and does not want to work on my default sound device.
I guess I need to read the manual again ... :(

Posted at at 10:12 PM on Monday, June 02, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Concurrency and paradigm shifts

I had this article in my google reader starred items for over one year ... and for a good reason.
The different way of thinking to successfully exploit concurrency fascinates me.
In this article Kristian starts by comparing software state variables to moving parts in hardware. They might seem to be working ok, but chances are they will be the first ones to fail. Ok, it makes sense to me ...
The suggested solution is not easy to accept (as an efficient solution), basically because it is a different paradigm (functional programming) than most of us are used to.
As an alternative, for when mutating data is a must, he suggests using the active object pattern. I like that ;)
In the end, I see his solution as a trade of memory for computing speed (the oldest trick in the book?) Anyway, it's a nice point of view, and I would like to give it a shot ... when I get my hands on something with more than 4 cores ;)

Posted at at 2:46 PM on Thursday, May 08, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Burn the Rope

I really needed to share this here.
Burn the Rope is a nice game, with a great sound track.
Try it!

Posted at at 4:18 AM on Saturday, May 03, 2008 by Posted by Rui Pires | 1 comments Links to this post   | Filed under:

Clutter

An experimental version of Clutter running on the iPhone.


With support from the gtk community, but not related directly, it looks like a great project to keep an eye on. I hope this plays nicely with openmoko ;) (I know it will)

On the techy side, it's nice to see it runs using OpenGL, and even nicer to see support for OpenGL ES. This means it is ready to run on a bunch of embedded OpenGL implementations!

Posted at at 10:35 PM on Thursday, April 10, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Agile in game dev

This article at gamasutra is a very nice introduction to agile (specifically eXtreme Programming).

I am trying some of the techniques described there even though I'm not (professionally) working in an agile project (we're getting there...).

Some of the topics that got my attention:
Test Driven Development (I'm a sucker for this ;) )
Pair Programming (great Idea, bad for my last.fm stats ... )
Continuous Design (because it just makes sense)
...

Posted at at 6:53 PM on by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

lambda side effects

When writing my previous post, I was thinking of lamba expressions in C++0x simply as syntactic sugar, a nicer way to express what I wanted to do, without the need to constantly create helper functors.

In this post, Dean Michael Berris talks about a nice way to exploit lambda expressions and take advantage of the high level you are writing code at.
If you consider intel's TBB, and think of how they implement it, having built in support for lambda expressions in C++ is a great way to allow the compiler to decide how parallel the execution should be.
This is a nice example of just how big the implications of a new language revision might be. And why they should be well though out before releasing them.

Posted at at 4:51 PM on Tuesday, April 08, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Lambda expressions voted into C++0x

This post by Herb Sutter on his blog says it all.

C++0x is really shaping up with lots of new interesting features ;)

About Herb's teaser in his post. I wonder if he used gcc for his tests... That would be fun. And still, not that inconceivable ;)

The use of the lambda expressions to pass code around to another thread is really interesting. I really like the active object pattern, but this is surely a great way of distributing work around.

Posted at at 3:32 PM on Sunday, March 30, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Bjarne Stroustrup interview on Dr Dobbs

I would like to share this interview to Bjarne on Dr Dobbs with you.
It is worth reading, at least for the part about what will be going into C++0x and what will be deferred to the next language revision.

Quoting Bjarne:

  • Libraries
    • Threads
    • Regular expressions
    • Hash tables
    • Smart pointers
    • Many improvements for containers
    • Quite a bit support for new libraries
  • Language
    • A memory model supporting modern machine architectures
    • Thread local storage
    • Atomic types
    • Rvalue references
    • Static assertions
    • Template aliases
    • Variadic templates
    • Strongly typed enums
    • constexpr: Generalized constant expressions
    • Control of alignment
    • Delegating constructors
    • Inheriting constructors
    • auto: Deducing variable types from initializers
    • Control of defaults
    • nullptr: A name for the null pointer
    • initializer lists and uniform initialization syntax and semantics
    • concepts (a type system for template arguments)
    • a range-based for loop
    • raw string literals
    • UTF8 literals
    • Lambda functions

I can't wait to use C++0x!

Posted at at 2:14 PM on Friday, March 28, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under:

Game Programming Gems 6


I got this book for Christmas (thanks Patty!)
It really is a treat, so many great articles to read.

I didn't have time to read that much of the book, it can easily be considered heavy reading stuff.
I read the lock-free algorithms, one of the first articles of the book.
I had no notions about this topic, aside from knowing that the point is not to lock anywhere so the performance is not hindered as new processors/cores are added. Reading and understanding a lock-free stack took me back to when I was reading about data structures for the first time. It really needs an open mind and lots of attention to details.


It is fun to see as the focus of these books shifts with the current problems the gaming industry is faced with.

I bet I'll have fun reading the rest of this great book.

Posted at at 9:54 AM on Wednesday, February 06, 2008 by Posted by Rui Pires | 0 comments Links to this post   | Filed under: