DEADSOFTWARE

render: fix archvile fire animation
[d2df-sdl.git] / src / game / g_monsters.pas
index e3b99d263a6a3fa08f82f279563fa7f14c53fb98..777453a119a19d7e2b168bcc4598e8cfeb7e2993 100644 (file)
@@ -521,9 +521,12 @@ var
 implementation
 
 uses
-  e_log, g_sound, g_gfx, g_player, g_game, r_textures, r_animations, r_gfx,
+  {$IFNDEF HEADLESS}
+    g_menu,
+  {$ENDIF}
+  e_log, g_sound, g_gfx, g_player, g_game,
   g_weapons, g_triggers, g_items, g_options,
-  g_console, g_map, Math, g_menu, wadreader,
+  g_console, g_map, Math, wadreader,
   g_language, g_netmsg, idpool, utils, xstreams;
 
 
@@ -1660,7 +1663,7 @@ begin
     FAnim[a, TDirection.D_LEFT] := TAnimationState.Create(ANIMTABLE[a].loop, MONSTER_ANIMTABLE[MonsterType].AnimSpeed[a], MONSTER_ANIMTABLE[MonsterType].AnimCount[a]);
   end;
   if MonsterType = MONSTER_VILE then
-    vilefire := TAnimationState.Create(True, 2, 0); // !!! len
+    vilefire := TAnimationState.Create(True, 2, 8);
 end;
 
 function TMonster.Damage(aDamage: Word; VelX, VelY: Integer; SpawnerUID: Word; t: Byte): Boolean;
@@ -1984,7 +1987,7 @@ begin
   if not silent then
   begin
     g_Sound_PlayExAt('SOUND_GAME_TELEPORT', Obj.X, Obj.Y);
-    r_GFX_OnceAnim(
+    g_GFX_QueueEffect(
       R_GFX_TELEPORT,
       FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2)-32,
       FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-32
@@ -2019,7 +2022,7 @@ begin
 // Эффект телепорта в точке назначения:
   if not silent then
   begin
-    r_GFX_OnceAnim(
+    g_GFX_QueueEffect(
       R_GFX_TELEPORT,
       FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2)-32,
       FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-32
@@ -4137,7 +4140,7 @@ begin
   anim := (vilefire <> nil);
   utils.writeBool(st, anim);
   // Если есть - сохраняем:
-  if anim then vilefire.SaveState(st);
+  if anim then vilefire.SaveState(st, 0, False);
   // Анимации
   for i := ANIM_SLEEP to ANIM_PAIN do
   begin
@@ -4145,12 +4148,12 @@ begin
     anim := (FAnim[i, TDirection.D_LEFT] <> nil);
     utils.writeBool(st, anim);
     // Если есть - сохраняем
-    if anim then FAnim[i, TDirection.D_LEFT].SaveState(st);
+    if anim then FAnim[i, TDirection.D_LEFT].SaveState(st, 0, False);
     // Есть ли правая анимация
     anim := (FAnim[i, TDirection.D_RIGHT] <> nil);
     utils.writeBool(st, anim);
     // Если есть - сохраняем
-    if anim then FAnim[i, TDirection.D_RIGHT].SaveState(st);
+    if anim then FAnim[i, TDirection.D_RIGHT].SaveState(st, 0, False);
   end;
 end;
 
@@ -4158,8 +4161,8 @@ end;
 procedure TMonster.LoadState (st: TStream);
 var
   i: Integer;
-  b: Byte;
-  anim: Boolean;
+  b, alpha: Byte;
+  anim, blending: Boolean;
 begin
   assert(st <> nil);
 
@@ -4219,7 +4222,7 @@ begin
   if anim then
   begin
     Assert(vilefire <> nil, 'TMonster.LoadState: no vilefire anim');
-    vilefire.LoadState(st);
+    vilefire.LoadState(st, alpha, blending);
   end;
   // Анимации
   for i := ANIM_SLEEP to ANIM_PAIN do
@@ -4230,7 +4233,7 @@ begin
     if anim then
     begin
       Assert(FAnim[i, TDirection.D_LEFT] <> nil, 'TMonster.LoadState: no '+IntToStr(i)+'_left anim');
-      FAnim[i, TDirection.D_LEFT].LoadState(st);
+      FAnim[i, TDirection.D_LEFT].LoadState(st, alpha, blending);
     end;
     // Есть ли правая анимация
      anim := utils.readBool(st);
@@ -4238,7 +4241,7 @@ begin
     if anim then
     begin
       Assert(FAnim[i, TDirection.D_RIGHT] <> nil, 'TMonster.LoadState: no '+IntToStr(i)+'_right anim');
-      FAnim[i, TDirection.D_RIGHT].LoadState(st);
+      FAnim[i, TDirection.D_RIGHT].LoadState(st, alpha, blending);
     end;
   end;
 end;
@@ -4293,7 +4296,7 @@ begin
   begin
     x := Obj.X + Obj.Rect.X + Random(Obj.Rect.Width + Times * 2) - (R_GFX_FLAME_WIDTH div 2);
     y := Obj.Y + 8 + Random(8 + Times * 2) + IfThen(FState = MONSTATE_DEAD, 16, 0);
-    r_GFX_OnceAnim(R_GFX_FLAME, x, y);
+    g_GFX_QueueEffect(R_GFX_FLAME, x, y);
   end;
 end;