Link

This post is not going to be about programming. It’s more about my problems trying to create game characters into my game with Blender and Makehuman. If these programs are totally unfamiliar to you, Blender is an open-source software for creating 3D graphics with plenty of different features (http://www.blender.org/) and Makehuman is this really handy also open-source software for creating realistic 3d human model (and the models are butt naked! http://www.makehuman.org/)

Since I decided, that my game’s main perspective is going to be top-down, I tried to draw my characters first with Gimp and Inkscape and then by hand but none of them gave me satisfying result (those darn character hands were always so unnatural). So my current game testing character is two ellipses and a stick. Well it’s green like the German polizei.

After my experiments with 2d graphics editor I tried Blender and Makehuman. I knew that Makehuman was pretty simple so I chose them for creating a character of which I would render into top down perspective. First I made human character with Makehuman. It took me practically few minutes because of the top-down perspective I wouldn’t need much to fiddle with expression or genitalia settings. Following that I just exported it into a Blender exchange file. Makehuman can make two different mhx files one for Blender 2.4 and one for 2.5 versions or both.

I’ve been using Blender quite much since 2007 but I hadn’t touch it after I installed new version of Linux Mint about a half a year ago. So I launched my Blender 2.63 and tried to recall my rusted modeling skills when suddenly it crashed an shut down. When I ran the blender from terminal it just gave me: ‘Segmentation fault’. I tried it few times but almost immediately I did something with 3d view it crashed. And when I’ managed to attempt to import .mhx file for the terminal informed that:
‘Error when loading MHX file:
Wrong MHX version
Expected MHX 1.12 but the loaded file has version MHX 1.4’
Same error emerged when I tried file that was made for Blender 2.4 versions except the loaded file had version MHX 1.0.

So apparently mhx files were made strictly only for 2.4 and 2.5 but not for 2.6 version. My solution for this was to download older 2.5 blender version, uncompress it into a folder, not to install it, and run it from terminal. Then the importing 2.5 files worked and I had my human character in my blender. I was so relieved until the 2.5 version crashed informing about the segmentation fault.

I can’t find the forum post but in blender forums they talked about problems with older ATI Radeon graphic cards (Hey my laptop has one!), OpenGL and Ubuntu (Hey my Linux Mint is based on Ubuntu!). So it’s probably problem with drivers and there is no way I’m fiddling with those driver thingies after that ‘I really wanna play Enemy Territory!’ episode (I don’t want to talk about it but I think it was the reason why I formatted my hard drive and installed newer version of Linux Mint). But there

is a solution. I just launched the blender by writing blender-softwaregl on terminal and after that it worked like a charm! It basically turns the hardware acceleration off. But for me it’s way better than suddenly crashing accelerated blender. Finally I had my top down character. At least sort of…

I used the low-poly import because I didn’t see reasons for high-poly for sprites on mobile platform. Just a little clothing and a weapon and it will be ok.

Link

Usually turn-based tactics and strategy game’s game objects are inside squares or hexes. I’ve decided that in my game it would be fun to make turn-based game without those board game like cells. Biggest differences compared to hex and square thingies, I could think of when I planned this, were: objects positions are not hex No. X but x and y float coordinates in game space, distances are not X amount of hexes but  float numbers and the area where game characters can move are now circles. So I’ve came up with MoveCircle which shows where player character can move, how many action points moving will take and path which character will use. I can’t remember, have I seen this kind of way to control character in any other game but it’s so simple I think I am just reinventing the CIRCLE here (but that joke was really original).

Moving path (the blue line in the picture) now shows how far within the green circle the character will go but I’m also going to make it show a path around objects which are blocking the way.

Since OpenGL doesn’t have circle shapes by default  I had to make my circles by myself from triangles. Easiest way for this is to make for-loop which counts vertices from distance from the center of the circle and angle with the help of my arch-nemeses from senior high school: sine and cosine.

//Green circle's vertices
circleArray[0] = 0;
circleArray[1] = 0;
// Angle
float theta = 0;

for (int i = 2; i < circleArray.length; i+=2) {
    // x-coordinate
    circleArray[i] = FloatMath.cos(theta);
    // y-coordinate
    circleArray[i+1] = FloatMath.sin(theta);
    //Black line circle's vertices
    lineCircleArray[i-2] = circleArray[i];
    lineCircleArray[i-1] = circleArray[i+1];
    // The angle is in radians
    theta += 2*(Math.PI) /((circleArray.length/2)-1) ;
}

The circleArray is an array which consists the green transparent circle’s vertices. It also has the center vertices because it will be drawn from triangles. This loop also includes the black hollow circle’s vertices. It doesn’t have center vertex  because it’s made from lines. When for-loop fills the arrays the line circles and green circle are same size but when OpenGL draws them I just scale them smaller.

The more circle has vertices  the more smoother it is. This also means bigger arrays for vertices and possibly less frames per second. My circleArray’s length is 38 so it has 19 vertices (18 on the edges and 1 in the center). Of course one can distinguish the edge lines in my circles but it’s perfectly adequate for testing.

More about OpenGL ES circles:

http://stackoverflow.com/questions/4811981/drawing-a-circle-in-android-with-opengl-es-results-in-a-square

http://gamedev.stackexchange.com/questions/26232/drawing-a-circle-in-opengl-es-android-squiggly-boundaries