Category Archives: Devastro2

D2 log 045 – Episode selection screen

Finishing the episode selection screen. Made a new Blender cover template, where each episode has its own scene and a single export command puts everything in the game.

Dots below the posters represent levels, filled ones are completed.

With the code & pipeline set up, I can focus on the content.

The missions in the first game were kind of all over the place. This time I’d like each episode to have a central theme with specific objectives to be completed over the course of 3-5 missions.


  • Is there going to be an stealth mission? Haha, no, sir. We’re going loud.
  • Escort mission? Forget it.
  • How about a mission with a farmer driving a tractor and you sitting in the trailer and shooting things? Why not.
  • Do you need to get said farmer some beers? Yes!

D2 log 044 – Utility poles

Another small task off my plate: utility poles.

After putting together a quick moodboard, I started modeling the basic design and created a few different variations. I quite like the wood texturing on those.

However, when I saw them in the game I realized there was something missing. Wires! The poles look so lonely without them…

I could

  • Pre-render sets of poles with wires included. This would reduce variety and the textures would be much larger.
  • Pre-render wires separately, place them in the editor. Less memory usage but the size and direction is still fixed. Also extra precision work required for placement.
  • Dynamic wires.

I decided to make the wires dynamic.

The first thing I needed was to define anchor points for each pole to attach the wires. I did this in Blender by adding Empty objects and giving them custom names.

The Blender export script then looks for those objects and writes their projected positions into a XML metadata file.

The game loads the metadata, the pole rendering code looks for the nearest neighbour poles, tries to match their anchor points and renders the wires.

All of this took about 3 hours, one of which I spent hunting down a problem with the anchor locations. It turned out I had changed their parent nodes in the Blender hierarchy and the parent inverse offset was wrong.

D2 log 043 – Road signs

Another small task done: road signs. I went looking online for good textures or vector shapes of US road signs and found a great resource here. Picked a few that I liked and put them on 3D models. I had to do the rounded corners and UV maps for each sign separately to match the curves precisely. Not that anybody will ever notice at this scale. It’s just something that had to be done. Quite a tedious process, but good for podcast listening.

D2 log 042 – Icon

I made the first draft of an application icon for the game. A small but rewarding task which got me the following:

  1. Some idea about the icon itself
  2. Blender export pipeline
  3. Script that scales the icon into all required dimensions & writes icon metadata

Now I can tweak the model & lighting (as one does), push a button and get a fresh set of app icons for each platform.

Icons for my other games:

D2 log 041 – Logo animation

The logo animation is a rather small feature and it’s been a while since I put it in, but I still love it when I see it.

It’s designed to resemble a gun being reloaded – a clip goes in and one bullet is loaded into the chamber. Based on AK47.

I’m glad I took the time to do it early on. Devastro 2 code is derived from Superforce so it was important to make a clear step away.


D2 log 040 – Saucers

Adding more variety and detail to the saucers. Finally.

The original Devastro had only one type of saucer. Granted, it came in two colors, but it was the same shape. It was based on a photo of a physical object (something from the kitchen I think).

For Type Raiders, I made several different 2D silhouettes in Adobe Illustrator, processed the .ai files with Python to turn them into 3D meshes and then rendered those using a Java-based renderer called Sunflow. That worked quite well, thankfully.

Now I’m using Blender for everything. Making the silhouettes, generating 3D meshes and rendering. I use PBR materials to give the saucers a scratched, banged up look.


It’s work in progress but I’m already quite happy with these.

The new Blender “cloth brush” tool was handy for making realistic looking, sloppily rolled out rugs. They too, as the saucers, look a bit used. God knows what liquids have been spilled on them throughout the universe…

♫ Turn every invasion
into a special occasion…
…with rugs!


So let’s take one more look at the entire saucer lineup:


Oh look, a Fisher Price™ Saucer! Not 100% sure what to do with it yet but it’s going in. I can

  1. treat it as a regular saucer
  2. use it for the “final boss” battle
  3. hide it somewhere as an easter egg

D2 log 039 – Collision shapes, pt.2

My custom shape editor has been a great tool for making Box2D collision meshes. Except I never used it. It was WAY too much work. I just kept putting it off, telling myself that the default boxes would be fine “for now”.

So I ditched it (all 400 lines of it) and decided to use some more Blender scripting to simplify my workflow.

I extended my export script to look for a mesh named “Collision” attached to each object. If found, it reads its vertex coordinates (x,y) and writes them into a file.

Took a while to match the camera transform correctly but now I can edit all the shapes directly in Blender!

Collision shape in Blender Collision shape in game

D2 log 037 – Windows

Devastro 2 now runs on Windows.

There were many issues I had to deal with, compared with Mac and Linux. Clang, CMake, Visual Studio, MinGW, the linker… It seems that a project using C++17, OpenGL and SDL is not exactly on the “happy path” for Windows development in 2020. But what is, anyway?

The game is up and running now. IMGUI is disabled because of some OpenGL compatibility problems. Not sure if this is worth fixing – all the editing is done on a Mac.

Would Sokol help? Will try for next project.