author | sheepluva |
Thu, 16 Jan 2014 17:18:53 +0100 | |
changeset 9993 | 76ad55807c24 |
parent 9879 | 141c0d6c2179 |
child 9950 | 2759212a27de |
child 9998 | 736015b847e3 |
permissions | -rw-r--r-- |
393 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
9080 | 3 |
* Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com> |
393 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
|
17 |
*) |
|
18 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
184 | 21 |
unit uLandGraphics; |
22 |
interface |
|
4357
a1fcfc341a52
Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents:
3749
diff
changeset
|
23 |
uses uFloat, uConsts, uTypes; |
184 | 24 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
25 |
type |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
26 |
fillType = (nullPixel, backgroundPixel, ebcPixel, icePixel, setNotCurrentMask, changePixelSetNotCurrent, setCurrentHog, changePixelNotSetNotCurrent); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
27 |
|
7035 | 28 |
type TRangeArray = array[0..31] of record |
371 | 29 |
Left, Right: LongInt; |
184 | 30 |
end; |
7035 | 31 |
PRangeArray = ^TRangeArray; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
32 |
TLandCircleProcedure = procedure (landX, landY, pixelX, pixelY: Longint); |
184 | 33 |
|
4791 | 34 |
function addBgColor(OldColor, NewColor: LongWord): LongWord; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
35 |
function SweepDirty: boolean; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
36 |
function Despeckle(X, Y: LongInt): Boolean; |
5267
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
37 |
procedure Smooth(X, Y: LongInt); |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3236
diff
changeset
|
38 |
function CheckLandValue(X, Y: LongInt; LandFlag: Word): boolean; |
4377 | 39 |
function DrawExplosion(X, Y, Radius: LongInt): Longword; |
371 | 40 |
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte); |
41 |
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); |
|
42 |
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword); |
|
9876 | 43 |
function FillRoundInLandFT(X, Y, Radius: LongInt; fill: fillType): Longword; |
7270
93e92e82d5c8
Step 1. Add current hedgehog as top bit of bottom byte.
nemo
parents:
7268
diff
changeset
|
44 |
procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet, isCurrent: boolean); |
4367 | 45 |
function LandBackPixel(x, y: LongInt): LongWord; |
6490 | 46 |
procedure DrawLine(X1, Y1, X2, Y2: LongInt; Color: Longword); |
7147 | 47 |
procedure DrawThickLine(X1, Y1, X2, Y2, radius: LongInt; color: Longword); |
7268 | 48 |
procedure DumpLandToLog(x, y, r: LongInt); |
8602 | 49 |
procedure DrawIceBreak(x, y, iceRadius, iceHeight: Longint); |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
50 |
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace, indestructible: boolean): boolean; inline; |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
51 |
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace, indestructible: boolean; LandFlags: Word): boolean; |
409 | 52 |
|
184 | 53 |
implementation |
4403 | 54 |
uses SDLh, uLandTexture, uVariables, uUtils, uDebug; |
184 | 55 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
56 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
57 |
procedure calculatePixelsCoordinates(landX, landY: Longint; var pixelX, pixelY: Longint); inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
58 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
59 |
if (cReducedQuality and rqBlurryLand) = 0 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
60 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
61 |
pixelX := landX; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
62 |
pixelY := landY; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
63 |
end |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
64 |
else |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
65 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
66 |
pixelX := LandX div 2; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
67 |
pixelY := LandY div 2; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
68 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
69 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
70 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
71 |
function drawPixelBG(landX, landY, pixelX, pixelY: Longint): Longword; inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
72 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
73 |
drawPixelBG := 0; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
74 |
if (Land[LandY, landX] and lfIndestructible) = 0 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
75 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
76 |
if ((Land[landY, landX] and lfBasic) <> 0) and (((LandPixels[pixelY, pixelX] and AMask) shr AShift) = 255) and (not disableLandBack) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
77 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
78 |
LandPixels[pixelY, pixelX]:= LandBackPixel(landX, landY); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
79 |
inc(drawPixelBG); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
80 |
end |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
81 |
else if ((Land[landY, landX] and lfObject) <> 0) or (((LandPixels[pixelY, pixelX] and AMask) shr AShift) < 255) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
82 |
LandPixels[pixelY, pixelX]:= 0 |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
83 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
84 |
end; |
8795 | 85 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
86 |
procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
87 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
88 |
if ((Land[landY, landX] and lfBasic) <> 0) or ((Land[landY, landX] and lfObject) <> 0) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
89 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
90 |
LandPixels[pixelY, pixelX]:= ExplosionBorderColor; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
91 |
Land[landY, landX]:= (Land[landY, landX] or lfDamaged) and not lfIce; |
8795 | 92 |
LandDirty[landY div 32, landX div 32]:= 1; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
93 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
94 |
end; |
8795 | 95 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
96 |
function isLandscapeEdge(weight:Longint):boolean; inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
97 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
98 |
result := (weight < 8) and (weight >= 2); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
99 |
end; |
8795 | 100 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
101 |
function getPixelWeight(x, y:Longint): Longint; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
102 |
var |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
103 |
i, j:Longint; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
104 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
105 |
result := 0; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
106 |
for i := x - 1 to x + 1 do |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
107 |
for j := y - 1 to y + 1 do |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
108 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
109 |
if (i < 0) or |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
110 |
(i > LAND_WIDTH - 1) or |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
111 |
(j < 0) or |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
112 |
(j > LAND_HEIGHT -1) then |
8795 | 113 |
begin |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
114 |
result := 9; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
115 |
exit; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
116 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
117 |
if Land[j, i] and lfLandMask and not lfIce = 0 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
118 |
result := result + 1; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
119 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
120 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
121 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
122 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
123 |
procedure fillPixelFromIceSprite(pixelX, pixelY:Longint); inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
124 |
var |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
125 |
iceSurface: PSDL_Surface; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
126 |
icePixels: PLongwordArray; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
127 |
w: LongWord; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
128 |
begin |
9460
7d7e4ca70f6b
Skip some LandPixels manipulations in stats-only mode
unc0rr
parents:
9080
diff
changeset
|
129 |
if cOnlyStats then exit; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
130 |
// So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
131 |
iceSurface:= SpritesData[sprIceTexture].Surface; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
132 |
icePixels := iceSurface^.pixels; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
133 |
w:= LandPixels[pixelY, pixelX]; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
134 |
if w > 0 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
135 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
136 |
w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED + |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
137 |
(w shr BShift and $FF) * RGB_LUMINANCE_GREEN + |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
138 |
(w shr GShift and $FF) * RGB_LUMINANCE_BLUE)); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
139 |
if w < 128 then w:= w+128; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
140 |
if w > 255 then w:= 255; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
141 |
w:= (w shl RShift) or (w shl BShift) or (w shl GShift) or (LandPixels[pixelY, pixelX] and AMask); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
142 |
LandPixels[pixelY, pixelX]:= addBgColor(w, IceColor); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
143 |
LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]) |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
144 |
end |
8795 | 145 |
else |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
146 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
147 |
LandPixels[pixelY, pixelX]:= IceColor and not AMask or $E8 shl AShift; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
148 |
LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
149 |
// silly workaround to avoid having to make background erasure a tadb it smarter about sea ice |
8795 | 150 |
if LandPixels[pixelY, pixelX] and AMask shr AShift = 255 then |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
151 |
LandPixels[pixelY, pixelX]:= LandPixels[pixelY, pixelX] and not AMask or 254 shl AShift; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
152 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
153 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
154 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
155 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
156 |
procedure DrawPixelIce(landX, landY, pixelX, pixelY: Longint); inline; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
157 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
158 |
if ((Land[landY, landX] and lfIce) <> 0) then exit; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
159 |
if isLandscapeEdge(getPixelWeight(landX, landY)) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
160 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
161 |
if (LandPixels[pixelY, pixelX] and AMask < 255) and (LandPixels[pixelY, pixelX] and AMask > 0) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
162 |
LandPixels[pixelY, pixelX] := (IceEdgeColor and not AMask) or (LandPixels[pixelY, pixelX] and AMask) |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
163 |
else if (LandPixels[pixelY, pixelX] and AMask < 255) or (Land[landY, landX] > 255) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
164 |
LandPixels[pixelY, pixelX] := IceEdgeColor |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
165 |
end |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
166 |
else if Land[landY, landX] > 255 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
167 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
168 |
fillPixelFromIceSprite(pixelX, pixelY); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
169 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
170 |
if Land[landY, landX] > 255 then Land[landY, landX] := Land[landY, landX] or lfIce and not lfDamaged; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
171 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
172 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
173 |
|
9876 | 174 |
function FillLandCircleLineFT(y, fromPix, toPix: LongInt; fill : fillType): Longword; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
175 |
var px, py, i: LongInt; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
176 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
177 |
//get rid of compiler warning |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
178 |
px := 0; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
179 |
py := 0; |
9876 | 180 |
FillLandCircleLineFT := 0; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
181 |
case fill of |
8795 | 182 |
backgroundPixel: |
9877 | 183 |
for i:= fromPix to toPix do |
184 |
begin |
|
185 |
calculatePixelsCoordinates(i, y, px, py); |
|
186 |
inc(FillLandCircleLineFT, drawPixelBG(i, y, px, py)); |
|
187 |
end; |
|
8795 | 188 |
ebcPixel: |
9877 | 189 |
for i:= fromPix to toPix do |
190 |
begin |
|
191 |
calculatePixelsCoordinates(i, y, px, py); |
|
192 |
drawPixelEBC(i, y, px, py); |
|
193 |
end; |
|
8795 | 194 |
nullPixel: |
9877 | 195 |
for i:= fromPix to toPix do |
196 |
begin |
|
197 |
calculatePixelsCoordinates(i, y, px, py); |
|
198 |
if ((Land[y, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[y, i] > 255)) then |
|
199 |
LandPixels[py, px]:= 0 |
|
200 |
end; |
|
8795 | 201 |
icePixel: |
9877 | 202 |
for i:= fromPix to toPix do |
203 |
begin |
|
204 |
calculatePixelsCoordinates(i, y, px, py); |
|
205 |
DrawPixelIce(i, y, px, py); |
|
206 |
end; |
|
8795 | 207 |
setNotCurrentMask: |
9877 | 208 |
for i:= fromPix to toPix do |
209 |
begin |
|
210 |
Land[y, i]:= Land[y, i] and lfNotCurrentMask; |
|
211 |
end; |
|
8795 | 212 |
changePixelSetNotCurrent: |
9877 | 213 |
for i:= fromPix to toPix do |
214 |
begin |
|
215 |
if Land[y, i] and lfObjMask > 0 then |
|
9878 | 216 |
Land[y, i]:= Land[y, i] - 1; |
9877 | 217 |
end; |
8795 | 218 |
setCurrentHog: |
9877 | 219 |
for i:= fromPix to toPix do |
220 |
begin |
|
221 |
Land[y, i]:= Land[y, i] or lfCurrentHog |
|
222 |
end; |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
223 |
changePixelNotSetNotCurrent: |
9877 | 224 |
for i:= fromPix to toPix do |
225 |
begin |
|
226 |
if Land[y, i] and lfObjMask < lfObjMask then |
|
9878 | 227 |
Land[y, i]:= Land[y, i] + 1 |
9877 | 228 |
end; |
8795 | 229 |
end; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
230 |
end; |
8795 | 231 |
|
9876 | 232 |
function FillLandCircleSegmentFT(x, y, dx, dy: LongInt; fill : fillType): Longword; inline; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
233 |
begin |
9876 | 234 |
FillLandCircleSegmentFT := 0; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
235 |
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then |
9876 | 236 |
inc(FillLandCircleSegmentFT, FillLandCircleLineFT(y + dy, Max(x - dx, 0), Min(x + dx, LAND_WIDTH - 1), fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
237 |
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then |
9876 | 238 |
inc(FillLandCircleSegmentFT, FillLandCircleLineFT(y - dy, Max(x - dx, 0), Min(x + dx, LAND_WIDTH - 1), fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
239 |
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then |
9876 | 240 |
inc(FillLandCircleSegmentFT, FillLandCircleLineFT(y + dx, Max(x - dy, 0), Min(x + dy, LAND_WIDTH - 1), fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
241 |
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then |
9876 | 242 |
inc(FillLandCircleSegmentFT, FillLandCircleLineFT(y - dx, Max(x - dy, 0), Min(x + dy, LAND_WIDTH - 1), fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
243 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
244 |
|
9876 | 245 |
function FillRoundInLandFT(X, Y, Radius: LongInt; fill: fillType): Longword; inline; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
246 |
var dx, dy, d: LongInt; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
247 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
248 |
dx:= 0; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
249 |
dy:= Radius; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
250 |
d:= 3 - 2 * Radius; |
9876 | 251 |
FillRoundInLandFT := 0; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
252 |
while (dx < dy) do |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
253 |
begin |
9876 | 254 |
inc(FillRoundInLandFT, FillLandCircleSegmentFT(x, y, dx, dy, fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
255 |
if (d < 0) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
256 |
d:= d + 4 * dx + 6 |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
257 |
else |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
258 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
259 |
d:= d + 4 * (dx - dy) + 10; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
260 |
dec(dy) |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
261 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
262 |
inc(dx) |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
263 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
264 |
if (dx = dy) then |
9876 | 265 |
inc (FillRoundInLandFT, FillLandCircleSegmentFT(x, y, dx, dy, fill)); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
266 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
267 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
268 |
|
4791 | 269 |
function addBgColor(OldColor, NewColor: LongWord): LongWord; |
270 |
// Factor ranges from 0 to 100% NewColor |
|
271 |
var |
|
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
272 |
oRed, oBlue, oGreen, oAlpha, nRed, nBlue, nGreen, nAlpha: byte; |
4791 | 273 |
begin |
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
274 |
oAlpha := (OldColor shr AShift); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
275 |
nAlpha := (NewColor shr AShift); |
5692 | 276 |
// shortcircuit |
277 |
if (oAlpha = 0) or (nAlpha = $FF) then |
|
278 |
begin |
|
279 |
addBgColor:= NewColor; |
|
280 |
exit |
|
7492
3188794b9d87
Perf opt for the c conversion. Use downto instead to avoid repeated function calls in the loop
nemo
parents:
7270
diff
changeset
|
281 |
end; |
4791 | 282 |
// Get colors |
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
283 |
oRed := (OldColor shr RShift); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
284 |
oGreen := (OldColor shr GShift); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
285 |
oBlue := (OldColor shr BShift); |
4791 | 286 |
|
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
287 |
nRed := (NewColor shr RShift); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
288 |
nGreen := (NewColor shr GShift); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
289 |
nBlue := (NewColor shr BShift); |
4791 | 290 |
|
291 |
// Mix colors |
|
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
292 |
nRed := min(255,((nRed*nAlpha) div 255) + ((oRed*oAlpha*byte(255-nAlpha)) div 65025)); |
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5895
diff
changeset
|
293 |
nGreen := min(255,((nGreen*nAlpha) div 255) + ((oGreen*oAlpha*byte(255-nAlpha)) div 65025)); |
7492
3188794b9d87
Perf opt for the c conversion. Use downto instead to avoid repeated function calls in the loop
nemo
parents:
7270
diff
changeset
|
294 |
nBlue := min(255,((nBlue*nAlpha) div 255) + ((oBlue*oAlpha*byte(255-nAlpha)) div 65025)); |
4791 | 295 |
nAlpha := min(255, oAlpha + nAlpha); |
296 |
||
5041 | 297 |
addBgColor := (nAlpha shl AShift) or (nRed shl RShift) or (nGreen shl GShift) or (nBlue shl BShift); |
4791 | 298 |
end; |
299 |
||
371 | 300 |
procedure FillCircleLines(x, y, dx, dy: LongInt; Value: Longword); |
301 |
var i: LongInt; |
|
184 | 302 |
begin |
1753 | 303 |
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then |
7509 | 304 |
for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do |
3519 | 305 |
if (Land[y + dy, i] and lfIndestructible) = 0 then |
1753 | 306 |
Land[y + dy, i]:= Value; |
307 |
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then |
|
7509 | 308 |
for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do |
3519 | 309 |
if (Land[y - dy, i] and lfIndestructible) = 0 then |
1753 | 310 |
Land[y - dy, i]:= Value; |
311 |
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then |
|
7509 | 312 |
for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do |
3519 | 313 |
if (Land[y + dx, i] and lfIndestructible) = 0 then |
1753 | 314 |
Land[y + dx, i]:= Value; |
315 |
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then |
|
7509 | 316 |
for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do |
3519 | 317 |
if (Land[y - dx, i] and lfIndestructible) = 0 then |
1753 | 318 |
Land[y - dx, i]:= Value; |
184 | 319 |
end; |
320 |
||
371 | 321 |
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword); |
322 |
var dx, dy, d: LongInt; |
|
184 | 323 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
324 |
dx:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
325 |
dy:= Radius; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
326 |
d:= 3 - 2 * Radius; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
327 |
while (dx < dy) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
328 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
329 |
FillCircleLines(x, y, dx, dy, Value); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
330 |
if (d < 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
331 |
d:= d + 4 * dx + 6 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
332 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
333 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
334 |
d:= d + 4 * (dx - dy) + 10; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
335 |
dec(dy) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
336 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
337 |
inc(dx) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
338 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
339 |
if (dx = dy) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
340 |
FillCircleLines(x, y, dx, dy, Value); |
184 | 341 |
end; |
342 |
||
7270
93e92e82d5c8
Step 1. Add current hedgehog as top bit of bottom byte.
nemo
parents:
7268
diff
changeset
|
343 |
procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet, isCurrent: boolean); |
504
13b6ebc53627
Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents:
495
diff
changeset
|
344 |
begin |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
345 |
if not doSet and isCurrent then |
9876 | 346 |
FillRoundInLandFT(X, Y, Radius, setNotCurrentMask) |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
347 |
else if not doSet and not IsCurrent then |
9876 | 348 |
FillRoundInLandFT(X, Y, Radius, changePixelSetNotCurrent) |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
349 |
else if doSet and IsCurrent then |
9876 | 350 |
FillRoundInLandFT(X, Y, Radius, setCurrentHog) |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
351 |
else if doSet and not IsCurrent then |
9876 | 352 |
FillRoundInLandFT(X, Y, Radius, changePixelNotSetNotCurrent); |
8583 | 353 |
end; |
354 |
||
8602 | 355 |
procedure DrawIceBreak(x, y, iceRadius, iceHeight: Longint); |
356 |
var |
|
357 |
i, j: integer; |
|
358 |
landRect: TSDL_Rect; |
|
359 |
begin |
|
360 |
for i := min(max(x - iceRadius, 0), LAND_WIDTH - 1) to min(max(x + iceRadius, 0), LAND_WIDTH - 1) do |
|
361 |
begin |
|
362 |
for j := min(max(y, 0), LAND_HEIGHT - 1) to min(max(y + iceHeight, 0), LAND_HEIGHT - 1) do |
|
363 |
begin |
|
8624 | 364 |
if Land[j, i] = 0 then |
8602 | 365 |
begin |
8795 | 366 |
Land[j, i] := lfIce; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
367 |
fillPixelFromIceSprite(i, j); |
8602 | 368 |
end; |
8795 | 369 |
end; |
8602 | 370 |
end; |
371 |
landRect.x := min(max(x - iceRadius, 0), LAND_WIDTH - 1); |
|
372 |
landRect.y := min(max(y, 0), LAND_HEIGHT - 1); |
|
373 |
landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1); |
|
374 |
landRect.h := min(iceHeight, LAND_HEIGHT - landRect.y - 1); |
|
8795 | 375 |
UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true); |
8602 | 376 |
end; |
377 |
||
3689 | 378 |
function DrawExplosion(X, Y, Radius: LongInt): Longword; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
379 |
var |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
380 |
tx, ty, dx, dy: Longint; |
184 | 381 |
begin |
9876 | 382 |
DrawExplosion := FillRoundInLandFT(x, y, Radius, backgroundPixel); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
383 |
if Radius > 20 then |
9876 | 384 |
FillRoundInLandFT(x, y, Radius - 15, nullPixel); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
385 |
FillRoundInLand(X, Y, Radius, 0); |
9876 | 386 |
FillRoundInLandFT(x, y, Radius + 4, ebcPixel); |
8828 | 387 |
tx:= Max(X - Radius - 5, 0); |
388 |
dx:= Min(X + Radius + 5, LAND_WIDTH) - tx; |
|
389 |
ty:= Max(Y - Radius - 5, 0); |
|
390 |
dy:= Min(Y + Radius + 5, LAND_HEIGHT) - ty; |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
391 |
UpdateLandTexture(tx, dx, ty, dy, false); |
184 | 392 |
end; |
393 |
||
371 | 394 |
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte); |
5480 | 395 |
var tx, ty, by, bx, i: LongInt; |
184 | 396 |
begin |
397 |
for i:= 0 to Pred(Count) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
398 |
begin |
7509 | 399 |
for ty:= Max(y - Radius, 0) to Min(y + Radius, LAND_HEIGHT) do |
400 |
for tx:= Max(0, ar^[i].Left - Radius) to Min(LAND_WIDTH, ar^[i].Right + Radius) do |
|
5480 | 401 |
begin |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
402 |
if (Land[ty, tx] and lfIndestructible) = 0 then |
5480 | 403 |
begin |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
404 |
if (cReducedQuality and rqBlurryLand) = 0 then |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
405 |
begin |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
406 |
by:= ty; bx:= tx; |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
407 |
end |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
408 |
else |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
409 |
begin |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
410 |
by:= ty div 2; bx:= tx div 2; |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
411 |
end; |
6355 | 412 |
if ((Land[ty, tx] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
413 |
LandPixels[by, bx]:= LandBackPixel(tx, ty) |
7492
3188794b9d87
Perf opt for the c conversion. Use downto instead to avoid repeated function calls in the loop
nemo
parents:
7270
diff
changeset
|
414 |
else if ((Land[ty, tx] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
415 |
LandPixels[by, bx]:= 0 |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
416 |
end |
5480 | 417 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
418 |
inc(y, dY) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
419 |
end; |
184 | 420 |
|
421 |
inc(Radius, 4); |
|
351 | 422 |
dec(y, Count * dY); |
184 | 423 |
|
424 |
for i:= 0 to Pred(Count) do |
|
425 |
begin |
|
7509 | 426 |
for ty:= Max(y - Radius, 0) to Min(y + Radius, LAND_HEIGHT) do |
427 |
for tx:= Max(0, ar^[i].Left - Radius) to Min(LAND_WIDTH, ar^[i].Right + Radius) do |
|
4690
490cf71b436a
revert last change. ordinary fire is fine, but HHG screws up.
nemo
parents:
4688
diff
changeset
|
428 |
if ((Land[ty, tx] and lfBasic) <> 0) or ((Land[ty, tx] and lfObject) <> 0) then |
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
429 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
430 |
if (cReducedQuality and rqBlurryLand) = 0 then |
6982 | 431 |
LandPixels[ty, tx]:= ExplosionBorderColor |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
432 |
else |
6982 | 433 |
LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor; |
3595
341e407e3754
partially removing DOWNSCALE ifdef -- only two remain and their removal requires dynamic allocation (btw this breaks low quality mode)
koda
parents:
3554
diff
changeset
|
434 |
|
8579
d18bc19d780a
graphics tweak. flag a couple more overeager setall HH
nemo
parents:
7509
diff
changeset
|
435 |
Land[ty, tx]:= (Land[ty, tx] or lfDamaged) and not lfIce; |
3596 | 436 |
LandDirty[ty div 32, tx div 32]:= 1; |
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
437 |
end; |
184 | 438 |
inc(y, dY) |
439 |
end; |
|
440 |
||
818 | 441 |
|
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7150
diff
changeset
|
442 |
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false) |
184 | 443 |
end; |
444 |
||
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
445 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
446 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
447 |
procedure DrawExplosionBorder(X, Y, dx, dy:hwFloat; despeckle : Boolean); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
448 |
var |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
449 |
t, tx, ty :Longint; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
450 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
451 |
for t:= 0 to 7 do |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
452 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
453 |
X:= X + dX; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
454 |
Y:= Y + dY; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
455 |
tx:= hwRound(X); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
456 |
ty:= hwRound(Y); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
457 |
if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (((Land[ty, tx] and lfBasic) <> 0) |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
458 |
or ((Land[ty, tx] and lfObject) <> 0)) then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
459 |
begin |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
460 |
Land[ty, tx]:= (Land[ty, tx] or lfDamaged) and not lfIce; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
461 |
if despeckle then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
462 |
LandDirty[ty div 32, tx div 32]:= 1; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
463 |
if (cReducedQuality and rqBlurryLand) = 0 then |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
464 |
LandPixels[ty, tx]:= ExplosionBorderColor |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
465 |
else |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
466 |
LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
467 |
end |
8795 | 468 |
end; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
469 |
end; |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
470 |
|
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
471 |
|
184 | 472 |
// |
473 |
// - (dX, dY) - direction, vector of length = 0.5 |
|
474 |
// |
|
371 | 475 |
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); |
358 | 476 |
var nx, ny, dX8, dY8: hwFloat; |
5480 | 477 |
i, t, tx, ty, by, bx, stX, stY, ddy, ddx: Longint; |
5332 | 478 |
despeckle : Boolean; |
184 | 479 |
begin // (-dY, dX) is (dX, dY) rotated by PI/2 |
772
e8d530ca77be
Don't update all land texture when drawing tunnel (saves video throughput)
unc0rr
parents:
769
diff
changeset
|
480 |
stY:= hwRound(Y); |
1809 | 481 |
stX:= hwRound(X); |
772
e8d530ca77be
Don't update all land texture when drawing tunnel (saves video throughput)
unc0rr
parents:
769
diff
changeset
|
482 |
|
5332 | 483 |
despeckle:= HalfWidth > 1; |
484 |
||
184 | 485 |
nx:= X + dY * (HalfWidth + 8); |
486 |
ny:= Y - dX * (HalfWidth + 8); |
|
487 |
||
358 | 488 |
dX8:= dX * 8; |
489 |
dY8:= dY * 8; |
|
184 | 490 |
for i:= 0 to 7 do |
491 |
begin |
|
358 | 492 |
X:= nx - dX8; |
493 |
Y:= ny - dY8; |
|
184 | 494 |
for t:= -8 to ticks + 8 do |
2666 | 495 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
496 |
X:= X + dX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
497 |
Y:= Y + dY; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
498 |
tx:= hwRound(X); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
499 |
ty:= hwRound(Y); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
500 |
if ((ty and LAND_HEIGHT_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
501 |
and ((tx and LAND_WIDTH_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
502 |
and (((Land[ty, tx] and lfBasic) <> 0) or ((Land[ty, tx] and lfObject) <> 0)) then |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3236
diff
changeset
|
503 |
begin |
8579
d18bc19d780a
graphics tweak. flag a couple more overeager setall HH
nemo
parents:
7509
diff
changeset
|
504 |
Land[ty, tx]:= Land[ty, tx] and not lfIce; |
7492
3188794b9d87
Perf opt for the c conversion. Use downto instead to avoid repeated function calls in the loop
nemo
parents:
7270
diff
changeset
|
505 |
if despeckle then |
5887 | 506 |
begin |
507 |
Land[ty, tx]:= Land[ty, tx] or lfDamaged; |
|
508 |
LandDirty[ty div 32, tx div 32]:= 1 |
|
509 |
end; |
|
5332 | 510 |
if (cReducedQuality and rqBlurryLand) = 0 then |
6982 | 511 |
LandPixels[ty, tx]:= ExplosionBorderColor |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
512 |
else |
6982 | 513 |
LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3236
diff
changeset
|
514 |
end |
2666 | 515 |
end; |
184 | 516 |
nx:= nx - dY; |
517 |
ny:= ny + dX; |
|
518 |
end; |
|
519 |
||
520 |
for i:= -HalfWidth to HalfWidth do |
|
521 |
begin |
|
358 | 522 |
X:= nx - dX8; |
523 |
Y:= ny - dY8; |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
524 |
DrawExplosionBorder(X, Y, dx, dy, despeckle); |
184 | 525 |
X:= nx; |
526 |
Y:= ny; |
|
527 |
for t:= 0 to ticks do |
|
528 |
begin |
|
529 |
X:= X + dX; |
|
530 |
Y:= Y + dY; |
|
351 | 531 |
tx:= hwRound(X); |
532 |
ty:= hwRound(Y); |
|
3519 | 533 |
if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and ((Land[ty, tx] and lfIndestructible) = 0) then |
2647 | 534 |
begin |
5480 | 535 |
if (cReducedQuality and rqBlurryLand) = 0 then |
536 |
begin |
|
537 |
by:= ty; bx:= tx; |
|
538 |
end |
|
4690
490cf71b436a
revert last change. ordinary fire is fine, but HHG screws up.
nemo
parents:
4688
diff
changeset
|
539 |
else |
5480 | 540 |
begin |
541 |
by:= ty div 2; bx:= tx div 2; |
|
542 |
end; |
|
6355 | 543 |
if ((Land[ty, tx] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
544 |
LandPixels[by, bx]:= LandBackPixel(tx, ty) |
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
545 |
else if ((Land[ty, tx] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then |
6097 | 546 |
LandPixels[by, bx]:= 0; |
547 |
Land[ty, tx]:= 0; |
|
2647 | 548 |
end |
184 | 549 |
end; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
550 |
DrawExplosionBorder(X, Y, dx, dy, despeckle); |
184 | 551 |
nx:= nx - dY; |
552 |
ny:= ny + dX; |
|
553 |
end; |
|
554 |
||
555 |
for i:= 0 to 7 do |
|
556 |
begin |
|
358 | 557 |
X:= nx - dX8; |
558 |
Y:= ny - dY8; |
|
184 | 559 |
for t:= -8 to ticks + 8 do |
2666 | 560 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
561 |
X:= X + dX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
562 |
Y:= Y + dY; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
563 |
tx:= hwRound(X); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
564 |
ty:= hwRound(Y); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
565 |
if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (((Land[ty, tx] and lfBasic) <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
566 |
or ((Land[ty, tx] and lfObject) <> 0)) then |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3236
diff
changeset
|
567 |
begin |
8579
d18bc19d780a
graphics tweak. flag a couple more overeager setall HH
nemo
parents:
7509
diff
changeset
|
568 |
Land[ty, tx]:= (Land[ty, tx] or lfDamaged) and not lfIce; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
569 |
if despeckle then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
570 |
LandDirty[ty div 32, tx div 32]:= 1; |
3595
341e407e3754
partially removing DOWNSCALE ifdef -- only two remain and their removal requires dynamic allocation (btw this breaks low quality mode)
koda
parents:
3554
diff
changeset
|
571 |
if (cReducedQuality and rqBlurryLand) = 0 then |
6982 | 572 |
LandPixels[ty, tx]:= ExplosionBorderColor |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
573 |
else |
6982 | 574 |
LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3236
diff
changeset
|
575 |
end |
2666 | 576 |
end; |
184 | 577 |
nx:= nx - dY; |
578 |
ny:= ny + dX; |
|
579 |
end; |
|
580 |
||
4374 | 581 |
tx:= Max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0); |
582 |
ty:= Max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0); |
|
583 |
ddx:= Min(stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)), LAND_WIDTH) - tx; |
|
584 |
ddy:= Min(stY + HalfWidth * 2 + 4 + abs(hwRound(dY * ticks)), LAND_HEIGHT) - ty; |
|
1809 | 585 |
|
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7150
diff
changeset
|
586 |
UpdateLandTexture(tx, ddx, ty, ddy, false) |
184 | 587 |
end; |
588 |
||
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
589 |
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace, indestructible: boolean): boolean; inline; |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
590 |
begin |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
591 |
TryPlaceOnLand:= TryPlaceOnLand(cpX, cpY, Obj, Frame, doPlace, indestructible, 0); |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
592 |
end; |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
593 |
|
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
594 |
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace, indestructible: boolean; LandFlags: Word): boolean; |
6077
d8fa5a85d24f
This prevents girders from erasing landbacktex (square windows in tunnels and such), at the cost of requiring lfBasic and lfObject to be treated the same apart from graphically
nemo
parents:
6011
diff
changeset
|
595 |
var X, Y, bpp, h, w, row, col, gx, gy, numFramesFirstCol: LongInt; |
409 | 596 |
p: PByteArray; |
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
597 |
Image: PSDL_Surface; |
409 | 598 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
599 |
TryPlaceOnLand:= false; |
2235 | 600 |
numFramesFirstCol:= SpritesData[Obj].imageHeight div SpritesData[Obj].Height; |
601 |
||
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
602 |
TryDo(SpritesData[Obj].Surface <> nil, 'Assert SpritesData[Obj].Surface failed', true); |
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
603 |
Image:= SpritesData[Obj].Surface; |
409 | 604 |
w:= SpritesData[Obj].Width; |
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
605 |
h:= SpritesData[Obj].Height; |
2235 | 606 |
row:= Frame mod numFramesFirstCol; |
607 |
col:= Frame div numFramesFirstCol; |
|
409 | 608 |
|
609 |
if SDL_MustLock(Image) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
610 |
SDLTry(SDL_LockSurface(Image) >= 0, true); |
409 | 611 |
|
612 |
bpp:= Image^.format^.BytesPerPixel; |
|
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
613 |
TryDo(bpp = 4, 'It should be 32 bpp sprite', true); |
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
614 |
// Check that sprite fits free space |
2236 | 615 |
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]); |
409 | 616 |
case bpp of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
617 |
4: for y:= 0 to Pred(h) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
618 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
619 |
for x:= 0 to Pred(w) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
620 |
if (PLongword(@(p^[x * 4]))^) <> 0 then |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
621 |
if ((cpY + y) <= Longint(topY)) or ((cpY + y) >= LAND_HEIGHT) or |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
622 |
((cpX + x) <= Longint(leftX)) or ((cpX + x) >= Longint(rightX)) or (Land[cpY + y, cpX + x] <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
623 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
624 |
if SDL_MustLock(Image) then |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
625 |
SDL_UnlockSurface(Image); |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
626 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
627 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
628 |
p:= @(p^[Image^.pitch]); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
629 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
630 |
end; |
409 | 631 |
|
520 | 632 |
TryPlaceOnLand:= true; |
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
633 |
if not doPlace then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
634 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
635 |
if SDL_MustLock(Image) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
636 |
SDL_UnlockSurface(Image); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
637 |
exit |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
638 |
end; |
520 | 639 |
|
409 | 640 |
// Checked, now place |
2236 | 641 |
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]); |
409 | 642 |
case bpp of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
643 |
4: for y:= 0 to Pred(h) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
644 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
645 |
for x:= 0 to Pred(w) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
646 |
if (PLongword(@(p^[x * 4]))^) <> 0 then |
769
788efc1d649f
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents:
768
diff
changeset
|
647 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
648 |
if (cReducedQuality and rqBlurryLand) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
649 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
650 |
gX:= cpX + x; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
651 |
gY:= cpY + y; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
652 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
653 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
654 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
655 |
gX:= (cpX + x) div 2; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
656 |
gY:= (cpY + y) div 2; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
657 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
658 |
if indestructible then |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
659 |
Land[cpY + y, cpX + x]:= lfIndestructible or LandFlags |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
660 |
else if (LandPixels[gY, gX] and AMask) shr AShift = 255 then // This test assumes lfBasic and lfObject differ only graphically |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
661 |
Land[cpY + y, cpX + x]:= lfBasic or LandFlags |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
662 |
else |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
663 |
Land[cpY + y, cpX + x]:= lfObject or LandFlags; |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9460
diff
changeset
|
664 |
LandPixels[gY, gX]:= PLongword(@(p^[x * 4]))^ |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
665 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
666 |
p:= @(p^[Image^.pitch]); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
667 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
668 |
end; |
409 | 669 |
if SDL_MustLock(Image) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
670 |
SDL_UnlockSurface(Image); |
409 | 671 |
|
4374 | 672 |
x:= Max(cpX, leftX); |
673 |
w:= Min(cpX + Image^.w, LAND_WIDTH) - x; |
|
674 |
y:= Max(cpY, topY); |
|
675 |
h:= Min(cpY + Image^.h, LAND_HEIGHT) - y; |
|
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7150
diff
changeset
|
676 |
UpdateLandTexture(x, w, y, h, true) |
409 | 677 |
end; |
678 |
||
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
679 |
function Despeckle(X, Y: LongInt): boolean; |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
680 |
var nx, ny, i, j, c, xx, yy: LongInt; |
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
681 |
pixelsweep: boolean; |
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
682 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
683 |
Despeckle:= true; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
684 |
|
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
685 |
if (cReducedQuality and rqBlurryLand) = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
686 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
687 |
xx:= X; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
688 |
yy:= Y; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
689 |
end |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
690 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
691 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
692 |
xx:= X div 2; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
693 |
yy:= Y div 2; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
694 |
end; |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
695 |
|
8751
4609823efc94
More flagging of Land values. Also use less than for tests of non-terrain, instead of "and $FF00 = 0". Saves a couple of ops, which actually matters a small amount in a few places.
nemo
parents:
8744
diff
changeset
|
696 |
pixelsweep:= (Land[Y, X] <= lfAllObjMask) and (LandPixels[yy, xx] <> 0); |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
697 |
if (((Land[Y, X] and lfDamaged) <> 0) and ((Land[Y, X] and lfIndestructible) = 0)) or pixelsweep then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
698 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
699 |
c:= 0; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
700 |
for i:= -1 to 1 do |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
701 |
for j:= -1 to 1 do |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
702 |
if (i <> 0) or (j <> 0) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
703 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
704 |
ny:= Y + i; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
705 |
nx:= X + j; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
706 |
if ((ny and LAND_HEIGHT_MASK) = 0) and ((nx and LAND_WIDTH_MASK) = 0) then |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
707 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
708 |
if pixelsweep then |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
709 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
710 |
if ((cReducedQuality and rqBlurryLand) <> 0) then |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
711 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
712 |
nx:= nx div 2; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
713 |
ny:= ny div 2 |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
714 |
end; |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
715 |
if LandPixels[ny, nx] <> 0 then |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
716 |
inc(c); |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
717 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
718 |
else if Land[ny, nx] > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
719 |
inc(c); |
4695
ac2cb3b99d70
add a disabling for landback, set it if flakes are enabled
nemo
parents:
4690
diff
changeset
|
720 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
721 |
end; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
722 |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
723 |
if c < 4 then // 0-3 neighbours |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
724 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
725 |
if ((Land[Y, X] and lfBasic) <> 0) and (not disableLandBack) then |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
726 |
LandPixels[yy, xx]:= LandBackPixel(X, Y) |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
727 |
else |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
728 |
LandPixels[yy, xx]:= 0; |
3595
341e407e3754
partially removing DOWNSCALE ifdef -- only two remain and their removal requires dynamic allocation (btw this breaks low quality mode)
koda
parents:
3554
diff
changeset
|
729 |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
730 |
if not pixelsweep then |
6681 | 731 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
732 |
Land[Y, X]:= 0; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
733 |
exit |
6681 | 734 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
735 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
736 |
end; |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6982
diff
changeset
|
737 |
Despeckle:= false |
5267
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
738 |
end; |
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
739 |
|
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
740 |
procedure Smooth(X, Y: LongInt); |
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
741 |
begin |
5261 | 742 |
// a bit of AA for explosions |
7492
3188794b9d87
Perf opt for the c conversion. Use downto instead to avoid repeated function calls in the loop
nemo
parents:
7270
diff
changeset
|
743 |
if (Land[Y, X] = 0) and (Y > LongInt(topY) + 1) and |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
744 |
(Y < LAND_HEIGHT-2) and (X > LongInt(leftX) + 1) and (X < LongInt(rightX) - 1) then |
5261 | 745 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
746 |
if ((((Land[y, x-1] and lfDamaged) <> 0) and (((Land[y+1,x] and lfDamaged) <> 0)) or ((Land[y-1,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
747 |
or (((Land[y, x+1] and lfDamaged) <> 0) and (((Land[y-1,x] and lfDamaged) <> 0) or ((Land[y+1,x] and lfDamaged) <> 0)))) then |
5261 | 748 |
begin |
5274 | 749 |
if (cReducedQuality and rqBlurryLand) = 0 then |
750 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
751 |
if ((LandPixels[y,x] and AMask) shr AShift) < 10 then |
6982 | 752 |
LandPixels[y,x]:= (ExplosionBorderColor and (not AMask)) or (128 shl AShift) |
5274 | 753 |
else |
754 |
LandPixels[y,x]:= |
|
6982 | 755 |
(((((LandPixels[y,x] and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
756 |
(((((LandPixels[y,x] and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
|
757 |
(((((LandPixels[y,x] and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift) |
|
5274 | 758 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
759 |
if (Land[y, x-1] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
760 |
Land[y,x]:= lfObject |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
761 |
else if (Land[y, x+1] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
762 |
Land[y,x]:= lfObject |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
763 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
764 |
Land[y,x]:= lfBasic; |
5261 | 765 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
766 |
else if ((((Land[y, x-1] and lfDamaged) <> 0) and ((Land[y+1,x-1] and lfDamaged) <> 0) and ((Land[y+2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
767 |
or (((Land[y, x-1] and lfDamaged) <> 0) and ((Land[y-1,x-1] and lfDamaged) <> 0) and ((Land[y-2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
768 |
or (((Land[y, x+1] and lfDamaged) <> 0) and ((Land[y+1,x+1] and lfDamaged) <> 0) and ((Land[y+2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
769 |
or (((Land[y, x+1] and lfDamaged) <> 0) and ((Land[y-1,x+1] and lfDamaged) <> 0) and ((Land[y-2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
770 |
or (((Land[y+1, x] and lfDamaged) <> 0) and ((Land[y+1,x+1] and lfDamaged) <> 0) and ((Land[y,x+2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
771 |
or (((Land[y-1, x] and lfDamaged) <> 0) and ((Land[y-1,x+1] and lfDamaged) <> 0) and ((Land[y,x+2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
772 |
or (((Land[y+1, x] and lfDamaged) <> 0) and ((Land[y+1,x-1] and lfDamaged) <> 0) and ((Land[y,x-2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
773 |
or (((Land[y-1, x] and lfDamaged) <> 0) and ((Land[y-1,x-1] and lfDamaged) <> 0) and ((Land[y,x-2] and lfDamaged) <> 0))) then |
5261 | 774 |
begin |
5274 | 775 |
if (cReducedQuality and rqBlurryLand) = 0 then |
776 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
777 |
if ((LandPixels[y,x] and AMask) shr AShift) < 10 then |
6982 | 778 |
LandPixels[y,x]:= (ExplosionBorderColor and (not AMask)) or (64 shl AShift) |
5274 | 779 |
else |
780 |
LandPixels[y,x]:= |
|
6982 | 781 |
(((((LandPixels[y,x] and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
782 |
(((((LandPixels[y,x] and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
|
783 |
(((((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) |
|
5274 | 784 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
785 |
if (Land[y, x-1] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
786 |
Land[y, x]:= lfObject |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
787 |
else if (Land[y, x+1] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
788 |
Land[y, x]:= lfObject |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
789 |
else if (Land[y+1, x] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
790 |
Land[y, x]:= lfObject |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
791 |
else if (Land[y-1, x] = lfObject) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
792 |
Land[y, x]:= lfObject |
5687
fac606654317
Die speckles, round N. Check that alpha is not basically empty while blending, try to match the damaged land type.
nemo
parents:
5480
diff
changeset
|
793 |
else Land[y,x]:= lfBasic |
5261 | 794 |
end |
5267
e9ae019e9bb4
move smoothing into separate function, adjust call order
nemo
parents:
5266
diff
changeset
|
795 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
796 |
else if ((cReducedQuality and rqBlurryLand) = 0) and (LandPixels[Y, X] and AMask = 255) |
8598
9d21bab30893
Apologies if jaree had done something similar, but didn't see anything in repo pull. This removes Land[] mixed w/ LandPixels[] and streamlines things a little
nemo
parents:
8596
diff
changeset
|
797 |
and (Land[Y, X] and (lfDamaged or lfBasic) = lfBasic) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
798 |
and (Y > LongInt(topY) + 1) and (Y < LAND_HEIGHT-2) and (X > LongInt(leftX) + 1) and (X < LongInt(rightX) - 1) then |
6130 | 799 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
800 |
if ((((Land[y, x-1] and lfDamaged) <> 0) and (((Land[y+1,x] and lfDamaged) <> 0)) or ((Land[y-1,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
801 |
or (((Land[y, x+1] and lfDamaged) <> 0) and (((Land[y-1,x] and lfDamaged) <> 0) or ((Land[y+1,x] and lfDamaged) <> 0)))) then |
6130 | 802 |
begin |
803 |
LandPixels[y,x]:= |
|
6982 | 804 |
(((((LandPixels[y,x] and RMask shr RShift) div 2)+((ExplosionBorderColor and RMask) shr RShift) div 2) and $FF) shl RShift) or |
805 |
(((((LandPixels[y,x] and GMask shr GShift) div 2)+((ExplosionBorderColor and GMask) shr GShift) div 2) and $FF) shl GShift) or |
|
806 |
(((((LandPixels[y,x] and BMask shr BShift) div 2)+((ExplosionBorderColor and BMask) shr BShift) div 2) and $FF) shl BShift) or ($FF shl AShift) |
|
6130 | 807 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
808 |
else if ((((Land[y, x-1] and lfDamaged) <> 0) and ((Land[y+1,x-1] and lfDamaged) <> 0) and ((Land[y+2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
809 |
or (((Land[y, x-1] and lfDamaged) <> 0) and ((Land[y-1,x-1] and lfDamaged) <> 0) and ((Land[y-2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
810 |
or (((Land[y, x+1] and lfDamaged) <> 0) and ((Land[y+1,x+1] and lfDamaged) <> 0) and ((Land[y+2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
811 |
or (((Land[y, x+1] and lfDamaged) <> 0) and ((Land[y-1,x+1] and lfDamaged) <> 0) and ((Land[y-2,x] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
812 |
or (((Land[y+1, x] and lfDamaged) <> 0) and ((Land[y+1,x+1] and lfDamaged) <> 0) and ((Land[y,x+2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
813 |
or (((Land[y-1, x] and lfDamaged) <> 0) and ((Land[y-1,x+1] and lfDamaged) <> 0) and ((Land[y,x+2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
814 |
or (((Land[y+1, x] and lfDamaged) <> 0) and ((Land[y+1,x-1] and lfDamaged) <> 0) and ((Land[y,x-2] and lfDamaged) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
815 |
or (((Land[y-1, x] and lfDamaged) <> 0) and ((Land[y-1,x-1] and lfDamaged) <> 0) and ((Land[y,x-2] and lfDamaged) <> 0))) then |
6130 | 816 |
begin |
817 |
LandPixels[y,x]:= |
|
6982 | 818 |
(((((LandPixels[y,x] and RMask shr RShift) * 3 div 4)+((ExplosionBorderColor and RMask) shr RShift) div 4) and $FF) shl RShift) or |
819 |
(((((LandPixels[y,x] and GMask shr GShift) * 3 div 4)+((ExplosionBorderColor and GMask) shr GShift) div 4) and $FF) shl GShift) or |
|
820 |
(((((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) |
|
6130 | 821 |
end |
822 |
end |
|
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
823 |
end; |
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
824 |
|
1792 | 825 |
function SweepDirty: boolean; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
826 |
var x, y, xx, yy, ty, tx: LongInt; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
827 |
bRes, updateBlock, resweep, recheck: boolean; |
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
828 |
begin |
2695 | 829 |
bRes:= false; |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
830 |
reCheck:= true; |
1792 | 831 |
|
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
832 |
while recheck do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
833 |
begin |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
834 |
recheck:= false; |
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
835 |
for y:= 0 to LAND_HEIGHT div 32 - 1 do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
836 |
begin |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
837 |
for x:= 0 to LAND_WIDTH div 32 - 1 do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
838 |
begin |
5895 | 839 |
if LandDirty[y, x] = 1 then |
2167
4e9ad395c1d1
Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents:
1892
diff
changeset
|
840 |
begin |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
841 |
updateBlock:= false; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
842 |
resweep:= true; |
3602
99c93fa258d6
Restore prior optimisation with the wildly out-of-bounds tx in LandDirty removed
nemo
parents:
3601
diff
changeset
|
843 |
ty:= y * 32; |
99c93fa258d6
Restore prior optimisation with the wildly out-of-bounds tx in LandDirty removed
nemo
parents:
3601
diff
changeset
|
844 |
tx:= x * 32; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
845 |
while(resweep) do |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
846 |
begin |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
847 |
resweep:= false; |
3602
99c93fa258d6
Restore prior optimisation with the wildly out-of-bounds tx in LandDirty removed
nemo
parents:
3601
diff
changeset
|
848 |
for yy:= ty to ty + 31 do |
99c93fa258d6
Restore prior optimisation with the wildly out-of-bounds tx in LandDirty removed
nemo
parents:
3601
diff
changeset
|
849 |
for xx:= tx to tx + 31 do |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
850 |
if Despeckle(xx, yy) then |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
851 |
begin |
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
852 |
bRes:= true; |
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
853 |
updateBlock:= true; |
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
854 |
resweep:= true; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
855 |
if (yy = ty) and (y > 0) then |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
856 |
begin |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
857 |
LandDirty[y-1, x]:= 1; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
858 |
recheck:= true; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
859 |
end |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
860 |
else if (yy = ty+31) and (y < LAND_HEIGHT div 32 - 1) then |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
861 |
begin |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
862 |
LandDirty[y+1, x]:= 1; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
863 |
recheck:= true; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
864 |
end; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
865 |
if (xx = tx) and (x > 0) then |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
866 |
begin |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
867 |
LandDirty[y, x-1]:= 1; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
868 |
recheck:= true; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
869 |
end |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
870 |
else if (xx = tx+31) and (x < LAND_WIDTH div 32 - 1) then |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
871 |
begin |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
872 |
LandDirty[y, x+1]:= 1; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
873 |
recheck:= true; |
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
874 |
end |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
875 |
end; |
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
876 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
877 |
if updateBlock then |
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7150
diff
changeset
|
878 |
UpdateLandTexture(tx, 32, ty, 32, false); |
5895 | 879 |
LandDirty[y, x]:= 2; |
2167
4e9ad395c1d1
Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents:
1892
diff
changeset
|
880 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
881 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2741
diff
changeset
|
882 |
end; |
3554
066faceb977d
Extend pixel sweep to recheck neighbours if erasing on edges
nemo
parents:
3521
diff
changeset
|
883 |
end; |
1792 | 884 |
|
5895 | 885 |
for y:= 0 to LAND_HEIGHT div 32 - 1 do |
886 |
for x:= 0 to LAND_WIDTH div 32 - 1 do |
|
887 |
if LandDirty[y, x] <> 0 then |
|
888 |
begin |
|
889 |
LandDirty[y, x]:= 0; |
|
890 |
ty:= y * 32; |
|
891 |
tx:= x * 32; |
|
892 |
for yy:= ty to ty + 31 do |
|
893 |
for xx:= tx to tx + 31 do |
|
894 |
Smooth(xx,yy) |
|
895 |
end; |
|
896 |
||
2695 | 897 |
SweepDirty:= bRes; |
1738
00e8dadce69a
Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents:
1066
diff
changeset
|
898 |
end; |
184 | 899 |
|
5885
ae257409bcff
Remove extra graphical resweeps, and smooth prior to despeckling. Was getting odd desync here without Land[] seemingly incorrect at end of passes. Just removing seems to fix, and code wasn't that good an idea in its prior state anyway.
nemo
parents:
5832
diff
changeset
|
900 |
|
2331
e4941a7986d6
Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents:
2236
diff
changeset
|
901 |
// Return true if outside of land or not the value tested, used right now for some X/Y movement that does not use normal hedgehog movement in GSHandlers.inc |
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
902 |
function CheckLandValue(X, Y: LongInt; LandFlag: Word): boolean; inline; |
2331
e4941a7986d6
Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents:
2236
diff
changeset
|
903 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
904 |
CheckLandValue:= ((X and LAND_WIDTH_MASK <> 0) or (Y and LAND_HEIGHT_MASK <> 0)) or ((Land[Y, X] and LandFlag) = 0) |
2331
e4941a7986d6
Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents:
2236
diff
changeset
|
905 |
end; |
4367 | 906 |
|
6096
a00dbbf49d6c
Add landbacktex to a few maps, just to see how it looks.
nemo
parents:
6081
diff
changeset
|
907 |
function LandBackPixel(x, y: LongInt): LongWord; inline; |
4367 | 908 |
var p: PLongWordArray; |
909 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
910 |
if LandBackSurface = nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
911 |
LandBackPixel:= 0 |
4367 | 912 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
913 |
begin |
4367 | 914 |
p:= LandBackSurface^.pixels; |
915 |
LandBackPixel:= p^[LandBackSurface^.w * (y mod LandBackSurface^.h) + (x mod LandBackSurface^.w)];// or $FF000000; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
916 |
end |
4367 | 917 |
end; |
918 |
||
919 |
||
6490 | 920 |
procedure DrawLine(X1, Y1, X2, Y2: LongInt; Color: Longword); |
921 |
var |
|
922 |
eX, eY, dX, dY: LongInt; |
|
923 |
i, sX, sY, x, y, d: LongInt; |
|
924 |
begin |
|
925 |
eX:= 0; |
|
926 |
eY:= 0; |
|
927 |
dX:= X2 - X1; |
|
928 |
dY:= Y2 - Y1; |
|
929 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
930 |
if (dX > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
931 |
sX:= 1 |
6490 | 932 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
933 |
if (dX < 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
934 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
935 |
sX:= -1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
936 |
dX:= -dX |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
937 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
938 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
939 |
sX:= dX; |
6490 | 940 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
941 |
if (dY > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
942 |
sY:= 1 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
943 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
944 |
if (dY < 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
945 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
946 |
sY:= -1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
947 |
dY:= -dY |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
948 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
949 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
950 |
sY:= dY; |
6490 | 951 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
952 |
if (dX > dY) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
953 |
d:= dX |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
954 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
955 |
d:= dY; |
6490 | 956 |
|
957 |
x:= X1; |
|
958 |
y:= Y1; |
|
959 |
||
960 |
for i:= 0 to d do |
|
961 |
begin |
|
962 |
inc(eX, dX); |
|
963 |
inc(eY, dY); |
|
964 |
if (eX > d) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
965 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
966 |
dec(eX, d); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
967 |
inc(x, sX); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
968 |
end; |
6490 | 969 |
if (eY > d) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
970 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
971 |
dec(eY, d); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
972 |
inc(y, sY); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
973 |
end; |
6490 | 974 |
|
975 |
if ((x and LAND_WIDTH_MASK) = 0) and ((y and LAND_HEIGHT_MASK) = 0) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6490
diff
changeset
|
976 |
Land[y, x]:= Color; |
6490 | 977 |
end |
978 |
end; |
|
979 |
||
7150
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
980 |
procedure DrawDots(x, y, xx, yy: Longint; Color: Longword); inline; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
981 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
982 |
if (((x + xx) and LAND_WIDTH_MASK) = 0) and (((y + yy) and LAND_HEIGHT_MASK) = 0) then Land[y + yy, x + xx]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
983 |
if (((x + xx) and LAND_WIDTH_MASK) = 0) and (((y - yy) and LAND_HEIGHT_MASK) = 0) then Land[y - yy, x + xx]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
984 |
if (((x - xx) and LAND_WIDTH_MASK) = 0) and (((y + yy) and LAND_HEIGHT_MASK) = 0) then Land[y + yy, x - xx]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
985 |
if (((x - xx) and LAND_WIDTH_MASK) = 0) and (((y - yy) and LAND_HEIGHT_MASK) = 0) then Land[y - yy, x - xx]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
986 |
if (((x + yy) and LAND_WIDTH_MASK) = 0) and (((y + xx) and LAND_HEIGHT_MASK) = 0) then Land[y + xx, x + yy]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
987 |
if (((x + yy) and LAND_WIDTH_MASK) = 0) and (((y - xx) and LAND_HEIGHT_MASK) = 0) then Land[y - xx, x + yy]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
988 |
if (((x - yy) and LAND_WIDTH_MASK) = 0) and (((y + xx) and LAND_HEIGHT_MASK) = 0) then Land[y + xx, x - yy]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
989 |
if (((x - yy) and LAND_WIDTH_MASK) = 0) and (((y - xx) and LAND_HEIGHT_MASK) = 0) then Land[y - xx, x - yy]:= Color; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
990 |
end; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
991 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
992 |
procedure DrawLines(X1, Y1, X2, Y2, XX, YY: LongInt; color: Longword); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
993 |
var |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
994 |
eX, eY, dX, dY: LongInt; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
995 |
i, sX, sY, x, y, d: LongInt; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
996 |
f: boolean; |
7147 | 997 |
begin |
7150
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
998 |
eX:= 0; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
999 |
eY:= 0; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1000 |
dX:= X2 - X1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1001 |
dY:= Y2 - Y1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1002 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1003 |
if (dX > 0) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1004 |
sX:= 1 |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1005 |
else |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1006 |
if (dX < 0) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1007 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1008 |
sX:= -1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1009 |
dX:= -dX |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1010 |
end |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1011 |
else |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1012 |
sX:= dX; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1013 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1014 |
if (dY > 0) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1015 |
sY:= 1 |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1016 |
else |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1017 |
if (dY < 0) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1018 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1019 |
sY:= -1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1020 |
dY:= -dY |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1021 |
end |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1022 |
else |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1023 |
sY:= dY; |
7147 | 1024 |
|
7150
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1025 |
if (dX > dY) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1026 |
d:= dX |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1027 |
else |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1028 |
d:= dY; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1029 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1030 |
x:= X1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1031 |
y:= Y1; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1032 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1033 |
for i:= 0 to d do |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1034 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1035 |
inc(eX, dX); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1036 |
inc(eY, dY); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1037 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1038 |
f:= eX > d; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1039 |
if f then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1040 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1041 |
dec(eX, d); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1042 |
inc(x, sX); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1043 |
DrawDots(x, y, xx, yy, color) |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1044 |
end; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1045 |
if (eY > d) then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1046 |
begin |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1047 |
dec(eY, d); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1048 |
inc(y, sY); |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1049 |
f:= true; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1050 |
DrawDots(x, y, xx, yy, color) |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1051 |
end; |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1052 |
|
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1053 |
if not f then |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1054 |
DrawDots(x, y, xx, yy, color) |
fba3b14ff746
This should make drawn maps rendering even more faster
unc0rr
parents:
7147
diff
changeset
|
1055 |
end |
7147 | 1056 |
end; |
1057 |
||
1058 |
procedure DrawThickLine(X1, Y1, X2, Y2, radius: LongInt; color: Longword); |
|
1059 |
var dx, dy, d: LongInt; |
|
1060 |
begin |
|
1061 |
dx:= 0; |
|
1062 |
dy:= Radius; |
|
1063 |
d:= 3 - 2 * Radius; |
|
1064 |
while (dx < dy) do |
|
1065 |
begin |
|
1066 |
DrawLines(x1, y1, x2, y2, dx, dy, color); |
|
1067 |
if (d < 0) then |
|
1068 |
d:= d + 4 * dx + 6 |
|
1069 |
else |
|
1070 |
begin |
|
1071 |
d:= d + 4 * (dx - dy) + 10; |
|
1072 |
dec(dy) |
|
1073 |
end; |
|
1074 |
inc(dx) |
|
1075 |
end; |
|
1076 |
if (dx = dy) then |
|
1077 |
DrawLines(x1, y1, x2, y2, dx, dy, color); |
|
1078 |
end; |
|
1079 |
||
7268 | 1080 |
|
1081 |
procedure DumpLandToLog(x, y, r: LongInt); |
|
1082 |
var xx, yy, dx: LongInt; |
|
1083 |
s: shortstring; |
|
1084 |
begin |
|
1085 |
s[0]:= char(r * 2 + 1); |
|
1086 |
for yy:= y - r to y + r do |
|
1087 |
begin |
|
1088 |
for dx:= 0 to r*2 do |
|
1089 |
begin |
|
1090 |
xx:= dx - r + x; |
|
1091 |
if (xx = x) and (yy = y) then |
|
1092 |
s[dx + 1]:= 'X' |
|
1093 |
else if Land[yy, xx] > 255 then |
|
1094 |
s[dx + 1]:= 'O' |
|
1095 |
else if Land[yy, xx] > 0 then |
|
1096 |
s[dx + 1]:= '*' |
|
1097 |
else |
|
1098 |
s[dx + 1]:= '.' |
|
1099 |
end; |
|
1100 |
AddFileLog('Land dump: ' + s); |
|
1101 |
end; |
|
1102 |
end; |
|
1103 |
||
184 | 1104 |
end. |