Tuesday, 22 April 2008

Unangband Dungeon Generation - Part Nine (Endgame)

(You probably want to read parts one, two, three, four, five, six, seven and eight before starting this).

When designing a game, the most important aspect of your design is how the game ends.

This is a self-evident truth, but it is amazing how often it is overlooked. The game should have a simple goal, which drives the game play towards an inevitable conclusion. In Chess, you must attack your opponent's king and leave your opponent no safe move to escape. In Angband, your goal is three-fold:

1. Stay alive.
2. Kill Sauron.
3. Kill Morgoth.

Everything else in the game is extraneous.

Unangband complicates this, by putting further road blocks in the way. In this process, I've made the intermediate game-play arguably more enjoyable, but the final battle with Morgoth is anti-climatic as a result. And the final few levels: well... complaints have been made about the length of the game and unrelenting difficulty at the lowest depths.

Counterpoint: People don't play games to their conclusion. And when they do, many games break the rules for the final boss fight that they have established in the lead up to this encounter. I enjoy games the most which end up in a post-modern explosion, or a falling denouement, breaking the rules of the game to transcend its boundaries.

The fight with Morgoth should be game breaking - explosive, memorable, unusual. He should curse your weapons and armour, blasting your precious gains from your body, just as he summons the uniques you have previously killed from beyond the grave to fight you again.

Or the encounter should be compeletely unexpected: An Architect sitting in a room full of monitors, explaining consequence of choice and free thought, or Count Dooku telling Obi-Wan the Emporer's plans because Kenobi is blind to the truth when it comes from his enemy. You should have your weapons stripped from you, and fight to death with crysknives in front of the Shaddam IV, after all the trappings of a far future civilisation are stripped away. Having lost your armoury, you should face Combine soldiers with a super-charged version of the Zero Point energy device, manipulating your environment as a shield, weapon, key.

Angband's goal is often parodied:

1. Go to General Store
2. Buy lantern
3. Kill Morgoth

and this parody reveals as much about the game play as the surface incentives the player responds to.

So how should the game end?

The point I argued to start with suggests that the final fight should be an expression of the best the player can be. That suggests an opponent which encourages the player to excel at what they are good at, as opposed to negating their most powerful abilities. If the player uses fire, they'll need to conjure up more powerful fire than they've ever used before. If they use swords, they'll need to wield it for longer, cut deeper and let more blood flow than any other battle. Whatever abilities they have, they should be tested.

But the final fight with Morgoth does none of this.

There is a good candidate for this type of game design, who can shift shapes so that at any point in time they may be vulnerable or immune to the player's attacks, forcing the player to switch strategies and retreat when they are weak, and advance when they are strong. I am, of course, referring to the shape shifter Sauron. And it seems to me that a well thought out implementation similar to FAAngband's should allow the player to be the best that they can be, provided the timing is right and fortune favours them.

But it's not by accident that the first two movie examples I gave are from the second 'difficult' movie in the triology (And I deliberately avoided mentioning the unveiling of a filial relationship in a related trilogy). It is undoubtedly true in Angband and related roguelikes that you will have had a closer brush with death at some point during game play then you will in the final fight with Morgoth.

This is especially difficult in role playing games, where the accumulation and management of resources is a critical part of the game. Many RPGs can be played conservatively, and most have collectible resets, which allow you to recover during the final fight back to your starting condition. As a result, since it is the final fight, your hit points are equivalent to what you currently have, plus whatever healing resources that you have had the patience to collect during the game.

And this patience could equally be viewed as grind. If you can collect one 'potion of Life' (or Pheonix Down, or whatever your game equivalent is) for every twenty minutes of game play, most people will grind out this collection process until they have a huge buffer of life before the final fight, because they can. And I don't want to encourage grind.

What does Rogue do? Looking at the progenitor of all roguelikes is an important source of inspiration. Rogue ramps up the difficulty, the further you play, so that at the lowest levels of the dungeon, even surviving is a victory in itself. Other games, notably Steamband, make the final few levels a desperate succession of calculated gambles. I could do this for Unangband, because as anyone who knows Tolkein's mythology well, there are worse things out there than Morgoth.

I'm talking about Ungoliant.

Morgoth is no slouch in the ultimate evil department, but even he is afraid of Ungoliant. He needed a host of Balrog to help fight her off, after he refused to give her the Silmarils. If I make Ungoliant suitably dangerous, and have her wandering around the depths of Angband, the player may fear for their life long enough that the risk of looking for healing outweighs the risk of fighting Morgoth.

So two possible strategies to improve the Unangband end game are to allow Sauron to shape-shift, and to make Ungoliant a force to be reckoned with.

And how does dungeon design complement this?

I expect that the deepest levels of the dungeon will be the most open. This makes the player uncomfortable and in the riskiest position that they can be in. Open spaces force the player to creep around, a mouse-like Beren and Luthien avoiding the greatest dangers, but given enough free passage to pick their own path to their enemies. It'll let me give free reign to adopt the open levels that FAAngband has, while retaining the player focus on a central location where their ultimate enemy dwells - a great blackened throne holding Morgoth on the deepest level of the dungeon, or a great gate to the next level guarded by Sauron (or others), which must be passed.

I suspect, given the blasted nature of Morgoth's lair, that there'll be other undiscovered difficulties for the player to contend with. Zones where magic cannot be cast, items cannot be used, howling winds that knock arrows and thrown weapons out of the air. A miasma hanging over the whole level which drains health, experience and mana, so that the longer the player fights, the more resources they'll consume. The sunken graves of previous adventurers may find their roots here, so that the ghosts of player's past may stalk the level. More surprises yet.

I think I'll get there myself some day.


Cyranix said...

Thank you so much for sharing your thoughts on roguelike design! I've stumbled across your blog on several occasions, and I can't recall a single visit that didn't lead to an engrossing and thoughtful read.

Nick said...

OK, so I was just starting to think that I had my plans for FAangband fairly settled - then you come along and write this, and I start thinking "but maybe...", and I know where that ends. Damn you to hell.

Andrew Doull said...

If you're interested, the bug posts where I discuss what I'm going to do are http://developer.berlios.de/bugs/?func=detailbug&bug_id=13671&group_id=331 and http://developer.berlios.de/bugs/?func=detailbug&bug_id=13669&group_id=331

Nick said...

That's very interesting. I'm actually moderately happy with my Sauron and Morgoth - but I'm wondering if I should shorten the game (maybe optionally...). I look forward to seeing how yours goes.

Mikolaj said...

Good stuff. In maybe 2 weeks I should find some time to comment at the bug entries. But perhaps we'll have 0.6.3-beta by then. :)