I've finished biome generation including temperature and moisture maps. This took more work than the original height generation process, as I had to design my own linear gradient to apply temperature such that it was warm across the equator and cool at the poles. Height, temperature, and moisture now all play a role in generating terrain, leading to something like this:
Seen above is a map with a north and south polar ice cap, and desert banding in the middle. This is perhaps a little too warm at the equator for my tastes. Subsequent rebalancing is planned, but not a priority-- it's just tweaking constants in the generator at this point.
Of potentially greater impact is the fact that I'm currently evaluating Evennia as a potential codebase for the game. I'm not familiar with MOO design in general, but Evennia has a lot of functionality that I'd otherwise have to self-implement in my bare-bones codebase-- things like seamless copyovers, persistence, character inventories, etc that are all taken for granted in modern games but represent a significant amount of dev time. I'm currently experimenting with recreating the terrain generator work there to see how feasible a game in this style would be in that codebase.
The development blog for Wayfarer MUD, a text-based sci-fi MMO focused on crafting and survival.
Showing posts with label procedural generation. Show all posts
Showing posts with label procedural generation. Show all posts
Friday, May 3, 2019
Wednesday, May 1, 2019
Rough Draft Terrain Implemented
It was much quicker than I thought it'd be to get this pulled together.
This initial version uses OpenSimplex and a custom octaving flow to generate believable terrain masses. Each pixel in that image represents one tile. For next steps, I'm looking to up the complexity so that the playing space is more varied-- the current large areas of similar terrain are somewhat realistic, but not fun to trudge across.
Currently, tile type is generated solely from height. Next steps after tweaking the noise for complexity will be adding in temperature (derived partially from height) and rainfall maps so we can establish proper biomes. I'd also like to run rivers.
So far, I'm finding this GamaSutra article to be very helpful in getting my head around the various concepts involved in proc-gen terrain. I highly recommend it; the explanations are great even if you're not using Unity (which I'm not for this project).
Edit to add: Increasing terrain complexity was a simple matter of increasing the frequency value when octaving.
Generated with frequency set at 1.0 (see below)
Currently, tile type is generated solely from height. Next steps after tweaking the noise for complexity will be adding in temperature (derived partially from height) and rainfall maps so we can establish proper biomes. I'd also like to run rivers.
So far, I'm finding this GamaSutra article to be very helpful in getting my head around the various concepts involved in proc-gen terrain. I highly recommend it; the explanations are great even if you're not using Unity (which I'm not for this project).
Edit to add: Increasing terrain complexity was a simple matter of increasing the frequency value when octaving.
Frequency 1.25
Frequency 1.5
Frequency 1.5 with tweaked height-to-sector mapping
Bare-Bones Server Online
I've gotten the barest of bones of a server built, thanks in large part to mud-pi which currently provides the backend. Much of the dev time so far has been spent re-vamping the server to use a more developed concept of a character, and to discard rooms and use Wayfarer's current data structure.
Succinctly, the game is comprised on an arbitrary number of space fields, which contain an arbitrary number of play fields (planets, moons, etc). Play fields are wrapped 2D maps that contain a list of their occupants (players, NPCs, vehicles, etc) and have a tile object for each coordinate pair. Tiles contain information about what is built on them, and also track their sector type. Sector types are the terrain type of the tile.
The game currently contains a 100x100 playfield, upon which sector types are randomly generated. Coordinates wrap, and resources are displayed (currently all tiles have placeholder resources).
I've used tkinter to output a bare-bones representation of what the map looks like. Colors are based on height, which is currently randomly generated.
Upcoming development work will center on the implementation of procedural terrain generation. This is expected to take some time.
Of future development interest is the question of whether tiles should track buildings, or whether buildings should be tracked at the field level. The original thinking with using tiles was that if playfields are sufficiently large and developed, it will be slow iterating through every building to see which ones are in range of a given player; however, if they playfields don't get this developed, then iterating over every tile in range of the player to check them for buildings will be more expensive. This will need some thought.
Succinctly, the game is comprised on an arbitrary number of space fields, which contain an arbitrary number of play fields (planets, moons, etc). Play fields are wrapped 2D maps that contain a list of their occupants (players, NPCs, vehicles, etc) and have a tile object for each coordinate pair. Tiles contain information about what is built on them, and also track their sector type. Sector types are the terrain type of the tile.
The game currently contains a 100x100 playfield, upon which sector types are randomly generated. Coordinates wrap, and resources are displayed (currently all tiles have placeholder resources).
I've used tkinter to output a bare-bones representation of what the map looks like. Colors are based on height, which is currently randomly generated.
Upcoming development work will center on the implementation of procedural terrain generation. This is expected to take some time.
Of future development interest is the question of whether tiles should track buildings, or whether buildings should be tracked at the field level. The original thinking with using tiles was that if playfields are sufficiently large and developed, it will be slow iterating through every building to see which ones are in range of a given player; however, if they playfields don't get this developed, then iterating over every tile in range of the player to check them for buildings will be more expensive. This will need some thought.
Subscribe to:
Posts (Atom)






