Difference between revisions of "Engine/Structure"
< Engine
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
+ | [[Category:Core] | ||
+ | |||
== The base (NMPR) == | == The base (NMPR) == | ||
Everything is built on a small core, that was the original network multiplayer release of Minetest (call it NMPR; the 2010-10-24 version). Being around 10000 lines of code, it contains: | Everything is built on a small core, that was the original network multiplayer release of Minetest (call it NMPR; the 2010-10-24 version). Being around 10000 lines of code, it contains: |
Revision as of 12:08, 19 January 2013
[[Category:Core]
The base (NMPR)
Everything is built on a small core, that was the original network multiplayer release of Minetest (call it NMPR; the 2010-10-24 version). Being around 10000 lines of code, it contains:
- The Map: Voxel storage + lighting + rendering
- The Client + Server logic
- The Environment: Contains the map and the players, handles the simulation of the world
- The main loop: Invokes the client, the server, the environment and the rendering.
- A bunch of wrappers for OS-dependent things, and utilities.
As the current code still largely bases on the NMPR, it is useful to look at how it works.
Map (the voxels)
-
Network protocol
The high-level network protocol of NMPR is delightfully simple. There are four commands for the server, and four commands for the client. Since this, a lot has been added and changed, but the basic idea stays the same.
Client -> Server
TOSERVER_GETBLOCK | v3s16 p | Ask the server to send the data of a block |
TOSERVER_ADDNODE | v3s16 p, MapNode node | Inform the server of a placed node |
TOSERVER_REMOVENODE | v3s16 p, MapNode node | Inform the server of a removed node |
TOSERVER_PLAYERPOS | v3s32 p*100, v3s32 speed*100 | Inform the server of the positon of the local player |
Server -> Client
TOCLIENT_BLOCKDATA | v3s16 p, MapBlock data | Send the content of a block (16x16x16 nodes) |
TOCLIENT_ADDNODE | v3s16 p, MapNode node | Add a node |
TOCLIENT_REMOVENODE | v3s16 p, MapNode node | Remove a node |
TOCLIENT_PLAYERPOS | foreach(player){
|
Update players on client |
Minetest uses it's own reliability layer on top of UDP. It isn't well documented at the moment, and thorough understanding of it isn't that important, so let's skip it as of now.
Environment
-
Rendering
-