User:Phol ende wodan

From NetHackWiki
Jump to navigation Jump to search

Hi there, I'm Phol ende wodan, more commonly known as aosdict on NAO (stats, games, deaths, dumplogs, ttyrecs), aosdict on the NetHack Scoreboard (and also on and on IRC as aosdict or aos.

I'm the author of xNetHack and also maintain the YANI Archive.

If you want to contact me, messaging me on IRC is a good bet, but you can also leave a message on my talk page and I'll probably see it soon after.


I enjoy discussing NetHack game design, and frequently talk about it in the #hardfought channel on Freenode. My biggest ongoing project is listening to the design discussions that happen on IRC and sifting through them to find new ideas, or YANIs. The YANI Archive is the curated collection of these ideas.

I've also gotten into the habit of writing long-form proposals that focus on overhauling one specific (but usually significant) part of the game.

Etherpads where I keep ideas that haven't yet coalesced into anything solid:

Over time, I've also written some lists/essays about problems I see in vanilla and how they could be addressed.

And lastly, I have written up some comments on the proposals of others:


  • A variant of 3.7.0-dev called xNetHack. GitHub
  • Food overhaul proposal intended to address the overabundance of food in NetHack.
  • Even more vague weapons and fighting rebalance proposal, separate from the combat system proposal.
  • Refactor the Beginner's guide to NetHack sources page into a series of tutorial pages about how to develop or patch NetHack.

Playing NetHack

I primarily play vanilla 3.6 with a sprinkling of some variant play for Junethack. I have 20-30 vanilla ascensions in all 13 roles, most of which are on NAO, as well as two ascensions for GruntHack (both dwarven valkyries), and one ascension each for UnNetHack (vampire wizard), NetHack 4 (elven wizard), xNetHack (dwarven valkyrie), and FIQHack (dwarven valkyrie). Probably need to get into Fourk and dNetHack at some point, too.

Design principles

These are some design principles I try to follow.

The Interhack Principle: If the player can fix a problem by wrapping the game in a better UI, that problem should not be in the game.

  • Forgetting maps and discoveries from amnesia violates this; one could create a windowport or other interface that will automatically restore them, mitigating its effect.
  • Stunning does not violate this; no matter how good the interface is it cannot predict whether the player's next move will take them in the correct direction.
  • A sub-principle of this is No Tedium: no scenario should exist where the player can do something tedious that objectively improves their chances of winning, no matter how marginal.
    • Jumping violates this; it is the fastest way to travel but the player has to make a separate command and move the cursor to a location and confirm that location for each separate jump. Doing this many times is tedious.

The Consumable/Renewable Principle: When consumable and renewable resources provide similar effects, the effects of the consumable resources should generally be stronger.

  • The spell of haste self violates this; when cast at Skilled it provides very fast speed for a renewable 15 energy. The potion of speed gives the same effect, but consumes a potion.
  • The spell of magic mapping (narrowly) does not violate this; the blessed effect of the scroll detects secret doors, which the spell cannot do at all.

The DevTeam Thinks Of Everything: Provide non-standard behavior in every conceivable situation where the player might expect non-standard behavior.

Quality Over Quantity: A few well-thought-out features are better than a lot of poorly-thought-out features.

Fair Deaths Only: In reasonable circumstances, it should not be possible for the player to be killed with no prior warning and no opportunity to prevent it.

  • Things like poison instadeath (possible even on level 1 from things like dart traps) violate this.

No Cyanide Rule: No item should, if use-tested in reasonable circumstances, be game-ending.

  • Things like the potion of paralysis violate this; they require extreme precautions like locking oneself in a closet standing on a scroll of scare monster to completely prevent the hero from being nibbled to death.

Always Useful Rule: Resources available to the player should not be completely useless in most situations.

  • Loadstones violate this rule; they exist only as a trap for players inexperienced with gray stones.
  • The scroll of punishment probably violates this rule; the advantages of being chained to an iron ball are marginal usually not worth saving a scroll for.

No Stalling: The player should not be able to keep taking turns indefinitely without making progress in the game.

  • The food system tries to accomplish this, and works decently in the early game, but ultimately violates this later in the game as food scarcity disappears and monsters leave highly nutritious corpses (and can be created indefinitely).

Keystroke Consistency: Entering the same keystrokes should always do the same thing, independent of context.

  • The eat command violates this; pressing "ey" while standing on a corpse (eat the corpse) has different behavior from pressing it otherwise (eat the item in slot y).

High Headroom: When the player faces a strategic problem, they are not punished heavily for picking a single suboptimal choice.

  • The level of headroom is, of course, up to the designers, but NetHack and all its variants tend to be very high-headroom games.

Verb + Noun: The game allows you to try to perform any action on anything.

Flavoring: Everything in the game should have a justification for why it belongs in the game.

"Kitchen sinkiness": a measure of variants

This is a whimsical attempt to try and quantify NetHack variants based on how much of a "kitchen sink variant" they are - a term usually associated with adding lots of new stuff to the game. (Of course, NetHack is already famous among roguelikes as containing everything and the kitchen sink.)

The measure I propose for kitchen sinkiness is the amount of "new stuff" changes a variant makes on top of vanilla divided by the total amount of gameplay changes a variant makes on top of vanilla. A "new stuff" change is loosely defined as an added monster, item, trap, terrain, artifact, special level, role, race, intrinsic, damage type, et cetera - the sort of changes that take advantage of NetHack's existing code systems. Only gameplay changes are considered, and things like UI improvements or internal code changes don't count. All "new stuff" changes are, of course, gameplay changes.

To illustrate a bit, adding a race would be "new stuff"; allowing a role to play as a race it can't in vanilla would not. Adding an artifact would be "new stuff"; adding an applied effect to an artifact that doesn't currently have one would not. Un-deferring a feature or resurrecting a defunct feature would be "new stuff", since the feature is not currently in vanilla. It can get murkier if the variant introduces something, and then starts making more complicated changes on top of it, such as the SLASH'EM techniques system, or the object properties system, where it's hard to tell whether each new technique or property in that system should count as "new stuff".

Vanilla, and any hypothetical variant that makes zero gameplay changes on top of vanilla, are defined as having 0 kitchen sinkiness. A hypothetical variant that adds *solely* new stuff would have 1 kitchen sinkiness. If there were a variant that removed things from vanilla and didn't add anything else for some reason, then I suppose its kitchen sinkiness would go negative.

Importantly, kitchen sinkiness is not a measure of game balance, and is ignorant of what the actual changes are and how they interact with the other features of the variant.

Without actually going through variant codebases to puzzle out and quantify their amounts of gameplay changes, here is a rough guess at where they fall on the scale of kitchen-sinkiness:

   FIQHack                                                  DynaHack
   |  xNetHack                  GruntHack                  UnNetHack                     dNetHack          SLEX
0  v  v                         v                             v                                 v             v         1
^            ^                                                                     ^               ^                    ^   
Vanilla      Fourk                                                        SpliceHack        SLASH'EM         Some patches
NetHack4                                                                                             (e.g. add 1 new item)