- Timestamp:
- Mar 22, 2021, 11:21:11 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LocalPlayer/IsoEngine.pas
r321 r322 117 117 BordersOK: integer; 118 118 OnInitEnemyModel: TInitEnemyModelEvent; 119 LandPatch, OceanPatch, Borders: TBitmap; 120 TSpriteSize: array [0 .. TerrainIconLines * 9 - 1] of TRect; 119 LandPatch: TBitmap; 120 OceanPatch: TBitmap; 121 Borders: TBitmap; 122 TSpriteSize: array [0 .. TerrainIconLines * TerrainIconCols - 1] of TRect; 121 123 DebugMap: ^TTileList; 122 124 CitiesPictures: array [2 .. 3, 0 .. 3] of TCityPicture; 123 FoW, ShowLoc, ShowCityNames, ShowObjects, ShowBorder, ShowMyBorder, 124 ShowGrWall, ShowDebug: boolean; 125 FoW: Boolean; 126 ShowLoc: Boolean; 127 ShowCityNames: Boolean; 128 ShowObjects: Boolean; 129 ShowBorder: Boolean; 130 ShowMyBorder: Boolean; 131 ShowGrWall: Boolean; 132 ShowDebug: Boolean; 125 133 126 134 function IsJungle(y: integer): boolean; … … 137 145 end; 138 146 139 function ApplyTileSize(ATileSize: TTileSize): boolean; 140 var 141 i: Integer; 142 x: Integer; 143 y: Integer; 147 procedure ReduceTerrainIconsSize; 148 var 149 MaskLine: array of TPixelPointer; 150 Mask24: TBitmap; 144 151 xSrc: Integer; 145 152 ySrc: Integer; 146 HGrTerrainNew: TGraphicSet; 147 HGrCitiesNew: TGraphicSet; 148 Age: Integer; 149 Size: Integer; 150 LandMore, OceanMore, DitherMask, Mask24: TBitmap; 151 MaskLine: array [0 .. 50 * 3 - 1] of TPixelPointer; // 32 = assumed maximum for yyt 152 Border: boolean; 153 xxtNew: Integer; 154 yytNew: Integer; 155 begin 156 xxtNew := TileSizes[ATileSize].X; 157 yytNew := TileSizes[ATileSize].Y; 158 result := false; 159 HGrTerrainNew := LoadGraphicSet(Format('Terrain%dx%d.png', 160 [xxtNew * 2, yytNew * 2])); 161 if not Assigned(HGrTerrainNew) then 162 exit; 163 HGrCitiesNew := LoadGraphicSet(Format('Cities%dx%d.png', 164 [xxtNew * 2, yytNew * 2])); 165 if not Assigned(HGrCitiesNew) then 166 exit; 167 xxt := xxtNew; 168 yyt := yytNew; 169 TileSize := ATileSize; 170 HGrTerrain := HGrTerrainNew; 171 HGrCities := HGrCitiesNew; 172 result := true; 173 174 // prepare age 2+3 cities 175 for age := 2 to 3 do 176 for size := 0 to 3 do 177 with CitiesPictures[age, size] do 178 FindPosition(HGrCities, size * (xxt * 2 + 1), (age - 2) * (yyt * 3 + 1), 179 xxt * 2 - 1, yyt * 3 - 1, $00FFFF, xShield, yShield); 180 181 { prepare dithered ground tiles } 182 if LandPatch <> nil then 183 FreeAndNil(LandPatch); 184 LandPatch := TBitmap.Create; 185 LandPatch.PixelFormat := pf24bit; 186 LandPatch.Canvas.Brush.Color := 0; 187 LandPatch.SetSize(xxt * 18, yyt * 9); 188 LandPatch.Canvas.FillRect(0, 0, LandPatch.Width, LandPatch.Height); 189 if OceanPatch <> nil then 190 FreeAndNil(OceanPatch); 191 OceanPatch := TBitmap.Create; 192 OceanPatch.PixelFormat := pf24bit; 193 OceanPatch.Canvas.Brush.Color := 0; 194 OceanPatch.SetSize(xxt * 8, yyt * 4); 195 OceanPatch.Canvas.FillRect(0, 0, OceanPatch.Width, OceanPatch.Height); 196 LandMore := TBitmap.Create; 197 LandMore.PixelFormat := pf24bit; 198 LandMore.Canvas.Brush.Color := 0; 199 LandMore.SetSize(xxt * 18, yyt * 9); 200 LandMore.Canvas.FillRect(0, 0, LandMore.Width, LandMore.Height); 201 OceanMore := TBitmap.Create; 202 OceanMore.PixelFormat := pf24bit; 203 OceanMore.Canvas.Brush.Color := 0; 204 OceanMore.SetSize(xxt * 8, yyt * 4); 205 OceanMore.Canvas.FillRect(0, 0, OceanMore.Width, OceanMore.Height); 206 DitherMask := TBitmap.Create; 207 DitherMask.PixelFormat := pf24bit; 208 DitherMask.SetSize(xxt * 2, yyt * 2); 209 DitherMask.Canvas.FillRect(0, 0, DitherMask.Width, DitherMask.Height); 210 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 211 HGrTerrain.Mask.Canvas, 1 + 7 * (xxt * 2 + 1), 212 1 + yyt + 15 * (yyt * 3 + 1), SRCAND); 213 214 for x := -1 to 6 do 215 begin 216 if x = -1 then 217 begin 218 xSrc := ShoreDither * (xxt * 2 + 1) + 1; 219 ySrc := 1 + yyt 220 end 221 else if x = 6 then 222 begin 223 xSrc := 1 + (xxt * 2 + 1) * 2; 224 ySrc := 1 + yyt + (yyt * 3 + 1) * 2 225 end 226 else 227 begin 228 xSrc := (x + 2) * (xxt * 2 + 1) + 1; 229 ySrc := 1 + yyt 230 end; 231 for y := -1 to 6 do 232 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 233 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc); 234 for y := -2 to 6 do 235 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, xxt, 236 yyt, HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 237 SRCPAINT); 238 for y := -2 to 6 do 239 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2) + xxt, (y + 2) * yyt, 240 xxt, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, 241 SRCPAINT); 242 for y := -2 to 6 do 243 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, xxt, 244 yyt, DitherMask.Canvas, xxt, yyt, SRCAND); 245 for y := -2 to 6 do 246 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2) + xxt, (y + 2) * yyt, 247 xxt, yyt, DitherMask.Canvas, 0, yyt, SRCAND); 248 end; 249 250 for y := -1 to 6 do 251 begin 252 if y = -1 then 253 begin 254 xSrc := ShoreDither * (xxt * 2 + 1) + 1; 255 ySrc := 1 + yyt 256 end 257 else if y = 6 then 258 begin 259 xSrc := 1 + 2 * (xxt * 2 + 1); 260 ySrc := 1 + yyt + 2 * (yyt * 3 + 1) 261 end 262 else 263 begin 264 xSrc := (y + 2) * (xxt * 2 + 1) + 1; 265 ySrc := 1 + yyt 266 end; 267 for x := -2 to 6 do 268 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 269 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc); 270 BitBltCanvas(LandMore.Canvas, xxt * 2, (y + 2) * yyt, xxt, yyt, 271 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, SRCPAINT); 272 for x := 0 to 7 do 273 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2) - xxt, (y + 2) * yyt, 274 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, 275 SRCPAINT); 276 for x := -2 to 6 do 277 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 278 xxt * 2, yyt, DitherMask.Canvas, 0, 0, SRCAND); 279 end; 280 281 for x := 0 to 3 do 282 for y := 0 to 3 do 283 begin 284 if (x = 1) and (y = 1) then 285 xSrc := 1 286 else 287 xSrc := (x mod 2) * (xxt * 2 + 1) + 1; 288 ySrc := 1 + yyt; 289 if (x >= 1) = (y >= 2) then 290 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 291 HGrTerrain.Data.Canvas, xSrc, ySrc); 292 if (x >= 1) and ((y < 2) or (x >= 2)) then 293 begin 294 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 295 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 296 SRCPAINT); 297 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 298 HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, SRCPAINT); 299 end; 300 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 301 DitherMask.Canvas, xxt, yyt, SRCAND); 302 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 303 DitherMask.Canvas, 0, yyt, SRCAND); 304 end; 305 306 for y := 0 to 3 do 307 for x := 0 to 3 do 308 begin 309 if (x = 1) and (y = 1) then 310 xSrc := 1 311 else 312 xSrc := (y mod 2) * (xxt * 2 + 1) + 1; 313 ySrc := 1 + yyt; 314 if (x < 1) or (y >= 2) then 315 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 316 HGrTerrain.Data.Canvas, xSrc, ySrc); 317 if (x = 1) and (y < 2) or (x >= 2) and (y >= 1) then 318 begin 319 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 320 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 321 SRCPAINT); 322 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 323 HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, SRCPAINT); 324 end; 325 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 326 DitherMask.Canvas, 0, 0, SRCAND); 327 end; 328 329 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 330 DitherMask.Canvas, 0, 0, DSTINVERT); { invert dither mask } 331 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 332 HGrTerrain.Mask.Canvas, 1, 1 + yyt, SRCPAINT); 333 334 for x := -1 to 6 do 335 for y := -2 to 6 do 336 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 337 xxt * 2, yyt, DitherMask.Canvas, 0, 0, SRCAND); 338 339 for y := -1 to 6 do 340 for x := -2 to 7 do 341 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2) - xxt, (y + 2) * yyt, 342 xxt * 2, yyt, DitherMask.Canvas, 0, yyt, SRCAND); 343 344 BitBltCanvas(LandPatch.Canvas, 0, 0, (xxt * 2) * 9, yyt * 9, 345 LandMore.Canvas, 0, 0, SRCPAINT); 346 347 for x := 0 to 3 do 348 for y := 0 to 3 do 349 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 350 DitherMask.Canvas, 0, 0, SRCAND); 351 352 for y := 0 to 3 do 353 for x := 0 to 4 do 354 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2) - xxt, y * yyt, xxt * 2, 355 yyt, DitherMask.Canvas, 0, yyt, SRCAND); 356 357 BitBltCanvas(OceanPatch.Canvas, 0, 0, (xxt * 2) * 4, yyt * 4, 358 OceanMore.Canvas, 0, 0, SRCPAINT); 359 360 with DitherMask.Canvas do 361 begin 362 Brush.Color := $FFFFFF; 363 FillRect(Rect(0, 0, xxt * 2, yyt)); 364 end; 365 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt, 366 HGrTerrain.Mask.Canvas, 1, 1 + yyt); 367 368 for x := 0 to 6 do 369 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), yyt, xxt * 2, yyt, 370 DitherMask.Canvas, 0, 0, SRCAND); 371 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt, DitherMask.Canvas, 372 0, 0, DSTINVERT); 373 374 for y := 0 to 6 do 375 BitBltCanvas(LandPatch.Canvas, xxt * 2, (y + 2) * yyt, xxt * 2, yyt, 376 DitherMask.Canvas, 0, 0, SRCAND); 377 378 FreeAndNil(LandMore); 379 FreeAndNil(OceanMore); 380 FreeAndNil(DitherMask); 153 I: Integer; 154 X: Integer; 155 Y: Integer; 156 Border: Boolean; 157 begin 158 SetLength(MaskLine, yyt * 3); 381 159 382 160 // reduce size of terrain icons … … 385 163 Mask24.PixelFormat := pf24bit; 386 164 Mask24.BeginUpdate; 387 for ySrc := 0 to TerrainIconLines - 1 do 388 begin 165 for ySrc := 0 to TerrainIconLines - 1 do begin 389 166 for i := 0 to yyt * 3 - 1 do 390 167 MaskLine[i] := PixelPointer(Mask24, 0, 1 + ySrc * (yyt * 3 + 1) + i); 391 for xSrc := 0 to 9 - 1 do 392 begin 168 for xSrc := 0 to TerrainIconCols - 1 do begin 393 169 i := ySrc * 9 + xSrc; 394 170 TSpriteSize[i].Left := 0; … … 428 204 if Border then Dec(TSpriteSize[i].Bottom); 429 205 until not Border or (TSpriteSize[i].Bottom = TSpriteSize[i].Top); 430 end 206 end; 431 207 end; 432 208 Mask24.EndUpdate; 433 209 FreeAndNil(Mask24); 434 435 if Borders <> nil then 436 FreeAndNil(Borders); 437 Borders := TBitmap.Create; 438 Borders.PixelFormat := pf24bit; 210 end; 211 212 function ApplyTileSize(ATileSize: TTileSize): boolean; 213 var 214 x: Integer; 215 y: Integer; 216 xSrc: Integer; 217 ySrc: Integer; 218 HGrTerrainNew: TGraphicSet; 219 HGrCitiesNew: TGraphicSet; 220 Age: Integer; 221 Size: Integer; 222 LandMore: TBitmap; 223 OceanMore: TBitmap; 224 DitherMask: TBitmap; 225 xxtNew: Integer; 226 yytNew: Integer; 227 begin 228 xxtNew := TileSizes[ATileSize].X; 229 yytNew := TileSizes[ATileSize].Y; 230 result := false; 231 HGrTerrainNew := LoadGraphicSet(Format('Terrain%dx%d.png', 232 [xxtNew * 2, yytNew * 2])); 233 if not Assigned(HGrTerrainNew) then 234 exit; 235 HGrCitiesNew := LoadGraphicSet(Format('Cities%dx%d.png', 236 [xxtNew * 2, yytNew * 2])); 237 if not Assigned(HGrCitiesNew) then 238 exit; 239 xxt := xxtNew; 240 yyt := yytNew; 241 TileSize := ATileSize; 242 HGrTerrain := HGrTerrainNew; 243 HGrCities := HGrCitiesNew; 244 Result := true; 245 246 // prepare age 2+3 cities 247 for age := 2 to 3 do 248 for size := 0 to 3 do 249 with CitiesPictures[age, size] do 250 FindPosition(HGrCities, size * (xxt * 2 + 1), (age - 2) * (yyt * 3 + 1), 251 xxt * 2 - 1, yyt * 3 - 1, $00FFFF, xShield, yShield); 252 253 { prepare dithered ground tiles } 254 if not Assigned(LandPatch) then begin 255 LandPatch := TBitmap.Create; 256 LandPatch.PixelFormat := pf24bit; 257 end; 258 LandPatch.Canvas.Brush.Color := 0; 259 LandPatch.SetSize(xxt * 18, yyt * 9); 260 LandPatch.Canvas.FillRect(0, 0, LandPatch.Width, LandPatch.Height); 261 if not Assigned(OceanPatch) then begin 262 OceanPatch := TBitmap.Create; 263 OceanPatch.PixelFormat := pf24bit; 264 end; 265 OceanPatch.Canvas.Brush.Color := 0; 266 OceanPatch.SetSize(xxt * 8, yyt * 4); 267 OceanPatch.Canvas.FillRect(0, 0, OceanPatch.Width, OceanPatch.Height); 268 LandMore := TBitmap.Create; 269 LandMore.PixelFormat := pf24bit; 270 LandMore.Canvas.Brush.Color := 0; 271 LandMore.SetSize(xxt * 18, yyt * 9); 272 LandMore.Canvas.FillRect(0, 0, LandMore.Width, LandMore.Height); 273 OceanMore := TBitmap.Create; 274 OceanMore.PixelFormat := pf24bit; 275 OceanMore.Canvas.Brush.Color := 0; 276 OceanMore.SetSize(xxt * 8, yyt * 4); 277 OceanMore.Canvas.FillRect(0, 0, OceanMore.Width, OceanMore.Height); 278 DitherMask := TBitmap.Create; 279 DitherMask.PixelFormat := pf24bit; 280 DitherMask.SetSize(xxt * 2, yyt * 2); 281 DitherMask.Canvas.FillRect(0, 0, DitherMask.Width, DitherMask.Height); 282 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 283 HGrTerrain.Mask.Canvas, 1 + 7 * (xxt * 2 + 1), 284 1 + yyt + 15 * (yyt * 3 + 1), SRCAND); 285 286 for x := -1 to 6 do begin 287 if x = -1 then begin 288 xSrc := ShoreDither * (xxt * 2 + 1) + 1; 289 ySrc := 1 + yyt; 290 end 291 else if x = 6 then begin 292 xSrc := 1 + (xxt * 2 + 1) * 2; 293 ySrc := 1 + yyt + (yyt * 3 + 1) * 2; 294 end else begin 295 xSrc := (x + 2) * (xxt * 2 + 1) + 1; 296 ySrc := 1 + yyt; 297 end; 298 for y := -1 to 6 do 299 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 300 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc); 301 for y := -2 to 6 do 302 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, xxt, 303 yyt, HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 304 SRCPAINT); 305 for y := -2 to 6 do 306 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2) + xxt, (y + 2) * yyt, 307 xxt, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, 308 SRCPAINT); 309 for y := -2 to 6 do 310 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, xxt, 311 yyt, DitherMask.Canvas, xxt, yyt, SRCAND); 312 for y := -2 to 6 do 313 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2) + xxt, (y + 2) * yyt, 314 xxt, yyt, DitherMask.Canvas, 0, yyt, SRCAND); 315 end; 316 317 for y := -1 to 6 do begin 318 if y = -1 then begin 319 xSrc := ShoreDither * (xxt * 2 + 1) + 1; 320 ySrc := 1 + yyt; 321 end 322 else if y = 6 then begin 323 xSrc := 1 + 2 * (xxt * 2 + 1); 324 ySrc := 1 + yyt + 2 * (yyt * 3 + 1); 325 end else begin 326 xSrc := (y + 2) * (xxt * 2 + 1) + 1; 327 ySrc := 1 + yyt; 328 end; 329 for x := -2 to 6 do 330 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 331 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc); 332 BitBltCanvas(LandMore.Canvas, xxt * 2, (y + 2) * yyt, xxt, yyt, 333 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, SRCPAINT); 334 for x := 0 to 7 do 335 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2) - xxt, (y + 2) * yyt, 336 xxt * 2, yyt, HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, 337 SRCPAINT); 338 for x := -2 to 6 do 339 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 340 xxt * 2, yyt, DitherMask.Canvas, 0, 0, SRCAND); 341 end; 342 343 for x := 0 to 3 do begin 344 for y := 0 to 3 do begin 345 if (x = 1) and (y = 1) then xSrc := 1 346 else 347 xSrc := (x mod 2) * (xxt * 2 + 1) + 1; 348 ySrc := 1 + yyt; 349 if (x >= 1) = (y >= 2) then 350 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 351 HGrTerrain.Data.Canvas, xSrc, ySrc); 352 if (x >= 1) and ((y < 2) or (x >= 2)) then 353 begin 354 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 355 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 356 SRCPAINT); 357 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 358 HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, SRCPAINT); 359 end; 360 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 361 DitherMask.Canvas, xxt, yyt, SRCAND); 362 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 363 DitherMask.Canvas, 0, yyt, SRCAND); 364 end; 365 end; 366 367 for y := 0 to 3 do begin 368 for x := 0 to 3 do begin 369 if (x = 1) and (y = 1) then xSrc := 1 370 else 371 xSrc := (y mod 2) * (xxt * 2 + 1) + 1; 372 ySrc := 1 + yyt; 373 if (x < 1) or (y >= 2) then 374 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 375 HGrTerrain.Data.Canvas, xSrc, ySrc); 376 if (x = 1) and (y < 2) or (x >= 2) and (y >= 1) then 377 begin 378 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt, yyt, 379 HGrTerrain.Data.Canvas, xSrc + xxt, ySrc + yyt, 380 SRCPAINT); 381 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2) + xxt, y * yyt, xxt, yyt, 382 HGrTerrain.Data.Canvas, xSrc, ySrc + yyt, SRCPAINT); 383 end; 384 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 385 DitherMask.Canvas, 0, 0, SRCAND); 386 end; 387 end; 388 389 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 390 DitherMask.Canvas, 0, 0, DSTINVERT); { invert dither mask } 391 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt * 2, 392 HGrTerrain.Mask.Canvas, 1, 1 + yyt, SRCPAINT); 393 394 for x := -1 to 6 do 395 for y := -2 to 6 do 396 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), (y + 2) * yyt, 397 xxt * 2, yyt, DitherMask.Canvas, 0, 0, SRCAND); 398 399 for y := -1 to 6 do 400 for x := -2 to 7 do 401 BitBltCanvas(LandMore.Canvas, (x + 2) * (xxt * 2) - xxt, (y + 2) * yyt, 402 xxt * 2, yyt, DitherMask.Canvas, 0, yyt, SRCAND); 403 404 BitBltCanvas(LandPatch.Canvas, 0, 0, (xxt * 2) * 9, yyt * 9, 405 LandMore.Canvas, 0, 0, SRCPAINT); 406 407 for x := 0 to 3 do 408 for y := 0 to 3 do 409 BitBltCanvas(OceanPatch.Canvas, x * (xxt * 2), y * yyt, xxt * 2, yyt, 410 DitherMask.Canvas, 0, 0, SRCAND); 411 412 for y := 0 to 3 do 413 for x := 0 to 4 do 414 BitBltCanvas(OceanMore.Canvas, x * (xxt * 2) - xxt, y * yyt, xxt * 2, 415 yyt, DitherMask.Canvas, 0, yyt, SRCAND); 416 417 BitBltCanvas(OceanPatch.Canvas, 0, 0, (xxt * 2) * 4, yyt * 4, 418 OceanMore.Canvas, 0, 0, SRCPAINT); 419 420 with DitherMask.Canvas do begin 421 Brush.Color := $FFFFFF; 422 FillRect(Rect(0, 0, xxt * 2, yyt)); 423 end; 424 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt, 425 HGrTerrain.Mask.Canvas, 1, 1 + yyt); 426 427 for x := 0 to 6 do 428 BitBltCanvas(LandPatch.Canvas, (x + 2) * (xxt * 2), yyt, xxt * 2, yyt, 429 DitherMask.Canvas, 0, 0, SRCAND); 430 BitBltCanvas(DitherMask.Canvas, 0, 0, xxt * 2, yyt, DitherMask.Canvas, 431 0, 0, DSTINVERT); 432 433 for y := 0 to 6 do 434 BitBltCanvas(LandPatch.Canvas, xxt * 2, (y + 2) * yyt, xxt * 2, yyt, 435 DitherMask.Canvas, 0, 0, SRCAND); 436 437 FreeAndNil(LandMore); 438 FreeAndNil(OceanMore); 439 FreeAndNil(DitherMask); 440 441 ReduceTerrainIconsSize; 442 443 if not Assigned(Borders) then begin 444 Borders := TBitmap.Create; 445 Borders.PixelFormat := pf24bit; 446 end; 439 447 Borders.SetSize(xxt * 2, (yyt * 2) * nPl); 440 448 Borders.Canvas.FillRect(0, 0, Borders.Width, Borders.Height); … … 548 556 PureBlack: boolean = false); 549 557 var 550 Width, Height, xSrc, ySrc: integer; 558 Width: Integer; 559 Height: Integer; 560 xSrc: Integer; 561 ySrc: integer; 551 562 begin 552 563 Width := TSpriteSize[grix].Right - TSpriteSize[grix].Left; … … 556 567 xDst := xDst + TSpriteSize[grix].Left; 557 568 yDst := yDst - yyt + TSpriteSize[grix].Top; 558 if xDst < FLeft then 559 begin 569 if xDst < FLeft then begin 560 570 Width := Width - (FLeft - xDst); 561 571 xSrc := xSrc + (FLeft - xDst); 562 xDst := FLeft 563 end; 564 if yDst < FTop then 565 begin 572 xDst := FLeft; 573 end; 574 if yDst < FTop then begin 566 575 Height := Height - (FTop - yDst); 567 576 ySrc := ySrc + (FTop - yDst); 568 yDst := FTop 577 yDst := FTop; 569 578 end; 570 579 if xDst + Width >= FRight then … … 792 801 if MyMap[dLoc(Loc, -1, 1)] and Mask = Cardinal(Value) then 793 802 inc(result, 4); 794 end 803 end; 795 804 end; 796 805 … … 806 815 (MyMap[ConnLoc] and Mask <> 0) then 807 816 inc(result, 1 shl Dir); 808 end 817 end; 809 818 end; 810 819 … … 820 829 ((MyMap[ConnLoc] - 2) and fTerrain < 13) then 821 830 inc(result, 1 shl Dir); 822 end 831 end; 823 832 end; 824 833 … … 925 934 if Conn and (1 shl Dir) <> 0 then { canal mouths } 926 935 TSprite(x, y, spCanalMouths + 1 + Dir); 927 end 936 end; 928 937 end; 929 938 … … 1068 1077 BitBltBitmap(Borders, x + dx * xxt, y + dy * yyt, xxt, yyt, dx * xxt, 1069 1078 p1 * (yyt * 2) + dy * yyt, SRCPAINT); 1070 end 1079 end; 1071 1080 end; 1072 1081 end 1073 end 1082 end; 1074 1083 end; 1075 1084 end; … … 1094 1103 NameCity; 1095 1104 ShowSpacePort; 1096 exit 1105 exit; 1097 1106 end; { square not discovered } 1098 1107 … … 1303 1312 moveto(x0, y + dy0 * yyt); 1304 1313 lineto(x1, y + (dy0 + n) * yyt); 1305 end 1314 end; 1306 1315 end; 1307 1316 … … 1407 1416 lineto(xm + xxt * 4, ym - yyt * 1); 1408 1417 pen.Width := 1; 1409 end 1418 end; 1410 1419 end; 1411 1420 … … 1566 1575 BitBltBitmap(LandPatch, x + dx * xxt, y + dy * yyt, xxt, yyt, 1567 1576 Aix * (xxt * 2) + (dx + dy + 1) and 1 * xxt, bix * yyt, SRCCOPY) 1568 end 1577 end; 1569 1578 end; 1570 1579
Note:
See TracChangeset
for help on using the changeset viewer.