5/10/2003
Modern Warfare now available
for download!! Get the zip
archive here.The distribution
includes the game and source code.
Follow these instructions to play the game:
- Unzip the archive.
- Go to the folder where you unzipped the arcive.
- Open the CSSeniorProjec2003 folder.
- Double click the ModernWarfare.exe icon to play.
NOTE: you must have at least a GeForce 3 with vertex/pixel shader 1.1 support.
5/2/2003
Graduation!!! It's been a fun 4 years but its finally over!
3/24/2003
Modern Warfare Update: Got the minimap working in the HUD. Players can now move the camera by clicking on the minimap. Players can also switch between battles via the minimap now. Pics to follow soon!
3/19/2003
Code samples section now available here.
3/18/2003
Back from the GDC, almost caught up on homework. HUD for modern warfare is almost complete, just have to add the minimap!
3/4/2003
Getting ready to go to the Game Developers Conference tomorrow!!!!
3/3/2003
Just finished the latest milestone for Modern Warfare. Basic sounds and music are in the engine. The economic model is in place. To facilitate play testing, which will begin in a few weeks, we have made the engine load almost all data from files instead of hardcoding it into the engine.
2/4/2003
My resume is now available.
2/3/2003
Finally have my webpage up!
SUNDAY |
MONDAY |
TUESDAY |
WEDNESDAY |
THURSDAY |
FRIDAY |
SATURDAY |
|   | 12:55-1:45 MATH 5010 |
12:25-1:55 CS3700 |
10:30-11:00 CS4500 Team Meeting |
12:25-1:55 CS3700 |
12:55-1:45 MATH 5010 |
  |
|   |   |   | 12:55-1:45 MATH 5010 |
  |   |   |
Available in WORD format.
Here is a short summary of a few of the projects I've worked on.
Links to working examples and/or code are provided.
Modern Warfare
Modern Warfare is a realtime strategy game I'm working on with two classmates for senior project. The latest additions to the game has been the HUD and the ability to call in an airstrike in battle mode. Click the thumbnails for a higher quality image ~100K.
More information can be found
here.
Virtual World
Virtual World is a maze game I wrote in java using a raycasting engine. It was my first attempt at pseudo 3D graphics. The two levels shown in the demo are without walls. This is to show off the feature I'm most proud of: the trigger system.
The triggering system was one of the most interesting parts of the engine to write. I wanted to be able to write triggers without having to recompile the engine itself. I designed a set of interfaces that the core engine relied on to call triggers, any class implementing this interface could be used as a trigger. These could be compiled seperately from the engine.
The names of the trigger classes were then stored in the map file. When the map was loaded I used Java's RTTI mechanism to load the class dynamically! No need to recompile engine when a new trigger was built.
Here is a snippet from the class that loads the triggers (RCMapFileParser.java)
private void parseEntities(String rawMapData) {
StringTokenizer blockST = new StringTokenizer(rawMapData.substring(
rawMapData.indexOf("%ntt%")+"%ntt%".length(),
rawMapData.lastIndexOf("%ntt%")),"\n");
fMap.fTriggerMap = new Trigger[fMap.fWidth*fMap.fHeight];
if(DEBUG) {
System.out.println("%ntt%");
}
for(int i = 0; blockST.hasMoreTokens(); i++) {
StringTokenizer lineST = new StringTokenizer(blockST.nextToken());
String nttType = lineST.nextToken();
if(nttType.equals("trigger")) {
/* Dynamic trigger system. allows users of the game engine to
* create/compile a new Trigger class and place it in the root
* game directory. the trigger can then be used without having
* to recompile the game engine.
*/
int trgrLocX = Integer.parseInt(lineST.nextToken());
int trgrLocY = Integer.parseInt(lineST.nextToken());
String triggerName = lineST.nextToken();
Trigger trigger = null;
String[] params = new String[lineST.countTokens()];
for(int j = 0; lineST.hasMoreTokens(); j++) {
params[j] = lineST.nextToken();
}
if(DEBUG) {
System.out.println(nttType+" "+trgrLocX+" "+trgrLocY+" "+
triggerName);
}
try {
Class c = Class.forName(triggerName);
trigger = (Trigger)(c.newInstance());
trigger.init(fGameManager, params);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(InstantiationException e) {
e.printStackTrace();
}
catch(IllegalAccessException e) {
e.printStackTrace();
}
fMap.fTriggerMap[trgrLocY*fMap.fWidth+trgrLocX] = trigger;
}
}
}
Heres the trigger interface:
public abstract class Trigger {
/**
* calls the action associated with this trigger.
*/
public abstract void fireAction();
/**
* initialize the trigger
*/
public abstract void init(GameManager gm, String[] params);
/**
* Primarily used by tools such as map editors to get the name
* of the string parameters that are passed to it's init method.
*
* @return String[], contains the names associated with each string
* in the String array that is passed to the init method.
*/
public abstract String[] getParamNames();
}
A zip of the source is here.
You can try out a demo here. It was built under JDK 1.2.2 and has been tested to run up through JDK 1.4.1_02. When running the demo please you will see a gray applet window with an image, please click on the applet window and then use the arrow keys for movement. There are currently 4 different types of triggers in the 2 maps:
- Move Actor: moves the player to a different spot on the map.
- Change Map: changes the map.
- Show webpage: spawns a new browser window.
- Database call: this no does nothing as I no longer have access to the database.
Apologies for the horrible artwork, I'm not an artist :)
Yalnix
Operating systems was by far one of the coolest computer science classes here at the U and Yalnix was our semester project. It was a UNIX like kernel featuring the main process management features of UNIX, virtual memory, and interprocess communication.
A more detailed description can be found in pdf form here.
Please email toddel@gmail.com
for source code samples.
Tango
Compilers, another cornerstone computer science class. We built a fully functioning compiler of C/C++ style language called Tango. Our compiler took ASCII source and compiled it down to SPARC Assembly. A very cool project indeed.
Please email toddel@gmail.com
for source code samples.
jLisp
Over the CS3500 course we developed a LISP interpreter in C++. For our final project in the course my team decided to port the interpreter to Java and write a GUI. We also developed an API to easily integrate with other teams interpreters.
Please email toddel@gmail.com
for source code samples.
To run the the project just extract the archive and run the jLisp.bat file.
WARNING! The project currently only runs using Java 1.2.2. There is a
a problem with the Swing libraries when it is compiled and run under any
later JDK.
I enjoy playing and creating videogames. I am working on a game for my senior project. Check here for information on our game "Modern Warfare".
In whatever free time I have I like to DJ. Browse some of my mixes here.
