Fork me on GitHub!
Alex Baines

Projects RSS Feed

CGIQuotes — C WebApp for storing & viewing quotes

This is a C program using CGI to serve a quote database website. It was written to replace the gist storage that was previously being used by insobot and provide a nicer viewing experience.

Quotes are stored in flat files with a simple format, which can be edited via authenticated POST requests. CGIQuotes then makes each file, and each line within, available via http in several different formats: raw, html, csv and json to facilitate easy integration with other people’s projects.

MiniGBS — GameBoy chiptune player

This is an ncurses music player for .gbs chiptune files. The UI shows the realtime values of the GameBoy’s audio registers, highlighting values as they change; The pitch and octave of the wave & square channels are also shown in more traditional form, using the letters A though G, and numbers 0-9.

MiniGBS screenshot

It has fairly intuitive controls for volume, toggling channels, changing the tempo, etc, and sounds pretty accurate for most of the tracks that I’ve tested. It also works with “Prehistorik Man”, which uses some tricks that other players don’t properly emulate, though it won’t currently work with a few tracks that expect to do their own cycle-based timing.

With the name MiniGBS, it was designed to have a pretty small code footprint; The bulk of it is ~1.5k lines spread between 2 c files. Currently it doesn’t come bundled with any songs, so you’ll have to find them yourself, but I have started working on a GB sound driver and hope to make some original .gbs music available in the future!

Insobot - Modular C99 IRC bot

Insobot is an IRC bot I started creating a while back, originally insprired by other markov chain bots such as ChronalDragon’s (as far as I know unreleased) chronal_robot.

After writing the original simple version in C++, I was interested in trying a project in pure C, and decided to expand Insobot into a modular structure and rewrite the markov chain functionality as one module for the new architecture.

Today Insobot has many more modules, for creating alias/macro commands, retrieving info from the API, expanding youtube/twitter links, storing quotes in a gist on github, as well as letting people know the schedule for Handmade Hero.

The main Handmade Hero community bot, hmd_bot, is based on insobot’s code with a few additional modules added, and some removed.

The markov chain module still remains the most noteworthy part of insobot though, leading to quite a few humourous moments, some of which I pointed out in this update.

Basic SDL/OpenGL Game Engine

This is a game engine that I’ve been creating recently using SDL2 and modern OpenGL 3+ techniques.
(I’m also trying to keep it compatible with OpenGL 2.1 as long as you have the right extensions.)

I know everyone seems to say that you shouldn’t make your own engine, but I find making the engines and systems just as fun, if not more so, than actually making the games that they’re made for. I’m also doing it to learn about new-school OpenGL and the various things that go into making a game from scratch.

Some of its current features:

  • Configuration variables + functions.
  • In-game console / command-line interface to access them.
  • Fully rebindable controls (including all the CLI text-input related keys).
  • Unicode text handling / rendering (Not complete, combining characters will break it).
  • Can reload all OpenGL state at any time.
  • Uses VBOs, VAOs and ARB_vertex_attrib_binding for vertex specification.
  • Custom macro-based automatic GL extension loading.

Maybe one day I’ll actually make a game with it…

LibNRG - Networking for Real-time Games

LibNRG (Networking for Real-time Games) is a C++ library that I first started working on for my third-year project at university. It aims to provide an easy-to-use interface built on UDP sockets for use in fast-paced multi-player games.

The initial version that I finished at uni worked pretty well, but there was still lots of room for improvement, so I’ve continued to work on it occasionally since then.

The current version is a bit better, with more useful features like the Message RPC mechanism, but the library isn’t finished and I’m not sure it ever will be.

It’s open source under the zlib license though, so you can take a look / use it / make changes or improvements as you see fit. Patches, pull requests and suggestions are welcome.

I’ve also made the specification and final report that I produced at uni available below.

Messing with LMMS

I was messing around with Linux Multimedia Studio ages ago and made a remix of the Tetris theme. I found that I still had the project file lying around, so I’ve cleaned it up a bit and put it on soundcloud.


For anyone interested, I made this site using Jekyll, which is a static site generation tool, mainly intended for blogs. With a bit of hackery I’ve made it work for generating this set of posts in the “other” section, as well as the items in the games section from a set of markdown files.

Jekyll Logo

The site is also open source, you can find the pre-statically-generated version on github right here. The site is also currently hosted from github’s servers using their pages system that incorporates jekyll, so that the site is automatically regenerated whenever I make a commit - isn’t that nice!

Bomberman AI Bot

This is a really basic multi-player bomberman AI bot that I wrote for a competition held by the University of Warwick Computing Society (UWCS).

It’s written in Java and communicates with a server using the protocol documented in the UWCS github repo linked above.

It won the competition by quite a margin, but only because the other competitors never dropped any bombs and only did random walks. (Zed0’s bot didn’t even go that far iirc :p).