hedgewars/uLandGraphics.pas
author nemo
Tue, 08 Sep 2009 19:44:49 +0000
changeset 2357 babe1a55e284
parent 2331 e4941a7986d6
child 2376 ece7b87f1334
permissions -rw-r--r--
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
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
883
07a568ba44e0 Update copyright info in source files headers
unc0rr
parents: 855
diff changeset
     3
 * Copyright (c) 2005-2008 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
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    19
unit uLandGraphics;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    20
interface
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
    21
uses uFloat, uConsts;
345
fa39c61be4de Some fixes, revert debug code
unc0rr
parents: 196
diff changeset
    22
{$INCLUDE options.inc}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    23
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    24
type PRangeArray = ^TRangeArray;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    25
     TRangeArray = array[0..31] of record
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    26
                                   Left, Right: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    27
                                   end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    28
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
    29
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
    30
function Despeckle(X, Y: LongInt): boolean;
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
    31
function CheckLandValue(X, Y: LongInt; Color: Word): boolean;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    32
procedure DrawExplosion(X, Y, Radius: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    33
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    34
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    35
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    36
procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet: boolean);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    37
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
    38
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
    39
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    40
implementation
1806
3c4f0886c123 More reorganization
unc0rr
parents: 1792
diff changeset
    41
uses SDLh, uMisc, uLand, uLandTexture;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    42
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    43
procedure FillCircleLines(x, y, dx, dy: LongInt; Value: Longword);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
    44
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    45
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    46
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    47
    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
    48
        if Land[y + dy, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    49
            Land[y + dy, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    50
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    51
   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
    52
        if Land[y - dy, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    53
            Land[y - dy, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    54
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    55
    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
    56
        if Land[y + dx, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    57
            Land[y + dx, i]:= Value;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    58
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    59
    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
    60
        if Land[y - dx, i] <> COLOR_INDESTRUCTIBLE then
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    61
            Land[y - dx, i]:= Value;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    62
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
    63
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    64
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
    65
var i: LongInt;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
    66
begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    67
if not doSet then
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    68
   begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    69
   if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    70
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    71
          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
    72
   if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    73
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    74
          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
    75
   if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    76
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    77
          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
    78
   if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
    79
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
1861
unc0rr
parents: 1849
diff changeset
    80
          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
    81
   end else
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    82
   begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    83
   if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    84
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do 
unc0rr
parents: 1849
diff changeset
    85
          if (Land[y + dy, i] < 256) then
unc0rr
parents: 1849
diff changeset
    86
              inc(Land[y + dy, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    87
   if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    88
      for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do 
unc0rr
parents: 1849
diff changeset
    89
          if (Land[y - dy, i] < 256) then
unc0rr
parents: 1849
diff changeset
    90
              inc(Land[y - dy, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    91
   if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    92
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
unc0rr
parents: 1849
diff changeset
    93
          if (Land[y + dx, i] < 256) then
unc0rr
parents: 1849
diff changeset
    94
              inc(Land[y + dx, i]);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
    95
   if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1861
unc0rr
parents: 1849
diff changeset
    96
      for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
unc0rr
parents: 1849
diff changeset
    97
          if (Land[y - dx, i] < 256) then
unc0rr
parents: 1849
diff changeset
    98
              inc(Land[y - dx, i]);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
    99
   end
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   100
end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   101
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   102
procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   103
var dx, dy, d: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   104
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   105
  dx:= 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   106
  dy:= Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   107
  d:= 3 - 2 * Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   108
  while (dx < dy) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   109
     begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   110
     FillCircleLines(x, y, dx, dy, Value);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   111
     if (d < 0)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   112
     then d:= d + 4 * dx + 6
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   113
     else begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   114
          d:= d + 4 * (dx - dy) + 10;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   115
          dec(dy)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   116
          end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   117
     inc(dx)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   118
     end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   119
  if (dx = dy) then FillCircleLines(x, y, dx, dy, Value);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   120
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   121
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   122
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
   123
var dx, dy, d: LongInt;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   124
begin
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   125
  dx:= 0;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   126
  dy:= Radius;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   127
  d:= 3 - 2 * Radius;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   128
  while (dx < dy) do
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   129
     begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   130
     ChangeCircleLines(x, y, dx, dy, doSet);
504
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   131
     if (d < 0)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   132
     then d:= d + 4 * dx + 6
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   133
     else begin
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   134
          d:= d + 4 * (dx - dy) + 10;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   135
          dec(dy)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   136
          end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   137
     inc(dx)
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   138
     end;
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   139
  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
   140
end;
13b6ebc53627 Fix collision info artifacts in Land array when two objects intersect
unc0rr
parents: 495
diff changeset
   141
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   142
procedure FillLandCircleLines0(x, y, dx, dy: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   143
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   144
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   145
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   146
    for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do 
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   147
        if Land[y + dy, i] = COLOR_LAND then
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   148
            LandPixels[y + dy, i]:= 0;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   149
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   150
    for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do 
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   151
        if Land[y - dy, i] = COLOR_LAND then
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   152
             LandPixels[y - dy, i]:= 0;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   153
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   154
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do 
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   155
        if Land[y + dx, i] = COLOR_LAND then
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   156
            LandPixels[y + dx, i]:= 0;
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   157
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   158
    for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do 
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   159
        if Land[y - dx, i] = COLOR_LAND then
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   160
             LandPixels[y - dx, i]:= 0;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   161
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   162
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   163
procedure FillLandCircleLinesEBC(x, y, dx, dy: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   164
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   165
begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   166
if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   167
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
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
   168
       if Land[y + dy, i] = COLOR_LAND then 
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
   169
          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
   170
          LandPixels[y + dy, i]:= cExplosionBorderColor;
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
   171
//          Despeckle(y + dy, i);
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
   172
          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
   173
          end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   174
if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   175
   for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do
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
   176
       if Land[y - dy, i] = COLOR_LAND then
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
   177
          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
   178
          LandPixels[y - dy, i]:= cExplosionBorderColor;
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
   179
//          Despeckle(y - dy, i);
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
   180
          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
   181
          end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   182
if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   183
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
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
   184
       if Land[y + dx, i] = COLOR_LAND then
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
   185
           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
   186
           LandPixels[y + dx, i]:= cExplosionBorderColor;
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
   187
//           Despeckle(y + dx, i);
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
   188
           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
   189
           end;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   190
if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
1760
55a1edd97911 Fix nemo's large land patch
unc0rr
parents: 1753
diff changeset
   191
   for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do
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
   192
       if Land[y - dx, i] = COLOR_LAND then
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
   193
          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
   194
          LandPixels[y - dx, i]:= cExplosionBorderColor;
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
   195
//          Despeckle(y - dx, i);
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
   196
          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
   197
          end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   198
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   199
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   200
procedure DrawExplosion(X, Y, Radius: LongInt);
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   201
var dx, dy, ty, tx, d: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   202
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   203
  dx:= 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   204
  dy:= Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   205
  d:= 3 - 2 * Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   206
  while (dx < dy) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   207
     begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   208
     FillLandCircleLines0(x, y, dx, dy);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   209
     if (d < 0)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   210
     then d:= d + 4 * dx + 6
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   211
     else begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   212
          d:= d + 4 * (dx - dy) + 10;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   213
          dec(dy)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   214
          end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   215
     inc(dx)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   216
     end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   217
  if (dx = dy) then FillLandCircleLines0(x, y, dx, dy);
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   218
  // FillRoundInLand after erasing land pixels to allow Land 0 check for mask.png to function
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   219
  FillRoundInLand(X, Y, Radius, 0);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   220
  inc(Radius, 4);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   221
  dx:= 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   222
  dy:= Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   223
  d:= 3 - 2 * Radius;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   224
  while (dx < dy) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   225
     begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   226
     FillLandCircleLinesEBC(x, y, dx, dy);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   227
     if (d < 0)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   228
     then d:= d + 4 * dx + 6
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   229
     else begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   230
          d:= d + 4 * (dx - dy) + 10;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   231
          dec(dy)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   232
          end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   233
     inc(dx)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   234
     end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   235
  if (dx = dy) then FillLandCircleLinesEBC(x, y, dx, dy);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   236
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   237
tx:= max(X - Radius - 1, 0);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   238
dx:= min(X + Radius + 1, LAND_WIDTH) - tx;
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   239
ty:= max(Y - Radius - 1, 0);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   240
dy:= min(Y + Radius + 1, LAND_HEIGHT) - ty;
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   241
UpdateLandTexture(tx, dx, ty, dy)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   242
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   243
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   244
procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   245
var tx, ty, i: LongInt;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   246
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   247
for i:= 0 to Pred(Count) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   248
    begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   249
    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
   250
        for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1809
diff changeset
   251
            if Land[ty, tx] = COLOR_LAND then
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   252
                LandPixels[ty, tx]:= 0;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   253
    inc(y, dY)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   254
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   255
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   256
inc(Radius, 4);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   257
dec(y, Count * dY);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   258
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   259
for i:= 0 to Pred(Count) do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   260
    begin
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   261
    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
   262
        for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   263
            if Land[ty, tx] = COLOR_LAND 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
   264
                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
   265
                LandPixels[ty, tx]:= cExplosionBorderColor;
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
   266
                LandDirty[trunc((y + dy)/32), trunc(i/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
   267
                end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   268
    inc(y, dY)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   269
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   270
818
635e58295079 Fix drill bug
unc0rr
parents: 772
diff changeset
   271
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   272
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   273
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   274
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   275
//
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   276
//  - (dX, dY) - direction, vector of length = 0.5
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   277
//
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 358
diff changeset
   278
procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt);
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   279
var nx, ny, dX8, dY8: hwFloat;
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   280
    i, t, tx, ty, stX, stY, ddy, ddx: Longint;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   281
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
   282
stY:= hwRound(Y);
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   283
stX:= hwRound(X);
772
e8d530ca77be Don't update all land texture when drawing tunnel (saves video throughput)
unc0rr
parents: 769
diff changeset
   284
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   285
nx:= X + dY * (HalfWidth + 8);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   286
ny:= Y - dX * (HalfWidth + 8);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   287
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   288
dX8:= dX * 8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   289
dY8:= dY * 8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   290
for i:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   291
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   292
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   293
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   294
    for t:= -8 to ticks + 8 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   295
        {$include tunsetborder.inc}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   296
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   297
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   298
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   299
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   300
for i:= -HalfWidth to HalfWidth do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   301
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   302
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   303
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   304
    for t:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   305
        {$include tunsetborder.inc}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   306
    X:= nx;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   307
    Y:= ny;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   308
    for t:= 0 to ticks do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   309
        begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   310
        X:= X + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   311
        Y:= Y + dY;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   312
        tx:= hwRound(X);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 345
diff changeset
   313
        ty:= hwRound(Y);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   314
        if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) then
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   315
         if Land[ty, tx] = COLOR_LAND then
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   316
           begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   317
           Land[ty, tx]:= 0;
768
2886dafa5bcf Store Land surface in memory:
unc0rr
parents: 767
diff changeset
   318
           LandPixels[ty, tx]:= 0;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   319
           end
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   320
        end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   321
    for t:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   322
        {$include tunsetborder.inc}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   323
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   324
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   325
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   326
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   327
for i:= 0 to 7 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   328
    begin
358
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   329
    X:= nx - dX8;
236bbd12d4d9 - New Land Generator
unc0rr
parents: 351
diff changeset
   330
    Y:= ny - dY8;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   331
    for t:= -8 to ticks + 8 do
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   332
        {$include tunsetborder.inc}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   333
    nx:= nx - dY;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   334
    ny:= ny + dX;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   335
    end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   336
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   337
tx:= max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0);
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   338
ty:= max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0);
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   339
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
   340
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
   341
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   342
UpdateLandTexture(tx, ddx, ty, ddy)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   343
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   344
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   345
function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean;
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   346
var X, Y, bpp, h, w, row, col, numFramesFirstCol: LongInt;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   347
    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
   348
    Image: PSDL_Surface;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   349
begin
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   350
numFramesFirstCol:= SpritesData[Obj].imageHeight div SpritesData[Obj].Height;
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   351
769
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   352
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
   353
Image:= SpritesData[Obj].Surface;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   354
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
   355
h:= SpritesData[Obj].Height;
2235
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   356
row:= Frame mod numFramesFirstCol;
79c9542c1058 multi-column support
nemo
parents: 2167
diff changeset
   357
col:= Frame div numFramesFirstCol;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   358
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   359
if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   360
   SDLTry(SDL_LockSurface(Image) >= 0, true);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   361
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   362
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
   363
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
   364
// Check that sprite fits free space
2236
af8fc3311748 the -1 was a bad idea
nemo
parents: 2235
diff changeset
   365
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]);
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   366
case bpp of
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   367
     4: for y:= 0 to Pred(h) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   368
            begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   369
            for x:= 0 to Pred(w) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   370
                if PLongword(@(p^[x * 4]))^ <> 0 then
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   371
                   if ((cpY + y) < Longint(topY)) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   372
                      ((cpY + y) > LAND_HEIGHT) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   373
                      ((cpX + x) < Longint(leftX)) or
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   374
                      ((cpX + x) > Longint(rightX)) or
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   375
                      (Land[cpY + y, cpX + x] <> 0) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   376
                      begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   377
                      if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   378
                         SDL_UnlockSurface(Image);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   379
                      exit(false)
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   380
                      end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   381
            p:= @(p^[Image^.pitch]);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   382
            end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   383
     end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   384
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   385
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
   386
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
   387
   begin
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   388
   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
   389
      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
   390
   exit
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   391
   end;
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 511
diff changeset
   392
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   393
// Checked, now place
2236
af8fc3311748 the -1 was a bad idea
nemo
parents: 2235
diff changeset
   394
p:= @(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]);
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   395
case bpp of
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   396
     4: for y:= 0 to Pred(h) do
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   397
            begin
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   398
            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
   399
                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
   400
                   begin
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   401
                   Land[cpY + y, cpX + x]:= COLOR_LAND;
788efc1d649f - Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
unc0rr
parents: 768
diff changeset
   402
                   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
   403
                   end;
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   404
            p:= @(p^[Image^.pitch]);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   405
            end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   406
     end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   407
if SDL_MustLock(Image) then
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   408
   SDL_UnlockSurface(Image);
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   409
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   410
x:= max(cpX, leftX);
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   411
w:= min(cpX + Image^.w, LAND_WIDTH) - x;
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   412
y:= max(cpY, topY);
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   413
h:= min(cpY + Image^.h, LAND_HEIGHT) - y;
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1806
diff changeset
   414
UpdateLandTexture(x, w, y, h)
409
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   415
end;
4f1841929ccc Construction tool
unc0rr
parents: 393
diff changeset
   416
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
   417
// 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
   418
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
   419
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
   420
begin
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   421
if (Land[Y, X] <> 0) and (Land[Y, X] <> COLOR_INDESTRUCTIBLE) and (LandPixels[Y, X] = cExplosionBorderColor)then // check neighbours
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
   422
	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
   423
	c:= 0;
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
   424
	for i:= -1 to 1 do
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
   425
		for j:= -1 to 1 do
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
   426
			if (i <> 0) or (j <> 0) then
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
   427
				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
   428
				ny:= Y + i;
00e8dadce69a Add nemo's depixeling patch. Still needs some polishing for the case when we delete pixel on which hedgehog stays
unc0rr
parents: 1066
diff changeset
   429
				nx:= X + j;
1753
2ccba26f1aa4 Apply nemo's world resize patch
unc0rr
parents: 1738
diff changeset
   430
				if ((ny and LAND_HEIGHT_MASK) = 0) and ((nx and LAND_WIDTH_MASK) = 0) then
1892
fddc1201df25 Some tweaks by nemo
unc0rr
parents: 1861
diff changeset
   431
					if Land[ny, nx] > 255 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
   432
						inc(c);
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
   433
				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
   434
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
   435
	if c < 4 then // 0-3 neighbours
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
   436
		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
   437
		LandPixels[Y, X]:= 0;
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
   438
		Land[Y, X]:= 0;
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
   439
		exit(true);
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
   440
		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
   441
	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
   442
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
   443
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
   444
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   445
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
   446
var x, y, xx, yy: LongInt;
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
   447
    Result, 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
   448
begin
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   449
Result:= false;
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   450
1761
c7038eade58d Fix width/height dependant consts
unc0rr
parents: 1760
diff changeset
   451
for y:= 0 to LAND_HEIGHT div 32 - 1 do
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
   452
	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
   453
	
1761
c7038eade58d Fix width/height dependant consts
unc0rr
parents: 1760
diff changeset
   454
	for x:= 0 to LAND_WIDTH div 32 - 1 do
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
   455
		begin
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   456
		if LandDirty[y, x] <> 0 then
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   457
			begin
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   458
			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
   459
            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
   460
            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
   461
                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
   462
                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
   463
                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
   464
                    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
   465
                        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
   466
                            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
   467
                            Result:= 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
   468
                            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
   469
                            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
   470
                            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
   471
                end;
1809
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   472
			if updateBlock then UpdateLandTexture(x * 32, 32, y * 32, 32);
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   473
			LandDirty[y, x]:= 0;
77923087a1ce Some optimization of land texture updating
unc0rr
parents: 1807
diff changeset
   474
			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
   475
		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
   476
	end;
1792
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   477
c30c6944bd49 engine part of nemo's patch
unc0rr
parents: 1761
diff changeset
   478
SweepDirty:= Result
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
   479
end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   480
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
   481
// 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
   482
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
   483
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
   484
     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
   485
end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 109
diff changeset
   486
end.