DEADSOFTWARE

cyber can now kick
[d2df-sdl.git] / src / game / g_monsters.pas
index 1c9040aabb0f5cf0b5f052fbaa88958827cb5530..f4d7e4280877354457ee0438a773135ae03861fa 100644 (file)
@@ -1,3 +1,19 @@
+(* Copyright (C)  DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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}
 unit g_monsters;
 
 interface
@@ -158,7 +174,7 @@ implementation
 uses
   e_log, g_main, g_sound, g_gfx, g_player, g_game,
   g_weapons, g_triggers, MAPDEF, g_items, g_options,
-  g_console, g_map, Math, SysUtils, g_menu, WADEDITOR,
+  g_console, g_map, Math, SysUtils, g_menu, wadreader,
   g_language, g_netmsg;
 
 const
@@ -294,7 +310,7 @@ const
      AnimDeltaRight: ((X:  0; Y: -4), (X:  0; Y: -4), (X: -3; Y: -1), (X: -4; Y: -1), (X:  1; Y: -4), (X:  1; Y: -4), (X:  0; Y: -4));
      AnimDeltaLeft:  ((X:  0; Y: -4), (X:  0; Y: -4), (X: -3; Y: -1), (X: -4; Y: -1), (X:  1; Y: -4), (X:  1; Y: -4), (X:  0; Y: -4))),
 
-    (LeftAnim: True; wX: 70; wY: 73; AnimSpeed:(3, 3, 3, 3, 3, 0, 3);  //CYBER
+    (LeftAnim: True; wX: 70; wY: 73; AnimSpeed:(3, 3, 3, 3, 3, 3, 3);  //CYBER
      AnimDeltaRight: ((X:  2; Y: -6), (X:  2; Y: -6), (X: -3; Y: -4), (X: -3; Y: -4), (X: 25; Y: -6), (X: 25; Y: -6), (X: -2; Y: -6));
      AnimDeltaLeft:  ((X:  3; Y: -3), (X:  3; Y: -3), (X: -3; Y: -4), (X: -3; Y: -4), (X:-26; Y: -3), (X:-26; Y: -3), (X:  1; Y: -3))),
 
@@ -642,6 +658,8 @@ begin
   g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_PAIN_L', GameWAD+':MTEXTURES\CYBER_PAIN_L', 128, 128, 1);
   g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_ATTACK', GameWAD+':MTEXTURES\CYBER_ATTACK', 128, 128, 2);
   g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_ATTACK_L', GameWAD+':MTEXTURES\CYBER_ATTACK_L', 128, 128, 2);
+  g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_ATTACK2', GameWAD+':MTEXTURES\CYBER_KICK', 128, 128, 2);
+  g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_ATTACK2_L', GameWAD+':MTEXTURES\CYBER_KICK_L', 128, 128, 2);
   g_Frames_CreateWAD(nil, 'FRAMES_MONSTER_CYBER_DIE', GameWAD+':MTEXTURES\CYBER_DIE', 128, 128, 9);
 
   g_Game_SetLoadingText(_lc[I_LOAD_MONSTER_SOUNDS], 0, False);
@@ -858,6 +876,8 @@ begin
   g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_PAIN_L');
   g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_ATTACK');
   g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_ATTACK_L');
+  g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_KICK');
+  g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_KICK_L');
   g_Frames_DeleteByName('FRAMES_MONSTER_CYBER_DIE');
 
   g_Sound_Delete('SOUND_MONSTER_BARREL_DIE');
@@ -2702,13 +2722,13 @@ _end:
                   if g_Weapon_Hit(@FObj, 10, FUID, HIT_SOME) <> 0 then
                     g_Sound_PlayExAt('SOUND_MONSTER_FISH_ATTACK', FObj.X, FObj.Y);
 
-                MONSTER_SKEL, MONSTER_ROBO:
-                // Ðîáîò èëè ñêåëåò ñèëüíî ïèíàþòñÿ:
+                MONSTER_SKEL, MONSTER_ROBO, MONSTER_CYBER:
+                // Ðîáîò, êèáåð èëè ñêåëåò ñèëüíî ïèíàþòñÿ:
                   if FCurAnim = ANIM_ATTACK2 then
                   begin
                     o := FObj;
                     o.Vel.X := IfThen(FDirection = D_RIGHT, 1, -1)*50;
-                    if g_Weapon_Hit(@o, 50, FUID, HIT_SOME) <> 0 then
+                    if g_Weapon_Hit(@o, IfThen(FMonsterType = MONSTER_CYBER, 33, 50), FUID, HIT_SOME) <> 0 then
                       g_Sound_PlayExAt('SOUND_MONSTER_SKEL_HIT', FObj.X, FObj.Y);
                   end;
 
@@ -3455,13 +3475,13 @@ _end:
                 MONSTER_FISH:
                   g_Weapon_Hit(@FObj, 10, FUID, HIT_SOME);
 
-                MONSTER_SKEL, MONSTER_ROBO:
-                // Ðîáîò èëè ñêåëåò ñèëüíî ïèíàþòñÿ:
+                MONSTER_SKEL, MONSTER_ROBO, MONSTER_CYBER:
+                // Ðîáîò, êèáåð èëè ñêåëåò ñèëüíî ïèíàþòñÿ:
                   if FCurAnim = ANIM_ATTACK2 then
                   begin
                     o := FObj;
                     o.Vel.X := IfThen(FDirection = D_RIGHT, 1, -1)*50;
-                    g_Weapon_Hit(@o, 50, FUID, HIT_SOME);
+                    g_Weapon_Hit(@o, IfThen(FMonsterType = MONSTER_CYBER, 33, 50), FUID, HIT_SOME);
                   end;
 
                 MONSTER_VILE:
@@ -3752,13 +3772,7 @@ begin
         g_Sound_PlayExAt('SOUND_MONSTER_IMP_ATTACK', FObj.X, FObj.Y);
         Result := True;
       end;
-    MONSTER_SKEL:
-      begin
-        SetState(STATE_ATTACK, ANIM_ATTACK2);
-        g_Sound_PlayExAt('SOUND_MONSTER_SKEL_ATTACK', FObj.X, FObj.Y);
-        Result := True;
-      end;
-    MONSTER_ROBO:
+    MONSTER_SKEL, MONSTER_ROBO, MONSTER_CYBER:
       begin
         SetState(STATE_ATTACK, ANIM_ATTACK2);
         g_Sound_PlayExAt('SOUND_MONSTER_SKEL_ATTACK', FObj.X, FObj.Y);