From a655b3835f1df5c1d1d73361fb414b8ba0812643 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 29 Sep 2022 08:42:11 +0200 Subject: [PATCH] - like actFireVector, the direction vector needs to have unit length in 2D for actFireMissile as well. May later be turned into a 3D unit vector for pitch correct missile movement. --- source/games/blood/src/actor.cpp | 4 +++- source/games/blood/src/actor.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index bb71c6499..012ebda75 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -6444,8 +6444,10 @@ void actBuildMissile(DBloodActor* spawned, DBloodActor* actor) // //--------------------------------------------------------------------------- -DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, const DVector3& dv, int nType) +DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVector3 dv, int nType) { + // this function expects a vector with unit length in XY. Let's not depend on all callers doing it. + dv /= dv.XY().Length(); assert(nType >= kMissileBase && nType < kMissileMax); bool impact = false; const MissileType* pMissileInfo = &missileInfo[nType - kMissileBase]; diff --git a/source/games/blood/src/actor.h b/source/games/blood/src/actor.h index 304927d35..2146ffb8c 100644 --- a/source/games/blood/src/actor.h +++ b/source/games/blood/src/actor.h @@ -250,7 +250,7 @@ inline DBloodActor* actFireThing(DBloodActor* actor, int xyoff_, int zoff_, int return actFireThing(actor, xyoff, zoff, zvel, thingType, nSpeed); } -DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, const DVector3& dc, int nType); +DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVector3 dc, int nType); inline DBloodActor* actFireMissile(DBloodActor* actor, int xyoff_, int zoff_, int dx, int dy, int dz, int nType) {