tuned lava/universal damage code
authorPerttu Ahola <celeron55@gmail.com>
Mon, 15 Aug 2011 08:49:39 +0000 (11:49 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 15 Aug 2011 08:49:39 +0000 (11:49 +0300)
src/content_mapnode.cpp
src/environment.cpp
src/mapnode.h

index 3c135346785720c76c39dd20e3bdbb56af633179..f3d5b9f5946d4463a3a35d2d5a4f41708881b11e 100644 (file)
@@ -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
index 05efe9eea75e1970b61928b4b1641d3d4c46f718..d6ff4d826a7d804d138cd9e6442733e2ab1e6ee1 100644 (file)
@@ -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);
                }
        }
index 7ac050ef08055145cf60760eaf40c66aa1f5220a..3101a9fc142d752975f5f60aa08dc8173f22d4f8 100644 (file)
@@ -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()