Several improvements to the level-defining des files:

  • General goal is to be able to get the MAP as close to pasteable into the wiki as possible.
  • Interpret < and > on the MAP as STAIR commands for that specific spot.
  • Interpret ? on the MAP as “terrain to be filled by this level’s filler algorithm”. (This would allow for things like Asmodeus’ Lair to not have to be chunked into multiple pieces).
  • Allow ^ to be placed on the MAP, and it is an error if there is no TRAP command for that space (the parser will assume that ordinary floor should be the type of floor). Same for + and DOOR, and for boulders.
  • Allow monsters’ inventory to be specified.
  • Allow objects to be specified by random appearance, with a flag that defines whether it will pick a random item or simply fail to generate if that random appearance does not exist in the game.
  • Allow the level size to be specified so that ROWNO and COLNO are out of the question.
  • Extend 3.6.0’s REPLACE_TERRAIN to work with non-rectangular areas.
  • Most importantly, parse the files with something not written in yacc, because this adds an additional layer of complexity to anyone who wants to work with the code. (As of NetHack 3.7, the custom des file format has been replaced with Lua scripting.)
  • Maybe even read in the .des files at runtime, so they can be modified without doing a recompile of them and the intermediate .lev form isn’t even needed. This would require giving each level its own .des file and distributing them with the game. This means you don’t get the benefits of using a parsing library, but you no longer have to code for or depend on that library either.