diff options
-rw-r--r-- | src/content_mapblock.cpp | 4 | ||||
-rw-r--r-- | src/content_mapnode.cpp | 16 | ||||
-rw-r--r-- | src/map.cpp | 12 | ||||
-rw-r--r-- | src/nodedef.cpp | 21 | ||||
-rw-r--r-- | src/nodedef.h | 4 | ||||
-rw-r--r-- | src/scriptapi.cpp | 8 |
6 files changed, 33 insertions, 32 deletions
diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index 0bd2d2263..8149d9f34 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -237,8 +237,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data, bool top_is_same_liquid = false; MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x,y+1,z)); - content_t c_flowing = nodedef->get(n).liquid_alternative_flowing; - content_t c_source = nodedef->get(n).liquid_alternative_source; + content_t c_flowing = nodedef->getId(nodedef->get(n).liquid_alternative_flowing); + content_t c_source = nodedef->getId(nodedef->get(n).liquid_alternative_source); if(ntop.getContent() == c_flowing || ntop.getContent() == c_source) top_is_same_liquid = true; diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index eda252dc1..878d66654 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -682,8 +682,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr) f.diggable = false; f.buildable_to = true; f.liquid_type = LIQUID_FLOWING; - f.liquid_alternative_flowing = CONTENT_WATER; - f.liquid_alternative_source = CONTENT_WATERSOURCE; + f.liquid_alternative_flowing = "water_flowing"; + f.liquid_alternative_source = "water_source"; f.liquid_viscosity = WATER_VISC; f.post_effect_color = video::SColor(64, 100, 100, 200); f.setSpecialMaterial(0, MaterialSpec("water.png", false)); @@ -705,8 +705,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr) f.buildable_to = true; f.liquid_type = LIQUID_SOURCE; f.dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; - f.liquid_alternative_flowing = CONTENT_WATER; - f.liquid_alternative_source = CONTENT_WATERSOURCE; + f.liquid_alternative_flowing = "water_flowing"; + f.liquid_alternative_source = "water_source"; f.liquid_viscosity = WATER_VISC; f.post_effect_color = video::SColor(64, 100, 100, 200); // New-style water source material (mostly unused) @@ -727,8 +727,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr) f.diggable = false; f.buildable_to = true; f.liquid_type = LIQUID_FLOWING; - f.liquid_alternative_flowing = CONTENT_LAVA; - f.liquid_alternative_source = CONTENT_LAVASOURCE; + f.liquid_alternative_flowing = "lava_flowing"; + f.liquid_alternative_source = "lava_source"; f.liquid_viscosity = LAVA_VISC; f.damage_per_second = 4*2; f.post_effect_color = video::SColor(192, 255, 64, 0); @@ -751,8 +751,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr) f.buildable_to = true; f.liquid_type = LIQUID_SOURCE; f.dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; - f.liquid_alternative_flowing = CONTENT_LAVA; - f.liquid_alternative_source = CONTENT_LAVASOURCE; + f.liquid_alternative_flowing = "lava_flowing"; + f.liquid_alternative_source = "lava_source"; f.liquid_viscosity = LAVA_VISC; f.damage_per_second = 4*2; f.post_effect_color = video::SColor(192, 255, 64, 0); diff --git a/src/map.cpp b/src/map.cpp index d27c6da12..822b3f659 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1602,7 +1602,7 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks) switch (liquid_type) { case LIQUID_SOURCE: liquid_level = LIQUID_LEVEL_SOURCE; - liquid_kind = nodemgr->get(n0).liquid_alternative_flowing; + liquid_kind = nodemgr->getId(nodemgr->get(n0).liquid_alternative_flowing); break; case LIQUID_FLOWING: liquid_level = (n0.param2 & LIQUID_LEVEL_MASK); @@ -1662,8 +1662,8 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks) case LIQUID_SOURCE: // if this node is not (yet) of a liquid type, choose the first liquid type we encounter if (liquid_kind == CONTENT_AIR) - liquid_kind = nodemgr->get(nb.n.getContent()).liquid_alternative_flowing; - if (nodemgr->get(nb.n.getContent()).liquid_alternative_flowing !=liquid_kind) { + liquid_kind = nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing); + if (nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing) != liquid_kind) { neutrals[num_neutrals++] = nb; } else { sources[num_sources++] = nb; @@ -1672,8 +1672,8 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks) case LIQUID_FLOWING: // if this node is not (yet) of a liquid type, choose the first liquid type we encounter if (liquid_kind == CONTENT_AIR) - liquid_kind = nodemgr->get(nb.n.getContent()).liquid_alternative_flowing; - if (nodemgr->get(nb.n.getContent()).liquid_alternative_flowing != liquid_kind) { + liquid_kind = nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing); + if (nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing) != liquid_kind) { neutrals[num_neutrals++] = nb; } else { flows[num_flows++] = nb; @@ -1694,7 +1694,7 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks) // liquid_kind will be set to either the flowing alternative of the node (if it's a liquid) // or the flowing alternative of the first of the surrounding sources (if it's air), so // it's perfectly safe to use liquid_kind here to determine the new node content. - new_node_content = nodemgr->get(liquid_kind).liquid_alternative_source; + new_node_content = nodemgr->getId(nodemgr->get(liquid_kind).liquid_alternative_source); } else if (num_sources == 1 && sources[0].t != NEIGHBOR_LOWER) { // liquid_kind is set properly, see above new_node_content = liquid_kind; diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 956bc1a5f..52d9fc8bf 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -144,8 +144,8 @@ void ContentFeatures::reset() extra_dug_item_rarity = 2; metadata_name = ""; liquid_type = LIQUID_NONE; - liquid_alternative_flowing = CONTENT_IGNORE; - liquid_alternative_source = CONTENT_IGNORE; + liquid_alternative_flowing = ""; + liquid_alternative_source = ""; liquid_viscosity = 0; light_source = 0; damage_per_second = 0; @@ -192,8 +192,8 @@ void ContentFeatures::serialize(std::ostream &os) writeS32(os, extra_dug_item_rarity); os<<serializeString(metadata_name); writeU8(os, liquid_type); - writeU16(os, liquid_alternative_flowing); - writeU16(os, liquid_alternative_source); + os<<serializeString(liquid_alternative_flowing); + os<<serializeString(liquid_alternative_source); writeU8(os, liquid_viscosity); writeU8(os, light_source); writeU32(os, damage_per_second); @@ -244,8 +244,8 @@ void ContentFeatures::deSerialize(std::istream &is, IGameDef *gamedef) extra_dug_item_rarity = readS32(is); metadata_name = deSerializeString(is); liquid_type = (enum LiquidType)readU8(is); - liquid_alternative_flowing = readU16(is); - liquid_alternative_source = readU16(is); + liquid_alternative_flowing = deSerializeString(is); + liquid_alternative_source = deSerializeString(is); liquid_viscosity = readU8(is); light_source = readU8(is); damage_per_second = readU32(is); @@ -337,13 +337,14 @@ public: ContentFeatures f; f.name = "ignore"; f.drawtype = NDT_AIRLIKE; - /*f.param_type = CPT_LIGHT; - f.light_propagates = true; - f.sunlight_propagates = true;*/ + f.param_type = CPT_NONE; + f.light_propagates = false; + f.sunlight_propagates = false; f.walkable = false; f.pointable = false; f.diggable = false; - f.buildable_to = false; + // A way to remove accidental CONTENT_IGNOREs + f.buildable_to = true; f.air_equivalent = true; set(CONTENT_IGNORE, f); } diff --git a/src/nodedef.h b/src/nodedef.h index 87f5fce83..645e75e3e 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -193,9 +193,9 @@ struct ContentFeatures // Whether the node is non-liquid, source liquid or flowing liquid enum LiquidType liquid_type; // If the content is liquid, this is the flowing version of the liquid. - content_t liquid_alternative_flowing; + std::string liquid_alternative_flowing; // If the content is liquid, this is the source version of the liquid. - content_t liquid_alternative_source; + std::string liquid_alternative_source; // Viscosity for fluid flow, ranging from 1 to 7, with // 1 giving almost instantaneous propagation and 7 being // the slowest possible diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index f19e98893..6f16c72e7 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -609,11 +609,11 @@ static int l_register_node(lua_State *L) f.liquid_type = (LiquidType)getenumfield(L, table0, "liquidtype", es_LiquidType, LIQUID_NONE); // If the content is liquid, this is the flowing version of the liquid. - // TODO: as name - // content_t liquid_alternative_flowing; + getstringfield(L, table0, "liquid_alternative_flowing", + f.liquid_alternative_flowing); // If the content is liquid, this is the source version of the liquid. - // TODO: as name - // content_t liquid_alternative_source; + getstringfield(L, table0, "liquid_alternative_source", + f.liquid_alternative_source); // Viscosity for fluid flow, ranging from 1 to 7, with // 1 giving almost instantaneous propagation and 7 being // the slowest possible |