thomascowell.net
Home | About | Projects | Code

Projects

This section contains a select few of the programming projects that I have worked on over the years.

Mango Game Engine

A video clip of MGE and TCOZI can be viewed here.

MGE is my current main personal project and is intended to be a well rounded game platform (rather than concentrating all my effort on a single feature).

  • Written entirely in C++.
  • Embedded Python for high level game scripting.
  • Direct3D 9.0 based renderer, using D3DX FX for an extensible shading system.
    • Screen glow post process effect.
    • Billboard based particles:
      • Animation of scale, rotation, and colour over time, given an interpolation track.
      • Can be rendered by an arbitrary shader (FX file).
  • Skeletal animation using Cal3D.
  • Physics integration using the Newton Game Dynamics engine.
  • Networking, built on ENet to provide scalable and seamless client/server object and variable replication facilities.
  • Console system:
    • Allows any number of named commands and variables, accessible via the in-game console.
    • Command aliases, which allow very simple batch-like scripting.
    • Input system that binds buttons and axis events to console commands and aliases.
    • Configuration is saved as a console script on exit.
  • Widget based GUI/menuing system.
  • Sound system written using OpenAL which allows playing of WAV and OGG files.
  • Command line based tools for converting 3D models to MGE compatible meshes (optimized for both rendering and collision using NVMeshMender and Qhull).
  • Maya MEL scripts for exporting a world, including game specific meta-info (e.g. GameStartPoint).

Note: The tech demo provided here is an older build of the engine and doesn't yet contain the newer features such as networking.

See the code page for some snippets of code from MGE.


Stick Soldiers 3

I have been working as the main programmer on the third installment of the popular Stick Soldiers series. This is an internet based team project organized by Andrew Russell Studios.

SS3 is being developed in tandem with MGE, with both projects sharing quite a large amount of code (same overall architecture, utility library, game framework, networking system, etc).

The editor, 2D physics, renderer, sound system, and game specific code are being developed by the other programmers on the team.

My responsibilities include:

  • Overall code architecture and design.
  • Assigning tasks to other programmers.
  • Low level OpenGL and rendering facilities.
  • Console system, and input binding.
  • Game code framework.
  • High level networking, using a replication base system.


The Curse of Za Defami Island

This is an entry for the 2005 Four Elements competition held at GameDev.net. The theme was "Pirates, Zombies, Robots, and Ninjas", and you had to pick at least two to implement into a game. A friend and I chose Pirates and Zombies :).

The artwork, videos, music and sound were created by Siddha Andrews.

  • Implemented using Mango Game Engine (had to reduce render quality to fit contest hardware requirements, hence the lightmaps).
  • Game specific code was written entirely in Python.
  • Created a simple AI, using Dijkstra's algorithm for path finding via waypoints. Unfortunately the level wasn't designed to show this off very well :(.
  • Made custom MEL scripts for baking lightmaps, exporting the level into the correct format, with game specific information such as player start point and AI nodes.
  • Packaged into an NSIS based installer.

Note: The sound system in this build of MGE was poorly written, so some sounds may not get played properlly or at all (it just happend to work on my dev system) :(. I may some day get around to applying my new sound code to the old codebase behind this game.


Mango Modeller

Precursor to MGE by name only, this is my attempt at creating a 3D modelling program. It is by no means complete, but has the basic building blocks of a polygon modeller.

  • Made in C++, with the user interface created in pure Win32.
  • Supports four simultaneous viewports, rendered in OpenGL.
  • Custom made menu system, which allows stackable, circular oriented context menus.
  • DLL based plugin system. Commands, tools, manipulators, and scene objects can all be implemented as a plugin.
  • Navigation by Alt+Mouse Button combinations, and other hotkeys (or menu equivalents).
  • Import/export file filters (comes with OBJ and 3DS plugins).
  • Cube, sphere, cylinder, torus, cone, plane and disc primitive types.
  • Smart selection list manipulation (point select/marquee select).
  • Maya style manipulators (translate, scale, rotate).
  • Ability to modify at the object level, or component level (vertices, edges, or faces).
  • Polygon modelling tools:
    • Draw polygon tool.
    • Merge vertices.
    • Detach polygons.
    • Extrude polygon.
    • Delete polygon.
    • Split polygon.
    • Triangulate.
  • Dynamic object attribute window.
  • Command based undo/redo system.


Mouse Clipper

I made this little utility after getting frustrated by games that do not handle multiple monitors properly (i.e. the mouse goes off the side of the game window onto the other screen so when you click the game dies).

So, instead of giving up, or following the suggestions to "just turn off ur second monitorz whiel playng lol!", I have made a little app that will detect when the game window has focus and clip the cursor to its client area for you :).

Currently it supports Generals and Generals Zero Hour...and notepad (for testing). You can easily add support for new games - you just need to know the game window's class name and title (a utility is provided for finding this information).

This is coded in C++ using the raw Windows platform SDK (i.e. Win32), using system hooks to intercept the messages sent to the game window.

See the included readme file for details.


CClient

This is a custom written client for a MUSH that I frequent. It was written in C++ using pure Win32, with some custom controls that I wrote (such as the splitter).

Features include:

  • Flexible event based plugin system (loaded from DLL files).
  • XML based configuration system.
  • A colour picking palette for sending text.
  • Logging to formatted HTML.
  • Customizable hotkeys.
  • Input history.
  • URL clicking.
  • Ability to launch ICBMs.

No BS Web Design™
(read: this was designed by a programmer ^_^)