Everyone and their dog is making a game, so why can't I?
1. open world (check)

2. taking inspiration from metro and fallout (check)

3. on a map roughly the size of the u.s. (check)

So I thought what I'd do is pretend to be one of those deaf mutes. While also pretending to be a programmer. Sometimes you make believe
so hard that it comes true apparently.

For the main map I thought I'd automate laying down the base map before hand tweaking it. It's been a bit of a slog. Roughly 1 pixel per mile. (okay, 1973 by 1067). The u.s. is 3.1 million miles, this would work out to 2.1 million miles instead. Eh.

Wrote the script to filter out all the ocean pixels, based on the elevation map, and output the difference. Still had to edit around the shoreline but it sped things up a lot. Just attached the elevation map, because the actual one is an ugly cluster of death magenta to represent the ocean.

Consequence of filtering is, the shoreline is messy and not entirely representative of the u.s.

The preprocessing step also added a lot of in-land 'lakes' that don't exist in some areas, like death valley. Already expected that.

But the plus side is I now have map layers for both elevation and ecology biomes. Aligning them close enough so that the heightmap wasn't displaced, and didn't cut off the shoreline in the ecology layer (at export), was a royal pain, and as super finicky. But thankfully thats done.

Next step is to go through the ecology map, copy each key color, and write down the biome id, courtesy of the 2017 ecoregions project.

From there, I write down the primary landscape features (water, plants, trees, terrain roughness, etc), anything easy to convey.
Main thing I'm interested in is tree types, because those, as tiles, convey a lot more information about the hex terrain than anything else.

Once the biomes are marked, and the tree types are written, the next step is to assign a tile to each tree type, and each density level of mountains (flat, hills, mountains, snowcapped peaks, etc).
The reference ids, colors, and numbers on the map will simplify the process.

After that, I'll write an exporter with python, and dump to csv or another format.

Next steps are laying out the instances in the level editor, that'll act as the tiles in question.
Theres a few naive approaches:

Spawn all the relevant instances at startup, and load the corresponding tiles.

Or setup chunks of instances, enough to cover the camera, and a buffer surrounding the camera. As the camera moves, reconfigure the instances to match the streamed in tile data.

Instances here make sense, because if theres any simulation going on (and I'd like there to be), they can detect in event code, when they are in the invisible buffer around the camera but not yet visible, and be activated by the camera, or deactive themselves after leaving the camera and buffer's area.

The alternative is to let a global controller stream the data in, as a series of tile IDs, corresponding to the various tile sprites, and code global interaction like tile picking into a single event, which seems unwieldy and not at all manageable. I can see it turning into a giant switch case already.

So instances it is.

Actually, if I do 16^2 pixel chunks, it only works out to 124x68 chunks in all. A few thousand, mostly inactive chunks is pretty trivial, and simplifies spawning and serializing/deserializing.

All of this doesn't account for
* putting lakes back in that aren't present

* lots of islands and parts of shores that would typically have bays and parts that jut out, need reworked.

* great lakes need refinement and corrections

* elevation key map too blocky. Need a higher resolution one while reducing color count
This can be solved by introducing some noise into the elevations, varying say, within one standard div.

* mountains will still require refinement to individual state geography. Thats for later on

* shoreline is too smooth, and needs to be less straight-line and less blocky. less corners.

* rivers need added, not just large ones but smaller ones too

* available tree assets need to be matched, as best and fully as possible, to types of trees represented in biome data, so that even if I don't have an exact match, I can still place *something* thats native or looks close enough to what you would expect in a given biome.
Ponderosa pines vs white pines for example.

This also doesn't account for 1. major and minor roads, 2. artificial and natural attractions, 3. other major features people in any given state are familiar with. 4. named places, 5. infrastructure, 6. cities and buildings and towns.

Also I'm pretty sure I cut off part of florida.
Woops, sorry everglades.

Guess I'll just make it a death-zone from nuclear fallout.

Take that gators!

  • 0
    Is the game gonna be a top down?
  • 2
    @Ranchonyx the regular gameplay is top down, the overworld map is a 3/4ths view hexmap.

    initially it was a combination of overworld survival strategy (like neoscav), with a touch of base building e.x rimworld. Went more toward base management (state of decay, this war of mine), and mostly treat it as meta.

    Want to build something that closer to the atmosphere of neoscav, metro, and stalkers clear sky mod, with occasional factions you interact with.

    Didnt just wing it or kitchen sink the design either "this would be cool to have!"
    Those factions and overworld locations? Those were originally part of a civ-style builder.
    So towns maybe water storage. But a local cult (wandering npc group) keeps attacking it to force them to convert.
    System tracks the last 3 or 4 action you did. If any of them involved the group going down, and solving the dilemma, you gain reputation with the town, which can be traded for favors. Sort of like an old western hero saving the town.
  • 1
    @Wisecrack That is absolutely awesome! Is it open source perhaps? Seems like something I can contrib to.

    Wait, python?
    Whoopsie nevermind xD
  • 1
    Or say a town invited a rough group to stay, and situated them in a common house next to the armory. Bandits might be tempted (based on the group personality) to seize it and use it to control the town.

    You can solve this any number of ways because of the consequence system. Mist NPCs act as solution fronts: merchant might offer to hook you up with the ammo, bit you have to go get it. Town engineer might be willing to shut off the water out force the bandits out. Or you could persuade the bandits.

    This came about b/c fallout dialogue always seemed anemic. It basically acted as a skip button for gameplay. But you know who did really good dialogues? The walking dead. Why? Because essentially it was about conflict and dilemma. Choosing sides. And the first thought is, is there a way we can design living, dynamic systems that generate these dilemmas for us?
  • 1
    @Ranchonyx what I want to do is post on itch, let people download for free (because I know exactly what it's like being asked to pay to become what amounts to an unpaid tester) or contribute what they think will help out.

    Wanted to go the love2d route simply because it makes modding trivial, but concluded I cant afford to spend the time reinventing the tools GMS already offers. So modding comes down to converting to external editable scripts later on, along with an open data format.

    Pythons just the tooling and data conversion language.
Add Comment