2
\$\begingroup\$

In dwarf fortress, there are 3 levels of maps in the screen you pick your starting position, and they all coincide with each other perfectly. I am assuming that the top level tile accounts for lets say 36 smaller map blocks, and when the player spawns on the map, that is just a noise value at a different level or frequency of even more tiles.

The selection screen looks like this:

enter image description here

How is such a level of coherence achieved? It doesn't seem like simply adjusting noise frequency/octave values would work perfectly, or maybe it does, I am just not grasping the workflow properly?

\$\endgroup\$
4
  • 2
    \$\begingroup\$ It sounds like you're describing a level-of-detail (LoD) system, where you represent your terrain at multiple different densities depending on how close the player is viewing it. I'd recommend putting that in your question title, so it's clear what you mean by "proper" \$\endgroup\$ – DMGregory Sep 3 '18 at 13:38
  • \$\begingroup\$ Hi I updated my question as the original was very poorly worded \$\endgroup\$ – LAdams87 Sep 3 '18 at 14:59
  • \$\begingroup\$ Can you explain how you currently envision the octave adjustment and why you think it wouldn't work? \$\endgroup\$ – DMGregory Sep 3 '18 at 15:01
  • \$\begingroup\$ So if we have a heat map that makes up a world with land and oceans, if the user clicks a tile and we teleport down to that tile, how do I accurately fill the new tile group (which is now prob a 36x36) from my noise sample to represent a ground level interpretation of the heat map? \$\endgroup\$ – LAdams87 Sep 3 '18 at 17:10
2
\$\begingroup\$

I believe, starting with the idea that Tarn wants the world to be as detailed as computationally possible, that the highest resolution is generated and the lower level details are then calculated; think of it like LOD in graphics; you can't add detail to an image, but you can easily shrink it and take out some details when those details need to be hidden.

Of course there is no real way to know the exact way that Dwarf Fortress does it as for the moment the game has not been open sourced yet, but that would seem to be the way that the game handles basically everything. Think about how the game models blood streams and the such so it's possible to chop someones leg off before poison reaches the rest of their body for example, but you are never shown that level of detail in game, as that detail can be safely hidden away from view.

\$\endgroup\$
9
  • \$\begingroup\$ I am almost 100% positive this is not the way it is done, leaving me to believe you don't actually know what the system looks like in DF? They are 2D tiles, there is no detail level. \$\endgroup\$ – LAdams87 Sep 3 '18 at 22:34
  • 3
    \$\begingroup\$ if you just generate the full size map then you can get he "lower resultion version by simply averaging it out. Say for example you take 9 tiles and five of those are grass tiles then you show a grass tile as the "meta tile" to represent the 9 tiles \$\endgroup\$ – TurtleKwitty Sep 14 '18 at 0:11
  • 1
    \$\begingroup\$ I think I am going to make a github setup for this question since its a good one in my opinion and see if anyone wants to mess around with different ideas. \$\endgroup\$ – LAdams87 Sep 14 '18 at 15:38
  • 3
    \$\begingroup\$ @LAdams87, actually I suspect TurtleKwitty is exactly correct. I imagine the most detailed possible level is generated first and probably divided into Chunks (similar to Minecraft). Each Chunk is given an average representation, and possibly grouped into a lower LOD Chunk, which is then also given a representation. Working from most detail to least is the only feasible way for this to occur, and since those chunks are accurate when moved between, it makes the most sense. \$\endgroup\$ – Jesse Williams Oct 9 '18 at 14:15
  • 2
    \$\begingroup\$ Don't confuse graphical detail and LOD (because "they are 2D tiles") with actual detail LOD, where the detail on the tile lives. A 9x9 char array has more detail than a single character, but could be represented, on average, by a single char at a lower level of detail (higher zoom out). \$\endgroup\$ – Jesse Williams Oct 9 '18 at 14:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.