diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index a0ed8659b..2f280012b 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -104,7 +104,7 @@ void playerisdead(DDukePlayer* const p, int psectlotag, double fz, double cz); void footprints(DDukePlayer* const p); int makepainsounds(DDukePlayer* const p, int type); void playerCrouch(DDukePlayer* const p); -void playerJump(int snum, double fz, double cz); +void playerJump(DDukePlayer* const p, double fz, double cz); void checklook(int snum, ESyncBits actions); void playerCenterView(int snum); diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index e8891778d..0a6ae15b9 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -688,20 +688,17 @@ void playerCrouch(DDukePlayer* const p) } } -void playerJump(int snum, double floorz, double ceilingz) +void playerJump(DDukePlayer* const p, double floorz, double ceilingz) { - auto p = getPlayer(snum); - if (p->jumping_toggle == 0 && p->jumping_counter == 0) + if (p->jumping_toggle == 0 && p->jumping_counter == 0 && (floorz - ceilingz) > 56) { - if ((floorz - ceilingz) > 56) + const auto pact = p->GetActor(); + SetGameVarID(g_iReturnVarID, 0, pact, p->pnum); + OnEvent(EVENT_JUMP, p->pnum, pact, -1); + if (GetGameVarID(g_iReturnVarID, pact, p->pnum).value() == 0) { - SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum); - OnEvent(EVENT_JUMP, snum, p->GetActor(), -1); - if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0) - { - p->jumping_counter = 1; - p->jumping_toggle = 1; - } + p->jumping_counter = 1; + p->jumping_toggle = 1; } } } diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index e6c8223ce..209fe51ce 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -776,7 +776,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo else if ((actions & SB_JUMP)) { - playerJump(snum, floorz, ceilingz); + playerJump(p, floorz, ceilingz); } if (p->jumping_counter && (actions & SB_JUMP) == 0) diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 1bd362320..445548b18 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -1291,7 +1291,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo else if ((actions & SB_JUMP) && !p->OnMotorcycle && p->jumping_toggle == 0) { - playerJump(snum, floorz, ceilingz); + playerJump(p, floorz, ceilingz); } }