CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.11k stars 4.1k forks source link

Discussion/planning: Moving towards a vaguely defined "official" map. #70056

Open I-am-Erk opened 9 months ago

I-am-Erk commented 9 months ago

Is your feature request related to a problem? Please describe.

I have been working on adjusting mapgen so that the geography of the world changes as you move away from the starting center point. There's a lot of reasons for doing this, the first of which is that it makes it more interesting to explore. In the near future I hope to start adding the necessary infrastructure to design "regions", areas of the map where different things can spawn, and I would like to plan how we could do this.

There's been a fair bit of debate in dev circles over whether or not we should continue with full procedural geography, or if we should head towards using a map of massachussets as in the mod. Personally I love procgen terrain, and even if the mass map would still be partly procgen, I don't htink it's the same. I also think it would be nice to keep Cataclysm set within a fictional location in New England, rather than officially putting it in Mass.

Solution you would like.

VITAL DISCLAIMER: Although I would like to implement some of this very soon, in the near future and for 0.H stable, I do not plan to remove any significant content from the default spawn area. In order to do that, we first need to make it easier to travel long distances. Some of the proposed ideas in here would help with that. Even if all this is added, the default spawn zone (Midland) should always be a place where you can find a bit of everything, just as now.

  1. I would like to propose that the game area is now, officially, taking place in a state in New England that doesn't exist in our world. Canonically the name of this state should be whatever your worldgen name is. We should go through the worldgen name list and change it to a list of fictional place names that sound like New England states; currently I believe it draws from the same list as the cities, which wouldn't always be appropriate. We'll call it "the State" here, and if we go with this plan, we should allow NPCs to refer back to the name of the world using (we may also want to differentiate the world name from the savegame name, I don't want my NPCs to start talking about when they moved to Dad Save 1.)
  2. Within the State, we should define a number of regions. This is not so much a map as a relation graph, based on where these regions are compared to overmap 0,0, the default starting overmap. Here's a rough example, subject to change: image Bear in mind that the Midland region in this example is probably at least 5 overmaps across in each direction, give or take, making it easily enough to play the entire game without ever leaving. Each of the other regions would be similarly huge. We already have the beginning stages of this in game now with my changes to urbanization and forests. They fit a kind of wedge graph like this.
  3. We assert several landmarks in the State that should always be in roughly the same relative locations. This isn't like the Mass mod, they do not always take the same shape or appear in the same place, but they do always show up in a predictable wedge slice. This is easier shown than explained. Note that these are just my ideas and semi randomly assigned names, they don't have to be the final versions: image image As you can see, while you can predict that Montauk is always going to be somewhere south of where you start, you can't just check the wiki and travel to a specific coordinate to find it (though it's pretty big, you'll find it at some point). We define these things more by their relations to each other, which becomes important for some things I'll get into here.
  4. In the same way, we can now start making assertions about where the various factions should have their strongholds on the map. Here's a suggestion list, not a canon one, just to show what I mean:
    • Triffids might always form somewhere in the central North
    • Mycus should always have a main stronghold just outside New Bristol
    • Migo center of operations may be on the edge of Miskwa Lake
    • Isherwood Farm could be in the forests beyond Bunyan
    • The refugee center could be in the south outside Montauk, and Tacoma Ranch would then be in an adjacent region
    • Hell's Raiders should also operate near Montauk, helping to accentuate the conflict between them and the merchants
    • Hub01 should be near, but not inside, New Bristol
    • Exodii could take a seat somewhere in the Northeast, with all their portal drop buildings appearing nearby, making their teleports a lot less wildly random.
    • Zombies are just everywhere, that doesn't change.
What all this change accomplishes

LOTS!

Overall I think the biggest thing is that it lets us tell a much more detailed and compelling story, without sacrificing very much of the "every world is unique" feel that procgen gives us.

Describe alternatives you have considered.

Well, to start with, we could do the region thing without the defined landmarks, and instead just have biomes of different weather and stuff, and the current vague megacity that extends out infinitely to the east, eventually turning into ocean when I implement it. That was where I started with this, but as I've thought further about it, I have really gotten fond of this idea.

All the specific places I've described are random, we don't need to keep this design. I'm very open to feedback and suggestions here. If we go with this idea, we'll almost certainly pick up more of them as we go along, too.

Also we may want to consider giving the State an official name and having that be separate from your save game name.

Rabdash94 suggests in comments:

The way I see it, the generated world might not have all of those places, but some, in random combinations. A world could have only New Bristol, Bunyan and the Ocean, or Montauk, Bunyan and the Tibickissi River. The generated stories and roads should respect the chosen locations.

Additional context

Remember, at least on a first pass and probably for a long time, I am not planning to make it so that you must leave Midland to experience the full game. I don't really plan to touch spawning in Midland, not until we can make sure it's not painful to travel 5 OM away to get to the refugee center. What I may do for testing reasons, if it's not too hard to implement, is to give 'global unique' spawns an official place they're supposed to spawn, but they're also always allowed a "temporary duplicate" that spawns in midland, so you'd get two aircraft carriers, one in the ocean far to the east and one in a random lake in the middle of the map.

Also remember, you're still not going to know where anything is. You'd be able to get an idea of vaguely what direction to look, but the size of these areas is huge. Knowing the refugee center is somewhere within a 50+ overmap area is not going to mean you can just walk exactly there every time.

I-am-Erk commented 8 months ago

you’ll see that there is a great city to the east on the coast (Boston), a huge lake to the west (Quabbin Reservoir) with a city kinda next to it (Springfield), and a third city in between and to the south (Worcester)

Dammit, I've been made. Run!

CoroNaut commented 8 months ago

In before the entire planet is modeled.

Procyonae commented 8 months ago

Ah it was me that did the bad reading, I read it over quite a while as well as looking how a few other games work and thought about it mostly in bed so alot of the deets slipped away from me >_> For the most part I'm chill with your OP suggestions having reread it, though I will say that with the size you're suggesting your suggested amount of regions seems like way more than needed and would just overcomplicate things. I will say that autodrive being able to go 70/80 kph along a highway with vehicles on it in the near future sounds unlikely (unless it used to go that speed?), and there's numerous things getting in the way of actual highways or even a heavy compromise like just spawning 2 thick roads so any work on this stuff is unlikely to see much player interaction for a long time which is partly why I feel a fast travel (that say calced an autodrive route and had a chance to drop you part way along the path into an "event" that could use local horde info to increase chances off the top of my head) would make sense to implement imo. Even if it gets removed in the long run once better systems are in place the code would likely be used for mods or something else like an offmap location. I appreciate these distances are drivable in the current game state I just heavily doubt the average player will feel motivated to do so. Apologies for messing you around >_>

Maddremor commented 8 months ago

you’ll see that there is a great city to the east on the coast (Boston), a huge lake to the west (Quabbin Reservoir) with a city kinda next to it (Springfield), and a third city in between and to the south (Worcester)

Dammit, I've been made. Run!

I was actually going to suggest something to this effect. I am personally if the opinion that the IRL MA map thing would be the best, but I'm not sure we can actually pull it off. Having this pseudo-MA is good since we can play a bit fast and loose with the details, but we wouldn't have to scrap or heavily rework content if we get to the point of using real life maps.

BaumgeistOne commented 7 months ago

This sound like a really cool idea.

Just one thing: If the fungus is going to have a huge patch of land somewhere - what prevents the player from just burning it down? Would take the challenge out of that region.

PatrikLundell commented 7 months ago

@BaumgeistOne: Two things:

BaumgeistOne commented 7 months ago
  • Fire only progresses while in the reality bubble

Well, I can wait a bit; just this week I burned some infected portion of a forest, took only about an (ingame) hour before I could move into the burned out area and wait for the next reality bubble to burn down.

  • There's work in progress to slow down fire progression (while in the bubble).

That should be good. While fire does spread quite rapidly under the right circumstances, it takes a while for something big like a house or a tree to burn down completely. On the other hand... there is still that problem of a fire burning weeks or even months after leaving the reality bubble, right?

Still, "fire only spreads in the reality bubble, so it would take too long to wait for the whole area to burn down" is - in my opinion - not the best solution to the problem of the Fungus being no threat for anyone with a lighter. There are those fungus towers which are able suppress fire, right? Maybe they, or a smaller version of them, could be more common in the big fungus area.

ashGlaw commented 7 months ago

Reading through the thread, it is impressed upon me how much we need to have highways. I think they would allow for much faster travel between places, even if the first time you make the trip, you have to push cars out of the way and kill some zombies. It's bothered me for a long time that there are often no road connections between adjacent overmap sections, but that would be less of a big deal if each of these independent areas were connected to the highway system

Procyonae commented 7 months ago

It's bothered me for a long time that there are often no road connections between adjacent overmap sections, but that would be less of a big deal if each of these independent areas were connected to the highway system

The code attempts to guarantee road connections on 3/4 sides of every overmap already, if you want it changed to 4/4 that's a simple number change tho

db48x commented 7 months ago

Agreed. In fact, in addition to the interstates mentioned already, I think that there ought to be State Highways that consistently run north–south and east–west. In real life these highways often run through the middle of town (especially in the North East), so all that is really required is that we generate them first. Cities can be randomly scattered about the map without regard to the highways, and then either connected center–to–center or center–to–highway or both.

I also think that they ought to be more ambitious than the existing tile–based city streets that we have. Instead of having a limited set of 45° and 90° corners and intersections, interstates and highways should be created as splines that are laid down onto the overmap. The player would still see a grid of tiles when they approach such a road, but the road would not be as constrained to the overmap tile grid as roads are now. Straight sections would align with the grid for ease of interaction with ordinary roads and buildings, but on curved sections only the endpoints would be required to do so; the curve itself might pass through multiple tiles and cross the tile boundaries at any angle.

But that’s a completely different idea; just having roads that run consistently N–S or E–W and continue across many overmaps would be a huge improvement for long–distance travel even if they were simply made of the existing road tiles.

kevingranade commented 3 months ago

Just to point out one pretty big deal, if all we do is populate some kind of global regions_data class with a little table of these huge cities, (at world generation time we would pin down the exact center points and sizes of these cities), that one piece of coordination lets us actually generate multi-overmap cities without much extra effort. Not just "so many little towns that they run together", but a whole new (but at least in principle, simple) city generation system that places a downtown area filled with skyscrapers, industrial areas with just industrial buildings, commerce districts with... you get the picture. Then outside that you have more general "urban" and then "metropolitan" and finally "suburban" areas with increasing distance from the center.

Since there's a central location that "knows" the size, location, and shape of the city, we can have overmap generation coordinate across multiple overmaps to seamlessly stitch the thing together.