index 507a56024cf75640394dbe91dd3bd4ccaa45b45a..fb8ee7cf6205107d6d17a161030b83645f62f145 100644 (file)
--- a/src/game/g_monsters.pas
+++ b/src/game/g_monsters.pas
+{$MODE DELPHI}
unit g_monsters;
interface
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
(Name:'SERG'; Rect:(X:15; Y:8; Width:34; Height:52); Health:20;
RunVel: 3; MinPain: 0; Pain: 10; Jump: 10),
-
+
(Name:'CYBER'; Rect:(X:24; Y:9; Width:80; Height:110); Health:500;
RunVel: 5; MinPain: 50; Pain: 70; Jump: 10),
gMonsters[a].Update();
end
else
- begin
+ begin
gMonsters[a].Free();
gMonsters[a] := nil;
end;
function g_Monsters_GetNameByID(MonsterType: Byte): String;
begin
if MonsterType in [MONSTER_DEMON..MONSTER_MAN] then
- Result := MONSTERTABLE[MonsterType].Name;
+ Result := MONSTERTABLE[MonsterType].Name
+ else
+ Result := '?';
end;
function g_Monsters_GetKilledBy(MonsterType: Byte): String;
FWaitAttackAnim := False;
FChainFire := False;
FShellTimer := -1;
-
+
FState := STATE_SLEEP;
FCurAnim := ANIM_SLEEP;
// Ýòî çíà÷èò: dX := -frameWidth - animDeltaX + hitX + hitWidth + hitX
end;
end
- else // Ïðàâàÿ àíèìàöèÿ
+ else // Ïðàâàÿ àíèìàöèÿ
begin
dx := MONSTER_ANIMTABLE[FMonsterType].AnimDeltaRight[FCurAnim].X;
dy := MONSTER_ANIMTABLE[FMonsterType].AnimDeltaRight[FCurAnim].Y;
FObj.Rect := MONSTERTABLE[FMonsterType].Rect;
FHealth := MONSTERTABLE[FMonsterType].Health;
- FAmmo := 0;
+ FAmmo := 0;
FPain := 0;
end;
else Exit;
if ForceAnim <> 255 then
Anim := ForceAnim;
-// Åñëè àíèìàöèÿ íîâàÿ - ïåðåçàïóñêàåì å¸:
+// Åñëè àíèìàöèÿ íîâàÿ - ïåðåçàïóñêàåì å¸:
if FCurAnim <> Anim then
if FAnim[Anim, FDirection] <> nil then
begin
FDirection := D_LEFT
else
FDirection := D_RIGHT;
-
+
goto _end;
end;
FWaitAttackAnim := False;
end
-
+
else // Àíèìàöèÿ àòàêè åùå èäåò (èñêëþ÷åíèå - Lost_Soul):
if (FMonsterType = MONSTER_SOUL) or
( (not FWaitAttackAnim) and
FWaitAttackAnim := False;
end
-
+
else // Àíèìàöèÿ àòàêè åùå èäåò (èñêëþ÷åíèå - Lost_Soul):
if (FMonsterType = MONSTER_SOUL) or
( (not FWaitAttackAnim) and
// Lost_Soul óêóñèë êîãî-òî => ïåðåõîäèò íà øàã:
if FMonsterType = MONSTER_SOUL then
SetState(STATE_GO);
-
+
MONSTER_FISH:
g_Weapon_Hit(@FObj, 10, FUID, HIT_SOME);
if g_Obj_CollidePanel(@FObj, 0, 0, PANEL_LIFTLEFT or PANEL_LIFTRIGHT) and
not ((FState = STATE_DEAD) or (FState = STATE_DIE)) then
FObj.Vel.X := oldvelx;
-
+
// Åñëè åñòü àíèìàöèÿ, òî ïóñòü îíà èäåò:
if FAnim[FCurAnim, FDirection] <> nil then
FAnim[FCurAnim, FDirection].Update();