From 0897a593c7f0c6716dc09a54f9b4d739b495d243 Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Mon, 28 Nov 2011 00:10:04 +0000 Subject: [PATCH] - When a missile teleports, maintain velocity on the other end. SVN r3322 (trunk) --- src/p_teleport.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/p_teleport.cpp b/src/p_teleport.cpp index d46df1005..12497590a 100644 --- a/src/p_teleport.cpp +++ b/src/p_teleport.cpp @@ -110,6 +110,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, sector_t *destsect; bool resetpitch = false; fixed_t floorheight, ceilingheight; + fixed_t missilespeed; oldx = thing->x; oldy = thing->y; @@ -122,6 +123,10 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, player = NULL; floorheight = destsect->floorplane.ZatPoint (x, y); ceilingheight = destsect->ceilingplane.ZatPoint (x, y); + if (thing->flags & MF_MISSILE) + { // We don't measure z velocity, because it doesn't change. + missilespeed = xs_CRoundToInt(TVector2(thing->velx, thing->vely).Length()); + } if (z == ONFLOORZ) { if (player) @@ -206,8 +211,8 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, if (thing->flags & MF_MISSILE) { angle >>= ANGLETOFINESHIFT; - thing->velx = FixedMul (thing->Speed, finecosine[angle]); - thing->vely = FixedMul (thing->Speed, finesine[angle]); + thing->velx = FixedMul (missilespeed, finecosine[angle]); + thing->vely = FixedMul (missilespeed, finesine[angle]); } // [BC] && bHaltVelocity. else if (!keepOrientation && bHaltVelocity) // no fog doesn't alter the player's momentum