diff --git a/source/core/gamefuncs.cpp b/source/core/gamefuncs.cpp index fc13dee84..f85ba7949 100644 --- a/source/core/gamefuncs.cpp +++ b/source/core/gamefuncs.cpp @@ -37,12 +37,12 @@ IntRect viewport3d; double cameradist, cameraclock; -bool calcChaseCamPos(DVector3& ppos, DCoreActor* act, sectortype** psect, DAngle ang, DAngle horiz, double const interpfrac) +bool calcChaseCamPos(DVector3& ppos, DCoreActor* act, sectortype** psect, DAngle ang, DAngle horiz, double const interpfrac, double const backamp) { if (!*psect) return false; // Calculate new pos to shoot backwards - DVector3 npos = gi->chaseCamPos(ang, horiz); + DVector3 npos = DVector3(-ang.ToVector(), horiz.Tan()) * backamp; HitInfoBase hitinfo; auto bakcstat = act->spr.cstat; @@ -78,7 +78,7 @@ bool calcChaseCamPos(DVector3& ppos, DCoreActor* act, sectortype** psect, DAngle { bakcstat = hitinfo.hitActor->spr.cstat; hitinfo.hitActor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); - calcChaseCamPos(ppos, act, psect, ang, horiz, interpfrac); + calcChaseCamPos(ppos, act, psect, ang, horiz, interpfrac, backamp); hitinfo.hitActor->spr.cstat = bakcstat; return false; } diff --git a/source/core/gamefuncs.h b/source/core/gamefuncs.h index 39dda0618..acb940568 100644 --- a/source/core/gamefuncs.h +++ b/source/core/gamefuncs.h @@ -240,7 +240,7 @@ extern double cameradist, cameraclock; void loaddefinitionsfile(const char* fn, bool cumulative = false, bool maingrp = false); -bool calcChaseCamPos(DVector3& ppos, DCoreActor* pspr, sectortype** psectnum, DAngle ang, DAngle horiz, double const interpfrac); +bool calcChaseCamPos(DVector3& ppos, DCoreActor* pspr, sectortype** psectnum, DAngle ang, DAngle horiz, double const interpfrac, double const backamp); int getslopeval(sectortype* sect, const DVector3& pos, double bazez); bool cansee(const DVector3& start, sectortype* sect1, const DVector3& end, sectortype* sect2); double intersectSprite(DCoreActor* actor, const DVector3& start, const DVector3& direction, DVector3& result, double maxfactor); diff --git a/source/core/gamestruct.h b/source/core/gamestruct.h index e1dca9f65..900806101 100644 --- a/source/core/gamestruct.h +++ b/source/core/gamestruct.h @@ -115,7 +115,6 @@ struct GameInterface virtual void ToggleThirdPerson() { } virtual void SwitchCoopView() { Printf("Unsupported command\n"); } virtual void ToggleShowWeapon() { Printf("Unsupported command\n"); } - virtual DVector3 chaseCamPos(DAngle ang, DAngle horiz) { return DVector3(0,0,0); } virtual void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) = 0; virtual void UpdateCameras(double smoothratio) {} virtual void EnterPortal(DCoreActor* viewer, int type) {} diff --git a/source/games/blood/src/blood.h b/source/games/blood/src/blood.h index 80ca2e8ad..9b9623a9a 100644 --- a/source/games/blood/src/blood.h +++ b/source/games/blood/src/blood.h @@ -139,7 +139,6 @@ struct GameInterface : public ::GameInterface void ToggleThirdPerson() override; void SwitchCoopView() override; void ToggleShowWeapon() override; - DVector3 chaseCamPos(DAngle ang, DAngle horiz) { return DVector3(-ang.ToVector() * 80., horiz.Tan() * 80.); } void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override; void EnterPortal(DCoreActor* viewer, int type) override; void LeavePortal(DCoreActor* viewer, int type) override; diff --git a/source/games/blood/src/view.cpp b/source/games/blood/src/view.cpp index 622b01639..551a6f4b6 100644 --- a/source/games/blood/src/view.cpp +++ b/source/games/blood/src/view.cpp @@ -529,7 +529,7 @@ static void SetupView(PLAYER* pPlayer, DVector3& cPos, DAngle& cA, DAngle& cH, s } else { - calcChaseCamPos(cPos, pPlayer->actor, &pSector, cA, cH, interpfrac); + calcChaseCamPos(cPos, pPlayer->actor, &pSector, cA, cH, interpfrac, 80.); } if (pSector != nullptr) CheckLink(cPos, &pSector); diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index 87e1852f1..0162a5bbb 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -55,7 +55,6 @@ struct GameInterface : public ::GameInterface void ToggleThirdPerson() override; void SwitchCoopView() override; void ToggleShowWeapon() override; - DVector3 chaseCamPos(DAngle ang, DAngle horiz) { return DVector3(-ang.ToVector() * 64., horiz.Tan() * 64.); } void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override; void UpdateCameras(double smoothratio) override; void EnterPortal(DCoreActor* viewer, int type) override; diff --git a/source/games/duke/src/render.cpp b/source/games/duke/src/render.cpp index 7491f3715..cad74911b 100644 --- a/source/games/duke/src/render.cpp +++ b/source/games/duke/src/render.cpp @@ -328,10 +328,10 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) cpos.Z -= adjustment; viewer = p->GetActor(); - if (!calcChaseCamPos(cpos, viewer, §, cang, choriz, interpfrac)) + if (!calcChaseCamPos(cpos, viewer, §, cang, choriz, interpfrac, 64.)) { cpos.Z += adjustment; - calcChaseCamPos(cpos, viewer, §, cang, choriz, interpfrac); + calcChaseCamPos(cpos, viewer, §, cang, choriz, interpfrac, 64.); } } diff --git a/source/games/exhumed/src/exhumed.h b/source/games/exhumed/src/exhumed.h index b781f8921..bda280a31 100644 --- a/source/games/exhumed/src/exhumed.h +++ b/source/games/exhumed/src/exhumed.h @@ -235,7 +235,6 @@ struct GameInterface : public ::GameInterface DAngle playerPitchMax() override { return DAngle::fromDeg(49.5); } void WarpToCoords(double x, double y, double z, DAngle ang) override; void ToggleThirdPerson() override; - DVector3 chaseCamPos(DAngle ang, DAngle horiz) { return DVector3(-ang.ToVector() * 96., horiz.Tan() * 96.); } void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override; int GetCurrentSkill() override; std::pair GetCoordinates() override; diff --git a/source/games/exhumed/src/view.cpp b/source/games/exhumed/src/view.cpp index 21e6c7a97..837322438 100644 --- a/source/games/exhumed/src/view.cpp +++ b/source/games/exhumed/src/view.cpp @@ -269,10 +269,10 @@ void DrawView(double interpfrac, bool sceneonly) if (bCamera) { nCamerapos.Z -= 10; - if (!calcChaseCamPos(nCamerapos, pPlayerActor, &pSector, nCameraang, nCamerapan, interpfrac)) + if (!calcChaseCamPos(nCamerapos, pPlayerActor, &pSector, nCameraang, nCamerapan, interpfrac, 96.)) { nCamerapos.Z += 10; - calcChaseCamPos(nCamerapos, pPlayerActor, &pSector, nCameraang, nCamerapan, interpfrac); + calcChaseCamPos(nCamerapos, pPlayerActor, &pSector, nCameraang, nCamerapan, interpfrac, 96.); } } } diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index 1b21eac98..66517a8ad 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -1295,10 +1295,10 @@ void drawscreen(PLAYER* pp, double interpfrac, bool sceneonly) { tpos.Z -= 33; - if (!calcChaseCamPos(tpos, pp->actor, &tsect, tang, thoriz, interpfrac)) + if (!calcChaseCamPos(tpos, pp->actor, &tsect, tang, thoriz, interpfrac, 128.)) { tpos.Z += 33; - calcChaseCamPos(tpos, pp->actor, &tsect, tang, thoriz, interpfrac); + calcChaseCamPos(tpos, pp->actor, &tsect, tang, thoriz, interpfrac, 128.); } } diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 063521c6d..fd93d7b5b 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -1885,7 +1885,6 @@ struct GameInterface : public ::GameInterface void WarpToCoords(double x, double y, double z, DAngle ang) override; void ToggleThirdPerson() override; void SwitchCoopView() override; - DVector3 chaseCamPos(DAngle ang, DAngle horiz) { return DVector3(-ang.ToVector() * 128., horiz.Tan() * 128.); } void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double smoothRatio) override; void UpdateCameras(double smoothratio) override; void EnterPortal(DCoreActor* viewer, int type) override;