hedgewars/uLandGraphics.pas
author koda
Sat, 05 Jun 2010 14:07:58 +0000
changeset 3495 a6b4f351d400
parent 3236 4ab3917d7d44
child 3509 d72c2219595d
permissions -rw-r--r--
now engine can be optionally built as library, there's an example wrapper of how to use it building server is now disabled by default, saves users some headaches
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
393
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 883
diff changeset
     2
 * Hedgewars, a free turn based strategy game
3236
4ab3917d7d44 Update (c) lines to 2010 as unc0rr requested - they all had varying values so I just took the first year mentioned, then tacked on -2010
nemo
parents: 2981
diff changeset
     3
 * Copyright (c) 2005-2010 Andrey Korotaev <unC0Rr@gmail.com>
393
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     4
 *
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     8
 *
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    12
 * GNU General Public License for more details.
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    13
 *
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    14
 * You should have received a copy of the GNU General Public License
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    15
 * along with this program; if not, write to the Free Software
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    17
 *)
db01cc79f278 Update copyright information
unc0rr
parents: 371
diff changeset
    18
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
    19
{$INCLUDE "options.inc"}
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
    20
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    21
unit uLandGraphics;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    22
interface
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
    23
uses uFloat, uConsts;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    24
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    25
type PRangeArray = ^TRangeArray;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    26
     TRangeArray = array[0..31] of record
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    27
                                   Left, Right: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    28
                                   end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    29
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2695
diff changeset
    30
function  SweepDirty: boolean;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2695
diff changeset
    31
function  Despeckle(X, Y: LongInt): boolean;
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2695
diff changeset
    32
function  CheckLandValue(X, Y: LongInt; Color: Word): boolean;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    33
procedure DrawExplosion(X, Y, Radius: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    34
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    35
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    36
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    37
procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet: boolean);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    38
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
    39
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
    40
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    41
implementation
1806
3c4f0886c123 More reorganization
unc0rr
parents: 1792
diff changeset
    42
uses SDLh, uMisc, uLand, uLandTexture;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    43
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    44
procedure FillCircleLines(x, y, dx, dy: LongInt; Value: Longword);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    45
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    46
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    47
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    48
    for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    49
        if Land[y + dy, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    50
            Land[y + dy, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    51
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    52
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    53
        if Land[y - dy, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    54
            Land[y - dy, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    55
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    56
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    57
        if Land[y + dx, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    58
            Land[y + dx, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    59
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    60
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    61
        if Land[y - dx, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    62
            Land[y - dx, i]:= Value;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    63
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    64
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    65
procedure ChangeCircleLines(x, y, dx, dy: LongInt; doSet: boolean);
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
    66
var i: LongInt;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
    67
begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    68
if not doSet then
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    69
   begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    70
   if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    71
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    72
          if (Land[y + dy, i] > 0) and (Land[y + dy, i] < 256) then dec(Land[y + dy, i]); // check > 0 because explosion can erase collision data
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    73
   if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    74
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    75
          if (Land[y - dy, i] > 0) and (Land[y - dy, i] < 256) then dec(Land[y - dy, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    76
   if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    77
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    78
          if (Land[y + dx, i] > 0) and (Land[y + dx, i] < 256) then dec(Land[y + dx, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    79
   if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    80
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    81
          if (Land[y - dx, i] > 0) and (Land[y - dx, i] < 256) then dec(Land[y - dx, i]);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    82
   end else
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    83
   begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    84
   if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    85
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    86
          if (Land[y + dy, i] < 256) then
unc0rr
parents: 1849
diff changeset
    87
              inc(Land[y + dy, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    88
   if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
    89
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    90
          if (Land[y - dy, i] < 256) then
unc0rr
parents: 1849
diff changeset
    91
              inc(Land[y - dy, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    92
   if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    93
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
unc0rr
parents: 1849
diff changeset
    94
          if (Land[y + dx, i] < 256) then
unc0rr
parents: 1849
diff changeset
    95
              inc(Land[y + dx, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    96
   if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    97
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
unc0rr
parents: 1849
diff changeset
    98
          if (Land[y - dx, i] < 256) then
unc0rr
parents: 1849
diff changeset
    99
              inc(Land[y - dx, i]);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   100
   end
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   101
end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   102
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   103
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   104
var dx, dy, d: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   105
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   106
  dx:= 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   107
  dy:= Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   108
  d:= 3 - 2 * Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   109
  while (dx < dy) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   110
     begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   111
     FillCircleLines(x, y, dx, dy, Value);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   112
     if (d < 0)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   113
     then d:= d + 4 * dx + 6
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   114
     else begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   115
          d:= d + 4 * (dx - dy) + 10;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   116
          dec(dy)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   117
          end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   118
     inc(dx)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   119
     end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   120
  if (dx = dy) then FillCircleLines(x, y, dx, dy, Value);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   121
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   122
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   123
procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet: boolean);
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   124
var dx, dy, d: LongInt;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   125
begin
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   126
  dx:= 0;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   127
  dy:= Radius;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   128
  d:= 3 - 2 * Radius;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   129
  while (dx < dy) do
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   130
     begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   131
     ChangeCircleLines(x, y, dx, dy, doSet);
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   132
     if (d < 0)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   133
     then d:= d + 4 * dx + 6
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   134
     else begin
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   135
          d:= d + 4 * (dx - dy) + 10;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   136
          dec(dy)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   137
          end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   138
     inc(dx)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   139
     end;
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   140
  if (dx = dy) then ChangeCircleLines(x, y, dx, dy, doSet)
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   141
end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   142
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   143
procedure FillLandCircleLines0(x, y, dx, dy: LongInt);
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   144
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   145
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   146
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
   147
    for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
2981
d0471586a616 Fix basketball map and hog cannon.
nemo
parents: 2948
diff changeset
   148
        if (not isMap and (Land[y + dy, i] <> COLOR_INDESTRUCTIBLE)) or (Land[y + dy, i] = COLOR_LAND) then
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   149
            LandPixels[y + dy, i]:= 0;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   150
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
   151
    for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
2981
d0471586a616 Fix basketball map and hog cannon.
nemo
parents: 2948
diff changeset
   152
        if (not isMap and (Land[y - dy, i] <> COLOR_INDESTRUCTIBLE)) or (Land[y - dy, i] = COLOR_LAND) then
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   153
             LandPixels[y - dy, i]:= 0;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   154
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
   155
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
2981
d0471586a616 Fix basketball map and hog cannon.
nemo
parents: 2948
diff changeset
   156
        if (not isMap and (Land[y + dx, i] <> COLOR_INDESTRUCTIBLE)) or (Land[y + dx, i] = COLOR_LAND) then
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   157
            LandPixels[y + dx, i]:= 0;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   158
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
   159
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
2981
d0471586a616 Fix basketball map and hog cannon.
nemo
parents: 2948
diff changeset
   160
        if (not isMap and (Land[y - dx, i] <> COLOR_INDESTRUCTIBLE)) or (Land[y - dx, i] = COLOR_LAND) then
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   161
             LandPixels[y - dx, i]:= 0;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   162
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   163
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   164
procedure FillLandCircleLinesBG(x, y, dx, dy: LongInt);
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   165
var i: LongInt;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   166
begin
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   167
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   168
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   169
       if (Land[y + dy, i] = COLOR_LAND) then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   170
          LandPixels[y + dy, i]:= LandBackPixel(i, y + dy)
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   171
       else
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   172
          if (Land[y + dy, i] = COLOR_OBJECT) then LandPixels[y + dy, i]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   173
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   174
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   175
       if (Land[y - dy, i] = COLOR_LAND) then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   176
          LandPixels[y - dy, i]:= LandBackPixel(i, y - dy)
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   177
       else
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   178
          if (Land[y - dy, i] = COLOR_OBJECT) then LandPixels[y - dy, i]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   179
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   180
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   181
       if (Land[y + dx, i] = COLOR_LAND) then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   182
           LandPixels[y + dx, i]:= LandBackPixel(i, y + dx)
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   183
       else
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   184
          if (Land[y + dx, i] = COLOR_OBJECT) then LandPixels[y + dx, i]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   185
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   186
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   187
       if (Land[y - dx, i] = COLOR_LAND) then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   188
          LandPixels[y - dx, i]:= LandBackPixel(i, y - dx)
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   189
       else
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   190
          if (Land[y - dx, i] = COLOR_OBJECT) then LandPixels[y - dx, i]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   191
end;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   192
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   193
procedure FillLandCircleLinesEBC(x, y, dx, dy: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   194
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   195
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   196
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   197
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   198
       if (Land[y + dy, i] = COLOR_LAND) or (Land[y + dy, i] = COLOR_OBJECT) then
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   199
          begin
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   200
          LandPixels[y + dy, i]:= cExplosionBorderColor;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   201
          Despeckle(i, y + dy);
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   202
          LandDirty[(y + dy) div 32, i div 32]:= 1;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   203
          end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   204
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   205
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   206
       if (Land[y - dy, i] = COLOR_LAND) or (Land[y - dy, i] = COLOR_OBJECT) then
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   207
          begin
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   208
          LandPixels[y - dy, i]:= cExplosionBorderColor;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   209
          Despeckle(i, y - dy);
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   210
          LandDirty[(y - dy) div 32, i div 32]:= 1;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   211
          end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   212
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   213
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   214
       if (Land[y + dx, i] = COLOR_LAND) or (Land[y + dx, i] = COLOR_OBJECT) then
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   215
           begin
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   216
           LandPixels[y + dx, i]:= cExplosionBorderColor;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   217
           Despeckle(i, y + dx);
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   218
           LandDirty[(y + dx) div 32, i div 32]:= 1;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   219
           end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   220
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   221
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   222
       if (Land[y - dx, i] = COLOR_LAND) or (Land[y - dx, i] = COLOR_OBJECT) then
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   223
          begin
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   224
          LandPixels[y - dx, i]:= cExplosionBorderColor;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   225
          Despeckle(i, y - dy);
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   226
          LandDirty[(y - dx) div 32, i div 32]:= 1;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   227
          end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   228
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   229
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   230
procedure DrawExplosion(X, Y, Radius: LongInt);
2603
abed6070a669 revert previous commit to remove a wip patch
koda
parents: 2602
diff changeset
   231
var dx, dy, ty, tx, d: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   232
begin
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   233
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   234
// draw background land texture
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   235
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   236
    dx:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   237
    dy:= Radius;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   238
    d:= 3 - 2 * Radius;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   239
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   240
    while (dx < dy) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   241
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   242
        FillLandCircleLinesBG(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   243
        if (d < 0)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   244
        then d:= d + 4 * dx + 6
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   245
        else begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   246
            d:= d + 4 * (dx - dy) + 10;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   247
            dec(dy)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   248
            end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   249
        inc(dx)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   250
        end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   251
    if (dx = dy) then FillLandCircleLinesBG(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   252
    end;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   253
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   254
// draw a hole in land
2733
52a5a160566f Engine:
smxx
parents: 2716
diff changeset
   255
if Radius > 20 then
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   256
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   257
    dx:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   258
    dy:= Radius - 15;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   259
    d:= 3 - 2 * dy;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   260
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   261
    while (dx < dy) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   262
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   263
        FillLandCircleLines0(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   264
        if (d < 0)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   265
        then d:= d + 4 * dx + 6
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   266
        else begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   267
            d:= d + 4 * (dx - dy) + 10;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   268
            dec(dy)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   269
            end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   270
        inc(dx)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   271
        end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   272
    if (dx = dy) then FillLandCircleLines0(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   273
    end;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   274
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   275
  // FillRoundInLand after erasing land pixels to allow Land 0 check for mask.png to function
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   276
    FillRoundInLand(X, Y, Radius, 0);
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   277
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   278
// draw explosion border
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   279
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   280
    inc(Radius, 4);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   281
    dx:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   282
    dy:= Radius;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   283
    d:= 3 - 2 * Radius;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   284
    while (dx < dy) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   285
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   286
        FillLandCircleLinesEBC(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   287
        if (d < 0)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   288
        then d:= d + 4 * dx + 6
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   289
        else begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   290
            d:= d + 4 * (dx - dy) + 10;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   291
            dec(dy)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   292
            end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   293
        inc(dx)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   294
        end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   295
    if (dx = dy) then FillLandCircleLinesEBC(x, y, dx, dy);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   296
    end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   297
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   298
tx:= max(X - Radius - 1, 0);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   299
dx:= min(X + Radius + 1, LAND_WIDTH) - tx;
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   300
ty:= max(Y - Radius - 1, 0);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   301
dy:= min(Y + Radius + 1, LAND_HEIGHT) - ty;
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   302
UpdateLandTexture(tx, dx, ty, dy)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   303
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   304
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   305
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   306
var tx, ty, i: LongInt;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   307
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   308
for i:= 0 to Pred(Count) do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   309
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   310
    for ty:= max(y - Radius, 0) to min(y + Radius, LAND_HEIGHT) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   311
        for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   312
            if Land[ty, tx] = COLOR_LAND then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   313
                LandPixels[ty, tx]:= LandBackPixel(tx, ty)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   314
            else if Land[ty, tx] = COLOR_OBJECT then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   315
                LandPixels[ty, tx]:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   316
    inc(y, dY)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   317
    end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   318
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   319
inc(Radius, 4);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   320
dec(y, Count * dY);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   321
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   322
for i:= 0 to Pred(Count) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   323
    begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   324
    for ty:= max(y - Radius, 0) to min(y + Radius, LAND_HEIGHT) do
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   325
        for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   326
            if (Land[ty, tx] = COLOR_LAND) or (Land[ty, tx] = COLOR_OBJECT) then
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   327
                begin
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   328
                LandPixels[ty, tx]:= cExplosionBorderColor;
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   329
                LandDirty[(y + dy) shr 5, i shr 5]:= 1;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   330
                end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   331
    inc(y, dY)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   332
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   333
818
635e58295079 Fix drill bug
unc0rr
parents: 772
diff changeset
   334
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   335
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   336
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   337
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   338
//
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   339
//  - (dX, dY) - direction, vector of length = 0.5
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   340
//
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   341
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt);
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   342
var nx, ny, dX8, dY8: hwFloat;
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   343
    i, t, tx, ty, stX, stY, ddy, ddx: Longint;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   344
begin  // (-dY, dX) is (dX, dY) rotated by PI/2
772
e8d530ca77be Don't update all land texture when drawing tunnel (saves video throughput)
unc0rr
parents: 769
diff changeset
   345
stY:= hwRound(Y);
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   346
stX:= hwRound(X);
772
e8d530ca77be Don't update all land texture when drawing tunnel (saves video throughput)
unc0rr
parents: 769
diff changeset
   347
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   348
nx:= X + dY * (HalfWidth + 8);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   349
ny:= Y - dX * (HalfWidth + 8);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   350
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   351
dX8:= dX * 8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   352
dY8:= dY * 8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   353
for i:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   354
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   355
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   356
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   357
    for t:= -8 to ticks + 8 do
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   358
    begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   359
    X:= X + dX;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   360
    Y:= Y + dY;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   361
    tx:= hwRound(X);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   362
    ty:= hwRound(Y);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   363
    if ((ty and LAND_HEIGHT_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   364
       ((tx and LAND_WIDTH_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   365
       ((Land[ty, tx] = COLOR_LAND) or 
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   366
       (Land[ty, tx] = COLOR_OBJECT)) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   367
        LandPixels[ty, tx]:= cExplosionBorderColor
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   368
    end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   369
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   370
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   371
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   372
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   373
for i:= -HalfWidth to HalfWidth do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   374
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   375
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   376
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   377
    for t:= 0 to 7 do
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   378
    begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   379
    X:= X + dX;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   380
    Y:= Y + dY;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   381
    tx:= hwRound(X);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   382
    ty:= hwRound(Y);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   383
    if ((ty and LAND_HEIGHT_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   384
       ((tx and LAND_WIDTH_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   385
       ((Land[ty, tx] = COLOR_LAND) or 
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   386
       (Land[ty, tx] = COLOR_OBJECT)) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   387
        LandPixels[ty, tx]:= cExplosionBorderColor
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   388
    end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   389
    X:= nx;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   390
    Y:= ny;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   391
    for t:= 0 to ticks do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   392
        begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   393
        X:= X + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   394
        Y:= Y + dY;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   395
        tx:= hwRound(X);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   396
        ty:= hwRound(Y);
2741
7a84ce33f52f Fix crash in DrawTunnel
nemo
parents: 2733
diff changeset
   397
        if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (Land[ty, tx] <> COLOR_INDESTRUCTIBLE) then
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   398
            begin
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   399
            if Land[ty, tx] = COLOR_LAND then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   400
                LandPixels[ty, tx]:= LandBackPixel(tx, ty)
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   401
            else if Land[ty, tx] = COLOR_OBJECT then
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   402
                LandPixels[ty, tx]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   403
            Land[ty, tx]:= 0;
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   404
            end
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   405
        end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   406
    for t:= 0 to 7 do
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   407
    begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   408
    X:= X + dX;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   409
    Y:= Y + dY;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   410
    tx:= hwRound(X);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   411
    ty:= hwRound(Y);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   412
    if ((ty and LAND_HEIGHT_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   413
       ((tx and LAND_WIDTH_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   414
       ((Land[ty, tx] = COLOR_LAND) or 
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   415
       (Land[ty, tx] = COLOR_OBJECT)) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   416
        LandPixels[ty, tx]:= cExplosionBorderColor
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   417
    end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   418
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   419
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   420
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   421
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   422
for i:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   423
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   424
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   425
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   426
    for t:= -8 to ticks + 8 do
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   427
    begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   428
    X:= X + dX;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   429
    Y:= Y + dY;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   430
    tx:= hwRound(X);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   431
    ty:= hwRound(Y);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   432
    if ((ty and LAND_HEIGHT_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   433
       ((tx and LAND_WIDTH_MASK) = 0) and
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   434
       ((Land[ty, tx] = COLOR_LAND) or 
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   435
       (Land[ty, tx] = COLOR_OBJECT)) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   436
        LandPixels[ty, tx]:= cExplosionBorderColor
2666
2b8c8f16421e update SDLMain.m/.h to latest version
koda
parents: 2648
diff changeset
   437
    end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   438
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   439
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   440
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   441
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   442
tx:= max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0);
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   443
ty:= max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0);
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   444
ddx:= min(stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)), LAND_WIDTH) - tx;
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   445
ddy:= min(stY + HalfWidth * 2 + 4 + abs(hwRound(dY * ticks)), LAND_HEIGHT) - ty;
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   446
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   447
UpdateLandTexture(tx, ddx, ty, ddy)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   448
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   449
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   450
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean;
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   451
var X, Y, bpp, h, w, row, col, numFramesFirstCol: LongInt;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   452
    p: PByteArray;
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   453
    Image: PSDL_Surface;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   454
begin
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   455
numFramesFirstCol:= SpritesData[Obj].imageHeight div SpritesData[Obj].Height;
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   456
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   457
TryDo(SpritesData[Obj].Surface <> nil, 'Assert SpritesData[Obj].Surface failed', true);
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   458
Image:= SpritesData[Obj].Surface;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   459
w:= SpritesData[Obj].Width;
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   460
h:= SpritesData[Obj].Height;
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   461
row:= Frame mod numFramesFirstCol;
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   462
col:= Frame div numFramesFirstCol;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   463
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   464
if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   465
   SDLTry(SDL_LockSurface(Image) >= 0, true);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   466
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   467
bpp:= Image^.format^.BytesPerPixel;
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   468
TryDo(bpp = 4, 'It should be 32 bpp sprite', true);
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   469
// Check that sprite fits free space
2236
af8fc3311748 the -1 was a bad idea
nemo
parents: 2235
diff changeset
   470
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]);
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   471
case bpp of
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   472
     4: for y:= 0 to Pred(h) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   473
            begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   474
            for x:= 0 to Pred(w) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   475
                if PLongword(@(p^[x * 4]))^ <> 0 then
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   476
                   if ((cpY + y) < Longint(topY)) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   477
                      ((cpY + y) > LAND_HEIGHT) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   478
                      ((cpX + x) < Longint(leftX)) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   479
                      ((cpX + x) > Longint(rightX)) or
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   480
                      (Land[cpY + y, cpX + x] <> 0) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   481
                      begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   482
                      if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   483
                         SDL_UnlockSurface(Image);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   484
                      exit(false)
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   485
                      end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   486
            p:= @(p^[Image^.pitch]);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   487
            end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   488
     end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   489
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   490
TryPlaceOnLand:= true;
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   491
if not doPlace then
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   492
   begin
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   493
   if SDL_MustLock(Image) then
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   494
      SDL_UnlockSurface(Image);
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   495
   exit
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   496
   end;
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   497
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   498
// Checked, now place
2236
af8fc3311748 the -1 was a bad idea
nemo
parents: 2235
diff changeset
   499
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]);
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   500
case bpp of
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   501
     4: for y:= 0 to Pred(h) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   502
            begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   503
            for x:= 0 to Pred(w) do
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   504
                if PLongword(@(p^[x * 4]))^ <> 0 then
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   505
                   begin
2647
0e1208e92dfe Smaxx patch with tuning by me:
unc0rr
parents: 2646
diff changeset
   506
                   Land[cpY + y, cpX + x]:= COLOR_OBJECT;
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   507
                   LandPixels[cpY + y, cpX + x]:= PLongword(@(p^[x * 4]))^
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   508
                   end;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   509
            p:= @(p^[Image^.pitch]);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   510
            end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   511
     end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   512
if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   513
   SDL_UnlockSurface(Image);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   514
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   515
x:= max(cpX, leftX);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   516
w:= min(cpX + Image^.w, LAND_WIDTH) - x;
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   517
y:= max(cpY, topY);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   518
h:= min(cpY + Image^.h, LAND_HEIGHT) - y;
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   519
UpdateLandTexture(x, w, y, h)
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   520
end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   521
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   522
// was experimenting with applying as damage occurred.
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   523
function Despeckle(X, Y: LongInt): boolean;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   524
var nx, ny, i, j, c: LongInt;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   525
begin
2981
d0471586a616 Fix basketball map and hog cannon.
nemo
parents: 2948
diff changeset
   526
if (Land[Y, X] > 255) and (Land[Y, X] <> COLOR_INDESTRUCTIBLE) and (LandPixels[Y, X] = cExplosionBorderColor)then // check neighbours
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   527
    begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   528
    c:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   529
    for i:= -1 to 1 do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   530
        for j:= -1 to 1 do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   531
            if (i <> 0) or (j <> 0) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   532
                begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   533
                ny:= Y + i;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   534
                nx:= X + j;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   535
                if ((ny and LAND_HEIGHT_MASK) = 0) and ((nx and LAND_WIDTH_MASK) = 0) then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   536
                    if Land[ny, nx] > 255 then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   537
                        inc(c);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   538
                end;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   539
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   540
    if c < 4 then // 0-3 neighbours
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   541
        begin
2648
415a75d45693 Get rid of stupid ToggleLongInt and ToggleString functions
unc0rr
parents: 2647
diff changeset
   542
        if Land[Y, X] = COLOR_LAND then LandPixels[Y, X]:= LandBackPixel(X, Y) else LandPixels[Y, X]:= 0;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   543
        Land[Y, X]:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   544
        exit(true);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   545
        end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   546
    end;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   547
Despeckle:= false
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   548
end;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   549
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   550
function SweepDirty: boolean;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   551
var x, y, xx, yy: LongInt;
2695
ed789a7ef68d makes freepascal code compatible with OBJFPC mode
koda
parents: 2666
diff changeset
   552
    bRes, updateBlock, resweep: boolean;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   553
begin
2695
ed789a7ef68d makes freepascal code compatible with OBJFPC mode
koda
parents: 2666
diff changeset
   554
bRes:= false;
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   555
1761
c7038eade58d Fix width/height dependant consts
unc0rr
parents: 1760
diff changeset
   556
for y:= 0 to LAND_HEIGHT div 32 - 1 do
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   557
    begin
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2331
diff changeset
   558
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   559
    for x:= 0 to LAND_WIDTH div 32 - 1 do
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   560
        begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   561
        if LandDirty[y, x] <> 0 then
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   562
            begin
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   563
            updateBlock:= false;
2167
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   564
            resweep:= true;
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   565
            while(resweep) do
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   566
                begin
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   567
                resweep:= false;
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   568
                for yy:= y * 32 to y * 32 + 31 do
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   569
                    for xx:= x * 32 to x * 32 + 31 do
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   570
                        if Despeckle(xx, yy) then
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   571
                            begin
2695
ed789a7ef68d makes freepascal code compatible with OBJFPC mode
koda
parents: 2666
diff changeset
   572
                            bRes:= true;
2167
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   573
                            updateBlock:= true;
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   574
                            resweep:= true;
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   575
                            end;
4e9ad395c1d1 Loop sweeping to avoid stray pixels. Avoided at first hoping there was a cleverer approach. Fortunately sweep is infrequent.
nemo
parents: 1892
diff changeset
   576
                end;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   577
            if updateBlock then UpdateLandTexture(x * 32, 32, y * 32, 32);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   578
            LandDirty[y, x]:= 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   579
            end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   580
        end;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2741
diff changeset
   581
    end;
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   582
2695
ed789a7ef68d makes freepascal code compatible with OBJFPC mode
koda
parents: 2666
diff changeset
   583
SweepDirty:= bRes;
1738
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   584
end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   585
2331
e4941a7986d6 Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents: 2236
diff changeset
   586
// Return true if outside of land or not the value tested, used right now for some X/Y movement that does not use normal hedgehog movement in GSHandlers.inc
e4941a7986d6 Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents: 2236
diff changeset
   587
function CheckLandValue(X, Y: LongInt; Color: Word): boolean;
e4941a7986d6 Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents: 2236
diff changeset
   588
begin
e4941a7986d6 Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents: 2236
diff changeset
   589
     CheckLandValue:= ((X and LAND_WIDTH_MASK <> 0) or (Y and LAND_HEIGHT_MASK <> 0)) or (Land[Y, X] <> Color)
e4941a7986d6 Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents: 2236
diff changeset
   590
end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   591
end.