Now on
Eternal Suggestion VotingThis is one of those things that I've been kicking around for a while...
The problem is simple and obvious: All dwarven cities but the ones you build are just open fields with dwarves sitting around doing nothing but "enjoying nature" or some tripe like a bunch of elves.
The reason for this, however, is also fairly simple and obvious: Toady just hasn't gotten around to making the procedural code to make every individual type of city. Goblin towers and human villages exist, but these are all hardcoded. Even if we get dwarven forts, we won't have anything but dwarven forts, goblin towers, human villages, and maybe elven hippy communes.
There are plenty of modders out there who would pounce upon the ability to make their own types of towns that could populate the world, and so this suggestion: Make modular, procedurally generated towns where players can generate individual pieces, as well as have an influence on how they get sewn together.
The starting points are the Arena and the custom workshops, where we already have the ability to design large chunks of land as well as individual pieces of terrain.
What we need, from the top down:
The ability to designate overall methods of construction -
Dwarves, for example, could have psuedo-Roman style construction methods: You build a grid of hallways and set off modular rooms filled with whatever the town needs during that part of generation, filling out rows of hallways with modular rooms and a few special, large rooms, like grand banquet halls. (Retro may not like modular construction, but it makes sense for the CPU.) On top of this, the entry hall is a giant special construction, preferably with barracks and traps and drawbridges. The modular rooms could contain apartments, noble rooms, workshops and stockpiles, small farms, etc. As cities expand in the history of the game, new rooms get added, and the Mountainhome digs deeper.
Humans, meanwhile, should probably have a more haphazard approach to building their cities. They start building their houses as they do now - building in random open spaces where it is convenient. After the town becomes big enough, they build a wooden wall around their town and put some guards on watch at the openings to keep some of the wildlife deaths down. As the city expands in population, however, the town becomes more crowded, and houses get built to squeeze into the spaces between other houses, making long, jagged rows of houses with no space between them, and a complex maze of alleyways in the spaces that are left. Humans may only build up about 3 floors, but may have a basement. Humans in towns that smuggle goods may even have trapdoors, fake walls, and connecting attics that allow people to travel long stretches of the town within a single row of houses.
Elves, aside from the grand tree forts, I'm seeing as having plenty of rope reed tents (rope reed "walls" and a small area with a shaggy carpet "bed") and mostly gardens, but what's really needed are the big trees that might just be made of simple wood walls with some floors built off them.
This basically means we need to have several different kinds of construction methods, from dwarven precision to human haphazardness to elven wherever-it-fits-without-hurting-the-trees. I'll probably post more on how to actually formulate this part later...
We also obviously need the ability to start digging underground in making these buildings. Rather than "rock walls" that we get in Arena mode, we need to have the walls actually dug into the regular stone layers (although it might be best to remove all metal and gems, so that you don't just have a smoothed sapphire wall in a leather tanner's room), and possibly smoothed or engraved as necessary.
This obviously also fits into the Bustling Town Arc, which is apparently being put on the back-burner until the higher priority tasks are eliminated, but it's still worth laying this idea out beforehand.
Building the skeleton:
For the purposes of the procedural dwarven forts, we first need a set of hallways to give access to the rooms. This would be first designated by having one or more sets of hallways (really just some open space of arbitrary width, possibly smoothed or paved), and a set grid area expands out to a certain width, and then downward. (Unless, of course, you are building it tower-style, and have raw-designated them as aboveground builders, so that they build upwards as they need more space, which would make towers like goblins do.)
This means you need to designate, say, a grid that goes out along the Y-axis straight from the central main vertical shaft, with X-axis spokes coming off this main Y-bar.
If possible, however, one could potentially start putting in some fancy coding, and start having really creative, curving and organic-looking tunnels and rooms that are carved to fit into the niche that they can get, (think the code that generates caverns currently), which would help expand the number of potential moddable cities for player-created races (or just the potential to make really neat procedurally-generated dungeons for adventurers).
Likewise, the crowded human village that builds its homes packed in like sardines to fit within the walls could be built around the notion of just adding more homes (potentially with workshops or stores on their lower floors, and "homes" in the upper two or three floors) that are contiguous with one another, but which must have some kind of path, no matter how tenuous, to the main road that runs through the town, or to all the gates. This means that as buildings are haphazardly slapped in wherever they fit (and they need the ability to be "stretched" to fit by being longer if there is not enough width to make the effect a good one, although simply making slightly taller or lower-quality housing is also fine) will eventually create a tangled maze, perfect for any adventurer, and for simulating the way that many medieval towns actually did wind up looking.
How to make a custom room/house:
This is the part that I take from the custom building/workshop raws and the Arena mode map we already have - we should be able to expand this idea into being able to make grids of 8x8 rooms or the like that should have a single defined purpose that will be stored at the head of the raw entry. For example, you could build a simple set of 6 small apartment rooms for dwarves in a 8x8 room (including the walls around them), which is populated with doors, beds, cabinets, and maybe a chest. This would be labeled to be capable of providing the housing needs of 6 (common) dwarves. A 16x8 "double room" might be designed to provide office, living quarters, and dining room for a noble, with slight upgrades in the quality of the furniture to distinguish one noble from another. Individual rooms can have one or two workshops of the same type plus related stockpiles.
Using this, the game can look at what it has built already, and decide when it needs more rooms because it suddenly has more cheesemakers than it has farmer's workshops, and so adds another room for farmer's workshops into the nearest segment of the halls.
The toppings:
There also needs to be "special additions" to the mods, as well, such as every dwarf fort having some kind of defended enterance. While this could be a single, raw-defined method of making a gatehouse and barracks with traps, we could also have more fun with this. We could build, for example, multiple different kinds of enterances (or parts of enterances) with weights so that the game will randomly select one kind of gatehouse, and they don't wind up all looking the same, or have the same kinds of defenses.
The same coding might be used for the "great halls", where we could have various designs for the giant feasthalls of the dwarves, and make a variety of different great halls that can be randomly selected to be that one fortress's greathall.
While we are talking about composites and content generation: http://designfestival.com/the-cicada-principle-and-why-it-matters-to-web-designers/
Prime numbers beat fractals!
Multi-level building:
Some buildings may require fancier work. If we want a well in our hospital, we COULD just build a hospital over a "room" made of a cistern, but it should also be something that is plausable to be filled or refilled without just bucket-brigading. This would be even more complex, as it would require very dynamic code that would be able to understand things like where replinishable watersources can be found. If you just want to assume that you can always get water from deep enough underground by digging to a cavern lake, you would then need to both have a pump stack, and flag those areas that you are digging down through as being untouchable for building more rooms (or teleport out the rooms that might already have been built into another safe location, since this whole construction assumes the player hasn't seen it, yet).
Dwarven cities and cavern layers:
Although dwarven cities, if they theoretically became large enough (although I doubt any would have the population to do so), may dig down to cavern level, I think most dwarven cities probably wouldn't. At least one dwarf city of every civ, however, preferably the mountainhome, should have at least a path down to the caverns, as all dwarven crops are underground crops initially, and this only makes sense if dwarves were initially... well, cavedwarves. The mountainhomes are where dwarves went from neanderthal cave-dwellers to masters of the world (as soon as they get rid of those pesky humans, elves, and goblins), and there should be at least a well-fortified or walled off or moated access to the caverns in all the major dwarven cities. (Smaller communities just farm the soil layers with transplanted plump helmet spawn.)
EDIT: This from the Future of the Fortress thread:
Will you code in the ability to create our own raw-defined building types for worldgen? Using the Arena Mode and Custom Workshops as a model, we already have most of the pieces to create both custom buildings and define functions for them.
I'm not eager to get into this right now, since I'm not sure what the overall specs need to be and I don't want to tie myself to a raw format early. One of the main things is that I'm not sure I'd be satisfied with static maps of buildings, rather than buildings that are a bit more adaptable. For instance, I'm not sure what raws would look like for the existing temples, which adapt portions of their architecture to the spheres associated to their deities. The raw format would inevitable restrict my ability to do things like that, unless it were really complicated. At the same time, I can see how a modder would want to be able to deviate wildly from what is currently available. It might be most simple to allow static building maps to be used by custom races, but since I won't be using that in vanilla it's difficult to prioritize.