Difference between revisions of "TODO"
(→TODO in Luanti: Add the rename to TODO list) |
|||
(98 intermediate revisions by 23 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Mbox|type=issue|text='''Checkout the [https://github.com/minetest/minetest/blob/master/doc/direction.md roadmap] instead'''<br/>The roadmap outlines a consensus on medium-term Luanti development. This page contains other wishlist items from core developers, but hasn't necessarily reached a consensus and may be long term.}} | ||
+ | |||
+ | == TODO in Luanti == | ||
+ | === Things to do soon === | ||
+ | |||
+ | * [https://github.com/minetest/minetest/issues/15322 Complete the rename from Minetest to Luanti] | ||
+ | |||
+ | ==== Mapgen ==== | ||
− | |||
− | |||
− | |||
* Add configuration for DungeonGen | * Add configuration for DungeonGen | ||
− | * Add | + | * Add configuration for CaveGen |
− | * | + | |
+ | ==== DecorationDef ==== | ||
+ | |||
+ | * Add cutoff handling | ||
+ | |||
+ | ==== BiomeDefManager ==== | ||
+ | |||
+ | * Add biomemap cache | ||
+ | * Scale temperature and humidity noise to more sensible value ranges | ||
+ | * Add biome weight attribute | ||
+ | * Find out how to account for elevation better! | ||
+ | * Add Voronoi diagram maker? https://forum.minetest.net/viewtopic.php?f=9&t=13163 | ||
− | + | ==== MapVoxelManipulator ==== | |
− | + | * Figure out a permanent, elegant solution to the walled-in cave problem - can use is_ground_content now - does this belong in VoxelManipulator? | |
− | * Figure out a permanent, elegant solution to the walled-in cave problem - can use is_ground_content now | + | |
+ | ==== EmergeThread ==== | ||
− | |||
* Figure out the thread priority mess | * Figure out the thread priority mess | ||
* Assign thread affinities for a bit of a performance boost (reduce L2 cache misses) | * Assign thread affinities for a bit of a performance boost (reduce L2 cache misses) | ||
− | === Other === | + | ==== GUIs / Formspecs ==== |
− | * | + | |
+ | * New main menu, which promotes Luanti better [https://github.com/minetest/minetest/issues/6733 6733] | ||
+ | * Refactor formspec / GUI code to be independent from serialisation [https://github.com/minetest/minetest/issues/9358 9358] | ||
+ | * Add new GUI API, probably based on a Lua DSL [https://github.com/minetest/minetest/issues/6527 6527] | ||
+ | * New GUI default theme [https://github.com/minetest/minetest/issues/9802 9802] | ||
+ | |||
+ | ==== Other ==== | ||
+ | |||
+ | * Make a library for reading a Luanti map without worrying about the database used. (libmtmap?) | ||
+ | * Add block tinting (grass, water, sky, etc.) (for biomes) | ||
* Add Fullbright option | * Add Fullbright option | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | === Big, long term goals (Client) === | ||
+ | |||
+ | ==== Client-Side Scripting (CSM) ==== | ||
+ | See original plans: [[Client_scripting_plans]] | ||
+ | |||
+ | * Server-Sent Client-Side Modding (SSCSM) | ||
+ | * Client-side prediction APIs | ||
+ | * GUI APIs | ||
+ | |||
+ | ==== Client-Side Biomes ==== | ||
+ | The server should transfer biome definitions to the client which calculates biomes locally. | ||
+ | Crossing over into a new biome should trigger a client-side script callback | ||
+ | Biomes have effects: | ||
+ | * Full scene post-effects (tint everything a different color) | ||
+ | * Temporarily override settings (cloud_height, enable_clouds, water_wave_height, water_wave_length, water_wave_speed) | ||
+ | |||
+ | ==== Hardware Lighting for Light Sources ==== | ||
+ | |||
+ | ''' Description '''<br /> | ||
+ | Benefits: | ||
+ | |||
+ | * would allow variable light range and cutoff | ||
+ | * would free up param1 of MapNodes to be used for storing more immediate node metadata (always a good thing!). | ||
+ | * would allow colored light sources | ||
+ | |||
+ | Of course, can use dynamic lights, except they're very intensive and generally a scarce resource | ||
+ | Dynamically generated lightmaps seem like a good way forward. <br /> | ||
+ | http://joshbeam.com/articles/dynamic_lightmaps_in_opengl/ | ||
<br /> | <br /> | ||
− | + | RealBadAngel is currently working on shader-based lighting. ''What strategy is he using?'' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br /> | <br /> | ||
− | === Voxel Area Entities === | + | |
+ | ==== Occlusion Culling/Occlusion Query ==== | ||
+ | |||
+ | Irrlicht does support occlusion culling. If enabled, it culls scene nodes which are entirely out of the camera's view fulcrum. <br /> | ||
+ | Problem: The entire map is an Irrlicht scene node. ''Why? What was the rationale for this decision?''<br /> | ||
+ | Solution: Make scene nodes per MapBlock. <br /> | ||
+ | While we're at it, playing around with scene nodes, it'd probably be a good idea to maintain two (or three) separate nodes for each MapBlock, one for each type of material. Opaque, transparent, and liquid drawtypes. This fixes the still unsolved material transparency problem. | ||
+ | |||
+ | === Big, long term goals (Server) === | ||
+ | |||
+ | ==== Voxel Area Entities ==== | ||
+ | |||
''' Description '''<br /> | ''' Description '''<br /> | ||
− | How cool would it be to build a full-sized boat in | + | How cool would it be to build a full-sized boat in Luanti, and then drive it around the ocean? That's one example of something that would be possible with this feature.<br /> |
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.<br /> | 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.<br /> | ||
''' What needs to be done ''' | ''' What needs to be done ''' | ||
Line 48: | Line 97: | ||
* Some way to store these in the map. Perhaps these objects will get special non-block-ID keys in the map DB. | * 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. | * A decent way to serialize these objects. This detail in particular will require special attention. | ||
+ | * For the previous two points, see http://irc.minetest.net/minetest-dev/2013-10-21#i_3383926 for a discussion of a possible way to handle the objects. | ||
<br /> | <br /> | ||
− | === Envlock Scope Reduction === | + | |
+ | ==== Envlock Scope Reduction ==== | ||
+ | |||
''' Description '''<br /> | ''' Description '''<br /> | ||
− | Envlock needs to be put on a diet. Seriously. This is believed to be the primary reason for perceived unresponsiveness in | + | Envlock needs to be put on a diet. Seriously. This is believed to be the primary reason for perceived unresponsiveness in Luanti - solving this would help matters immensely.<br /> |
''' What needs to be done ''' | ''' What needs to be done ''' | ||
* Add a thin abstraction layer for atomic operation intrinsics. | * Add a thin abstraction layer for atomic operation intrinsics. | ||
Line 58: | Line 110: | ||
* 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. | * 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. | ||
<br /> | <br /> | ||
− | === | + | |
+ | ==== Pre-generate world ==== | ||
+ | |||
''' Description '''<br /> | ''' Description '''<br /> | ||
− | |||
− | |||
''' What needs to be done ''' | ''' What needs to be done ''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br /> | <br /> | ||
− | === | + | ==== Add colorlike to node param types ==== |
+ | |||
''' Description '''<br /> | ''' Description '''<br /> | ||
− | + | 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 node definitions.<br /> | |
− | + | 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. | |
− | |||
− | |||
− | |||
<br /> | <br /> | ||
− | + | ''' What needs to be done '''<br /> | |
− | + | * 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 | |
− | |||
− | ''' What needs to be done | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
<br /> | <br /> | ||
− | === | + | ==== Rewrite falling code to C++ ==== |
+ | |||
''' Description '''<br /> | ''' Description '''<br /> | ||
− | + | nodeupdate() now very slow and can't handle large amount of falling nodes. | |
− | + | 100-1000 falling nodes now makes server very slow, 10000+ cause segfault. | |
− | + | To test - make sand floating island via mapgen, touch it | |
− | |||
<br /> | <br /> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
''' What needs to be done '''<br /> | ''' What needs to be done '''<br /> | ||
− | + | Rewrite in core with queue (like Map::transformLiquids) | |
− | |||
<br /> | <br /> | ||
− | === | + | ==== Pathfinder ==== |
− | '' | + | See [[Pathfinder wishlist]]. |
− | + | ||
− | + | === Big protocol changes === | |
− | + | ||
− | ''' | + | There are several features that would probably bring benefits in the long term, but can't currently be merged because of network protocol incompatibility. |
− | * | + | That is, they either can't be implemented in a way that lets old clients connect to new servers and new clients to old servers, or it would be a major pain to do so. |
− | * | + | The point of this section is to list such features so that they can be merged at once: a one-time incompatibility, perhaps coinciding with the release of 0.5.0, |
− | * | + | is better than breaking compatibility all the time. |
+ | '''Note: ''' Not all of the things listed below need to be done, these are just ideas. | ||
+ | * A binary key-value storage which easily supports missing fields with default values (e.g. [https://github.com/celeron55/minetest/blob/meta_set_nodedef_2/src/util/template_serialize.h header], [https://github.com/celeron55/minetest/blob/meta_set_nodedef_2/src/util/template_serialize.cpp source], [https://github.com/celeron55/minetest/blob/meta_set_nodedef_2/src/nodedef.cpp#L327 usage]) | ||
+ | * Using TCP for reliable data transfer (e.g. [https://github.com/celeron55/minetest/tree/tcp_connection tcp_connection]) | ||
+ | * Make the client request mapblocks (e.g. [https://github.com/celeron55/minetest/tree/tcp_blocks_2 tcp_blocks_2]) | ||
+ | * Improved authentication and encryption | ||
+ | * Remove old compatibility kludges. | ||
+ | * Many command IDs have become obsolete in the protocol: they could be consolidated | ||
+ | * Change builtin CONTENT_* to 0, 1, 2 | ||
<br /> | <br /> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== See also == | == See also == | ||
+ | * [https://wiki.minetest.net/Terminology Terminology] | ||
− | + | [[Category:Core Engine]] | |
+ | [[Category:Proposal]] |
Latest revision as of 13:11, 24 October 2024
Checkout the roadmap instead The roadmap outlines a consensus on medium-term Luanti development. This page contains other wishlist items from core developers, but hasn't necessarily reached a consensus and may be long term. |
TODO in Luanti
Things to do soon
Mapgen
- Add configuration for DungeonGen
- Add configuration for CaveGen
DecorationDef
- Add cutoff handling
BiomeDefManager
- Add biomemap cache
- Scale temperature and humidity noise to more sensible value ranges
- Add biome weight attribute
- Find out how to account for elevation better!
- Add Voronoi diagram maker? https://forum.minetest.net/viewtopic.php?f=9&t=13163
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)
GUIs / Formspecs
- New main menu, which promotes Luanti better 6733
- Refactor formspec / GUI code to be independent from serialisation 9358
- Add new GUI API, probably based on a Lua DSL 6527
- New GUI default theme 9802
Other
- Make a library for reading a Luanti map without worrying about the database used. (libmtmap?)
- Add block tinting (grass, water, sky, etc.) (for biomes)
- Add Fullbright option
Big, long term goals (Client)
Client-Side Scripting (CSM)
See original plans: Client_scripting_plans
- Server-Sent Client-Side Modding (SSCSM)
- Client-side prediction APIs
- GUI APIs
Client-Side Biomes
The server should transfer biome definitions to the client which calculates biomes locally. Crossing over into a new biome should trigger a client-side script callback Biomes have effects:
* Full scene post-effects (tint everything a different color) * Temporarily override settings (cloud_height, enable_clouds, water_wave_height, water_wave_length, water_wave_speed)
Hardware Lighting for Light Sources
Description
Benefits:
- would allow variable light range and cutoff
- would free up param1 of MapNodes to be used for storing more immediate node metadata (always a good thing!).
- would allow colored light sources
Of course, can use dynamic lights, except they're very intensive and generally a scarce resource
Dynamically generated lightmaps seem like a good way forward.
http://joshbeam.com/articles/dynamic_lightmaps_in_opengl/
RealBadAngel is currently working on shader-based lighting. What strategy is he using?
Occlusion Culling/Occlusion Query
Irrlicht does support occlusion culling. If enabled, it culls scene nodes which are entirely out of the camera's view fulcrum.
Problem: The entire map is an Irrlicht scene node. Why? What was the rationale for this decision?
Solution: Make scene nodes per MapBlock.
While we're at it, playing around with scene nodes, it'd probably be a good idea to maintain two (or three) separate nodes for each MapBlock, one for each type of material. Opaque, transparent, and liquid drawtypes. This fixes the still unsolved material transparency problem.
Big, long term goals (Server)
Voxel Area Entities
Description
How cool would it be to build a full-sized boat in Luanti, 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.
- For the previous two points, see http://irc.minetest.net/minetest-dev/2013-10-21#i_3383926 for a discussion of a possible way to handle the objects.
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 Luanti - 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.
Pre-generate world
Description
What needs to be done
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 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
Rewrite falling code to C++
Description
nodeupdate() now very slow and can't handle large amount of falling nodes.
100-1000 falling nodes now makes server very slow, 10000+ cause segfault.
To test - make sand floating island via mapgen, touch it
What needs to be done
Rewrite in core with queue (like Map::transformLiquids)
Pathfinder
See Pathfinder wishlist.
Big protocol changes
There are several features that would probably bring benefits in the long term, but can't currently be merged because of network protocol incompatibility. That is, they either can't be implemented in a way that lets old clients connect to new servers and new clients to old servers, or it would be a major pain to do so. The point of this section is to list such features so that they can be merged at once: a one-time incompatibility, perhaps coinciding with the release of 0.5.0, is better than breaking compatibility all the time. Note: Not all of the things listed below need to be done, these are just ideas.
- A binary key-value storage which easily supports missing fields with default values (e.g. header, source, usage)
- Using TCP for reliable data transfer (e.g. tcp_connection)
- Make the client request mapblocks (e.g. tcp_blocks_2)
- Improved authentication and encryption
- Remove old compatibility kludges.
- Many command IDs have become obsolete in the protocol: they could be consolidated
- Change builtin CONTENT_* to 0, 1, 2