X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_gfx.pas;h=d0bf54b182c1657158b93f0f0c469d74222d9cfe;hb=2490c26ff92664ba96915ef1a7c6bd38c8137bda;hp=2a77c0310d554266aeebb5a50b1c852df7a48254;hpb=a6a2a42e83ed77aed22577a4e5a1bd26694de003;p=d2df-sdl.git diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas index 2a77c03..d0bf54b 100644 --- a/src/game/g_gfx.pas +++ b/src/game/g_gfx.pas @@ -28,9 +28,6 @@ const BLOOD_CSPARKS = 2; BLOOD_COMBINE = 3; - ONCEANIM_NONE = 0; - ONCEANIM_SMOKE = 1; - MARK_FREE = 0; MARK_WALL = 1; MARK_WATER = 2; @@ -44,6 +41,30 @@ const 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 (); @@ -59,10 +80,10 @@ procedure g_GFX_Bubbles (fX, fY: Integer; count: Word; devX, devY: Byte); 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 @@ -121,20 +142,15 @@ function awmIsSetHolmes (x, y: Integer): Boolean; inline; 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 + {$IFNDEF HEADLESS} + r_render, + {$ENDIF} g_map, g_panel, g_basic, Math, g_options, g_console, SysUtils, g_triggers, MAPDEF, g_game, g_language, g_net, utils, xprofiler; @@ -158,6 +174,12 @@ var awakeMapHlm: packed array of LongWord = nil; {$ENDIF} + procedure g_GFX_QueueEffect (AnimType, X, Y: Integer); + begin + {$IFNDEF HEADLESS} + r_Render_QueueEffect(AnimType, X, Y) + {$ENDIF} + end; // ////////////////////////////////////////////////////////////////////////// // function awmIsSetHolmes (x, y: Integer): Boolean; inline; @@ -1542,51 +1564,6 @@ begin 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 @@ -1609,12 +1586,6 @@ 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; @@ -1654,34 +1625,6 @@ begin // 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.