author | sheepluva |
Mon, 13 Jul 2015 06:19:51 +0200 | |
changeset 11005 | 71927bdb776a |
parent 10941 | 6f1b2d0dacdf |
child 11006 | cb06b7985261 |
permissions | -rw-r--r-- |
184 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
9998 | 3 |
* Copyright (c) 2004-2014 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; |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
29 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); |
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
|
30 |
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
|
31 |
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
|
32 |
procedure SetLand(var LandWord: Word; Pixel: LongWord); inline; |
184 | 33 |
|
34 |
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
|
35 |
uses uStore, uConsts, uConsole, uRandom, uSound |
8028 | 36 |
, uTypes, uVariables, uUtils, uDebug, SysUtils |
37 |
, uPhysFSLayer; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2695
diff
changeset
|
38 |
|
1190
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
39 |
const MaxRects = 512; |
184 | 40 |
MAXOBJECTRECTS = 16; |
41 |
MAXTHEMEOBJECTS = 32; |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8028
diff
changeset
|
42 |
cThemeCFGFilename = 'theme.cfg'; |
184 | 43 |
|
7035 | 44 |
type TRectsArray = array[0..MaxRects] of TSDL_Rect; |
45 |
PRectArray = ^TRectsArray; |
|
184 | 46 |
TThemeObject = record |
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
|
47 |
Surf, Mask: PSDL_Surface; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
48 |
inland: TSDL_Rect; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
49 |
outland: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
50 |
rectcnt: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
51 |
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
|
52 |
Maxcnt: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
53 |
end; |
184 | 54 |
TThemeObjects = record |
371 | 55 |
Count: LongInt; |
184 | 56 |
objs: array[0..Pred(MAXTHEMEOBJECTS)] of TThemeObject; |
57 |
end; |
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
Maxcnt: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
62 |
end; |
184 | 63 |
TSprayObjects = record |
371 | 64 |
Count: LongInt; |
184 | 65 |
objs: array[0..Pred(MAXTHEMEOBJECTS)] of TSprayObject |
66 |
end; |
|
67 |
||
68 |
var Rects: PRectArray; |
|
69 |
RectCount: Longword; |
|
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
70 |
ThemeObjects: TThemeObjects; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
71 |
SprayObjects: TSprayObjects; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
72 |
|
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
|
73 |
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
|
74 |
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
|
75 |
// 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
|
76 |
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
|
77 |
LandWord:= 0 |
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
|
78 |
else if Pixel = $FFFFFFFF then // white |
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
|
79 |
LandWord:= lfObject |
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
|
80 |
else if Pixel = AMask then // black |
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
|
81 |
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
|
82 |
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
|
83 |
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
|
84 |
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
|
85 |
else if Pixel = (AMask or RMask) then // red |
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
|
86 |
LandWord:= lfIndestructible |
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 |
else if Pixel = (AMask or BMask) then // blue |
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 |
LandWord:= lfObject or lfIce |
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 |
else if Pixel = (AMask or GMask) then // green |
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 |
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
|
91 |
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
|
92 |
|
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
93 |
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
|
94 |
begin |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
95 |
BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0); |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
96 |
end; |
10015 | 97 |
|
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
98 |
procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); |
1182
e2e13aa055c1
Step 3: Maps are rendered correctly, but without objects yet
unc0rr
parents:
1181
diff
changeset
|
99 |
var p: PLongwordArray; |
184 | 100 |
x, y: Longword; |
371 | 101 |
bpp: LongInt; |
184 | 102 |
begin |
103 |
WriteToConsole('Generating collision info... '); |
|
104 |
||
105 |
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
|
106 |
SDLTry(SDL_LockSurface(Image) >= 0, true); |
184 | 107 |
|
351 | 108 |
bpp:= Image^.format^.BytesPerPixel; |
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
109 |
TryDo(bpp = 4, 'Land object should be 32bit', true); |
1182
e2e13aa055c1
Step 3: Maps are rendered correctly, but without objects yet
unc0rr
parents:
1181
diff
changeset
|
110 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
111 |
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
|
112 |
Width:= Image^.w; |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
113 |
|
351 | 114 |
p:= Image^.pixels; |
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
115 |
for y:= 0 to Pred(Image^.h) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
116 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
117 |
for x:= 0 to Pred(Width) do |
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
|
118 |
if (p^[x] and AMask) <> 0 then |
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
|
119 |
begin |
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
|
120 |
if (cReducedQuality and rqBlurryLand) = 0 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
|
121 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
122 |
if (LandPixels[cpY + y, cpX + x] = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
123 |
or (((p^[x] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) then |
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
|
124 |
LandPixels[cpY + y, cpX + x]:= p^[x]; |
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
|
125 |
end |
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
|
126 |
else |
8330 | 127 |
if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then |
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
|
128 |
LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[x]; |
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
|
129 |
|
8751
4609823efc94
More flagging of Land values. Also use less than for tests of non-terrain, instead of "and $FF00 = 0". Saves a couple of ops, which actually matters a small amount in a few places.
nemo
parents:
8145
diff
changeset
|
130 |
if (Land[cpY + y, cpX + x] <= lfAllObjMask) and ((p^[x] and AMask) <> 0) then |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
131 |
Land[cpY + y, cpX + x]:= lfObject or LandFlags |
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
|
132 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
133 |
p:= PLongwordArray(@(p^[Image^.pitch shr 2])) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
134 |
end; |
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
135 |
|
184 | 136 |
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
|
137 |
SDL_UnlockSurface(Image); |
184 | 138 |
WriteLnToConsole(msgOK) |
139 |
end; |
|
140 |
||
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
|
141 |
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
|
142 |
var p, mp: PLongwordArray; |
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
|
143 |
x, y: Longword; |
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
|
144 |
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
|
145 |
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
|
146 |
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
|
147 |
|
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
|
148 |
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
|
149 |
SDLTry(SDL_LockSurface(Image) >= 0, true); |
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
|
150 |
|
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
|
151 |
bpp:= Image^.format^.BytesPerPixel; |
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
|
152 |
TryDo(bpp = 4, 'Land object should be 32bit', true); |
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
|
153 |
|
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
|
154 |
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
|
155 |
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
|
156 |
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
|
157 |
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
|
158 |
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
|
159 |
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
|
160 |
if (cReducedQuality and rqBlurryLand) = 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
|
161 |
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
|
162 |
if (LandPixels[cpY + y, cpX + x] = 0) |
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
|
163 |
or (((p^[x] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) 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
|
164 |
LandPixels[cpY + y, cpX + x]:= p^[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
|
165 |
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
|
166 |
else |
10015 | 167 |
if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then |
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
|
168 |
LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[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
|
169 |
|
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
|
170 |
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
|
171 |
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
|
172 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
173 |
p:= PLongwordArray(@(p^[Image^.pitch shr 2])); |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10108
diff
changeset
|
174 |
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
|
175 |
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
|
176 |
|
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
|
177 |
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
|
178 |
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
|
179 |
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
|
180 |
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
|
181 |
|
371 | 182 |
procedure AddRect(x1, y1, w1, h1: LongInt); |
184 | 183 |
begin |
351 | 184 |
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
|
185 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
186 |
x:= x1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
187 |
y:= y1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
188 |
w:= w1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
189 |
h:= h1 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
190 |
end; |
184 | 191 |
inc(RectCount); |
192 |
TryDo(RectCount < MaxRects, 'AddRect: overflow', true) |
|
193 |
end; |
|
194 |
||
195 |
procedure InitRects; |
|
196 |
begin |
|
197 |
RectCount:= 0; |
|
198 |
New(Rects) |
|
199 |
end; |
|
200 |
||
201 |
procedure FreeRects; |
|
202 |
begin |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
203 |
Dispose(rects) |
184 | 204 |
end; |
205 |
||
371 | 206 |
function CheckIntersect(x1, y1, w1, h1: LongInt): boolean; |
184 | 207 |
var i: Longword; |
2695 | 208 |
res: boolean = false; |
184 | 209 |
begin |
2695 | 210 |
|
184 | 211 |
i:= 0; |
212 |
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
|
213 |
repeat |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
214 |
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
|
215 |
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
|
216 |
inc(i) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
217 |
until (i = RectCount) or (res); |
2695 | 218 |
CheckIntersect:= res; |
184 | 219 |
end; |
220 |
||
6492 | 221 |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
222 |
function CountNonZeroz(x, y, h: LongInt): Longword; |
6492 | 223 |
var i: LongInt; |
224 |
lRes: Longword; |
|
225 |
begin |
|
226 |
lRes:= 0; |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
227 |
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
|
228 |
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
|
229 |
inc(lRes); |
6492 | 230 |
CountNonZeroz:= lRes; |
231 |
end; |
|
232 |
||
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
|
233 |
function AddGirder(gX: LongInt; var girSurf: PSDL_Surface): boolean; |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
234 |
var x1, x2, y, k, i, girderHeight: LongInt; |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
235 |
rr: TSDL_Rect; |
2695 | 236 |
bRes: boolean; |
184 | 237 |
begin |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
238 |
if girSurf = nil then |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
239 |
girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifTransparent or ifIgnoreCaps); |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
240 |
|
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
241 |
girderHeight:= girSurf^.h; |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
242 |
|
1792 | 243 |
y:= topY+150; |
184 | 244 |
repeat |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
245 |
inc(y, 24); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
246 |
x1:= gX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
247 |
x2:= gX; |
2376 | 248 |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
249 |
while (x1 > Longint(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
|
250 |
dec(x1, 2); |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
251 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
252 |
i:= x1 - 12; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
253 |
repeat |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
254 |
k:= CountNonZeroz(x1, y, girderHeight); |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
255 |
dec(x1, 2) |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
256 |
until (x1 < Longint(leftX) + 100) or (k = 0) or (k = girderHeight) or (x1 < i); |
2376 | 257 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
258 |
inc(x1, 2); |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
259 |
if k = girderHeight then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
260 |
begin |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
261 |
while (x2 < (LongInt(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
|
262 |
inc(x2, 2); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
263 |
i:= x2 + 12; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
264 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
265 |
inc(x2, 2); |
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
266 |
k:= CountNonZeroz(x2, y, girderHeight) |
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
267 |
until (x2 >= (LongInt(rightX)-150)) or (k = 0) or (k = girderHeight) or (x2 > i) or (x2 - x1 >= 900); |
8330 | 268 |
|
10941
6f1b2d0dacdf
- Take girder height into account (fix issue #908)
unc0rr
parents:
10878
diff
changeset
|
269 |
if (x2 < (LongInt(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
|
270 |
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
|
271 |
break; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
272 |
end; |
184 | 273 |
x1:= 0; |
1753 | 274 |
until y > (LAND_HEIGHT-125); |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
275 |
|
184 | 276 |
if x1 > 0 then |
2695 | 277 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
278 |
bRes:= true; |
2376 | 279 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
280 |
rr.x:= x1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
281 |
while rr.x < x2 do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
282 |
begin |
10015 | 283 |
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
|
284 |
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
|
285 |
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
|
286 |
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
|
287 |
inc(rr.x, girSurf^.w); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
288 |
end; |
2376 | 289 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
290 |
AddRect(x1 - 8, y - 32, x2 - x1 + 16, 80); |
2695 | 291 |
end |
292 |
else bRes:= false; |
|
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
293 |
|
2695 | 294 |
AddGirder:= bRes; |
184 | 295 |
end; |
296 |
||
297 |
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
|
298 |
var tmpx, tmpx2, tmpy, tmpy2, bx, by: LongInt; |
2695 | 299 |
bRes: boolean = true; |
184 | 300 |
begin |
301 |
inc(rect.x, dX); |
|
302 |
inc(rect.y, dY); |
|
3521
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
303 |
bx:= rect.x + rect.w; |
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
304 |
by:= rect.y + rect.h; |
184 | 305 |
{$WARNINGS OFF} |
3521
96a502730e81
Remove redundant test, add some temp variables to speed up the expensive CheckLand
nemo
parents:
3519
diff
changeset
|
306 |
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
|
307 |
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
|
308 |
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
|
309 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
310 |
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
|
311 |
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
|
312 |
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
|
313 |
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
|
314 |
inc(tmpx); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
315 |
dec(tmpx2) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
316 |
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
|
317 |
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
|
318 |
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
|
319 |
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
|
320 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
321 |
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
|
322 |
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
|
323 |
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
|
324 |
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
|
325 |
inc(tmpy); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
326 |
dec(tmpy2) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
327 |
end; |
184 | 328 |
{$WARNINGS ON} |
2695 | 329 |
CheckLand:= bRes; |
184 | 330 |
end; |
331 |
||
332 |
function CheckCanPlace(x, y: Longword; var Obj: TThemeObject): boolean; |
|
333 |
var i: Longword; |
|
2695 | 334 |
bRes: boolean; |
184 | 335 |
begin |
336 |
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
|
337 |
if CheckLand(inland, x, y, lfBasic) then |
184 | 338 |
begin |
2695 | 339 |
bRes:= true; |
184 | 340 |
i:= 1; |
2695 | 341 |
while bRes and (i <= rectcnt) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
342 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
343 |
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
|
344 |
inc(i) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
345 |
end; |
2695 | 346 |
if bRes then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
347 |
bRes:= not CheckIntersect(x, y, Width, Height) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
348 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
349 |
else |
2695 | 350 |
bRes:= false; |
351 |
CheckCanPlace:= bRes; |
|
184 | 352 |
end; |
353 |
||
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
354 |
function TryPut(var Obj: TThemeObject): boolean; overload; |
184 | 355 |
const MaxPointsIndex = 2047; |
356 |
var x, y: Longword; |
|
357 |
ar: array[0..MaxPointsIndex] of TPoint; |
|
358 |
cnt, i: Longword; |
|
2695 | 359 |
bRes: boolean; |
184 | 360 |
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
|
361 |
TryPut:= false; |
184 | 362 |
cnt:= 0; |
363 |
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
|
364 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
365 |
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
|
366 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
367 |
x:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
368 |
repeat |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
369 |
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
|
370 |
repeat |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
371 |
if CheckCanPlace(x, y, Obj) then |
184 | 372 |
begin |
373 |
ar[cnt].x:= x; |
|
374 |
ar[cnt].y:= y; |
|
375 |
inc(cnt); |
|
376 |
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
|
377 |
begin |
10490 | 378 |
y:= LAND_HEIGHT; |
379 |
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
|
380 |
end |
184 | 381 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
382 |
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
|
383 |
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
|
384 |
inc(x, getrandom(6) + 3) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
385 |
until x >= LAND_WIDTH - Width; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
386 |
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
|
387 |
if bRes then |
184 | 388 |
begin |
389 |
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
|
390 |
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
|
391 |
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
|
392 |
else BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf); |
184 | 393 |
AddRect(ar[i].x, ar[i].y, Width, Height); |
394 |
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
|
395 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
396 |
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
|
397 |
end; |
2695 | 398 |
TryPut:= bRes; |
184 | 399 |
end; |
400 |
||
401 |
function TryPut(var Obj: TSprayObject; Surface: PSDL_Surface): boolean; overload; |
|
402 |
const MaxPointsIndex = 8095; |
|
403 |
var x, y: Longword; |
|
404 |
ar: array[0..MaxPointsIndex] of TPoint; |
|
405 |
cnt, i: Longword; |
|
406 |
r: TSDL_Rect; |
|
2695 | 407 |
bRes: boolean; |
184 | 408 |
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
|
409 |
TryPut:= false; |
184 | 410 |
cnt:= 0; |
411 |
with Obj do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
412 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
413 |
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
|
414 |
exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
415 |
x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
416 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
417 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
418 |
r.w:= Width; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
419 |
r.h:= Height + 16; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
420 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
421 |
y:= 8; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
422 |
repeat |
3519 | 423 |
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
|
424 |
and (not CheckIntersect(x, y, Width, Height)) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
425 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
426 |
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
|
427 |
ar[cnt].y:= y; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
428 |
inc(cnt); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
429 |
if cnt > MaxPointsIndex then // buffer is full, do not check the rest land |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
430 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
431 |
y:= 5000; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
432 |
x:= 5000; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
433 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
434 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
435 |
inc(y, 12); |
4159
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
3976
diff
changeset
|
436 |
until y >= LAND_HEIGHT - Height - 8; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
437 |
inc(x, getrandom(12) + 12) |
4159
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
3976
diff
changeset
|
438 |
until x >= LAND_WIDTH - Width; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
439 |
bRes:= cnt <> 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
440 |
if bRes then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
441 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
442 |
i:= getrandom(cnt); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
443 |
r.x:= ar[i].X; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
444 |
r.y:= ar[i].Y; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
445 |
r.w:= Width; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
446 |
r.h:= Height; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
447 |
SDL_UpperBlit(Obj.Surf, nil, Surface, @r); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
448 |
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
|
449 |
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
|
450 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
451 |
else Maxcnt:= 0 |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
452 |
end; |
2695 | 453 |
TryPut:= bRes; |
184 | 454 |
end; |
455 |
||
6492 | 456 |
|
457 |
procedure CheckRect(Width, Height, x, y, w, h: LongWord); |
|
458 |
begin |
|
8330 | 459 |
if (x + w > Width) then |
6492 | 460 |
OutError('Object''s rectangle exceeds image: x + w (' + inttostr(x) + ' + ' + inttostr(w) + ') > Width (' + inttostr(Width) + ')', true); |
8330 | 461 |
if (y + h > Height) then |
6492 | 462 |
OutError('Object''s rectangle exceeds image: y + h (' + inttostr(y) + ' + ' + inttostr(h) + ') > Height (' + inttostr(Height) + ')', true); |
463 |
end; |
|
464 |
||
184 | 465 |
procedure ReadThemeInfo(var ThemeObjects: TThemeObjects; var SprayObjects: TSprayObjects); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
466 |
var s, key: shortstring; |
8028 | 467 |
f: PFSFile; |
5179
8d64dcb566ea
Fix "Mixing signed expressions and longwords gives a 64bit result" warnings
unc0rr
parents:
5166
diff
changeset
|
468 |
i: LongInt; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
469 |
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
|
470 |
c2: TSDL_Color; |
184 | 471 |
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
|
472 |
|
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
|
473 |
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
|
474 |
// Set default water greyscale values |
6982 | 475 |
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
|
476 |
begin |
10325 | 477 |
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
|
478 |
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
|
479 |
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
|
480 |
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
|
481 |
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
|
482 |
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
|
483 |
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
|
484 |
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
|
485 |
end; |
10325 | 486 |
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
|
487 |
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
|
488 |
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
|
489 |
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
|
490 |
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
|
491 |
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
|
492 |
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
|
493 |
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
|
494 |
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
|
495 |
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
|
496 |
|
8025 | 497 |
s:= cPathz[ptCurrTheme] + '/' + cThemeCFGFilename; |
184 | 498 |
WriteLnToConsole('Reading objects info...'); |
8028 | 499 |
f:= pfsOpenRead(s); |
9778
6166aa84a396
Better diagnostic message when failing to load theme.cfg
unc0rr
parents:
9768
diff
changeset
|
500 |
TryDo(f <> nil, 'Bad data or cannot access file ' + s, true); |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
501 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
502 |
ThemeObjects.Count:= 0; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
503 |
SprayObjects.Count:= 0; |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
504 |
|
8028 | 505 |
while not pfsEOF(f) do |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
506 |
begin |
8028 | 507 |
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
|
508 |
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
|
509 |
continue; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
510 |
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
|
511 |
continue; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
512 |
|
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
513 |
i:= Pos('=', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
514 |
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
|
515 |
Delete(s, 1, i); |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
516 |
|
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
517 |
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
|
518 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
519 |
i:= Pos(',', s); |
5654 | 520 |
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
|
521 |
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
|
522 |
i:= Pos(',', s); |
5654 | 523 |
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
|
524 |
Delete(s, 1, i); |
5654 | 525 |
SkyColor.b:= StrToInt(Trim(s)); |
6982 | 526 |
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
|
527 |
then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
528 |
begin |
5654 | 529 |
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
|
530 |
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
|
531 |
t:= 255; |
5654 | 532 |
SkyColor.r:= t; |
533 |
SkyColor.g:= t; |
|
534 |
SkyColor.b:= t |
|
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
535 |
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
|
536 |
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
|
537 |
SDSkyColor.r:= SkyColor.r; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
538 |
SDSkyColor.g:= SkyColor.g; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
539 |
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
|
540 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
541 |
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
|
542 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
543 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
544 |
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
|
545 |
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
|
546 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
547 |
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
|
548 |
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
|
549 |
c2.b:= StrToInt(Trim(s)); |
6982 | 550 |
if GrayScale then |
6303 | 551 |
begin |
552 |
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
|
553 |
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
|
554 |
t:= 255; |
6303 | 555 |
c2.r:= t; |
556 |
c2.g:= t; |
|
557 |
c2.b:= t |
|
558 |
end; |
|
10877 | 559 |
ExplosionBorderColorR:= c2.r; |
560 |
ExplosionBorderColorG:= c2.g; |
|
561 |
ExplosionBorderColorB:= c2.b; |
|
10878 | 562 |
ExplosionBorderColorNoA:= |
563 |
(c2.r shl RShift) or (c2.g shl GShift) or (c2.b shl BShift); |
|
564 |
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
|
565 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
566 |
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
|
567 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
568 |
i:= Pos(',', s); |
10325 | 569 |
WaterColorArray[1].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
570 |
Delete(s, 1, i); |
|
571 |
i:= Pos(',', s); |
|
572 |
WaterColorArray[1].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
573 |
Delete(s, 1, i); |
|
574 |
WaterColorArray[1].b:= StrToInt(Trim(s)); |
|
575 |
WaterColorArray[1].a := 255; |
|
576 |
if GrayScale then |
|
577 |
begin |
|
578 |
t:= round(WaterColorArray[0].r * RGB_LUMINANCE_RED + WaterColorArray[0].g * RGB_LUMINANCE_GREEN + WaterColorArray[0].b * RGB_LUMINANCE_BLUE); |
|
579 |
if t > 255 then |
|
580 |
t:= 255; |
|
581 |
WaterColorArray[1].r:= t; |
|
582 |
WaterColorArray[1].g:= t; |
|
583 |
WaterColorArray[1].b:= t |
|
584 |
end; |
|
585 |
WaterColorArray[3]:= WaterColorArray[1]; |
|
586 |
WaterColorArray[5]:= WaterColorArray[1]; |
|
587 |
WaterColorArray[7]:= WaterColorArray[1]; |
|
588 |
end |
|
589 |
else if key = 'water-bottom' then |
|
590 |
begin |
|
591 |
i:= Pos(',', s); |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
592 |
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
|
593 |
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
|
594 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
595 |
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
|
596 |
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
|
597 |
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
|
598 |
WaterColorArray[0].a := 255; |
6982 | 599 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
600 |
begin |
10325 | 601 |
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
|
602 |
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
|
603 |
t:= 255; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
604 |
WaterColorArray[0].r:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
605 |
WaterColorArray[0].g:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
606 |
WaterColorArray[0].b:= t |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
607 |
end; |
10325 | 608 |
WaterColorArray[2]:= WaterColorArray[0]; |
609 |
WaterColorArray[4]:= WaterColorArray[0]; |
|
610 |
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
|
611 |
end |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
612 |
else if key = 'water-opacity' then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
613 |
begin |
6982 | 614 |
WaterOpacity:= StrToInt(Trim(s)); |
615 |
SDWaterOpacity:= WaterOpacity |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
616 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
617 |
else if key = 'music' then |
10254 | 618 |
MusicFN:= Trim(s) |
619 |
else if key = 'sd-music' then |
|
620 |
SDMusicFN:= 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
|
621 |
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
|
622 |
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
|
623 |
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
|
624 |
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
|
625 |
end |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
626 |
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
|
627 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
628 |
inc(ThemeObjects.Count); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
629 |
with ThemeObjects.objs[Pred(ThemeObjects.Count)] do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
630 |
begin |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
631 |
i:= Pos(',', s); |
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
|
632 |
Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps or ifCritical); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
633 |
Width:= Surf^.w; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
634 |
Height:= Surf^.h; |
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
|
635 |
Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifTransparent or ifIgnoreCaps); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
636 |
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
|
637 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
638 |
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
|
639 |
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
|
640 |
if (Maxcnt < 1) or (Maxcnt > MAXTHEMEOBJECTS) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
641 |
OutError('Object''s max count should be between 1 and '+ inttostr(MAXTHEMEOBJECTS) +' (it was '+ inttostr(Maxcnt) +').', true); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
642 |
with inland do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
643 |
begin |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
644 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
645 |
x:= 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
|
646 |
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
|
647 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
648 |
y:= 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
|
649 |
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
|
650 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
651 |
w:= 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
|
652 |
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
|
653 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
654 |
h:= 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
|
655 |
Delete(s, 1, i); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
656 |
CheckRect(Width, Height, x, y, w, h) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
657 |
end; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
658 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
659 |
rectcnt:= 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
|
660 |
Delete(s, 1, i); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
661 |
for ii:= 1 to rectcnt do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
662 |
with outland[ii] do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
663 |
begin |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
664 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
665 |
x:= 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
|
666 |
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
|
667 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
668 |
y:= 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
|
669 |
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
|
670 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
671 |
w:= 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
|
672 |
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
|
673 |
if ii = rectcnt then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
674 |
h:= StrToInt(Trim(s)) |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
675 |
else |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
676 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
677 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
678 |
h:= 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
|
679 |
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
|
680 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
681 |
CheckRect(Width, Height, x, y, w, h) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
682 |
end; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
683 |
end; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
684 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
685 |
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
|
686 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
687 |
inc(SprayObjects.Count); |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
688 |
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
|
689 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
690 |
i:= Pos(',', s); |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7555
diff
changeset
|
691 |
Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps); |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
692 |
Width:= Surf^.w; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
693 |
Height:= Surf^.h; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
694 |
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
|
695 |
Maxcnt:= StrToInt(Trim(s)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
696 |
end; |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
697 |
end |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
698 |
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
|
699 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
700 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
701 |
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
|
702 |
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
|
703 |
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
|
704 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
705 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
706 |
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
|
707 |
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
|
708 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
709 |
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
|
710 |
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
|
711 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
712 |
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
|
713 |
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
|
714 |
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
|
715 |
end; |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
716 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
717 |
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
|
718 |
cFlattenFlakes:= true |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
719 |
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
|
720 |
cFlattenClouds:= true |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
721 |
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
|
722 |
cIce:= true |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9721
diff
changeset
|
723 |
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
|
724 |
cSnow:= true |
4782
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
725 |
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
|
726 |
begin |
603916ddf4b6
added also splash and droplets to sd and refactored theme.cfg, not all themes updated
Henek
parents:
4669
diff
changeset
|
727 |
i:= Pos(',', s); |
10325 | 728 |
SDWaterColorArray[1].r:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
729 |
Delete(s, 1, i); |
|
730 |
i:= Pos(',', s); |
|
731 |
SDWaterColorArray[1].g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); |
|
732 |
Delete(s, 1, i); |
|
733 |
SDWaterColorArray[1].b:= StrToInt(Trim(s)); |
|
734 |
SDWaterColorArray[1].a := 255; |
|
735 |
if GrayScale then |
|
736 |
begin |
|
737 |
t:= round(SDWaterColorArray[0].r * RGB_LUMINANCE_RED + SDWaterColorArray[0].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[0].b * RGB_LUMINANCE_BLUE); |
|
738 |
if t > 255 then |
|
739 |
t:= 255; |
|
740 |
SDWaterColorArray[1].r:= t; |
|
741 |
SDWaterColorArray[1].g:= t; |
|
742 |
SDWaterColorArray[1].b:= t |
|
743 |
end; |
|
744 |
SDWaterColorArray[3]:= SDWaterColorArray[1]; |
|
745 |
SDWaterColorArray[5]:= SDWaterColorArray[1]; |
|
746 |
SDWaterColorArray[7]:= SDWaterColorArray[1]; |
|
747 |
end |
|
748 |
else if key = 'sd-water-bottom' then |
|
749 |
begin |
|
750 |
i:= Pos(',', s); |
|
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
751 |
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
|
752 |
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
|
753 |
i:= Pos(',', s); |
4806
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
754 |
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
|
755 |
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
|
756 |
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
|
757 |
SDWaterColorArray[0].a := 255; |
6982 | 758 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
759 |
begin |
10325 | 760 |
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
|
761 |
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
|
762 |
t:= 255; |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
763 |
SDWaterColorArray[0].r:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
764 |
SDWaterColorArray[0].g:= t; |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
765 |
SDWaterColorArray[0].b:= t |
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
766 |
end; |
10325 | 767 |
SDWaterColorArray[2]:= SDWaterColorArray[0]; |
768 |
SDWaterColorArray[4]:= SDWaterColorArray[0]; |
|
769 |
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
|
770 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
771 |
else if key = 'sd-water-opacity' then |
6982 | 772 |
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
|
773 |
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
|
774 |
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
|
775 |
else if key = 'sd-flakes' then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
776 |
begin |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
777 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
778 |
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
|
779 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
780 |
if vobSDCount > 0 then |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
781 |
begin |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
782 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
783 |
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
|
784 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
785 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
786 |
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
|
787 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
788 |
i:= Pos(',', s); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
789 |
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
|
790 |
Delete(s, 1, i); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
791 |
vobSDFallSpeed:= StrToInt(Trim(s)); |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
792 |
end; |
48c1a395f0a7
added flake configuration also in sudden death and SDClouds for underwater
Henek
parents:
4792
diff
changeset
|
793 |
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
|
794 |
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
|
795 |
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
|
796 |
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
|
797 |
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
|
798 |
i:= Pos(',', s); |
5654 | 799 |
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
|
800 |
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
|
801 |
i:= Pos(',', s); |
5654 | 802 |
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
|
803 |
Delete(s, 1, i); |
5654 | 804 |
RQSkyColor.b:= StrToInt(Trim(s)); |
6982 | 805 |
if GrayScale then |
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
806 |
begin |
5654 | 807 |
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
|
808 |
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
|
809 |
t:= 255; |
5654 | 810 |
RQSkyColor.r:= t; |
811 |
RQSkyColor.g:= t; |
|
812 |
RQSkyColor.b:= t |
|
5441
39962b855540
Add grayscale option for 3d, helps with colour clashing
nemo
parents:
5240
diff
changeset
|
813 |
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
|
814 |
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
|
815 |
SDSkyColor.r:= RQSkyColor.r; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
816 |
SDSkyColor.g:= RQSkyColor.g; |
48ef34701751
Fix rounding error in sky colour causing visible lines
nemo
parents:
5654
diff
changeset
|
817 |
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
|
818 |
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
|
819 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
820 |
end; |
184 | 821 |
|
8028 | 822 |
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
|
823 |
AddProgress; |
184 | 824 |
end; |
825 |
||
2870 | 826 |
procedure AddThemeObjects(var ThemeObjects: TThemeObjects); |
371 | 827 |
var i, ii, t: LongInt; |
184 | 828 |
b: boolean; |
829 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
830 |
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
|
831 |
exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
832 |
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
|
833 |
|
3697 | 834 |
for i:=0 to ThemeObjects.Count do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
835 |
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 | 836 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
837 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
838 |
t := getrandom(ThemeObjects.Count); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
839 |
b := false; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
840 |
for i:=0 to ThemeObjects.Count do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
841 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
842 |
ii := (i+t) mod ThemeObjects.Count; |
3697 | 843 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
844 |
if ThemeObjects.objs[ii].Maxcnt <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
845 |
b := b or TryPut(ThemeObjects.objs[ii]) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
846 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
847 |
until not b; |
184 | 848 |
end; |
849 |
||
2870 | 850 |
procedure AddSprayObjects(Surface: PSDL_Surface; var SprayObjects: TSprayObjects); |
851 |
var i, ii, t: LongInt; |
|
184 | 852 |
b: boolean; |
853 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
854 |
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
|
855 |
exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
856 |
WriteLnToConsole('Adding spray objects...'); |
2870 | 857 |
|
3697 | 858 |
for i:=0 to SprayObjects.Count do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
859 |
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 | 860 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
861 |
repeat |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
862 |
t := getrandom(SprayObjects.Count); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
863 |
b := false; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
864 |
for i:=0 to SprayObjects.Count do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
865 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
866 |
ii := (i+t) mod SprayObjects.Count; |
3697 | 867 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
868 |
if SprayObjects.objs[ii].Maxcnt <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
869 |
b := b or TryPut(SprayObjects.objs[ii], Surface) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
870 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2905
diff
changeset
|
871 |
until not b; |
184 | 872 |
end; |
873 |
||
1180
e56317fdf78d
Start implementing support for 32bit sprites concerned in map generation process.
unc0rr
parents:
1156
diff
changeset
|
874 |
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
|
875 |
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
|
876 |
i, g: Longword; |
184 | 877 |
begin |
1183
540cea859395
Step 4: repair girder rendering (girder is 32bit now)
unc0rr
parents:
1182
diff
changeset
|
878 |
InitRects; |
1776 | 879 |
if hasGirders then |
880 |
begin |
|
7069 | 881 |
g:= max(playWidth div 8, 256); |
882 |
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
|
883 |
girSurf:= nil; |
1792 | 884 |
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
|
885 |
AddGirder(i, girSurf); |
7069 | 886 |
i:=i + g; |
887 |
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
|
888 |
// 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
|
889 |
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
|
890 |
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
|
891 |
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
|
892 |
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
|
893 |
end; |
1776 | 894 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6534
diff
changeset
|
895 |
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
|
896 |
AddThemeObjects(ThemeObjects); |
2705
2b5625c4ec16
fix a nasty 196 bytes memory leak in engine, plus other stuff for iphone frontend
koda
parents:
2699
diff
changeset
|
897 |
AddProgress(); |
2b5625c4ec16
fix a nasty 196 bytes memory leak in engine, plus other stuff for iphone frontend
koda
parents:
2699
diff
changeset
|
898 |
FreeRects(); |
1190
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
899 |
end; |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
900 |
|
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
901 |
procedure AddOnLandObjects(Surface: PSDL_Surface); |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
902 |
begin |
73ec31d8bb6f
Enable back rendering objects that are put on top of land texture
unc0rr
parents:
1186
diff
changeset
|
903 |
InitRects; |
2275
3f56c99a70f8
Make all theme numbers proportional to map MaxHedgehogs. This should mean the numbers should be as in past for 18 hedgehog map
nemo
parents:
2272
diff
changeset
|
904 |
//AddSprayObjects(Surface, SprayObjects, 12); |
2870 | 905 |
AddSprayObjects(Surface, SprayObjects); |
1186
bf5af791d234
Step 5: Finally... we have theme objects with alpha-channel!
unc0rr
parents:
1185
diff
changeset
|
906 |
FreeRects |
184 | 907 |
end; |
908 |
||
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
909 |
procedure LoadThemeConfig; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
910 |
begin |
3463 | 911 |
ReadThemeInfo(ThemeObjects, SprayObjects) |
1085
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
912 |
end; |
0b82870073b5
Load flakes information from theme.cfg when playing painted map
unc0rr
parents:
1066
diff
changeset
|
913 |
|
3053 | 914 |
procedure FreeLandObjects(); |
915 |
var i: Longword; |
|
916 |
begin |
|
3463 | 917 |
for i:= 0 to Pred(MAXTHEMEOBJECTS) do |
918 |
begin |
|
919 |
if ThemeObjects.objs[i].Surf <> nil then |
|
920 |
SDL_FreeSurface(ThemeObjects.objs[i].Surf); |
|
921 |
if SprayObjects.objs[i].Surf <> nil then |
|
922 |
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
|
923 |
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
|
924 |
SprayObjects.objs[i].Surf:= nil; |
3463 | 925 |
end; |
3053 | 926 |
end; |
927 |
||
184 | 928 |
end. |