76 function drawPixelBG(landX, landY, pixelX, pixelY: Longint): Longword; |
76 function drawPixelBG(landX, landY, pixelX, pixelY: Longint): Longword; |
77 begin |
77 begin |
78 drawPixelBG := 0; |
78 drawPixelBG := 0; |
79 if (LandGet(LandY, landX) and lfIndestructible) = 0 then |
79 if (LandGet(LandY, landX) and lfIndestructible) = 0 then |
80 begin |
80 begin |
81 if ((LandGet(landY, landX) and lfBasic) <> 0) and (((LandPixels[pixelY, pixelX] and AMask) shr AShift) = 255) and (not disableLandBack) then |
81 if ((LandGet(landY, landX) and lfBasic) <> 0) and (((LandPixelGet(pixelY, pixelX) and AMask) shr AShift) = 255) and (not disableLandBack) then |
82 begin |
82 begin |
83 LandPixels[pixelY, pixelX]:= LandBackPixel(landX, landY); |
83 LandPixelSet(pixelY, pixelX, LandBackPixel(landX, landY)); |
84 inc(drawPixelBG); |
84 inc(drawPixelBG); |
85 end |
85 end |
86 else if ((LandGet(landY, landX) and lfObject) <> 0) or (((LandPixels[pixelY, pixelX] and AMask) shr AShift) < 255) then |
86 else if ((LandGet(landY, landX) and lfObject) <> 0) or (((LandPixelGet(pixelY, pixelX) and AMask) shr AShift) < 255) then |
87 LandPixels[pixelY, pixelX]:= ExplosionBorderColorNoA |
87 LandPixelSet(pixelY, pixelX, ExplosionBorderColorNoA) |
88 end; |
88 end; |
89 end; |
89 end; |
90 |
90 |
91 procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); |
91 procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); |
92 begin |
92 begin |
93 if (LandGet(landY, landX) and lfIndestructible = 0) and |
93 if (LandGet(landY, landX) and lfIndestructible = 0) and |
94 (((LandGet(landY, landX) and lfBasic) <> 0) or ((LandGet(landY, landX) and lfObject) <> 0)) then |
94 (((LandGet(landY, landX) and lfBasic) <> 0) or ((LandGet(landY, landX) and lfObject) <> 0)) then |
95 begin |
95 begin |
96 LandPixels[pixelY, pixelX]:= ExplosionBorderColor; |
96 LandPixelSet(pixelY, pixelX, ExplosionBorderColor); |
97 LandSet(landY, landX, (LandGet(landY, landX) or lfDamaged) and (not lfIce)); |
97 LandSet(landY, landX, (LandGet(landY, landX) or lfDamaged) and (not lfIce)); |
98 LandDirty[landY div 32, landX div 32]:= 1; |
98 LandDirty[landY div 32, landX div 32]:= 1; |
99 end; |
99 end; |
100 end; |
100 end; |
101 |
101 |
134 begin |
134 begin |
135 if cOnlyStats then exit; |
135 if cOnlyStats then exit; |
136 // So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness |
136 // So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness |
137 iceSurface:= SpritesData[sprIceTexture].Surface; |
137 iceSurface:= SpritesData[sprIceTexture].Surface; |
138 icePixels := iceSurface^.pixels; |
138 icePixels := iceSurface^.pixels; |
139 w:= LandPixels[pixelY, pixelX]; |
139 w:= LandPixelGet(pixelY, pixelX); |
140 if w > 0 then |
140 if w > 0 then |
141 begin |
141 begin |
142 w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED + |
142 w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED + |
143 (w shr BShift and $FF) * RGB_LUMINANCE_GREEN + |
143 (w shr BShift and $FF) * RGB_LUMINANCE_GREEN + |
144 (w shr GShift and $FF) * RGB_LUMINANCE_BLUE)); |
144 (w shr GShift and $FF) * RGB_LUMINANCE_BLUE)); |
145 if w < 128 then w:= w+128; |
145 if w < 128 then w:= w+128; |
146 if w > 255 then w:= 255; |
146 if w > 255 then w:= 255; |
147 w:= (w shl RShift) or (w shl BShift) or (w shl GShift) or (LandPixels[pixelY, pixelX] and AMask); |
147 w:= (w shl RShift) or (w shl BShift) or (w shl GShift) or (LandPixelGet(pixelY, pixelX) and AMask); |
148 LandPixels[pixelY, pixelX]:= addBgColor(w, IceColor); |
148 LandPixelSet(pixelY, pixelX, addBgColor(w, IceColor)); |
149 LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]) |
149 LandPixelSet(pixelY, pixelX, addBgColor(LandPixelGet(pixelY, pixelX), icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)])) |
150 end |
150 end |
151 else |
151 else |
152 begin |
152 begin |
153 LandPixels[pixelY, pixelX]:= IceColor and (not AMask) or $E8 shl AShift; |
153 LandPixelSet(pixelY, pixelX, IceColor and (not AMask) or $E8 shl AShift); |
154 LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]); |
154 LandPixelSet(pixelY, pixelX, addBgColor(LandPixelGet(pixelY, pixelX), icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)])); |
155 // silly workaround to avoid having to make background erasure a tadb it smarter about sea ice |
155 // silly workaround to avoid having to make background erasure a tadb it smarter about sea ice |
156 if LandPixels[pixelY, pixelX] and AMask shr AShift = 255 then |
156 if LandPixelGet(pixelY, pixelX) and AMask shr AShift = 255 then |
157 LandPixels[pixelY, pixelX]:= LandPixels[pixelY, pixelX] and (not AMask) or 254 shl AShift; |
157 LandPixelSet(pixelY, pixelX, LandPixelGet(pixelY, pixelX) and (not AMask) or 254 shl AShift); |
158 end; |
158 end; |
159 end; |
159 end; |
160 |
160 |
161 |
161 |
162 procedure DrawPixelIce(landX, landY, pixelX, pixelY: Longint); |
162 procedure DrawPixelIce(landX, landY, pixelX, pixelY: Longint); |
163 begin |
163 begin |
164 if ((LandGet(landY, landX) and lfIce) <> 0) then exit; |
164 if ((LandGet(landY, landX) and lfIce) <> 0) then exit; |
165 if (pixelX < LeftX) or (pixelX > RightX) or (pixelY < TopY) then exit; |
165 if (pixelX < LeftX) or (pixelX > RightX) or (pixelY < TopY) then exit; |
166 if isLandscapeEdge(getPixelWeight(landX, landY)) then |
166 if isLandscapeEdge(getPixelWeight(landX, landY)) then |
167 begin |
167 begin |
168 if (LandPixels[pixelY, pixelX] and AMask < 255) and (LandPixels[pixelY, pixelX] and AMask > 0) then |
168 if (LandPixelGet(pixelY, pixelX) and AMask < 255) and (LandPixelGet(pixelY, pixelX) and AMask > 0) then |
169 LandPixels[pixelY, pixelX] := (IceEdgeColor and (not AMask)) or (LandPixels[pixelY, pixelX] and AMask) |
169 LandPixelSet(pixelY, pixelX, (IceEdgeColor and (not AMask)) or (LandPixelGet(pixelY, pixelX) and AMask)) |
170 else if (LandPixels[pixelY, pixelX] and AMask < 255) or (LandGet(landY, landX) > 255) then |
170 else if (LandPixelGet(pixelY, pixelX) and AMask < 255) or (LandGet(landY, landX) > 255) then |
171 LandPixels[pixelY, pixelX] := IceEdgeColor |
171 LandPixelSet(pixelY, pixelX, IceEdgeColor) |
172 end |
172 end |
173 else if LandGet(landY, landX) > 255 then |
173 else if LandGet(landY, landX) > 255 then |
174 begin |
174 begin |
175 fillPixelFromIceSprite(pixelX, pixelY); |
175 fillPixelFromIceSprite(pixelX, pixelY); |
176 end; |
176 end; |
201 nullPixel: |
201 nullPixel: |
202 for i:= fromPix to toPix do |
202 for i:= fromPix to toPix do |
203 begin |
203 begin |
204 calculatePixelsCoordinates(i, y, px, py); |
204 calculatePixelsCoordinates(i, y, px, py); |
205 if ((LandGet(y, i) and lfIndestructible) = 0) and (not disableLandBack or (LandGet(y, i) > 255)) then |
205 if ((LandGet(y, i) and lfIndestructible) = 0) and (not disableLandBack or (LandGet(y, i) > 255)) then |
206 LandPixels[py, px]:= ExplosionBorderColorNoA; |
206 LandPixelSet(py, px, ExplosionBorderColorNoA); |
207 end; |
207 end; |
208 icePixel: |
208 icePixel: |
209 for i:= fromPix to toPix do |
209 for i:= fromPix to toPix do |
210 begin |
210 begin |
211 calculatePixelsCoordinates(i, y, px, py); |
211 calculatePixelsCoordinates(i, y, px, py); |
505 for ty:= Max(y - Radius, 0) to Min(y + Radius, TopY) do |
505 for ty:= Max(y - Radius, 0) to Min(y + Radius, TopY) do |
506 for tx:= Max(LeftX, ar^[i].Left - Radius) to Min(RightX, ar^[i].Right + Radius) do |
506 for tx:= Max(LeftX, ar^[i].Left - Radius) to Min(RightX, ar^[i].Right + Radius) do |
507 if ((LandGet(ty, tx) and lfBasic) <> 0) or ((LandGet(ty, tx) and lfObject) <> 0) then |
507 if ((LandGet(ty, tx) and lfBasic) <> 0) or ((LandGet(ty, tx) and lfObject) <> 0) then |
508 begin |
508 begin |
509 if (cReducedQuality and rqBlurryLand) = 0 then |
509 if (cReducedQuality and rqBlurryLand) = 0 then |
510 LandPixels[ty, tx]:= ExplosionBorderColor |
510 LandPixelSet(ty, tx, ExplosionBorderColor) |
511 else |
511 else |
512 LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor; |
512 LandPixelSet(ty div 2, tx div 2, ExplosionBorderColor); |
513 |
513 |
514 LandSet(ty, tx, (LandGet(ty, tx) or lfDamaged) and (not lfIce)); |
514 LandSet(ty, tx, (LandGet(ty, tx) or lfDamaged) and (not lfIce)); |
515 LandDirty[ty div 32, tx div 32]:= 1; |
515 LandDirty[ty div 32, tx div 32]:= 1; |
516 end; |
516 end; |
517 inc(y, dY) |
517 inc(y, dY) |
538 begin |
538 begin |
539 LandSet(ty, tx, (LandGet(ty, tx) or lfDamaged) and (not lfIce)); |
539 LandSet(ty, tx, (LandGet(ty, tx) or lfDamaged) and (not lfIce)); |
540 if despeckle then |
540 if despeckle then |
541 LandDirty[ty div 32, tx div 32]:= 1; |
541 LandDirty[ty div 32, tx div 32]:= 1; |
542 if (cReducedQuality and rqBlurryLand) = 0 then |
542 if (cReducedQuality and rqBlurryLand) = 0 then |
543 LandPixels[ty, tx]:= ExplosionBorderColor |
543 LandPixelSet(ty, tx, ExplosionBorderColor) |
544 else |
544 else |
545 LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor |
545 LandPixelSet(ty div 2, tx div 2, ExplosionBorderColor) |
546 end |
546 end |
547 end; |
547 end; |
548 end; |
548 end; |
549 |
549 |
550 type TWrapNeeded = (wnNone, wnLeft, wnRight); |
550 type TWrapNeeded = (wnNone, wnLeft, wnRight); |
620 end |
620 end |
621 else |
621 else |
622 begin |
622 begin |
623 by:= ty div 2; bx:= tx div 2; |
623 by:= ty div 2; bx:= tx div 2; |
624 end; |
624 end; |
625 if ((LandGet(ty, tx) and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then |
625 if ((LandGet(ty, tx) and lfBasic) <> 0) and (((LandPixelGet(by,bx) and AMask) shr AShift) = 255) and (not disableLandBack) then |
626 LandPixels[by, bx]:= LandBackPixel(tx, ty) |
626 LandPixelSet(by, bx, LandBackPixel(tx, ty)) |
627 else if ((LandGet(ty, tx) and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then |
627 else if ((LandGet(ty, tx) and lfObject) <> 0) or (((LandPixelGet(by,bx) and AMask) shr AShift) < 255) then |
628 LandPixels[by, bx]:= LandPixels[by, bx] and (not AMASK); |
628 LandPixelSet(by, bx, LandPixelGet(by, bx) and (not AMASK)); |
629 LandSet(ty, tx, 0); |
629 LandSet(ty, tx, 0); |
630 end |
630 end |
631 end; |
631 end; |
632 DrawExplosionBorder(X, Y, dx, dy, despeckle); |
632 DrawExplosionBorder(X, Y, dx, dy, despeckle); |
633 nx:= nx - dY; |
633 nx:= nx - dY; |
794 gY:= (cpY + y) div 2; |
794 gY:= (cpY + y) div 2; |
795 end; |
795 end; |
796 if (not behind) or (LandGet(cpY + y, cpX + x) and lfLandMask = 0) then |
796 if (not behind) or (LandGet(cpY + y, cpX + x) and lfLandMask = 0) then |
797 begin |
797 begin |
798 if (LandFlags and lfBasic <> 0) or |
798 if (LandFlags and lfBasic <> 0) or |
799 ((LandPixels[gY, gX] and AMask shr AShift > 128) and // This test assumes lfBasic and lfObject differ only graphically |
799 ((LandPixelGet(gY, gX) and AMask shr AShift > 128) and // This test assumes lfBasic and lfObject differ only graphically |
800 (LandFlags and (lfObject or lfIce) = 0)) then |
800 (LandFlags and (lfObject or lfIce) = 0)) then |
801 LandSet(cpY + y, cpX + x, lfBasic or LandFlags) |
801 LandSet(cpY + y, cpX + x, lfBasic or LandFlags) |
802 else if (LandFlags and lfIce = 0) then |
802 else if (LandFlags and lfIce = 0) then |
803 LandSet(cpY + y, cpX + x, lfObject or LandFlags) |
803 LandSet(cpY + y, cpX + x, lfObject or LandFlags) |
804 else LandSet(cpY + y, cpX + x, LandFlags) |
804 else LandSet(cpY + y, cpX + x, LandFlags) |
805 end; |
805 end; |
806 if (not behind) or (LandPixels[gY, gX] = 0) then |
806 if (not behind) or (LandPixelGet(gY, gX) = 0) then |
807 begin |
807 begin |
808 if tint = $FFFFFFFF then |
808 if tint = $FFFFFFFF then |
809 LandPixels[gY, gX]:= PLongword(@(p^[x * 4]))^ |
809 LandPixelSet(gY, gX, PLongword(@(p^[x * 4]))^) |
810 else |
810 else |
811 begin |
811 begin |
812 pixel:= PLongword(@(p^[x * 4]))^; |
812 pixel:= PLongword(@(p^[x * 4]))^; |
813 LandPixels[gY, gX]:= |
813 LandPixelSet(gY, gX, |
814 ceil((pixel shr RShift and $FF) * ((tint shr 24) / 255)) shl RShift or |
814 ceil((pixel shr RShift and $FF) * ((tint shr 24) / 255)) shl RShift or |
815 ceil((pixel shr GShift and $FF) * ((tint shr 16 and $ff) / 255)) shl GShift or |
815 ceil((pixel shr GShift and $FF) * ((tint shr 16 and $ff) / 255)) shl GShift or |
816 ceil((pixel shr BShift and $FF) * ((tint shr 8 and $ff) / 255)) shl BShift or |
816 ceil((pixel shr BShift and $FF) * ((tint shr 8 and $ff) / 255)) shl BShift or |
817 ceil((pixel shr AShift and $FF) * ((tint and $ff) / 255)) shl AShift; |
817 ceil((pixel shr AShift and $FF) * ((tint and $ff) / 255)) shl AShift); |
818 end |
818 end |
819 end |
819 end |
820 end; |
820 end; |
821 p:= PByteArray(@(p^[Image^.pitch])); |
821 p:= PByteArray(@(p^[Image^.pitch])); |
822 end; |
822 end; |
845 var tx, ty: LongWord; |
845 var tx, ty: LongWord; |
846 begin |
846 begin |
847 for ty:= 0 to height - 1 do |
847 for ty:= 0 to height - 1 do |
848 for tx:= 0 to width - 1 do |
848 for tx:= 0 to width - 1 do |
849 begin |
849 begin |
850 LandPixels[ty, tx]:= 0; |
850 LandPixelSet(ty, tx, 0); |
851 LandSet(Y + ty, X + tx, 0); |
851 LandSet(Y + ty, X + tx, 0); |
852 end; |
852 end; |
853 end; |
853 end; |
854 |
854 |
855 procedure EraseLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; LandFlags: Word; eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert: boolean); |
855 procedure EraseLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; LandFlags: Word; eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert: boolean); |
1045 if ((cReducedQuality and rqBlurryLand) <> 0) then |
1045 if ((cReducedQuality and rqBlurryLand) <> 0) then |
1046 begin |
1046 begin |
1047 ny:= Y div 2 + i; |
1047 ny:= Y div 2 + i; |
1048 nx:= X div 2 + j; |
1048 nx:= X div 2 + j; |
1049 if ((ny and (LAND_HEIGHT_MASK div 2)) = 0) and ((nx and (LAND_WIDTH_MASK div 2)) = 0) then |
1049 if ((ny and (LAND_HEIGHT_MASK div 2)) = 0) and ((nx and (LAND_WIDTH_MASK div 2)) = 0) then |
1050 if (LandPixels[ny, nx] and AMASK) <> 0 then |
1050 if (LandPixelGet(ny, nx) and AMASK) <> 0 then |
1051 inc(c); |
1051 inc(c); |
1052 end |
1052 end |
1053 else if (LandPixels[ny, nx] and AMASK) <> 0 then |
1053 else if (LandPixelGet(ny, nx) and AMASK) <> 0 then |
1054 inc(c); |
1054 inc(c); |
1055 end |
1055 end |
1056 else if LandGet(ny, nx) > 255 then |
1056 else if LandGet(ny, nx) > 255 then |
1057 inc(c); |
1057 inc(c); |
1058 end |
1058 end |
1059 end; |
1059 end; |
1060 |
1060 |
1061 if c < 4 then // 0-3 neighbours |
1061 if c < 4 then // 0-3 neighbours |
1062 begin |
1062 begin |
1063 if ((LandGet(Y, X) and lfBasic) <> 0) and (not disableLandBack) then |
1063 if ((LandGet(Y, X) and lfBasic) <> 0) and (not disableLandBack) then |
1064 LandPixels[yy, xx]:= LandBackPixel(X, Y) |
1064 LandPixelSet(yy, xx, LandBackPixel(X, Y)) |
1065 else |
1065 else |
1066 LandPixels[yy, xx]:= LandPixels[yy, xx] and (not AMASK); |
1066 LandPixelSet(yy, xx, LandPixelGet(yy, xx) and (not AMASK)); |
1067 |
1067 |
1068 if not pixelsweep then |
1068 if not pixelsweep then |
1069 begin |
1069 begin |
1070 LandSet(Y, X, 0); |
1070 LandSet(Y, X, 0); |
1071 exit |
1071 exit |
1104 for nx:= X-1 to X+1 do |
1104 for nx:= X-1 to X+1 do |
1105 for ny:= Y-1 to Y+1 do |
1105 for ny:= Y-1 to Y+1 do |
1106 // only consider undamaged neighbors (also leads to skipping itself) |
1106 // only consider undamaged neighbors (also leads to skipping itself) |
1107 if (LandGet(ny, nx) and lfDamaged) = 0 then |
1107 if (LandGet(ny, nx) and lfDamaged) = 0 then |
1108 begin |
1108 begin |
1109 pixel:= LandPixels[ny, nx]; |
1109 pixel:= LandPixelGet(ny, nx); |
1110 inc(r, (pixel and RMask) shr RShift); |
1110 inc(r, (pixel and RMask) shr RShift); |
1111 inc(g, (pixel and GMask) shr GShift); |
1111 inc(g, (pixel and GMask) shr GShift); |
1112 inc(b, (pixel and BMask) shr BShift); |
1112 inc(b, (pixel and BMask) shr BShift); |
1113 inc(a, (pixel and AMask) shr AShift); |
1113 inc(a, (pixel and AMask) shr AShift); |
1114 dec(c); |
1114 dec(c); |
1145 if ((((LandGet(y, x-1) and lfDamaged) <> 0) and (((LandGet(y+1,x) and lfDamaged) <> 0)) or ((LandGet(y-1,x) and lfDamaged) <> 0)) |
1145 if ((((LandGet(y, x-1) and lfDamaged) <> 0) and (((LandGet(y+1,x) and lfDamaged) <> 0)) or ((LandGet(y-1,x) and lfDamaged) <> 0)) |
1146 or (((LandGet(y, x+1) and lfDamaged) <> 0) and (((LandGet(y-1,x) and lfDamaged) <> 0) or ((LandGet(y+1,x) and lfDamaged) <> 0)))) then |
1146 or (((LandGet(y, x+1) and lfDamaged) <> 0) and (((LandGet(y-1,x) and lfDamaged) <> 0) or ((LandGet(y+1,x) and lfDamaged) <> 0)))) then |
1147 begin |
1147 begin |
1148 if (cReducedQuality and rqBlurryLand) = 0 then |
1148 if (cReducedQuality and rqBlurryLand) = 0 then |
1149 begin |
1149 begin |
1150 if ((LandPixels[y,x] and AMask) shr AShift) < 10 then |
1150 if ((LandPixelGet(y,x) and AMask) shr AShift) < 10 then |
1151 LandPixels[y,x]:= (ExplosionBorderColor and (not AMask)) or (128 shl AShift) |
1151 LandPixelSet(y,x, (ExplosionBorderColor and (not AMask)) or (128 shl AShift)) |
1152 else |
1152 else |
1153 LandPixels[y,x]:= |
1153 LandPixelSet(y,x, |
1154 (((((LandPixels[y,x] and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
1154 (((((LandPixelGet(y,x) and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
1155 (((((LandPixels[y,x] and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
1155 (((((LandPixelGet(y,x) and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
1156 (((((LandPixels[y,x] and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift) |
1156 (((((LandPixelGet(y,x) and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift)) |
1157 end; |
1157 end; |
1158 { |
1158 { |
1159 if (LandGet(y, x-1) = lfObject) then |
1159 if (LandGet(y, x-1) = lfObject) then |
1160 LandGet(y,x):= lfObject |
1160 LandSet(y,x, lfObject) |
1161 else if (LandGet(y, x+1) = lfObject) then |
1161 else if (LandGet(y, x+1) = lfObject) then |
1162 LandGet(y,x):= lfObject |
1162 LandSet(y,x, lfObject) |
1163 else |
1163 else |
1164 LandGet(y,x):= lfBasic; |
1164 LandSet(y,x, lfBasic); |
1165 } |
1165 } |
1166 end |
1166 end |
1167 else if ((((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1167 else if ((((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1168 or (((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1168 or (((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1169 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1169 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1173 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0)) |
1173 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0)) |
1174 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0))) then |
1174 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0))) then |
1175 begin |
1175 begin |
1176 if (cReducedQuality and rqBlurryLand) = 0 then |
1176 if (cReducedQuality and rqBlurryLand) = 0 then |
1177 begin |
1177 begin |
1178 if ((LandPixels[y,x] and AMask) shr AShift) < 10 then |
1178 if ((LandPixelGet(y,x) and AMask) shr AShift) < 10 then |
1179 LandPixels[y,x]:= (ExplosionBorderColor and (not AMask)) or (64 shl AShift) |
1179 LandPixelSet(y,x, (ExplosionBorderColor and (not AMask)) or (64 shl AShift)) |
1180 else |
1180 else |
1181 LandPixels[y,x]:= |
1181 LandPixelSet(y,x, |
1182 (((((LandPixels[y,x] and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
1182 (((((LandPixelGet(y,x) and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
1183 (((((LandPixels[y,x] and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
1183 (((((LandPixelGet(y,x) and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
1184 (((((LandPixels[y,x] and BMask shr BShift) * 3 div 4)+((ExplosionBorderColor and BMask) shr BShift) div 4) and $FF) shl BShift) or ($FF shl AShift) |
1184 (((((LandPixelGet(y,x) and BMask shr BShift) * 3 div 4)+((ExplosionBorderColor and BMask) shr BShift) div 4) and $FF) shl BShift) or ($FF shl AShift)) |
1185 end; |
1185 end; |
1186 { |
1186 { |
1187 if (LandGet(y, x-1) = lfObject) then |
1187 if (LandGet(y, x-1) = lfObject) then |
1188 LandGet(y, x):= lfObject |
1188 LandGet(y, x):= lfObject |
1189 else if (LandGet(y, x+1) = lfObject) then |
1189 else if (LandGet(y, x+1) = lfObject) then |
1194 LandGet(y, x):= lfObject |
1194 LandGet(y, x):= lfObject |
1195 else LandGet(y,x):= lfBasic |
1195 else LandGet(y,x):= lfBasic |
1196 } |
1196 } |
1197 end |
1197 end |
1198 end |
1198 end |
1199 else if ((cReducedQuality and rqBlurryLand) = 0) and ((LandPixels[Y, X] and AMask) = AMask) |
1199 else if ((cReducedQuality and rqBlurryLand) = 0) and ((LandPixelGet(Y, X) and AMask) = AMask) |
1200 and (LandGet(Y, X) and (lfDamaged or lfBasic) = lfBasic) |
1200 and (LandGet(Y, X) and (lfDamaged or lfBasic) = lfBasic) |
1201 and (Y > topY + 1) and (Y < LAND_HEIGHT-2) and (X > leftX + 1) and (X < rightX - 1) then |
1201 and (Y > topY + 1) and (Y < LAND_HEIGHT-2) and (X > leftX + 1) and (X < rightX - 1) then |
1202 begin |
1202 begin |
1203 if ((((LandGet(y, x-1) and lfDamaged) <> 0) and (((LandGet(y+1,x) and lfDamaged) <> 0)) or ((LandGet(y-1,x) and lfDamaged) <> 0)) |
1203 if ((((LandGet(y, x-1) and lfDamaged) <> 0) and (((LandGet(y+1,x) and lfDamaged) <> 0)) or ((LandGet(y-1,x) and lfDamaged) <> 0)) |
1204 or (((LandGet(y, x+1) and lfDamaged) <> 0) and (((LandGet(y-1,x) and lfDamaged) <> 0) or ((LandGet(y+1,x) and lfDamaged) <> 0)))) then |
1204 or (((LandGet(y, x+1) and lfDamaged) <> 0) and (((LandGet(y-1,x) and lfDamaged) <> 0) or ((LandGet(y+1,x) and lfDamaged) <> 0)))) then |
1205 begin |
1205 begin |
1206 LandPixels[y,x]:= |
1206 LandPixelSet(y,x, |
1207 (((((LandPixels[y,x] and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
1207 (((((LandPixelGet(y,x) and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
1208 (((((LandPixels[y,x] and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
1208 (((((LandPixelGet(y,x) and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
1209 (((((LandPixels[y,x] and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift) |
1209 (((((LandPixelGet(y,x) and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift)) |
1210 end |
1210 end |
1211 else if ((((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1211 else if ((((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1212 or (((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1212 or (((LandGet(y, x-1) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1213 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1213 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y+2,x) and lfDamaged) <> 0)) |
1214 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y-1,x+1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1214 or (((LandGet(y, x+1) and lfDamaged) <> 0) and ((LandGet(y-1,x+1) and lfDamaged) <> 0) and ((LandGet(y-2,x) and lfDamaged) <> 0)) |
1215 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y,x+2) and lfDamaged) <> 0)) |
1215 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x+1) and lfDamaged) <> 0) and ((LandGet(y,x+2) and lfDamaged) <> 0)) |
1216 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x+1) and lfDamaged) <> 0) and ((LandGet(y,x+2) and lfDamaged) <> 0)) |
1216 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x+1) and lfDamaged) <> 0) and ((LandGet(y,x+2) and lfDamaged) <> 0)) |
1217 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0)) |
1217 or (((LandGet(y+1, x) and lfDamaged) <> 0) and ((LandGet(y+1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0)) |
1218 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0))) then |
1218 or (((LandGet(y-1, x) and lfDamaged) <> 0) and ((LandGet(y-1,x-1) and lfDamaged) <> 0) and ((LandGet(y,x-2) and lfDamaged) <> 0))) then |
1219 begin |
1219 begin |
1220 LandPixels[y,x]:= |
1220 LandPixelSet(y,x, |
1221 (((((LandPixels[y,x] and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
1221 (((((LandPixelGet(y,x) and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
1222 (((((LandPixels[y,x] and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
1222 (((((LandPixelGet(y,x) and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
1223 (((((LandPixels[y,x] and BMask shr BShift) * 3 div 4)+((ExplosionBorderColor and BMask) shr BShift) div 4) and $FF) shl BShift) or ($FF shl AShift) |
1223 (((((LandPixelGet(y,x) and BMask shr BShift) * 3 div 4)+((ExplosionBorderColor and BMask) shr BShift) div 4) and $FF) shl BShift) or ($FF shl AShift)) |
1224 end |
1224 end |
1225 end |
1225 end |
1226 end; |
1226 end; |
1227 |
1227 |
1228 function SweepDirty: boolean; |
1228 function SweepDirty: boolean; |