DEADSOFTWARE

more flame tweaks
[d2df-sdl.git] / src / game / g_weapons.pas
index 0c8788129a170f7def99259fbbe97c1e43e92ce2..b5e46d11e930755b647728f1c8f9eae179555c98 100644 (file)
@@ -553,7 +553,7 @@ begin
         ShotType := WEAPON_FLAMETHROWER;
         Animation := nil;
         TextureID := 0;
-        Stopped := 0;
+        g_Frames_Get(TextureID, 'FRAMES_FLAME');
       end;
     end;
 
@@ -662,6 +662,10 @@ begin
   Shots[find_id].Obj.Accel.X := 0;
   Shots[find_id].Obj.Accel.Y := 0;
   Shots[find_id].SpawnerUID := Spawner;
+  if (ShotType = WEAPON_FLAMETHROWER) and (XV = 0) and (YV = 0) then
+    Shots[find_id].Stopped := 255
+  else
+    Shots[find_id].Stopped := 0;
   Result := find_id;
 end;
 
@@ -682,6 +686,7 @@ begin
   Shots[i].Obj.Vel.Y := (yd*s) div a;
   Shots[i].Obj.Accel.X := 0;
   Shots[i].Obj.Accel.Y := 0;
+  Shots[i].Stopped := 0;
   if Shots[i].ShotType in [WEAPON_ROCKETLAUNCHER, WEAPON_BFG] then
     Shots[i].Timeout := 900 // ~25 sec
   else 
@@ -1377,7 +1382,7 @@ begin
     triggers := nil;
     Animation := nil;
     TextureID := 0;
-    Stopped := 0;
+    g_Frames_Get(TextureID, 'FRAMES_FLAME');
   end;
 
   Shots[find_id].SpawnerUID := SpawnerUID;
@@ -1723,7 +1728,7 @@ begin
       oldvx := Obj.Vel.X;
       oldvy := Obj.Vel.Y;
     // Àêòèâèðîâàòü òðèããåðû ïî ïóòè (êðîìå óæå àêòèâèðîâàííûõ):
-      if g_Game_IsServer then
+      if (Stopped = 0) and g_Game_IsServer then
         t := g_Triggers_PressR(Obj.X, Obj.Y, Obj.Rect.Width, Obj.Rect.Height,
                                SpawnerUID, ACTIVATE_SHOT, triggers)
       else
@@ -1757,7 +1762,10 @@ begin
              (ShotType <> WEAPON_BSP_FIRE) and
              (ShotType <> WEAPON_FLAMETHROWER);
 
-      st := g_Obj_Move(@Obj, False, spl);
+      if Stopped = 0 then
+        st := g_Obj_Move(@Obj, False, spl)
+      else
+        st := 0;
 
       if WordBool(st and MOVE_FALLOUT) or (Obj.X < -1000) or
         (Obj.X > gMapInfo.Width+1000) or (Obj.Y < -1000) then
@@ -1948,14 +1956,11 @@ begin
             else
               tf := 3;
 
-            if (gTime mod tf = 0) and g_Frames_Get(_id, 'FRAMES_FLAME') then
+            if (gTime mod tf = 0) then
             begin
-              Anim := TAnimation.Create(_id, False, 2 + Random(2));
+              Anim := TAnimation.Create(TextureID, False, 2 + Random(2));
               Anim.Alpha := 0;
               case Stopped of
-                0:             g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
-                                 cy-4+Random(8)-(Anim.Height div 2),
-                                 Anim, ONCEANIM_SMOKE);
                 MOVE_HITWALL:  g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
                                  cy-12+Random(24)-(Anim.Height div 2),
                                  Anim, ONCEANIM_SMOKE);
@@ -1965,6 +1970,9 @@ begin
                 MOVE_HITCEIL:  g_GFX_OnceAnim(cx-12+Random(24)-(Anim.Width div 2),
                                  cy+6+Random(8)-(Anim.Height div 2),
                                  Anim, ONCEANIM_SMOKE);
+                else           g_GFX_OnceAnim(cx-4+Random(8)-(Anim.Width div 2),
+                                 cy-4+Random(8)-(Anim.Height div 2),
+                                 Anim, ONCEANIM_SMOKE);
               end;
               Anim.Free();
             end;
@@ -2129,7 +2137,7 @@ begin
           begin
             if (Shots[i].ShotType = WEAPON_ROCKETLAUNCHER) then
               e_DrawAdv(TextureID, Obj.X, Obj.Y, 0, True, False, a, @p, M_NONE)
-            else
+            else if (Shots[i].ShotType <> WEAPON_FLAMETHROWER) then
               e_Draw(TextureID, Obj.X, Obj.Y, 0, True, False);
           end;