void ContentFeatures::serialize(std::ostream &os)
{
- writeU8(os, 4); // version
+ writeU8(os, 5); // version
os<<serializeString(name);
writeU16(os, groups.size());
for(ItemGroupList::const_iterator
void ContentFeatures::deSerialize(std::istream &is)
{
int version = readU8(is);
- if(version != 4 && version != 3)
+ if(version != 5)
throw SerializationError("unsupported ContentFeatures version");
name = deSerializeString(is);
groups.clear();
visual_scale = readF1000(is);
if(readU8(is) != 6)
throw SerializationError("unsupported tile count");
- for(u32 i=0; i<6; i++){
- if(version == 4)
- tiledef[i].deSerialize(is);
- else if(version == 3) // Allow connecting to older servers
- tiledef[i].name = deSerializeString(is);
- }
+ for(u32 i=0; i<6; i++)
+ tiledef[i].deSerialize(is);
if(readU8(is) != CF_SPECIAL_COUNT)
throw SerializationError("unsupported CF_SPECIAL_COUNT");
- for(u32 i=0; i<CF_SPECIAL_COUNT; i++){
- if(version == 4){
- tiledef_special[i].deSerialize(is);
- } else if(version == 3){ // Allow connecting to older servers
- tiledef_special[i].name = deSerializeString(is);
- tiledef_special[i].backface_culling = readU8(is);
- }
- }
+ for(u32 i=0; i<CF_SPECIAL_COUNT; i++)
+ tiledef_special[i].deSerialize(is);
alpha = readU8(is);
post_effect_color.setAlpha(readU8(is));
post_effect_color.setRed(readU8(is));
}
}
// CONTENT_IGNORE = not found
- content_t getFreeId(bool require_full_param2)
+ content_t getFreeId()
{
- // If allowed, first search in the large 4-bit-param2 pool
- if(!require_full_param2){
- for(u16 i=0x800; i<=0xfff; i++){
- const ContentFeatures &f = m_content_features[i];
- if(f.name == "")
- return i;
- }
- }
- // Then search from the small 8-bit-param2 pool
- for(u16 i=0; i<=125; i++){
+ for(u32 i=0; i<=0xffff; i++){
const ContentFeatures &f = m_content_features[i];
if(f.name == "")
return i;
u16 id = CONTENT_IGNORE;
bool found = m_name_id_mapping.getId(name, id); // ignore aliases
if(!found){
- // Determine if full param2 is required
- bool require_full_param2 = (
- def.param_type_2 == CPT2_FULL
- ||
- def.param_type_2 == CPT2_FLOWINGLIQUID
- ||
- def.legacy_wallmounted
- );
// Get some id
- id = getFreeId(require_full_param2);
+ id = getFreeId();
if(id == CONTENT_IGNORE)
return CONTENT_IGNORE;
if(name != "")
f->solidness = 0;
} else {
f->solidness = 1;
- if(f->alpha == 255)
- f->solidness = 2;
f->backface_culling = false;
}
break;