Assorted Downloads

Programming

Below are some of my software creations that are available for download. All programs are distributed as freeware, for home or personal use only, and come with no guarantees.

Steering behaviours used for group formations

Group Following screenshot

Yet another graphically-boring but behaviourally-interesting application. This shows how steering behaviours can be implemented to not only allow characters to navigate around a map, but also to work in tandem with others to create formations such as squares, rows, and columns. To operate, left-click with the mouse in the window to move the red vehicle from place to place. Right-click with the mouse to cycle through the various formations that the green vehicles are to adopt.

This sort of technology would work very well in real-time strategy games where soldiers might have to operate in one of several formations. It would also perform well in roleplaying games (such as Baldur's Gate) where the player often wishes several characters to travel to a given location in a rough formation.

This was developed using the usual Visual C++/STLPort/SDL combination.

Click here to download (293Kb).


Desert Driver

Desert Driver Screenshot

This is just a simple game where you drive a red car through treacherous terrain, collecting jewels to attain a high score. It uses the SDL library for sound, video, and input, object orientation and other C++ features such as the STL and iostreams, random terrain generation for theoretically infinite play, and a simple tile-based rendering engine. Escape quits the game.

Click here to download (1712KB).


Procedural RPG Character Generator

Character Generator screenshot

This simple program shows how procedural generation techniques can provide a lot of content at a cheap cost, both in terms of development time and machine resources. This program has over 4 billion characters which are deterministically created by a pseudo-random number generator, so that each character can be created starting from only the seed number. This method could be used to generate computer-controlled characters in a massive game world where storing individual date on each character would be impractical due to the amount of storage required.

This program is far from finished but serves as a useful proof of concept. Further development on this may follow. This was developed using Visual C++ and MFC.

Click here to download (217Kb).


GA Bombs

GeneticBombs screenshot

This is an example of using a genetic algorithm to solve an otherwise complex problem. It represents the thought processes that a computer player might go through in a strategy when formulating optimal places to attack, or where to drop bombs on a battlefield. Aiming to hit as many red targets as possible, while being heavily penalised for every green target (friendly unit, citizen, etc) caught in the radius, the computer has 4 bombs to place as it chooses. On a 500x500 playing field this gives 3.9x1021 possible combinations, making an exhaustive search impractical. Instead the genetic algorithm achieves a good result after investigating only 2000 combinations. (100 generations of 20 potential solutions each time.)

The animation shows the position of bombs in the prospective solutions (the brightest circles signifying the current best) and the rising green bar to the right of the diagram shows the increasing quality of this choice. The system is randomly reset every 100 'generations' to show how it adapts to totally different data. Press a key to exit.

Similar technology could be used in other games, such as in choosing optimal city placement in Civilization by looking at surrounding resources, finding poorly protected areas of a city in a wargame, and so on.

This program uses C++ and SDL for the graphics.

Click here to download (356Kb).


Maze Game

Maze game screenshot

This isn't really a full game yet, and was originally created as a testbed for various pathfinding algorithms, but it can still provide some enjoyment! Notable features include the use of the A Star algorithm for the ghosts' player-tracking (replaced by a general wandering algorithm when you have the power-up), and the beginnings of an integrated map editor.

The AI uses a hierarchical system which made it easy to implement differing ghost tracking behaviours. In particular, the ghosts work together on a basic level to attempt to encircle you. This program uses SDL and general C++ techniques. Move the player using the numeric keypad, and Escape to quit.

Click here to download (923KB).


Random Maze Generator

Random maze generator screenshot

This program shows how random mazes can be generated from a few basic values, dictating how random the mazes are to be, how sparse it is, and how many dead-ends should be allowed to exist.

The main feature here is that the layouts are generated procedurally and require no prior storage, making the approach a good choice on platforms where such storage is limited.

Requires OpenGL.

Click here to download (515Kb).


Basic 3D Terrain Scene

3D Terrain Screenshot

This is the result of my part-time experiments with Direct3D 7 in C++, featuring a skybox, standard W/A/S/D movement, and 'freelook' with the mouse. 3D graphics is not really my area of interest but I intend to learn more as I get the opportunity.

Requires DirectX 7 or above.

Click here to download (1,499KB).


Development Tracker

DevTracker screenshot

I wrote this tool in Borland C++ Builder 4 to help me keep track of all the bugs, issues, and desired features I came across during the development of my MUD. It allows these comments to be assigned a category and priority and stored along with the time of creation and details about the issue, plus a status field to track whether an issue is open, closed, assigned, etc.

Click here to download (269Kb).


UIN Extractor (standalone tool for Miranda, an instant messaging program)

Back in the days when Miranda was less popular and the database format was in a bit of a state of flux, there was a tendency for said database to get corrupted, meaning the loss of all the user numbers stored within it. Unfortunately, no amount of persuasion could make Miranda's author move to a more open database format, so my response was to write this little console mode program in C++ that would scan a corrupted Miranda database and pull the ICQ user numbers out of it, so that you could easily add them into a fresh database. Obviously this program is less important since Miranda settled down, but it's still a popular download (over 3600 as of April 2003).

Click here to download (44kb), or here to check out Miranda Instant Messenger.


Metronome

I write a lot of music, and it helps to know what speed it's at so that I can add drum parts later (for example). So I wrote this metronome program where you click repeatedly on a button and it tells you how quickly you're doing it.

Requires mfc42.dll and msvcrt.dll. Most versions of Windows will have these already, I think.

Click here to download (12kb).


Programming Articles

Only one article so far, although the feedback has been very positive so there may be more to come.

Organizing Code Files In C and C++ - hosted by GameDev.net. This article explains to novice C and C++ programmers why to split code up into several files rather than one big one, some tips on how to do it, and on how to cope with the initial problems this can create. Seems to have been well received, and is even on one Australian lecturer's recommended reading list.

Music

Soundtrack-style

Classic1.mp3 (1,441KB) - this is an orchestral-style soundtrack for something like an adventure or roleplaying game. It still needs some work but it captures the desired mood.

Medieval.mp3 (603KB) - originally written for a medieval scenario (although the instrumentation is distinctly post-medieval), and is just a short, sad theme tune.

Angels.mp3 (1,122KB) - another sad-sounding theme tune... perhaps suitable for an important cut scene in an RPG or whatever.

More to come in the future.

Questions? Comments?

Contact me at web@kylotan.eidosnet.co.uk .

Site tested in Internet Explorer 5.0, Opera 6, and Mozilla Firefox.

Valid XHTML 1.0! Valid CSS!

Visitors since 10th October 2004:
8038