- 2: node is removed without tool wear after 0.5 seconds or so
(rail, sign)
- 3: node is removed without tool wear immediately (torch)
+- disable_jump: Player (and possibly other things) cannot jump from node
+- fall_damage_add_percent: damage speed = speed * (1 + value/100)
Known damage and digging time defining groups
----------------------------------------------
//f32 tolerance = BS*12; // 3 without damage
f32 tolerance = BS*14; // 5 without damage
f32 factor = 1;
+ const ContentFeatures &f = m_gamedef->ndef()->
+ get(m_map->getNodeNoEx(lplayer->getStandingNodePos()));
+ // Determine fall damage multiplier
+ int addp = itemgroup_get(f.groups, "fall_damage_add_percent");
+ info.speed *= (1.0 + (float)addp/100.0);
if(info.speed > tolerance)
{
f32 damage_f = (info.speed - tolerance)/BS*factor;
m_sneak_node_exists(false),
m_old_node_below(32767,32767,32767),
m_old_node_below_type("air"),
- m_need_to_get_new_sneak_node(true)
+ m_need_to_get_new_sneak_node(true),
+ m_can_jump(false)
{
// Initialize hp to 0, so that no hearts will be shown if server
// doesn't support health points
*/
m_old_node_below = floatToInt(position - v3f(0,BS/2,0), BS);
m_old_node_below_type = nodemgr->get(map.getNodeNoEx(m_old_node_below)).name;
+
+ /*
+ Check properties of the node on which the player is standing
+ */
+ const ContentFeatures &f = nodemgr->get(map.getNodeNoEx(getStandingNodePos()));
+ // Determine if jumping is possible
+ m_can_jump = touching_ground;
+ if(itemgroup_get(f.groups, "disable_jump"))
+ m_can_jump = false;
}
void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d)
speed.Y = walkspeed_max;
setSpeed(speed);
}
- else if(touching_ground)
+ else if(m_can_jump)
{
/*
NOTE: The d value in move() affects jump height by