diff options
-rw-r--r-- | src/content_mapnode.cpp | 2 | ||||
-rw-r--r-- | src/environment.cpp | 24 | ||||
-rw-r--r-- | src/mapnode.h | 3 |
3 files changed, 22 insertions, 7 deletions
diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 3c1353467..f3d5b9f59 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -449,6 +449,7 @@ void content_mapnode_init() f->liquid_type = LIQUID_FLOWING; f->liquid_alternative_flowing = CONTENT_LAVA; f->liquid_alternative_source = CONTENT_LAVASOURCE; + f->damage_per_second = 4*2; if(f->special_material == NULL && g_texturesource) { // Flowing lava material @@ -496,6 +497,7 @@ void content_mapnode_init() f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; f->liquid_alternative_flowing = CONTENT_LAVA; f->liquid_alternative_source = CONTENT_LAVASOURCE; + f->damage_per_second = 4*2; if(f->special_material == NULL && g_texturesource) { // Flowing lava material diff --git a/src/environment.cpp b/src/environment.cpp index 05efe9eea..d6ff4d826 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1638,18 +1638,28 @@ void ClientEnvironment::step(float dtime) if(m_lava_hurt_interval.step(dtime, 1.0)) { v3f pf = lplayer->getPosition(); - v3s16 p1 = floatToInt(pf + v3f(0, BS*0.0, 0), BS); + + // Feet, middle and head + v3s16 p1 = floatToInt(pf + v3f(0, BS*0.1, 0), BS); MapNode n1 = m_map->getNodeNoEx(p1); - v3s16 p2 = floatToInt(pf + v3f(0, BS*1.5, 0), BS); + v3s16 p2 = floatToInt(pf + v3f(0, BS*0.8, 0), BS); MapNode n2 = m_map->getNodeNoEx(p2); - if(n1.getContent() == CONTENT_LAVA || - n1.getContent() == CONTENT_LAVASOURCE || - n2.getContent() == CONTENT_LAVA || - n2.getContent() == CONTENT_LAVASOURCE) + v3s16 p3 = floatToInt(pf + v3f(0, BS*1.6, 0), BS); + MapNode n3 = m_map->getNodeNoEx(p2); + + u32 damage_per_second = 0; + damage_per_second = MYMAX(damage_per_second, + content_features(n1).damage_per_second); + damage_per_second = MYMAX(damage_per_second, + content_features(n2).damage_per_second); + damage_per_second = MYMAX(damage_per_second, + content_features(n3).damage_per_second); + + if(damage_per_second != 0) { ClientEnvEvent event; event.type = CEE_PLAYER_DAMAGE; - event.player_damage.amount = 4*2; // 4 hearts + event.player_damage.amount = damage_per_second; m_client_event_queue.push_back(event); } } diff --git a/src/mapnode.h b/src/mapnode.h index 7ac050ef0..3101a9fc1 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -164,6 +164,8 @@ struct ContentFeatures // Digging properties for different tools DiggingPropertiesList digging_properties; + + u32 damage_per_second; // NOTE: Move relevant properties to here from elsewhere @@ -192,6 +194,7 @@ struct ContentFeatures special_atlas = NULL; light_source = 0; digging_properties.clear(); + damage_per_second = 0; } ContentFeatures() |