top of page
Anchors_deep_logo_in_it (1)_edited.png

Anchors Deep is an action-adventure game with stylish combat. The story focuses on the Fish Guardian, a creature who procreated an aquatic race called Fishnity.  After the Trident Seafood Corporation almost eradicates his race, he takes it upon himself to exact his vengeance against humanity using an Anchor and a Fishing Rod. 

The game was featured in the 2022 NYU Game Center showcase. I was the programmer and combat designer on this project.

Platform |  PC                                     Engine | Unreal Engine 4         Duration |  Six Months                       Team Size | 
Playtime | 10 Minutes                         Download | 
Link                        Roles | Combat Designer, Enemy Designer             

RESPONSIBILITIES​

  • Designed and prototyped attacks by focusing on startup, active, and recovery frames to adjust animations  using Unreal Engine Blueprint.

  • Programmed and designed all Enemy AI archetypes, including attack patterns and movement behaviors.  

  • Balanced all player and enemy abilities by tweaking damage values and hit stun 

  • Scripted all level encounters and camera behaviors.

  • Helped design controller mapping, and implemented it for combat.​

  • Collaborated with level designers by greyboxing combat spaces for players to navigate the combat system against enemies.

  • Implemented a parry and guarding system. 

  • Developed a soft lock based on whether enemies are in the player's vicinity.

  • Implemented audio, UI and visual effects.

DISCOVERING THE CORE LOOP

Let's get right into it! Anchors Deep's gameplay was heavily inspired by Ninja Theory’s DmC: Devil May Cry during it's prototyping stage; the initial emphasis for this game was to have over the top, stylish combat and enemy design that will always engage players throughout the game’s progression. The narrative department was eager to incorporate lore and NPC dialogue into the game, shifting it from a stylish hack and slash to a fun action adventure game! 

 

The fishing rod was one of the most challenging mechanics to design and implement. Our character is a Fish Guardian avenging his race against humanity, so we had to structure a way to make the combat feel playful and meaningful. 

Combat would feel repetitive if we are not using it as a solution to varied situations. I decided to use situational design as a method to discover what our core mechanic is. Situational design is the process of envisioning your player in the middle of a challenge (or obstacle) and how they would overcome it in relation to the game's narrative pillars or core mechanics ( for this case it's our narrative pillars). This allowed me to propose the following questions to the team:

  • How does combat help solve our situations depending on our narrative pillars?

  • In what way can we defeat our enemies, and why should they be defeated a particular way?

  • Depending on our situations, what are the choices available to solve them in fast-paced combat?

We realized for us to emphasize on the Fish Guardian's hatred towards humanity, the best weapon of use would be a fishing rod. As me and my teammates brainstormed, we kept asking "what if we could reel the humans?" and laughed it off. We realized, the moment we laughed at the idea, it made total sense! Our point of reference would become DmC's Ophion Demon Pull. 

AnxiousSereneAmericanshorthair-size_restricted.gif

DmC : Devil May Cry (Capcom 2012)

48e1a7_67b27b331a3d4a7aa43c9c17f8e38422_mv2.gif

Very early prototype, initially named as "Fishermen Will Cry"

As the programmer on this project one of my main goals was to create tools that were highly accessible for our level designers to use. The way the hook feature works is dependent on a regular actor which includes two scene components and a static mesh. The scene components are called HookLocation, and CenterPoint. The first is the controllable location to which the player will translate to via a VectorLerp, and the second is used to decide the end location for the Cable Component feature which Unreal Engine provides.

ezgif-5-92639fb624.gif

Finally as combat designer it's vital to emphasize game feel, which is why I incorporated the Unreal's built in Cable Component to make the fishing rod have a long thread targeted towards the CenterPoint, a fishing rod isn't a fishing rod without a thread, so it should FEEL like one. I also adjusted the velocity value to stop the player mid air if they were to successfully hook to something, accompanied by a screenshake for feedback. Here is a GIF showing the thread as a close-up. 

ezgif-1-f35791d1fd.gif

DESIGNING AND IMPLEMENTING MELEE COMBAT

There are four very important things I had to consider when designing Anchors Deep's combat. 

  • Frame Data | Startup, active and recovery frames are considered for fair gameplay. 

  • Soft lock  | Must detect, rotate and move towards the nearest enemy actor for consistent combat. 

  • ​Audio | Attacks must have different pitch ranges to detail significance.

  • Visuals | Conveyance of moves from start to finish using VFX, giving players an understanding of performance.

Let's first start with Frame Data. Anchors Deep relied heavily on animation frame data, thankfully Unreal Engine offers developers and designers an accessible way to have full control over animation frames using notifiers. Much of the combat in the game is notify driven as seen below.

ezgif-2-be8ff21448.gif

Each attack animation's data includes six notifiers which act as the main contributors to gameplay: 

  • Hit Detection | spawns a spheretrace for a particular amount of frames, to detect if something has been hit.

  • Launch FwD | a notifier which fires logic that boosts the player forward by multiplying their forward vector by a float value. 

  • Shake | a notifier which initiates a camera shake for a 0.25 duration, magnitude is consistent to avoid motion sickness. 

  • Combo Window | a true Boolean notifier which decides the window for a successive follow up attack. If the player presses the attack button during this window of frames, they follow up with the next attack. 

  • Disable Combo Window | disables the Boolean notifier called Combo Window if the player misses the Combo Window frames.

  • Reset | will return the attack back to it's starting point. (very important for emergent combat! Used for cancelling active frames!)

The video below showcases all notifiers working together per attack. Anchors Deep has a set of 5 ground attacks, the video showcases the first four. Each attack offers a different forward launch value set by me to differentiate their affordances.

Next let's discuss about soft locking. One of the most important things in the middle of fast paced combat is paying attention to your surroundings, the game must work for you and never against you. As they always say, keep your eyes on the prize! Stylish combat is all about getting into your opponent, and tearing them apart like it's a piece of cake. Soft locking allows players to rotate, and target towards the nearest enemy, allowing for quick hits to land accurately without fail. The softlock I designed is dependent on SphereTraces which find the actor closest to the player, which will then force the player to look at said actor using a FindLookAtRotation node. The examples below showcase the soft lock in attack state and guard state:

ezgif-4-bd4ab2d8e6.gif

Soft lock when attacking

ezgif-4-56c3317251.gif

Soft lock when guarding

Sure, we might have a set of 5 attacks, and we might have soft locking however detailing how such attacks differ is incredibly important. Audio gives weapons characteristics and traits, without audio there's practically no sense of feel to the combat we have. Since we were limited to a short amount of audio assets, I decided to make use of what we have by manipulating random pitch sounds for each audio file used for combat. Unreal Engine's sound cue blueprints allows designers and developers to have control over pitch ranges by processing the file through a modulator. Every swing, and hit are processed through this blueprint to have random pitches and called in each animation of an attack. Take a listen down below:

Swing sound through modulator

Flesh sound through modulator

Finally, visuals. The previous examples I've shown used the default Unreal Engine pawn, but right now I'll be showing how character assets and VFX make a massive difference. The placement of VFX matters a lot in Anchors Deep, and the main inspiration behind the VFX placement was Dragon Ball Raging Blast 2. Part of helping players understand how a combat system works is to signify the start and end of a combo, with the addition of encouraging the use of core mechanics as a part of the system. Below is a video of me playing Dragon Ball Raging Blast 2, notice how with each successful combo cancel a yellow lightning impact will appear, these cancel signifiers alert players to make use of other abilities to perform larger strings. 

Anchors Deep's combat offers similar visual feedback, however in this case VFX will initiate at the end of an attack to encourage the use of the fishing rod as a means to extend combos. The visual placement occurs at the 5th ground attack, the air launch, and the 3rd air attack. Each of these attacks changes the trail color of the Anchor from white to red with a single flash to alert players that additional moves can be considered to extend combos. When guarding midway into an attack, players activate a blue flash to indicate that a move has been cancelled. Every visual cue is implemented as a notifier in Unreal Engine, take a look at the game with visuals:

ENCOURAGING THREE PLAYSTYLES THROUGH ENEMY AI DESIGN 

This one's a bit long. To craft good combat, we need to design enemies that work together with it. As stated in the first section of this blogpost, situational design is one of the most important methods for designing core mechanics, and engaging enemies. My process to designing enemy AI is to categorize the class of enemy I would incorporate in relation to the core mechanics I have at my disposal. For Anchors Deep, we decided to have three enemy archetypes. My first goal was to brainstorm and categorize each archetype and how they would behave in combat. I was responsible for implementing and designing these enemy archetypes with the narrative team. 

Enemy Archetypes:

  • Fodder | archetype which encourages stylish combat. The player's punching bags. (Med HP/ Med DMG)

  • Emphasizer | archetype which emphasizes a mechanic to be defeated. Muscle memory.  (Low HP/ High DMG) 

  • Enforcer | archetype which enforces a mechanic and/or encourages deep defensive or offensive play. (High HP/ High DMG)

Next, I would list out the mechanics I have at my disposal. The reason I list the mechanics is to understand how it corresponds to the enemy archetypes I was able to brainstorm. This will allow me to formulate how the player would overcome the situation of dealing with one of these archetypes using the core mechanics (reminder, situational design).

Core Mechanics: 

  • Fishing Rod | An object used to hook and traverse from platform to platform, it can be used in combat too. 

  • Anchor | The player's melee weapon used to defeat enemies. It's heavy, and packs a wallop. 

  • Parry/Guard | Using the anchor, players can counter an opponent's attack and wail in on them. They can also guard too. 

Finally, I was able to have a meeting with the narrative department on how to structure character backgrounds in order to formulate the characteristics of each enemy.  This allowed me to understand how to encourage three distinct playstyles in relation to the core mechanics and enemy archetypes: 

Playstyles: 

  • Stylish | Humiliate the enemy with ease and embarrass them infront of their comrades.

  • Ranged | Reach the enemy and defeat them to make sure they're out of your way. 

  • Close Quarters | This is upclose and personal. Stay on your feet, and read your opponent as fast as you can. 

By combining these three important pillars in enemy AI design, along with the narrative team's approach to the characteristics of each enemy archetype. We were able to finalize our main enemies, and here they are:

EnemyAI.png

TSC Sailor (Fodder). This enemy uses a harpoon, they have moderately normal health, and can be defeated quite easily. One of my objectives for the Sailor was to use an attack animation that had a larger number of startup frames for better player readability. Additionally, each attack from the enemy fires a particle of anticipation to detail that the enemy's attack has begun and that the player must consider the available options to counter said attack either by interrupting it or guarding. Their attack intervals range from 2-3 seconds. TSC Sailors can be launched, parried and practically toyed with, allowing players to utilize one of the game's three cores -- the melee combat system. The video below showcases the TSC Sailor's behavior:

TSC Armed Forces (Emphasizer). A ranged enemy archetype that uses a rifle. They require a little more effort to defeat as they are located on high ground. They have low health, but make up for the incredible damage they inflict on the player. Their bullets cannot be parried, however they can be guarded. My goal for this enemy was to make them slightly more challenging, leaving no room for anticipation but to detail the feedback of the attack using an elongated visual effect and sound cues. Their purpose is to continually train the player to close the gap between them using one of the three cores -- the Fishing Rod: 

TSC Watchmen (Enforcer). This enemy is up-close and VERY personal, they're huge and they enforce the player to enter a defensive state by bulldozing them. The damage they inflict is dangerous, and they use their fists in combat! Watch out, guard and stay alert, their super armor will need 15 hits to break and you don't ever want to be caught by their terrifying punches. Not only that, but they are smart enough to drag you into their zone of impact if you ever use your fishing rod, and they're too heavy to be launched into the air. I had three objectives in mind when designing this enemy:

  • Silhouetting | The larger the enemy, the better the animation's readability.

  • Rate Scale | The slower the attacks, the better it is for players to anticipate the next attack. 

  • Walkspeed | Slower movement proportional to size, giving room for strategic play. (what are my next moves as distance slowly closes?)

Finally, with those three objectives in mind, we allow players to rapidly build up their skills in close quarters encounters by using one of final core mechanics -- the parry/guard system. 

CONCLUSION

This is the end of the first part of a very long blogpost which goes over the combat design of Anchors Deep, I do hope you enjoyed reading this! The next one will be focusing primarily on encounter design and player skill-building. The combat design and development journey on this project has been nothing short of incredible, and it has given me an eye opener regarding the areas I should be focusing on in the future.

First I would like to thank the incredible team I had the pleasure of working with: 

  • Edith Chen (Visual Design/Level Design)

  • Eva Wang (Visual Design)

  • May Li (Visual Design) 

  • Frank Mengfan Huang (Narrative Design) 

  • Cassie Hui (UI Design/Narrative Design/Project Management) 

  • Apple Li (UI Design/Level Design)

  • Peter Seo (UI Design/Logo Design/Level Design) 
     

Previously one of my weakpoints was Enemy AI design, without the help of the incredible people in this community, I wouldn't have been able to acknowledge this. I would like to thank Robert Meyer, Professor Charles J. Pratt, and Zahid Ali Jeelani for providing their incredible feedback, notes and insight!! 


BADER ALQAHTANI

COMBAT DESIGNER / ENEMY DESIGNER

bottom of page