diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index 802280f3d..87fdfc589 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -115,7 +115,7 @@ int wakeup(DDukeActor* sn, int pn); int timedexit(int snum); void dokneeattack(int snum, const std::initializer_list& respawnlist); int endoflevel(int snum); -void playerisdead(int snum, int psectlotag, int fz, int cz); +void playerisdead(int snum, int psectlotag, double fz, double cz); void footprints(int snum); int makepainsounds(int snum, int type); void playerCrouch(int snum); diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index ead3dd8d2..5f7c7834e 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -546,7 +546,7 @@ inline void backupplayer(player_struct* p) p->horizon.backup(); } -void playerisdead(int snum, int psectlotag, int fz, int cz) +void playerisdead(int snum, int psectlotag, double floorz, double ceilingz) { auto p = &ps[snum]; auto actor = p->GetActor(); @@ -604,7 +604,7 @@ void playerisdead(int snum, int psectlotag, int fz, int cz) { if (p->on_warping_sector == 0) { - if (abs(p->pos.Z - fz * inttoworld) > (gs.playerheight * 0.5)) + if (abs(p->pos.Z - floorz) > (gs.playerheight * 0.5)) p->pos.Z += 348/ 256.; } else @@ -625,8 +625,8 @@ void playerisdead(int snum, int psectlotag, int fz, int cz) pushmove(p->pos, &p->cursector, 128, (4 << 8), (20 << 8), CLIPMASK0); - if (fz > cz + (16 << 8) && actor->spr.pal != 1) - p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((fz + p->player_int_pos().Z) >> 7)); + if (floorz > ceilingz + 16 && actor->spr.pal != 1) + p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->pos.Z) * 2)); p->on_warping_sector = 0; diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index d069acd30..1c7ae9bc5 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2855,7 +2855,7 @@ void processinput_d(int snum) if (pact->spr.extra <= 0 && !ud.god) { - playerisdead(snum, psectlotag, fz, cz); + playerisdead(snum, psectlotag, fz * inttoworld, cz * inttoworld); return; } diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 7da4515ce..ac0088264 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3533,7 +3533,7 @@ void processinput_r(int snum) if (pact->spr.extra <= 0 && !ud.god) { - playerisdead(snum, psectlotag, fz, cz); + playerisdead(snum, psectlotag, fz * inttoworld, cz * inttoworld); return; }