DEADSOFTWARE

game: fix fireball alignment spawned by triggers
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Wed, 22 Feb 2023 12:50:49 +0000 (15:50 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 27 Feb 2023 00:15:36 +0000 (03:15 +0300)
src/game/g_triggers.pas
src/game/g_weapons.pas

index 779a9a151238f73afceb3c1d8e91df2cb3494ed2..9afef5d07f739b05a05d2c2791d62d9f94c34414 100644 (file)
@@ -725,37 +725,37 @@ begin
 
     TRIGGER_SHOT_IMP:
       begin
-        g_Weapon_ball1(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_ball1(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREBALL';
       end;
 
     TRIGGER_SHOT_PLASMA:
       begin
-        g_Weapon_Plasma(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_Plasma(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREPLASMA';
       end;
 
     TRIGGER_SHOT_SPIDER:
       begin
-        g_Weapon_aplasma(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_aplasma(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREPLASMA';
       end;
 
     TRIGGER_SHOT_CACO:
       begin
-        g_Weapon_ball2(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_ball2(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREBALL';
       end;
 
     TRIGGER_SHOT_BARON:
       begin
-        g_Weapon_ball7(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_ball7(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREBALL';
       end;
 
     TRIGGER_SHOT_MANCUB:
       begin
-        g_Weapon_manfire(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_manfire(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREBALL';
       end;
 
@@ -767,13 +767,13 @@ begin
 
     TRIGGER_SHOT_ROCKET:
       begin
-        g_Weapon_Rocket(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_Rocket(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREROCKET';
       end;
 
     TRIGGER_SHOT_BFG:
       begin
-        g_Weapon_BFGShot(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_BFGShot(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_WEAPON_FIREBFG';
       end;
 
@@ -807,7 +807,7 @@ begin
 
     TRIGGER_SHOT_FLAME:
       begin
-        g_Weapon_flame(wx, wy, dx, dy, 0, -1, True);
+        g_Weapon_flame(wx, wy, dx, dy, 0, -1, True, False);
         snd := 'SOUND_GAME_BURNING';
       end;
 
index 9b2b96808fc5fe09991d523063ef5a70e5a03291..8554e2264e3ecdc711a000b69b75f738c68c50c9 100644 (file)
@@ -54,16 +54,16 @@ function g_Weapon_CreateShot(I: Integer; ShotType: Byte; Spawner, TargetUID: Wor
 procedure g_Weapon_gun(const x, y, xd, yd, v, indmg: Integer; SpawnerUID: Word; CheckTrigger: Boolean);
 procedure g_Weapon_punch(x, y: Integer; d, SpawnerUID: Word);
 function g_Weapon_chainsaw(x, y: Integer; d, SpawnerUID: Word): Integer;
-procedure g_Weapon_rocket(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
+procedure g_Weapon_rocket(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
 procedure g_Weapon_revf(x, y, xd, yd: Integer; SpawnerUID, TargetUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_flame(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_plasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_ball1(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_ball2(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_ball7(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_aplasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_manfire(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
-procedure g_Weapon_bfgshot(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
+procedure g_Weapon_flame(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_plasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_ball1(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_ball2(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_ball7(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_aplasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_manfire(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
+procedure g_Weapon_bfgshot(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False; compat: Boolean = true);
 procedure g_Weapon_bfghit(x, y: Integer);
 procedure g_Weapon_pistol(x, y, xd, yd: Integer; SpawnerUID: Word; Silent: Boolean = False);
 procedure g_Weapon_mgun(x, y, xd, yd: Integer; SpawnerUID: Word; Silent: Boolean = False);
@@ -1659,7 +1659,7 @@ begin
 end;
 
 procedure g_Weapon_rocket(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id: DWORD;
   dx, dy: Integer;
@@ -1680,7 +1680,10 @@ begin
     Obj.Rect.Width := SHOT_ROCKETLAUNCHER_WIDTH;
     Obj.Rect.Height := SHOT_ROCKETLAUNCHER_HEIGHT;
 
-    dx := IfThen(xd > x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_ROCKETLAUNCHER;
@@ -1738,7 +1741,7 @@ begin
 end;
 
 procedure g_Weapon_plasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1759,7 +1762,10 @@ begin
     Obj.Rect.Width := SHOT_PLASMA_WIDTH;
     Obj.Rect.Height := SHOT_PLASMA_HEIGHT;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_PLASMA;
@@ -1777,7 +1783,7 @@ begin
 end;
 
 procedure g_Weapon_flame(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id: DWORD;
   dx, dy: Integer;
@@ -1798,7 +1804,10 @@ begin
     Obj.Rect.Width := SHOT_FLAME_WIDTH;
     Obj.Rect.Height := SHOT_FLAME_HEIGHT;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_FLAMETHROWER;
@@ -1817,7 +1826,7 @@ begin
 end;
 
 procedure g_Weapon_ball1(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1838,7 +1847,10 @@ begin
     Obj.Rect.Width := 16;
     Obj.Rect.Height := 16;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_IMP_FIRE;
@@ -1856,7 +1868,7 @@ begin
 end;
 
 procedure g_Weapon_ball2(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1877,7 +1889,10 @@ begin
     Obj.Rect.Width := 16;
     Obj.Rect.Height := 16;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_CACO_FIRE;
@@ -1895,7 +1910,7 @@ begin
 end;
 
 procedure g_Weapon_ball7(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1916,7 +1931,10 @@ begin
     Obj.Rect.Width := 16;
     Obj.Rect.Height := 16;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_BARON_FIRE;
@@ -1934,7 +1952,7 @@ begin
 end;
 
 procedure g_Weapon_aplasma(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1955,7 +1973,10 @@ begin
     Obj.Rect.Width := 16;
     Obj.Rect.Height := 16;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_BSP_FIRE;
@@ -1974,7 +1995,7 @@ begin
 end;
 
 procedure g_Weapon_manfire(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -1995,7 +2016,10 @@ begin
     Obj.Rect.Width := 32;
     Obj.Rect.Height := 32;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_MANCUB_FIRE;
@@ -2014,7 +2038,7 @@ begin
 end;
 
 procedure g_Weapon_bfgshot(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1;
-  Silent: Boolean = False);
+  Silent: Boolean = False; compat: Boolean = true);
 var
   find_id, FramesID: DWORD;
   dx, dy: Integer;
@@ -2035,7 +2059,10 @@ begin
     Obj.Rect.Width := SHOT_BFG_WIDTH;
     Obj.Rect.Height := SHOT_BFG_HEIGHT;
 
-    dx := IfThen(xd>x, -Obj.Rect.Width, 0);
+    if compat then
+      dx := IfThen(xd > x, -Obj.Rect.Width, 0)
+    else
+      dx := -(Obj.Rect.Width div 2);
     dy := -(Obj.Rect.Height div 2);
 
     ShotType := WEAPON_BFG;