MovingBlocks / Terasology

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

Next in Multi-world Support #3146

Open Cervator opened 6 years ago

Cervator commented 6 years ago

This is a substantial topic, worthy of GSOC, but likely still blocked by additional foundation work such as re-integrating gestalt-entity-system (#3145).

With the GSOC item on Sectors in 2017 by @Vizaxo we've got some of the initial foundation work in place, such as improved entity scope and independent entity pools. In brief the goal with sectors is isolating a sub-set of entities in a world that can be grouped in a sensible fashion away from one or more other groups so each can be processed independently and only shared with relevant connected clients.

That sounds an awful lot like having multiple independent worlds, doesn't it? The Sector thread in the forum goes deeper into the details: http://forum.terasology.org/threads/new-conceptual-layer-sector-plus-musings-on-multi-world-node.1420

But sub-instancing within a single world is still not quite splitting a hosted game universe into having multiple worlds in it, and even that we still don't quite have, just some pieces for it. It might be that another GSOC project could make more pieces even without #3145, maybe some could be split out from this issue. Some ideas:

Edit: Linking to #2774 which is another GSOC scope item and very related to this issue

OvermindDL1 commented 6 years ago

Could always start by instead of using an integral x/y/z for coordinate, instead start converting to integral w/x/y/z block coordinate, just make the 'world' another dimension to make it a 4-dimensional world. That alone would allow you to unify a lot between the multi-worlds by just treating the w coordinate like any other, but keep the physics/rendering constrained to the current 'w' only (although it is possible to 'rotate' to another primary axis to make a 4d rotating game in the Terasology engine as well at that point).

TheFlash98 commented 6 years ago

So digging up old issues, I found these issues related to entity system

1) ~#3244 : Revise BlockLifecycleEvents sending logic when chunks are loaded/created~ 2) #3095: Some type of blocks remain invisible on a client connected to a server 3) ~#3010: Advanced chunk monitor prevents game from closing cleanly~ 4) #3006: Bug in chunk prioritizing after respawning - player position wrongly related to camera? 5) ~#2949: Client entity polling in input system~ 6) ~#2896: Add ability to deactivate (or reactivate) components on entity~ 7) #2873: Protobuf updates 8) #2774: World storage / phase improvements 9) #2516: Having certain modules (with substantial item/block count?) causes invisible blocks in multiplayer 10) #2477: Better / clearer handling of duplicate chunk loading in multiplayer 11) #2385: Race condition / bad initialization order during game start vs chunk generation 12) #2381: No support for auto-downloading modules if server if running from source 13) #2343: Prefabs with empty lists cause failures - add support? 14) #2336: @In fails to initialize something that works via direct CoreRegistry retrieval 15) ~#2294: Thread pool model update / salvage old PR~ 16) #1936: Blocks with assets with the same name somehow get muddled 17) ~#1886: 343 chunks or over 22 million blocks need to be loaded at the server just to make the first chunk visible at the client?~ 18) #1780: World preview refactoring 19) #1770: Engine Initialisation and Lifecycle improvement 20) #1765: Request to change the way entities in a chunk are loaded and their life-cycle events called 21) #1720: When chunk is loaded, block entities are added into manager one by one (edited) 22) #1709: Observable Configs 23) #1700: Harden event handling against errors 24) #1698: When I do “Return to main” or “Exit Terasology” the BeforeChunkUnload is not called 25) #1694: Any block setting code should be using PlaceBlocks to allow vetoing 26) #1693: Any inventory changes should be going through InventoryManager 27) #1441: spawnPrefab behavior vs authority / network mode 28) #1402: Improve visibility of missing resource / asset scenarios 29) #1296: Improve game entry/exit with more hooks for disposal + docs 30) ~#1281: BlockStructuralSupportSystem cannot deal with stacked supported blocks~ 31) ~#1127: Refactor StateMainMenu.init(GameEngine) to remove line RegisterInputSystem~ 32) #1125: ComponentSystemManager initialization, registration and re-registration 33) #1079: EntityManager::copy works incorrectly on a remote client 34) #813: Allow overrides to be declared in a file (rather than just via the overrides directory) 35) #704: Events getting called after modules are “shutdown()” 36) #513: @ReceiveEvent should allow to exclude events for entities with specified Component 37) #256: Procedural creature generator 38) #137: Block Integrity System

I think some filtering can be done in these, some are even GSoC scope which can be removed. I tried as finding many possible 🙂 issue -> May be related issue -> Definitely related ~issue~ -> unrelated

Cervator commented 3 years ago

Multi-world (dimensions etc)