DEADSOFTWARE

flamer projectiles don't push
[d2df-sdl.git] / src / game / g_weapons.pas
index 4df78ad7533548aa4f98f97f29404278a35ba7df..a008366b66617507e8fcb922b3b3e98c5169974e 100644 (file)
@@ -13,7 +13,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *)
-{$MODE DELPHI}
+{$INCLUDE g_amodes.inc}
 unit g_weapons;
 
 interface
@@ -88,6 +88,8 @@ procedure g_Weapon_DestroyShot(I: Integer; X, Y: Integer; Loud: Boolean = True);
 procedure g_Weapon_SaveState(var Mem: TBinMemoryWriter);
 procedure g_Weapon_LoadState(var Mem: TBinMemoryReader);
 
+procedure g_Weapon_AddDynLights();
+
 const
   WEAPON_KASTET         = 0;
   WEAPON_SAW            = 1;
@@ -725,8 +727,9 @@ var
           if ChkTeam then
             if HitPlayer(gPlayers[i], d, obj^.Vel.X, obj^.Vel.Y, SpawnerUID, t) then
             begin
-              gPlayers[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4,
-                               (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4);
+              if t <> HIT_FLAME then
+                gPlayers[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4,
+                                 (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4);
               if t = HIT_BFG then
                 g_Game_DelayEvent(DE_BFGHIT, 1000, SpawnerUID);
               Result := True;
@@ -746,8 +749,9 @@ var
         if (gMonsters[i] <> nil) and gMonsters[i].Live and g_Obj_Collide(obj, @gMonsters[i].Obj) then
           if HitMonster(gMonsters[i], d, obj^.Vel.X, obj^.Vel.Y, SpawnerUID, t) then
           begin
-            gMonsters[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4,
-                              (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4);
+            if t <> HIT_FLAME then
+              gMonsters[i].Push((obj^.Vel.X+obj^.Accel.X)*IfThen(t = HIT_BFG, 8, 1) div 4,
+                                (obj^.Vel.Y+obj^.Accel.Y)*IfThen(t = HIT_BFG, 8, 1) div 4);
             Result := True;
             break;
           end;
@@ -1820,6 +1824,7 @@ begin
                     Anim := TAnimation.Create(TextureID, False, 8);
                     Anim.Blending := False;
                     g_GFX_OnceAnim((Obj.X+32)-58, (Obj.Y+8)-36, Anim);
+                    g_DynLightExplosion((Obj.X+32), (Obj.Y+8), 64, 1, 0, 0);
                     Anim.Free();
                   end;
                 end
@@ -1830,6 +1835,7 @@ begin
                     Anim := TAnimation.Create(TextureID, False, 6);
                     Anim.Blending := False;
                     g_GFX_OnceAnim(cx-64, cy-64, Anim);
+                    g_DynLightExplosion(cx, cy, 64, 1, 0, 0);
                     Anim.Free();
                   end;
                 end;
@@ -1887,6 +1893,7 @@ begin
                 Anim.Blending := False;
                 g_GFX_OnceAnim(cx-16, cy-16, Anim);
                 Anim.Free();
+                g_DynLightExplosion(cx, cy, 32, 0, 0.5, 0.5);
               end;
 
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y);
@@ -1971,6 +1978,7 @@ begin
               end;
               g_GFX_OnceAnim(tcx-(Anim.Width div 2), tcy-(Anim.Height div 2), Anim, ONCEANIM_SMOKE);
               Anim.Free();
+              //g_DynLightExplosion(tcx, tcy, 1, 1, 0.8, 0.3);
             end;
           end;
 
@@ -2000,6 +2008,7 @@ begin
                 Anim.Blending := False;
                 g_GFX_OnceAnim(cx-64, cy-64, Anim);
                 Anim.Free();
+                g_DynLightExplosion(cx, cy, 96, 0, 1, 0);
               end;
 
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y);
@@ -2424,4 +2433,38 @@ begin
   end;
 end;
 
+
+procedure g_Weapon_AddDynLights();
+var
+  i: Integer;
+begin
+  if Shots = nil then Exit;
+  for i := 0 to High(Shots) do
+  begin
+    if Shots[i].ShotType = 0 then continue;
+    if (Shots[i].ShotType = WEAPON_ROCKETLAUNCHER) or
+       (Shots[i].ShotType = WEAPON_BARON_FIRE) or
+       (Shots[i].ShotType = WEAPON_MANCUB_FIRE) or
+       (Shots[i].ShotType = WEAPON_SKEL_FIRE) or
+       (Shots[i].ShotType = WEAPON_IMP_FIRE) or
+       (Shots[i].ShotType = WEAPON_CACO_FIRE) or
+       (Shots[i].ShotType = WEAPON_MANCUB_FIRE) or
+       (Shots[i].ShotType = WEAPON_BSP_FIRE) or
+       (Shots[i].ShotType = WEAPON_PLASMA) or
+       (Shots[i].ShotType = WEAPON_BFG) or
+       (Shots[i].ShotType = WEAPON_FLAMETHROWER) or
+       false then
+    begin
+      if (Shots[i].ShotType = WEAPON_PLASMA) then
+        g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128,  0, 0.3, 1, 0.4)
+      else if (Shots[i].ShotType = WEAPON_BFG) then
+        g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128,  0, 1, 0, 0.5)
+      else if (Shots[i].ShotType = WEAPON_FLAMETHROWER) then
+        g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 42,  1, 0.8, 0, 0.4)
+      else
+        g_AddDynLight(Shots[i].Obj.X+(Shots[i].Obj.Rect.Width div 2), Shots[i].Obj.Y+(Shots[i].Obj.Rect.Height div 2), 128,  1, 0, 0, 0.4);
+    end;
+  end;
+end;
+
 end.