DEADSOFTWARE

game: disable gfx for server
[d2df-sdl.git] / src / game / g_weapons.pas
index fb89fcc3a1f6b09871823aedd1d0183abc827243..b8c35a8a77a73d29cf762e6ce9d2e2e7e80a6f8e 100644 (file)
@@ -110,12 +110,16 @@ var
 
 implementation
 
-uses
-  Math, g_map, g_player, g_gfx, g_sound, g_panel,
-  g_console, g_options, g_game, r_textures, r_animations,
-  g_triggers, MAPDEF, e_log, g_monsters, g_saveload,
-  g_language, g_netmsg, g_grid,
-  geom, binheap, hashtable, utils, xstreams;
+  uses
+    {$IFDEF ENABLE_GFX}
+      g_gfx,
+    {$ENDIF}
+    Math, g_map, g_player, g_sound, g_panel,
+    g_console, g_options, g_game,
+    g_triggers, MAPDEF, e_log, g_monsters, g_saveload,
+    g_language, g_netmsg, g_grid,
+    geom, binheap, hashtable, utils, xstreams
+  ;
 
 type
   TWaterPanel = record
@@ -1137,9 +1141,6 @@ begin
   g_Sound_CreateWADEx('SOUND_PLAYER_SHELL1', GameWAD+':SOUNDS\SHELL1');
   g_Sound_CreateWADEx('SOUND_PLAYER_SHELL2', GameWAD+':SOUNDS\SHELL2');
 
-  g_Texture_CreateWADEx('TEXTURE_SHELL_BULLET', GameWAD+':TEXTURES\EBULLET');
-  g_Texture_CreateWADEx('TEXTURE_SHELL_SHELL', GameWAD+':TEXTURES\ESHELL');
-
   //wgunMonHash := hashNewIntInt();
   wgunHitHeap := TBinaryHeapHitTimes.Create();
 end;
@@ -1548,7 +1549,9 @@ begin
     stt := getTimeMicro()-stt;
     e_WriteLog(Format('*** new trace time: %u microseconds', [LongWord(stt)]), TMsgType.Notify);
     {$ENDIF}
-    g_GFX_Spark(wallHitX, wallHitY, 2+Random(2), 180+a, 0, 0);
+    {$IFDEF ENABLE_GFX}
+      g_GFX_Spark(wallHitX, wallHitY, 2+Random(2), 180+a, 0, 0);
+    {$ENDIF}
     if g_Game_IsServer and g_Game_IsNet then MH_SEND_Effect(wallHitX, wallHitY, 180+a, NET_GFX_SPARK);
   end
   else
@@ -1986,16 +1989,10 @@ begin
 end;
 
 procedure g_Weapon_bfghit(x, y: Integer);
-var
-  ID: DWORD;
-  Anim: TAnimation;
 begin
-  if g_Frames_Get(ID, 'FRAMES_BFGHIT') then
-  begin
-    Anim := TAnimation.Create(ID, False, 4);
-    g_GFX_OnceAnim(x-32, y-32, Anim);
-    Anim.Free();
-  end;
+  {$IFDEF ENABLE_GFX}
+    g_GFX_QueueEffect(R_GFX_BFG_HIT, x - 32, y - 32);
+  {$ENDIF}
 end;
 
 procedure g_Weapon_pistol(x, y, xd, yd: Integer; SpawnerUID: Word;
@@ -2074,16 +2071,14 @@ end;
 procedure g_Weapon_Update();
 var
   i, a, h, cx, cy, oldvx, oldvy, tf: Integer;
-  _id: DWORD;
-  Anim: TAnimation;
   t: DWArray;
   st: Word;
-  TextureID: DWORD = DWORD(-1);
-  s: String;
   o: TObj;
   spl: Boolean;
   Loud: Boolean;
-  tcx, tcy: Integer;
+  {$IFDEF ENABLE_GFX}
+    var tcx, tcy: Integer;
+  {$ENDIF}
 begin
   if Shots = nil then
     Exit;
@@ -2157,8 +2152,6 @@ begin
       cx := Obj.X + (Obj.Rect.Width div 2);
       cy := Obj.Y + (Obj.Rect.Height div 2);
 
-      TextureID := DWORD(-1); // !!!
-
       case ShotType of
         WEAPON_ROCKETLAUNCHER, WEAPON_SKEL_FIRE: // Ðàêåòû è ñíàðÿäû Ñêåëåòà
           begin
@@ -2166,21 +2159,17 @@ begin
             if WordBool(st and MOVE_HITAIR) then
               g_Obj_SetSpeed(@Obj, 12);
 
-          // Â âîäå øëåéô - ïóçûðè, â âîçäóõå øëåéô - äûì:
-            if WordBool(st and MOVE_INWATER) then
-              g_GFX_Bubbles(Obj.X+(Obj.Rect.Width div 2),
-                            Obj.Y+(Obj.Rect.Height div 2),
-                            1+Random(3), 16, 16)
-            else
-              if g_Frames_Get(_id, 'FRAMES_SMOKE') then
+            {$IFDEF ENABLE_GFX}
+              // Â âîäå øëåéô - ïóçûðè, â âîçäóõå øëåéô - äûì:
+              if WordBool(st and MOVE_INWATER) then
               begin
-                Anim := TAnimation.Create(_id, False, 3);
-                Anim.Alpha := 150;
-                g_GFX_OnceAnim(Obj.X-14+Random(9),
-                               Obj.Y+(Obj.Rect.Height div 2)-20+Random(9),
-                               Anim, ONCEANIM_SMOKE);
-                Anim.Free();
+                g_GFX_Bubbles(Obj.X + (Obj.Rect.Width div 2), Obj.Y + (Obj.Rect.Height div 2), 1 + Random(3), 16, 16)
+              end
+              else
+              begin
+                g_GFX_QueueEffect(R_GFX_SMOKE_TRANS, Obj.X-14+Random(9), Obj.Y+(Obj.Rect.Height div 2)-20+Random(9));
               end;
+            {$ENDIF}
 
           // Ïîïàëè â êîãî-òî èëè â ñòåíó:
             if WordBool(st and (MOVE_HITWALL or MOVE_HITLAND or MOVE_HITCEIL)) or
@@ -2193,27 +2182,19 @@ begin
               g_Weapon_Explode(cx, cy, 60, SpawnerUID);
 
               if ShotType = WEAPON_SKEL_FIRE then
-                begin // Âçðûâ ñíàðÿäà Ñêåëåòà
-                  if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_SKELFIRE') then
-                  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
+              begin // Âçðûâ ñíàðÿäà Ñêåëåòà
+                {$IFDEF ENABLE_GFX}
+                  g_GFX_QueueEffect(R_GFX_EXPLODE_SKELFIRE, Obj.X + 32 - 58, Obj.Y + 8 - 36);
+                  g_DynLightExplosion((Obj.X+32), (Obj.Y+8), 64, 1, 0, 0);
+                {$ENDIF}
+              end
               else
-                begin // Âçðûâ Ðàêåòû
-                  if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then
-                  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;
+              begin // Âçðûâ Ðàêåòû
+                {$IFDEF ENABLE_GFX}
+                  g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64);
+                  g_DynLightExplosion(cx, cy, 64, 1, 0, 0);
+                {$ENDIF}
+              end;
 
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEROCKET', Obj.X, Obj.Y);
 
@@ -2256,23 +2237,14 @@ begin
                (g_Weapon_Hit(@Obj, a, SpawnerUID, HIT_SOME, False) <> 0) or
                (Timeout < 1) then
             begin
-              if ShotType = WEAPON_PLASMA then
-                s := 'FRAMES_EXPLODE_PLASMA'
-              else
-                s := 'FRAMES_EXPLODE_BSPFIRE';
-
-            // Âçðûâ Ïëàçìû:
-              if g_Frames_Get(TextureID, s) then
-              begin
-                Anim := TAnimation.Create(TextureID, False, 3);
-                Anim.Blending := False;
-                g_GFX_OnceAnim(cx-16, cy-16, Anim);
-                Anim.Free();
+              {$IFDEF ENABLE_GFX}
+                if ShotType = WEAPON_PLASMA then
+                  g_GFX_QueueEffect(R_GFX_EXPLODE_PLASMA, cx - 16, cy - 16)
+                else
+                  g_GFX_QueueEffect(R_GFX_EXPLODE_BSPFIRE, cx - 16, cy - 16);
                 g_DynLightExplosion(cx, cy, 32, 0, 0.5, 0.5);
-              end;
-
+              {$ENDIF}
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y);
-
               ShotType := 0;
             end;
           end;
@@ -2288,22 +2260,18 @@ begin
           // Ïîä âîäîé òîæå
             if WordBool(st and (MOVE_HITWATER or MOVE_INWATER)) then
             begin
-              if WordBool(st and MOVE_HITWATER) then
-              begin
-                if g_Frames_Get(_id, 'FRAMES_SMOKE') then
+              {$IFDEF ENABLE_GFX}
+                if WordBool(st and MOVE_HITWATER) then
                 begin
-                  Anim := TAnimation.Create(_id, False, 3);
-                  Anim.Alpha := 0;
                   tcx := Random(8);
                   tcy := Random(8);
-                  g_GFX_OnceAnim(cx-4+tcx-(Anim.Width div 2),
-                    cy-4+tcy-(Anim.Height div 2),
-                    Anim, ONCEANIM_SMOKE);
-                  Anim.Free();
+                  g_GFX_QueueEffect(R_GFX_SMOKE, cx-4+tcx-(R_GFX_SMOKE_WIDTH div 2), cy-4+tcy-(R_GFX_SMOKE_HEIGHT div 2));
+                end
+                else
+                begin
+                  g_GFX_Bubbles(cx, cy, 1 + Random(3), 16, 16);
                 end;
-              end
-              else
-                g_GFX_Bubbles(cx, cy, 1+Random(3), 16, 16);
+              {$ENDIF}
               ShotType := 0;
               Continue;
             end;
@@ -2343,18 +2311,16 @@ begin
 
             if (gTime mod LongWord(tf) = 0) then
             begin
-              g_Frames_Get(TextureID, 'FRAMES_FLAME');
-              Anim := TAnimation.Create(TextureID, False, 2 + Random(2));
-              Anim.Alpha := 0;
-              case Stopped of
-                MOVE_HITWALL: begin tcx := cx-4+Random(8); tcy := cy-12+Random(24); end;
-                MOVE_HITLAND: begin tcx := cx-12+Random(24); tcy := cy-10+Random(8); end;
-                MOVE_HITCEIL: begin tcx := cx-12+Random(24); tcy := cy+6+Random(8); end;
-                else begin tcx := cx-4+Random(8); tcy := cy-4+Random(8); end;
-              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);
+              {$IFDEF ENABLE_GFX}
+                case Stopped of
+                  MOVE_HITWALL: begin tcx := cx-4+Random(8); tcy := cy-12+Random(24); end;
+                  MOVE_HITLAND: begin tcx := cx-12+Random(24); tcy := cy-10+Random(8); end;
+                  MOVE_HITCEIL: begin tcx := cx-12+Random(24); tcy := cy+6+Random(8); end;
+                  else begin tcx := cx-4+Random(8); tcy := cy-4+Random(8); end;
+                end;
+                g_GFX_QueueEffect(R_GFX_FLAME_RAND, tcx - (R_GFX_FLAME_WIDTH div 2), tcy - (R_GFX_FLAME_HEIGHT div 2));
+                //g_DynLightExplosion(tcx, tcy, 1, 1, 0.8, 0.3);
+              {$ENDIF}
             end;
           end;
 
@@ -2376,19 +2342,11 @@ begin
             begin
             // Ëó÷è BFG:
               if g_Game_IsServer then g_Weapon_BFG9000(cx, cy, SpawnerUID);
-
-            // Âçðûâ BFG:
-              if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_BFG') then
-              begin
-                Anim := TAnimation.Create(TextureID, False, 6);
-                Anim.Blending := False;
-                g_GFX_OnceAnim(cx-64, cy-64, Anim);
-                Anim.Free();
+              {$IFDEF ENABLE_GFX}
+                g_GFX_QueueEffect(R_GFX_EXPLODE_BFG, cx - 64, cy - 64);
                 g_DynLightExplosion(cx, cy, 96, 0, 1, 0);
-              end;
-
+              {$ENDIF}
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y);
-
               ShotType := 0;
             end;
           end;
@@ -2413,25 +2371,14 @@ begin
                (g_Weapon_Hit(@Obj, a, SpawnerUID, HIT_SOME) <> 0) or
                (Timeout < 1) then
             begin
-              if ShotType = WEAPON_IMP_FIRE then
-                s := 'FRAMES_EXPLODE_IMPFIRE'
-              else
-                if ShotType = WEAPON_CACO_FIRE then
-                  s := 'FRAMES_EXPLODE_CACOFIRE'
-                else
-                  s := 'FRAMES_EXPLODE_BARONFIRE';
-
-            // Âçðûâ:
-              if g_Frames_Get(TextureID, s) then
-              begin
-                Anim := TAnimation.Create(TextureID, False, 6);
-                Anim.Blending := False;
-                g_GFX_OnceAnim(cx-32, cy-32, Anim);
-                Anim.Free();
-              end;
-
+              {$IFDEF ENABLE_GFX}
+                case ShotType of
+                  WEAPON_IMP_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32);
+                  WEAPON_CACO_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32);
+                  WEAPON_BARON_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_BARONFIRE, cx - 32, cy - 32);
+                end;
+              {$ENDIF}
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y);
-
               ShotType := 0;
             end;
           end;
@@ -2447,17 +2394,11 @@ begin
                (g_Weapon_Hit(@Obj, 40, SpawnerUID, HIT_SOME, False) <> 0) or
                (Timeout < 1) then
             begin
-            // Âçðûâ:
-              if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then
-              begin
-                Anim := TAnimation.Create(TextureID, False, 6);
-                Anim.Blending := False;
-                g_GFX_OnceAnim(cx-64, cy-64, Anim);
-                Anim.Free();
-              end;
-
+              // Âçðûâ:
+              {$IFDEF ENABLE_GFX}
+                g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64);
+              {$ENDIF}
               g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y);
-
               ShotType := 0;
             end;
           end;
@@ -2618,11 +2559,9 @@ begin
 end;
 
 procedure g_Weapon_DestroyShot(I: Integer; X, Y: Integer; Loud: Boolean = True);
-var
-  cx, cy: Integer;
-  Anim: TAnimation;
-  s: string;
-  TextureID: DWORD = DWORD(-1);
+  {$IFDEF ENABLE_GFX}
+    var cx, cy: Integer;
+  {$ENDIF}
 begin
   if Shots = nil then
     Exit;
@@ -2633,102 +2572,69 @@ begin
     if ShotType = 0 then Exit;
     Obj.X := X;
     Obj.Y := Y;
-    cx := Obj.X + (Obj.Rect.Width div 2);
-    cy := Obj.Y + (Obj.Rect.Height div 2);
+    {$IFDEF ENABLE_GFX}
+      cx := Obj.X + (Obj.Rect.Width div 2);
+      cy := Obj.Y + (Obj.Rect.Height div 2);
+    {$ENDIF}
 
     case ShotType of
       WEAPON_ROCKETLAUNCHER, WEAPON_SKEL_FIRE: // Ðàêåòû è ñíàðÿäû Ñêåëåòà
       begin
         if Loud then
         begin
-          if ShotType = WEAPON_SKEL_FIRE then
-          begin // Âçðûâ ñíàðÿäà Ñêåëåòà
-            if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_SKELFIRE') then
-            begin
-              Anim := TAnimation.Create(TextureID, False, 8);
-              Anim.Blending := False;
-              g_GFX_OnceAnim((Obj.X+32)-32, (Obj.Y+8)-32, Anim);
-              Anim.Free();
-            end;
-          end
-          else
-          begin // Âçðûâ Ðàêåòû
-            if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') then
-            begin
-              Anim := TAnimation.Create(TextureID, False, 6);
-              Anim.Blending := False;
-              g_GFX_OnceAnim(cx-64, cy-64, Anim);
-              Anim.Free();
-            end;
-          end;
+          {$IFDEF ENABLE_GFX}
+            if ShotType = WEAPON_SKEL_FIRE then
+              g_GFX_QueueEffect(R_GFX_EXPLODE_SKELFIRE, (Obj.X + 32) - 32, (Obj.Y + 8) - 32)
+            else
+              g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64);
+          {$ENDIF}
           g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEROCKET', Obj.X, Obj.Y);
         end;
       end;
 
       WEAPON_PLASMA, WEAPON_BSP_FIRE: // Ïëàçìà, ïëàçìà Àðàõíàòðîíà
       begin
-        if ShotType = WEAPON_PLASMA then
-          s := 'FRAMES_EXPLODE_PLASMA'
-        else
-          s := 'FRAMES_EXPLODE_BSPFIRE';
-
-        if g_Frames_Get(TextureID, s) and loud then
+        if loud then
         begin
-          Anim := TAnimation.Create(TextureID, False, 3);
-          Anim.Blending := False;
-          g_GFX_OnceAnim(cx-16, cy-16, Anim);
-          Anim.Free();
-
+          {$IFDEF ENABLE_GFX}
+            if ShotType = WEAPON_PLASMA then
+              g_GFX_QueueEffect(R_GFX_EXPLODE_PLASMA, cx - 16, cy - 16)
+            else
+              g_GFX_QueueEffect(R_GFX_EXPLODE_BSPFIRE, cx - 16, cy - 16);
+          {$ENDIF}
           g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEPLASMA', Obj.X, Obj.Y);
         end;
       end;
 
       WEAPON_BFG: // BFG
       begin
-        // Âçðûâ BFG:
-        if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_BFG') and Loud then
-        begin
-          Anim := TAnimation.Create(TextureID, False, 6);
-          Anim.Blending := False;
-          g_GFX_OnceAnim(cx-64, cy-64, Anim);
-          Anim.Free();
-
-          g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y);
-        end;
+        {$IFDEF ENABLE_GFX}
+          g_GFX_QueueEffect(R_GFX_EXPLODE_BFG, cx - 64, cy - 64);
+        {$ENDIF}
+        g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBFG', Obj.X, Obj.Y);
       end;
 
       WEAPON_IMP_FIRE, WEAPON_CACO_FIRE, WEAPON_BARON_FIRE: // Âûñòðåëû Áåñà, Êàêîäåìîíà Ðûöàðÿ/Áàðîíà àäà
       begin
-        if ShotType = WEAPON_IMP_FIRE then
-          s := 'FRAMES_EXPLODE_IMPFIRE'
-        else
-          if ShotType = WEAPON_CACO_FIRE then
-            s := 'FRAMES_EXPLODE_CACOFIRE'
-          else
-            s := 'FRAMES_EXPLODE_BARONFIRE';
-
-        if g_Frames_Get(TextureID, s) and Loud then
+        if loud then
         begin
-          Anim := TAnimation.Create(TextureID, False, 6);
-          Anim.Blending := False;
-          g_GFX_OnceAnim(cx-32, cy-32, Anim);
-          Anim.Free();
-
+          {$IFDEF ENABLE_GFX}
+            case ShotType of
+              WEAPON_IMP_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_IMPFIRE, cx - 32, cy - 32);
+              WEAPON_CACO_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_CACOFIRE, cx - 32, cy - 32);
+              WEAPON_BARON_FIRE: g_GFX_QueueEffect(R_GFX_EXPLODE_BARONFIRE, cx - 32, cy - 32);
+            end;
+          {$ENDIF}
           g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y);
         end;
       end;
 
       WEAPON_MANCUB_FIRE: // Âûñòðåë Ìàíêóáóñà
       begin
-        if g_Frames_Get(TextureID, 'FRAMES_EXPLODE_ROCKET') and Loud then
-        begin
-          Anim := TAnimation.Create(TextureID, False, 6);
-          Anim.Blending := False;
-          g_GFX_OnceAnim(cx-64, cy-64, Anim);
-          Anim.Free();
-
-          g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y);
-        end;
+        {$IFDEF ENABLE_GFX}
+          g_GFX_QueueEffect(R_GFX_EXPLODE_ROCKET, cx - 64, cy - 64);
+        {$ENDIF}
+        g_Sound_PlayExAt('SOUND_WEAPON_EXPLODEBALL', Obj.X, Obj.Y);
       end;
     end; // case ShotType of...