author | unC0Rr |
Wed, 01 May 2024 16:49:16 +0200 | |
changeset 16041 | caba603f461f |
parent 15382 | 34eb5cc72241 |
child 15929 | 128ace913837 |
permissions | -rw-r--r-- |
184 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
11046 | 3 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
184 | 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 |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10015
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
184 | 17 |
*) |
18 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
184 | 21 |
unit uLandObjects; |
22 |
interface |
|
23 |
uses SDLh; |
|
24 |
||
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
25 |
procedure AddObjects(); |
3053 | 26 |
procedure FreeLandObjects(); |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
27 |
procedure LoadThemeConfig; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
28 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline; |
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
29 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); inline; |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
30 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word; Flip: boolean); |
13391 | 31 |
procedure BlitOverlayAndGenerateCollisionInfo(cpX, cpY: Longword; Image: PSDL_Surface); |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
32 |
procedure BlitImageUsingMask(cpX, cpY: Longword; Image, Mask: PSDL_Surface); |
1190
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
33 |
procedure AddOnLandObjects(Surface: PSDL_Surface); |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
34 |
procedure SetLand(var LandWord: Word; Pixel: LongWord); inline; |
184 | 35 |
|
36 |
implementation |
|
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
37 |
uses uStore, uConsts, uConsole, uRandom, uSound |
11824 | 38 |
, uTypes, uVariables, uDebug, uUtils |
15382 | 39 |
, uPhysFSLayer, uRenderUtils; |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2695
diff
changeset
|
40 |
|
1190
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
41 |
const MaxRects = 512; |
184 | 42 |
MAXOBJECTRECTS = 16; |
43 |
MAXTHEMEOBJECTS = 32; |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8028
diff
changeset
|
44 |
cThemeCFGFilename = 'theme.cfg'; |
184 | 45 |
|
13391 | 46 |
type PLongWord = ^LongWord; |
47 |
TRectsArray = array[0..MaxRects] of TSDL_Rect; |
|
7035 | 48 |
PRectArray = ^TRectsArray; |
13391 | 49 |
TThemeObjectOverlay = record |
50 |
Position: TPoint; |
|
51 |
Surf: PSDL_Surface; |
|
52 |
Width, Height: LongWord; |
|
53 |
end; |
|
184 | 54 |
TThemeObject = record |
13391 | 55 |
Name: ShortString; |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
56 |
Surf, Mask: PSDL_Surface; |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
57 |
inland: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
58 |
outland: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect; |
13391 | 59 |
anchors: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect; |
60 |
overlays: array[0..Pred(MAXOBJECTRECTS)] of TThemeObjectOverlay; |
|
61 |
inrectcnt: LongInt; |
|
62 |
outrectcnt: LongInt; |
|
63 |
anchorcnt: LongInt; |
|
64 |
overlaycnt: LongInt; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
65 |
Width, Height: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
66 |
Maxcnt: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
67 |
end; |
184 | 68 |
TThemeObjects = record |
371 | 69 |
Count: LongInt; |
184 | 70 |
objs: array[0..Pred(MAXTHEMEOBJECTS)] of TThemeObject; |
71 |
end; |
|
72 |
TSprayObject = record |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
73 |
Surf: PSDL_Surface; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
74 |
Width, Height: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
75 |
Maxcnt: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
76 |
end; |
184 | 77 |
TSprayObjects = record |
371 | 78 |
Count: LongInt; |
184 | 79 |
objs: array[0..Pred(MAXTHEMEOBJECTS)] of TSprayObject |
80 |
end; |
|
81 |
||
82 |
var Rects: PRectArray; |
|
83 |
RectCount: Longword; |
|
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
84 |
ThemeObjects: TThemeObjects; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
85 |
SprayObjects: TSprayObjects; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
86 |
|
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
87 |
procedure SetLand(var LandWord: Word; Pixel: LongWord); inline; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
88 |
begin |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
89 |
// this an if instead of masking colours to avoid confusing map creators |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
90 |
if ((AMask and Pixel) = 0) then |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
91 |
LandWord:= 0 |
15363
0230c4766aa6
make the mask colours more liberal due to possibility that OSX/SDL2 are slightly distorting them
nemo
parents:
15361
diff
changeset
|
92 |
else if (Pixel and AMask > 0) and (Pixel and RMask > 0) and (Pixel and GMask > 0) and (Pixel and BMask > 0) then // whiteish |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
93 |
LandWord:= lfObject |
15363
0230c4766aa6
make the mask colours more liberal due to possibility that OSX/SDL2 are slightly distorting them
nemo
parents:
15361
diff
changeset
|
94 |
else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask = 0) and (Pixel and BMask = 0) then // blackish |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
95 |
begin |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
96 |
LandWord:= lfBasic; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
97 |
disableLandBack:= false |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
98 |
end |
15363
0230c4766aa6
make the mask colours more liberal due to possibility that OSX/SDL2 are slightly distorting them
nemo
parents:
15361
diff
changeset
|
99 |
else if (Pixel and AMask > 0) and (Pixel and RMask > 0) and (Pixel and GMask = 0) and (Pixel and BMask = 0) then // reddish |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
100 |
LandWord:= lfIndestructible |
15363
0230c4766aa6
make the mask colours more liberal due to possibility that OSX/SDL2 are slightly distorting them
nemo
parents:
15361
diff
changeset
|
101 |
else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask = 0) and (Pixel and BMask > 0) then // blueish |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
102 |
LandWord:= lfObject or lfIce |
15363
0230c4766aa6
make the mask colours more liberal due to possibility that OSX/SDL2 are slightly distorting them
nemo
parents:
15361
diff
changeset
|
103 |
else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask > 0) and (Pixel and BMask = 0) then // greenish |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
104 |
LandWord:= lfObject or lfBouncy |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
105 |
end; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
106 |
|
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
107 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
108 |
begin |
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
109 |
BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0, false); |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
110 |
end; |
10015 | 111 |
|
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
112 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); inline; |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
113 |
begin |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
114 |
BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, LandFlags, false); |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
115 |
end; |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
116 |
|
14968 | 117 |
function LerpByte(src, dst: Byte; l: LongWord): LongWord; inline; |
118 |
begin |
|
119 |
LerpByte:= ((255 - l) * src + l * dst) div 255; |
|
120 |
end; |
|
121 |
||
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
122 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word; Flip: boolean); |
1182
e2e13aa055c1
Step 3: Maps are rendered correctly, but without objects yet
unc0rr
parents:
1181
diff
changeset
|
123 |
var p: PLongwordArray; |
14968 | 124 |
pLandColor: PLongWord; |
125 |
alpha, color, landColor, x, y: LongWord; |
|
371 | 126 |
bpp: LongInt; |
184 | 127 |
begin |
128 |
WriteToConsole('Generating collision info... '); |
|
129 |
||
130 |
if SDL_MustLock(Image) then |
|
11507 | 131 |
if SDLCheck(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true) then exit; |
184 | 132 |
|
351 | 133 |
bpp:= Image^.format^.BytesPerPixel; |
11532 | 134 |
if checkFails(bpp = 4, 'Land object should be 32bit', true) then |
135 |
begin |
|
136 |
if SDL_MustLock(Image) then |
|
137 |
SDL_UnlockSurface(Image); |
|
138 |
end; |
|
1182
e2e13aa055c1
Step 3: Maps are rendered correctly, but without objects yet
unc0rr
parents:
1181
diff
changeset
|
139 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
140 |
if Width = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
141 |
Width:= Image^.w; |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
142 |
|
351 | 143 |
p:= Image^.pixels; |
13391 | 144 |
|
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
145 |
for y:= 0 to Pred(Image^.h) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
146 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
147 |
for x:= 0 to Pred(Width) do |
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
148 |
begin |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
149 |
// map image pixels per line backwards if in flip mode |
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
150 |
if Flip then |
14968 | 151 |
color:= p^[Pred(Image^.w) - x] |
152 |
else |
|
153 |
color:= p^[x]; |
|
154 |
||
155 |
if (cReducedQuality and rqBlurryLand) = 0 then |
|
156 |
pLandColor:= @LandPixels[cpY + y, cpX + x] |
|
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
157 |
else |
14968 | 158 |
pLandColor:= @LandPixels[(cpY + y) div 2, (cpX + x) div 2]; |
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
159 |
|
14968 | 160 |
landColor:= pLandColor^; |
161 |
alpha:= (landColor and AMask) shr AShift; |
|
162 |
||
163 |
if ((color and AMask) <> 0) and (alpha <> 255) then |
|
6534
e6cb8a41b5f4
Experiment in eliminating transparent white from LandPixels - I think it messes up on some graphics cards. Noticed a curious white border on a girder in a theme Randy is working on. At the very least it is slightly more efficient in the blit.
nemo
parents:
6492
diff
changeset
|
164 |
begin |
14968 | 165 |
if alpha = 0 then |
166 |
pLandColor^:= color |
|
3595
341e407e3754
partially removing DOWNSCALE ifdef -- only two remain and their removal requires dynamic allocation (btw this breaks low quality mode)
koda
parents:
3524
diff
changeset
|
167 |
else |
14968 | 168 |
pLandColor^:= |
169 |
(LerpByte((color and RMask) shr RShift, (landColor and RMask) shr RShift, alpha) shl RShift) |
|
170 |
or (LerpByte((color and GMask) shr GShift, (landColor and GMask) shr GShift, alpha) shl GShift) |
|
171 |
or (LerpByte((color and BMask) shr BShift, (landColor and BMask) shr BShift, alpha) shl BShift) |
|
172 |
or (LerpByte(alpha, 255, (color and AMask) shr AShift) shl AShift); |
|
3595
341e407e3754
partially removing DOWNSCALE ifdef -- only two remain and their removal requires dynamic allocation (btw this breaks low quality mode)
koda
parents:
3524
diff
changeset
|
173 |
|
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
5832
diff
changeset
|
174 |
end; |
15120 | 175 |
|
176 |
if ((color and AMask) <> 0) and (Land[cpY + y, cpX + x] <= lfAllObjMask) then |
|
177 |
Land[cpY + y, cpX + x]:= lfObject or LandFlags |
|
11006
cb06b7985261
don't keep around those right-side fort files which are just mirror images of left-side forts. generate them at run-time instead. note: inlining changes and deleting files - so consider clean build/install
sheepluva
parents:
10941
diff
changeset
|
178 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
179 |
p:= PLongwordArray(@(p^[Image^.pitch shr 2])) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
180 |
end; |
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
181 |
|
184 | 182 |
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:
6534
diff
changeset
|
183 |
SDL_UnlockSurface(Image); |
184 | 184 |
WriteLnToConsole(msgOK) |
185 |
end; |
|
186 |
||
13391 | 187 |
procedure BlitOverlayAndGenerateCollisionInfo(cpX, cpY: Longword; Image: PSDL_Surface); |
188 |
var p: PLongwordArray; |
|
189 |
pLandColor: PLongWord; |
|
190 |
x, y, alpha, color, landColor: LongWord; |
|
191 |
begin |
|
192 |
WriteToConsole('Generating overlay collision info... '); |
|
193 |
||
194 |
if SDL_MustLock(Image) then |
|
195 |
if SDLCheck(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true) then exit; |
|
196 |
||
197 |
if checkFails(Image^.format^.BytesPerPixel = 4, 'Land object overlay should be 32bit', true) |
|
198 |
and SDL_MustLock(Image) then |
|
199 |
SDL_UnlockSurface(Image); |
|
200 |
||
201 |
p:= Image^.pixels; |
|
202 |
||
203 |
for y:= 0 to Pred(Image^.h) do |
|
204 |
begin |
|
205 |
for x:= 0 to Pred(Image^.w) do |
|
206 |
begin |
|
207 |
color:= p^[x]; |
|
208 |
if (color and AMask) <> 0 then |
|
209 |
begin |
|
210 |
if (cReducedQuality and rqBlurryLand) = 0 then |
|
211 |
pLandColor:= @LandPixels[cpY + y, cpX + x] |
|
212 |
else |
|
213 |
pLandColor:= @LandPixels[(cpY + y) div 2, (cpX + x) div 2]; |
|
214 |
||
215 |
alpha:= (color and AMask) shr AShift; |
|
13858
664935d80668
Fix another pas2c hiccup in uLandObjects
Wuzzy <Wuzzy2@mail.ru>
parents:
13506
diff
changeset
|
216 |
if ((alpha <> $FF) and ((pLandColor^) <> 0)) then |
13391 | 217 |
begin |
218 |
landColor:= pLandColor^; |
|
219 |
color:= |
|
220 |
(LerpByte((landColor and RMask) shr RShift, (color and RMask) shr RShift, alpha) shl RShift) |
|
221 |
or (LerpByte((landColor and GMask) shr GShift, (color and GMask) shr GShift, alpha) shl GShift) |
|
222 |
or (LerpByte((landColor and BMask) shr BShift, (color and BMask) shr BShift, alpha) shl BShift) |
|
223 |
or (LerpByte(alpha, 255, (landColor and AMask) shr AShift) shl AShift) |
|
224 |
end; |
|
225 |
pLandColor^:= color; |
|
226 |
||
227 |
if Land[cpY + y, cpX + x] <= lfAllObjMask then |
|
228 |
Land[cpY + y, cpX + x]:= lfObject |
|
229 |
end; |
|
230 |
end; |
|
231 |
p:= PLongwordArray(@(p^[Image^.pitch shr 2])) |
|
232 |
end; |
|
233 |
||
234 |
if SDL_MustLock(Image) then |
|
235 |
SDL_UnlockSurface(Image); |
|
236 |
WriteLnToConsole(msgOK) |
|
237 |
end; |
|
238 |
||
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
239 |
procedure BlitImageUsingMask(cpX, cpY: Longword; Image, Mask: PSDL_Surface); |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
240 |
var p, mp: PLongwordArray; |
14968 | 241 |
pLandColor: PLongWord; |
242 |
alpha, color, landColor, x, y: Longword; |
|
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
243 |
bpp: LongInt; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
244 |
begin |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
245 |
WriteToConsole('Generating collision info... '); |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
246 |
|
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
247 |
if SDL_MustLock(Image) then |
11507 | 248 |
if SDLCheck(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true) then exit; |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
249 |
|
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
250 |
bpp:= Image^.format^.BytesPerPixel; |
11532 | 251 |
if checkFails(bpp = 4, 'Land object should be 32bit', true) then |
252 |
begin |
|
253 |
if SDL_MustLock(Image) then |
|
254 |
SDL_UnlockSurface(Image); |
|
255 |
end; |
|
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
256 |
|
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
257 |
p:= Image^.pixels; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
258 |
mp:= Mask^.pixels; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
259 |
for y:= 0 to Pred(Image^.h) do |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
260 |
begin |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
261 |
for x:= 0 to Pred(Image^.w) do |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
262 |
begin |
14968 | 263 |
color:= p^[x]; |
264 |
||
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
265 |
if (cReducedQuality and rqBlurryLand) = 0 then |
14968 | 266 |
pLandColor:= @LandPixels[cpY + y, cpX + x] |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
267 |
else |
14968 | 268 |
pLandColor:= @LandPixels[(cpY + y) div 2, (cpX + x) div 2]; |
269 |
||
270 |
landColor:= pLandColor^; |
|
271 |
alpha:= (landColor and AMask) shr AShift; |
|
272 |
||
273 |
if ((color and AMask) <> 0) and (alpha <> 255) then |
|
274 |
begin |
|
275 |
if alpha = 0 then |
|
276 |
pLandColor^:= color |
|
277 |
else |
|
278 |
pLandColor^:= |
|
279 |
(LerpByte((color and RMask) shr RShift, (landColor and RMask) shr RShift, alpha) shl RShift) |
|
280 |
or (LerpByte((color and GMask) shr GShift, (landColor and GMask) shr GShift, alpha) shl GShift) |
|
281 |
or (LerpByte((color and BMask) shr BShift, (landColor and BMask) shr BShift, alpha) shl BShift) |
|
282 |
or (LerpByte(alpha, 255, (color and AMask) shr AShift) shl AShift); |
|
283 |
end; |
|
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
284 |
|
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
285 |
if (Land[cpY + y, cpX + x] <= lfAllObjMask) or (Land[cpY + y, cpX + x] and lfObject <> 0) then |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
286 |
SetLand(Land[cpY + y, cpX + x], mp^[x]); |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
287 |
end; |
14968 | 288 |
|
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
289 |
p:= PLongwordArray(@(p^[Image^.pitch shr 2])); |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
290 |
mp:= PLongwordArray(@(mp^[Mask^.pitch shr 2])) |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
291 |
end; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
292 |
|
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
293 |
if SDL_MustLock(Image) then |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
294 |
SDL_UnlockSurface(Image); |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
295 |
WriteLnToConsole(msgOK) |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
296 |
end; |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
297 |
|
371 | 298 |
procedure AddRect(x1, y1, w1, h1: LongInt); |
184 | 299 |
begin |
351 | 300 |
with Rects^[RectCount] do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
301 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
302 |
x:= x1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
303 |
y:= y1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
304 |
w:= w1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
305 |
h:= h1 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
306 |
end; |
184 | 307 |
inc(RectCount); |
11532 | 308 |
checkFails(RectCount < MaxRects, 'AddRect: overflow', true) |
184 | 309 |
end; |
310 |
||
311 |
procedure InitRects; |
|
312 |
begin |
|
9688 | 313 |
RectCount:= 0; |
314 |
New(Rects) |
|
184 | 315 |
end; |
316 |
||
317 |
procedure FreeRects; |
|
318 |
begin |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
319 |
Dispose(rects) |
184 | 320 |
end; |
321 |
||
371 | 322 |
function CheckIntersect(x1, y1, w1, h1: LongInt): boolean; |
184 | 323 |
var i: Longword; |
2695 | 324 |
res: boolean = false; |
184 | 325 |
begin |
2695 | 326 |
|
184 | 327 |
i:= 0; |
328 |
if RectCount > 0 then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
329 |
repeat |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
330 |
with Rects^[i] do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
331 |
res:= (x < x1 + w1) and (x1 < x + w) and (y < y1 + h1) and (y1 < y + h); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
332 |
inc(i) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
333 |
until (i = RectCount) or (res); |
2695 | 334 |
CheckIntersect:= res; |
184 | 335 |
end; |
336 |
||
6492 | 337 |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
338 |
function CountNonZeroz(x, y, h: LongInt): Longword; |
6492 | 339 |
var i: LongInt; |
340 |
lRes: Longword; |
|
341 |
begin |
|
342 |
lRes:= 0; |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
343 |
for i:= y to Pred(y + h) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
344 |
if Land[i, x] <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
345 |
inc(lRes); |
6492 | 346 |
CountNonZeroz:= lRes; |
347 |
end; |
|
348 |
||
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
349 |
function AddGirder(gX: LongInt; var girSurf: PSDL_Surface): boolean; |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
350 |
var x1, x2, y, k, i, girderHeight: LongInt; |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
351 |
rr: TSDL_Rect; |
2695 | 352 |
bRes: boolean; |
184 | 353 |
begin |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
354 |
if girSurf = nil then |
15382 | 355 |
girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifColorKey or ifIgnoreCaps or ifDigestAlpha); |
12711
20dbb3a03e61
extend land digest to all surfaces that could possibly be loaded into Land[] - i.e. ones that impact sync
nemo
parents:
12593
diff
changeset
|
356 |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
357 |
girderHeight:= girSurf^.h; |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
358 |
|
1792 | 359 |
y:= topY+150; |
184 | 360 |
repeat |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
361 |
inc(y, 24); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
362 |
x1:= gX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
363 |
x2:= gX; |
2376 | 364 |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
13858
diff
changeset
|
365 |
while (x1 > leftX+150) and (CountNonZeroz(x1, y, girderHeight) = 0) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
366 |
dec(x1, 2); |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
367 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
368 |
i:= x1 - 12; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
369 |
repeat |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
370 |
k:= CountNonZeroz(x1, y, girderHeight); |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
371 |
dec(x1, 2) |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
13858
diff
changeset
|
372 |
until (x1 < leftX + 100) or (k = 0) or (k = girderHeight) or (x1 < i); |
2376 | 373 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
374 |
inc(x1, 2); |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
375 |
if k = girderHeight then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
376 |
begin |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
13858
diff
changeset
|
377 |
while (x2 < (rightX - 100)) and (CountNonZeroz(x2, y, girderHeight) = 0) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
378 |
inc(x2, 2); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
379 |
i:= x2 + 12; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
380 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
381 |
inc(x2, 2); |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
382 |
k:= CountNonZeroz(x2, y, girderHeight) |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
13858
diff
changeset
|
383 |
until (x2 >= (rightX-150)) or (k = 0) or (k = girderHeight) or (x2 > i) or (x2 - x1 >= 900); |
8330 | 384 |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
13858
diff
changeset
|
385 |
if (x2 < (rightX - 100)) and (k = girderHeight) and (x2 - x1 > 200) and (x2 - x1 < 900) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
386 |
and (not CheckIntersect(x1 - 32, y - 64, x2 - x1 + 64, 144)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
387 |
break; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
388 |
end; |
184 | 389 |
x1:= 0; |
1753 | 390 |
until y > (LAND_HEIGHT-125); |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
391 |
|
184 | 392 |
if x1 > 0 then |
2695 | 393 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
394 |
bRes:= true; |
2376 | 395 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
396 |
rr.x:= x1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
397 |
while rr.x < x2 do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
398 |
begin |
10015 | 399 |
if cIce then |
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
400 |
BlitImageAndGenerateCollisionInfo(rr.x, y, min(x2 - rr.x, girSurf^.w), girSurf, lfIce) |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6081
diff
changeset
|
401 |
else |
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
402 |
BlitImageAndGenerateCollisionInfo(rr.x, y, min(x2 - rr.x, girSurf^.w), girSurf); |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
403 |
inc(rr.x, girSurf^.w); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
404 |
end; |
2376 | 405 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
406 |
AddRect(x1 - 8, y - 32, x2 - x1 + 16, 80); |
2695 | 407 |
end |
408 |
else bRes:= false; |
|
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
409 |
|
2695 | 410 |
AddGirder:= bRes; |
184 | 411 |
end; |
412 |
||
413 |
function CheckLand(rect: TSDL_Rect; dX, dY, Color: Longword): boolean; |
|
3524
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
414 |
var tmpx, tmpx2, tmpy, tmpy2, bx, by: LongInt; |
2695 | 415 |
bRes: boolean = true; |
184 | 416 |
begin |
417 |
inc(rect.x, dX); |
|
418 |
inc(rect.y, dY); |
|
3521
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
419 |
bx:= rect.x + rect.w; |
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
420 |
by:= rect.y + rect.h; |
184 | 421 |
{$WARNINGS OFF} |
3521
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
422 |
tmpx:= rect.x; |
3524
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
423 |
tmpx2:= bx; |
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
424 |
while (tmpx <= bx - rect.w div 2 - 1) and bRes do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
425 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
426 |
bRes:= ((rect.y and LAND_HEIGHT_MASK) = 0) and ((by and LAND_HEIGHT_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
427 |
and ((tmpx and LAND_WIDTH_MASK) = 0) and ((tmpx2 and LAND_WIDTH_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
428 |
and (Land[rect.y, tmpx] = Color) and (Land[by, tmpx] = Color) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
429 |
and (Land[rect.y, tmpx2] = Color) and (Land[by, tmpx2] = Color); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
430 |
inc(tmpx); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
431 |
dec(tmpx2) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
432 |
end; |
3524
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
433 |
tmpy:= rect.y+1; |
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
434 |
tmpy2:= by-1; |
8d0783d2a0ff
This reduces CheckLand ~5.5% on average over prior making the overall reduction ~77.4% instead of ~81.9%. It does skip centre pixel in odd w/h, but that really shouldn't matter much in this case. Can alter if any objects are noticeably off.
nemo
parents:
3521
diff
changeset
|
435 |
while (tmpy <= by - rect.h div 2 - 1) and bRes do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
436 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
437 |
bRes:= ((tmpy and LAND_HEIGHT_MASK) = 0) and ((tmpy2 and LAND_HEIGHT_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
438 |
and ((rect.x and LAND_WIDTH_MASK) = 0) and ((bx and LAND_WIDTH_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
439 |
and (Land[tmpy, rect.x] = Color) and (Land[tmpy, bx] = Color) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
440 |
and (Land[tmpy2, rect.x] = Color) and (Land[tmpy2, bx] = Color); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
441 |
inc(tmpy); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
442 |
dec(tmpy2) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
443 |
end; |
184 | 444 |
{$WARNINGS ON} |
2695 | 445 |
CheckLand:= bRes; |
184 | 446 |
end; |
447 |
||
13391 | 448 |
function CheckLandAny(rect: TSDL_Rect; dX, dY, LandType: Longword): boolean; |
449 |
var tmpx, tmpy, bx, by: LongInt; |
|
450 |
begin |
|
451 |
inc(rect.x, dX); |
|
452 |
inc(rect.y, dY); |
|
453 |
bx:= rect.x + rect.w - 1; |
|
454 |
by:= rect.y + rect.h - 1; |
|
455 |
CheckLandAny:= false; |
|
456 |
||
457 |
if (((rect.x and LAND_WIDTH_MASK) or (bx and LAND_WIDTH_MASK) or |
|
458 |
(rect.y and LAND_HEIGHT_MASK) or (by and LAND_HEIGHT_MASK)) = 0) then |
|
459 |
begin |
|
460 |
for tmpx := rect.x to bx do |
|
461 |
begin |
|
462 |
if (((Land[rect.y, tmpx] and LandType) or (Land[by, tmpx] and LandType)) <> 0) then |
|
463 |
begin |
|
464 |
CheckLandAny := true; |
|
465 |
exit; |
|
466 |
end |
|
467 |
end; |
|
468 |
for tmpy := rect.y to by do |
|
469 |
begin |
|
470 |
if (((Land[tmpy, rect.x] and LandType) or (Land[tmpy, bx] and LandType)) <> 0) then |
|
471 |
begin |
|
472 |
CheckLandAny := true; |
|
473 |
exit; |
|
474 |
end |
|
475 |
end; |
|
476 |
end; |
|
477 |
end; |
|
478 |
||
184 | 479 |
function CheckCanPlace(x, y: Longword; var Obj: TThemeObject): boolean; |
480 |
var i: Longword; |
|
13391 | 481 |
bRes, anchored: boolean; |
482 |
overlayP1, overlayP2: TPoint; |
|
184 | 483 |
begin |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
484 |
with Obj do begin |
2695 | 485 |
bRes:= true; |
13391 | 486 |
i:= 0; |
487 |
while bRes and (i < overlaycnt) do |
|
488 |
begin |
|
489 |
overlayP1.x:= overlays[i].Position.x + x; |
|
490 |
overlayP1.y:= overlays[i].Position.y + y; |
|
491 |
overlayP2.x:= overlayP1.x + overlays[i].Width - 1; |
|
492 |
overlayP2.y:= overlayP1.y + overlays[i].Height - 1; |
|
493 |
bRes:= (((LAND_WIDTH_MASK and overlayP1.x) or (LAND_HEIGHT_MASK and overlayP1.y) or |
|
494 |
(LAND_WIDTH_MASK and overlayP2.x) or (LAND_HEIGHT_MASK and overlayP2.y)) = 0) |
|
495 |
and (not CheckIntersect(overlayP1.x, overlayP1.y, overlays[i].Width, overlays[i].Height)); |
|
496 |
inc(i) |
|
497 |
end; |
|
498 |
||
499 |
i:= 0; |
|
500 |
while bRes and (i < inrectcnt) do |
|
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
501 |
begin |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
502 |
bRes:= CheckLand(inland[i], x, y, lfBasic); |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
503 |
inc(i) |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
504 |
end; |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
505 |
|
13391 | 506 |
i:= 0; |
507 |
while bRes and (i < outrectcnt) do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
508 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
509 |
bRes:= CheckLand(outland[i], x, y, 0); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
510 |
inc(i) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
511 |
end; |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
512 |
|
2695 | 513 |
if bRes then |
13391 | 514 |
begin |
515 |
anchored:= anchorcnt = 0; |
|
15002 | 516 |
i:= 0; |
517 |
while i < anchorcnt do |
|
13391 | 518 |
begin |
519 |
anchored := CheckLandAny(anchors[i], x, y, lfLandMask); |
|
520 |
if anchored then break; |
|
15002 | 521 |
inc(i); |
13391 | 522 |
end; |
523 |
bRes:= anchored; |
|
524 |
end; |
|
525 |
||
526 |
if bRes then |
|
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
527 |
bRes:= not CheckIntersect(x, y, Width, Height); |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
528 |
|
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
529 |
CheckCanPlace:= bRes; |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
530 |
end |
184 | 531 |
end; |
532 |
||
9688 | 533 |
function TryPut(var Obj: TThemeObject): boolean; |
184 | 534 |
const MaxPointsIndex = 2047; |
535 |
var x, y: Longword; |
|
536 |
ar: array[0..MaxPointsIndex] of TPoint; |
|
13391 | 537 |
cnt, i, ii: Longword; |
2695 | 538 |
bRes: boolean; |
184 | 539 |
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:
6986
diff
changeset
|
540 |
TryPut:= false; |
184 | 541 |
cnt:= 0; |
542 |
with Obj do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
543 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
544 |
if Maxcnt = 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:
6986
diff
changeset
|
545 |
exit; |
15163
d97f0b96e45f
Restrict object placement between leftX and rightX
Wuzzy <Wuzzy2@mail.ru>
parents:
15120
diff
changeset
|
546 |
x:= leftX; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
547 |
repeat |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
548 |
y:= topY+32; // leave room for a hedgie to teleport in |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
549 |
repeat |
12168
666e18b1ca32
Allow to place theme objects on water
Wuzzy <almikes@aol.com>
parents:
12097
diff
changeset
|
550 |
|
13391 | 551 |
if (inrectcnt > 0) and (inland[0].x = 0) and (inland[0].y = 0) and (inland[0].w = 0) and (inland[0].h = 0) then |
12168
666e18b1ca32
Allow to place theme objects on water
Wuzzy <almikes@aol.com>
parents:
12097
diff
changeset
|
552 |
y := LAND_HEIGHT - Height; |
666e18b1ca32
Allow to place theme objects on water
Wuzzy <almikes@aol.com>
parents:
12097
diff
changeset
|
553 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
554 |
if CheckCanPlace(x, y, Obj) then |
184 | 555 |
begin |
556 |
ar[cnt].x:= x; |
|
557 |
ar[cnt].y:= y; |
|
9688 | 558 |
if cnt >= MaxPointsIndex then // buffer is full, do not check the rest land |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
559 |
begin |
10490 | 560 |
y:= LAND_HEIGHT; |
561 |
x:= LAND_WIDTH; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
562 |
end |
9688 | 563 |
else inc(cnt); |
184 | 564 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
565 |
inc(y, 3); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
566 |
until y >= LAND_HEIGHT - Height; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
567 |
inc(x, getrandom(6) + 3) |
15163
d97f0b96e45f
Restrict object placement between leftX and rightX
Wuzzy <Wuzzy2@mail.ru>
parents:
15120
diff
changeset
|
568 |
until x >= rightX - Width; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
569 |
bRes:= cnt <> 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
570 |
if bRes then |
184 | 571 |
begin |
572 |
i:= getrandom(cnt); |
|
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
573 |
if Obj.Mask <> nil then |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
574 |
BlitImageUsingMask(ar[i].x, ar[i].y, Obj.Surf, Obj.Mask) |
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8751
diff
changeset
|
575 |
else BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf); |
184 | 576 |
AddRect(ar[i].x, ar[i].y, Width, Height); |
13391 | 577 |
|
578 |
ii:= 0; |
|
579 |
while ii < overlaycnt do |
|
580 |
begin |
|
581 |
BlitOverlayAndGenerateCollisionInfo( |
|
582 |
ar[i].x + overlays[ii].Position.X, |
|
583 |
ar[i].y + overlays[ii].Position.Y, overlays[ii].Surf); |
|
584 |
AddRect(ar[i].x + overlays[ii].Position.X, |
|
585 |
ar[i].y + overlays[ii].Position.Y, |
|
586 |
Width, Height); |
|
587 |
inc(ii); |
|
588 |
end; |
|
184 | 589 |
dec(Maxcnt) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
590 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
591 |
else Maxcnt:= 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
592 |
end; |
2695 | 593 |
TryPut:= bRes; |
184 | 594 |
end; |
595 |
||
9688 | 596 |
function TryPut2(var Obj: TSprayObject; Surface: PSDL_Surface): boolean; |
184 | 597 |
const MaxPointsIndex = 8095; |
15177
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
598 |
var x, y, xStart, yStart: Longword; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
599 |
xWraps, yWraps: Byte; |
184 | 600 |
ar: array[0..MaxPointsIndex] of TPoint; |
601 |
cnt, i: Longword; |
|
602 |
r: TSDL_Rect; |
|
2695 | 603 |
bRes: boolean; |
184 | 604 |
begin |
9688 | 605 |
TryPut2:= false; |
184 | 606 |
cnt:= 0; |
607 |
with Obj do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
608 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
609 |
if Maxcnt = 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:
6986
diff
changeset
|
610 |
exit; |
15177
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
611 |
xWraps:= 0; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
612 |
yWraps:= 0; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
613 |
// Start at random coordinates |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
614 |
xStart:= getrandom(LAND_WIDTH - Width); |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
615 |
yStart:= 8 + getrandom(LAND_HEIGHT - Height - 16); |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
616 |
x:= xStart; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
617 |
y:= yStart; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
618 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
619 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
620 |
r.w:= Width; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
621 |
r.h:= Height + 16; |
15177
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
622 |
// Then iterate through the whole map; this requires we wrap one time per axis |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
623 |
repeat |
15177
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
624 |
yWraps:= 0; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
625 |
repeat |
3519 | 626 |
if CheckLand(r, x, y - 8, lfBasic) |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6305
diff
changeset
|
627 |
and (not CheckIntersect(x, y, Width, Height)) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
628 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
629 |
ar[cnt].x:= x; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
630 |
ar[cnt].y:= y; |
9688 | 631 |
if cnt >= MaxPointsIndex then // buffer is full, do not check the rest land |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
632 |
begin |
9688 | 633 |
y:= $FF000000; |
634 |
x:= $FF000000; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
635 |
end |
9688 | 636 |
else inc(cnt); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
637 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
638 |
inc(y, 12); |
15177
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
639 |
if (y >= LAND_HEIGHT - Height - 8) or ((yWraps > 0) and (y >= yStart)) then |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
640 |
begin |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
641 |
inc(yWraps); |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
642 |
y:= 8; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
643 |
end; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
644 |
until yWraps > 1; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
645 |
inc(x, getrandom(12) + 12); |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
646 |
if (x >= LAND_WIDTH - Width) or ((xWraps > 0) and (x >= xStart)) then |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
647 |
begin |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
648 |
inc(xWraps); |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
649 |
x:= 0; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
650 |
end; |
84e98f0f7f7b
Fix sprays being biased to the left on huge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
15163
diff
changeset
|
651 |
until xWraps > 1; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
652 |
bRes:= cnt <> 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
653 |
if bRes then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
654 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
655 |
i:= getrandom(cnt); |
12842 | 656 |
copyToXY(Obj.Surf, Surface, ar[i].X, ar[i].Y); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
657 |
AddRect(ar[i].x - 32, ar[i].y - 32, Width + 64, Height + 64); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
658 |
dec(Maxcnt) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
659 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
660 |
else Maxcnt:= 0 |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
661 |
end; |
9688 | 662 |
TryPut2:= bRes; |
184 | 663 |
end; |
664 |
||
6492 | 665 |
|
666 |
procedure CheckRect(Width, Height, x, y, w, h: LongWord); |
|
667 |
begin |
|
8330 | 668 |
if (x + w > Width) then |
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
669 |
OutError('Broken theme. Object''s rectangle exceeds image: x + w (' + inttostr(x) + ' + ' + inttostr(w) + ') > Width (' + inttostr(Width) + ')', true); |
8330 | 670 |
if (y + h > Height) then |
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
671 |
OutError('Broken theme. Object''s rectangle exceeds image: y + h (' + inttostr(y) + ' + ' + inttostr(h) + ') > Height (' + inttostr(Height) + ')', true); |
6492 | 672 |
end; |
673 |
||
13391 | 674 |
procedure ReadRect(var rect: TSDL_Rect; var s: ShortString); |
675 |
var i: LongInt; |
|
676 |
begin |
|
677 |
with rect do |
|
678 |
begin |
|
679 |
i:= Pos(',', s); |
|
680 |
x:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
681 |
Delete(s, 1, i); |
|
682 |
i:= Pos(',', s); |
|
683 |
y:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
684 |
Delete(s, 1, i); |
|
685 |
i:= Pos(',', s); |
|
686 |
w:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
687 |
Delete(s, 1, i); |
|
688 |
i:= Pos(',', s); |
|
689 |
if i = 0 then i:= Succ(Length(S)); |
|
690 |
h:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
691 |
Delete(s, 1, i); |
|
692 |
end; |
|
693 |
end; |
|
694 |
||
695 |
||
696 |
||
697 |
procedure ReadOverlay(var overlay: TThemeObjectOverlay; var s: ShortString); |
|
698 |
var i: LongInt; |
|
699 |
begin |
|
700 |
with overlay do |
|
701 |
begin |
|
702 |
i:= Pos(',', s); |
|
703 |
Position.X:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
704 |
Delete(s, 1, i); |
|
705 |
i:= Pos(',', s); |
|
706 |
Position.Y:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
707 |
Delete(s, 1, i); |
|
708 |
i:= Pos(',', s); |
|
709 |
if i = 0 then i:= Succ(Length(S)); |
|
15382 | 710 |
Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifColorKey or ifIgnoreCaps or ifCritical or ifDigestAlpha ); |
13391 | 711 |
Width:= Surf^.w; |
712 |
Height:= Surf^.h; |
|
713 |
Delete(s, 1, i); |
|
714 |
end; |
|
715 |
end; |
|
716 |
||
184 | 717 |
procedure ReadThemeInfo(var ThemeObjects: TThemeObjects; var SprayObjects: TSprayObjects); |
13391 | 718 |
var s, key, nameRef: shortstring; |
8028 | 719 |
f: PFSFile; |
13401
40235ccf8d6d
Remove unused variable in uLandObjects
Wuzzy <Wuzzy2@mail.ru>
parents:
13397
diff
changeset
|
720 |
i: LongInt; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
721 |
ii, t: Longword; |
5832
f730c8a9777b
Remove some unused variables and options.inc which uFloat doesn't use, probably should never use, and was getting in the way of my testcase - but most importantly, remove the inline on hwSqrt which was causing very bad math on my compiler/machine. We may have to remove more inlining. A pity.
nemo
parents:
5689
diff
changeset
|
722 |
c2: TSDL_Color; |
184 | 723 |
begin |
2671
7e0f88013fe8
smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2647
diff
changeset
|
724 |
|
7e0f88013fe8
smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2647
diff
changeset
|
725 |
AddProgress; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
726 |
// Set default water greyscale values |
6982 | 727 |
if GrayScale then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
728 |
begin |
10325 | 729 |
for i:= Low(SDWaterColorArray) to High(SDWaterColorArray) do |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
730 |
begin |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
731 |
t:= round(SDWaterColorArray[i].r * RGB_LUMINANCE_RED + SDWaterColorArray[i].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[i].b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
732 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
733 |
t:= 255; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
734 |
SDWaterColorArray[i].r:= t; |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
735 |
SDWaterColorArray[i].g:= t; |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
736 |
SDWaterColorArray[i].b:= t |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
737 |
end; |
10325 | 738 |
for i:= Low(WaterColorArray) to High(WaterColorArray) do |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
739 |
begin |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
740 |
t:= round(WaterColorArray[i].r * RGB_LUMINANCE_RED + WaterColorArray[i].g * RGB_LUMINANCE_GREEN + WaterColorArray[i].b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
741 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
742 |
t:= 255; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
743 |
WaterColorArray[i].r:= t; |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
744 |
WaterColorArray[i].g:= t; |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
745 |
WaterColorArray[i].b:= t |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
746 |
end |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6303
diff
changeset
|
747 |
end; |
2671
7e0f88013fe8
smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2647
diff
changeset
|
748 |
|
8025 | 749 |
s:= cPathz[ptCurrTheme] + '/' + cThemeCFGFilename; |
184 | 750 |
WriteLnToConsole('Reading objects info...'); |
8028 | 751 |
f:= pfsOpenRead(s); |
13484
480ea997036b
Send proper failure error message when image loading has failed
Wuzzy <Wuzzy2@mail.ru>
parents:
13401
diff
changeset
|
752 |
if (f = nil) then |
480ea997036b
Send proper failure error message when image loading has failed
Wuzzy <Wuzzy2@mail.ru>
parents:
13401
diff
changeset
|
753 |
OutError('Error loading theme. File could not be opened: ' + s, true); |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
754 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
755 |
ThemeObjects.Count:= 0; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
756 |
SprayObjects.Count:= 0; |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
757 |
|
11539 | 758 |
while (not pfsEOF(f)) and allOK do |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
759 |
begin |
8028 | 760 |
pfsReadLn(f, s); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
761 |
if Length(s) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
762 |
continue; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
763 |
if s[1] = ';' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
764 |
continue; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
765 |
|
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
766 |
i:= Pos('=', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
767 |
key:= Trim(Copy(s, 1, Pred(i))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
768 |
Delete(s, 1, i); |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
769 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
770 |
if key = 'sky' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
771 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
772 |
i:= Pos(',', s); |
5654 | 773 |
SkyColor.r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
774 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
775 |
i:= Pos(',', s); |
5654 | 776 |
SkyColor.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
777 |
Delete(s, 1, i); |
5654 | 778 |
SkyColor.b:= StrToInt(Trim(s)); |
6982 | 779 |
if GrayScale |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
780 |
then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
781 |
begin |
5654 | 782 |
t:= round(SkyColor.r * RGB_LUMINANCE_RED + SkyColor.g * RGB_LUMINANCE_GREEN + SkyColor.b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
783 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
784 |
t:= 255; |
5654 | 785 |
SkyColor.r:= t; |
786 |
SkyColor.g:= t; |
|
787 |
SkyColor.b:= t |
|
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
788 |
end; |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
789 |
SetSkyColor(SkyColor.r / 255, SkyColor.g / 255, SkyColor.b / 255); |
5689
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
790 |
SDSkyColor.r:= SkyColor.r; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
791 |
SDSkyColor.g:= SkyColor.g; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
792 |
SDSkyColor.b:= SkyColor.b; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
793 |
end |
11895
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
794 |
else if key = 'sd-tint' then |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
795 |
begin |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
796 |
i:= Pos(',', s); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
797 |
SDTint.r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
798 |
Delete(s, 1, i); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
799 |
i:= Pos(',', s); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
800 |
SDTint.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
801 |
Delete(s, 1, i); |
12097
ebe87b6ed182
add alpha for sd-tint, since CopherNeue thinks the textures might need fading
nemo
parents:
11895
diff
changeset
|
802 |
i:= Pos(',', s); |
ebe87b6ed182
add alpha for sd-tint, since CopherNeue thinks the textures might need fading
nemo
parents:
11895
diff
changeset
|
803 |
SDTint.b:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
ebe87b6ed182
add alpha for sd-tint, since CopherNeue thinks the textures might need fading
nemo
parents:
11895
diff
changeset
|
804 |
Delete(s, 1, i); |
ebe87b6ed182
add alpha for sd-tint, since CopherNeue thinks the textures might need fading
nemo
parents:
11895
diff
changeset
|
805 |
SDTint.a:= StrToInt(Trim(s)); |
11895
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
806 |
if GrayScale |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
807 |
then |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
808 |
begin |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
809 |
t:= round(SDTint.r * RGB_LUMINANCE_RED + SDTint.g * RGB_LUMINANCE_GREEN + SDTint.b * RGB_LUMINANCE_BLUE); |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
810 |
if t > 255 then |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
811 |
t:= 255; |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
812 |
SDTint.r:= t; |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
813 |
SDTint.g:= t; |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
814 |
SDTint.b:= t |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
815 |
end; |
19cb0de79287
Make sd-tint a theme variable so cophernue can tweak his sky tinting
nemo
parents:
11871
diff
changeset
|
816 |
end |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
817 |
else if key = 'border' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
818 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
819 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
820 |
c2.r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
821 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
822 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
823 |
c2.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
824 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
825 |
c2.b:= StrToInt(Trim(s)); |
6982 | 826 |
if GrayScale then |
6303 | 827 |
begin |
828 |
t:= round(SkyColor.r * RGB_LUMINANCE_RED + SkyColor.g * RGB_LUMINANCE_GREEN + SkyColor.b * RGB_LUMINANCE_BLUE); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
829 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
830 |
t:= 255; |
6303 | 831 |
c2.r:= t; |
832 |
c2.g:= t; |
|
833 |
c2.b:= t |
|
834 |
end; |
|
10877 | 835 |
ExplosionBorderColorR:= c2.r; |
836 |
ExplosionBorderColorG:= c2.g; |
|
837 |
ExplosionBorderColorB:= c2.b; |
|
10878 | 838 |
ExplosionBorderColorNoA:= |
839 |
(c2.r shl RShift) or (c2.g shl GShift) or (c2.b shl BShift); |
|
840 |
ExplosionBorderColor:= ExplosionBorderColorNoA or AMask; |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
841 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
842 |
else if key = 'water-top' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
843 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
844 |
i:= Pos(',', s); |
10325 | 845 |
WaterColorArray[1].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
846 |
Delete(s, 1, i); |
|
847 |
i:= Pos(',', s); |
|
848 |
WaterColorArray[1].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
849 |
Delete(s, 1, i); |
|
850 |
WaterColorArray[1].b:= StrToInt(Trim(s)); |
|
851 |
WaterColorArray[1].a := 255; |
|
852 |
if GrayScale then |
|
853 |
begin |
|
854 |
t:= round(WaterColorArray[0].r * RGB_LUMINANCE_RED + WaterColorArray[0].g * RGB_LUMINANCE_GREEN + WaterColorArray[0].b * RGB_LUMINANCE_BLUE); |
|
855 |
if t > 255 then |
|
856 |
t:= 255; |
|
857 |
WaterColorArray[1].r:= t; |
|
858 |
WaterColorArray[1].g:= t; |
|
859 |
WaterColorArray[1].b:= t |
|
860 |
end; |
|
861 |
WaterColorArray[3]:= WaterColorArray[1]; |
|
862 |
WaterColorArray[5]:= WaterColorArray[1]; |
|
863 |
WaterColorArray[7]:= WaterColorArray[1]; |
|
864 |
end |
|
865 |
else if key = 'water-bottom' then |
|
866 |
begin |
|
867 |
i:= Pos(',', s); |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
868 |
WaterColorArray[0].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
869 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
870 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
871 |
WaterColorArray[0].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
872 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
873 |
WaterColorArray[0].b:= StrToInt(Trim(s)); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
874 |
WaterColorArray[0].a := 255; |
6982 | 875 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
876 |
begin |
10325 | 877 |
t:= round(WaterColorArray[2].r * RGB_LUMINANCE_RED + WaterColorArray[2].g * RGB_LUMINANCE_GREEN + WaterColorArray[2].b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
878 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
879 |
t:= 255; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
880 |
WaterColorArray[0].r:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
881 |
WaterColorArray[0].g:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
882 |
WaterColorArray[0].b:= t |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
883 |
end; |
10325 | 884 |
WaterColorArray[2]:= WaterColorArray[0]; |
885 |
WaterColorArray[4]:= WaterColorArray[0]; |
|
886 |
WaterColorArray[6]:= WaterColorArray[0]; |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
887 |
end |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
888 |
else if key = 'water-opacity' then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
889 |
begin |
6982 | 890 |
WaterOpacity:= StrToInt(Trim(s)); |
891 |
SDWaterOpacity:= WaterOpacity |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
892 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
893 |
else if key = 'music' then |
10254 | 894 |
MusicFN:= Trim(s) |
895 |
else if key = 'sd-music' then |
|
896 |
SDMusicFN:= Trim(s) |
|
12915 | 897 |
else if key = 'fallback-music' then |
898 |
FallbackMusicFN:= Trim(s) |
|
899 |
else if key = 'fallback-sd-music' then |
|
900 |
FallbackSDMusicFN:= Trim(s) |
|
4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4782
diff
changeset
|
901 |
else if key = 'clouds' then |
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4782
diff
changeset
|
902 |
begin |
7543
a0dc770538e1
Poor visual gear value in theme now bears little resemblance to the number of gears actually spawned. But, it certainly shouldn't be related to LAND_WIDTH.
nemo
parents:
7069
diff
changeset
|
903 |
cCloudsNumber:= Word(StrToInt(Trim(s))) * cScreenSpace div 4096; |
4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4782
diff
changeset
|
904 |
cSDCloudsNumber:= cCloudsNumber |
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4782
diff
changeset
|
905 |
end |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
906 |
else if key = 'object' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
907 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
908 |
inc(ThemeObjects.Count); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
909 |
with ThemeObjects.objs[Pred(ThemeObjects.Count)] do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
910 |
begin |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
911 |
i:= Pos(',', s); |
13391 | 912 |
Name:= Trim(Copy(s, 1, Pred(i))); |
15382 | 913 |
|
914 |
Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifColorKey or ifIgnoreCaps or ifDigestAll); |
|
915 |
if Mask = nil then |
|
916 |
Surf:= LoadDataImage(ptCurrTheme, Name, ifColorKey or ifIgnoreCaps or ifCritical or ifDigestAlpha) |
|
917 |
else |
|
918 |
Surf:= LoadDataImage(ptCurrTheme, Name, ifColorKey or ifIgnoreCaps or ifCritical); |
|
919 |
||
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
920 |
Width:= Surf^.w; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
921 |
Height:= Surf^.h; |
15382 | 922 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
923 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
924 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
925 |
Maxcnt:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
926 |
Delete(s, 1, i); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
927 |
if (Maxcnt < 1) or (Maxcnt > MAXTHEMEOBJECTS) then |
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
928 |
OutError('Broken theme. Object''s max. count should be between 1 and '+ inttostr(MAXTHEMEOBJECTS) +' (it was '+ inttostr(Maxcnt) +').', true); |
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
929 |
|
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
930 |
inrectcnt := 0; |
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
931 |
|
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
932 |
for ii := 1 to Length(S) do |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
933 |
if S[ii] = ',' then |
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
934 |
inc(inrectcnt); |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
935 |
|
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
936 |
if inrectcnt mod 2 = 0 then |
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
937 |
inrectcnt := 1 |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
938 |
else begin |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
939 |
i:= Pos(',', s); |
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
940 |
inrectcnt:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
941 |
Delete(s, 1, i); |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
942 |
end; |
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
943 |
|
13391 | 944 |
if inrectcnt > MAXOBJECTRECTS then |
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
945 |
OutError('Broken theme. Object''s inland rectangle count should be no more than '+ inttostr(MAXOBJECTRECTS) +' (it was '+ inttostr(inrectcnt) +').', true); |
13391 | 946 |
|
947 |
for ii:= 0 to Pred(inrectcnt) do |
|
948 |
ReadRect(inland[ii], s); |
|
11870
b801ff99e52c
support for multiple inland rectangles [reviewed, cleaned up and committed by sheepluva]
KoBeWi <kobewi4e@gmail.com>
parents:
11824
diff
changeset
|
949 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
950 |
i:= Pos(',', s); |
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
951 |
outrectcnt:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
952 |
Delete(s, 1, i); |
13391 | 953 |
|
954 |
if outrectcnt > MAXOBJECTRECTS then |
|
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
955 |
OutError('Broken theme. Object''s outland rectangle count should be no more than '+ inttostr(MAXOBJECTRECTS) +' (it was '+ inttostr(outrectcnt) +').', true); |
11871
9e0b20330d05
rename variables for better code-readability and fix indentation
sheepluva
parents:
11870
diff
changeset
|
956 |
|
13391 | 957 |
for ii:= 0 to Pred(outrectcnt) do |
958 |
ReadRect(outland[ii], s); |
|
959 |
end; |
|
960 |
end |
|
961 |
else if key = 'anchors' then |
|
962 |
begin |
|
963 |
i:= Pos(',', s); |
|
964 |
nameRef:= Trim(Copy(s, 1, Pred(i))); |
|
965 |
for ii:= 0 to Pred(ThemeObjects.Count) do |
|
966 |
if ThemeObjects.objs[ii].Name = nameRef then with ThemeObjects.objs[ii] do |
|
967 |
begin |
|
968 |
if anchorcnt <> 0 then |
|
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
969 |
OutError('Broken theme. Duplicate anchors declaration for object ' + nameRef, true); |
13391 | 970 |
Delete(s, 1, i); |
971 |
i:= Pos(',', s); |
|
972 |
anchorcnt:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
973 |
Delete(s, 1, i); |
|
974 |
if anchorcnt > MAXOBJECTRECTS then |
|
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
975 |
OutError('Broken theme. Object''s anchor rectangle count should be no more than '+ inttostr(MAXOBJECTRECTS) +' (it was '+ inttostr(anchorcnt) +').', true); |
13391 | 976 |
for t:= 0 to Pred(anchorcnt) do |
977 |
ReadRect(anchors[t], s); |
|
978 |
break |
|
979 |
end; |
|
980 |
end |
|
981 |
else if key = 'overlays' then |
|
982 |
begin |
|
983 |
i:= Pos(',', s); |
|
984 |
nameRef:= Trim(Copy(s, 1, Pred(i))); |
|
985 |
for ii:= 0 to Pred(ThemeObjects.Count) do |
|
986 |
if ThemeObjects.objs[ii].Name = nameRef then with ThemeObjects.objs[ii] do |
|
987 |
begin |
|
988 |
if overlaycnt <> 0 then |
|
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
989 |
OutError('Broken theme. Duplicate overlays declaration for object ' + nameRef, true); |
13391 | 990 |
Delete(s, 1, i); |
991 |
i:= Pos(',', s); |
|
992 |
overlaycnt:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
993 |
Delete(s, 1, i); |
|
994 |
if overlaycnt > MAXOBJECTRECTS then |
|
13506
bdac56fb6f1a
Clarify/rewrite a few OutError messages
Wuzzy <Wuzzy2@mail.ru>
parents:
13484
diff
changeset
|
995 |
OutError('Broken theme. Object''s overlay count should be no more than '+ inttostr(MAXOBJECTRECTS) +' (it was '+ inttostr(overlaycnt) +').', true); |
13391 | 996 |
for t:= 0 to Pred(overlaycnt) do |
997 |
ReadOverlay(overlays[t], s); |
|
998 |
break |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
999 |
end; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1000 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1001 |
else if key = 'spray' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1002 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1003 |
inc(SprayObjects.Count); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1004 |
with SprayObjects.objs[Pred(SprayObjects.Count)] do |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1005 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1006 |
i:= Pos(',', s); |
12593 | 1007 |
Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifAlpha or ifIgnoreCaps); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1008 |
Width:= Surf^.w; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1009 |
Height:= Surf^.h; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1010 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1011 |
Maxcnt:= StrToInt(Trim(s)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1012 |
end; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1013 |
end |
12189 | 1014 |
else if key = 'water-animation' then |
1015 |
begin |
|
1016 |
i:= Pos(',', s); |
|
1017 |
watFrames:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
1018 |
Delete(s, 1, i); |
|
1019 |
i:= Pos(',', s); |
|
1020 |
watFrameTicks:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
1021 |
Delete(s, 1, i); |
|
12190 | 1022 |
watMove:= StrToInt(Trim(s)); |
12189 | 1023 |
end |
1024 |
else if key = 'sd-water-animation' then |
|
1025 |
begin |
|
1026 |
i:= Pos(',', s); |
|
1027 |
watSDFrames:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
1028 |
Delete(s, 1, i); |
|
1029 |
i:= Pos(',', s); |
|
1030 |
watSDFrameTicks:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
1031 |
Delete(s, 1, i); |
|
12190 | 1032 |
watSDMove:= StrToInt(Trim(s)); |
12189 | 1033 |
end |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1034 |
else if key = 'flakes' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1035 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1036 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1037 |
vobCount:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1038 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1039 |
if vobCount > 0 then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1040 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1041 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1042 |
vobFramesCount:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1043 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1044 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1045 |
vobFrameTicks:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1046 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1047 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1048 |
vobVelocity:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1049 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1050 |
vobFallSpeed:= StrToInt(Trim(s)); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1051 |
end; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1052 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1053 |
else if key = 'flatten-flakes' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1054 |
cFlattenFlakes:= true |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1055 |
else if key = 'flatten-clouds' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1056 |
cFlattenClouds:= true |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
1057 |
else if key = 'ice' then |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
1058 |
cIce:= true |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
1059 |
else if key = 'snow' then |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
1060 |
cSnow:= true |
14965 | 1061 |
else if key = 'rope-step' then |
15048 | 1062 |
cRopeNodeStep:= max(1, StrToInt(s)) |
15045 | 1063 |
else if key = 'rope-layers' then |
1064 |
cRopeLayers:= max(1, min(MAXROPELAYERS, StrToInt(s))) |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1065 |
else if key = 'sd-water-top' then |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1066 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1067 |
i:= Pos(',', s); |
10325 | 1068 |
SDWaterColorArray[1].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
1069 |
Delete(s, 1, i); |
|
1070 |
i:= Pos(',', s); |
|
1071 |
SDWaterColorArray[1].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
1072 |
Delete(s, 1, i); |
|
1073 |
SDWaterColorArray[1].b:= StrToInt(Trim(s)); |
|
1074 |
SDWaterColorArray[1].a := 255; |
|
1075 |
if GrayScale then |
|
1076 |
begin |
|
1077 |
t:= round(SDWaterColorArray[0].r * RGB_LUMINANCE_RED + SDWaterColorArray[0].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[0].b * RGB_LUMINANCE_BLUE); |
|
1078 |
if t > 255 then |
|
1079 |
t:= 255; |
|
1080 |
SDWaterColorArray[1].r:= t; |
|
1081 |
SDWaterColorArray[1].g:= t; |
|
1082 |
SDWaterColorArray[1].b:= t |
|
1083 |
end; |
|
1084 |
SDWaterColorArray[3]:= SDWaterColorArray[1]; |
|
1085 |
SDWaterColorArray[5]:= SDWaterColorArray[1]; |
|
1086 |
SDWaterColorArray[7]:= SDWaterColorArray[1]; |
|
1087 |
end |
|
1088 |
else if key = 'sd-water-bottom' then |
|
1089 |
begin |
|
1090 |
i:= Pos(',', s); |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1091 |
SDWaterColorArray[0].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1092 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1093 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1094 |
SDWaterColorArray[0].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1095 |
Delete(s, 1, i); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1096 |
SDWaterColorArray[0].b:= StrToInt(Trim(s)); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1097 |
SDWaterColorArray[0].a := 255; |
6982 | 1098 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1099 |
begin |
10325 | 1100 |
t:= round(SDWaterColorArray[2].r * RGB_LUMINANCE_RED + SDWaterColorArray[2].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[2].b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1101 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1102 |
t:= 255; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1103 |
SDWaterColorArray[0].r:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1104 |
SDWaterColorArray[0].g:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1105 |
SDWaterColorArray[0].b:= t |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1106 |
end; |
10325 | 1107 |
SDWaterColorArray[2]:= SDWaterColorArray[0]; |
1108 |
SDWaterColorArray[4]:= SDWaterColorArray[0]; |
|
1109 |
SDWaterColorArray[6]:= SDWaterColorArray[0]; |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
1110 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1111 |
else if key = 'sd-water-opacity' then |
6982 | 1112 |
SDWaterOpacity:= StrToInt(Trim(s)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1113 |
else if key = 'sd-clouds' then |
7543
a0dc770538e1
Poor visual gear value in theme now bears little resemblance to the number of gears actually spawned. But, it certainly shouldn't be related to LAND_WIDTH.
nemo
parents:
7069
diff
changeset
|
1114 |
cSDCloudsNumber:= Word(StrToInt(Trim(s))) * cScreenSpace div 4096 |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1115 |
else if key = 'sd-flakes' then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1116 |
begin |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1117 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1118 |
vobSDCount:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1119 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1120 |
if vobSDCount > 0 then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1121 |
begin |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1122 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1123 |
vobSDFramesCount:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1124 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1125 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1126 |
vobSDFrameTicks:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1127 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1128 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1129 |
vobSDVelocity:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1130 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1131 |
vobSDFallSpeed:= StrToInt(Trim(s)); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1132 |
end; |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
1133 |
end |
4835
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1134 |
else if key = 'rq-sky' then |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1135 |
begin |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1136 |
if ((cReducedQuality and rqNoBackground) <> 0) then |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1137 |
begin |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1138 |
i:= Pos(',', s); |
5654 | 1139 |
RQSkyColor.r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4835
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1140 |
Delete(s, 1, i); |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1141 |
i:= Pos(',', s); |
5654 | 1142 |
RQSkyColor.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
4835
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1143 |
Delete(s, 1, i); |
5654 | 1144 |
RQSkyColor.b:= StrToInt(Trim(s)); |
6982 | 1145 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1146 |
begin |
5654 | 1147 |
t:= round(RQSkyColor.r * RGB_LUMINANCE_RED + RQSkyColor.g * RGB_LUMINANCE_GREEN + RQSkyColor.b * RGB_LUMINANCE_BLUE); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1148 |
if t > 255 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1149 |
t:= 255; |
5654 | 1150 |
RQSkyColor.r:= t; |
1151 |
RQSkyColor.g:= t; |
|
1152 |
RQSkyColor.b:= t |
|
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
1153 |
end; |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1154 |
SetSkyColor(RQSkyColor.r / 255, RQSkyColor.g / 255, RQSkyColor.b / 255); |
5689
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
1155 |
SDSkyColor.r:= RQSkyColor.r; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
1156 |
SDSkyColor.g:= RQSkyColor.g; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
1157 |
SDSkyColor.b:= RQSkyColor.b; |
4835
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1158 |
end |
a6924450e694
added rq-sky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4806
diff
changeset
|
1159 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1160 |
end; |
184 | 1161 |
|
8028 | 1162 |
pfsClose(f); |
2671
7e0f88013fe8
smaller patches, one missing Sky-lowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2647
diff
changeset
|
1163 |
AddProgress; |
184 | 1164 |
end; |
1165 |
||
2870 | 1166 |
procedure AddThemeObjects(var ThemeObjects: TThemeObjects); |
371 | 1167 |
var i, ii, t: LongInt; |
184 | 1168 |
b: boolean; |
1169 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1170 |
if ThemeObjects.Count = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1171 |
exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1172 |
WriteLnToConsole('Adding theme objects...'); |
2783
1532fde15179
Palewolf's patch to allow controlling proportion of various objects in themes. Desert and Nature have non-default values
nemo
parents:
2747
diff
changeset
|
1173 |
|
9688 | 1174 |
for i:=0 to Pred(ThemeObjects.Count) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1175 |
ThemeObjects.objs[i].Maxcnt := max(1, (ThemeObjects.objs[i].Maxcnt * MaxHedgehogs) div 18); // Maxcnt is proportional to map size, but allow objects to span even if we're on a tiny map |
3697 | 1176 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1177 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1178 |
t := getrandom(ThemeObjects.Count); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1179 |
b := false; |
9688 | 1180 |
for i:= 0 to Pred(ThemeObjects.Count) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1181 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1182 |
ii := (i+t) mod ThemeObjects.Count; |
3697 | 1183 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1184 |
if ThemeObjects.objs[ii].Maxcnt <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1185 |
b := b or TryPut(ThemeObjects.objs[ii]) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1186 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1187 |
until not b; |
184 | 1188 |
end; |
1189 |
||
2870 | 1190 |
procedure AddSprayObjects(Surface: PSDL_Surface; var SprayObjects: TSprayObjects); |
1191 |
var i, ii, t: LongInt; |
|
184 | 1192 |
b: boolean; |
1193 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1194 |
if SprayObjects.Count = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1195 |
exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1196 |
WriteLnToConsole('Adding spray objects...'); |
2870 | 1197 |
|
9688 | 1198 |
for i:= 0 to Pred(SprayObjects.Count) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1199 |
SprayObjects.objs[i].Maxcnt := max(1, (SprayObjects.objs[i].Maxcnt * MaxHedgehogs) div 18); // Maxcnt is proportional to map size, but allow objects to span even if we're on a tiny map |
3697 | 1200 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1201 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1202 |
t := getrandom(SprayObjects.Count); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1203 |
b := false; |
9688 | 1204 |
for i:= 0 to Pred(SprayObjects.Count) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1205 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1206 |
ii := (i+t) mod SprayObjects.Count; |
3697 | 1207 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1208 |
if SprayObjects.objs[ii].Maxcnt <> 0 then |
9688 | 1209 |
b := b or TryPut2(SprayObjects.objs[ii], Surface) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1210 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
1211 |
until not b; |
184 | 1212 |
end; |
1213 |
||
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
1214 |
procedure AddObjects(); |
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1215 |
var girSurf: PSDL_Surface; |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1216 |
i, g: Longword; |
184 | 1217 |
begin |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
1218 |
InitRects; |
1776 | 1219 |
if hasGirders then |
1220 |
begin |
|
7069 | 1221 |
g:= max(playWidth div 8, 256); |
1222 |
i:= leftX + g; |
|
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1223 |
girSurf:= nil; |
1792 | 1224 |
repeat |
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1225 |
AddGirder(i, girSurf); |
7069 | 1226 |
i:=i + g; |
1227 |
until (i > rightX - g); |
|
10261
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1228 |
// free girder surface |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1229 |
if girSurf <> nil then |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1230 |
begin |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1231 |
SDL_FreeSurface(girSurf); |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1232 |
girSurf:= nil; |
c81125782cf6
load the girder.png of a theme a maximum of 1 times (minimum of 0), instead of once per generated bridge
sheepluva
parents:
10254
diff
changeset
|
1233 |
end; |
1776 | 1234 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1235 |
if (GameFlags and gfDisableLandObjects) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
1236 |
AddThemeObjects(ThemeObjects); |
2705
2b5625c4ec16
fix a nasty 196 bytes memory leak in engine, plus other stuff for iphone frontend
koda
parents:
2699
diff
changeset
|
1237 |
AddProgress(); |
2b5625c4ec16
fix a nasty 196 bytes memory leak in engine, plus other stuff for iphone frontend
koda
parents:
2699
diff
changeset
|
1238 |
FreeRects(); |
1190
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
1239 |
end; |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
1240 |
|
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
1241 |
procedure AddOnLandObjects(Surface: PSDL_Surface); |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
1242 |
begin |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
1243 |
InitRects; |
2870 | 1244 |
AddSprayObjects(Surface, SprayObjects); |
1186
bf5af791d234
Step 5: Finally... we have theme objects with alpha-channel!
unc0rr
parents:
1185
diff
changeset
|
1245 |
FreeRects |
184 | 1246 |
end; |
1247 |
||
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
1248 |
procedure LoadThemeConfig; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
1249 |
begin |
3463 | 1250 |
ReadThemeInfo(ThemeObjects, SprayObjects) |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
1251 |
end; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
1252 |
|
3053 | 1253 |
procedure FreeLandObjects(); |
13391 | 1254 |
var i, ii: Longword; |
3053 | 1255 |
begin |
3463 | 1256 |
for i:= 0 to Pred(MAXTHEMEOBJECTS) do |
1257 |
begin |
|
1258 |
if ThemeObjects.objs[i].Surf <> nil then |
|
1259 |
SDL_FreeSurface(ThemeObjects.objs[i].Surf); |
|
1260 |
if SprayObjects.objs[i].Surf <> nil then |
|
1261 |
SDL_FreeSurface(SprayObjects.objs[i].Surf); |
|
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
1262 |
ThemeObjects.objs[i].Surf:= nil; |
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
1263 |
SprayObjects.objs[i].Surf:= nil; |
13391 | 1264 |
|
1265 |
ii:= 0; |
|
1266 |
while ii < ThemeObjects.objs[i].overlaycnt do |
|
1267 |
begin |
|
1268 |
if ThemeObjects.objs[i].overlays[ii].Surf <> nil then |
|
1269 |
begin |
|
1270 |
SDL_FreeSurface(ThemeObjects.objs[i].overlays[ii].Surf); |
|
1271 |
ThemeObjects.objs[i].overlays[ii].Surf:= nil; |
|
1272 |
end; |
|
1273 |
inc(ii); |
|
1274 |
end; |
|
3463 | 1275 |
end; |
3053 | 1276 |
end; |
1277 |
||
184 | 1278 |
end. |