Dakota City’s just built different. Ebon’s powers cast a long shadow, but it’s the Apokoliptian Parademons and strange disappearances that have Static shocked enough to contact you. Will you be able to shed some light on the shadowy threat?
In Shock to the System, players will travel to the heart of the Milestone universe in Dakota City to investigate why these heroes and villains are disappearing.
Release Date: April 20, 2023
Ahead of preproduction the narrative designer established a reading list and watchlist. I and the rest of the team spent roughly one week consuming the content, making note of anything interesting such as story beats, action, and drama. For Episode 45, we watch the animated series Static Shock, and read Static: Season One, Static: Season Two, and The Death of the New Gods. Great stuff!
After completeing our research, the design team reconvened to review our notes, and map out the story beats, characters involved, and potential sequences. This phase was crucial as it would give us a clear understanding of the canonical story arcs, what the superheroes/supervillains might do within the context of their characters, and what kinds of missions they might assign.
In the end we decided to produce four instances: a two-player Duo, a four-player Alert, an eight-player Raid, and a 75-player Open World known as Dakota City. For purposes of this portfolio, this subpage will focus only on the open world and the ways in which I contributed alongside two other encounter designers.
Roles: Combat Designer, Encounter Designer
Dialogue sequences generally take place across both scripted interactions and cutscenes, but we found that cutscenes detract from a fun experience in an open world. We did however have multiple vendors, quest givers, and baddies and wrote lines accordingly.
Episode 45 planned for a broad scope of content aimed at player retention that would contain roughly 30 encounters evenly split amongst three daily missions and two weekly missions. We also outlined and ambitious massively-multiplayer boss ring containing five bosses, including a full-out brawl between up to 75 players and all five bosses at one time. It was wild.
Rapid prototyping began immediately after the brainstorm phase. Our hope was to build at least one playable encounter a day, and planned on holding playtests every Friday. Changing resources set this back, but between myself and two other designers, we built roughly 25 prototypes in three weeks, only five shy of our goal.
Tools: Unreal Engine
This prototype tested how players could liberate civilians who were possessed by a "pain field" controlled by a supervillain.
If/when we found the fun, we placed marker instances throughout the open world areas to efficiently spawn the encounter data.
Gameplay consisted of players deactivating the device, and then having to protect it while baddies rushed in to reactivate it.
To playtest more effectively, we can then boot up a local server and spawn the encounters throughout the open world.
Art and design met near the end of the planning phase to walk through the scope of each instance and what new assets design would like from art. The open world for this episide was primarily in need of models and FX, with a few icons specific to the new map.
Since Dakota City was an all-new map, the environment team owned the first pass. After a quick flythrough we realized no design changes needed to be made, and promptly began work on our designs.
We reviewed all of our encounters and determined the best way to pace daily and weekly missions.
This outline is what we refer to as poweder kegs, and are the containers for each area's mission.
Daily 1: Ebob's Shadow Monsters
Mission Giver: Static
Daily 2: Apokolips/DeSaad's Sadistic Parademons
Mission Giver: Grail
Daily 3: Fearsome Five Minions
Mission Giver: Steel
Weekly 1: Fearsome Five Boss (Individual)
Mission Giver: Rocket
Weekly 2: Fearsome Five Boss Ring
Mission Giver: Icon Projection
Hub/Engagement
Mission Turn-in: Cyborg
In most cases open world NPCs are either reused or partially modified. Due to the fact that Dakota City was a brand new map, it meant brand new characters. Characters we needed were itemized in the art requests, and once we had the character body data we would script their behavior.
Companions are a major aspect of the game, so it's critical we made interesting ally NPCs. We want these characters to be helpful, but not so powerful that they take care of the job themselves.
The example above is an AI strategy with simple rules that define how they character will move and navigate specific locations within the area.
Bosses are not often a large component of open worlds in DCUO. Because this map was nearly four times as large as other open world maps, we wanted to add more flavor by including a boss ring.
The example above is a more complex set of rules that depends on sophisticated logic (it was very challenging for me) that defines how it targets players in balanced way for 40+ possible players, what events are to be called, and what special attacks should be used.
When it comes to bosses, our players expect novelty. In game based upon superheroes and supervillains, it's crucial we build encounters full of action and drama. Each boss we design almost always comes with a fresh set of abilites unique to them. Combat was a new experience for me and this was my first time building and balancing combat mechanics.
Mammoth needs to first mark on of the up-to-50 players as the target he'll attack after leaping
Identify players within an 80 meter sphere (to consider players who are flying at the time of attack)
Only consider characters and disregard enemy adds, allies, pets, etc.
Tag them as the target for 50 seconds
Once Mammoth was in the air, he'd come crashing down and pummel the tagged player
Create a 3 meter sphere area around that will apply damage to the tagged player
Delay it by 1.5 seconds to allow for the animation to finish
Target himself to absorb some of the damage taken as health
For a a charged attack, Mammoth with need to prepare as a means for player messaging
Target himself to apply a tag that can discern player attributes
Generate a 2 meter cone around him and charge at random players (e.g., random_most_hate)
A cone was used so that as Mammoth got closer, his delivery mechanism would become wider
If the player is blocking, do less damage
If the player is not blocking, do more damage
Regardless if the player is or is not blocking, knock them back at a magnitude of ten units, an angle of 20º, and keep them on the ground for 1 second
Mammoth would repeatedly jump up and down and crash upon players
Generate a 2 meter cone around that pulses up to eight times
If the player is blocking, do less damage and push them back at magnitude of five units, an angle of 15º, and confuse them for one second
If the player is not blocking, do more damage and push them back at a magnitude of 15 units, and angle of 15º, and confuse the, for one second
Mammoth's fight was immensely complex and became increasingly difficult to maintain. As you can see from the adjacent example, the script was massive, and the size of it alone made it almost illegible.
The fight included a variety of special attacks, and to keep the fight fresh while keeping players informed, Mammoth's AI sent many events through the encounter. Many of these were for player messaging like FX or lines of VO, but other times it was for enemy adds.
There are a groupings at the upper-left and lower-middle with numerous nodes. This is where additional baddies came in to fight. There are so many to enumerate every NPC that could possibly come into the fight, and then the single node that feeds into it would randomize which of them or how many should spawn in when triggered.