Games    Guitar (Soundcloud)


Website summary:

This site illustrates some of the games I have developed as part of my part-time hobby coding games.

Fake Doom


A guy in a group mentioned about people porting Doom to every platform imaginable. He asked if it would be possible on a BBC B. (or at least a clone).
I thought it was, but decided to investigate. I think the major issue is the fill rate. Because of this, I prepared a method to turn 2d information into a bar chart. This should be easy to display in mode 7 using teletext characters. If it is an issue to refresh the entire screen, we can just update the character differences.
These are the preliminary test versions written in Java. The orthographic projection is quite easy, but it means that things dont get larger when you get closer.
The perspective view isnt really a perspective calculation. It figures what points are in different segments using the 2d gradients, and then interpolates the Z distances between these and uses that distance to decide how tall the walls aren't.

Fake Doom Ortho
Orthographic (WASD): Java JAR (10kb)
Fake Doom Perspective
Fake Perspective (WASD): Java JAR (11kb)

Magnetar v2


I decided to recreate Magnetar in Javascript using Phaser.js and Mighty Editor. The technology had shown that it was good with object allocation and fast development.
The ship gets more powerful the more components you pick up. These are all preassigned on an object layer, and are activated in order when you pick up a power up. This is a bit like a tileset, but for technical reasons, it wont be exactly a tileset.
I also tried some pixel tileart for the ships, as that should grow more naturally than the SVG renders I made before.

New Magnetar
Link: Javascript link
Mouse click to move. Space to fire.
This is the 4px tilesheet.
Ship one: Raider.
Ship two: Cancer
I thought it might be cool to have all the ships having star sign names.

Car Survival Horror 3000! (LD31) JAM


For LD31, the theme was Game on one screen. I came up with the idea of a bug on a windshield. Since I do not have the finances to buy a certificate to sign Java Applets, I am moving away from Java.
I decided to try code something with Javascript namely using Phaser.js and Mighty Editor.
I managed to get the game finished within the 48 hour time limit for once, but perfectionism kicked in and I fixed some bugs to make it more entertaining. The confusion between versions meant that people did not rate it as well as possible, but I got some excellent reviews and it kept my mum entertained for a few minutes.

Car Survival Horror
If you would like to give it a go, the REAL version is Here

If you are curious, there are also two developmental versions. Version 1 Version 2

Lotus (LD30) JAM


For LD30, the theme was Connected Worlds. I was not really going to develop a game, but I decided to try and illustrate the interconnected faces of a rubiks cube in 2 dimensions. It turned out that three interconnected rings could be used for this. The shapes are all created with Java Area overlapping circles.
As the rubik's cube simulation was very difficult, I decided to create a puzzle game where you had to get the pieces into their correct locations. Each circle links to a different puzzle, and the rose links to the 2x2 when unlocked. The game was supposed to be mystical and the rotational symmetry gave it the name lotus (I dont know what a lotus looks like, do I?)
I found it very difficult to create puzzles, let alone solve them so I ended up shipping a version with 2 puzzles which I could not test. Luckily someone completed them and got to the 2x2 cube, at which point they probably exploded.
I developed the game within 48 hours, just not the correct 48 hours!

This is Lotus:
Jar download (21kb)
Rubiks Cube
This is an accurate simulation of a 2x2 rubiks cube, but is not endorsed by the Rubiks Brand company.
Jar download (11kb)

Bunny Run (LD29) DNF


For LD29, the theme was Beneath the Surface. I was going to develop an obstacle avoidance game on my Android tablet using an IDE and image editor, as well as an Android sound editor. I had little time to develop and transparent images were not possible in the editor I had installed (no png output).
Still, I refactored a lot of base code, added a basic animation, and had blades of grass come in from the top of the screen and scale larger as they reach the bottom.

Bunny Run
APK not available.

Infected (LD28) DNF


For LD28, the theme was you only get one. I came up with the idea that it only took one person to start a pandemic.
I was going to make it so that you played as a virus trying to infect as many people as possible. I lost my code (and time) as I was visiting family so had to start again.

I downloaded a tilepack and used rectangle subdivision to create random maps and then paint the tiles at the correct locations. The effect was reminiscent of victorian mills.
Jar download (154kb)
New Guy
This little guy was going to be one of the people. He is animated to give an idea of where he is going to make figuring out the paths easier.
Jar download (12kb)

Bauble Dash


I recruited my sister to help me develop a game. She had the idea of cats throwing baubles out of a tree, and her children trying to catch them.
She drew me a picture of what it looked like, and I used Gimp to extract the kids, colorised them, and made the physics work.
It is -1 point for being hit on the head with a bauble.

Bauble Dash
Keys are A,S for player 1 and K,L for player 2. Jar download (277kb)

Feng Shooey (LD26) JAM


For LD26, the theme was Minimalism. I had a few ideas, but ended up coming up with an idea about cleaning up a zen garden after cats and dogs had messsed it up.
This turned into a game where you herd cats. It isn't really that fun, though I managed to implement animation in the 72 hour Jam period, and managed to port it to Android about two weeks later.
The best reaction I received was "MY GOD, THE CATS ARE SHITTING EVERYWHERE!".
Since I had it on my phone, I ended up showing people at work it. This was entertaining, but my boss raised it in an interview, and I had my interviewer playing a game where cats were virtually pooping on the screen for about five minutes.

Feng Shooey

Java 4K: Starkiller


When I was developing Here be Dragn, I kept being drawn to the Java Gaming forum when I googled issues. I've been checking it for a while and I discovered the 4k Java competition tucked away. I'm very new to the concept, as shown by the fact I started trying to acheive that class limit uncompressed. I havent tried the compression tools on it yet, though I think it should sneak just under 4k.

I'm quite proud of the sneaky things I've done to make it work:

If you can use Java Applets: Java Applet Link

Ludum Dare (LD25) JAM ENTRY


I joined the Ludum Dare contest about 12 hours in. Given the theme of "You are the villain", I decided to create a game about playing a dragon eating people. The original idea was playing Smaug from the hobbit trying to get his jewel back in a map shooter, but it just ended up being a bit of a centipede clone in the end. As I had not got any sounds or many resources, I submitted in the Game Jam, and ended up spending a few odd days here and there smoothing wrinkles out. I was quite happy in that I overcame the GC issue (I learnt how to reuse objects).

I stopped developing when i got bored with playing the game and would have liked to have got animation working, though the resouce creation process was going to be a lot of work..

Strangely, for all the work I put in afterwards, the game is very similar to the LD version. This is probably a project effect whereby the majority of the project takes a small amount of time, and the last 10% takes absolutely ages. Theres a software engineering name for that, though I've forgotten it.

Here be Dragn
The archers and swordsmen here were redone from the LD version and I added things such as dragon dies and swordsmen attack. Link (.jar)
Here be Dragn

Game design course and Gamemaker executables:


I did a course with the Open University on games design. This was useful in showing some game design concepts, and most particularly, it isnt a game without fun or a purpose!
All these games were developed with Gamemaker, which has a couple of issues (I dont like people downloading exe's, and I ended up doing most of the game logic with timers and drag and drop icons instead of sweet Java code), but is pretty good for rapid prototyping of ideas.

Catch The Clown
First project: Customise the point click game "Catch the clown". Link (.exe) The blue clown eats the green ones and lowers your score, but you can nudge the blue clowns out of the way and farm the green ones.
Hamster Dash
Second project: Make a maze exploring game. Link (.exe) I had to hack around a hamsterdance gif for the characters.. It is quite clear that I was lost with creating tilesets! There are 3 stages, I think.
Hamster Platforms
Third project: Write a game design document. I was so engrossed in the idea I went one step further and implemented it. Link (.exe) I really loved the scampering movement but was a little confused about how to create levels.
Chopper Rescue
The final project was to create a game for a charity to use to show the work they do and engage people long enough to hopefully donate. Link (.exe) I decided to create a game like Harrier attack, though it ended up looking coincidentally like choplifter.
Chopper Rescue
Mission 1 had you airlifting people out of a flooded village. The characters would move up the ladder object if they were over it, and vanish and give points when they reached the helicopter. Link (.exe)
Chopper Rescue
Mission 2 had you doing airdrops in a disaster zone. The game logic was the same, except the helicopter had a crate emitter instead of a ladder. As with the other mission, if you didn't collect enough money, you ran out of fuel and crashed. Link (.exe)

Magnetar (LD20) DNF


The theme of LD20 was "It's dangerous to go alone! Take this! I decided to interpret the theme as a spaceship picking up spare parts.
Although I had something playable by the end, it was far too difficult and it took a week to make it work as a .jar due to resources within jar.
The biggest problem with this game was probably the objects, as garbage collection kicks in every few seconds because too many objects are being created.
I used gfxr for all the sound effects (there was another 50 not included in game), and used Adobe Illustrator to make the resources.
As a toy project, I also added all of the space sounds to a midibank.
I have storyboards for various mission arcs somewhere, and I recently looked into implementing in Javascript (early 2015).

This is the day 1 prototype showing hitboxes.
If you can use Java Applets, Click here for playable version on a webpage!

Obligatory 2D Minecraft Clone


A post on Notch's blog suggested that a low-fi minecraft would be cool. I created a basic point and click program which added and removed blocks on a screen. I had an idea to add spells and make the game a sidescrolling Roguelike, but I discovered Terraria already did this!

2D Environment
The green dot was going to be an object which fell until it hit a present block.
Quadtree editor
To create a larger environment, I decided that an array would not work for my program, so I experimented with Quadtrees to grow dynamically and lessen the quantity of data, especially as most would be missing, or blocky anyway. This graphics editor splits the quad at that point, and then recurses 4 levels through the tree to that block size. A better image editor could vary the depth.

Race track editor


I used to enjoy merging features together in JMonkey. One of the Physics demos let you drive a stunt car off of ramps and through barrels.
I thought it would be cool to ride it on a lap, so I wrote a map editor which extruded road sections around the level.
The original car was a bit blocky so I updated that with a free model (I made my own, but it was like a Vauxhall Nova).
I also added a skybox and some basic effects and made it feel more arcadey. One method I used to do this was making the concrete rubber, and the tyres concrete. I think the walls were glass. This meant you could slide off the walls easily and when you flipped the car, it bounced.

Test Track
Test Track
The mountain terrain is attached to the skybox and follows the player.
Test Track
The walls are there to keep the player on the track with a light touch, but the car tends to go flying quite often.
Test Track
I added some particles to the tyres when ultra-speed was active, but it makes the car too fast!
Test Track
To make my levels, I made a track editor. The track follows the white line, and the actual track points extend perpendicular to this without intersection issues.
Test Track
Before interpolation, just draw a road.
Test Track
This map is smoothed with Catmull-Rom interpolation.
Test Track
Maximum smoothing. This added more road sections which added a demand on the physics engine.

Site created and updated with games and projects


Developing SVG GL Shader


I was obsessed for a few months with the concept of a SVG shader. I could use SVG to give pixel-crisp edges to textures, and also handle as much detail as I wanted.
I was also thinking that svg would make repeating patterns a lot easier, such as specular and bump textures, which are usually less detailed than the associated textures.
If I had got the transformation from Bezier to circle, I was then going to compile SVG into a sequence of operations and import these into GLSL through texture data.
The difference between the approximate circle transformation and the Bezier wasn't far away, I was aware that the difference would show if any SVG files were imported, such as that famous Tiger.

SVG Textures
After managing triangles, rectanges, circles and ellipses, I tried to create Bezier curves by distorting a shallow semi-circle with affine transformations. This was imperfect. The red dotted line shows where the blue ellipse should be.
SVG Textures
I thought it would make for especially flawless and vivid textures, with intricate level of detail. Especially for bumpmaps and specularity.
SVG Textures
This shows a better attempt at building SVG functionality with GL Shaders. The pixel shading means that fading textures with transparency and shape clips would be easy to do.

Other JMonkey experiments


I used to be on the JMonkey forums quite a lot at this point. I used to love JMonkey because it was very easy to make something pretty, but I never grasped how to turn that into a real game, as the tests were all different and there were a couple of contrasting versions.

First foray into the 3D Java JMonkey API. Got lost making white billboards shift slightly in position so they appeared to be twinkling stars.
Second foray into the 3D Java JMonkey API. Got lost making the clouds pretty. The effect is created by a semi-transparent terrain painted in white at different heights. This is merged with a bloom shader which makes it brighter depending on where the sun is.
Week Game
I decided to make a game in a week and went for a completely ambitious design which incorporated elements from tests of the physics and graphics system from JMonkey. The movement is tank movement, and the staff fires where pointed. The model was a retextured and armed version of Psionic's 'armless zombie model. There is a video here.
Contours to map
Trying to use the Catmull Rom Spline to recreate 3d terrain from a contour. Didn't work out as I wanted it to.
Ball hunt
I adapted two tests so I could both run around on the terrain without physics and shoot red floating balls. They respawn behind the player and keep going.
I had a go at CVG for meshes but it was difficult. I had the idea to subdivide triangles on the edge of another object, and remove the internal triangles, and then polish the result, but the bounds.contains method did not work.
I got intrigued on how to make a lightning effect based on a question in the forum. I ended up creating points in space and moving them randomly between one source and the other, and a program found a path through these points and displayed the result, with a brighter line for segments closer to the center of the axis.
Circle program
Trying to get the overlapped area of two chords on a circle in a program.

Copyright Stephen Davison 2011. Design by mark_olson 2002 Hybrid Theory