X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_gfx.pas;h=567fb5f5d6e66ff87e9cba272861948e65650cc9;hb=438f611326a5ace6bd38c9e38399a7712f752425;hp=01ada5245edcbb7606cfd4ffdd3f12af364719b6;hpb=385f70688f69aba255d1cdb9b7f0717bfe1b6945;p=d2df-sdl.git diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas index 01ada52..567fb5f 100644 --- a/src/game/g_gfx.pas +++ b/src/game/g_gfx.pas @@ -26,6 +26,8 @@ uses const BLOOD_NORMAL = 0; BLOOD_SPARKS = 1; + BLOOD_CSPARKS = 2; + BLOOD_COMBINE = 3; ONCEANIM_NONE = 0; ONCEANIM_SMOKE = 1; @@ -78,11 +80,7 @@ function awmIsSetHolmes (x, y: Integer): Boolean; inline; implementation uses -{$IFDEF USE_NANOGL} - nanoGL, -{$ELSE} - GL, GLExt, -{$ENDIF} + {$INCLUDE ../nogl/noGLuses.inc} g_map, g_panel, g_basic, Math, e_graphics, g_options, g_console, SysUtils, g_triggers, MAPDEF, g_game, g_language, g_net, utils, xprofiler; @@ -112,7 +110,7 @@ type particleType: TPartType; red, green, blue: Byte; alpha: Byte; - time, liveTime: Word; + time, liveTime, waitTime: Word; stickDX: Integer; // STATE_STICK: -1,1: stuck to a wall; 0: stuck to ceiling justSticked: Boolean; // not used floorY: Integer; // actually, floor-1; `Unknown`: unknown @@ -868,7 +866,10 @@ _done: begin if (env = TEnvType.ELiquid) then begin - time += 1; + if waitTime > 0 then + waitTime -= 1 + else + time += 1; if (liveTime <= 0) then begin die(); exit; end; ex := 255-trunc(255.0*time/liveTime); if (ex <= 10) then begin die(); exit; end; @@ -880,7 +881,10 @@ _done: begin // water will disappear in any liquid if (env = TEnvType.ELiquid) then begin die(); exit; end; - time += 1; + if waitTime > 0 then + waitTime -= 1 + else + time += 1; // dry water if (liveTime <= 0) then begin die(); exit; end; ex := 255-trunc(255.0*time/liveTime); @@ -925,6 +929,11 @@ begin begin g_GFX_SparkVel(fX, fY, 2+Random(2), -vx div 2, -vy div 2, devX, devY); exit; + end + else if (kind = BLOOD_CSPARKS) OR (kind = BLOOD_COMBINE) then + begin + g_GFX_SparkVel(fX, fY, count, -vx div 2, -vy div 2, devX, devY); + if kind <> BLOOD_COMBINE then exit end; l := Length(Particles); @@ -981,6 +990,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 120+Random(40); + waitTime := 20; floorY := Unknown; ceilingY := Unknown; end; @@ -1107,6 +1117,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 60+Random(60); + waitTime := 120; floorY := Unknown; ceilingY := Unknown; end; @@ -1145,7 +1156,10 @@ begin if (velY > -4) then velY += accelY; - time += 1; + if waitTime > 0 then + waitTime -= 1 + else + time += 1; end; @@ -1220,6 +1234,7 @@ begin particleType := TPartType.Bubbles; time := 0; liveTime := 65535; + waitTime := 0; end; if (CurrentParticle >= MaxParticles-1) then CurrentParticle := 0 else CurrentParticle += 1; @@ -1313,7 +1328,10 @@ _done: //writeln('spark1: pos=(', x, ',', y, '); delta=(', velX:6:3, ',', velY:6:3, '); state=', state, '; ceilingY=', ceilingY, '; floorY=', floorY); - time += 1; + if waitTime > 0 then + waitTime -= 1 + else + time += 1; end; @@ -1380,6 +1398,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 30+Random(60); + waitTime := 0; floorY := Unknown; ceilingY := Unknown; end; @@ -1455,6 +1474,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 30+Random(60); + waitTime := 0; floorY := Unknown; ceilingY := Unknown; end; @@ -1628,14 +1648,13 @@ procedure g_GFX_Draw (); a, len: Integer; {$IFDEF USE_NANOGL} type - PVertex = ^Vertex; Vertex = record x, y: GLfloat; r, g, b, a: GLfloat; end; var count: Integer; - v: PVertex; + v: array of Vertex; {$ENDIF} begin if not gpart_dbg_enabled then exit; @@ -1652,10 +1671,9 @@ begin glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); {$IFDEF USE_NANOGL} - len := High(Particles); - v := GetMem(len * SizeOf(Vertex) + 1); count := 0; - for a := 0 to len do + SetLength(v, Length(Particles)); + for a := 0 to High(Particles) do begin with Particles[a] do begin @@ -1672,15 +1690,13 @@ begin end; end; - glVertexPointer(2, GL_FLOAT, SizeOf(Vertex), @v.x); - glColorPointer(4, GL_FLOAT, SizeOf(Vertex), @v.r); + glVertexPointer(2, GL_FLOAT, SizeOf(Vertex), @v[0].x); + glColorPointer(4, GL_FLOAT, SizeOf(Vertex), @v[0].r); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDrawArrays(GL_POINTS, 0, count - 1); - - Dispose(v); + glDrawArrays(GL_POINTS, 0, count); {$ELSE} glBegin(GL_POINTS);