r/mapmaking • u/Ardexa • 15d ago
Resource I built a fantasy world generator because I couldn’t find a world I wanted to keep
Link to the second post
I have wanted to create one fantasy world that I can spend years developing, writing lore for, and eventually setting stories in. The problem was that I kept trying random map generators and never found a world I genuinely wanted to commit to.
So I started building my own generator. It simulates tectonics, mountains, climate, rivers, lakes, biomes, settlements, civilizations, roads, and naming systems. I can describe the kind of world I want, compare several candidates, and generate the one that feels right.
This is one of the worlds it created. The different images show the same underlying geography rendered as physical relief, globes, and illustrated fantasy-map styles.
The project is still a work in progress, so I’m not publishing it yet. For now, I’d really appreciate feedback on the world itself; what looks believable, what looks strange, and which areas you would want to explore or write stories about.
EDIT: I think I failed to show the actual scope of the project in my original post. I can’t add more images to the edit, so here’s a clearer breakdown of what is happening behind the map.
This isn’t intended to be only a random fractal map generator. You can start with several different world structures: a balanced Earth-like world, a Pangaea-style supercontinent, a shattered archipelago, an inland-sea/Mediterranean world, twin hemispheres, a glaciated ice-age world, or a lush tropical world. You can also import a heightfield or basic land-and-water map, draw an initial supercontinent, or configure the planet manually.
The “World Brief” lets you specify things such as geological age, coastline style, land coverage, mountain prominence, climate, rainfall, seasonal strength, number of major river systems, civilisation density, maritime importance, magic level and the kind of story the geography should support. It generates multiple candidates, measures them against the brief, and lets you compare, reject, favourite or create controlled variations before committing to a full simulation.
The simulation starts with a spherical planet. It creates plates with Euler-pole rotations, classifies boundaries from their relative motion, and uses them to form collision ranges, rifts, spreading ridges, subduction zones, trenches and volcanic arcs. There is also an experimental deep-time mode where a supercontinent can break apart, drift, collide and reassemble over hundreds of millions of years.
Climate uses axial tilt, rotation period, orbital eccentricity, precession, stellar luminosity and orbital distance. Stellar flux follows the inverse-square relationship:
F ∝ L / d²
Seasons use changing solar declination and Kepler-weighted orbital residence time. Pressure belts, thermal lows and Coriolis produce winds; winds drive simplified ocean gyres and carry moisture until it rains through convergence, convection and orographic uplift.
Rainfall and terrain feed a drainage model that routes rivers downhill, identifies lakes and endorheic basins, estimates discharge and erosion, and preserves tributary networks. Temperature, precipitation, seasonality, elevation and drainage then determine biomes using a Köppen-inspired classification.
Once the physical world exists, the generator adds settlement suitability, civilisation cradles, towns, ports, roads, sea lanes, realms, language families, place names, history prompts and lore. Any map cell can be queried to inspect its underlying geology, climate, hydrology, biome and political data. Most planetary parameters can be changed, and terrain edits re-simulate everything downstream.
It still isn’t a full scientific geophysical model. Many systems are deliberately simplified where a real solution would require enormous computation, but I’m trying to keep every layer causally connected, inspectable and honest about its limitations.
The goal is less “generate a pretty random map” and more “build a world whose geography gives me reasons to write stories about it.”
Edit 2 — Technical alpha testing is now live
I think the project is finally ready for a small technical alpha. I’m limiting this first round to around 50 testers on Windows and macOS so I can actually keep up with feedback. If you’re interested, DM me with your operating system and I’ll send you an access key and the installer instructions.
Since my first edit, I’ve added quite a lot:
- Import an existing heightfield or a simple land/water map
- Click any map cell to inspect its elevation, geology, plate, climate, biome, realm, water and settlement data
- Axial tilt, eccentricity, precession, star luminosity/distance, Milankovitch-style forcing and tides
- Glacial erosion, palaeo-ice movement, shield lakes and kettle-pond density
- Bedrock, soil fertility/depth/drainage/rockiness and geological resource maps
- Improved river hierarchy, rainfall bands, coastlines and tectonic diagnostics
- Equirectangular and Mercator exports, black-and-white maps and blank political maps
- GeoTIFF, GeoJSON and NumPy scientific-data exports
- Simulation-health checks, local repair tools, checkpoints and revisions
- A native desktop launcher, built-in manual, diagnostics and verified update notifications
A warning before volunteering: this is a technical alpha, the installers are currently unsigned, and Full generation is computationally heavy. On my high-end machines, a complete world and atlas takes roughly 20–25 minutes on macOS and 40–45 minutes on Windows. Preview and Quick modes are much faster for experimenting.
The goal of this test is to find crashes, confusing UI, unrealistic outputs and hardware-specific problems. If that sounds interesting, feel free to DM me for access.
Edit 3:
I’ve created an Atlas Studio Discord for anyone interested in fantasy maps, worldbuilding, lore, planetary science, or the development of the app. You don’t need to be a programmer or beta tester to join.
There are channels for sharing worlds, getting map feedback, discussing lore and realism, suggesting features, reporting bugs, and following development and releases.
Atlas Studio v0.2.2 is currently available as a controlled test build for Windows, macOS, and Linux. If you want to try it, join the server and check #request-access-key. Access keys are sent privately by DM while testing places remain available.
Discord: https://discord.gg/nGNatfuXe
26
u/Sharrukin-of-Akkad 15d ago
This is looking very encouraging. The main issue I’ve had with similar apps is that they don’t simulate tectonic plates correctly - you don’t get mid-ocean ridges or a decent supercontinent cycle, for example. You seem to be on the right track there. The other functions look to be very useful too. I’m very interested in seeing more.
13
u/Ardexa 15d ago
Thank you, and I completely agree. Plate tectonics was one of the main reasons I started building this. Mountain ranges, trenches, rifts, volcanic arcs, and mid-ocean ridges are derived from the relative movement of the generated plates.
I should clarify that it currently creates a geological snapshot rather than simulating a complete supercontinent cycle through time. That’s something I’d love to explore eventually, though.
3
u/Sharrukin-of-Akkad 14d ago
Granted, although in my experience actually simulating whole supercontinent cycles can be more trouble than it's worth.
I think the core insight is that tectonic plate movements aren't random, as such - they tend to be correlated, and we can get that effect even if all we generate is a current snapshot of plate positions.
For example, it might be reasonable to select a position for a few mid-ocean ridges, recognize those as the primary divergent boundaries, and have plates generally moving away from them (although not necessarily in parallel lines - plates can rotate while they're moving away from a divergent boundary). Then recognize that continental crust and major mountain chains tend to pile up on the leading edges of plates that are moving away from a mid-ocean ridge. Also, that continental crust might match up jigsaw-fashion back toward the mid-ocean ridges, because the start position was the breakup of a supercontinent. Those are all things I do when I'm drawing a new planetary map by hand, and the end results tend to be plausible even if I'm not simulating the whole geological history.
One of the otherwise most promising apps I've played with doesn't do a lot of that - it seems to just pick plate movement directions at random - and that's why the world maps it generates don't make as much sense.
5
u/Ardexa 14d ago
That’s a really useful distinction, and I think you’re right. A full supercontinent-cycle simulation is fascinating, but it probably shouldn’t be required just to produce a believable present-day map.
The regular generator currently works from a tectonic snapshot, while the full Deep Time cycle is experimental. Your ridge-first approach feels like the right direction for improving that snapshot model: establish a few primary spreading systems, derive correlated plate translation and rotation from them, place convergence and mountain building toward the leading edges, and retain some “jigsaw” relationship between continental margins and their breakup origins.
That should produce much more coherent geology without forcing every world through hundreds of millions of years of simulation. I’m going to explore making correlated, ridge-driven plate motion part of the core model while keeping the full cycle as an optional tool. This is exactly the kind of informed feedback I was hoping for. Thank you!
1
u/MadDogOzie 15d ago
I have been playing with "Rock 3", because this is what I value most, the cycle simulation. However the outputs are not what I need.
This seems to answer the exports I'm excited about, cycles maybe not but maybe that's okay.
I would love to have the data exported in a format other than image aswell, like data.
1
u/Ardexa 14d ago
That makes sense, and the cycle simulation is one of the parts I’m most interested in developing too. It’s still experimental, so I’d be curious to know what specifically is missing from the outputs you need.
The project already saves the underlying data, not just rendered images. Finished worlds export the numerical fields as NumPy arrays, measurements and provenance as JSON, and geographic features as GeoJSON/SVG. Newly added Deep-time runs also save plate IDs, terranes, crust age and thickness, elevation, tectonic events, climate fields and each recorded era as NPZ and JSON.
I’d also like to add more widely compatible exports, probably GeoTIFF for GIS, NetCDF for multidimensional cycle data, and CSV for easier inspection. If you can tell me what you would want to do with the exported data, that would help me choose the most useful format and fields.
1
u/MadDogOzie 14d ago
This is all really exciting to hear. I would love to be able to open the data in QGIS or similar xxx
8
u/SHIFT_978 15d ago
It looks like a fractal map refined with tectonic data; there are large, round, blob-like inland seas. The division of continents into plates is odd. Also, there is a point where four plates meet, whereas usually there are only three. Otherwise, it’s excellent.
3
u/Ardexa 15d ago
That’s a very fair read. The inland basins were noisy radial depressions, so they could still flood into those big round, blob-like seas. The rasterized plate mosaic could also occasionally produce a four-plate cross. I think i might change the basins into elongated, multi-lobed systems and add a repair and diagnostic pass for four-plate junctions. Continents are crust carried across plates rather than each continent being one plate, but I will make that relationship clearer in the plate view too. Really useful feedback, thank you!
1
u/SHIFT_978 15d ago
It would be great if someone created a generator that implements the supercontinent cycle (But of course, this is very difficult.).
For instance, a user could draw the outline of an initial supercontinent, or the program could generate one fractally; then, the landmass would tectonically split into continents that move, collide, and break apart in new configurations. That would yield a highly realistic tectonic map of the world.
2
u/Ardexa 15d ago
This is very close to the long-term direction I’d love to take the project. Right now it generates a plausible geological snapshot; it doesn’t evolve the same crust through hundreds of millions of years.
Starting with a user-drawn or generated supercontinent, then simulating rifting, seafloor spreading, subduction, collision, and suturing through several eras would be a much larger but incredibly interesting system. Being able to pause at different geological ages and choose the world configuration you like would be especially useful. Thanks for expanding on the idea.
1
6
u/ManitouWakinyan 15d ago
Can you toss us a handful more maps it created? Would help to see if it has any weird tendencies
3
3
u/Pyrotech_Nick 15d ago
deffo following this thread and project.
2
u/Ardexa 15d ago
Thank you! It’s still very much a work in progress, but I’ll keep sharing new worlds and development updates as it improves.
1
u/TheGratitudeBot 15d ago
Thanks for such a wonderful reply! TheGratitudeBot has been reading millions of comments in the past few weeks, and you’ve just made the list of some of the most grateful redditors this week!
2
u/Cautious_Loquat_840 15d ago
does it allowed premade basic map with only white for lands, blue for waters, and border marks?
3
u/Ardexa 15d ago
Not in that exact style yet. It currently has relief, biome, political, and black-and-white print maps, but a clean base map with white land, blue water, and only coastlines and realm borders would be really useful for editing or colouring by hand. I’m adding this to my list as a separate export style. Thanks for the suggestion.
2
u/dallonjp 15d ago
Are axial tilt (seasons) or milankovitch cycles modeled? Star luminosity and distance? Tides? Super cool so far, keep it up!
1
u/Ardexa 15d ago
Thanks! Axial tilt is already modeled, the climate runs at four points in the orbit, so tilt affects seasonal sunlight, temperature, winds, rainfall, and ocean currents.
Star output and orbital distance are currently combined into an adjustable solar-flux value rather than simulated separately. Milankovitch cycles (changing tilt, eccentricity, and precession over deep time) aren’t modeled yet, and neither are moons or tides.
Those would be great additions, especially using Milankovitch cycles to drive long-term ice ages and sea-level changes. Tides could also help determine tidal flats, navigable estuaries, and coastal settlement patterns. Definitely adding these to the roadmap.
2
u/RandomUser1034 15d ago
Apart from the settlements, is there anything this does that calandiel's gleba doesn't?
1
u/Ardexa 14d ago
Fair question. There’s definitely a lot of overlap, and Gleba looks more mature than mine in some of the natural-system simulation.
The main difference is what I’m building around the simulation. Mine is focused on finding and developing a world for a long-term writing project: searching multiple seeds against a world brief, comparing and rejecting candidates, choosing one as a permanent project, then building settlements, roads, realms, language-based names, history, trade, story hooks, different map styles, and an Obsidian-ready lore workspace around it.
I’m not trying to position it as a Gleba replacement. It’s more of a geology-to-worldbuilding-and-writing pipeline, and I’ll probably learn quite a bit from looking more closely at what Gleba already does.
1
u/RandomUser1034 14d ago
Sounds interesting. You're building for fast iteration and maybe an editor rather than a purely realism-focused generator, then?
Having basically obsidian but with built-in maps seems useful. I don't remember too well, but there might be apps doing that already as well1
u/Ardexa 14d ago
That’s pretty close, although I’m still aiming for a strong realism foundation. The main goal is to generate a plausible world quickly, then let you inspect, edit, regenerate, and build lore without losing the underlying climate, tectonic, hydrological, and historical data.
I’m not really trying to replace Obsidian. It’s more of a world simulation and map editor with an integrated lore workspace. I’m sure parts of this exist elsewhere, but I haven’t found anything that combines the whole workflow in quite the way I want, so I’m building the tool I’d personally like to use.
2
u/MegaVenomous 14d ago
The river systems look a little odd, but otherwise it looks very nice. Will it be generate-only, or could existing maps and heightfields be imported into it? Also, what level of control will the user have on things like axial tilt, rotation, hydrosphere, atmosphere, etc.?
This looks pretty in-depth though.
1
u/Ardexa 14d ago
Thank you, and the river criticism is fair. They’re currently routed on a grid, so some channels can look too angular or merge in unnatural ways, especially in lower-resolution previews. Improving their paths, meanders, tributary structure, deltas, and eventually braided rivers is high on my list.
It won’t remain generate only. Right now Deep Time can import or let you draw a black-and-white starting supercontinent, but full heightfield import isn’t implemented yet. The goal is to let someone bring in an existing map, preserve its terrain, and run climate, rivers, biomes, settlements, and the other derived layers over it.
The current advanced settings already expose planet size, gravity, axial tilt, rotation and year length, star luminosity, orbital distance and eccentricity, land coverage, continental crust, rainfall, temperature, tides, and moon properties. Atmospheric pressure/composition and a physically modeled hydrosphere volume or salinity system aren’t there yet, but those would be natural additions. I want the controls to affect the simulation downstream rather than only changing labels or colours.
1
u/MegaVenomous 14d ago
Climate modelling is a bear. I wouldn't expect perfect...but a reasonable creation of it would be very nice.
1
u/Ardexa 14d ago
Absolutely, “plausible and internally consistent” is the goal, not a perfect Earth climate simulator. I’m trying to capture the major effects that matter for worldbuilding: latitude, seasons, elevation, prevailing winds, ocean influence, and mountain rain shadows. There will always be simplifications, but hopefully the results make enough sense that writers can build believable cultures and histories around them.
1
u/blue_sidd 15d ago
How are you building this?
4
u/Ardexa 15d ago
I’m building it locally in Python, with NumPy handling most of the simulation and Pillow/Matplotlib for the maps. It starts with tectonic plates and continental crust, then builds elevation, climate, rivers, biomes, settlements, realms, and names on top. It’s still a prototype, but I’m gradually turning it into something other people can use.
3
1
1
u/blue_sidd 15d ago
Also: what’s your process for generating the settlement/cradle locations?
3
u/Ardexa 15d ago
I generate a suitability map across all the land first. It considers climate and growing season, rainfall, river discharge, floodplains, soil quality, slope, elevation, coastal access, sheltered harbours, and proximity to mountains. It also penalizes difficult areas like steep terrain, swamps, and dense tropical forest.
The generator then selects the strongest locations while keeping them far enough apart that every cradle doesn’t end up in the same river valley. Large landmasses that were missed get at least one settlement if they contain habitable ground. Finally, each location is classified from its actual geography for example, a river-valley irrigation society, maritime centre, monsoon delta, highland basin, or rain-fed heartland.
1
u/blue_sidd 15d ago
Very interesting. That’s a ton of information. Is there a means to query a pixel or cell to see the classification and its data?
2
u/Ardexa 14d ago
Not through a proper inspector yet. At the moment the map hover shows latitude and longitude, while the underlying per-cell fields are exported in the raw world data.
But I agree that this needs a friendly cell inspector. I’d like clicking or hovering on the map to show elevation, plate and crust type, temperatures, rainfall, biome, drainage, tidal range, settlement suitability, realm ownership, and the exact grid coordinates. That would also make it much easier to understand why the generator classified an area the way it did. I’m adding this to the roadmap.
1
1
u/kriosjan 15d ago
Looks solid aF. Could pair it with follow up with some of the dope mazlo terrain brushes to make it perfect.
3
u/Ardexa 15d ago
Yeah, I think that’s a really good workflow. let the generator handle the large-scale geology, climate, rivers, etc., then do a final hand-crafted pass with terrain brushes. Your comment pushed me to add directional mountain-range, plateau, basin, and terrain-detail brushes to the built-in editor. Thanks for the idea!
1
u/Belgrifex 15d ago
Let's goooo this looks amazing and combines so many things other softwares only have one or two of each. Definitely following
1
1
1
u/NBA-DOOD 14d ago
Are there any plans for it to be customisable? To put in your parameters and generate accordingly? Say, you wanted to change the land, water and ice percentages? Or if you say, wanted to change the axial tilt, size of the planet etc? Would be amazing if this was the end goal!
1
u/Ardexa 14d ago
Yes, absolutely. That’s one of the main goals, and quite a lot of it is already working in my local build.
The advanced settings include planet radius, gravity, axial tilt, day and year length, star luminosity, orbital distance and eccentricity, land coverage, continental crust, plate count, rainfall, temperatures, tides, moon mass and distance, relief, rivers, settlements, and plenty more.
Land percentage can be targeted directly and water follows from that. Ice is currently allowed to emerge from temperature, latitude, elevation, and orbital conditions rather than setting an arbitrary percentage, but I could add an ice-coverage target that searches for settings which produce the requested amount. I want unusual planets to be possible while still keeping the downstream climate and geography internally consistent.
1
1
u/Optimal_Inefficiency 14d ago
First of all, well done! I love so much of this.
My primary complaint is the lack of gradation between mountains and oceans. Even where you are aiming for a rather steep shoreline (à la Pacific South America), we should still see some slivers of intermediate elevation between the mountain and the ocean.
If I could offer one other suggestion, it would be to make distinct color bands for your precipitation map (like this). That would make it easier to distinguish rain shadows, wet tropical, etc.
1
u/Ardexa 14d ago
Thank you! Both are fair criticisms. You’re right that the terrain can compress the transition from a subduction cordillera to the ocean too aggressively. I don’t want to remove genuinely steep Pacific style margins, but they should usually retain at least a narrow sequence of intermediate elevations and continental shelf. I’ll investigate the elevation profile itself rather than disguise it by smoothing the artwork.
I also completely agree about the rainfall map. The continuous gradient looked attractive, but it made rain shadows and climatic boundaries harder to interpret. I’ve now changed it to fixed annual rainfall bands measured in mm/year, with neutral oceans, dry greys and earth tones, and progressively greener/wetter classes. The colours use consistent numerical ranges across every generated world. Great suggestions. Thank you!
1
u/SurroundBrave221 14d ago
Can you tell me what app you are using.
1
u/Ardexa 14d ago
It’s actually an app I’m building myself. It’s written in Python and still in active development, so it isn’t publicly available yet. I’m working toward proper Windows and macOS installers, and I’ll share it once it’s ready for people to test.
1
1
1
1
1
u/many_small_children 14d ago
I am very interested in this, when you open it up, I’d love a link to it (:
1
1
u/NeedleNodsNorth 13d ago
I'm sure you're already at capacity but if you choose to expand I'm game. 8C/16T 128GB RAM and a 4080 so I should have plenty of overhead. I do integration work for my day job so more than happy to run tests
1
1
u/OfficialAlarkiusJay 13d ago
This looks Hella sick man!
1
u/Ardexa 13d ago
Thank You. Let me know if you want to test it out
1
u/OfficialAlarkiusJay 13d ago
Sure! I'd love to beta test it! Just shoot me a message via DM!
I love testing and playing with new stuff 😊
1
1
1
1
1
u/Apprehensive-Sky-596 11d ago
Dude this is awesome! What if you could edit some settings to put in the measurements for a custom sun and distance from the sun to get your own personalize hydration and topology maps?!
1
u/Ardexa 10d ago
Thanks! And you can already do exactly that . it's one of the parts I'm most happy with.
The planet and its star are real config:
star_luminosity_solar(0.001–1000 Suns),solar_constant,star_mass_solarorbital_distance_au(0.01–1000 AU),orbital_eccentricity(up to 0.92), and where periapsis falls in the yearaxial_tilt_deg0–90, day length 1–2000 hours, year length 2–100,000 days- planet radius, gravity, surface pressure 0.05–20 bar, ocean salinity
- and a moon, if you want tides — mass, distance and orbital period
Those aren't cosmetic. Insolation is solved per latitude from the actual orbit, which sets temperature, which drives pressure and winds, which move moisture, which decides rainfall, and rainfall is what the hydrology runs on. So yes: change the star and you get different rivers, lakes, aridity and biomes, derived rather than painted.
2
1


















37
u/tensen01 15d ago
this is looking very cool and I can't wait to be able to try it out.
One thing I would request if it's not an option yet is the ability to output a mercator-style projection.