Doom The Dark Ages


Summary

Doom The Dark Ages was the latest Doom game and the last project I worked on for id Software. Through development I became a Senior Technical Designer and the point person for NPCs. I focused on developing what was needed to build NPCs with robustness in their animations and customization options. I dabbled in animweb design, modular scripting, and customization implementation on top of creating gameplay prefabs for level designers.


For the NPCs in the main game, I helped develop a toolkit for implementation with a variety of options of how to approach setups. I was able to assess what type of entities were needed, what animations needed to be captured, and how to build out the interactions. I created modular scripts that were able to be attached to animated entities and could be customized with the use of property variables. These setups also introduced me to animweb design and how to build out the flow of animations.


Going into DLC, I was able to lean on the scripts that I already built and focus more on what the interactions of the NPCs were doing. The biggest technical challenge of the DLC was mass randomization. There were over 600 animated entities that made up the NPCs in the map, Uprising. With a short amount of time, I had to learn python to create scripts to affect mass entity selections. Thankfully with my scripting background I was able to ramp up quickly. I created scripts that were able to randomize genders, outfits, and animations. Without diving into something new, I don’t think the final setup would’ve been possible with the amount of time we had.


A side from doing NPCs, I did work on a scripted AI, the tank. The tank uses our visual scripting to run all of its logic. Unlike the Trials of Maligog boss fight from the Eternal DLC, the logic this time around ran with states. The states helped compartmentalize functionality and limit what was capable in each state. The original design had patrolling capabilities, but due to the size of the arenas, they were relegated to remaining stationary in encounters. The shipped functionality is waiting for the player to become in range and then aim and shoot at the player.


An ambient feature in the game were cultist circles. These were prefabs consisting of AI spawners and FX entities for the summoning circle. The spawners of the prefab were able to be hooked up to an encounter manager, and that manager could talk to and shut off the FX logic of the prefab when all AI were killed.


I also created gameplay prefabs for level designers to use in there levels. The one used the most was the bash wall prefabs. They consisted of a logic entity, various meshes and FX, a target melee, and a bounce pad. The player was able to target the target melee with the shield and bash towards the wall. The logic would listen for the player to be in range and activate a destructible to break the wall. The player would be flung with the use of the bounce pad. This setup was modular by design and multiple prefabs were created with the same logic but the meshes and FX were updated with each new prefab. Since they all the ran the same logic it was easy to do updates and make sure there was consistency between all prefabs.