Multi Map allows subgame devs/ mod devs/ mapgen devs to create multiple worlds or "extend the world area" by stacking them on the Y axis. As such it can be used to:
- Virtually extend the world area by allowing the same mapgen logic to be called for multiple layers, albeit with a completely different noise hence creating different terrain. The world area extension is then faked by layering these extensions on the Y axis
- Alternatively it can also be used to implement multiple worlds, each having its own type of terrain or mapgen logic. E.g. underground worlds, sky worlds, desert worlds, lava worlds, jungle worlds, alien planet worlds, all within the same game/ on the same server
- Offer a consistent way of dealing with multiple layers by offering a map generator plugin system and "global noises", rather than having multiple mods doing things differently each time, each having its own noises, etc.
- Basically, reclaim "unused" space on the Y axis and allow this to be done in the easiest way possible, provided compatible map generator plugins are available. If not, you will have to roll your own of course, but by sharing the plugin it can be reused easily by others via the multi_map framework
- Solve some common problems such as shadows, underworld/ overworld lighting, relative to layer Y positions, etc. when dealing with multiple layers
Source: https://github.com/evrooije/multi_map
Documentation: https://github.com/evrooije/multi_map/wiki
Version: N.a. yet (alpha code, under heavy development, though I only tend to commit working code, knock on wood)
Tested with: Minetest Game master branch (0.5.0-dev)
Depends: default
License: Source MIT, textures derived from Minetest game CC BY-SA 3.0 (PilzAdam celeron55 sfan5 kilbith davidgumberg). Modified levels mapgen and lvm_example originally by paramat under WTFPL
The framework can be found in the multi_map_core mod
A few multi_map compatible generators are available in the multi_map_generators mod
Sample usage: https://github.com/evrooije/multi_map/b ... s/init.lua
A quickstart guide can be found here: https://github.com/evrooije/multi_map/wiki/Quickstart and an overview of the framework's concepts can be found here: https://github.com/evrooije/multi_map/wiki/Concepts
The API is available here: https://github.com/evrooije/multi_map/wiki/API
Warning!! Do not use this on existing worlds. Make sure you set the water_level to -31000 and mapgen to singlenode. Also, at this stage it is very bare bones and still requires a lot of work, especially on the map generator plugins ...
Pics or it didn't happen (mapgen used for the screenies is a modified levels mapgen by Mr. Mapgen himself, paramat):
Spoiler
Looking down at three layers, again each layer with its own ocean. Shadows are stopped from propagating using some trickery ;)
On the ground terrain of layer 19 close to absolute Y = 0. In the bottom right it shows the "zone" in which the player is as well as the Y coordinate relative to the current layer:
On the ground terrain of layer 20 called "Remote Levels Land". Note the type of terrain is the same yet the noise is completely different. Also note Y = 1932 on the top left, however Y = 44 relative to layer 20!
The bottom of the layer, showing some exposed impenetrable bedrock to avoid falling down to the level below:
Spoiler
- The ability to create unique terrain per layer via global 3D or 2D noises, where the 2D noises are made unique per layer: Done
- Optional "bedrock" layer provided by the framework or the abilty to set your own bedrock type layer: Done
- Optional invisible impenetrable "skyrock" layer to avoid seeing the bottom of the next layer up: Done
- Hooks for custom terrain generation logic per layer: Done
- A few demo/ usable map generators: Only very partially implemented (levels, simple, testauri)
- Optional mechanism for travel between the worls (i.e. portals), but of course it can be switched off and subgame developers can implement their own travel mechanism or integrate existing portal mods: Planned
- Customizable number of layers and an optional zoning system allowing sane display of coordinates (e.g. coordinates displayed as "Zone: 6; Position: 10.5, 15.0, -18.4" where the Y is offset based on the zone to show "sane" coordinates). This will not change the debug coordinates of course, just something to show on the HUD: Done
- Zone numbering (as per above) or zone naming (e.g. "Zone: Nether; Position: 10.5, 15.0, -18.4"): Done
- Pushing zone information as parameter for terrain generators, e.g. allowing different map generator code per layer (besides the obvious changes one can do with the perlin noise parameters), different biomes and decorations (e.g. jungle zone, desert zone, etc.), etc.: Done
- Pluggable decorators and ore generators, again with zone information supplied so it can be changed or tweaked per layer: Planned
- I am seriously thinking about an (optional) mechanism to automatically teleport players from the edge of the world on one layer to the opposite edge of the next layer. This in order to effectively create "smooth" transitions and truly give the experience that the world is larger on the XZ axis. To this end I will investigate "mixing noises" of the two layers on the world edge to also support smooth terrain transitions: Considering/ planned, needless to say this is not trivial... Partially done, works for edges but not yet for the world corners