X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_gfx.pas;h=52c885692f6a5b61f994ce3f4942a954c0718043;hb=ee042fbd9cc188c3f0547d51f8012ef73447dfc7;hp=e4c46f199d17a9bf74a2180be95d1ff5e4fc0c4c;hpb=d8cb72ed4297af2d519c52270f8f32ddfd7fc58b;p=d2df-sdl.git diff --git a/src/game/g_gfx.pas b/src/game/g_gfx.pas index e4c46f1..52c8856 100644 --- a/src/game/g_gfx.pas +++ b/src/game/g_gfx.pas @@ -110,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 @@ -341,11 +341,16 @@ begin begin if ((pan.PanelType and PANEL_LIFTUP) <> 0) then begin - if (velY > -4-Random(3)) then velY -= 0.8; + if (velY > -1-Random(3)) then velY -= 0.8; if (abs(velX) > 0.1) then velX -= velX/10.0; velX += (Random-Random)*0.2; accelY := 0.15; end + else if ((pan.PanelType and PANEL_LIFTDOWN) <> 0) then + begin + if (velY < 1+Random(3)) then velY += 0.8; + accelY := 0.15; + end else if ((pan.PanelType and PANEL_LIFTLEFT) <> 0) then begin if (velX > -8-Random(3)) then velX -= 0.8; @@ -866,7 +871,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; @@ -878,7 +886,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); @@ -984,6 +995,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 120+Random(40); + waitTime := 20; floorY := Unknown; ceilingY := Unknown; end; @@ -1110,6 +1122,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 60+Random(60); + waitTime := 120; floorY := Unknown; ceilingY := Unknown; end; @@ -1148,7 +1161,10 @@ begin if (velY > -4) then velY += accelY; - time += 1; + if waitTime > 0 then + waitTime -= 1 + else + time += 1; end; @@ -1223,6 +1239,7 @@ begin particleType := TPartType.Bubbles; time := 0; liveTime := 65535; + waitTime := 0; end; if (CurrentParticle >= MaxParticles-1) then CurrentParticle := 0 else CurrentParticle += 1; @@ -1316,7 +1333,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; @@ -1383,6 +1403,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 30+Random(60); + waitTime := 0; floorY := Unknown; ceilingY := Unknown; end; @@ -1458,6 +1479,7 @@ begin state := TPartState.Normal; time := 0; liveTime := 30+Random(60); + waitTime := 0; floorY := Unknown; ceilingY := Unknown; end;