Developer diary

Some news: Alien Blitz, Crazy Minecart, Shadow Mapping

Alien Blitz

There is a very random bug that causes the game to crash sometimes on PC, I can’t find why it happens, so until I find the cause I won’t release the next Android version (as it is random it might maybe also happen on Android).

This is a very strange bug, the game just suddenly stops, no exception, no dump, nothing, I’ve tried a few things:

  • I made sure System.exit is not called by adding it to a SecurityManager (override the checkExit function)
  • I made sure all exceptions are logged
  • I made sure OutOfMemory exceptions are trapped¬† somehow (-XX:+HeapDumpOnOutOfMemoryError)
  • All possible missing exceptions are catched using Thread.setDefaultUncaughtExceptionHandler

Only thing I have figured so far:

  • It’s not an audio issue (only error message is related to audio, but this message also appear when exiting the game normally, I just removed audio to be sure and bug happened anyway)
  • It’s not linked to a LibGdx version, bug appear on 1.4.1 & 1.5.2 also (and game was working fine when I was using these versions)
  • It doesn’t seem to appear on mobile version running on PC (but as it’s random I can’t be sure, I was just maybe lucky during these tests)

It is either linked to a change on my Linux system or something in the code (but there was nothing big added recently).
Next tests will focus on Windows (to see if it’s a problem on the Linux version) & on the nVidia card (to see if it’s related to the Intel one). I suspect something bad happening with OpenGL (would explain the lack of traces as it’s not pure java code).
Problem is each test takes around 1 hour as bug is random. I basically launch the game, make some automatic stuffs (auto fire, wake all monsters,…) and wait 1 minute, check if game exited prematurely, if not launch the test again. The bug seems to appear every 10 games on average, usually it will appear in the first minute or so after start, if it does not the game will apparently be running fine afterward (I’ve let it work for 2 hours fine)


On another note I updated the way life bars are displayed above player & monsters, they look a lot nicer now. And I have also added an option to show numerical values for life / armor & ammos.



Crazy Minecart

Some progress have been made on Crazy Minecart, I have some performance issues even without shadow mapping (40fps, it’s not a big deal but I don’t like that). So I removed some trees and simplified a few things, but I’ll have to pinpoint the issue.

capture_2015-04-08_10-58-46_0422_crazy_minecart_ capture_2015-04-08_10-58-51_0214_crazy_minecart_

I also need to change colors, problem is colors after exporting are not the ones I defined in Blender, it makes it a bit hard to do something nice.


Shadow Mapping

I’ve stopped working on part 5 (Multiple Render Targets) of shadow mapping tutorial for now, I’m just waiting for some commits to be included in LibGdx to support Cubemap, it will allow me to clean up the code and maybe add the MRT frame buffer more easily.

I saw this pull request recently, as I was about to make my own for the same purpose, good thing I checked up first ūüôā

Read more

Crazy Minecart : 3d test

Continuing on 3d version of Crazy Minecart I started tests on the game itself.

Exporting models

To export models from Blender I use a small script to export all models with a name starting with “export_”, they are all exported in the “exports” folder, in collada (.dae file)

This script is based on this post, I’ve modified it to export only objects with a name starting with “export_”, to move objects to origin, and to export to collada (as collada supports armature/animations, that could be needed for future projects)

import bpy

# get the path where the blend file is located
path = bpy.path.abspath('//')

# deselect all objects

# loop through all the objects in the scene
scene = bpy.context.scene
for ob in scene.objects:
    # make the current object active and select it = ob = True

    # make sure that we only export meshes
    if ob.type == 'MESH' and'export_'):
        # export the currently selected object to its own file based on its name
        bpy.ops.wm.collada_export(filepath=str(path + 'exports/' +'export_','') + '.dae'),selected=True,triangulate=True);
    # deselect the object and move on to another if any more are left = False

I’ve replaced the bottom timeline with the text editor in Blender, it makes running script easier (and I don’t know yet how timeline works). When executing script make sure you are in object mode, it won’t work in edit mode.



First tests

As I suspected I had problems updating Crazy Minecart, it was using an old version of libgdx and other libraries. LibGdx was easy to update (create a new project, copy old files), but mopub was a pain, their documentation is outdated and incomplete, so that doesn’t help. But it finally worked (not tested on ios yet, and I haven’t tested game centers yet, I just know it compiles…)

I am currently working on the title screen, it is easier to test there, first adding models :




Then adding some basic lighting :



The trees seems off, it’s because of back face culling (front faces are invisible, back faces that should be invisible are visible), I have no idea why but the normals are inverted :

  • In blender normals are correct
  • If I export as wavefront object with Blender and re-import it, on import model will have normals inverted
  • If I export as collada object in Blender, it is correct on re-import
  • If I convert the collada object to LibGdx format then normals will be inverted
  • If I invert normals on model and export it, it will be visible in the game but normals will still be off (the face in shadow will receive light, but not the one in light)

So I ended up recreating the tree from scratch, and this time it worked, I have no idea why the other tree is such a mess…

I also increased gap between ties as it doesn’t look good at high speed and I scaled / rotated trees randomly :



Inverting grass/dirt, it feels better at high speed :



Tuning lighting a bit (I still need to tune light direction, specular and “shininess”) and changing trees colors :



Adding some shadows (using an orthographic camera, to simulate sun light / directional light) :



Moving the light source position a bit :



At this point I began testing on my Nexus 7, sadly it is running at around 25fps… It is because of shadow mapping, writing to a FBO seems to be really slow even with simple models such as the ones I use. And this game really needs a stable 60fps.

I am currently continuing testing shadow mapping, and trying to improve performances, if I can’t get anything good I’ll try something else.

Read more

Crazy minecart : more 3d (blender)

Continuing on testing 3d low-poly for Crazy Minecart, here is a blender rendered scene from behind


I think I will continue working on this update, as it will allow me to test stuff for the new engine I want to work one:

  • Real time shadow mapping (models are simple, so I hope I will be able to render scene at stable 60fps with shadow mapping)
  • Low poly lighting (shouldn’t be too hard)
  • Maybe try to reproduce this grainy look blender does, it looks really nice imo (click the image for 1080p version, it is more visible there)
  • And it will also help me test exporting multiple models at once with blender (through scripting) to automate this process.

Read more

Crazy Minecart : 3d ?

As I was playing with low poly 3d lately I thought about trying to get crazy minecart in 3d.

Currently Crazy Minecart is in 2d:



What it could look like in 3d, blender renders:



And a rear view (I’ve moved the cart away from water)


I can’t make “organic” models (human), only artificial ones (or simple natural ones), so I doubt I will create a character to put in the cart, maybe I’ll be able to find a free one, or I’ll just leave the cart empty.

But I can make trees and such, some tutorials are very good, it will add details on the border (or make the water obstacle more visible for example).

So yea, maybe I will work on creating a new crazy minecart version, what bothers me the most is updating all the surrounding frameworks for that (ads, google play services, game center,…).

Read more

More space ships

Continuing on working on some low poly space ships, I’ve added and cleaned a lot of stuffs


Here’s a top view, maybe the view will be a little more downward (as Alien Blitz) to see upper/down wings more easily :


And here’s the workspace, with templates for parts size :


Read more

Alien Blitz: new update (mobile), stamina (PC)

New update (mobile)

While digging on the possible errors that could have triggered the last update rejected on app store I noticed some errors were not correctly trapped, and that I had no way to check if errors happened on the iOs version.

So I’ve made some changes:

  • Automatic anonymous error reports are back, whenever an error occurs the stack trace is sent to my website (anonymous, the report just contains a few system parameters and the stack trace). It means I need the network permission back for the full release on Android.
  • I’ve corrected the process that catch errors, and it should work again if option file is corrupted (if it gets corrupted option file is reset and a message is displayed to warn user)
  • I’ve added more exception catching in missing places (basically exception catching was working fine when playing a level, but not always on startup and in menus)
  • The splash screen should disappear quicker on iOs (was 2.5 seconds on my iPod, it is now 2 seconds spent only in LibGdx stuff I can’t change)

I’ve also included some changes on balance, shotgun has been nerfed at high level, and double shotgun has been boosted. So player should upgrade to double shotgun at high level.

I will send this update soon on the mobile platforms.


Stamina (PC)

I like the stamina that was present in old versions of Alien Blitz (Snorms in this case), I removed it for mobile as it is quite hard to manage for the player, but I’ve decided to add it back on PC.

The way stamina now works (PC only):

  • Player uses stamina by pressing the shift key or the Y button of the controller (on xbox controller)
  • The auto lock button has been moved to the back button (xbox controller) by default, can be changed anyway
  • When using stamina player will move quicker if he is on ground (does not work when jumping, to avoid breaking levels)
  • When using stamina and shooting the weapons will reload a lot quicker and deal a little more damage (but it uses a lot of stamina)
  • Stamina will go up after 2 seconds (stamina button must be released)
  • By default stamina status is not visible on screen, but it can be turned on in the options.

So basically it works a lot like old stamina, except¬†maximum stamina can’t be upgraded with level ups.

Here’s a little screenshot with stamina bar visible:


I’ve also removed most of the sprite borders, and made the camera a little closer.

Read more

Space ships

2d space ships

Quite some time ago I tried to work on some 2d space ships :


It was inspired by work

The good thing with 2d is that adding details doesn’t use more memory/gpu/cpu, problem is that it doesn’t scale/rotate very well (especially with details)


Low poly

So I tried some 3d low poly render (made with blender) :


It’s just some prototype but I quite like it, and it made me want to retry working on the game I was thinking for this asset.

As you might guess ship building / customization will be quite important in this game

Here’s some top views, probably the exploration/combat type of view :

scene_top scene_top_far

(background texture by Lyshastra on deviantart)

More info soon I guess if I continue working on that (not sure yet, I don’t have a lot of free time)

Read more

Mobile site, App store

Mobile site

I received a mail from Google to tell me that my website was not appropriate for mobile, I knew it of course but never bothered looking into that up to now.

So I installed a theme switcher for WordPress (any mobile theme switcher), and a very simple theme (mobile). So mobile user will now get a simple theme that should display most pages nicely.

2015-03-19 21.12.54

I just had to manually set the menu name in one php file as wordpress does not support two theme configurations active at once, other than that it seems fine.

You can always choose the desktop version in your browser settings/menu if you want to.


App store

I’ve been able to test the latest update on a 64bit iPhone version, and it was also accepted for beta test, so maybe it means I’ve solved the issue. If I have not I will have to get an iPhone 6 or iPad air 2 / iPad mini 2 as I think issues comes from 64bits releases.

What I did is that I updated Libgdx and robovm to latest builds, cleaned robovm cache (delete .robovm/cache directory), rebuilt everything and increased eclipse heap size so that a full compilation doesn’t crash (might have been the problem before as it seemed to crash during 64bits compilation). The compilation lasted something like 10-15 minutes, we will see if it worked.

Read more

Alien Blitz: iOs

My last update keeps getting rejected by Apple, apparently it crashes on startup…

Problem is that whatever I try on my iPod touch or the simulator (update, fresh install,…) it works on my end…

So I had the “crazy” idea to use TestFligh to send it to some testers and maybe get more information and pinpoint the problem… but the app was rejected for beta testing as it crashes on startup… Thanks Apple, you are really helping…

Read more

Shadow mapping with LibGdx: moved to GitHub

The Shadow mapping tutorial has been moved to github !

Currently the content is exactly the same as before, but it will make updates and third-party modifications a lot easier.

What it means is that:

  • github project and wiki will contain work-in-progress / development / unreleased versions of the tutorial & source
    You can fork one or the other to contribute
  • the Shadow mapping page on this site will always contain release / clean versions of the tutorial & source

It’s actually a lot easier for me that way, I use a simple script to convert wiki to html and html to pdf, and as the html code is a lot cleaner than what I was getting from Google docs it means I can finally apply a clean CSS to it, for viewing and printing.

It also means I will soon be able to add the MRT changes to the tutorial.

Read more