Archive for April, 2013

Gemini Rue – working on the Italian version for Zodiac (featuring some game-dev random thoughts)


Recently, I’ve been working on the italian version of Gemini Rue,  released on Zodiac today.

Gemini Rue was on my (constantly growing) “must play when I find enough time” list, and by having to work on it for the Zodiac release, I finally had a chance to play it (and to play it with the care and attention that it deserves).

I reviewed the translation (co-operating with my long time adventure games buddy, Cristiano ‘Gnupick’ Caliendo) and fixed some scripts in the source to let it handle properly the Italian texts (some strings aren’t automatically handled by the Adventure Game Studio i18n system, unless you take care of some details – but let’s avoid going technical).

I know that, given my involvment with the Italian edition and Zodiac, my opinion could be perceveid as spam, but I have to say that I really liked it, so kudos to Joshua Nuernberger, the game author.

The game came out in 2011, so there are already dozens of online reviews and it ‘s quite famous in both the adventure games community and in the indie game development scene, so let’s skip the part in which I talk about it and let’s proceed to the random thoughts I promised in the title. Some minor/indirect SPOILERS could be present.

In 2011, a single person can still publish a succesful game

Gemini Rue is not 100% done by Joshua, he received help in the music/sound area (and of course for the voice acting), but still, we are towards the vision of a single person that gets built after lots of hard work and passion. And you can feel that passion while playing the game, more than in some shallow big game productions.

How can this happen? I think it’s mainly about honestly evaluating the available skills (yours and of your teammates, if you have any), knowing what you want to do, and sometimes setting the bar low from the technical perspective (for example, using low resolution graphics and a domain-specific engine like AGS).

Atmosphere wins over pixel count

Gemini Rue graphics is 320×200 in 256 colors, something that might sound ridicolous in 2013. Smartphones handle more than that.

But it’s 320×200 256 colors graphics done extremely well: it’s not about exploiting some nostalgia factor related to “the nice days when I played Beneath a Steel Sky”, it’s about managing to have the player feeling immersed in the game world.

I’ve seen many high resolution 2.5 games with 3D characters not properly merged with the background, or full 3D games with horrible camera handling and user interface. It’s like someone from the marketing department shouted “FullHD/FMV/2.5D/full3D games are cool now, we have to do that too” , without evaluating if it was economically feasible for them to achieve a good result with that kind of technology.

Gemini Rue rooms are alive and rich of small details and animations, with some carefully placed lighting changes and an amazing sound design that consistently improves the immersion. From my point of view, definitely better than some high resolution static background or some low poly 3D world with clipping and lame particle effects.

A well told story doesn’t need to be original to be good

Gemini Rue has a good sci-fi/cyberpunk story, with dozens of direct and indirect influences that fans of the genre can point out: Blade Runner, A Clockwork Orange, Total Recall, Dollhouse, maybe a little THX 1138, and probably many more (there are some explicit Cowboy Bebop references in the game, but unfortunately that’s on my “must watch when I find enough time” list, sigh).

So, one might want to criticize the lack of originality of the game plot.
But you know, I think that really “new” ideas are quite rare nowadays (IIRC, Philip K. Dick once told that he had just a single good idea, the one of some artificial being that doesn’t know about being artificial), and this kind of criticism is not the smartest one can do: it’s not just about the ideas, it’s more about how they are put together and communicated to the audience. It’s about the way characters are used to carry on the events.

I mean, you can tell the “Reservoir Dogs” plot in 30 seconds, but it’s how is carried on the screen that makes it a cult movie.
And you can give some brilliant sci-fi background to some dumb action movie director/screenwriter and have a shitty film no matter how the basic ideas were cool.

If the characters manage to get us interested in their psychology, motivations, background, and have good dialogues, the originality and sometimes even the consistency of the story often become secondary. We have to care about the characters and feel motivated to impersonate them, because we want to see what’s going to happen to them as the story moves forwards.

A well designed adventure game keeps you interested

I played Gemini Rue from the beginning to the end and never got stuck or bored. My interest was always kept high, I constantly had some goal to achieve, and the puzzles were logical. Theres’s a good variety of environments and characters, the alternance between Azriel and Delta-Six sections of the game works very well, and the non-linearity of the story adds some interest to it without getting too complex to be followed on a first playthrough. There are some small action sequences, often looked skeptically by purists of the genre, but they’re well integrated into the story and didn’t bother me at all.

It’s a matter of rhytm and variety: getting a good balance between moments where you are looking for an object or a person, moments in which you must face some inventory driven puzzle, areas where you have to explore the surroundings, dialogues in which you get background information, cutscenes, action or time limited sequences.

Put too much of something and you risk having a too long cutscene, too much background info all in a place to be perceived by the player, too many locations to explore without being able to understand what’s useful in your next step, too many objects in the inventory… or, worse, you can get into stupid puzzles put there just to make the game longer, making no sense and having no connection to the narrative side. Good puzzles are the ones connected to the progression of the story, the others are mostly fill-ins.

I think that Gemini Rue does really a great job in this area, all is very well balanced and distributed during the whole game. There is maybe just a single puzzle that feels a little like a filler (the air flow management through vents opening), but hey, we had some stuff like that even in “The Dig” and it still is a masterpiece.

This kind of “balance”, in my opinion, is an instance of the often quoted Jenova Chen’s “Flow in Games” principle of keeping the player challenged but not frustrated. When talking about adventure games, to keep the “flow”, storytelling skills (similarly used in books, movies, comic books, tv shows etc.) are as important as technical skills strictly tied to game development (for example, providing a good user interface where the user can navigate the environment and handle the inventory without getting frustrated).

And while storytelling itself gives you endless opportunities, they escalate further when you add interaction: non linearity, adaptive details to provide a better suspension of disbelief, keeping the player active in the story-critical moments to increase the immersion… possibilities are endless, even forgetting for a moment about improvements that could come from the technical side (graphics, IA, NLP). And they say adventure games are dead… 🙂

Of missing textures, Assimp, the Crytek Sponza atrium, and naked women

Recently, I’m spending a lot of time in the atrium of the Sponza palace.
No, I didn’t move to Dubrovnik, Croatia, nor I’m on vacation: it’s just that the Sponza atrium model, originally created for a rendering contest, has been adopted by the computer graphics community as a test model (especially in the global illumination field), and who am I, working on my master thesis on rendering, to pick something else?

The original model dates back to 2002, but what I’m using is the updated and enhanced version made available by Crytek in 2010.

It features textures, normal maps, specular maps and opacity maps, so there’s plenty of data to be used while rendering.

I’m using Assimp to load models, and I stumbled into a couple problems. I googled about them and found nothing, so I tought that a little post on the subject was worth writing. I mean: if you get lucky and find something not yet on the Internet, you are morally obliged to blog about it before someone else does it! It works like that, right?

Anyway, enough blabbering: the two problems reside in the materials file, sponza.mtl.

  • a texture is missing
    • the material 16___Default refers to gi_flag.tga, not included in the textures archive
  • the specular maps are unreferenced
    • the textures pack features some specular maps (the files named *_spec.tga), but they are never referenced by the materials file

Let’s fix them…

Lenna, save us from the missing texture

Obviously,  the missing texture is the one of the only untextured object in the scene: the big vertical drape.  Copying some other drape texture as gi_flag.tga (or changing the filename in sponza.mtl, of course) gives visually acceptable results.

But didn’t make me happy. What was the original texture like? What if it featured a secret message of some sort? What if it was selected between hundreds, by Crytek professionals, to show some effect I could not even imagine? What if this “I WANT THE RIGHT TEXTURE” thing is just some form of OCD and I must see someone?

I googled for the misterious missing texture, gi_flag.tga but had no luck finding it. I found files named gi_flag.tga in some code repositories using the Sponza model, as I am, but after checking them out, the included gi_flag.tga was always some bogus file put there just to make the asset loader happy.

This poor guy on Stackoverflow asked for the misterious texture too, but had no luck, either.

Finally, my investigations brought me watching this amazing Crytek video, where they use the Sponza model at the beginning and around 2:30.

(also, the video humiliated me and my test renderer a lot)

It somehow solved the mistery: the missing texture is a quite boring red stuff with borders. Yawn.

Disappointement, and I still didn’t have the damn file – but it was time to move on, leaving the gi_flag.tga failure behind me. So, as you may imagine, after some hours of flying around with the camera, testing the shaders, looking if the alpha blending is done correctly, if the normal maps are applied properly, etc, the Sponza palace slowly becomes a boring place. Lion heads. RGB Drapes. Bricks. Plants. More bricks. All static, dead. Depression is around the corner, especially when you waste 3 hours ’cause you forgot to transpose a matrix, or something like that.

Consequently, I tought that selecting missing texture could be an occasion to make the place happier. How? Suddenly, the right answer came to my mind: Lenna.



This picture of Lenna Söderberg, scanned in 1973 from a Playboy issue (to be used as test image for a scientific paper), became a standard test image for compression algorithms and image processing.

I encourage you to visit for the full story.

So, I put a computer graphics iconic image into a computer graphics standard test model.

And the iconic image is a naked woman, turning a bitter failure into an epic win. Hey, that’s how I see it.


Of course, you’re welcome to spread the usage as gi_flag.tga of this Lenna texture I prepared.

Get your favourite version (I know, it’s a difficult choice) and rename as gi_flag.tga, put in the textures folder of the Sponza model, and be happy. It’s 2048×2048, you might want to scale it down to 1024×1024 or 512×512.

I properly cutted the original image to let it fit the drape geometry: I’m a gentleman, and gentlemen never let texture get stretched improperly – that could make women on them look fat.

Where are my specular maps?

This is not interesting and not funny: sponza.mtl is missing the “map_Ks” entries used in the .mtl file format to refer to specular maps. I tought it was some other Assimp quirk (for example, it loads the normal maps as height maps), but when I checked the sponza.mtl file I found no reference at all to the *spec.tga files, so Assimp was innocent.

Luckily, the files are consistently named, so a specular map named “sponza_thorn_spec.tga” can be tied to the material that refers to the “sponza_thorn_diff.tga” texture.

That’s what I did, assigning all the provided specular maps to the appropriate materials.

And here you are the updated sponza.mtl file, so you don’t have to repeat the boring file editing process:

With this, I made the post concretely useful for other people, so I’m forgiven for all the Lenna delirium.


… you now what? I’m dating this post April 1st, I can post whatever I want and still pretend to be a serious person.

Return top