Todd Smith

Software Engineer/Computer Scientist

email: tcsmith@cs.utah.edu

AIM: dtw SickBoy

MSN: toddelsmith@hotmail.com

ICQ: 159114711

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:

  1. Unzip the archive.
  2. Go to the folder where you unzipped the arcive.
  3. Open the CSSeniorProjec2003 folder.
  4. Double click the ModernWarfare.exe icon to play.
A quick reference command card is available in pdf format here.

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.

HUD
HUD

Airstrike!
Airstrike!

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.

Valid HTML 4.0! Valid CSS! http://www.vim.org