Hades-like: A Technical Overview

Josh Bouscher

--

As I mentioned before, one of my goals this year is to make significant progress on a personal project: building a Hades-like game in Unreal 5. I’ve started exploring a spawner system in code, but I’m not quite ready to share that yet. However, I do want to share my high level overview, as well as the very start of my planned Path to Implementation (π for short?).

Main Areas of Gameplay

There are two main areas of gameplay. To borrow XCOM terminology, there’s the strategy portion (what happens in The House of Hades) and the tactical portion (everything that happens during an escape attempt). The two modes of play feed into each other; Zagreus will get feedback from NPCs about what happened in his latest escape attempt, and the narrative progresses in the escape attempts as well (mainly during conversations with the Olympians). This means there will be a package of data that needs to persist across modes.

Unreal’s GameMode functionality can help to nicely separate the implementation between these two modes, and it isn’t difficult to package the persistent data to be available everywhere.

Tactical Setup

Drilling down into the tactical side of the game (escape attempts), we can see the content that exists in two different ways: static and dynamic. Static elements are things like each zone’s first room, the zone transition rooms, etc. Dynamic elements are a bit more obvious: placement of infernal chests, fishing points, Charon’s Well, room rewards, which exits are available, and so on.

Rooms, though randomly selected, come from a fixed bucket of statically created rooms. The enemy and treasure spawns are randomized, but the room layouts are not. This cuts down on the technical burden of assembling random rooms, and gives more control to the artists and designers in configuring rooms exactly how they want. Having seen the implementation done both ways, I can appreciate the randomness, but I think the handcrafted maps come out looking and behaving better in the end.

Encounter rooms typically have enemies spawn in waves as each group is defeated. Some encounter rooms have additional complications such as: Trial of the Gods (with the “spurned” Olympian attacking you), Thanatos kill competition, and 45-second survival mode with endless spawning.

There are also non-encounter rooms, “rest stops” of a sort, such as: healing fountains, zone-specific NPC safe rooms, or Charon’s shop.

The entirety of the combat system, including different weapon styles, all of the different effects of boons, and so on, is of course a major part of the tactical mode, though I feel it is the best “understood” in terms of technical implementation. I’m assuming at this point that Unreal’s GAS will capably handle a significant chunk of it.

The House of Hades

The strategy side of the game is where Zagreus does most of his NPC interaction and narrative progression. There’s a whole bunch of quest/story system stuff going on here that I will dive into at a later time.

There’s also the House Contractor to upgrade/unlock things around the House, the broker to trade items with, Nyx’s mirror where you get to customize your skills/perks, and the weapon & keepsake room where you customize your loadout before making an escape attempt (with or without the Pact of Punishment).

I love wandering around the House, as small as it is, and checking every corner for something new after each escape attempt. It took me 137 attempts before I fully filled my last relationship (with Hypnos). Only in the past few runs has the dialogue started to dwindle. I believe I’ve only yet to see one cutscene (spoiler alert?) in Zagreus’s room.

This part of the game, technically, is largely driven by the aforementioned quest/story system. Implementation for standing it up should be fairly light, comparatively — it’s the content that’s the big thing. (To me, Nyx’s mirror is the second biggest system, but on the strategy side it’s very minimal — just spending Darkness on the skills you want. The implementation for all of the skills would fall on the Tactical mode.)

Path to Implementation

π symbol
Photo by Taso Katsionis on Unsplash

The first steps will be toward implementing the tactical mode. The first thing that happens when you start an escape attempt is that you drop into the first room and a boon (or Daedalus hammer) is waiting for you. Only once you pick it up do the enemies spawn, and only once they’ve all been defeated can you exit to the next room. (The first room can also have a fishing point spawn, once you have access to them.)

Spawners

To me, the most obvious very first system to implement is spawners. It needs to handle a variety of things to spawn: enemies, boons, infernal chests, Charon’s Well, Pool of Purging, fishing points, money urns, regular urns…

The spawn locations are sometimes fixed (urns, first room’s boon, fishing points, etc.), sometimes not.

Perhaps the spawn system also handles choosing exit/room rewards? Makes sense to me!

Building out a system like this that is flexible enough to meet all of these demands is the kind of the thing I enjoy doing. My next technical post will provide some real implementation details.

Next Steps

  1. Once spawners can be setup, you need to be able to interact with things (rewards and exits, first and foremost). Being able to “interact with things” is a very simple phrase that actually carries a lot of implementation detail, although none of it is terribly interesting at this point.
  2. Combat is the next logical thing to do, but for the sake of systems implementation, we can skip it for now. We can spawn enemies with our spawners, but then kill them all with a console command to trigger the next wave or unlock the exit, and proceed without having combat in place. So the console command is the only required thing here.
  3. The next piece would actually be making sure exits lead to another room, simple enough as far as the teleport goes, but having something to decide which rooms can show up (e.g. so as not to repeat during a single run) will be useful.
  4. Once rooms can be chained together, we can group them by zone, setup the idea of boss rooms and zone transition rooms.
  5. Then we can standup the strategy mode with a single room to start with, and implement the idea of tactical death taking you back to strategy. Put a single exit from strategy to start a fresh escape attempt.

Closing Thoughts

Even with the π outlined above, there’s still a long road ahead! Breaking things down into manageable pieces is always an excellent first step to implementing complex systems. Even things that seem conceptually simple at first quickly expand once you really start drilling down into it.

I’m also fully aware that I’ve glossed over a ton of things or skipped them outright — for now.

I hope this exploration of technical details was useful or at least interesting. I plan to bring some actual implementation details next time!

--

--

Josh Bouscher
Josh Bouscher

Written by Josh Bouscher

23+ years of video game engineering experience. Looking to share my experiences and learn from others.

No responses yet