Software

This page discuses a selection of research software and tools developed.


Interactive GPU active contours

This software (GitHub link) is an OpenCL implementation of the paper "Interactive GPU active contours for segmenting inhomogeneous objects". Please cite the paper if you find it useful. https://link.springer.com/article/10.1007/s11554-017-0740-1

Hotkeys






Automatic Billboard Imposters (ABI)

ABI or Automatic Billboard Imposters is an asset for Unity3D which allows the batched drawing of large amounts of complex geometry.

This is achieved by replacing distant objects with photographs, which are generated for each object at three orthogonal views (front, right, and top). This means that there are significantly fewer triangles and texture memory used in the final scene.

Stippling shaders are also employed to smoothly transition between model and photograph, when the projected model size is less than some threshold. These shaders blend with a subtle low-frequency Gaussian bubbling effect.

Hardware batching ensures that the number of draw calls remains low, which is especially useful when thousands of objects are instanced. The package can be downloaded here.


Keym

I find using a mouse painful, so made this responsive widget to act as a mouse alternative/replacement using the keyboard. The widget has two modes, normal "keys" mode and "mouse" mode. When in mouse mode, all typical keyboard inputs are gobbled up and replaced with a powerful interface for manipulating the "mouse" at different speeds.

Requirements

  1. Awesome WM
  2. xdotool (not required but installing it gives access to the majority of features)

Install Instructions

  1. clone next to awesome/rc.lua (there should be a folder called "keym" with widget.lua inside next to rc.lua)
  2. local keym = require("keym/widget") -- put somewhere near top of awesome rc.lua
  3. right_layout:add(keym) -- put in your wibox to add visual mode button to rc.lua
  4. awful.key({ }, "`", function () keym.Toggle() end), -- put somewhere in globalKeys to bind it to rc.lua
  5. script requires "xdotool" installed for the majority of features: mouse clicks, scrolls etc

Usage Instructions

  1. Press the backtick key ` to toggle keym mode ON/OFF.
  2. keym is intended to be flexible to one-handed, or two-handed usage
  3. typical two-handed use is: WASD=move, J=click, K=right-click RF=scroll, ;speed1, '=speed2, h=slow
  4. left-handed only use is: WASD=move, Q=click, E=right-click, RF=scroll, \=speed1, z=speed2
  5. right-handed only use is limited: Arrows=move, Return=click, /=speed1
  6. why no vim-mode bindings? moving along diagnols causes finger-collisions, but do otherwise remap

Please let me know if you find this useful, or if you find any bugs/have suggestions. Sources for this software can be downloaded here. Note: after over a year of using this, I ended up switching to a hardware alternative with a Planck keyboard with custom firmware written in C.

MIT © Chris G. Willcocks


Godot Pixel Painter

This is a small pixel-art painter addon for use with the Godot engine. This actually makes it pretty powerful even though its just a sprite editor, e.g. you can work with Godots powerful cutout pipeline to edit bone-based animations directly, something you can't even do with Spine.

Install

Requires latest version of godot. Copy addons folder and all its contents to your project, restart Godot, then activate plugin from editor settings.

Features & Usage

To use, simply select a sprite from editor and you're good to go.

Sources for this software can be downloaded here. MIT © Chris G. Willcocks


Games

Game development has been a hobby of mine since a very young age. I like that it encompases music composition and performance, creative writing, as well as many areas of computer science (physics, networking, audio design, modelling, graphics).

Firstly, here are just some general opinions that i've picked up over the years. They will probably become outdated quickly (maybe they already are).

  1. Make games not engines!
    • If you want to make engines, make games!
  2. Start with Godot (small 2D/3D), Unity3D (big 3D games), or Impact (for lightweight 2D HTML5)
    • You will learn a lot more about gamedev than you can ever be taught in a module or read online by actually following tutorials & making games with these first.
    • I recommend Godot as its open source under the MIT license and personally, having made 2D and 3D games with both Godot and Unity3D, think it is much better designed.
    • Also, if you want to work in the industry, make a demo with Unreal Engine.
  3. Don't worry about what language you use.
    • "Oh its not in C++", "Oh its not in Python"
    • Spend 2 days learning whatever it is the game engine or tool you want uses and respect its decisions and force yourself to love its syntax.
    • Either decide that all languages are great and worth learning, or decide that all languages suck and you've got no choice. Just don't decide that language X is your true love.
  4. Make your games with cubes or squares first.
    • Get the core mechanic and game states working with squares or cubes.
    • For new game ideas, set your scope minimal so that you can finish programming core mechanic and states within 2-days.

Art & Music

Below are some tools that I find useful.


Ruinstorm

Ruinstorm is a long-term hobby that i've been developing on-and-off with Sven over the years. The game has changed massively in scope since its initial concept, but I love chipping away at it every now and then. Will probably still be working on it when i'm an old man...

Quick Summary: A physics-based ARPG platformer where you can chop up everything. Want that piece of armour? Cut it off the dudes body and pick it up. Need to escape the arena? Pile up the bodies and you can climb over them to get out.

The protagonist encounters increasingly unlikely magical creatures as he ventures onwards looking for answers to his demise. Ruinstorm is the name of the dark and feared land east of the old kingdom.

Responsive retro-style platforming, combined with physically based animation, modular gear, and deterministic AI. Also features an original dark and gritty chiptune score composed with MilkyTracker.

Dev Videos

Early version chopping stuff up
AI pathfinding
Inventory


Jungle Venture

Jungle Venture is a game that I developed for EMVigR. The game is intended to be played by stroke patients, who control it through simple motion gestures which are later reviewed by a therapist. The game is an infinite side-scroller with swinging, swimming, jumping, rope physics, throwing, and volcanoes.

Screenshots

Title Screen:

Physically-based rope swinging:

Swimming:

Jumping:

Throwing stones at rhinos:

Volcanoes:


Rarrgh!

Rarrgh! was one of my first 3D games. Play in an online world with caveman and procedural animation. While it only ever existed in alpha stage, it was fun to develop and play during my undergraduate.

Screenshots


Starship Forces

Starship forces was a 3D game I developed in Unity3D.

The game had a number of interesting features including a multiplayer lobby (staging area), my implementation of the Transvoxel Algorithm which was used to render large planets at multiple levels of detail. This was integrated to the Unity3D scene hierarchy and the processing was multi-threaded.

Starship forces used many custom shaders, including triplanar texutre mapping and procedural noise. It also used a custom imposter system I developed called ABI, which could render thousands of objects (e.g. trees and ground units) in Unity3D efficiently. I went on to sell ABI.

The main problem with starship forces was that I spent too long on unique tech and suffered quick burnout. The game itself was too dependent on 3rd party assets and didn't have any particular core "fun" mechanic. I entered Ludum Dare which shifted my focus to completing smaller more managable projects.


Ludum Dare Competitions

All of the remaining games were made for ludum dare, a game competition where you have to finish a game from scratch for a given theme in 48 hours or less.

Ludum Lander

Physics based shooting of weird mechanical dust monsters that invade your small island. The Ludum Dare theme was "A Small World".

Starship Physics

A physics-based game where you shoot ships, pick up their pixels and build/upgrade your ship with the resources. Different color pixels do different things, such as laser, hull, and shield. The stronger your ship, the stronger the enemies become. The Ludum Dare theme was "10 seconds" incoporated into the building mechanic.

You Only Get One Cube

A game made in 5 hours from scratch, where you have to avoid cubes flying towards you. When your red cube hits another it splits into pieces recursively until you control a swarm of mini cubes. The cubes eventually get so small they disappear and the goal is to last as long as possible. The Ludum Dare theme was "You Only Get One" as you start out with just one big red cube.

Come Home

An emo game about a girl who squandered her life, the theme was "beneath the surface".


[return to top]