Game Dev, World Building
So my new project is to make a survival-style 2d rpg, where you explore the wilderness and hunt things... but at the very start i would like to create a decent, believable world.
I think i've mentioned it before, but when i was a kid i came across a program that built a world.. not just using perlin noise or such, but it actually went through several stages... continent creation, drift, erosions, running waters and lakes, etc... it did climates, biomes, regions, etc.. and would even place civs, plants, and animals in realistic locations.. i'm looking to try my hand at a similar system.. i think it'd have good results, while also giving something cool to show the players as it's being built.
I'd like to invite people to suggest things, ways to go about such building.. any examples you may have seen that look interesting... that type of thing...
I'll also try to keep you guys posted as i go, to hear your thoughts and suggestions.
"You have died of Dysentery."
no it wasn't sim earth, but it was sort of similar.. and around the same time frame i believe... it was specifically for rpg's.. and you had to pay for it.. i just used the trial (which didn't let you save or export)
There was Dave Allen's World Builder suite. It had a tectonics simulator built on his earlier tec software, a climate model based on his earlier clim software, and a later addition that placed civilizations. Its graphics were a little primitive, but the algorithms were interesting. The World Builder package itself disappeared a long time ago, but some of the earlier things are still around at World Builder Page - Landscape Utilities if you're interested.
The toughest part of doing a whole-world sim is deciding on a good set of models and a good scale. The rules change as you change your scale. Perhaps stating that as the rules appear to change as you change your scale would be better. If your earth-sized world is represented by something like a 1000x1000 grid, then a sample represents something on the order of 510 square kilometers (assuming a perfect projection), or about 22 kilometers on a side. At that scale, a lot of features just don't show. Only the mouth of Amazon river would really show as a river at that scale. Even very large rivers are usually less than a kilometer wide. At that scale, mountains don't show nice canyons or much in the way of peaks. Erosion algorithms like those in Wilbur won't work at this scale, because erosion is basically just a diffusion process (a blur and threshold will work as a first approximation).
Ideally, you'd use some sort of multi-scale algorithm that lets you do computation at the user's current scale, but I have found that it's hard to apply differing rules at differing scales and then propagate information across scale levels. Not that it can't be done, just that it was hard for me to get results I liked. If you're doing straight synthesis like GeoControl, it's a simpler process. However, GeoControl doesn't do whole-world things (at least not the last time I checked).
Grid-based systems are helpful because they are a fairly good match for computer architectures. Using a parallel language like OpenCL or OpenGL's shading language allow for massively parallel processing of the grids, but edge processing is something to watch out for (it's often better to have one shaders for edges, another for the main body, and one for corners than to try to make everything work in just one shader). Main - Codeflow has some good examples of terrain rendering and erosion in WebGL.
awesome! thanks waldronate! thats some good info to start.
At least as i get started, i'm not going to attempt anything extremely crazy or difficult, but i'll probably attempt to do things in a DF style grid system... at least for visuals... so you have a world view, where things are fairly generic, and a grid in world view would basically only signify general stats like "grassland", "mountain", or "sea"... then have one or more more localized grids for each of those grid cells which break them apart and do things in more detail. I'd love to be able to flex my GIS muscle on a world like i've always wanted to, be able to run hydrology analysis and such to find watersheds and therefore ecosystems.. but i'm going to attempt to be realistic at this point and just go for a good looking world that makes some sense. having a shader for edges and one for corners will probably be a big help, and something i never thought of.
As is, i'm hoping to run things like a tectonic sim or possibly ice-ages at a fairly high level pass, as is very vague.. probably large blocks, more to identify a grid cell's type and possible highest peak or lowest point instead of trying to get into great detail. I'm not too worried about time, within reason of course... and i figure like DF that it's time well spent... and should only need to be done at the beginning. there is however a lot i'd like to do however.. some of such would be of course, geography, climate, ecology... placement of flora/fauna possible placement of civs... (i plan to do so in a list, basically have an animals requirements listed, and place them in area's that they could live)... and.. if i do civs, like df, i'd like to maybe run a bit of historical content... but at first anyways, i'd rather just throw you in a world with animals to hunt, or be hunted by.
All of this is a pipe dream tho, and i'd be happy with having a small program that builds a simple world i could fiddle with for the rest of my life :P
oh, and i might as well mention what programs i'm programming in, it'll be Mono, specifically MonoGame... which is basically a copy of XNA but using opengl, designed for cross platform stuff.
So, been dabbling in things.. got a simplex noise bit working.. doing some combining and playing around.. here's a screenshot
looks decent... Now i'm looking to focus on a continent.. one island... i want to make a decent random landscape with some mts etc. it'll be a starting point
from there i'm looking to map soil type, (rock type etc)... use the bump map as a DEM, and get the aspect (map of the flow)... then we can do some hydrp erosion modelling... weighted by soils (stong stone will erode less than soft stone fore instance, and also result in deposits etc)
then comes some hydrology modelling, defining where aspects converge, this allows us to define where rivers are, where sinks are found (and lakes would form) and watersheds, which are for the most part, ecosystems...
add slope, and directions, which can also be modelled from dem, and climate... and you can get the general land description...
using a list of flora/fauna, we can place them based on their requirements.. distance from water, slope, soil, temp, etc... a decent start to a random world.
this is all just experimentation.. all just to see if and how it could be done, and how much trouble it'd be.. as well as the results it would obtain. if it's plausible, i could continue on to make a survival game to interact with such world things