Gem Feeder
- Independent
- Unreal Tournament 2004 mod
- 2004
Designed and directed by Josh Sutphin. Art and environments by Bradley 'Nutter' Jones and Erik Exeter. Additional contributions by ChookWoods, Mr. Lane, and Trauts.
⚠️ Gem Feeder requires a valid, licensed copy of Unreal Tournament 2004 to play.
Gem Feeder is a gametype modification for Unreal Tournament 2004. Two teams compete for control of several gems (usually three). When all the gems are brought to your base, your team scores a point. It sounds like a cross between CTF and Bombing Run, but it's certainly not that simple.
Gem Feeder is a wild and chaotic game that requires focus and teamwork to win. It's great teamplay and includes full bot support. An in-game editor even allows you to convert any map over to Gem Feeder in a matter of minutes, perfect for trying out crazy new custom maps!
Gem Feeder was a finalist in the 2004 Make Something Unreal Contest.
Gameplay in detail
Each team's base contains several altars (usually three).
Scattered throughout the midfield are spawn points for gems; there are at least as many gems as altars in a single base (three altars per base = three gems in total) but in some maps there are one or two extra gems. Each gem has a fixed spawn point.
A team scores as soon as it has a gem on every one of its altars simultaneously. Upon scoring, all gems are reset to their spawn points in the midfield.
As with flags in CTF, you can steal an opponent's gems from their altars by running over them. You can only carry one gem at a time. If you're killed while carrying a gem, it drops where you died, and anyone can pick it up. If nobody picks it up for a set time, it resets to its spawn point. Carrying a gem has no effect on your weapons or movement speed; you can still fight normally.
Most maps also have one or more "altar bombs", which look like red gems (normal gems are blue). Carrying an altar bomb works the same as carrying a gem -- and you can only carry one or the other, never both at the same time -- but you place altar bombs on an opponent's altar instead of your own.
Placed altar bombs begin a countdown. If an opposing team member stands near the altar for long enough, they defuse the altar bomb and it resets to its spawn point. If the countdown expires before that happens, the altar bomb blows up (these explosions are huge, like a Redeemer going off in the heart of your base). Altar bomb detonations destroy all gems that team has collected, and kill all team members in the base.
The other important feature of altar bombs is that they "claim" the altar they're placed on, preventing the opposing team from putting a gem there until after the altar bomb is defused. That means altar bombs lock down their ability to score!
Strategy
One of the coolest things about Gem Feeder is that it gives everyone something meaningful to do, pretty much all the time. It's a problem I always had with classic CTF: somebody's running the enemy flag, somebody's defending your own flag (if you're lucky), and everyone else is basically just playing Deathmatch because there's nothing else interesting for them to do.
In Gem Feeder there are basically a whole bunch of flags (gems), some of which are offensive (altar bombs), and that means there's almost always a high-value objective nearby, whether that's running a gem back to your base, hunting down enemy gem runners in the midfield, defusing enemy altar bombs, running altar bombs into the enemy's base, etc. There's always something important to keep you busy!
Over many, many playtests, we found that even though the game doesn't formalize the concept of rounds, there is a natural ebb-and-flow that echoes basketball or hockey.
Say the opponent has two out of three gems, and they're running the third back to base right now and you don't stand a chance of catching that player. It makes sense in this case to retreat and control the midfield in anticipation of the gem respawns once the opposing team scores; if you do this successfully you can quickly match their point. And that means the opposing team needs to keep a few players in the midfield to prevent that counterplay... which might leave their base vulnerable to one sneaky player with a smart approach.
AI support
I'm mostly a solo gamer, which makes my love of Unreal Tournament seem paradoxical. For this reason, it was really important to me that Gem Feeder have full bot support. To that end, I spent a good chunk of development time upgrading the CTF AI to understand the concept of multiple "flags" (gems), to understand altar bombs as a meaningful thing, and to strategically weight their decisions among:
- Claiming gems in the midfield
- Hunting enemy gem carriers
- Stealing enemy gems from their base
- Claiming altar bombs in the midfield
- Hunting altar bomb carriers
- Defusing enemy altar bombs in the base
- Defending the base
- Gathering health/weapons/ammo/powerups
- Killing targets of opportunity
- Emergency self-preservation
These decisions were mostly made based on relative proximity and line-of-sight. I leaned on the base Unreal Tournament AI to handle all the core combat decisions; my part was mostly picking where to go based on questions like:
- Am I carrying a gem?
- If not, is one nearby?
- If so, can I path to it?
- If so, is that the cheapest path to any accessible high-value target?
- If so, go there now.
From a technical perspective, this was not a sophisticated AI; this was, after all, my first crack at anything AI-related, and Gem Feeder predates the beginning of my professional game dev career by a year. But despite its simplicity, it did get the job done!
In-game level editor
Gem Feeder is well-suited to just about any map that's built for CTF, and most maps built for Bombing Run, so it seemed a shame to let all these great maps go to waste.
I built a simple in-game editor -- which technically functioned as an alternate game mode -- which let you load up a pre-existing map and run around placing altars and gem spawns. This process then saved out a really simple data file indicating the locations of those key items, and would then show up in the map list for Gem Feeder games as if that map was natively created for Gem Feeder. Upon launching the map, I'd simply scan the scene for other game mode-specific objects (like flag spawns) and delete them, then dynamically spawn the gem spawns and altars according to that data file.
Using that editor, I rigged up a bunch of favorite "official" maps with Gem Feeder layouts, and also created layouts for a handful of fan-favorite third-party maps (those required the end user to have installed those maps separately). This effort significantly expanded the roster of maps available to Gem Feeder at a fraction of the time cost.
Lessons learned
I had to learn a lot of technical stuff about the second-generation Unreal Engine to make this project happen.
This was my first foray into the JavaScript-like programming language UnrealScript, which was what they used to use before UE3 introduced the visual scripting system "Kismet" (which later evolved into UE4's Blueprints). I had prior experience with C++ but UnrealScript was a very different beast. UE2's gameplay framework also leaned heavily on inheritance and polymorphism, concepts with which I was familiar but had only previously encountered in far smaller and simpler codebases.
This was also my first experience writing AI behavior. Fortunately I had Unreal Tournament's fantastic combat AI to lean on for moment-to-moment gameplay, so I only had to concern myself with the high-level strategic decision-making that was particular to Gem Feeder's unique objectives. This was essentially a weight-driven state machine -- a bunch of possible behavior states get a score, and the highest score wins -- which was fine at the time, but I would later learn about GOAP and Behavior Trees and realize that my approach on Gem Feeder was hilariously unsophisticated. (It did work, though!)
Despite my personal preference for solo play, it was important to make sure Gem Feeder was playable over the network, so this was also the first time I had to figure out how to do network replication. UnrealScript provided a network replication scheme that's still surprisingly similar to what we see today in UE4, so it's here that I learned about things like server/client architecture, variable replication, remote procedural calls, lag compensation, etc.
Trivia
Four years later, several of the core design ideas from Gem Feeder made their way into the "Collection" game mode in Warhawk: Operation Fallen Star, the third and final DLC pack for Warhawk, for which I was the lead designer.