Hi folks, just brainstorming on this idea. I'm halfways considering the release of another DM/solo tool. The recent posts from Todd and Ovy have me thinking about one-room-at-a-time programmatic dungeon generation, like from the 1st edition DMG, Ruins of the Undercity, or Mad Monks of Kwantoom.
Roguelike map generation is cool in terms of exploration and fog of war, but generally rooms are placed on the grid, subsequently connected with corridors, and revealed bit by bit. that sounds kind of hard to implement.
So, I'm writing up a bit of an outline spec on how I would write this (note that I'm not promising that I'm writing this, I'm just writing a spec to see if I could write it, and if I did write it, how I would do it). Any other folks with programming knowledge on this board, what do you think?
-----------------
solo map
an implementation of the 1e DMG dungeon generator, or something like it.
plus inspiration from kabuki kaiser MMoK and RoTU
This solo map generator would be a grid of square lines over a background crosshatch png image.
grid squares occur on some sort of even number distribution for ease of programming math
probably 10x10 but perhaps 20x20.
base objects are designed as SVG objects in JS and re-used and rotated with transform statements.
grid occupancy can be stored in a matrix (2d or 3d?)
should be able to check if a matrix square is occupied with math.
doors and corridor exits are generated at room creation time
e.g. a colored transparent circle.
for starters, everything starts rectilinear.
square rooms
rectangular rooms
square corridors
rectangular corridors
nonstandard shapes still have a rectilinear backing.
90 degrees only, don’t sweat 45 deg for now.
layer order, top to bottom
doors, traps, stairs, and other placed objects
square grid lines, either gray or blue depending on bg color.
room and corridor borders
room and corridor base color image
(optional?) background cross-hatch png
background color, solid blue or black.
potential abstraction layer above rooms:
rooms are grouped by broad functions.
guard rooms likely near the entrance.
entrance room is first-placed room.
entry room in center along bottom
cave entrance
dungeon door
ladder back up
circular staircase back up
stairs back up
defensive fortification room
external tower
etc
rooms of living
kitchen
dining area
den
bedrooms
cesspit
storage
guard rooms
entry fortifications
barracks
fighting pit
armory
cells
rooms of worship
temple
altar
rooms of rulership
throne
antechamber
office
map room
treasure room
empty rooms
stairs up and down.
cave-ins and blocked passages. possibly just the bg color gradient that once transparent
caverns: don’t worry about these until later. ship rectilinear first.
set pieces, e.g. designed rooms
standard rooms are square.
non-standard rooms could be anything that can be shoehorned into a rectilinear format.
circular
octagonal
triangular.
caverns are likely a special shape.
perhaps designed ahead of time and rotated.
perhaps a rectilinear shape but with random triangles placed on half-grid borders.
awareness of a cavern shape here could be tough.
subsequent line points with random reversing obtuse angles are another possibility
perhaps voronoi shapes of a set size might be a simple way to do it.
entire voronoi is bg color at first
entry point is fg color
each neighbor has a 50/50 chance of being fg filled
or
first neighbor has a 100% chance of being filled
subsequent neighbors have a 33% chance of being filled
could be useful:
http://stackoverflow.com/questions/17285514/is-it-possible-to-make-a-squiggly-line#17285739
http://jsfiddle.net/zadP7/
http://bite-software.co.uk/squiggle/?utm_source=jquer.in&utm_medium=website&utm_campaign=content-curation
Never mind me, just tagging Todd Zircher and Ovy Ortega since you guys were talking about this elsewhere.
ReplyDeleteMike Overbo I was and i am and many ideas cooking! But you know who we need? Dyson Logos, yeah, we do!
ReplyDeleteProcedural Dyson Logos maps - i'd support that if everyone else does :)
ReplyDeleteHi Mike, I'm sure many of you are aware this is a well trodden path! You might want to look at Advanced Heroquest, Central Casting Dungeons, Location Crafter or any of the Sine Nomine products, which are more procedural and not whole creators.
ReplyDeleteIf anyone wants to do this and wants to save some time, you could do a lot worse than look into Heroscribe. This is a Heroquest (boardgame not Glorantha RPG!) dungeon generator which has loads of room and monster/people icons in various formats. If you rip the graphics (which download individually) you might save a mass of time.
Steven Lincoln The "Ruin" random tables in Godbound (Sine Nomine) are god tier, no pun intended. Thumbs up for Location Crafter too.
ReplyDeleteAfter getting my feet wet creating a Cyber Punk mission generator in Inspiration Pad Pro I might script those generators up for some dungeon crawl action.
thanks folks! As luck would have it, I have an army of sine nomine stuff and that's part of the inspiration, Kevin Crawford has a healthy share of my money and he's an awesome fellow to chat with on G+, ditto Kabuki Kaiser. Location crafter I'm familiar with and own as well, If you look you can hopefully see some of their core ideas in the outline.
ReplyDeleteThe Central Casting dungeons, that looks verrry interesting... yoink. :D
Dyson-style maps are great, I figured they'd make their way in if I were to release and hit a full release -- connected map set pieces and the like, which is a good feature of many roguelikes -- procedurally generated, but with set pieces here and there.
One doesn't quite need dyson for random square rooms and corridors. His style is awesome, and a fair amount of stuff of his is free to use with attribution, so it could easily make it in later.
Again, if I write this. Which I'm not promising.
This sounds like an amazing resource (no pressure, haha). I use a python script I've cobbled up from various generators and sources (I too am a Sine Nomine devotee) for my games that generates rooms on demand. What I'm finding works best so far is a mash-up of OSRIC's generate a dungeon with Scarlet Heroes' dungeon encounter/feature/hazard charts to populate the rooms. Keep meaning to incorporate Red Tide's room descriptions but haven't yet. I use a diagram dungeon to keep track of where stuff is but it's in a separate program.
ReplyDeleteI don't know much about javascript, but with python or lua it should be pretty easy to implement, whether you go with geomorphs or just squares and lines. I think I've even got something like that in my feature planning but it just ended up not being worth the time over the program I'm using now. Another issue I've run into is not wanting to step on the original creators' toes/what exactly constitutes fair use of a table.
I also put together a location crafter interface but ultimately realized that man, I do not have the patience to put together atmospheric lists for every dungeon I encounter. Part of what makes location crafter great, in my opinion, is that it's curated heavily by the creator; it's still a great tool that I use for shared games frequently but not for solo play. Now, a bunch of themed data packs with location lists in them... that would be awesome.
(Sorry, wrote a novel, just a topic near and dear to my heart.)
always glad to read a novel Alto Dizi , no worries.
ReplyDeleteI'll... just leave this here. :D
I'm still not promising anything, but I did some short work on a technical proof of concept. So far it looks doable with html5/js/canvas. If one loads the URL below, it will generate one starting room on the grid in an appropriate starting location.
there are probably some challenges to overcome here, the biggest ones I see are:
- collision detection for room placement
- generation of doors/entries along room borders
- re-rolling rooms the first time they are placed
- algorithms for caverns
That said, it doesn't look like I'm the first person to try it -- for example, here.
https://github.com/nickgravelyn/dungeon
Some stuff would be easy -- room numbering (probably another canvas layer above doors), corridors, generating creatures / traps / contents per room, and generating other look-and-feel type contents.
https://dl.dropboxusercontent.com/u/891512/randm/canvas.html