I need to do some boss stuff. The work si slow and tedious and requires lots of effort, but I also need that culmination of fighting for the game. Without bosses, I will be missing something critical in game loop — there will be no “spike” in there, no focus to levels. I will focus on specific abilities later; I need to add some crucial frameworks and interactions for now.
After playtesting a bunch how boss fights feel at their simplest, I think the arena (which is 2×2 nodes) is not big enough for a boss fight. I think I need a full 3×3 area for this. I can always trim the edges and make it smaller. I will call it “throne” (because that’s where the boss is and I can’t think of anything better). The rooms are similar to arena rooms, except I also need the additional version for the middle and side bits (with or without door):
I can then use my multi-node pass to generate a throne room, which is just a 3×3 room with “throne” designation using pretty much the same options I used for arenas:
And this spawns the room nicely:
I can then move my boss content spawn from arenas to throne rooms exclusively:
I also can adjust the styling to know that thrones are always styles as, well, thrones:
And this places the throne room in the dungeon (although I might need to tweak exact placement and restrictions):
I also need to add the minimap room sprites for the larger rooms, since I only have corners for 2×2 room:
I have a lot of places in code I need to change things for this, especially for debug. But it’s all straight-forward, so it’s not too bad.
One problem with boss AI (and every mob, but it’s much more noticeable on bosses since they don’t die quickly) is that they tend to move towards walls and stay there, barely moving away. In fact, I want my bosses to highly prefer to stand in the middle of the room or nearby. In fact, I can already do that since I have the “return to spawn” behaviour and I can make the boss desire this whenever they move away:
And this works nicely, the boss keeps going back to spawn:
While regular enemies don’t fire while they move, I also made the boss fire when it moves (towards the player, around the player, or back to spawn, as long as they can see the player). I might need to tweak all of this further, but I am already setting myself some ridiculously high standards for these behaviours.
I have also been thinking how to start boss fights properly. I don’t want the player to just enter the room and start shooting (like they can with regular mobs, which is fine for flow). I want some sort of trigger to start the boss fight. But I don’t want it automatic simply because I will need to provide extra feedback. In fact, I don’t mind if the player doesn’t fight the boss immediately, but gets ready for it. So I will just let them approach the boss and “activate” them. That means, bosses are “asleep” by default and don’t do anything:
The boss will also ignore any damage while sleeping, although I have no feedback for this yet.
Now, to actually get this “activation”, I need to rethink my approach to controls. I have way too many — upgrade terminal, exit teleport, weapon pickup, now boss activation. I think I need the same button for pretty much everything. I will just have a common “use” button for any action:
The problem though is how do I indicate which is the active use at the moment, as they would have a certain precedence built in. In fact, the only quick and easy way I can think of is just to tell the player that they can use it now:
And that works fine for teleport and terminal and I doubt I need anything else. It can get messy with weapons, but it’s not like I have that many of them:
In fact, I can in the future add weapon stats to the pickup prompt as well. Or any other kind of information I need. But for now all I care about is that the boss gets activated on cue.
The other part is that I want to close the doors to the boss’ room once the player triggers them. This means that my dungeon generator has to keep a unique index for each area it has and then pass that index to every tile in that room. More than that, it has to pass a secondary index of the neighbouring room (since the boss could technically be on either side). Then boss awakening has to gather all door tile from the same room and lock them — close and mark them as unopenable. When the boss dies, the doors get marked openable again. And this works fine (the door is unopenable here):
Anyway, that’s about it for this entry. I already spent way too much time over several days getting the individual parts working. This makes boss encounters more “scripted” and so more of an event rather than the player just running through the rooms mindlessly. I’ve been working on boss abilities in parallel, so hopefully I can cover that too shortly.