TODO

From Minetest Developer Wiki
Jump to navigation Jump to search

Things to do right away

Formspec main menu

  • Delete button reporedly doesn't work
  • Configure button is totally broken
  • Segfaults under Windows sometimes apparently
  • Unintentional ListBox line concatenation, esp. with Credits tab (PilzAdam can readily reproduce this)
  • Button positioning isn't respected within the World Configure menu
  • Remove the dumb looking vertical text

Other

  • Add API to get biome information from ID --- should be done in Lua: add a wrapper for register_biome() and add biome definitions to a table, use that to index information without an API

Things to do soon

Mapgen

  • Add configuration for DungeonGen
  • Add configuration for CaveGen
  • Make permanent solution for caves spawning inside of trees - Can do this by checking if is_ground_content, now.

Mapgen V7

  • Fix noncontinuous terrain problem
  • Add positive 3d noise for better mountains; reduce negative 3d noise effects and 2d noise scale

DecorationDef

  • Add Lua callbacks for decoration placement if requested
  • Add L-system decoration support
  • Add cutoff handling
  • Give decorations some sort of unique ID so they can be referenced in biome definitions
  • Allow decorations to have unresolved biomes so they can be registered afterward

BiomeDefManager

  • Add biomemap cache
  • Scale temperature and humidity noise to more sensible value ranges
  • Add biome weight attribute
  • Optimize K-means system for biome matching, and use instead of linear search?
  • Add Voronoi diagram maker?

MapVoxelManipulator

  • Figure out a permanent, elegant solution to the walled-in cave problem - can use is_ground_content now - does this belong in VoxelManipulator?

EmergeThread

  • Figure out the thread priority mess
  • Assign thread affinities for a bit of a performance boost (reduce L2 cache misses)

Formspec

  • Add double-click-to-move-inventory-to-chest support
  • Add craft recipe drawing support

Build things

  • Add -DCMAKE_BUILD_TYPE=RelWithDebInfo option
  • Remove option to use system copy of JThread library; possibly rename JThread to something else

Other

  • Add block tinting (grass, water, sky, etc.) (for biomes)
  • Merge leveldb pull request
  • Add Fullbright option
  • Re-do rollback to not be slow


Big, long term goals

Voxel Area Entities

Description
How cool would it be to build a full-sized boat in Minetest, and then drive it around the ocean? That's one example of something that would be possible with this feature.
Voxel Area Entities are moveable ActiveObjects whose mesh and texture is user-modifiable via setting MapNodes in it. This is an extremely powerful feature, and while perhaps not of extreme difficulty to implement, there is very much to be done.
What needs to be done

  • A new derived SAO and CAO (they would need to be treated fundamentally differently), along with setNode() and removeNode() calls.
  • A derived VoxelManipulator class, perhaps called ObjectVoxelManipulator, which will be used to manipulate them.
  • These types of objects have meshes, and will need to be updated in MeshUpdateThread along with MapBlocks.
  • Some way to store these in the map. Perhaps these objects will get special non-block-ID keys in the map DB.
  • A decent way to serialize these objects. This detail in particular will require special attention.


Envlock Scope Reduction

Description
Envlock needs to be put on a diet. Seriously. This is believed to be the primary reason for perceived unresponsiveness in Minetest - solving this would help matters immensely.
What needs to be done

  • Add a thin abstraction layer for atomic operation intrinsics.
  • Replace Environment operations that require concurrency but are simple enough with the said atomic operations and clever ordering.
  • Add a thread-safe hashtable structure to be used instead of std::map (or core::map) where locks would be needed, make use of this.
  • RCU for Map things - big structures such as MapBlocks could benefit from Read-Copy-Update for synchronization. This is the biggest change, but the reward would be immense.


Mapgen V5

Description
Revival of the 3d perlin noise-based generator that produced excellent looking terrain. Used to be very slow, which is the reason why it was ultimately dumped for V6 - this is no longer a problem with the new perlin noise map functions, which are insanely fast. celeron55 specifically requested to be the one to do this.
What needs to be done

  • Class-ify the V5 mapgen code. Create noise objects and handle parameters in the constructor, destroy noise objects in the destructor.
  • Replace all NoiseBuffer calls with array accesses to the 3d noise result array
  • Replace lighting and liquid updates with calls to the parent Mapgen class' updateLiquid() and updateLighting(). Replace cave, dungeon, and tree generation with the appropriate generalized calls too.
  • Overall code cleanup would be nice in addition.


Pre-generate world

Description
What needs to be done

Store block differences only

Description
Instead of storing everything in the database, only store the changed mapblocks (or even only modified nodes?). This would save a lot of space.
What needs to be done

  • Change the mapblock saving code to only save modified blocks.
  • Change the mapblock loading code to mapgen, and then load changed blocks.


Rivers

Description
Add rivers to map generator.
Did some work on rivers alongside Mapgen V7. Unexpectedly, applying logarithm to terrain height seems to work rather well for this. For 1 < x < 0, log(x) returns a steeply decreasing negative number, below the typical water_level. The rather short interval in which this result occurs draws an outline between higher regions of noise. Unfortunately, the overall level of quality of rivers created with this method is low. Rivers tend to be in a closed loop, vary too greatly in width, and don't branch off to other streams.

What needs to be done

  • Find an algorithm to produce nice rivers (Lightning fractal algorithm is a decent candidate)
  • Find a way to make them completely connected from block-to-block (difficult)


Add colorlike to node param types

Description
Add a field like facedir, wallmounted, and liquidlike called colorlike that will allow the user to register a set of colors so that the color of some base node is modified on draw. This would save many textures and node definitions.
This field would be (part of, at least) param2 in a MapNode. If colorlike is specified on its own, then it can define and use up to 256 colors. If used with facedir or wallmounted, then, it can only define and use 8 colors.
What needs to be done

  • Store a color LUT with the ContentFeatures for the defined node that is to be passed along from Lua when registering the node.
  • Figure out how to draw these colors in inventory screens and what not without having to prerender more textures
  • Bump ContentFeatures version


TODO in minetest_game

To do immediately
  • Make gold not look like American cheese
  • Use a new texture for bronze blocks (and for other ore blocks too)
Gameplay mechanics
  • Beds? Need to think about this one more. Beds Mod
  • Enderballs (or at least the teleportation aspect of it in something else). Throwing mod by PilzAdam has teleport arrows; use mese crystal fragments for teleportation?
Add things to surface

(so we do have something else than mining)

  • More trees. Not as a mod, nodes will be added on request if they are added to mapgen More Trees Mod
Sounds
  • Add more variants of each sound (4 sounds good)
  • Add hurt sounds (already supported by the engine)

Other

See also