Dungeon generation parameterization
It seems that the main difficulty that I was having in terms of configuring the dungeon generator, is now gone. The dungeon parameterization process was torn apart, rewritten, debugged (somewhat) and is now quite satisfactory! The key difference to before is that I now pre-generate dungeon templates that include all constant parameters in JSON, and can be instantiated with some dynamic parameters. Example of a static parameter is dungeon architecture (cavernous, dungeon, outdoors) and an example of a dynamic parameter is biome, which would depend on the biome that the dungeon is spawned in. I'm also allowing overrides for the first level (entry level), for the boss level (if there is one) and for secret/side levels (if there are any). So for example, just using JSON, we can specify the first level to be a jungle ("biome" architecture) that leads to some ruins (TBD) that the player descends to level 2, which can be a traditional dungeon, and the last level could be a big cavern. Secret/side level could be a standard dungeon that leads to a pre-made vault zone. In the below video is an example map like that: the outer level is coastal + large circle-shaped dungeon (entry level + outdoors zone), followed by a dungeon level (default-middle level(s)), followed by a narrow cavernous level (final)
More and more things get converted to presets and re-used: the collection of rooms for use within a dungeon are now preset based, so that we can have different dungeon generator presets that produce markedly different dungeons based on the prefab rooms. Sparse feature distribution (e.g. encounters, treasure, secret doors, traps) are also preset-based, so that we can predefine distributions more suitable for trap-heavy levels, or other distributions more suitable for the wilderness.
Other useful tidbits:
- If a creature is standing on stairs and the player tries to enter that level, the creature will be displaced to a neighbouring tile
- Coastal dungeons are spawned at the correct side, based on where we are on the overworld. Example video below.