Ideas for GSoC 2010
From Diversia wiki
Contents |
Client physics integration
Difficulty: Hard challenging
Currently all the physics happen on the server, this causes noticeable delays in physics reactions for all clients because of round-trip times. To fix this, the physics simulation must be run on the client while receiving periodic updates from the server to stay in sync. The character controller will also need to be changed to work with physics. Because the world can exist out of many dynamic rigid bodies and many users that interact with these bodies, it can be hard to properly sync the client physics with the server physics.
The server uses the bullet physics library for physics simulation. The client must also use bullet, using another physics engine in the client would destroy any determinism and make syncing impossible.
Object exchange between servers
Difficulty: Hard challenging
Server should be able to exchange objects with each other. When for example a ball rolls from server A to server B, server B should take ownership of the ball. Currently the ball just rolls 'off the earth'.
There are some challenging issues with exchanging objects, like:
- Not all servers want to accept objects from another server (border rules).
- A server owner could try to send a large amount of objects to another server, there must be limits in place to prevent this.
- When an object is near a border of a server, who should have control over the physics and when does control of the physics totally switch to the other server?
Permissions system
Difficulty: Medium
Diversia does not have a permissions system at the moment, making it very easy for users to abuse or crash servers and impossible to give extra rights to persons to manage your server.
Permissions would span things like if someone may create objects, how many objects they have in game at the same time and how many they can spawn per x seconds. Things like how much physical force you can apply to an object are also things that the permissions system can put a cap on (for medieval themed servers for example). Permissions can be given to groups or individual users, like how most permissions systems work.
Editor
Difficulty: Medium
An editor is needed to import assets to servers and to manage a server's assets. The editor shouldn't just be limited to importing and managing assets, it should also be possible to edit the world (change the terrain heightmap, paint the terrain, place objects, edit scripts and more) of a server. The editor would connect as a special client to a server to edit it, so all editing would be done online.
Saving the server state
Difficulty: Medium
When the server shuts down, the state is lost at the moment because it is not saved. The state of the server includes things like objects, their positions and other object related variables such as entity scale. The state must be saved before closing the server and also at certain intervals so the state is not lost if the server crashes.
In-game (3D) web browser
Difficulty: Medium
An in-game web browser surface that can be placed in the 3d world to show websites, browse together with other people, view flash video's and place advertisements. Can also be used locally to browse the web in a GUI element in the game.
What would the browser do?
- When a client receives an URL in a chat message it can be viewed without the need to switch to an external browser (local, not visible to other users, a GUI panel).
- People can open a server-side browser and view and discuss a website together (server-side, visible to other users, a surface in the world, browsing is synced).
- Could be based on Chromium
Server directory
Difficulty: Easy
A server directory that lists servers so that users can find servers to connect to and server owners can find servers to link with. The directory would be a web application that also provides raw data to be used by other applications (such as the client). Server owners can add their server to a directory but this is not required.
It should be possible to pool the directory servers, in a way that all the information is shared with the other directory servers.
The server details which will be stored on the directory server:
- Server name
- Server port
- Description
- Link request (looking for other servers to link with)
- Latency
- Location
- Available slots and maximum slots
Client GUI and work flow improvements
Difficulty: Easy
The client GUI and workflow needs improvement in some places:
- There needs to be a server browser with a list of (favourite) servers to connect to.
- Chat needs to be simplified.
- The object spawning user interface needs to be improved and extended.
- The process of spawning an object needs to be improved, currently every object is just spawned above the player. When spawning, the user should be able to place the object using the mouse, set an orientation and freeze the object if they want to.
- A GUI where the client settings can be changed needs to be created. This could also be an external application so settings can be changed before launching the client.
Improve and expand lua scripting
Difficulty: Easy
Lua scripting is working quite well in the project, but it needs a lot of extra events and functions to be really powerful.

