Red head copy

I was practicing more with my paper sketching and then Gimp colouring technique. I’ve made several recently of which none have been anywhere near as good as the armour post I made. But the best of them is easily this one below.

It’s (heavily) based on an avatar I spotted by Core Xii on the TIGSource forums, and drawing people is something I really need to improve.

Creation

Like before I had a colour layer at the bottom, then shading and then an outline. However I found the hair looked really dirty with pencil shading.

So I also went over the shading in Gimp with a separate colour, which I personally feel vastly improved it. I have a feeling the dirty look worked on the armour because it’s very believable that it’s all windswept and dusty. Not so believable for girls hair.

Improvements

Finally here is a sped up YouTube video of the whole process.

You might notice the resulting image is slightly different. The original hair was bright red, didn’t include the coloured shading or the background, skin was too pink (it made her look sunburnt) and was not cropped. However the video is about 90% of the work.

Must have free game dev software

There is far more to building a game then just writing code, especially for a good game. So here are the apps I just can’t live without and would highly recommend for anyone else thinking of writing a game. Best of all it’s all free (so that dodgy copy of Photoshop you’ve got installed doesn’t count).

Some of these are similar, but just like how I own both a large and a small screwdriver it’s good to have multiple pieces of software for achieving tasks. Sometimes you want something heavy (to do the job right), sometimes you want something light (to do the job fast). Here is my selection.

Audio

Audacity

I’ve used plenty of audio file converters that do a really bad job at converting audio. Audacity is the only one that I’ve never been disappointed with, and that is what I use this for; converting .MP3s to much smaller .OGGs to save on file size.

sfxr

Tiny simple app for quickly generating cheap and cheerful 8-bit like sound effects. Just awesome to be able to make some random power up sounds within a few minutes. I’ve used it recently for some pickup and death sounds in Space Snake Galaxies (which is nearing completion). Best of all I love it’s funky interface:

Art

Paint.NET

My favourite of all the apps on this list, a really nice simple graphics editor. There are plenty which are more powerful, but every part of Paint.NET is very, very, very nicely implemented. I find myself doing lots of resizing, cropping and conversions between image types and this app beats all others (I’d argue even the big guy Photoshop) at those jobs. Not because it does more, but because what it does do it does to an excellent standard.

I used it to paste, crop and save all of the screenshots dotted around this page, and all of the screenshots on each of my games pages. It’s built for those quick-edit jobs.

Gimp

It is no Photoshop, but it is good. I’m also not suggesting this as an alternative to Paint.NET, I’m recommending it to be used alongside it. It’s more advanced and more powerful, but also more fiddly, so end up only using this for any proper artwork.

Recently I’ve started going through the GTuts gimp tutorials. Above is the result of following their planet tutorial, and only took about an hour.

ColorPic

One of the must have tools on my list, it can grab colours from anything open on your desktop. It was dead useful whilst implementing the StudioFortress site for getting the hex values of the various colours in my designs. It’s just a tiny dead useful app.

Blender

I’ve only recently started using this, but one alternative to drawing 2D sprites is to render them from a 3D object. This is very common in many triple A 2D titles such as Age of Empires 2 (and probably AoE 1 too). This is something I’d love to do myself in a future project when I get more experience using it, so it’s currently more of a wannabe tool then one I actually use.


One thing to mention are the excellent Blender tutorials on the official site, especially the videos. Following them saved me hours of learning.

Programming

Ok, so I do have some programming tools here. But they aren’t for coding the game itself. These are programming tools I use to help me program and build games. Both are terminals…

Powershell

Microsoft’s answer to BASH, but fully object-oriented and with access to .NET. Comes with Windows 7, but you can get it for other Windows OSs too. Essentially just a good terminal, and a damn useful calculator. I often find myself using this whilst drawing with vector image apps in order to work out some of the precise locations to place things.

Ruby/IRB

When I want to use Powershell for something more than just one-line terminal commands, I tend to write it in Ruby. Especially if it involves lots of strings and file IO like converting text files from one format to another. IRB stands for ‘Interactive Ruby’ and allows you to write and run Ruby code as you type (although similar exists for Python, Java and many other languages). Dead handy for working out formulas and the values you should use with them, as you can test and alter your ideas as you type.

After Completion

So your massively multiplayer RTS meets FPS game with RPG elements is finally complete. What next? There are some tools I use for helping with getting the final content done.

7-Zip

.jar archives are just zip files with some metadata inside. Sometimes you need to edit the content of these, just want to confirm what is inside or need to extract the classes for dumping into a classpath. Any zip decompression application will work, but I prefer 7-zip because unlike WinRAR it’s free for commercial use. For an indie developer this means you can save money (or avoid using software illegally)

JSmooth

If you program in Java (like me) and want to distribute desktop apps on Windows (like me) then this is the app you need. It won’t compile your Java app to native code (a JVM is still required on the users machine) but it will make it look like a .exe, just like a regular native Windows app.

NSIS

Installers might be annoying, and might also be unwanted, but if used well they make your app or game look more professional and makes a lot of novice PC users feel more comfortable (that something is handling the whole installation process for you). Nullsoft Scriptable Install System is essentially the best free creator of install wizards. It does the job and it does it well.

A quick look at Wikipedia will also reveal a long list of professional apps using NSIS; including the Intel C compilers, DivX, FileZilla, Winamp, FireFox and more! That’s a very impressive client list to have for an open source project which alone is a sign of quality.

FileZilla

Some people reading this might recommend FireBug FireFTP instead and rave about how awesome it is. I’m sure they are right, but when I have a slow and dodgy connection I find FireBug unusable. FileZilla is just as good but is also better at handling re-connecting and that’s why I use it. The file transfer and folder windows are perfect for me, end of.

Is that it?

Well no. I also use some commercial software. I don’t think these are as necessary as those above, but I’ll mention them.

Expression Design 2

Another art package, but this is specifically for vector graphics. I was given a free copy by Microsoft and have loved it since. Most of the graphics in Planetoids, the GUI in Pip the Pea, the logo for ColdWar Chaos, and all of the graphics for Twilight and Circles were all made using this.

Microsoft Office

… or more particularly I use PowerPoint for building quick mock-ups and specifications of game ideas and then detail them further in a Word document. This allows me to get the ideas down quickly, and then show them to other game developers and programmers I know to get their opinion. Getting the game design right before you start can save a lot of hard work later down the road.

Lately I’ve also spent a lot of time documenting potential projects I’d like to work on in the future. The idea is to help gauge a general direction of development that I could take over the coming year rather than darting from one random project to the next. For example I have some game tools thought up which would be very useful for some separate game ideas I’ve had. Documenting this allows you to regain your thoughts when you finally get around to working on those projects.

Look at mah Armour

For a future game I really want to use a hand drawn technique. So today I’ve been experimenting with colouring in an old drawing. Here are the results:

The drawing is (heavily) based on an exoskeleton armour guy from the first series of Ghost in the Shell: Stand Alone Complex. To be honest I’m not too bothered about the quality of the pencil drawing itself, this experiment was to test the process of colouring and finishing the image in GIMP. The original version (including layers) can be downloaded here.

First I drew the image on paper (many years ago) before scanning and importing it into GIMP.

The idea is that the drawing handles the outlines, details and some shading; so it was applied as a hard light. I also went around the drawing deleting the outside JPEG artefacts.

Next was to add colour, so underneath I filled new layers with block colours. A dark sandy tone is used for the armour and a very dark grey for the gun. This layer was the only one which was set to normal.

The shading in the original drawing is very sketchy; lots of white and grey lines side by side. This makes the highlights look dirty so to thicken then up I copied the drawing layer, applied a large Gaussian blur and then upped the contrast to give a bigger difference between light and dark. It was set to replace the ‘value’ of the image, which is essentially the lightness of the image.

You’ll notice the shading is still far from even; the large shadows on the legs still look sketchy. But that helps to work as a mix between the pure sketchyness of the original drawing and the large blocks of colour. Plus if it’s too uniform then it won’t look like a drawing anymore.

Finally I added a gradient overlay with the centre placed approximately around the head. This is to accentuate that area of the armour as the centre of the picture. The lines around that area of the body appear more black then those further away.

Putting those layers together gives the final image. I had also thought of texturing the colours but it looked cheap. I’m really happy with the results and plan to use this technique in the future. But I really like is how I’d managed to plan all that out.

First thinking of the effects I wanted to achieve and then picking the GIMP features needed to achieve them. In many ways just like how people approach real software development. I’ve still got a very long way to go, but I’ve definitely learnt more drawing this. Here it is again!

the guy in red

Last week I was in a book, this week I’m in an Indian newspaper!

No, it’s not about me at all. The guy in the main photos is an Indian friend of mine I met in Hong Kong who wrote sent the article. It’s about his Hong Kong experiences. Instead I am the guy in red standing next to him in front of the giant Tian Tan Buddha in the background, located at the Po Lin Monastery in Ngong Ping. It’s not about me, but at least I’m in it!

If your ever in the Hong Kong area then I highly recommend visiting the monastery. You can get there via cable car with impressive views of the Hong Kong Airport and the surrounding untouched tropical wilderness of Lantau island. Although their cable cars do occasionally crash into the surrounding mountains.

Next week, I’m on the back of an envelope!

A history of Circles

Not too long ago I uploaded my second tech demo, Circles. Very small, very simple and was built also as a tutorial for my framework.
But it’s history goes back a lot further then that.

The version on my site is built in Java but originally it was built in Ruby using OpenGL. It was something small I’d knocked up in an hour called Physics Balls and built for an easy-going weekly competition called the Wednesday Workshop over at SoCoder. You can find it here.

Overall it went down like a lead balloon. “Not much of a game” was the description given, and the consensus from most users. But that wasn’t the end!


During my time at university I’ve been very priviledged to be able to work with the Greenfoot team building example scenarios, testing and creating worksheets. The software allows you to easily build games and interactive scenarios with very little code and includes an web portal, the Greenfoot Gallery, where they can be uploaded. One of the projects I uploaded was a newer version of Physics Balls: Circles, and later it was included in a combination scenario I built: the JL235 Collection (which I thought was really cool, but people weren’t that impressed).

Last year a book was released for Greenfoot for which I was asked if I could provide my Circles scenario. So I’m in a book, WOOT! Here is the book…

and in Chapter 10 on page 157-158 is Circles!

So is that it? Of course not! For my third year project at uni I’m building a highly concurrent framework in Erlang for which I’ve also made a version for another small tutorial…

Next week, the magical Square!

isMouseDown() is bad

I’m currently trying to solve a UI issue with Space Snake Galaxies. On the universe map you can bring up highscore and level info for each galaxy where you play.


When you click outside of either they dissappear.

The issue is that there are places where you can both click outside of the highscores and on a button and so both detect that a mouse click has occurred. Why can you do this? Because I’m still using the old basic way of handling controls through simple function primitives. i.e. isMouseDown, isKeyDown, getMouseX and getMouseY. i.e.

if ( getControls().isMouseDown(Controls.LEFT_MOUSE) ) {
    // do something
}

It’s crazy that indie game programmers still recommend doing this. It’s like the GOTO of controls. Dead simple and you can build anything with it, but it’s a real mess to code anything sophisticated (like good buttons!).

In GUIs you don’t do this. When I press a key an event is dispatched to the top level component. If it cannot handle the event it will pass it on to another component (and so on and so forth). This means the GUI is passive; it’s mouse and keybaord handling code is only run when an event occurres. With the basic active code above it will make a check on every frame to see if the mouse is down or not, wasting CPU time.

But there is another difference. If an event can be handled by a component then the event is removed. That sole property is almost impossible to build using basic functions like isMouseDown. You either need to permanently alter the state of the controls (so future checks on isMouseDown return false) or tie all components together globally (have a button check if any other buttons have handled mouse controls first, and if they haven’t then it will).

I think the solution will be to build a passive event system into my framework. To allow easy event based input for buttons and panels whilst keeping direct input for guns and shooting. Because sometimes all you need is isMouseDown.

BOOOO! Oracle

Sun were giving all their products away for free and wasn’t making any money. To help out Oracle buys Sun. At first I thought this was excellent news because both companies have exceptional products, but neither have many flagship products (note flagship) that directly compete with each other. So it seems like a good mix.

This was until I received…

In short, Project Kenai is closing and taking my open source sf-library along with it. BOOOO!

So I’ve had to move the whole project across to Google Code. But it has me annoyed because Project Kenai is clearly prettier then Google Code:

However what really is quite worrying is that the JOGL project (Java OpenGL bindings) will also be closing along with Project Kenai and there are no plans to move it back to it’s old home java.net or to anywhere new (but there are some custom branches around on github). But it annoys me as yet another example of how Java, a very mature and successful language, is failing to capture the desktop market. I did a blog post a month or two ago mentioning WebGL which will allow you to do 3D in the browser, yet you’ve been able to do it for years with Java. It’s crazy it doesn’t get more support for this kind of thing from Sun,.. sorry, Oracle.

BOOOOOO!

What am I working on? SSG!

It’s been a while since I’ve added some proper content to the site, so what have I been up to? Well mainly…

It’s a full complete remake of SpaceSnake. For a while I’ve wanted to do two things for my next project. First make a complete game, not another small 1 level title, and second base it on one of my existing games. SpaceSnake is easily the most popular game on my site. It’s also the only one of my games where someone other then me has blogged about it! Making it the obvious choice.

It’ll have multiple levels placed in a large universe map that you play across. On each level there will be achievements to complete in order to unlock the later levels for building a sense of progression and development. The levels will also get consistently harder as you go through to push your snake skills to the limit.

When finished I am planning to try and get it released onto the (still quite recent) JavaStore. It might not be Steam or the Apple Store, but having a full game finished and published will give me more credability and gain experience I can use for the next title. In many ways it’s like I’m building my first game again because it needs to meet a standard at of completeness that is far higher then any other game I have built.


There is still lots to do, so I’d better get back to work!

Arts & Crafts

My brother recently asked me if I still had a copy of a video I made years ago. A small proof of concept video when I was building my own green screen (actually it was orange, that was all I could get for free). So I managed to track it down and reposted it on YouTube.

It’s also online at MySpace where amazingly this has almost 4,500 plays!

Next is something more recent. If you’ve played through ColdWar Chaos then you’d have seen the bombs that explode into different cat faces. These were all made using a video of one my cats, Moses. Here are the original images I made for each of her faces in the game:

Java, with no Java!

A few weeks ago I saw this video on channel 9 about the new hardware acceleration features being added to IE9. In reality this is nothing new, I saw news reports of Mozilla talking about adding similar to FireFox at least a year ago. But to see it in action brought home a certain reality.

One of the key selling points for me using Java for building my games is that all of the graphics are hardware accelerated, all thanks to the OpenGL bindings. There is no worry about the number of images I’m using and if they are transparent. With hardware accelerated support in the browser this advantage is just no longer true.

The need for hardware acceleration is apparent if you look at some of the current high-end HTML 5 examples. There are some great ones over at Chrome Experiments.com, my favourites being a partial port of Another World. But some others make my PC grind to a crawl. However even with HTML 5 I’d then have to write all my games in JavaScript; a language far more combersume and limiting then Java.

Java to JavaScript

So next enters GWT, the Google Web Toolkit. A library for building GUIs in JavaScript. But what’s interesting is that it’s written and compiled from Java code.

I’ve been playing around with it over the last few weeks and if you’ve got any experience using something like Swing then you’ll find it a synch to use. They have a nice page showing all of the core widgets included here, but even nicer is their mock mail app example.

The potential here is that I could write a game in Java and not have to rely on the plugin being present. But even if the graphics are hardware accelerated it’s still not the same without the OpenGL bindings. Lots of little effects and tweaks I’d like to perform for which I need them to be able to perform. The solution? WebGL!

GFX FTW!

A new standard in development (here) and already supported by FireFox, Chrome, Opera and Safari (although it seems only via experimental nightly builds on FF). This would be perfect and is what I’d love to be using. It’s just a shame that only one of those browsers has a percentage of users in the double digits, and even then nothing compared to IE. Until that changes it’s just not practical to use. That pains me.

Any JVM bugs users experience automatically get blamed on my games (that is where the user saw them occur). It’s also not as cross-platform as I once thought (although still excellent at this). I’d ultimately love to have the same environment I have right now, writing Java code that uses OpenGL, but with no actual Java backend. That would be heaven.