@@ -235,7 +235,16 @@ void ClientEnvironment::step(float dtime)
235
235
&player_collisions);
236
236
}
237
237
238
- bool player_immortal = lplayer->getCAO () && lplayer->getCAO ()->isImmortal ();
238
+ bool player_immortal = false ;
239
+ f32 player_fall_factor = 1 .0f ;
240
+ GenericCAO *playercao = lplayer->getCAO ();
241
+ if (playercao) {
242
+ player_immortal = playercao->isImmortal ();
243
+ int addp_p = itemgroup_get (playercao->getGroups (),
244
+ " fall_damage_add_percent" );
245
+ // convert armor group into an usable fall damage factor
246
+ player_fall_factor = 1 .0f + (float )addp_p / 100 .0f ;
247
+ }
239
248
240
249
for (const CollisionInfo &info : player_collisions) {
241
250
v3f speed_diff = info.new_speed - info.old_speed ;;
@@ -248,17 +257,20 @@ void ClientEnvironment::step(float dtime)
248
257
speed_diff.Z = 0 ;
249
258
f32 pre_factor = 1 ; // 1 hp per node/s
250
259
f32 tolerance = BS*14 ; // 5 without damage
251
- f32 post_factor = 1 ; // 1 hp per node/s
252
260
if (info.type == COLLISION_NODE) {
253
261
const ContentFeatures &f = m_client->ndef ()->
254
262
get (m_map->getNode (info.node_p ));
255
- // Determine fall damage multiplier
256
- int addp = itemgroup_get (f.groups , " fall_damage_add_percent" );
257
- pre_factor = 1 .0f + (float )addp / 100 .0f ;
263
+ // Determine fall damage modifier
264
+ int addp_n = itemgroup_get (f.groups , " fall_damage_add_percent" );
265
+ // convert node group to an usable fall damage factor
266
+ f32 node_fall_factor = 1 .0f + (float )addp_n / 100 .0f ;
267
+ // combine both player fall damage modifiers
268
+ pre_factor = node_fall_factor * player_fall_factor;
258
269
}
259
270
float speed = pre_factor * speed_diff.getLength ();
260
- if (speed > tolerance && !player_immortal) {
261
- f32 damage_f = (speed - tolerance) / BS * post_factor;
271
+
272
+ if (speed > tolerance && !player_immortal && pre_factor > 0 .0f ) {
273
+ f32 damage_f = (speed - tolerance) / BS;
262
274
u16 damage = (u16)MYMIN (damage_f + 0.5 , U16_MAX);
263
275
if (damage != 0 ) {
264
276
damageLocalPlayer (damage, true );
0 commit comments