Project Blood: A VGDC project
A vampire assassin sneaks past the guards to slay his target.
Artist and programmer for a year-long project with VGDC UCI’s Project Blood team.
Sep. 2014 – June 2015
Concept art, game art assets, A* star path finding, debugging.
Github – https://github.com/foreza/ProjectBlood_VGDC2014
Download A* Demo (.exe) – AStar.zip
Stealth is difficult. It’s a game of balance between what you know and what your adversary knows. The player should have tools to affect that balance – vantage points, hiding places, ways to remove enemies, ways to avoid them, etc. A lot of thought needs to go into designing for stealth, because it needs to be both rewarding and optimal to avoid combat.
Project Blood was a year-long project with UCI’s Video Game Development Club. The premise was: You are a vampire who performs assassinations for a shadowy commander.
A Troubled Project
This project proved to be a good lesson in how to succeed as a team. Some elements I think are important in retrospect are:
- A strong core vision.
- Proper application of that vision to each system.
- Good communication of that vision to all team members.
- Good team dynamic.
Unfortunately, our team didn’t really gel. There were a variety of reasons, but I think the main one is we never could make the game very fun. Maybe we just didn’t have enough experience.
The A* Pathfinder
We made most of our progress during jam sessions. Doing most of our development in bursts meant we didn’t spend time reviewing code, but these sessions produced results. One of our sessions’ goals was to debug the guard AI.
Our AI moved in a straight line to a series of patrol points. When the player came into range, it would try to move towards the player. The player would periodically leave a crumb behind. The guard would cast a ray to each crumb and move straight towards the most recent one it could “see”. This simple implementation made the guards very easy to exploit.
I decided to sit down and implement an A* pathfinding algorithm for the guards. This would give them the capability to:
- Path around moving obstacles.
- Avoid dangerous areas.
- Cut off the player’s escape.
- Activate traps.
Using this tutorial, I implemented A* using a heuristic based on average cost to move to between nodes. To test, I developed a scene with a 5 x 5 grid layout. The tests consistently produced good results; even with changing destinations and node costs. With some extensions for tactical decisions, we could have had a solid AI.
Unfortunately, the programmers had their hands full building basic mechanics. So, we never integrated the pathfinder into the game.
Looking back, it feels like many of our design decisions were made arbitrarily. For example, the camera’s small view prevented players from seeing very much of the level. They couldn’t see what was ahead of them, so they couldn’t plan.
There’s an interesting approach to design where every system is evaluated against a “fantasy”. We needed to evaluate every system against the fantasy of a vampire assassin. We needed to know how to make the fantasy fun.
Stealth Vs Combat
A result of arbitrary design is the combat. Because player’s could only see a small portion of the level, they couldn’t survey threats. Because they couldn’t see alternatives, players had limited ways to avoid combat. The only option was to kill the enemies.
Not to say that killing enemies doesn’t fit the fantasy of a vampire assassin. But, players could easily take on any number of enemies. Not very assassin-like.
The chain of events looks like this:
- Players aren’t given tools to gain information advantage over enemies.
- So, most encounters are unplanned.
- Therefore, player needs tools to deal with unplanned encounters.
- These tools make aggression the best option in most situations.
- Therefore, aggression must be fun and rewarding.
- Where did the stealth go?
The concept of a level boss is at odds with stealth. The boss is a character who challenges the player directly, so there is no room for the player to pass by unnoticed. It takes extraordinary creativity, some narrative twist, or a deliberate change of pace to put a level boss in a stealth game.
At this point, combat was far more developed than stealth, so our bosses were combat oriented simply because that’s all we really knew how to do. Our first boss was a damage sponge. Our second boss was a damage sponge that could become invisible. The third boss was a bit more interesting. It could kill the player instantly, but the player could hunt down its minions to defeat it.
An interesting atmosphere carried the game into the IEEE GameSig Showcase 2015 semi-finals. However, I feel the game failed to live up to its original premise. It also lacked the fun-factor I’m constantly striving for in my own games.
Looking back at old meeting records, it feels like we were constantly putting carts before horses. We logged lengthy discussions about minutiae while programming at a snail’s pace. Today, I firmly believe that interesting mechanics can only come out of prototyping, and to prototype you must program, program, program.
Some ideas I got out of this project are:
- Flashes of lightning reveal player to guards.
- Sword for stealth kills, vampiric skills for escape.
- Guards can call for help if player is spotted.
- Spend health to perform vampiric skills – makes it risky to run from combat.
- Replenish health from defeated opponents – makes successful kills rewarding.
I think it would be interesting to implement some of my ideas. In the near future I think I’ll take a weekend to build something.
I also have a nice pathfinder if I ever need one, so that’s a bonus. The demo is actually pretty entertaining to mess with. Maybe I’ve got something interesting here.
Game screenshot is from the Steam storefront for Mark of the Ninja by Klei Entertainment.
All other graphics were created personally.