diff options
author | Loïc Blot <loic.blot@unix-experience.fr> | 2017-06-06 16:19:04 +0200 |
---|---|---|
committer | Loïc Blot <loic.blot@unix-experience.fr> | 2017-06-06 16:19:04 +0200 |
commit | 8bdde45895658f16aa6b2546ccb59c5c4c9fc699 (patch) | |
tree | 33fd9c49f42a0f9a3194d68c74aee1c99ab6cec4 /src/mapnode.cpp | |
parent | fee5171298606d928d0f718d8ec0eeb2cacc1e71 (diff) | |
download | minetest-8bdde45895658f16aa6b2546ccb59c5c4c9fc699.tar.gz minetest-8bdde45895658f16aa6b2546ccb59c5c4c9fc699.tar.bz2 minetest-8bdde45895658f16aa6b2546ccb59c5c4c9fc699.zip |
Revert "Remove deprecated code segments (#5891)"
This reverts commit 599e13e95e81aadb959c9f3715aec9b425ede084.
Diffstat (limited to 'src/mapnode.cpp')
-rw-r--r-- | src/mapnode.cpp | 70 |
1 files changed, 59 insertions, 11 deletions
diff --git a/src/mapnode.cpp b/src/mapnode.cpp index cae3d0b14..d835daba2 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "nodedef.h" #include "map.h" +#include "content_mapnode.h" // For mapnode_translate_*_internal #include "serialization.h" // For ser_ver_supported #include "util/serialize.h" #include "log.h" @@ -630,19 +631,25 @@ void MapNode::serialize(u8 *dest, u8 version) } void MapNode::deSerialize(u8 *source, u8 version) { - if (!ser_ver_supported(version)) + if(!ser_ver_supported(version)) throw VersionMismatchException("ERROR: MapNode format not supported"); - if (version >= 24) { - param0 = readU16(source + 0); - param1 = readU8(source + 2); - param2 = readU8(source + 3); - } else { - param0 = readU8(source + 0); - param1 = readU8(source + 1); - param2 = readU8(source + 2); - if (param0 > 0x7F) { - param0 |= ((param2 & 0xF0) << 4); + if(version <= 21) + { + deSerialize_pre22(source, version); + return; + } + + if(version >= 24){ + param0 = readU16(source+0); + param1 = readU8(source+2); + param2 = readU8(source+3); + }else{ + param0 = readU8(source+0); + param1 = readU8(source+1); + param2 = readU8(source+2); + if(param0 > 0x7F){ + param0 |= ((param2&0xF0)<<4); param2 &= 0x0F; } } @@ -764,3 +771,44 @@ void MapNode::deSerializeBulk(std::istream &is, int version, } } +/* + Legacy serialization +*/ +void MapNode::deSerialize_pre22(u8 *source, u8 version) +{ + if(version <= 1) + { + param0 = source[0]; + } + else if(version <= 9) + { + param0 = source[0]; + param1 = source[1]; + } + else + { + param0 = source[0]; + param1 = source[1]; + param2 = source[2]; + if(param0 > 0x7f){ + param0 <<= 4; + param0 |= (param2&0xf0)>>4; + param2 &= 0x0f; + } + } + + // Convert special values from old version to new + if(version <= 19) + { + // In these versions, CONTENT_IGNORE and CONTENT_AIR + // are 255 and 254 + // Version 19 is fucked up with sometimes the old values and sometimes not + if(param0 == 255) + param0 = CONTENT_IGNORE; + else if(param0 == 254) + param0 = CONTENT_AIR; + } + + // Translate to our known version + *this = mapnode_translate_to_internal(*this, version); +} |