Skip to content

Commit e66bb9b

Browse files
committedAug 25, 2014
Allow use all 6 faces for special tiles.
Protocol version bump.
1 parent 3ce6888 commit e66bb9b

File tree

3 files changed

+134
-28
lines changed

3 files changed

+134
-28
lines changed
 

‎src/clientserver.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
105105
add swap_node
106106
PROTOCOL_VERSION 23:
107107
TOSERVER_CLIENT_READY
108+
PROTOCOL_VERSION 24:
109+
ContentFeatures version 7
110+
ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT)
108111
*/
109112

110-
#define LATEST_PROTOCOL_VERSION 23
113+
#define LATEST_PROTOCOL_VERSION 24
111114

112115
// Server's supported network protocol range
113116
#define SERVER_PROTOCOL_VERSION_MIN 13

‎src/nodedef.cpp

+129-26
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ void ContentFeatures::reset()
195195
groups["dig_immediate"] = 2;
196196
drawtype = NDT_NORMAL;
197197
visual_scale = 1.0;
198-
for(u32 i=0; i<6; i++)
198+
for(u32 i = 0; i < 6; i++)
199199
tiledef[i] = TileDef();
200-
for(u16 j=0; j<CF_SPECIAL_COUNT; j++)
200+
for(u16 j = 0; j < CF_SPECIAL_COUNT; j++)
201201
tiledef_special[j] = TileDef();
202202
alpha = 255;
203203
post_effect_color = video::SColor(0, 0, 0, 0);
@@ -235,12 +235,12 @@ void ContentFeatures::reset()
235235

236236
void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
237237
{
238-
if(protocol_version < 14){
238+
if(protocol_version < 24){
239239
serializeOld(os, protocol_version);
240240
return;
241241
}
242242

243-
writeU8(os, 6); // version
243+
writeU8(os, 7); // version
244244
os<<serializeString(name);
245245
writeU16(os, groups.size());
246246
for(ItemGroupList::const_iterator
@@ -251,10 +251,10 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
251251
writeU8(os, drawtype);
252252
writeF1000(os, visual_scale);
253253
writeU8(os, 6);
254-
for(u32 i=0; i<6; i++)
254+
for(u32 i = 0; i < 6; i++)
255255
tiledef[i].serialize(os, protocol_version);
256256
writeU8(os, CF_SPECIAL_COUNT);
257-
for(u32 i=0; i<CF_SPECIAL_COUNT; i++){
257+
for(u32 i = 0; i < CF_SPECIAL_COUNT; i++){
258258
tiledef_special[i].serialize(os, protocol_version);
259259
}
260260
writeU8(os, alpha);
@@ -291,23 +291,23 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
291291
writeU8(os, drowning);
292292
writeU8(os, leveled);
293293
writeU8(os, liquid_range);
294+
writeU8(os, waving);
294295
// Stuff below should be moved to correct place in a version that otherwise changes
295296
// the protocol version
296-
writeU8(os, waving);
297297
}
298298

299299
void ContentFeatures::deSerialize(std::istream &is)
300300
{
301301
int version = readU8(is);
302-
if(version != 6){
302+
if(version != 7){
303303
deSerializeOld(is, version);
304304
return;
305305
}
306306

307307
name = deSerializeString(is);
308308
groups.clear();
309309
u32 groups_size = readU16(is);
310-
for(u32 i=0; i<groups_size; i++){
310+
for(u32 i = 0; i < groups_size; i++){
311311
std::string name = deSerializeString(is);
312312
int value = readS16(is);
313313
groups[name] = value;
@@ -316,11 +316,11 @@ void ContentFeatures::deSerialize(std::istream &is)
316316
visual_scale = readF1000(is);
317317
if(readU8(is) != 6)
318318
throw SerializationError("unsupported tile count");
319-
for(u32 i=0; i<6; i++)
319+
for(u32 i = 0; i < 6; i++)
320320
tiledef[i].deSerialize(is);
321321
if(readU8(is) != CF_SPECIAL_COUNT)
322322
throw SerializationError("unsupported CF_SPECIAL_COUNT");
323-
for(u32 i=0; i<CF_SPECIAL_COUNT; i++)
323+
for(u32 i = 0; i < CF_SPECIAL_COUNT; i++)
324324
tiledef_special[i].deSerialize(is);
325325
alpha = readU8(is);
326326
post_effect_color.setAlpha(readU8(is));
@@ -356,12 +356,12 @@ void ContentFeatures::deSerialize(std::istream &is)
356356
drowning = readU8(is);
357357
leveled = readU8(is);
358358
liquid_range = readU8(is);
359+
waving = readU8(is);
359360
// If you add anything here, insert it primarily inside the try-catch
360361
// block to not need to increase the version.
361362
try{
362363
// Stuff below should be moved to correct place in a version that
363364
// otherwise changes the protocol version
364-
waving = readU8(is);
365365
}catch(SerializationError &e) {};
366366
}
367367

@@ -617,7 +617,7 @@ class CNodeDefManager: public IWritableNodeDefManager
617617

618618
// Figure out the actual tiles to use
619619
TileDef tiledef[6];
620-
for(u32 j=0; j<6; j++)
620+
for(u32 j = 0; j < 6; j++)
621621
{
622622
tiledef[j] = f->tiledef[j];
623623
if(tiledef[j].name == "")
@@ -712,7 +712,7 @@ class CNodeDefManager: public IWritableNodeDefManager
712712
tile_shader[0] = shdsrc->getShader("water_surface_shader",material_type, f->drawtype);
713713

714714
// Tiles (fill in f->tiles[])
715-
for(u16 j=0; j<6; j++){
715+
for(u16 j = 0; j < 6; j++){
716716
// Shader
717717
f->tiles[j].shader_id = tile_shader[j];
718718
// Texture
@@ -821,7 +821,7 @@ class CNodeDefManager: public IWritableNodeDefManager
821821
writeU8(os, 1); // version
822822
u16 count = 0;
823823
std::ostringstream os2(std::ios::binary);
824-
for(u32 i=0; i<m_content_features.size(); i++)
824+
for(u32 i = 0; i < m_content_features.size(); i++)
825825
{
826826
if(i == CONTENT_IGNORE || i == CONTENT_AIR
827827
|| i == CONTENT_UNKNOWN)
@@ -851,7 +851,7 @@ class CNodeDefManager: public IWritableNodeDefManager
851851
u16 count = readU16(is);
852852
std::istringstream is2(deSerializeLongString(is), std::ios::binary);
853853
ContentFeatures f;
854-
for(u16 n=0; n<count; n++){
854+
for(u16 n = 0; n < count; n++){
855855
u16 i = readU16(is2);
856856

857857
// Read it from the string wrapper
@@ -936,10 +936,11 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version)
936936
writeU8(os, drawtype);
937937
writeF1000(os, visual_scale);
938938
writeU8(os, 6);
939-
for(u32 i=0; i<6; i++)
939+
for(u32 i = 0; i < 6; i++)
940940
tiledef[i].serialize(os, protocol_version);
941-
writeU8(os, CF_SPECIAL_COUNT);
942-
for(u32 i=0; i<CF_SPECIAL_COUNT; i++){
941+
//CF_SPECIAL_COUNT = 2 before cf ver. 7 and protocol ver. 24
942+
writeU8(os, 2);
943+
for(u32 i = 0; i < 2; i++){
943944
tiledef_special[i].serialize(os, protocol_version);
944945
}
945946
writeU8(os, alpha);
@@ -972,10 +973,61 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version)
972973
serializeSimpleSoundSpec(sound_dig, os);
973974
serializeSimpleSoundSpec(sound_dug, os);
974975
}
975-
else
976-
{
976+
else if (protocol_version > 13 && protocol_version < 24) {
977+
writeU8(os, 6); // version
978+
os<<serializeString(name);
979+
writeU16(os, groups.size());
980+
for(ItemGroupList::const_iterator
981+
i = groups.begin(); i != groups.end(); i++){
982+
os<<serializeString(i->first);
983+
writeS16(os, i->second);
984+
}
985+
writeU8(os, drawtype);
986+
writeF1000(os, visual_scale);
987+
writeU8(os, 6);
988+
for(u32 i = 0; i < 6; i++)
989+
tiledef[i].serialize(os, protocol_version);
990+
//CF_SPECIAL_COUNT = 2 before cf ver. 7 and protocol ver. 24
991+
writeU8(os, 2);
992+
for(u32 i = 0; i < 2; i++){
993+
tiledef_special[i].serialize(os, protocol_version);
994+
}
995+
writeU8(os, alpha);
996+
writeU8(os, post_effect_color.getAlpha());
997+
writeU8(os, post_effect_color.getRed());
998+
writeU8(os, post_effect_color.getGreen());
999+
writeU8(os, post_effect_color.getBlue());
1000+
writeU8(os, param_type);
1001+
writeU8(os, param_type_2);
1002+
writeU8(os, is_ground_content);
1003+
writeU8(os, light_propagates);
1004+
writeU8(os, sunlight_propagates);
1005+
writeU8(os, walkable);
1006+
writeU8(os, pointable);
1007+
writeU8(os, diggable);
1008+
writeU8(os, climbable);
1009+
writeU8(os, buildable_to);
1010+
os<<serializeString(""); // legacy: used to be metadata_name
1011+
writeU8(os, liquid_type);
1012+
os<<serializeString(liquid_alternative_flowing);
1013+
os<<serializeString(liquid_alternative_source);
1014+
writeU8(os, liquid_viscosity);
1015+
writeU8(os, liquid_renewable);
1016+
writeU8(os, light_source);
1017+
writeU32(os, damage_per_second);
1018+
node_box.serialize(os, protocol_version);
1019+
selection_box.serialize(os, protocol_version);
1020+
writeU8(os, legacy_facedir_simple);
1021+
writeU8(os, legacy_wallmounted);
1022+
serializeSimpleSoundSpec(sound_footstep, os);
1023+
serializeSimpleSoundSpec(sound_dig, os);
1024+
serializeSimpleSoundSpec(sound_dug, os);
1025+
writeU8(os, rightclickable);
1026+
writeU8(os, drowning);
1027+
writeU8(os, leveled);
1028+
writeU8(os, liquid_range);
1029+
} else
9771030
throw SerializationError("ContentFeatures::serialize(): Unsupported version requested");
978-
}
9791031
}
9801032

9811033
void ContentFeatures::deSerializeOld(std::istream &is, int version)
@@ -1029,9 +1081,60 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
10291081
deSerializeSimpleSoundSpec(sound_footstep, is);
10301082
deSerializeSimpleSoundSpec(sound_dig, is);
10311083
deSerializeSimpleSoundSpec(sound_dug, is);
1032-
}
1033-
else
1034-
{
1084+
} else if (version == 6) {
1085+
name = deSerializeString(is);
1086+
groups.clear();
1087+
u32 groups_size = readU16(is);
1088+
for(u32 i=0; i<groups_size; i++){
1089+
std::string name = deSerializeString(is);
1090+
int value = readS16(is);
1091+
groups[name] = value;
1092+
}
1093+
drawtype = (enum NodeDrawType)readU8(is);
1094+
visual_scale = readF1000(is);
1095+
if(readU8(is) != 6)
1096+
throw SerializationError("unsupported tile count");
1097+
for(u32 i=0; i<6; i++)
1098+
tiledef[i].deSerialize(is);
1099+
// CF_SPECIAL_COUNT in version 6 = 2
1100+
if(readU8(is) != 2)
1101+
throw SerializationError("unsupported CF_SPECIAL_COUNT");
1102+
for(u32 i=0; i<2; i++)
1103+
tiledef_special[i].deSerialize(is);
1104+
alpha = readU8(is);
1105+
post_effect_color.setAlpha(readU8(is));
1106+
post_effect_color.setRed(readU8(is));
1107+
post_effect_color.setGreen(readU8(is));
1108+
post_effect_color.setBlue(readU8(is));
1109+
param_type = (enum ContentParamType)readU8(is);
1110+
param_type_2 = (enum ContentParamType2)readU8(is);
1111+
is_ground_content = readU8(is);
1112+
light_propagates = readU8(is);
1113+
sunlight_propagates = readU8(is);
1114+
walkable = readU8(is);
1115+
pointable = readU8(is);
1116+
diggable = readU8(is);
1117+
climbable = readU8(is);
1118+
buildable_to = readU8(is);
1119+
deSerializeString(is); // legacy: used to be metadata_name
1120+
liquid_type = (enum LiquidType)readU8(is);
1121+
liquid_alternative_flowing = deSerializeString(is);
1122+
liquid_alternative_source = deSerializeString(is);
1123+
liquid_viscosity = readU8(is);
1124+
liquid_renewable = readU8(is);
1125+
light_source = readU8(is);
1126+
damage_per_second = readU32(is);
1127+
node_box.deSerialize(is);
1128+
selection_box.deSerialize(is);
1129+
legacy_facedir_simple = readU8(is);
1130+
legacy_wallmounted = readU8(is);
1131+
deSerializeSimpleSoundSpec(sound_footstep, is);
1132+
deSerializeSimpleSoundSpec(sound_dig, is);
1133+
deSerializeSimpleSoundSpec(sound_dug, is);
1134+
rightclickable = readU8(is);
1135+
drowning = readU8(is);
1136+
leveled = readU8(is);
1137+
liquid_range = readU8(is);
1138+
} else
10351139
throw SerializationError("unsupported ContentFeatures version");
1036-
}
10371140
}

‎src/nodedef.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ enum NodeDrawType
151151
// uses 2 textures, one for frames, second for faces
152152
};
153153

154-
#define CF_SPECIAL_COUNT 2
154+
#define CF_SPECIAL_COUNT 6
155155

156156
struct ContentFeatures
157157
{

0 commit comments

Comments
 (0)
Please sign in to comment.