diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas
index 2a77c0310d554266aeebb5a50b1c852df7a48254..0be98e38498e8d47720d62c152186c5246530dd6 100644 (file)
--- a/src/game/g_gfx.pas
+++ b/src/game/g_gfx.pas
interface
-uses
- e_log, g_textures;
+uses e_log;
const
BLOOD_NORMAL = 0;
BLOOD_CSPARKS = 2;
BLOOD_COMBINE = 3;
- ONCEANIM_NONE = 0;
- ONCEANIM_SMOKE = 1;
-
MARK_FREE = 0;
MARK_WALL = 1;
MARK_WATER = 2;
MARK_LIQUID = MARK_WATER or MARK_ACID;
MARK_LIFT = MARK_LIFTDOWN or MARK_LIFTUP or MARK_LIFTLEFT or MARK_LIFTRIGHT;
+ R_GFX_NONE = 0;
+ R_GFX_TELEPORT = 1;
+ R_GFX_FLAME = 2;
+ R_GFX_EXPLODE_ROCKET = 3;
+ R_GFX_EXPLODE_BFG = 4;
+ R_GFX_BFG_HIT = 5;
+ R_GFX_FIRE = 6;
+ R_GFX_ITEM_RESPAWN = 7;
+ R_GFX_SMOKE = 8;
+ R_GFX_EXPLODE_SKELFIRE = 9;
+ R_GFX_EXPLODE_PLASMA = 10;
+ R_GFX_EXPLODE_BSPFIRE = 11;
+ R_GFX_EXPLODE_IMPFIRE = 12;
+ R_GFX_EXPLODE_CACOFIRE = 13;
+ R_GFX_EXPLODE_BARONFIRE = 14;
+ R_GFX_TELEPORT_FAST = 15;
+ R_GFX_SMOKE_TRANS = 16;
+ R_GFX_FLAME_RAND = 17;
+ R_GFX_LAST = 17;
+
+ R_GFX_FLAME_WIDTH = 32;
+ R_GFX_FLAME_HEIGHT = 32;
+ R_GFX_SMOKE_WIDTH = 32;
+ R_GFX_SMOKE_HEIGHT = 32;
procedure g_GFX_Init ();
procedure g_GFX_Free ();
procedure g_GFX_SetMax (count: Integer);
function g_GFX_GetMax (): Integer;
-procedure g_GFX_OnceAnim (X, Y: Integer; Anim: TAnimation; AnimType: Byte = 0);
-
procedure g_Mark (x, y, Width, Height: Integer; t: Byte; st: Boolean=true);
+procedure g_GFX_QueueEffect (AnimType, X, Y: Integer);
+
procedure g_GFX_Update ();
var
procedure think (); inline;
end;
- TOnceAnim = record
- AnimType: Byte;
- x, y: Integer;
- oldX, oldY: Integer;
- Animation: TAnimation;
- end;
-
var (* private state *)
Particles: array of TParticle = nil;
- OnceAnims: array of TOnceAnim = nil;
implementation
-uses
- g_map, g_panel, g_basic, Math,
- g_options, g_console, SysUtils, g_triggers, MAPDEF,
- g_game, g_language, g_net, utils, xprofiler;
+ uses
+ {$IFDEF ENABLE_RENDER}
+ r_render,
+ {$ENDIF}
+ g_map, g_panel, Math, utils,
+ g_options, SysUtils, MAPDEF
+ ;
const
awakeMapHlm: packed array of LongWord = nil;
{$ENDIF}
+ procedure g_GFX_QueueEffect (AnimType, X, Y: Integer);
+ begin
+ {$IFDEF ENABLE_RENDER}
+ r_Render_QueueEffect(AnimType, X, Y)
+ {$ENDIF}
+ end;
// ////////////////////////////////////////////////////////////////////////// //
function awmIsSetHolmes (x, y: Integer): Boolean; inline;
result := MaxParticles;
end;
-
-function FindOnceAnim (): DWORD;
-var
- i: Integer;
-begin
- if OnceAnims <> nil then
- for i := 0 to High(OnceAnims) do
- if OnceAnims[i].Animation = nil then
- begin
- Result := i;
- Exit;
- end;
-
- if OnceAnims = nil then
- begin
- SetLength(OnceAnims, 16);
- Result := 0;
- end
- else
- begin
- Result := High(OnceAnims) + 1;
- SetLength(OnceAnims, Length(OnceAnims) + 16);
- end;
-end;
-
-
-procedure g_GFX_OnceAnim (x, y: Integer; Anim: TAnimation; AnimType: Byte = 0);
-var
- find_id: DWORD;
-begin
- if not gpart_dbg_enabled then exit;
-
- if (Anim = nil) then exit;
-
- find_id := FindOnceAnim();
-
- OnceAnims[find_id].AnimType := AnimType;
- OnceAnims[find_id].Animation := TAnimation.Create(Anim.FramesID, Anim.Loop, Anim.Speed);
- OnceAnims[find_id].Animation.Blending := Anim.Blending;
- OnceAnims[find_id].Animation.alpha := Anim.alpha;
- OnceAnims[find_id].x := x;
- OnceAnims[find_id].y := y;
-end;
-
-
// ////////////////////////////////////////////////////////////////////////// //
procedure g_GFX_Init ();
begin
for a := 0 to High(Particles) do Particles[a].die();
CurrentParticle := 0;
- if (OnceAnims <> nil) then
- begin
- for a := 0 to High(OnceAnims) do OnceAnims[a].Animation.Free();
- OnceAnims := nil;
- end;
-
awakeMap := nil;
// why not?
awakeMapH := -1;
// clear awake map
awmClear();
-
- if OnceAnims <> nil then
- begin
- for a := 0 to High(OnceAnims) do
- if OnceAnims[a].Animation <> nil then
- begin
- OnceAnims[a].oldx := OnceAnims[a].x;
- OnceAnims[a].oldy := OnceAnims[a].y;
-
- case OnceAnims[a].AnimType of
- ONCEANIM_SMOKE:
- begin
- if Random(3) = 0 then
- OnceAnims[a].x := OnceAnims[a].x-1+Random(3);
- if Random(2) = 0 then
- OnceAnims[a].y := OnceAnims[a].y-Random(2);
- end;
- end;
-
- if OnceAnims[a].Animation.Played then
- begin
- OnceAnims[a].Animation.Free();
- OnceAnims[a].Animation := nil;
- end
- else
- OnceAnims[a].Animation.Update();
- end;
- end;
end;
end.