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.


Designing Hot Potato: Thy Spud Consumed (DOOM SnapMap)

One of the main reasons I decided to get DOOM on release was the SnapMap tool. I enjoy level creation tools and I missed out on the Mario Maker craze, so this was gonna be my Mario Maker (with guns). One of the maps I created got a bit of traction and was featured on sites like RockPaperShotgun, YouTube channels like GamesRadar+, the actual game’s Community Picks and even Bethesda’s SnapMap stream. The feedback has been overwhelming, so I wanted to talk a bit about the thought process and design of the map itself.

After playing a good chunk of the DOOM campaign and not really enjoying the multiplayer, I went ahead and streamed SnapMaps a bit. I played other maps while waiting for inspiration on what to make. Considering this was release week, the maps only touched upon the surface of what the tools could do. One map, which I don’t remember the name of, just had very long hallways with a ledge you could double jump to. While the map wasn’t really exciting, it reminded me how fun moving around in DOOM actually was. This was the basis for “Hot Potato”, a map I wanted to make during that same stream.

The pre-made room modules SnapMap uses had some choices that caught my eye. Namely, a module with at least two exits often had vastly different ways to get from one door to the other. There was an obvious path and a dirty shortcut in almost every instance. The fact that a double jump can be executed at any point of a jump or fall also meant plenty of air control. With all this in mind, I assumed that a parkour-styled mode would be fun. Now, there were some parkour maps that shipped with SnapMap, but I personally did not like them. They focused on precision-based parkour which is not something I think DOOM’s movement is good for. So I decided to go for “optimized route” parkour, focusing more on timing and figuring out a route, rather than actually trying to hit a platform.

Adding a sense of urgency was also important. Why would the player be in a rush? A time limit felt a bit passive to me, so instead I opted in for a gradual health decrease (explained in-game as carrying a radioactive core, hence “hot potato”). That also meant I could guide the player with health drops and use it to optimize the map’s difficulty. And so, the first Hot Potato (which I now consider a prototype) was born.

Looking back at it now, there are a lot of things I’d change, but for a first map attempt, I thought it was good. I later spent some time making a multiplayer mode, but since I needed to do playtesting for it and it was a bit hard to organize a 4-person group, I decided to do another single-player map. Since I had familiarized myself with the tools far better, I wanted to expand on Hot Potato and make it bigger and meaner. Thus began work on “Hot Potato: Thy Spud Consumed”.

My main design goal for this iteration was to always give players interesting choices. However, when you are under time pressure in a level, it is easy to not even notice a shortcut or alternate path. Another major problem was that certain modules were massive or confusing; they had an interesting layout that I wanted to use, but players unfamiliar with them would need to search for exits. To solve this, I went with the tried and true platformer method of using “coins” to guide the player. This also meant I could better balance the health gain vs damage in a section. Whereas the players relied on rare big heals in the prototype, here it would be frequent smaller heals.


I thought about what the “coins” (they’re more like containers, but lets call them coins) could also do. I decided to have them actually give the player a currency they would use in a shop. An official horde mode SnapMap I played had a shop, hence the idea, but I didn’t like the way it was laid out, so I wanted to try and make it more classy and snazzy. I think shops without a good shopkeeper are generally a waste, because it’s always a good opportunity to have a character that makes you feel welcomed or entertained. Think about Resident Evil 4, Wonder Boy the Dragon’s Trap, or Killing Floor? However, given DOOM’s aesthetics, the closest I could come to a likable person was the Cacodemon, so that’s what I went with. He’s surprisingly nice when he’s not trying to murder you! This is also why I added the ability to talk to the Cacodemon. I added a few random lines and he picks one whenever you talk to him. Apparently, the phrase “YOU LOOK LOVELY TODAY, MORTAL” was the most popular one (it’s my favorite, too).

Shops that sell upgrades are generally scaled with a rising challenge, however, Hot Potato’s works differently. The shop’s primary function is to make the game easier for players that are struggling. The map was tested and is beatable with one try and one shop visit per checkpoint, but it requires memorizing the map and having flawless execution. Since you keep your coins when you die and since coins respawn after 10 seconds, it means that the more you die, the more coins you have. This means you will be able to buy more expensive upgrades and make a section easier for you. However, since coins don’t give you points, players who die less will have a higher score. The upgrades the player can buy are broken down into health, speed and radiation resistance. The first two go up to rank 10 (health caps at 200 and speed at 300%), while the more expensive radiation resistance goes to rank 5. Rad resistance affects how much each tick of radiation damages you, and it goes from 10 to 5 damage at max rank. Initially, it worked like the other two stats, but it was too powerful during testing. This second variant ended up being a nice middle-ground.

In addition to the coins, the player can pick-up “donuts”. They are unique pick-ups that don’t respawn, don’t give you health, but give you more coins and points. To be honest, I just saw that there was a rotating donut model and I really wanted to use it. However, this ended up helping with the more “interesting choices” approach of the map design. Namely, each donut gives the player 70 points. This might not seem like much, but it’s the equivalent of 7 seconds on your time bonus. Each donut is placed so that you need to risk time and health to get it, but if you pull it off properly, it never actually takes more than 7 seconds. While the player isn’t meant to collect every donut, getting the best score on the leaderboard requires planning which donuts you’ll pick-up.

I should probably cover scoring now in more detail. There are three factors that determine score: completion, time, donuts. Completion is a fixed score you get for reaching the end of each section. The later the section, the more points (1000, 2000, 3000 respectively). This was in order to avoid the hypothetical scenario of players finishing a section with no time or donut bonus and having nothing to show for it. The time bonus starts at 3000 and is decreased by 10 every second, meaning if a player takes more than 5 minutes to complete a section, they get no bonus. The timer starts the moment the player picks up a core for the first time and ends when it is put in its slot. That means that between sections, players can take all the time they need to shop and rest, but once they initiate a section, they need to be quick about any upgrades. Finally, as mentioned before, each donut gives the player 70 points at the end of the completed section. This kind of scoring system was more versatile than relying on SnapMap’s built-in Par Time. It also means that a second of difference is clearly displayed on the leaderboards.

The actual level introduces new elements with each section, to give them a unique flavor. The first section is just vanilla running through various rooms. The second introduces lasers that shave off your health when in contact with them. The final section combines the lasers with plasma hazards on the floor which do massive damage. The lasers aren’t always meant to be avoided. While finding a route without lasers is quite possible, some of the best routes involve taking damage to save time. The plasma floors don’t adhere to this though and they are meant to always be avoided.

There are a few things I wish I could change about the map or that I wish SnapMap had let me done. One bug stopped me from spawning lasers after a certain point, so I had to be more stingy with my placement than I had wanted to be. The object/network limit stopped me from adding another section (the actual map grid had space for one more). I also wanted to include a give-up panel that let players quit the map in defeat. This would have let me keep track of the leaderboards to see how far players had gotten. I also wish I had added a few more Cacodemon lines and adjusted some checkpoint teleporters a tad (speficifally Checkpoint #1’s destination is on a confusing angle). However, despite being possible to do those changes right now, they are just tweaks, and SnapMap resets leaderboards apparently when you update the map, so I don’t think it’s worth it because the map is score-oriented.

One mistake I almost made was lock the shop behind the first checkpoint. Literally a few hours before people picked up on the map, I decided to make the shop accessible right away (I realized the first section was actually very difficult and the shop was meant to help with that). This ended up being a very good decision, since the Cacodemon became the face of the map and is what made people want to try the map in the first place.

All in all, I enjoyed working on the map and I enjoy SnapMap despite its limitations (I’m one of those people who prefer silly limitations). If you want to try out another map I made, here is a video on VIPER Sniper. It is a 3v1 multiplayer mode where one powerful sniper has to control points while security tries to kill them. It’s like Scotland Yard (the boardgame) with guns. Sadly, it’s hard to get exposure for multiplayer-only SnapMaps, let alone 4-player ones, but I enjoyed developing it and playing it with friends.

If you own DOOM, you can find Hot Potato: Thy Spud Consumed by searching either for #hotpotato or ZGLRZC92 in the game.