From 472585a7e8e511e7cc210ad8e2c17cad9dfeb186 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Mon, 15 Aug 2011 11:49:39 +0300
Subject: [PATCH] tuned lava/universal damage code

---
 src/content_mapnode.cpp |  2 ++
 src/environment.cpp     | 24 +++++++++++++++++-------
 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()
-- 
GitLab