AEGIS Dev Log #2: Design Autopsy




Hi! I’m Eric, and for the game jam known as Eggjam #28, I created a game for the Playdate titled AEGIS. AEGIS is a turn-based roguelike where you control a shield using the Playdate’s crank in order to survive against hordes of enemies. You are currently reading a dev log about it!
In case you missed it, this is the second dev log for the game; the first is a timeline of the game's development for Eggjam #28. This one, however, is an autopsy: I want to explore what I see as major design problems with AEGIS, detail how they affect the game, and talk through some solutions I'm thinking about to address them. If that sort of thing interests you, read on!
---
So: what’s wrong with AEGIS?
The main culprit is also the issue that is the hardest to solve while maintaining the identity of the game, and that’s that the shield nullifies zugzwang. Zugzwang is a term that comes from the chess community to refer to situations in chess and other turn-based games where your best move would be no move at all, yet you are forced to move by the rules of the game (the translation from German is roughly “the compulsion to move”). This feeling is extremely common in Broughlikes: because you and enemies move at roughly the same time, any situation where you are an even number of spaces away from an enemy is preferable over one where you’re an odd number of spaces away. When you and an enemy are at a diagonal to one another, you’re in zugzwang—moving towards them would give them a free attack on you, and no move you can make will put that enemy more or less than one space away from you.
A common “solution” to zugzwang is to give the player some way to wait a turn and allow any enemies to move closer to them, but Brough’s games resist those easy solutions; it’s clear he views zugzwang as a crucial element in turn-based games. 868-HACK features a couple of examples of how the game is designed to highlight zugzwang: your basic attack in 868-HACK is ranged, but you can only attack in the four cardinal directions, and only when there’s an enemy in view, so if an enemy is diagonal to you, you may be able to attack a distant enemy to give the closer one a turn to move into your firing line. You can also hack different abilities in the form of programs (or progs) in 868, one of which is .wait. Programs, however, always have a resource cost associated with them; to use .wait, you must spend one point of energy. There’s no free way to wait a turn in 868—it’s all contingent.
Returning to AEGIS, one assumption I had is that zugzwang came for free with a turn-based game. This may still be true, but what I did not consider is that there are ways to diminish zugzwang that are not as obvious as a wait button. When you’re in a nominally zugzwang position in AEGIS, all you have to do is position the shield to block against any incoming attacks on your destination tile. Congratulations! You have experienced none of the beautiful tension and frustration that is zugzwang.
This simple fact transforms the act of manipulating the shield from its ideal state as a mechanic that demands decision-making and reflects some measure of the player’s skill and experience with the game to an action which is rote and obligatory, and that is poison to the experience I’m aiming for. The problem, of course, is that the shield is also a key part of the pitch for the game!
---
I have two ideas for tweaks to the shield directly to address this problem, though alone I don’t think they’ll be enough to fix the issue. The first is to reduce the shield’s potency in one of two ways: either change the shield to be 8-directional rather than 4-directional, or change the tiles defended in each shield position.
As explained above, when the shield is facing in any given direction, it is technically defending against three tiles. More importantly, though, is which tiles each shield position is defending. When the shield is in a cardinal direction (north, south, east, or west), it is defending against one tile orthogonally and two tiles diagonally; the opposite is true of the shield in a diagonal position—in this case, it is defending against one diagonal tile and two orthogonal tiles.
When you combine this difference with the fact that enemies only attack from orthogonally-adjacent tiles (that is, non-diagonal tiles), then the problem becomes obvious: when the shield is in a diagonal position, it has twice the utility (two attack vectors defended) as compared to when it is in an orthogonal position (one attack vector defended).
Thus, one line of thought suggests that I should eliminate the diagonal shield positions, which consequently would even out the utility of all shield positions by eliminating the outliers. The shield may feel less responsive this way, with only four positions to snap to based on crank rotation as opposed to eight, but it would align more with the current design, where enemies can’t attack you at a diagonal. Still, there exists the future possibility that enemies will attack at a diagonal, so it might not be the best solution long-term.
The other line of thought is to reduce the number of tiles that the shield defends in any given position, most likely down to one tile—the tile immediately adjacent in the direction the shield is facing. This also levels the utility of all directions, though it makes diagonals useless until enemies are capable of attacking along that vector.
---
Even with one of the above changes, however, the shield still largely negates zugzwang states, just a little less effectively. Another factor in the shield’s potency is its constant availability. If the shield could be broken or lost, one might cling to it with even greater fervor.
This concept is pretty simple: the shield now has its own health bar. It loses durability based on the number of attacks it absorbs, and when it loses all its durability, the player no longer has a shield to defend with. My hope is that shield durability will turn zugzwang situations more into negotiations—there needs to be some sort of reason not to point the shield in a particular direction.
I don’t think this is the complete picture, though—not only will the player need some way to recover their shield in the long run, it’s probably going to be necessary to recover their own health as well. The availability of shield/player health recovery will definitely lean shield; I’ve not been comfortable with the player having no way of recovering their own health, as it’s more a case of “three strikes and you’re out” rather than a resource you need to be mindful of, but it should certainly be more precious and scarce than their shield’s durability.
---
As to how players will recover their shield, I think this presents an opportunity to address another issue with AEGIS: the player never has an incentive to move around the board. This makes the degenerate case where the Myrmidon is backed into a corner slaying all attackers such a common occurrence—with no other reason to move about the board, you find the most advantageous position and stick there.
In all the Broughlikes, there are key elements that give you reasons to move to specific areas of the board, and more importantly, choice in where and how you do so. 868-HACK has the exit node, but also every wall tile in the level contains either a prog or points which you can claim by hacking them. Cinco Paus similarly has an exit door, but also litters each level with treasure at random—chests give you 5 points, potions give you one health, keys unlock gates, and books reveal one effect of one of your wands. Imbroglio spawns a new gem whenever you pick one up, and gems act both as your primary scoring metric as well as a health recovery mechanism—you regain both red and blue health when you collect a gem.
Each game gives you some mixture of elements which are mandatory (advancing through exit doors and collecting gems constitute your most fundamental goals in their respective games), and others which are optional. Those optional elements exist upon a spectrum of value, and that value can fluctuate depending on the player and their play style; players will develop their own heuristics for what each element is worth, and whether the risk necessary to acquire it is worth the reward.
AEGIS currently has nothing like this. Getting a new shield after losing one feels like an obvious way to provide some reason to move across the level, but I think I’ll need more than that: pieces of armor that act as player health, spears that can be thrown as ranged weapons, maybe some source of points (the favor of one of the gods?).
Instead of just spawning these objects at random intervals, though, I think I want enemies like the revenant to be holding them as trophies, so you need to slay them in order to claim them. This means you must be prepared to fight these tougher enemies if you want to replenish your health or shield. What’s tricky is giving the player a way to opt into this risk-reward situation; if a revenant spawns in carrying a trophy you don’t need, or one you want but are in no position to claim, but it moves towards you like all the other enemies, how would you choose to disengage in that fight? Maybe revenants are peaceful until you attack them; maybe they just move from one side of the screen to the other and you have to stop them in their path. I’m not sure!
---
Quick scoring idea: player starts with 1 health and 1 armor; when the player is hit, armor goes first, then health. If you pick up armor while you have armor, you gain an increasing amount of Glory (1 point, then 2 points, then 3, and so on), but when you lose your armor, that amount resets back to 1. So staying alive is necessary, but staying alive and never getting hit is how you accrue high scores.
Part of what I’m aiming for with picking up pieces of armor from the battlefield is evoking how fiercely the Greek and Trojan soldiers fight to reclaim the armor of their fallen, so that it won’t be sullied by their enemies. The gods love that shit!
---
On the topic of enemies and their fierceness, there is much to be done about the enemies in AEGIS. To reiterate, the one enemy type in the game currently, the eidolon, has 1 hit point, does 1 damage, and moves towards the player 1 tile at a time until it’s adjacent. I don’t think the damage the eidolon deals is the issue, so let’s focus on health first.
I’m a little stumped on this one. On the one hand, the eidolon having one health contributes to a feeling that they’re not a threat; if one is next to you, attack it and it will immediately cease to be a threat, and if there’s another eidolon waiting to fill its now vacant space, then it just spent its action this turn on a move. Rinse and repeat.
On the other hand, increasing the health of eidolons doesn’t do much on its own except make the game feel more punishing. If you attack an eidolon and it doesn’t die, it gets an attack on you. Fair, but you’ll be dead after three fights at that rate. Only way to win is not to play, etc.
As always, we consult the ancient texts for wisdom. In Imbroglio and Cinco Paus, attacking an enemy works exactly as the latter example above; you attack, and if the enemy lives, they attack back. That’s parity. In both games, two things make this acceptable: you have multiple ways of dealing damage at a faster rate than your enemies, and you have multiple ways of regaining health. It quickly becomes clear that attacking with the wrong weapon in Imbroglio, or without a wand effect in Cinco Paus, is a losing game—you need to eke out your advantages in other ways, and recover quickly after an unwanted scrap.
868-HACK works quite differently. As already explored, your attacks in 868 are ranged, but more importantly, attacking an enemy stuns it for the turn; that enemy does not get to move or attack back until you act again. This effect is quite powerful, but you’re still quite liable to get helplessly surrounded in 868, and the fact that you can’t move in the direction of an enemy without attacking (since that enemy is an attack target) makes it harder to escape tricky situations like that.
That feeling of being surrounded is a big part of what I’m aiming for with AEGIS, so I think I’m going to implement a similar hit-stun effect as 868, but in order to make it sing, I’ll need to address the other big problem with enemies: their pathfinding. Based on their current pathfinding algorithm, the eidolons will staunchly refuse to path around other enemies that are stationary because they don’t want to move out of the same row/column as the player. Once I notice that, as the board fills up, many enemies don’t even try to move in a turn, I could not stop seeing it.
The goal here is simple: just give the enemies a decent pathfinding algorithm, preferably one not cooked up solely by yours truly. Playdate has a pathfinder class; I’m sure I’ll be using that! Again, the behavior doesn’t need to be super complex; enemies simply need to prioritize any movement, even in situations where they’re making non-optimal moves, and they need to be aware of their surroundings (other enemies).
---
One final detail that I considered as a quick fix to the jam version, and might want to explore after these other fixes get in, is that the player should take damage if they’re standing on a tile when an enemy tries to spawn there. This is obviously to encourage players to not just stick to the walls/corners, and thus it feels like a cheap solution to a bigger problem, but it feels somewhat appropriate to the scenario: the Myrmidon is lost in the fog of war, and just because he can’t see what horrors lurk just beyond his view, doesn’t mean they can’t see him and decide they want a slice!
---
That's what I've got at this moment. If you got this far, thanks so much for reading! If you played the jam version of AEGIS, thanks so much for playing! I can’t promise nothin', but I aim to make some more dev logs as AEGIS development continues beyond the scope of the jam. Stay tuned for further updates!
Get AEGIS
AEGIS
Last of the Myrmidons, raise your shield
More posts
- AEGIS Dev Log #1: Eggjam #28 Postmortem18 hours ago
Leave a comment
Log in with itch.io to leave a comment.