The only reason I suggested thinking about DFHack and DF in particular is there are certain features you are not going to want to change (i.e. underground fortresses, adamantine spires, already built structures, etc...) so you are going to need some way to avoid altering those tiles.
I can't see any way to reasonably accommodate villages and fortresses and things while radically changing the geology, so it probably would have to just be a "too bad, overwritten" situation. MAYBE. Maybe there's some clever solution, and if anybody suggests one or I think of one later, I'll try to pull it off. Especially since this may also be relevant for minecraft and lots of other games too. So I'll certainly keep it in mind, thanks, but won't be relevant for quite awhile.
Height in general is fairly flexible, because the voxels in the geology engine ("goxels") are abstract in size. I plan to write algorithms that flexibly interpolate curves in rock strata and stuff in actual game tiles for any number of game tiles the user specifies for a goxel at the very end / when requesting final map sections. This could also just be an automatic process potentially if you're using something like dfhack that can detect the available airspace itself.
Likely what you'd do is choose a size that fits in as much geology as possible without clipping the bottom, then fill in the gap between geology and semi molten rock with something sensical like just eclogite (high temp/pressure metamorphic) or peridotite (i.e. the rock term for "nearly pure olivine").
Spires are easy by just adding them in a special script as a modder on top of the geology at the end, part of the porting code (which I might do myself too).
Also along that line of thought, how are you going to handle fantasy metals and stones? Can I tell your engine that I want Mithril to form veins? Will it read the raws for all your metals and stones and such and place them accordingly?
Yes
absolutely!! In spades. My goal is to get as close as possible to not putting a single string or constant anywhere in the hard code (other than stuff like pi of course), but to have it all in "raws." And a consequence of that is that you end up having most of the same tools I have for control and distribution of almost any material, because I have to code all the same tools for myself using the raws too.
Basically, every goxel keeps track of the elements and their proportions in it, as well as its largest mineral components. The game tries to move elements around between rocks (such as when smushed together or melted together or eroded) in mineral units, beginning with the ones specified as being there, and after that, going by nearest valid matches from the mineral database. Whatever is left over just gets homogenously blended.
So you can actually add mithril in SEVERAL levels of complexity, depending how dedicated you are. Simplest would be definining it as a mineral of existing elements in the mineral raws, like I dunno, hydrated manganese iron aluminum sulfides or whatever. Bam. done.
Or if you want to be more hardcore, you can put it in one of the custom chemical element slots, which will eventually include original chemical source (like is it a radioactive decay product? or asteroidal? or just an original constituent of Earth's dust cloud?) and then potentially indicate several different mineral ores of mithril -- this will end up affecting how it gets distributed, because different minerals can have different weathering resistances and can be more or less likely to form sands for instance, or to dissolve in water, and end up in different characteristic places where the player can know to look for mithril ore (or learn to). Minerals also crystallize in different temps and pressures, so it may only be found deep underground or only near the surface, etc.
Most complex would be also adding rock classifications as well with characteristic mithril mineral components, which allows more options for control even still.
EDIT2: Will your geology engine allow for more a-typical planet formation (a-typical only in reference to our solar system) with features like multiple moons, binary planet effects, increased/decreased meteor bombardment, etc...
Meteors yes, definitely to be included, since I plan to use them for element introduction, extinction events (for carboniferous strata), and physical features. And anything like that included will be controlled by init parameters like everything.
Tidal forces I'm not sure. The simulator is happening way faster than any tides, even inter-planetary ones, since a timestep is like 1-10 million years. Tides matter for erosion, but it might just be something more like each goxel being "0-3 level of tidal activity." And regardless of how I implement that (anything from simple water depth to pathfinding where fjords are), I'm not sure how number of moons or planets would be immediately obviously relevant
Also, the simulator begins with flat, oceanic basalt crust, so it's mainly skipping right past / ignoring hotter rock stages, plastic tectonics, etc. and making some simplifying assumptions about everything during roughly Earth's Hadean eon or equivalent. That could change, but not for the first version.
That's why I think it's better to output as DF world file (seed? not sure about the terminology) you can then create history on top of. From what I understand, underground fortresses, etc only get generated during history, not the generation of the world per se. Same for other structures, obviously.
Well I certainly can't output to a seed, because that means DF is doing all its own world generation, i.e. vanilla worlds...
I also can't specify a detailed map for it to just read ahead of time. You can't specify custom game tile maps in dwarf fortress. You can't even specify custom embark tile maps. You can only specify custom REGION tile characteristics (see PerfectWorld mod). Everything smaller than that is dynamically generated on the fly by DF only as needed.
So there are really only 3 options:
1) Get Toady to implement a world gen API to allow coders to reach in and manipulate stuff during world gen prior to structures being placed.
2) VERY skilled dfhack people to figure out how to do the same thing (still wouldn't be a seed -- it'd be a complicated dfhack script you would have to have running during worldgen). That's not going to be me as I know little about memory hacking, but I could use it if somebody else figured it out.
3) My preferred solution: let it go ahead and generate whatever it wants, then just overwrite it with my own regional interpolator. But that includes most likely overwriting structures.