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)
 {