From 09104ba6fe0454fce4ea403f4319329b520dccc6 Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@users.noreply.github.com>
Date: Sat, 3 Sep 2022 22:32:29 +0200
Subject: [PATCH] - floatified ScaleRandomPoint

---
 source/games/sw/src/game.h     |  2 +-
 source/games/sw/src/morph.cpp  | 22 +++++++++++++---------
 source/games/sw/src/player.cpp |  2 +-
 source/games/sw/src/track.cpp  | 20 +++++++++-----------
 4 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h
index 8ee13c2e9..424418be6 100644
--- a/source/games/sw/src/game.h
+++ b/source/games/sw/src/game.h
@@ -1952,7 +1952,7 @@ void SOBJ_AlignFloorToPoint(SECTOR_OBJECT* sop, const DVector3& pos);  // morph.
 void ScaleSectorObject(SECTOR_OBJECT* sop); // morph.c
 void MorphTornado(SECTOR_OBJECT* sop);  // morph.c
 void MorphFloor(SECTOR_OBJECT* sop);    // morph.c
-void ScaleRandomPoint(SECTOR_OBJECT* sop,short k,short ang,int x,int y,int *dx,int *dy);    // morph.c
+DVector2 ScaleRandomPoint(SECTOR_OBJECT* sop, short k, DAngle ang, const DVector2& pos);    // morph.c
 
 void CopySectorMatch(int match);  // copysect.c
 
diff --git a/source/games/sw/src/morph.cpp b/source/games/sw/src/morph.cpp
index 8a7599496..81c3c169a 100644
--- a/source/games/sw/src/morph.cpp
+++ b/source/games/sw/src/morph.cpp
@@ -251,9 +251,9 @@ void ScaleSectorObject(SECTOR_OBJECT* sop)
     }
 }
 
-void ScaleRandomPoint(SECTOR_OBJECT* sop, short k, short ang, int x, int y, int *dx, int *dy)
+DVector2 ScaleRandomPoint(SECTOR_OBJECT* sop, short k, DAngle ang, const DVector2& pos)
 {
-    int xmul,ymul;
+    int xmul, ymul;
 
     sop->scale_point_dist[k] += sop->scale_point_speed[k];
     if (sop->scale_point_dist[k] > sop->scale_point_dist_max)
@@ -273,19 +273,23 @@ void ScaleRandomPoint(SECTOR_OBJECT* sop, short k, short ang, int x, int y, int
     }
 
     // change up speed at random
-    if (RANDOM_P2(1024) < (sop->scale_point_rand_freq/2))
+    if (RANDOM_P2(1024) < (sop->scale_point_rand_freq / 2))
     {
         //sop->scale_point_speed[k] = SCALE_POINT_SPEED;
-        short half = sop->scale_point_base_speed/2;
-        short quart = sop->scale_point_base_speed/4;
+        short half = sop->scale_point_base_speed / 2;
+        short quart = sop->scale_point_base_speed / 4;
         sop->scale_point_speed[k] = sop->scale_point_base_speed + (RandomRange(half) - quart);
     }
 
-    xmul = (sop->scale_point_dist[k] * sop->scale_x_mult)>>8;
-    ymul = (sop->scale_point_dist[k] * sop->scale_y_mult)>>8;
+    xmul = (sop->scale_point_dist[k] * sop->scale_x_mult) >> 8;
+    ymul = (sop->scale_point_dist[k] * sop->scale_y_mult) >> 8;
+    DVector2 mul(xmul / 16., ymul / 16.);
 
-    *dx = x + MulScale(xmul, bcos(ang), 14);
-    *dy = y + MulScale(ymul, bsin(ang), 14);
+    DVector2 ret;
+
+    ret.X = pos.X + mul.X * ang.Cos();
+    ret.Y = pos.Y + mul.Y * ang.Sin();
+    return ret;
 }
 
 //
diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp
index 65af07d14..9dc957b9a 100644
--- a/source/games/sw/src/player.cpp
+++ b/source/games/sw/src/player.cpp
@@ -5010,7 +5010,7 @@ void DoPlayerStopOperate(PLAYER* pp)
         if (TEST_BOOL1(rsp))
             pp->angle.ang = pp->angle.oang = rsp->spr.angle;
         else
-            pp->angle.ang = pp->angle.oang = VecToAngle(pp->sop_remote->int_pmid().X - pp->int_ppos().X, pp->sop_remote->int_pmid().Y - pp->int_ppos().Y);
+            pp->angle.ang = pp->angle.oang = VecToAngle(pp->sop_remote->pmid.XY() - pp->pos.XY());
     }
 
     if (pp->sop_control)
diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp
index 5096834f8..a5dcd245c 100644
--- a/source/games/sw/src/track.cpp
+++ b/source/games/sw/src/track.cpp
@@ -1760,8 +1760,6 @@ PlayerPart:
 void RefreshPoints(SECTOR_OBJECT* sop, int nx, int ny, bool dynamic)
 {
     short wallcount = 0, delta_ang_from_orig;
-    short ang;
-    int dx,dy,x,y;
 
     // do scaling
     if (dynamic && sop->PreMoveAnimator)
@@ -1778,39 +1776,39 @@ void RefreshPoints(SECTOR_OBJECT* sop, int nx, int ny, bool dynamic)
             {
                 if (!(wal.extra && (wal.extra & WALLFX_DONT_MOVE)))
                 {
-                    dx = x = sop->int_pmid().X - sop->orig[wallcount].X * worldtoint;
-                    dy = y = sop->int_pmid().Y - sop->orig[wallcount].Y * worldtoint;
+                    DVector2 pos = sop->pmid.XY() - sop->orig[wallcount];
+                    DVector2 dpos = pos;
 
                     if (dynamic && sop->scale_type)
                     {
                         if (!(wal.extra & WALLFX_DONT_SCALE))
                         {
-                            ang = NORM_ANGLE(getangle(x - sop->int_pmid().X, y - sop->int_pmid().Y));
+                            auto ang = VecToAngle(pos - sop->pmid);
 
                             if (sop->scale_type == SO_SCALE_RANDOM_POINT)
                             {
                                 // was causing memory overwrites
-                                //ScaleRandomPoint(sop, k, ang, x, y, &dx, &dy);
-                                ScaleRandomPoint(sop, wallcount, ang, x, y, &dx, &dy);
+                                dpos = ScaleRandomPoint(sop, wallcount, ang, pos);
                             }
                             else
                             {
                                 int xmul = int(sop->scale_dist * sop->scale_x_mult)>>4;
                                 int ymul = int(sop->scale_dist * sop->scale_y_mult)>>4;
+                                DVector2 mul(xmul / 16., ymul / 16.);
 
-                                dx = x + MulScale(xmul, bcos(ang), 14);
-                                dy = y + MulScale(ymul, bsin(ang), 14);
+                                dpos.X = pos.X + mul.X * ang.Cos();
+                                dpos.Y = pos.Y + mul.Y * ang.Sin();
                             }
                         }
                     }
 
                     if (wal.extra & WALLFX_LOOP_OUTER)
                     {
-                        dragpoint(&wal, dx, dy);
+                        dragpoint(&wal, dpos);
                     }
                     else
                     {
-                        wal.movexy(dx, dy);
+                        wal.move(dpos);
                     }
                 }