In my last post I said I’d add some exhaust streams to my robot. I also said I’d use particles for that. Well, I didn’t. I spent several hours trying to get it right, but it always looked like my robot’s taking a bubble bath instead of riding on a powerful jet engine. I ended up using a single alpha blended sprite for each of the streams. This may sound cheap but actually looks really good.
As you will see in the following video, I did use particles for another effect: the huge explosion you’ll face every time you loose. Since there really is no way to “win” this game, I at least wanted to make the Game Over as visually appealing as possible. I also added a start animation – the robot now launches like a real rocket from a girder that is disconnected just after the engines have warmed up.
This video shows the game in its current state – it is by no means final. There’s still a lot of stuff missing: a properly designed HUD, effects when crates are collected or new ones spawn and of course: sound! I can’t really talk about sound yet, because I haven’t done anything so far. The only thing I can tell you is that Yuckfu will have sound and music. Hopefully.
Read on for some more in depth (and embarrassing) game developer geekery.
Finally something to write again! I remade the background graphics for my iPhone game, because the old ones didn’t fit too well (flying around with a spaceship in cave?), were never meant to be textured and thus looked unfinished. It was not an easy task. My motivation was at an all time low, because I had to throw away much of my previous work. After two unsuccessful attempts I was eventually happy with what I saw – and I really think it was worth it.
I’ll show you a screenshot of how the game looks like in a minute, but let’s start with something else: The main character. Yes, it’s a character now. Not a lifeless, boring spaceship anymore. Well, ok, it’s a robot – but a cute one! I blame WALL·E. I actually tried to mimic WALL·E’s eyes in my sketch, but failed. The rest, however, worked out quite nicely.
A Google search about cute robots was enough to gather my ideas for a new face. I finished the model in an hour or two, but then spent much more time on texturing, than I did on modeling. As you can see, the texture is quite saturated. I tried to really make him stand out from the background and also wasted my time with details no one will notice in the game. If you know what the number on his body stands for, get yourself a cookie (and a life)!
The background now resembles some sort of space hangar. If you look closely, you can find some influences of 2001 and Star Wars in my 3D model. Modeling and texturing this thing was a real pain. Everything had to fit. I didn’t have the freedom I had with the cave background, where it didn’t matter if the texture was off by some pixels, or one polygon was a bit larger than the next one – after all it was an organic structure. A hangar is not.
The large gate in the background actually opens during the game. Just to make it look more interesting and reward the player. It has no influence on the gameplay itself.
I also textured the crates with some photos of standard shipping containers. They come in four different colors, from red to blue, depending on how many you collected in a row. It looks really nice, when then screen gets slowly filled with these colors. It seems I’m not the firstone discovering the beauty of shipping containers.
Next up: Particle effects – flying a jet powered robot without seeing any streams is no fun.
I spent the past few days to create the main graphics for my game. After lots of trail and error, I was quite happy with the flat shaded cave I had created (topmost picture). It did not look realistic in any way, but rather computer generated – which is, as I said earlier, probably not something everyone can enjoy. However, the flat shading worked really nice with the dynamic OpenGL lighting (quite a complicated topic of it’s own), which gives the whole scene some more atmosphere.
When yesterday a friend saw some screenshots of the game, he told me that it looked all well and nice and then asked a very innocent question: “How will you texture the background?” My response was of course “not at all” – I mean, it’s a flat shaded game, right? I turned out that he wasn’t the only one who thought that this flat shading was just an intermediate step towards the final look.
I was initially opposed to using textures at all, but after some discussing, I decided to give a shot. I unwrapped the whole scene in Wings3D and used Photoshop to slap some colors and textures on it. The second and third screenshot are the results. One with a more comical approach, the other with realistic textures. To be honest – after all this I’m not very satisfied with either one. I don’t even like the flat shading anymore.
Another friend asked me today, why the game is set in this cave in the first place. Wouldn’t it make more sense if you’d collect these boxes in some sort of space hangar? Well, yes… yes actually it would. I’m not sure why I didn’t loose a thought about the overall scenery at all. I just blindly took the very vague cave look from the original game without ever questioning it.
So, I guess I’ll start anew with the background graphics. At least I’m now quite comfortable with Wings3D. It’s a good thing I don’t have a publisher in my neck. Wish me luck!
After my last post I read a bit more about displaying text with OpenGL. One of the more popular solutions is to have a single texture containing all (ASCII) characters of a font. As it turned out, there are several applications to build such a texture for you. Bitmap Font Builder is one of them. It looks a bit clunky, but gets the job done nicely – and it’s free!
Here’s a quick test I did with the Helvetica typeface. I exported the texture as a transparent PNG file, cropped it and added a simple drop shadow effect in Photoshop. For now, I only used the upper case letters. I’ll probably come back later and export the full set of Latin-1 characters.
It’s been a while… I finished the basic gameplay mechanics of my iPhone version of YuckFu just a day after my last post, but hadn’t yet found the time to write about it. So here’s just a short update.
As you can see in the screenshot, the game still looks like crap. But that’s intentional (no really, it is). The main focus of YuckFu was always on the gameplay, so thats the first thing I wanted to finish. Just to make sure it works on the iPhone – and it does! A game with good graphics that is no fun to play isn’t worth anything. A game, however, that doesn’t look nice and shiny but is fun to play, is still a good game. Just to clarify: I’m aiming for both, but I’ll still need to tweak some values and let some friends test it before I move on to the graphics side.
And of course there’s on thing still missing: the score. Displaying text in OpenGL applications has always been somewhat tedious. I haven’t yet really looked if OSX provides some different solutions, but as far as I know there are only two viable options: Using a single texture with all glyphs in it (built in Photoshop or whatever), or loading a TrueType font and rendering each glyph into a texture. With both methods you’ll face the same problems: Each glyph has to be stored in memory – this is fine for ASCII characters, but can get challenging with UTF8 characters. So a scoreboard with names consisting of characters outside of ASCII is probably not going to happen for YuckFu. The other problem is the lack of support for “features” like kerning. Even displaying proportional fonts can be a pain. So, maybe I’ll just settle with a retro looking bitmap font – but not before I’ve checked if OSX does indeed have some magic way for solving these problems! Although they are not exactly on the OS side…
After some hours of reading to figure out how exactly the memory management with alloc, dealloc, retain and release works with NSObjects in Objective-C (here’s a good article) and some more hours to get used to the funny syntax, I was finally able to do something with it.
To get my 3D model onto the iPhone, I had to find a data format that is easy to load and can be used directly in my Application without much modifications. I decided to export the model from Wings3D as Wavefront .OBJ file, which is a pretty straight forward ASCII format. I, however, didn’t want to go through the hassle of parsing ASCII data in C, so I wrote a small PHP script to transform this .obj file into a binary format that was ready to be used with OpenGL ES.
I haven’t yet elaborated a complete concept of where I want to take Yuckfu visually, but after I did some quick sketches yesterday I decided against 2D graphics for obvious reasons. So, the background, the crates and the character will be drawn in 3D – that is with Polygons and stuff. I won’t change the gameplay with this – you will still see the whole scene from a fixed side view.
Why not 2D graphics then? Simple: if I’d be the one doing them, they won’t look good. I feel more comfortable with doing 3D stuff. My experience with real modeling software however is at a bare minimum. So here’s another thing to learn.
More than 4 years ago I released my first and (to this date) only game – Yuckfu – to the public. The game’s concept and controls are ridiculously simple and can be grasped in a matter of seconds, but it takes hours to become good at it. The graphic sucks and there’s no audio at all – the gameplay however still feels as fresh as is felt years ago. It still is fun to play despite of all it’s shortcomings.
Why am I telling you this? Well, I have been playing with the idea to redo this game for the iPhone for quite some time now. The iPhone’s capabilities and input methods seem like a perfect fit for it. And with the App Store I might even make a buck with this.
A few days ago I finally downloaded the SDK and tried to get familiar with it. Now that I’m 79€ poorer and actually able to test my desired input method for this game (the iPhone’s accelerometer), I can safely say that it will be a lot of fun – not only to play, but also to develop!
I’m not planning to simply port the crappy graphics over to the iPhone, but to rewrite and re-design the whole game – and to kick myself in the ass a bit while I do so, I decided to blog about the process. Sadly, because of certain circumstances, I’m not able to talk about the iPhone’s SDK too much, so I will try to focus on design and general programming aspects instead.
Since I’m new to Objective-C and OSX programming this will be quite an “interesting” journey. I hope you join me!