Jason Campbell
Software Engineer
Hi there!

About Me

Ever since I began playing table top role playing games over a decade ago I have been fascinated with game mechanics and how they effect the player's experience. I took my first programming class the same year and became consumed with design work and coding combat systems. I began optimizing characters, theorycrafting, designing custom game worlds, experimenting with system variants and loved every minute of it. A few years after college I became involved in the Civilization IV Better AI Mod and decided that I needed to go back to school to learn more about AI and game development. In 2012 I completed the requirements for my Bachelor's Degree in Computer Science with a concentration in Video Game Design, the highlight of which was the games programming course in which I built a racing game on a team with four other students. Since then I've been working at Amazon.com and continuing to work on game design in my free time.

Professional Experience

I have been working on a number of applications, big and small. See my LinkedIn for more.

View Jason Campbell's profile on LinkedIn

About the Website

I created this website to show off some of the game design and development work that I've done, along with some of my other projects. Unfortunately I haven't done much to keep it up to date, so for now you can check out some of my university projects.
If you're feeling really adventurous you can look at my old blog posts.

Serious Sushi

Serious Sushi is an arcade style racing game I built on a team of five students in the Games Programming course at the University of Calgary.
Head to the Serious Sushi Website to download and try the game for yourself.

One Lap Demo Race



As you can see in the above video, Serious Sushi features sushi rolls with an assortment of accessories speeding around a kitchen shooting rice bullets and tempura torpedoes, and laying down soy sauce slick while avoiding a plethora of salt shakers, soy sauce bottles and random exploding crates.

My primary responsibility on the project was the AI opponents. I also helped set up some of the initial architectures and camera, along with contributing to all of the design discussion. The following video shows off what the world looks like from the AI's perspective.

AI Debug View



The debug geometry that's being drawn shows the waypoints an sensors that the AI uses while cruising. There are three wire-frame spheres that are show the possible destinations for the vehicle. The yellow spheres is the nearest waypoint, the magenta spheres is the waypoint that follows the nearest, and the blue sphere is the current location the sushi is driving to. If the sushi has a clear line of site to the second waypoint (magenta) it will try to drive there, thus cutting corners when possible. If not it will cast a series of rays who's destination forms a line between the second and first waypoints. These rays fade from green to red the closer an obstacle is to the sushi. As soon as a ray reaches its full length, indicating a clear path, the blue sphere is drawn and the AI drives there.

While cruising the Sushi can also fire weapons, use speed boosts, lay down soy sauce slick, and use the e-brake to make turns. The use of each of these follow fairly simple rules.
  • If there is a target, either a sushi roll or a nearby crate, that is within line of sight and within firing distance, the sushi will fire rice bullets. In addition they will fire missiles at other sushi rolls.
  • If the distance to the next way point is sufficiently large, and there is line of sight, the sushi will use a speed boost.
  • If the angle to the waypoint is large enough, and the sushi is traveling fast enough, the e-brake will be used for cornering. In addition there is a random chance that the sushi will drop a soy sauce slick each frame the e-brake is on.
The cruise state is just one of the possible states the sushi can be in at any point in time. There is also the flying, spinning, stuck and burnout states.
  • When spinning or flying the sushi forgets all waypoints and waits for the spin to end, or for it to return to contact with the ground, at which point it enters the stuck state.
  • When stuck the sushi releases the accelerator and turns to face the nearest waypoint, at which point it enters the cruising state.
  • During the race start countdown timer, if you hold down the accelerator you receive a speed boost right off the start. In the burnout state the sushi does just that, holding down the accelerator until the start of the race, at which point it enters the cruising state.
Serious Sushi was a lot of fun, and a great learning experience for me. I realized just how important having a good architecture set up for the AI is, along with how difficult it can be to describe the world to the AI in a timely fashion. Were I to do this project again I think I would try a navigation mesh generated using adaptive space filing volumes, so that I would have to manually change the waypoints each time one of my teammates moved a salt shaker. In addition I would probably try behaviour trees instead of the finite state machine, not because the state machine was insufficient, but because behavior trees look like fun.