Here are a few of my personal projects. Most of them are based around the
PIC microcontrollers, but the newest are games. Enjoy!
Retro Tank Super Attack
This is a simple to play networked shooting game I've been working on.
It features graphics and game-play like an Atari 2600, but has the
benefits of modern networked computing. The battle fields can be larger
than the player's view and are read in from a text file that you
can modify to make your own.
The only thing I haven't yet got is a good installer for Windows or any installable package for any Linux distribution. Read up on running the game for quickie instructions on the installation.
I seldom have a chance to use a Mac, so I have nothing for it. Hopefully the source will build on Mac OS X and the game will work. That was the intention, anyway, and I did get an early build of the game working using the Unix-style build process with linking to Unix-style libraries. That requires building the SDL dependencies from source.
This is a lab I wrote for the Game Networking class of Full Sail's Game Development degree program. It is a fairly simple RTS style game with up to four players.
The game uses TCP to ensure all the data sent actually gets to the other end, or the program gets an error. The server uses select to handle multiple players on the same thread. The students get to write all the networking code and must protect data across threads.
I designed the game and GUI code so that the students wouldn't need to worry about them. I limited their interface and made them as simple as possible to use. They are also well documented with the help of Doxygen.
The rendering engine is the same one used with Retro Tank Super Attack. Here, it is used to display menus with alpha blended backgrounds and selections. Conquest shows some bugs in the renderer that I missed earlier.
This is a game I helped make while I was a student at Full Sail. It is a fighting game where the players roam a 3D environment, can attack any other player, and chose which limbs to attack with and which to strike. My contributions to the group project were:
The project is a tad too large to post in its entirety here, but here is the technical documentation (zip file) I generated for the group. I acted as the group's tech lead, so I was responsible for maintaining it and writing many of the parts that aren't a code reference. The archive includes all of Doxygen's output, which includes quite a few files. Open index.html for the main page.
- Networking including a multi-platform multi-threaded dedicated server
- Object system that worked mostly to abstract how the game's data was sent over the network
- Memory manager
- Technical documentation generated with Doxygen
- Automated builds of the client, server, and documentation, including integration with our own CVS server and the school's Alienbrain server
The remaining items are all from my microcontroller projects.
Memory Module for the Atari 2600 and 7800
This gizmo uses serial comminication over a controller port to allow games to save and load data to an EEPROM without preventing the port from being used with controllers. It also can read input from an unmodified Playstation controller and provide output as a joystick or steering controller.
- Cool code -- Some general libraries all under the GPL. Admittedly, the documentation for these libraries is not great, but the code is commented. They are still under development (2003-11-15 version is here), but the implemented parts generally work well. Also available in a zip file. The libraries include:
All code is written for the CCS PIC C compiler for PICs with 14-bit words. All code is compiled without using 16-bit pointers, and some parts will break with 16-bit pointers.
- Constant data packer and unpacker (7-bit x 2 (PC) -> 14-bit (HEX) -> 7-bit x 2 (PIC))
- 4-bit interface to HD44780 or compatible LCD controller
- Write only
- Polled operation -- interrupt operation partially implemented
- Partially implemented buffered operation; good for PICs clocked above 8MHz or so
- 6 I/O lines required
- Supports writting constant strings packed in program ROM
- Supports custom characters
- Stored as constant array in C
- Stored as packed constant data in program ROM
- Does not wait for LCD operation to complete before returning from any function
- LCD menus
- Uses a four line HD44780 type display
- Displays a set of string options stored in ROM or RAM
- RAM options can be in any bank, and can be split bewteen banks 2 and 3
- Includes an ASCII menu that lets users enter a string with joystick-like control (up, down, right, left, select).
- Uses any input device because the programmer must write the function that gets the input. The interface to that function is defined.
- B Bootloader source code
- Configurable bootloader on the microcontroller
- Program to send code to the bootloader
- SPI, hardware and software implementations
- SPI EEPROM library for parts from Microchip
- USART (hardware only, aynchronous and synchronus support)
- other stuff
- B Bootloader -- a 316 to 340 instruction bootloader that supports PIC16F87x and PIC16F87xA parts, and doesn't use bank 0.
- Spiffy PIC Programmer -- an attempt at making a PIC programmer that never suceeded. I made another attempt recently, and it sort of works, but isn't on the site.
- Car stuff
- Security system -- I could have bought a system, but that would have been too easy. Since August 2000, the system I made has been protecting my car from break-ins. I don't know how many theft attempts there have been, but none have gotten past a cursory inspection.
Another older link
- HUD (Heads Up Display) -- It was an interesting idea that really got me started with microcontrollers and electronics. Unfortunately, I've abandoned the project. I did get a Basic Stamp to read in my car's engine and vehicle speed and display it on 7 segment LED units.