Fix for MSVC and move stuff around a bit in CMakeLists.txt and src/CMakeLists.txt
[oweals/minetest.git] / src / clientserver.h
index b96cc61aa15421a150494e212ab10f8842762a35..b4e9ccfc8931fc3e4ced1132eaf7db859ef481d7 100644 (file)
@@ -22,11 +22,41 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "utility.h"
 
+/*
+       changes by PROTOCOL_VERSION:
+
+       PROTOCOL_VERSION 3:
+               Base for writing changes here
+       PROTOCOL_VERSION 4:
+               Add TOCLIENT_TEXTURES
+               Add TOCLIENT_TOOLDEF
+               Add TOCLIENT_NODEDEF
+               Add TOCLIENT_CRAFTITEMDEF
+               Add TOSERVER_INTERACT
+               Obsolete TOSERVER_CLICK_ACTIVEOBJECT
+               Obsolete TOSERVER_GROUND_ACTION
+       PROTOCOL_VERSION 5:
+               Make players to be handled mostly as ActiveObjects
+       PROTOCOL_VERSION 6:
+               Only non-cached textures are sent
+       PROTOCOL_VERSION 7:
+               Add TOCLIENT_ITEMDEF
+               Obsolete TOCLIENT_TOOLDEF
+               Obsolete TOCLIENT_CRAFTITEMDEF
+               Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
+       PROTOCOL_VERSION 8:
+               Digging based on item groups
+*/
+
+#define PROTOCOL_VERSION 8
+
 #define PROTOCOL_ID 0x4f457403
 
 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
                                // base64-encoded SHA-1 (27+\0).
 
+#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
+
 enum ToClientCommand
 {
        TOCLIENT_INIT = 0x10,
@@ -59,7 +89,7 @@ enum ToClientCommand
                [N+2+12+12+4] s32 yaw*100
        */
 
-       TOCLIENT_PLAYERINFO = 0x24,
+       TOCLIENT_PLAYERINFO = 0x24, // Obsolete
        /*
                [0] u16 command
                // Followed by an arbitary number of these:
@@ -83,7 +113,7 @@ enum ToClientCommand
                [2] serialized inventory
        */
        
-       TOCLIENT_OBJECTDATA = 0x28,
+       TOCLIENT_OBJECTDATA = 0x28, // Obsolete
        /*
                Sent as unreliable.
 
@@ -105,8 +135,12 @@ enum ToClientCommand
        /*
                u16 command
                u16 time (0-23999)
+               Added in a later version:
+               f1000 time_speed
        */
 
+       // (oops, there is some gap here)
+
        TOCLIENT_CHAT_MESSAGE = 0x30,
        /*
                u16 command
@@ -179,6 +213,62 @@ enum ToClientCommand
                u8 bool set camera point target
                v3f1000 camera point target (to point the death cause or whatever)
        */
+
+       TOCLIENT_TEXTURES = 0x38,
+       /*
+               u16 command
+               u16 total number of texture bunches
+               u16 index of this bunch
+               u32 number of textures in this bunch
+               for each texture {
+                       u16 length of name
+                       string name
+                       u32 length of data
+                       data
+               }
+       */
+       
+       TOCLIENT_TOOLDEF = 0x39,
+       /*
+               u16 command
+               u32 length of the next item
+               serialized ToolDefManager
+       */
+       
+       TOCLIENT_NODEDEF = 0x3a,
+       /*
+               u16 command
+               u32 length of the next item
+               serialized NodeDefManager
+       */
+       
+       TOCLIENT_CRAFTITEMDEF = 0x3b,
+       /*
+               u16 command
+               u32 length of the next item
+               serialized CraftiItemDefManager
+       */
+
+       TOCLIENT_ANNOUNCE_TEXTURES = 0x3c,
+
+       /*
+               u16 command
+               u32 number of textures
+               for each texture {
+                       u16 length of name
+                       string name
+                       u16 length of sha1_digest
+                       string sha1_digest
+               }
+       */
+
+       TOCLIENT_ITEMDEF = 0x3d,
+       /*
+               u16 command
+               u32 length of next item
+               serialized ItemDefManager
+       */
+
 };
 
 enum ToServerCommand
@@ -240,7 +330,7 @@ enum ToServerCommand
                [8] u16 i
        */
 
-       TOSERVER_CLICK_OBJECT = 0x27,
+       TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
        /*
                length: 13
                [0] u16 command
@@ -250,7 +340,7 @@ enum ToServerCommand
                [11] u16 item
        */
 
-       TOSERVER_GROUND_ACTION = 0x28,
+       TOSERVER_GROUND_ACTION = 0x28, // Obsolete
        /*
                length: 17
                [0] u16 command
@@ -267,7 +357,9 @@ enum ToServerCommand
        
        TOSERVER_RELEASE = 0x29, // Obsolete
 
-       TOSERVER_SIGNTEXT = 0x30, // Old signs
+       // (oops, there is some gap here)
+
+       TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
        /*
                u16 command
                v3s16 blockpos
@@ -296,7 +388,7 @@ enum ToServerCommand
                textdata
        */
 
-       TOSERVER_CLICK_ACTIVEOBJECT = 0x34,
+       TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
        /*
                length: 7
                [0] u16 command
@@ -332,13 +424,43 @@ enum ToServerCommand
        /*
                u16 TOSERVER_RESPAWN
        */
+
+       TOSERVER_INTERACT = 0x39,
+       /*
+               [0] u16 command
+               [2] u8 action
+               [3] u16 item
+               [5] u32 length of the next item
+               [9] serialized PointedThing
+               actions:
+               0: start digging (from undersurface) or use
+               1: stop digging (all parameters ignored)
+               2: digging completed
+               3: place block or item (to abovesurface)
+               4: use item
+
+               (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
+       */
+       
+       TOSERVER_REQUEST_TEXTURES = 0x40,
+
+       /*
+                       u16 command
+                       u16 number of textures requested
+                       for each texture {
+                               u16 length of name
+                               string name
+                       }
+        */
+
 };
 
-inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time)
+inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed)
 {
-       SharedBuffer<u8> data(2+2);
+       SharedBuffer<u8> data(2+2+4);
        writeU16(&data[0], TOCLIENT_TIME_OF_DAY);
        writeU16(&data[2], time);
+       writeF1000(&data[4], time_speed);
        return data;
 }