summaryrefslogtreecommitdiff
path: root/src/mapnode.cpp
diff options
context:
space:
mode:
authorLoïc Blot <loic.blot@unix-experience.fr>2017-06-06 16:19:04 +0200
committerLoïc Blot <loic.blot@unix-experience.fr>2017-06-06 16:19:04 +0200
commit8bdde45895658f16aa6b2546ccb59c5c4c9fc699 (patch)
tree33fd9c49f42a0f9a3194d68c74aee1c99ab6cec4 /src/mapnode.cpp
parentfee5171298606d928d0f718d8ec0eeb2cacc1e71 (diff)
downloadminetest-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.cpp70
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);
+}