Software
Weirdly: adv. In a strikingly odd or unusual manner
C/C++ PHP Java BASIC Games Tools Web Odds and Ends

C is the second language that I learned, followed shortly by C++. I was introduced to it in high school when the limitations of BASIC became apparent. My use of the language skyrocketed when a friend of mine, Benjamin LaHaise, showed me how to handle graphics using system interrupts with inline assembly. At that point, I started writing my own graphics library and went on to develop several games using it. The programs below are a sample of the work I've done in those languages.

Warp

This is a quick little demo that takes an image and does some neat warping animation on the screen with it. I was using this as a handy way to test and iron out bugs in a function I recently wrote. The function can read a polygon from a source image, and draw its contents to another polygon in another image. What makes it so useful is that those polygons do not have to be identical. I have already used it to implement a blitting function with transformations that is much faster than the one I wrote in college. It does have a few limitations. For one thing, although the polygons in use do not have to be the same shape, they do need to have an equal number of defining points (for instance, you could copy between any two triangles, but not from a triangle to a square). This could actually be changed if necessary, but I do not consider it so for now. The other (more significant) limit is that the polygon to which it's drawing must be convex (although the one from which it's reading does not need to be). That too could be avoided, but doing so would slow the function down. This demo is always drawing to a rectangle (the whole window), but is reading from a polygon that is transforming.

The file linked at the top contains the source code and a make file, having been written to work on the GNU/Linux platform. A good friend of mine was kind enough to compile this on his Windows machine for me, so if you're using Windows and would like to see the program in action, you can download it in this zip file.

Netcrib

This is a work in progress, although it is currently playable. At the moment it is a console based cribbage game for the GNU/Linux platform. It makes extensive use of the ncurses library for manipulating the console display, giving the game a simple, intuitive interface. Some of the planned updates on this game include:

  • Setting it up as a network game, to play against other humans
  • Adding a graphical user interface
  • Improving the computer player
  • Making a tool for creating the board

Currently, the game can only be played against the computer. It does however allow you to play against multiple computer players. The game rules are dynamically loaded from the file in which the information for the board is stored. There are currently two boards, one for a two-player game and one for three players.

Hexodus

Hexodus is the first truly original game that I wrote after developing the concept myself. Before then, all of my work had been variations of previously conceived games. It was written in C, and the most recent version was built using DJGPP. Originally, I wrote it with my own low-level MS-DOS graphics library. When fixing it up to compile with DJGPP, I decided to switch over to the Allegro library instead.

Blast

Blast is my version of Minesweeper, A logic puzzle that I've enjoyed for quite some time. This program has undergone two translations. When I first wrote it, I used the graphics library that came with Borland Turbo C++ 3.0. Eventually I wrote my own graphics library, and refurbished Blast to use it. This made the game run much smoother and gave me far more control over it's appearance. When I switched to DJGPP and started using Allegro, I altered it once more, leaving me with the third version.

Accetris

As you may guess from the title, this is my variation of "Tetris". I originally wrote it with the Borland graphics library, and fixed it up with my own shortly thereafter. I have not yet rebuilt it to work with DJGPP. This is the same as "Tetris" but with three different playing modes:

  • Normal: Just like the original game.
  • Accelerating: Each piece speeds up as it falls, accelerating toward the bottom of the screen.
  • Random: It occasionally produces randomly shaped chunks, which are often very hard to place properly.

Mastermind

Mastermind is an excellent two-player logic puzzle/board game from the 1970's. One day my mother was looking for a computerized version of it but was having no luck, so I wrote it for her. I only spent a weekend writing it, but did manage to complete it. Only one feature is missing, an explanation of how to play the game.

Invaders

My version of a good old classic. It never was particularily great, being one of my earlier works in C. It is, however, fun to play. This program was designed to look like a far better one that someone else wrote for the Amiga: "Better Dead Than Alien".

Arkann

This is the first game that I wrote with my own graphics library. At the time, I was absolutely thrilled with the appearance of it. Compared to my prior work, it was excellent. In retrospect, it's nothing great. I could now write a much better version of it if I felt inclined to.

JGames

This is not a game in itself, but a collection of games that I wrote, all grouped together under one user interface. I wrote this primarily so that I could present them as a single, easy-to-use package.

Edpics

Edpics is a simple program for drawing small eight bit images. It saves images in a very simple format: The first byte is the width of the image, the second byte is the height of the image, and the remaining data is the colour index of each pixel in the image (one pixel per byte). The main problem with this being that one could not save the palette with which the image was drawn. Also, since you are only given eight bits for the dimensions of the image, the largest image you could save would be 255 by 255.

Edpat

Edpat is almost exactly the same as edpics, with one or two minor changes. I wrote it to make the editing of graphical patterns easier. It draws the pattern on the background of the screen as you edit it, and some of the drawing tools behave in a modular fashion. It uses the same file format as edpics, and thus suffers the same limitations.

Edfont

Edfont is a font editor that I wrote for game design purposes. It is not anything great. I wrote it for my use only, so it isn't user friendly, or particularily intuitive. It stores the fonts in a very non-flexible format: The first byte is the width, the second byte is the height, and each remaining bit tells the status of each pixel in each character. For instance, if you made a font with the dimensions 10 * 16, the size of the file would be 8 + 8 + 10 * 16 * 256 bits. This is equal to 5140 bytes, or approximately 5 kilobytes.

Edplt

Used for editing eight bit palettes that I could apply in games. This program is not intuitive, but I found it very useful and served its purpose quite nicely. It offers the basic functions of modifying individual colours and smoothly blending the colours between any indexes.

Headbanger

This is a simple little demo of transformations being done with my new image manipulating algorthm. It has a bunch of heads bouncing and spinning on the screen. The heads depicted are actually a slightly modified photograph of an origami mask that I made some time ago. The only modification to the picture was the addition of pupils on the eyes.

Boing 3D

This is a screensaver style of graphical demo that uses a 3D graphics library I wrote when I was in college. It shows a bunch of spheres bouncing around on the screen. The angle of the lighting can be changed by moving the mouse, and the number of balls increased and decreased by clicking on the left and right mouse buttons respectively. The program will end when you hit the escape key.

Rotate 3D

Another quick demo of my old 3D graphics library. In this case, there is a model of a red maple leaf on the screen, which can be rotated using the mouse.

Rotate 3D for Linux

A simple program that draws a cube on the screen and lets you rotate it by moving the mouse. The main purpose of this program is to demonstrate a function I wrote which draws textured polygons in three dimensions. This was written for Xwindows on the GNU/Linux platform using SDL.

Worm

This "zip" file actually has three different programs in it, each one demonstrating the same algorithm. It started out as a simulation of a series of wagons being pulled, and evolved into these more interesting toys.

Worm for Linux

This is a GNU/Linux version of the worm algorithm that I originally developed under MS-DOS. It uses Mesa, the Linux port of OpenGL, and runs on the Xwindows desktop.

Particle

A bunch of particles with colour-coded masses almost following the laws of gravity. You move the heaviest particle around with the mouse and the others will follow.

Mandelbrot Set

The Mandelbrot Set is a fractal which is named after Benoit Mandelbrot, the mathematician who first plotted out this set of numbers on a computer. The program here is my own rendering of that set.

Mandelbrot Set for Linux

This is another version of that same Mandelbrot set, written to work with Xwindows on GNU/Linux. It uses the Mesa graphics library and should port pretty easily to other platforms.