MCPcopy Create free account
hub / github.com/demoth/jake2 / P_FallingDamage

Method P_FallingDamage

game/src/main/java/jake2/game/PlayerView.java:507–574  ·  view source on GitHub ↗

Calculates damage and effect when a player falls down.

(SubgameEntity ent, GameExportsImpl gameExports)

Source from the content-addressed store, hash-verified

505 * Calculates damage and effect when a player falls down.
506 */
507 private static void P_FallingDamage(SubgameEntity ent, GameExportsImpl gameExports) {
508 float delta;
509 int damage;
510 float[] dir = { 0, 0, 0 };
511
512 if (ent.s.modelindex != 255)
513 return; // not in the player model
514
515 if (ent.movetype == GameDefines.MOVETYPE_NOCLIP)
516 return;
517
518 gclient_t client = ent.getClient();
519 if ((client.oldvelocity[2] < 0)
520 && (ent.velocity[2] > client.oldvelocity[2])
521 && (null == ent.groundentity)) {
522 delta = client.oldvelocity[2];
523 } else {
524 if (ent.groundentity == null)
525 return;
526 delta = ent.velocity[2] - client.oldvelocity[2];
527 }
528 delta = delta * delta * 0.0001f;
529
530 // never take falling damage if completely underwater
531 if (ent.waterlevel == 3)
532 return;
533 if (ent.waterlevel == 2)
534 delta *= 0.25;
535 if (ent.waterlevel == 1)
536 delta *= 0.5;
537
538 if (delta < 1)
539 return;
540
541 if (delta < 15) {
542 ent.s.event = Defines.EV_FOOTSTEP;
543 return;
544 }
545
546 client.fall_value = delta * 0.5f;
547 if (client.fall_value > 40)
548 client.fall_value = 40;
549 client.fall_time = gameExports.level.time + Defines.FALL_TIME;
550
551 if (delta > 30) {
552 if (ent.health > 0) {
553 if (delta >= 55)
554 ent.s.event = Defines.EV_FALLFAR;
555 else
556 ent.s.event = Defines.EV_FALL;
557 }
558 ent.pain_debounce_time = gameExports.level.time; // no normal pain
559 // sound
560 damage = (int) ((delta - 30) / 2);
561 if (damage < 1)
562 damage = 1;
563 Math3D.VectorSet(dir, 0, 0, 1);
564

Callers 1

ClientEndServerFrameMethod · 0.95

Calls 3

VectorSetMethod · 0.95
T_DamageMethod · 0.95
getClientMethod · 0.45

Tested by

no test coverage detected