MovingBlocks / Terasology

Terasology - open source voxel world
http://terasology.org
Apache License 2.0
3.67k stars 1.34k forks source link

The Big Biome Blast #3773

Open Qwertygiy opened 4 years ago

Qwertygiy commented 4 years ago

It's about time to add some more diversity to Terasology's general world generation options!

There are about 900 ecoregions of the world, officially. That's a lot, isn't it? But these can be categorized into anywhere from 14 to 38 different bioregions, or biomes. Much simpler to handle!

Currently, Terasology's 7 Core Biomes are Mountains, Snow, Desert, Forest, Ocean, Beach, and Plains. I propose the following additional 8 biomes as a separate expansion module:

This will require the following basic blocks:

The following special world generation will also be required:

Generally speaking, plant-related blocks should be introduced to Terasology/PlantPack. Soil-related blocks should be introduced to Terasology/Soils. World generation and the biome definitions should be introduced to a new AdditionalBiomes module.

For suggestions, feel free to leave a comment or to join the discussion in Discord.

Adrijaned commented 4 years ago

IMO, the new "list of biome's" module should be able to provide whatver biomes you need for any and all of the world generators, to promote intermodule compatibility and stuff. It should also be able to provide biomes in several scales in granularity, and eventually incorporate/replace Core biomes. This would also help managing intermodule Biome ID conflicts. Biome ID's 0..49 would be reserved for the module's own list of Biomes on the lowest scale of granularity, ie. the 15 modules proposed in @Qwertygiy post + whatver additions might be needed. Biome ID's 50..99 are to be left for utilization by whatever world-specific biomes are needed. Biome ID's 100..1099 are to be utilized for the modules Biomes of second degree of granularity, 1100..2099 are to be left out again. 2100...32767 are to be utilized for biomes of third degree of granularity, 32768 are to be left unused for future extensions.

Cross-biome relations should also be established between defined biomes, along with utility functions, to be able to retrieve sub-biomes from one degree of granularity lower or parent biomes the other way, and to be able to retrieve biomes which may be neighboring to other biomes, possibly utilising some factors like temperature, humidity, nutritious value of the ground etc.

The Above mentioned list is also missing several biomes, which might be highly useful for some modules, be it magically themed biomes on one side, biomes themed per various dimensions that might be accessibkle to player, or even just biomes for "Sky"/"Depths" that might and should be utilised for even common world generators.

Qwertygiy commented 4 years ago

Those features are all things that should definitely be an option, but I feel like most are better suited for more advanced modules.

Things like magic or utility biomes are of a different nature than generic Earth biomes. Basically, there are a lot of thematic and gameplay reasons why a player might not want to include a Haunted Forest of magic alongside their normal deserts and plains, but there are far fewer reasons why a player might not want to include Jungles and Swamps alongside the deserts and plains.

Additionally, it may be useful to provide a tagging system to BiomeAPI for modules that share features not easily determined by facets such as humidity or temperature.

Cross-biomes and sub-biomes should also be something separate, whether it is part of BiomeAPI itself or an additional utility module. It provides a feature that should not need to be tied to the specific Core gameplay biomes.

Cervator commented 4 years ago

Linking to #3844 just so we don't forget there was some potentially useful stuff reverted we might want to visit in the future. Not totally related but kinda, this is the closest issue I could find real quick to attach it to :-)

Bring on the biomes!

TartarusOfHades commented 4 years ago

Hey guys, I've got a biome idea-

You can break the elements of a biome into 8 categories: terrain shape, terrain height, water density, temperature, weather, flora, fauna, and ground cover.

Terrain shape is mountains, caves, sinkholes, everything that effects the shape of the landscape.

Terrain height is the maximum, minimum, and average height of the area.

Water density is the amount of open water like lakes and rivers are in an area, by surface area.

Temperature and weather are obvious.

Flora and fauna are the plants and animals that can spawn in an area.

Ground cover is the type of block that is on the surface of the area.

All of these come together and affect each other. If we start with terrain shape and height, followed by water density (adding lakes and rivers and such) we have a good foundation. From there we can decide the temperature based on the terrain height and water density and the weather based on all 4 previous elements. After that we can decide ground cover based on all previous elements, flora based on temperature, weather, terrain height, water density and ground cover, and fauna based on all previous elements. This makes so many different biome combinations that you couldnt possibly see them all, while still maintaining individuality between biomes. Every biome is unique and every biome has worth!

skaldarnar commented 4 years ago

Making @ktksan aware of this discussion 🤓

@TartarusOfHades that's an interesting approach trying to break it down into smaller categories. I think we need to put a bit more thought into how we can model this best with the capabilities the engine offers us. Some of the categories you mention directly relate to world gen facets, others are world gen plugins, and others correspond to facet configurations.

@meetcshah19 recently looked into how to force a specific configuration for a facet by a game mode, this does the first step in that direction.

TartarusOfHades commented 4 years ago

@skaldarnar thanks! I don't know anything about the way the game/engine works yet but I've had this biome gen idea for a while and figured the concept could help.

jacobmass commented 2 years ago

I'm looking to work on this for a first contribution. Where in the code base can I work on this?

Cervator commented 2 years ago

Hello @jacobmass and welcome 👋

As you can see from the age of this issue it has been around quite a while. At this point it would probably take some discussion on Discord (https://discord.gg/terasology) to really refresh what's going on here and find out which pieces would still be good to work on and where to do so. There's a #world-generation channel even.

One thing you could definitely start with is trying out the world generation tutorial to understand some of the involved concepts: https://github.com/Terasology/TutorialWorldGeneration