From: Perttu Ahola Date: Mon, 15 Aug 2011 08:49:39 +0000 (+0300) Subject: tuned lava/universal damage code X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=472585a7e8e511e7cc210ad8e2c17cad9dfeb186;p=zefram%2Fminetest%2Fminetest_engine.git tuned lava/universal damage code --- diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 3c135346..f3d5b9f5 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 05efe9ee..d6ff4d82 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 7ac050ef..3101a9fc 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()