Menu

Designing VIPER Sniper (DooM SnapMap)

SnapMap’s three most notorious limitations at the time of writing are the demon limit (you can have around 12 in your level at a time), the player limit (only 4 players) and the equipment limit (two equipped weapons at a time). Only the developers know why these and other minor limitations are in place, but like I mentioned in my previous article, I like designing within constraints.

Back in the day, I played a lot of Champions Online (Steam shows 3321 hours total clocked). When the game introduced map-wide Team Duels, I started brainstorming a bit over what could be done with it. After re-arranging some powers, getting some very expensive legacy gear and finding a group, I had my first opportunity to try VIPER Sniper. Five super heroes search for a sniper that’s stealthed and try and take him down. The stealthed sniper, a one-man team, would try and take out the heroes one by one, which was possible because the build was so broken it could one-shot tanks. The general rhythm was, hide, wait for a hero, take him out, run away and hide again. The mode was really fun, we added a bunch of rules to make it more interesting, and it lasted until Stealth was revamped so that it made the mode no longer possible.

Fast forward today, I wanted to make this mode in SnapMap.

Before opening the editor, my plan was as follows:

3 VS 1 gameplay

The Sniper can turn invisible

The Sniper turns visible for a limited time when shooting

The Sniper’s shot is a one-hit-kill

The Sniper turns visible for a limited time when trying to achieve his capture point objective

The first deviation from the original idea was already there in the “SnapMap concept” phase. There were no capture points in the Champions version, but when brainstorming how to port this idea over to a new system, I realized that the Sniper needed some goal to keep him moving and forcing him to expose himself. The main inspiration for this comes from the board game “Scotland Yard”, in which two or more players chased Mr. X across London, who was hidden and revealed himself only on certain turns.

Now, we come to the first hurdle of the design. There’s no invisibility. I assumed there would be a power-up like in the multiplayer mode or at least some sort of toggle for when a player was visible and when not. Obviously, this could have been the point where I scrapped the idea, but I tried to experiment with other options. Speed was something you could modify, so I experimented with making the Sniper’s speed 300% (the maximum possible speed and also the equivalent of a Haste powerup). I then expanded the original size of the map, which meant that the Sniper was practically invisible compared to his slower opponents.

Since the Sniper was “practically” and not “actually” invisible, there needed to be a way to make him “practically visible”. Slowing him down wouldn’t do much in that regard, so instead I made it so that a marker visible to all players (”Point of Interest” in SnapMap) would be visible whenever the Sniper was capturing an objective or shooting. All of a sudden, I was achieving the same gameplay effect of my original idea without a core feature (the invisibility).

After that was settled, it was time to look into the actual nature of the capture points. SnapMap has a built-in capture point node, but it works similarly to Team Fortress 2 or Overwatch; if you leave the point, it slowly resets its progress. This wasn’t good for me, since I wanted the Sniper to never lose progress and I wanted the Sniper to stay where he was when he committed to capturing a point. After all, if he could just bail whenever he wanted to, the opposing team could never catch up to him. I solved this by placing a node that could be harvested four times before it completely vanished. Each “harvest” would take 10 seconds, during which the Sniper was unable to move. What effectively happens is that the Sniper’s speed becomes 0%, so he can still crouch, jump and shoot, but not actually move away. This worked for me, though, since I did want the Sniper to be able to defend himself. During the entirety of the harvest, the opposing team would see a marker directing them to the Sniper’s location, so the Sniper had to be smart about when and where he was going to harvest a point.

One issue I predicted might happen was players eventually learning the points’ locations by heart. This also meant that each point had to be carefully balanced, to not put either team at a severe disadvantage. This kind of balancing would require much more testing than I had the luxury of, so my slightly dirty solution was adding multiple points for each section of the map and having the game select one at random for each section. This meant that there were points both advantageous and disadvantageous to the Sniper that could come up, and that players couldn’t effectively camp a specific point as soon as the map started.

Finally, the points needed an audio-visual makeover, since they were just big white cylinders. I made the cylinders invisible (but kept them to determine harvesting range), added a source of non-damaging plasma energy (the logic was that the Sniper was harvesting demonic leylines or something like that) and added a combination of three VEGA lines that notified the other team that an intruder was detected. Initially, there were 5 areas that had one capture point each, but the points were removed from one area because it was too close to the enemy team spawn. So, the Sniper would get 50 points per harvest, 200 total per point before depleted, 800 total in a map. After reaching 800, the Sniper wins. Since this was a multiplayer mode, I was less concerned with scoring than I was with Hot Potato’s, so I just used it to keep track of progress. Another change that happened pretty early on was marking the location of the energy points for the Sniper at all times. Due to the random nature of the points and since there was no on-screen indicator how close a point was to being depleted, this was information the Sniper needed at all times. I opted not to mark it for the opposing team, because I didn’t want to clutter their screen.

The Sniper couldn’t rely on his speed alone, and I still wanted him to have a super-powered weapon. To emulate Champions Online’s sniping, I wanted to put a cooldown between shots. The Sniper uses the game’s Vortex Rifle, but only with one bullet. After shooting, the Sniper needs 2 seconds before he gets his ammo back (this was initially 8 seconds, but I realized it was too long after testing). However, if the sniper kills an enemy, he gets his ammo back immediately (allowing for consecutive shots for skilled players). Because of the absolutely mad damage boost the Sniper had, the Vortex Rifle essentially became a Quake railgun. Another weapon the Sniper had in his arsenal was a Tesla Grenade. It was meant as a back-up weapon to punish the opposing team if they try and rush the sniper together. However, since it’s on cooldown, the Sniper can’t spam it. An unforeseen side-effect was the Sniper’s melee attack. Since damage modifiers are player-specific and not weapon specific, the Sniper’s melee attack was way too powerful. To counter this, I eventually fiddled with some of the nodes and made the Sniper’s damage change back to 100% for half a second whenever using a melee attack, then change back half a second later (how long it takes for the animation to end). You can imagine my surprise when this actually worked on the first try.

The Sniper’s survivability was also a big concern. Since the Sniper only had one life, I set his starting life to 999. With no healing items on the map, this meant that the game became an endurance match for the Sniper. However, I wanted to avoid the obvious tactic of “rush in, damage the sniper, die, repeat” for the opposing team. To counter this, I put regenerating armor in place. The sniper has 150 armor, and if he takes no damage for 6 seconds, it replenishes completely. This meant that the enemy team was forced to use different strategies to tear down the Sniper’s defenses and keep them from coming back up if they wanted to win. It also made the Sniper feel more like a force of nature at the start of a match and a panicked animal near the end of it. After all, if you have a thousand health protected by armor, you’ll be a tad reckless; if you have only 20 health and you are solely relying on your armor, you’ll be more frightened.

The enemy team, which I call “Security” in-game, is slightly more down to earth in terms of abilities, but they still have some very interesting options. Their equipment slot is reserved for a grenade that turns into a wall. The wall is strong enough to block one sniper shot or to even limit the Sniper’s movement. While its use in matches was limited to making an approach the Sniper was covering safer, I feel it has a high skill ceiling and that co-ordinated use of it would be a nightmare for the Sniper. The Security team also had the advantage of using the built-in teleporters on the map to help them reach the other end of the complex quickly, but still leaving enough time for the Sniper to recover after a team-wipe.

In terms of weapons security used, this was probably the most difficult thing to get right. To put it simply, the DPS of three people in DOOM is really, really high. You also always have to ask yourself “what if all three players used this weapon together?” This immediately eliminated weapons like the Super Shotgun and the Chaingun. After a bit more advanced testing, the same thing happened to the Rocket Launcher and the Micro-Missiles mod for the Assault Rifle. In the end, the four weapons we ended up with were the Combat Shotgun (burst mod), Plasma Rifle (stun mod), Hellshot and Assault Rifle (scope mod).

The Combat Shotgun offered close range burst damage that was still within reason. The burst shot from it would require some charge-up, which made it risky to use when approaching the Sniper. The Plasma Rifle probably has the highest DPS on full auto, but requires taking advantage of the Sniper’s mistake to make use of it, while the stun alt-fire is difficult to land, but does 50 damage. The Assault Rifle is good for long range and its main use is to keep chipping down at the Sniper from far away to stop his armor from refreshing. The most interesting weapon was, ironically, the most boring one for me in regular Multiplayer – the Hellshot. Its ability to do damage-over-time after hitting the Sniper proved to be extremely useful as a support weapon.

In the end, I was left with two issues I was unable to fix for the map. The first one was the inability to turn off Glory Kills. It’s a major issue because the Glory Kill window is % based, so the Sniper may have 200+ health but still be Glory Killable. It also generally doesn’t fit with how I want the mode to play, but I’m stuck with it sadly. The second issue was environmental death. It is very anti-climatic when the Sniper dies to lava or falls in a pit. Almost every map section I used had one or the other, because their layout was otherwise good. This a design issue though, not a SnapMap issue. One of the ideas that I considered was teleporting the Sniper if he dies to environmental hazards. It wouldn’t be difficult to make such an exception and just store the Sniper’s last known health before respawning them, but it’s also prone to abuse. If a sniper is in a pinch, or needs to get somewhere fast, they essentially get a free teleport. So, in the end, I decided to go with “maybe an anti-climatic ending” instead of an unfair mechanic. Actually, what I’ve learned is that this kind of game mode relies heavily on the big bad, aka the Sniper. The mode only shines if the Sniper is playing somewhat well.

Below is a video with gameplay footage from both perspectives. I’d like to thank Lolo De Puzlo, RoryTCH, Noko, Festivore and Pullahoko for helping me test and balance the map.

If VIPER Sniper sounds fun to you, grab three friends and try it out. The code is R62TDLNG.