Mechanical Breakdown: Designing Player Abilities


Just like how the AI is a crucial factor in making a good stealth action title, it's important to balance the AI with the player. If the balance between the AI and the player is off, the experience could become too easy or too frustrating. To offset the enemy's overwhelming forces, the player should be presented multiple options to approach and take them out. This is mainly done through two aspects: the player's abilities and arsenal.

Player Inventory
The player's arsenal is an important factor for creating variety in gameplay. It determines the options the player has towards lethally/non-lethally taking down guards. While I could code each weapon/item individually from scratch, there are many functions that would be redundant. For instance, every weapon does something when the player presses the fire button, but they each fire in different ways. My approach here was to create an abstract Weapon class that defined some base variables & behavior, then have the weapon classes inherit from that base class. The weapon stat values (like damage, ammo, and range) are stored in a ScriptableObject and referenced by the weapon scripts so they remain consistent across instances of that weapon. This approach allows me to easily craft and iterate on weapon ideas, as well as allows for both the player and guards to wield weapons. Just as an example, the rifles you see the guards wield are actually variants of the standard pistol just with a different model and stats! Currently, there are only 2 equippable weapons in the prototype: a midrange pistol and a short-range stun gun, but more weapon types will be added in the future (placeable items are next on the to-do!).

Player Abilities
The player should also have things they can do that aren't just shooting and moving forward/back/left/right. For my project, I liked the idea of giving the player the choice of two different movesets: a "Swift" mode and a "Strong" mode. Both modes have the same directional movement and weapon controls, but these modes add extra options on top. "Swift" mode currently grants the player a speed buff as well the ability to climb tall objects to reach higher places, while "Strong" mode allows the player to push heavy objects and perform melee attacks.The moveset mode is determined by an enum in the PlayerController script, which is checked whenever a context-sensitive action needs to be performed. So, if an object is above the player's head in "Strong" mode, they won't be able to scale it and the same goes for pushing items in "Strong" mode. I plan to add additional options to these modes in the future (such as being able to hang from pipes and ledges in "Swift" mode), but for the prototype I wanted to primarily focus on the system logic and interactions within the PlayerController.

Get Prototype: Odysseus

Leave a comment

Log in with itch.io to leave a comment.