Plantlike visual scale: Send sqrt(visual_scale) to old clients
authorparamat <mat.gregory@virginmedia.com>
Sun, 29 Jan 2017 06:29:40 +0000 (06:29 +0000)
committerparamat <mat.gregory@virginmedia.com>
Mon, 30 Jan 2017 16:38:28 +0000 (16:38 +0000)
Keep compatibility with protocol < 30 clients now that visual_scale
is no longer applied twice to plantlike drawtype and mods are being
updated to a new value.

src/network/networkprotocol.h
src/nodedef.cpp

index a511d169b7e686ae684676279441b354534bef83..5301cc91cbf5b75f8d35038d5ecab6fc00081878 100644 (file)
@@ -146,6 +146,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        PROTOCOL VERSION 30:
                New ContentFeatures serialization version
                Add node and tile color and palette
+               Fix plantlike visual_scale being applied squared and add compatibility
+                       with pre-30 clients by sending sqrt(visual_scale)
 */
 
 #define LATEST_PROTOCOL_VERSION 30
index 0bb15026728a8d8560dc2c2a97411fecd2b57b13..c717b62b9fe4462e3ad694052fc303db164b9ba2 100644 (file)
@@ -1611,6 +1611,10 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
                        compatible_param_type_2 = CPT2_WALLMOUNTED;
        }
 
+       float compatible_visual_scale = visual_scale;
+       if (protocol_version < 30 && drawtype == NDT_PLANTLIKE)
+               compatible_visual_scale = sqrt(visual_scale);
+
        if (protocol_version == 13)
        {
                writeU8(os, 5); // version
@@ -1622,7 +1626,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
                        writeS16(os, i->second);
                }
                writeU8(os, drawtype);
-               writeF1000(os, visual_scale);
+               writeF1000(os, compatible_visual_scale);
                writeU8(os, 6);
                for (u32 i = 0; i < 6; i++)
                        tiledef[i].serialize(os, protocol_version);
@@ -1670,7 +1674,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
                        writeS16(os, i->second);
                }
                writeU8(os, drawtype);
-               writeF1000(os, visual_scale);
+               writeF1000(os, compatible_visual_scale);
                writeU8(os, 6);
                for (u32 i = 0; i < 6; i++)
                        tiledef[i].serialize(os, protocol_version);
@@ -1724,7 +1728,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
                        writeS16(os, i->second);
                }
                writeU8(os, drawtype);
-               writeF1000(os, visual_scale);
+               writeF1000(os, compatible_visual_scale);
                writeU8(os, 6);
                for (u32 i = 0; i < 6; i++)
                        tiledef[i].serialize(os, protocol_version);