The Creation of an Enemy
Evenfall is nothing without enemies to combat with. Well, it would be a walking simulator without them, at least. Building cohesive enemy groups is an important part of the game development process. I thought it would be fun to write out my process, so let's break down how an enemy is formulated and put into the game.
Step 1: Ideation
This is the foundational step: coming up with an enemy that fits the world, lore, and gameplay needs. Of course, the most important question is: "what enemy will make the game more fun to play?" followed by "how can this enemy be thematic?" and "how will this enemy work in the world and alongside other types of enemies?"
In Evenfall, enemies are broken down into several categories:
- Damage dealer
- Status inflicter
- Road blocker
If you're familiar with multiplayer RPGs, these are very similar to some classic party roles, such as DPS, tank, healer and crowd controller. I take the same philosophy for creating an array of enemies that work together to fight against their own boss fight: the player.
An enemy is usually 80% one type, and 20% another. On occasion, I will roll up three types into one, but rarely will I go beyond that unless I'm building a boss fight. There are also natural pairings, like Tank/Damage Dealer (perhaps an Earth Elemental?), or Status Inflicter/Support (the Rusalka enemy holds down the player, but doesn't damage them).
So, I'll look at the current zone I'm building enemies for, and see where the gaps are. Does this area need more damage output? Does this area need more road blocks? Are road blocks even good for the design of the area? Sometimes the complete omission of an enemy type leads to better gameplay, and that's a good thing too.
A great example of this approach to cohesive enemy design is the Salmon Run mode in Splatoon 2. If you haven't played it, its basically 4 player holdout mode, with basic enemies that just walk towards you, but then an array of "boss enemies" that all have their own patterns and abilities. In isolation, these enemies are easy to take out. When they pile up and you've got 12 boss enemies all on the map at once, you suddenly are being rushed, sniped, bombed, run over and smacked all around. This makes you really have to focus your attention to the right places.
Let's pick an enemy I'm currently building and look at how it fits in. My current zone focus is an elemental area called "The Riverlands." As the name implies, there's a whole lotta rivers. What comes with lots of water? Bugs. Let's make a bug.
The Spearfly enemy is a work-in-progress distraction and support enemy, as an 80/20 split. The 20% support comes when it pairs with a Spearmother, a larger bug enemy that creates more Spearflies. The Spearflies will swarm between the player and their mother to block projectiles from killing her, while she produces more flies, making her a support with a bit of "tankiness."
Plus, it's an tiny, annoying little thing:
Step 2: Implementation
So we have our concept, we have our fit, we now need to actually make the dang thing. I always start with a simple static sprite, or placeholder art like a simple box or circle with some way of identifying which way the enemy is facing. From there, I begin by working through developing the various states of the enemy's logic, starting with "Idle" to represent when the enemy is just kinda hangin' out. Here's a quick peek into the states for the Spearfly:
- Idle - Not moving, just chillin'
- Roaming - Moving to a new location, going back to Idle when it is done
- Chasing - Following the player when it has been aggro'd
- PreAttack - Ramping up for an attack, this is where you telegraph the attack to the player
- Attack - Actually performing an attack
Sometimes there will also be a PostAttack state, but in this case, once we trigger from Idle/Roaming to Chasing, we let the stupid little bug just choose when to attack, and after the attack, go right back to chasing. This is a pretty simple enemy, and only has a small handful of states.
I won't dive too deep into the actual code, but this is effectively just a sort state machine, which is to say the enemy has a "state," which dictates its current behavior, and it can transition between those discrete states.
After the behavior is built out to a satisfactory level (with a lot of testing and reworking involved), we add in the actual art for the enemy, usually controlled by its states, and then it is time to move on to the last step.
Step 3: Polish
It's time to add some "je ne sais quoi" to our enemy, only we actually do "sais" the "quoi" here because its what we're about to do. That said, it's not always prescriptive what you need to do to make your enemy "feel" good in the game, but you can safely bet it'll include sound effects, particle effects, visual flair, and number tweaks.
I go through combat with the enemy and see what feels raw. Does the attack need more distinctive SFX? Are the attacks telegraphed fairly? Is it dealing damage or affecting the player in a way that makes sense outside of isolation?
Small tweaks, mostly visual or minor movement and damage tweaks are the name of the game. Dial in the enemy, test it with more of its own, or with the rest of the area's cast of characters. This process takes a while to dial in just right, and usually for my process, it happens for the rest of the level design process, as I have to tweak different enemy types to better fit the direction I'm going in.
So that's a quick look into the enemy design process for Evenfall: Age of the Storm! Granted, this is a high level overview and only looking at simple enemies, not so much bosses or minibosses. I've found that this process helps me build cohesive collection of foes to fight.
Until next time!
Leave a comment
Log in with itch.io to leave a comment.