author | skidd13 |
Tue, 20 Nov 2007 14:11:19 +0000 | |
changeset 8428 | f8300c908bd9 |
parent 8223 | 6a034093dc1d |
child 8473 | 773b817b64d0 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
3 |
/** @file clear_cmd.cpp */ |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1878
diff
changeset
|
6 |
#include "openttd.h" |
3144
426b825578f9
(svn r3763) Adapt to the new 'map accessors go in foo_map.h'-scheme
tron
parents:
2989
diff
changeset
|
7 |
#include "clear_map.h" |
4041
caf4fcb4e05b
(svn r5309) Partially fix the rail header dependency fiasco: rail_map.h now depends on rail.h and not the other way round anymore
tron
parents:
4031
diff
changeset
|
8 |
#include "rail_map.h" |
507
8aa8100b0b22
(svn r815) Include strings.h only in the files which need it.
tron
parents:
473
diff
changeset
|
9 |
#include "table/strings.h" |
2163
637ec3c361f5
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2154
diff
changeset
|
10 |
#include "functions.h" |
679
e959706a3e4d
(svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
507
diff
changeset
|
11 |
#include "map.h" |
2154
63a6b880b4c0
(svn r2664) Remove depedency on player.h from variables.h
tron
parents:
2153
diff
changeset
|
12 |
#include "player.h" |
1209
a1ac96655b79
(svn r1713) Split off several functions which query/set information about a single tile from map.h and put them into a seperate file tile.h
tron
parents:
1202
diff
changeset
|
13 |
#include "tile.h" |
0 | 14 |
#include "viewport.h" |
15 |
#include "command.h" |
|
3156
028b6756b279
(svn r3779) Move CheckTunnelInWay() to a more appropriate place, invert its result and give it a less ambiguous name (IsTunnelInWay)
tron
parents:
3144
diff
changeset
|
16 |
#include "tunnel_map.h" |
5573
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
17 |
#include "bridge_map.h" |
6486
4f8af35b11eb
(svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium
parents:
6449
diff
changeset
|
18 |
#include "bridge.h" |
6669
487ac09b95c4
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6574
diff
changeset
|
19 |
#include "landscape.h" |
2153
91e89aa8c299
(svn r2663) Include variables.h only in these files which need it, not globally via openttd.h
tron
parents:
2150
diff
changeset
|
20 |
#include "variables.h" |
2517
b90693227193
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2436
diff
changeset
|
21 |
#include "table/sprites.h" |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
22 |
#include "unmovable_map.h" |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
23 |
#include "genworld.h" |
4328
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
24 |
#include "industry.h" |
7470
73cfc62015c9
(svn r10230) -Fix [FS#594]: terraforming wipes out canals. Now you always have to remove the canal before terraforming, instead of "just" removing the canal.
rubidium
parents:
7468
diff
changeset
|
25 |
#include "water_map.h" |
0 | 26 |
|
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
27 |
/* |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
28 |
* In one terraforming command all four corners of a initial tile can be raised/lowered (though this is not available to the player). |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
29 |
* The maximal amount of height modifications is archieved when raising a complete flat land from sea level to MAX_TILE_HEIGHT or vice versa. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
30 |
* This affects all corners with a manhatten distance smaller than MAX_TILE_HEIGHT to one of the initial 4 corners. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
31 |
* Their maximal amount is computed to 4 * \sum_{i=1}^{h_max} i = 2 * h_max * (h_max + 1). |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
32 |
*/ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
33 |
static const int TERRAFORMER_MODHEIGHT_SIZE = 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 1); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
34 |
|
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
35 |
/* |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
36 |
* The maximal amount of affected tiles (i.e. the tiles that incident with one of the corners above, is computed similiar to |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
37 |
* 1 + 4 * \sum_{i=1}^{h_max} (i+1) = 1 + 2 * h_max + (h_max + 3). |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
38 |
*/ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
39 |
static const int TERRAFORMER_TILE_TABLE_SIZE = 1 + 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 3); |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
40 |
|
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6573
diff
changeset
|
41 |
struct TerraformerHeightMod { |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
42 |
TileIndex tile; ///< Referenced tile. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
43 |
byte height; ///< New TileHeight (height of north corner) of the tile. |
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6573
diff
changeset
|
44 |
}; |
0 | 45 |
|
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6573
diff
changeset
|
46 |
struct TerraformerState { |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
47 |
int modheight_count; ///< amount of entries in "modheight". |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
48 |
int tile_table_count; ///< amount of entries in "tile_table". |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
49 |
|
8041
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
50 |
/** |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
51 |
* Dirty tiles, i.e.\ at least one corner changed. |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
52 |
* |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
53 |
* This array contains the tiles which are or will be marked as dirty. |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
54 |
* |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
55 |
* @ingroup dirty |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
56 |
*/ |
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
57 |
TileIndex tile_table[TERRAFORMER_TILE_TABLE_SIZE]; |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
58 |
TerraformerHeightMod modheight[TERRAFORMER_MODHEIGHT_SIZE]; ///< Height modifications. |
6574
e1d1a12faaf7
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6573
diff
changeset
|
59 |
}; |
0 | 60 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
61 |
/** |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
62 |
* Gets the TileHeight (height of north corner) of a tile as of current terraforming progress. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
63 |
* |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
64 |
* @param ts TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
65 |
* @param tile Tile. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
66 |
* @return TileHeight. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
67 |
*/ |
0 | 68 |
static int TerraformGetHeightOfTile(TerraformerState *ts, TileIndex tile) |
69 |
{ |
|
70 |
TerraformerHeightMod *mod = ts->modheight; |
|
71 |
int count; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
72 |
|
2639 | 73 |
for (count = ts->modheight_count; count != 0; count--, mod++) { |
74 |
if (mod->tile == tile) return mod->height; |
|
0 | 75 |
} |
76 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
77 |
/* TileHeight unchanged so far, read value from map. */ |
1044
9b73df700a7c
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
78 |
return TileHeight(tile); |
0 | 79 |
} |
80 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
81 |
/** |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
82 |
* Stores the TileHeight (height of north corner) of a tile in a TerraformerState. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
83 |
* |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
84 |
* @param ts TerraformerState. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
85 |
* @param tile Tile. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
86 |
* @param height New TileHeight. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
87 |
*/ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
88 |
static void TerraformSetHeightOfTile(TerraformerState *ts, TileIndex tile, int height) |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
89 |
{ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
90 |
/* Find tile in the "modheight" table. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
91 |
* Note: In a normal user-terraform command the tile will not be found in the "modheight" table. |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
92 |
* But during house- or industry-construction multiple corners can be terraformed at once. */ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
93 |
TerraformerHeightMod *mod = ts->modheight; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
94 |
int count = ts->modheight_count; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
95 |
while ((count > 0) && (mod->tile != tile)) { |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
96 |
mod++; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
97 |
count--; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
98 |
} |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
99 |
|
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
100 |
/* New entry? */ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
101 |
if (count == 0) { |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
102 |
assert(ts->modheight_count < TERRAFORMER_MODHEIGHT_SIZE); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
103 |
ts->modheight_count++; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
104 |
} |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
105 |
|
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
106 |
/* Finally store the new value */ |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
107 |
mod->tile = tile; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
108 |
mod->height = (byte)height; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
109 |
} |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
110 |
|
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
111 |
/** |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
112 |
* Adds a tile to the "tile_table" in a TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
113 |
* |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
114 |
* @param ts TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
115 |
* @param tile Tile. |
8041
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
116 |
* @ingroup dirty |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
117 |
*/ |
0 | 118 |
static void TerraformAddDirtyTile(TerraformerState *ts, TileIndex tile) |
119 |
{ |
|
120 |
int count; |
|
121 |
TileIndex *t; |
|
122 |
||
123 |
count = ts->tile_table_count; |
|
124 |
||
6987
b0f13039bda2
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6683
diff
changeset
|
125 |
for (t = ts->tile_table; count != 0; count--, t++) { |
2639 | 126 |
if (*t == tile) return; |
0 | 127 |
} |
128 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
129 |
assert(ts->tile_table_count < TERRAFORMER_TILE_TABLE_SIZE); |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
130 |
|
0 | 131 |
ts->tile_table[ts->tile_table_count++] = tile; |
132 |
} |
|
133 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
134 |
/** |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
135 |
* Adds all tiles that incident with the north corner of a specific tile to the "tile_table" in a TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
136 |
* |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
137 |
* @param ts TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
138 |
* @param tile Tile. |
8041
63e760418a15
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
8013
diff
changeset
|
139 |
* @ingroup dirty |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
140 |
*/ |
0 | 141 |
static void TerraformAddDirtyTileAround(TerraformerState *ts, TileIndex tile) |
142 |
{ |
|
1981 | 143 |
TerraformAddDirtyTile(ts, tile + TileDiffXY( 0, -1)); |
144 |
TerraformAddDirtyTile(ts, tile + TileDiffXY(-1, -1)); |
|
145 |
TerraformAddDirtyTile(ts, tile + TileDiffXY(-1, 0)); |
|
0 | 146 |
TerraformAddDirtyTile(ts, tile); |
147 |
} |
|
148 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
149 |
/** |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
150 |
* Terraform the north corner of a tile to a specific height. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
151 |
* |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
152 |
* @param ts TerraformerState. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
153 |
* @param tile Tile. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
154 |
* @param height Aimed height. |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
155 |
* @param return Error code or cost. |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
156 |
*/ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
157 |
static CommandCost TerraformTileHeight(TerraformerState *ts, TileIndex tile, int height) |
0 | 158 |
{ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
159 |
CommandCost total_cost = CommandCost(); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
160 |
|
863
8d09f9331a80
(svn r1344) Use MapSize[XY]() (or MapSize()/MapMax[XY]() where appropriate) instead of TILES_[XY]
tron
parents:
856
diff
changeset
|
161 |
assert(tile < MapSize()); |
0 | 162 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
163 |
/* Check range of destination height */ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
164 |
if (height < 0) return_cmd_error(STR_1003_ALREADY_AT_SEA_LEVEL); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
165 |
if (height > MAX_TILE_HEIGHT) return_cmd_error(STR_1004_TOO_HIGH); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
166 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
167 |
/* |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
168 |
* Check if the terraforming has any effect. |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
169 |
* This can only be true, if multiple corners of the start-tile are terraformed (i.e. the terraforming is done by towns/industries etc.). |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
170 |
* In this case the terraforming should fail. (Don't know why.) |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
171 |
*/ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
172 |
if (height == TerraformGetHeightOfTile(ts, tile)) return CMD_ERROR; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
173 |
|
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
174 |
/* Check "too close to edge of map" */ |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
175 |
uint x = TileX(tile); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
176 |
uint y = TileY(tile); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
177 |
if ((x <= 1) || (y <= 1) || (x >= MapMaxX() - 1) || (y >= MapMaxY() - 1)) { |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
178 |
/* |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
179 |
* Determine a sensible error tile |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
180 |
* Note: If x and y are both zero this will disable the error tile. (Tile 0 cannot be highlighted :( ) |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
181 |
*/ |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
182 |
if ((x == 1) && (y != 0)) x = 0; |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
183 |
if ((y == 1) && (x != 0)) y = 0; |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
184 |
_terraform_err_tile = TileXY(x, y); |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
185 |
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); |
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
186 |
} |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
187 |
|
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
188 |
/* Mark incident tiles, that are involved in the terraforming */ |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
189 |
TerraformAddDirtyTileAround(ts, tile); |
0 | 190 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
191 |
/* Store the height modification */ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
192 |
TerraformSetHeightOfTile(ts, tile, height); |
0 | 193 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
194 |
/* Increment cost */ |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
195 |
total_cost.AddCost(_price.terraform); |
0 | 196 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
197 |
/* Recurse to neighboured corners if height difference is larger than 1 */ |
0 | 198 |
{ |
909
81bc9ef93f50
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
199 |
const TileIndexDiffC *ttm; |
0 | 200 |
|
909
81bc9ef93f50
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
201 |
static const TileIndexDiffC _terraform_tilepos[] = { |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
202 |
{ 1, 0}, // move to tile in SE |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
203 |
{-2, 0}, // undo last move, and move to tile in NW |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
204 |
{ 1, 1}, // undo last move, and move to tile in SW |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
205 |
{ 0, -2} // undo last move, and move to tile in NE |
909
81bc9ef93f50
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
206 |
}; |
0 | 207 |
|
2952 | 208 |
for (ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) { |
909
81bc9ef93f50
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
209 |
tile += ToTileIndexDiff(*ttm); |
0 | 210 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
211 |
/* Get TileHeight of neighboured tile as of current terraform progress */ |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
212 |
int r = TerraformGetHeightOfTile(ts, tile); |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
213 |
int height_diff = height - r; |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
214 |
|
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
215 |
/* Is the height difference to the neighboured corner greater than 1? */ |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
216 |
if (abs(height_diff) > 1) { |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
217 |
/* Terraform the neighboured corner. The resulting height difference should be 1. */ |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
218 |
height_diff += (height_diff < 0 ? 1 : -1); |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
219 |
CommandCost cost = TerraformTileHeight(ts, tile, r + height_diff); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
220 |
if (CmdFailed(cost)) return cost; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
221 |
total_cost.AddCost(cost); |
0 | 222 |
} |
223 |
} |
|
224 |
} |
|
225 |
||
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
226 |
return total_cost; |
0 | 227 |
} |
228 |
||
1775
08ff0f12ccdc
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1571
diff
changeset
|
229 |
/** Terraform land |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
230 |
* @param tile tile to terraform |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
231 |
* @param flags for this command type |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
232 |
* @param p1 corners to terraform (SLOPE_xxx) |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
233 |
* @param p2 direction; eg up (non-zero) or down (zero) |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
234 |
* @return error or cost of terraforming |
0 | 235 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
236 |
CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 237 |
{ |
238 |
TerraformerState ts; |
|
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
239 |
CommandCost total_cost = CommandCost(); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
240 |
int direction = (p2 != 0 ? 1 : -1); |
0 | 241 |
|
242 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
243 |
||
244 |
_terraform_err_tile = 0; |
|
245 |
||
246 |
ts.modheight_count = ts.tile_table_count = 0; |
|
247 |
||
1878
622765748231
(svn r2384) - Fix: Check selling land and setting player colour. Also an extra map-bounds check for terraforming; inspired by the monkey (and Tron :) )
Darkvater
parents:
1796
diff
changeset
|
248 |
/* Make an extra check for map-bounds cause we add tiles to the originating tile */ |
2934
3b7eef9871f8
(svn r3490) -Fix: A bunch (10) of off-by-one errors when checking if a TileIndex points to a tile on the map
tron
parents:
2705
diff
changeset
|
249 |
if (tile + TileDiffXY(1, 1) >= MapSize()) return CMD_ERROR; |
1878
622765748231
(svn r2384) - Fix: Check selling land and setting player colour. Also an extra map-bounds check for terraforming; inspired by the monkey (and Tron :) )
Darkvater
parents:
1796
diff
changeset
|
250 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
251 |
/* Compute the costs and the terraforming result in a model of the landscape */ |
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
252 |
if ((p1 & SLOPE_W) != 0) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
253 |
TileIndex t = tile + TileDiffXY(1, 0); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
254 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
255 |
if (CmdFailed(cost)) return cost; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
256 |
total_cost.AddCost(cost); |
0 | 257 |
} |
258 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
259 |
if ((p1 & SLOPE_S) != 0) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
260 |
TileIndex t = tile + TileDiffXY(1, 1); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
261 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
262 |
if (CmdFailed(cost)) return cost; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
263 |
total_cost.AddCost(cost); |
0 | 264 |
} |
265 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
266 |
if ((p1 & SLOPE_E) != 0) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
267 |
TileIndex t = tile + TileDiffXY(0, 1); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
268 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
269 |
if (CmdFailed(cost)) return cost; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
270 |
total_cost.AddCost(cost); |
0 | 271 |
} |
272 |
||
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
273 |
if ((p1 & SLOPE_N) != 0) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
274 |
TileIndex t = tile + TileDiffXY(0, 0); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
275 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
276 |
if (CmdFailed(cost)) return cost; |
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
277 |
total_cost.AddCost(cost); |
0 | 278 |
} |
279 |
||
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
280 |
/* Check if the terraforming is valid wrt. tunnels, bridges and objects on the surface */ |
5573
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
281 |
{ |
0 | 282 |
int count; |
283 |
TileIndex *ti = ts.tile_table; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
284 |
|
1775
08ff0f12ccdc
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1571
diff
changeset
|
285 |
for (count = ts.tile_table_count; count != 0; count--, ti++) { |
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
286 |
TileIndex tile = *ti; |
0 | 287 |
|
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
288 |
/* Find new heights of tile corners */ |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
289 |
uint z_N = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0)); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
290 |
uint z_W = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0)); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
291 |
uint z_S = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1)); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
292 |
uint z_E = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1)); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
293 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
294 |
/* Find min and max height of tile */ |
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
295 |
uint z_min = min(min(z_N, z_W), min(z_S, z_E)); |
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
296 |
uint z_max = max(max(z_N, z_W), max(z_S, z_E)); |
7214
ae8dcfa02ec8
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
7179
diff
changeset
|
297 |
|
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
298 |
/* Compute tile slope */ |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
299 |
uint tileh = (z_max > z_min + 1 ? SLOPE_STEEP : SLOPE_FLAT); |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
300 |
if (z_W > z_min) tileh += SLOPE_W; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
301 |
if (z_S > z_min) tileh += SLOPE_S; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
302 |
if (z_E > z_min) tileh += SLOPE_E; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
303 |
if (z_N > z_min) tileh += SLOPE_N; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
304 |
|
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
305 |
/* Check if bridge would take damage */ |
7214
ae8dcfa02ec8
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
7179
diff
changeset
|
306 |
if (direction == 1 && MayHaveBridgeAbove(tile) && IsBridgeAbove(tile) && |
ae8dcfa02ec8
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
7179
diff
changeset
|
307 |
GetBridgeHeight(GetSouthernBridgeEnd(tile)) <= z_max * TILE_HEIGHT) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
308 |
_terraform_err_tile = tile; // highlight the tile under the bridge |
5573
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
309 |
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
310 |
} |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
311 |
/* Check if tunnel would take damage */ |
7214
ae8dcfa02ec8
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
7179
diff
changeset
|
312 |
if (direction == -1 && IsTunnelInWay(tile, z_min * TILE_HEIGHT)) { |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
313 |
_terraform_err_tile = tile; // highlight the tile above the tunnel |
7214
ae8dcfa02ec8
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
7179
diff
changeset
|
314 |
return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE); |
2639 | 315 |
} |
7983
06d272a9618b
(svn r10998) -Codechange: refactor of the "core" of the terraforming code to make it possible to push the tile type specific terraforming requirements out of the generic part of the terraforming code. Patch by frosch. For more information take a look at FS#1147.
rubidium
parents:
7976
diff
changeset
|
316 |
/* Check tiletype-specific things, and add extra-cost */ |
8133
597f682ff48d
(svn r11168) -Fix [FS#1256]: assert on terraforming of industries. Patch by frosch.
rubidium
parents:
8041
diff
changeset
|
317 |
CommandCost cost = _tile_type_procs[GetTileType(tile)]->terraform_tile_proc(tile, flags | DC_AUTO, z_min * TILE_HEIGHT, (Slope) tileh); |
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
318 |
if (CmdFailed(cost)) { |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
319 |
_terraform_err_tile = tile; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
320 |
return cost; |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
321 |
} |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
322 |
total_cost.AddCost(cost); |
0 | 323 |
} |
324 |
} |
|
325 |
||
326 |
if (flags & DC_EXEC) { |
|
327 |
/* change the height */ |
|
328 |
{ |
|
329 |
int count; |
|
330 |
TerraformerHeightMod *mod; |
|
331 |
||
332 |
mod = ts.modheight; |
|
1775
08ff0f12ccdc
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1571
diff
changeset
|
333 |
for (count = ts.modheight_count; count != 0; count--, mod++) { |
1979
f4462d4e8e62
(svn r2485) Missed two uint -> TileIndex, thanks _Luca_
tron
parents:
1977
diff
changeset
|
334 |
TileIndex til = mod->tile; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
335 |
|
1059
c28c6be74291
(svn r1560) Introduce SetTileType() and SetTileHeight()
tron
parents:
1044
diff
changeset
|
336 |
SetTileHeight(til, mod->height); |
0 | 337 |
} |
338 |
} |
|
339 |
||
340 |
/* finally mark the dirty tiles dirty */ |
|
341 |
{ |
|
342 |
int count; |
|
343 |
TileIndex *ti = ts.tile_table; |
|
1775
08ff0f12ccdc
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1571
diff
changeset
|
344 |
for (count = ts.tile_table_count; count != 0; count--, ti++) { |
0 | 345 |
MarkTileDirtyByTile(*ti); |
346 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
347 |
} |
0 | 348 |
} |
8013
67c6bcc81914
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
8005
diff
changeset
|
349 |
return total_cost; |
0 | 350 |
} |
351 |
||
352 |
||
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
353 |
/** Levels a selected (rectangle) area of land |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
354 |
* @param tile end tile of area-drag |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
355 |
* @param flags for this command type |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
356 |
* @param p1 start tile of area drag |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
357 |
* @param p2 unused |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
358 |
* @return error or cost of terraforming |
0 | 359 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
360 |
CommandCost CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 361 |
{ |
362 |
int size_x, size_y; |
|
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
363 |
int ex; |
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
364 |
int ey; |
0 | 365 |
int sx, sy; |
366 |
uint h, curh; |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
367 |
CommandCost money; |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
368 |
CommandCost ret; |
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
369 |
CommandCost cost; |
0 | 370 |
|
2934
3b7eef9871f8
(svn r3490) -Fix: A bunch (10) of off-by-one errors when checking if a TileIndex points to a tile on the map
tron
parents:
2705
diff
changeset
|
371 |
if (p1 >= MapSize()) return CMD_ERROR; |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
372 |
|
889
7f8630bfea41
(svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents:
863
diff
changeset
|
373 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
7f8630bfea41
(svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents:
863
diff
changeset
|
374 |
|
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
375 |
/* remember level height */ |
1044
9b73df700a7c
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
376 |
h = TileHeight(p1); |
0 | 377 |
|
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
378 |
/* make sure sx,sy are smaller than ex,ey */ |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
379 |
ex = TileX(tile); |
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
380 |
ey = TileY(tile); |
926
bd4312619522
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
909
diff
changeset
|
381 |
sx = TileX(p1); |
bd4312619522
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
909
diff
changeset
|
382 |
sy = TileY(p1); |
6432 | 383 |
if (ex < sx) Swap(ex, sx); |
384 |
if (ey < sy) Swap(ey, sy); |
|
1981 | 385 |
tile = TileXY(sx, sy); |
0 | 386 |
|
6987
b0f13039bda2
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6683
diff
changeset
|
387 |
size_x = ex - sx + 1; |
b0f13039bda2
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6683
diff
changeset
|
388 |
size_y = ey - sy + 1; |
0 | 389 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
390 |
money.AddCost(GetAvailableMoneyForCommand()); |
0 | 391 |
|
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
392 |
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) { |
1044
9b73df700a7c
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
393 |
curh = TileHeight(tile2); |
0 | 394 |
while (curh != h) { |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
395 |
ret = DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
396 |
if (CmdFailed(ret)) break; |
0 | 397 |
|
398 |
if (flags & DC_EXEC) { |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
399 |
money.AddCost(-ret.GetCost()); |
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
400 |
if (money.GetCost() < 0) { |
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
401 |
_additional_cash_required = ret.GetCost(); |
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
402 |
return cost; |
0 | 403 |
} |
7976
5d93386b748b
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7831
diff
changeset
|
404 |
DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND); |
0 | 405 |
} |
406 |
||
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
407 |
cost.AddCost(ret); |
0 | 408 |
curh += (curh > h) ? -1 : 1; |
409 |
} |
|
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1782
diff
changeset
|
410 |
} END_TILE_LOOP(tile2, size_x, size_y, tile) |
0 | 411 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
412 |
return (cost.GetCost() == 0) ? CMD_ERROR : cost; |
0 | 413 |
} |
414 |
||
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
415 |
/** Purchase a land area. Actually you only purchase one tile, so |
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
416 |
* the name is a bit confusing ;p |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
417 |
* @param tile the tile the player is purchasing |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
418 |
* @param flags for this command type |
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
419 |
* @param p1 unused |
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
420 |
* @param p2 unused |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
421 |
* @return error of cost of operation |
0 | 422 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
423 |
CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 424 |
{ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
425 |
CommandCost cost; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
426 |
|
0 | 427 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
428 |
|
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
429 |
if (IsOwnedLandTile(tile) && IsTileOwner(tile, _current_player)) { |
0 | 430 |
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT); |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
431 |
} |
0 | 432 |
|
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
433 |
cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
434 |
if (CmdFailed(cost)) return CMD_ERROR; |
0 | 435 |
|
436 |
if (flags & DC_EXEC) { |
|
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
437 |
MakeOwnedLand(tile, _current_player); |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
438 |
MarkTileDirtyByTile(tile); |
0 | 439 |
} |
440 |
||
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
441 |
return cost.AddCost(_price.purchase_land * 10); |
0 | 442 |
} |
443 |
||
444 |
||
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
445 |
static CommandCost ClearTile_Clear(TileIndex tile, byte flags) |
1095 | 446 |
{ |
7449
5cedaf2c861c
(svn r10208) -Codechange: replace int32 with Money where appropriate.
rubidium
parents:
7446
diff
changeset
|
447 |
static const Money* clear_price_table[] = { |
2220 | 448 |
&_price.clear_1, |
449 |
&_price.purchase_land, |
|
450 |
&_price.clear_2, |
|
451 |
&_price.clear_3, |
|
452 |
&_price.purchase_land, |
|
453 |
&_price.purchase_land, |
|
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
454 |
&_price.clear_2, // XXX unused? |
0 | 455 |
}; |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
456 |
CommandCost price; |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
457 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
458 |
if (!IsClearGround(tile, CLEAR_GRASS) || GetClearDensity(tile) != 0) { |
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
459 |
price.AddCost(*clear_price_table[GetClearGround(tile)]); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
460 |
} |
0 | 461 |
|
2220 | 462 |
if (flags & DC_EXEC) DoClearSquare(tile); |
0 | 463 |
|
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
464 |
return price; |
0 | 465 |
} |
466 |
||
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
467 |
/** Sell a land area. Actually you only sell one tile, so |
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
468 |
* the name is a bit confusing ;p |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3447
diff
changeset
|
469 |
* @param tile the tile the player is selling |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
470 |
* @param flags for this command type |
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
471 |
* @param p1 unused |
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
472 |
* @param p2 unused |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
473 |
* @return error or cost of operation |
1782
0ac16ff36293
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
474 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7214
diff
changeset
|
475 |
CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 476 |
{ |
477 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
478 |
||
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
479 |
if (!IsOwnedLandTile(tile)) return CMD_ERROR; |
1878
622765748231
(svn r2384) - Fix: Check selling land and setting player colour. Also an extra map-bounds check for terraforming; inspired by the monkey (and Tron :) )
Darkvater
parents:
1796
diff
changeset
|
480 |
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) return CMD_ERROR; |
622765748231
(svn r2384) - Fix: Check selling land and setting player colour. Also an extra map-bounds check for terraforming; inspired by the monkey (and Tron :) )
Darkvater
parents:
1796
diff
changeset
|
481 |
|
0 | 482 |
|
8223
6a034093dc1d
(svn r11262) -Fix [FS#1330]: do not check for vehicles that are not on the ground when removing owned land, furthermore do not check for shadows (of aircraft).
rubidium
parents:
8133
diff
changeset
|
483 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
0 | 484 |
|
4000
bab1ebc37da0
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents:
3977
diff
changeset
|
485 |
if (flags & DC_EXEC) DoClearSquare(tile); |
0 | 486 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
487 |
return CommandCost(- _price.purchase_land * 2); |
0 | 488 |
} |
489 |
||
490 |
||
491 |
#include "table/clear_land.h" |
|
492 |
||
493 |
||
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2221
diff
changeset
|
494 |
void DrawClearLandTile(const TileInfo *ti, byte set) |
0 | 495 |
{ |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
496 |
DrawGroundSprite(SPR_FLAT_BARE_LAND + _tileh_to_sprite[ti->tileh] + set * 19, PAL_NONE); |
0 | 497 |
} |
498 |
||
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2221
diff
changeset
|
499 |
void DrawHillyLandTile(const TileInfo *ti) |
0 | 500 |
{ |
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
501 |
if (ti->tileh != SLOPE_FLAT) { |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
502 |
DrawGroundSprite(SPR_FLAT_ROUGH_LAND + _tileh_to_sprite[ti->tileh], PAL_NONE); |
0 | 503 |
} else { |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
504 |
DrawGroundSprite(_landscape_clear_sprites[GB(ti->x ^ ti->y, 4, 3)], PAL_NONE); |
0 | 505 |
} |
506 |
} |
|
507 |
||
2220 | 508 |
void DrawClearLandFence(const TileInfo *ti) |
0 | 509 |
{ |
510 |
byte z = ti->z; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
511 |
|
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
512 |
if (ti->tileh & SLOPE_S) { |
3645
86af43f87885
(svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents:
3636
diff
changeset
|
513 |
z += TILE_HEIGHT; |
86af43f87885
(svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents:
3636
diff
changeset
|
514 |
if (ti->tileh == SLOPE_STEEP_S) z += TILE_HEIGHT; |
0 | 515 |
} |
516 |
||
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
517 |
if (GetFenceSW(ti->tile) != 0) { |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
518 |
DrawGroundSpriteAt(_clear_land_fence_sprites_1[GetFenceSW(ti->tile) - 1] + _fence_mod_by_tileh[ti->tileh], PAL_NONE, ti->x, ti->y, z); |
0 | 519 |
} |
520 |
||
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
521 |
if (GetFenceSE(ti->tile) != 0) { |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
522 |
DrawGroundSpriteAt(_clear_land_fence_sprites_1[GetFenceSE(ti->tile) - 1] + _fence_mod_by_tileh_2[ti->tileh], PAL_NONE, ti->x, ti->y, z); |
0 | 523 |
} |
524 |
} |
|
525 |
||
526 |
static void DrawTile_Clear(TileInfo *ti) |
|
527 |
{ |
|
3166
747e74d236f0
(svn r3794) Use already available accessor functions instead of GB()
tron
parents:
3156
diff
changeset
|
528 |
switch (GetClearGround(ti->tile)) { |
3447 | 529 |
case CLEAR_GRASS: |
3166
747e74d236f0
(svn r3794) Use already available accessor functions instead of GB()
tron
parents:
3156
diff
changeset
|
530 |
DrawClearLandTile(ti, GetClearDensity(ti->tile)); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
531 |
break; |
0 | 532 |
|
3447 | 533 |
case CLEAR_ROUGH: |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
534 |
DrawHillyLandTile(ti); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
535 |
break; |
0 | 536 |
|
3447 | 537 |
case CLEAR_ROCKS: |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
538 |
DrawGroundSprite(SPR_FLAT_ROCKY_LAND_1 + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
539 |
break; |
0 | 540 |
|
3447 | 541 |
case CLEAR_FIELDS: |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
542 |
DrawGroundSprite(_clear_land_sprites_1[GetFieldType(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
543 |
break; |
0 | 544 |
|
3447 | 545 |
case CLEAR_SNOW: |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
546 |
DrawGroundSprite(_clear_land_sprites_2[GetClearDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
547 |
break; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
548 |
|
3447 | 549 |
case CLEAR_DESERT: |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
550 |
DrawGroundSprite(_clear_land_sprites_3[GetClearDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
551 |
break; |
0 | 552 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
553 |
|
2220 | 554 |
DrawClearLandFence(ti); |
5573
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
555 |
DrawBridgeMiddle(ti); |
0 | 556 |
} |
557 |
||
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
558 |
static uint GetSlopeZ_Clear(TileIndex tile, uint x, uint y) |
1095 | 559 |
{ |
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
560 |
uint z; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
561 |
Slope tileh = GetTileSlope(tile, &z); |
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
562 |
|
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
563 |
return z + GetPartialZ(x & 0xF, y & 0xF, tileh); |
1095 | 564 |
} |
0 | 565 |
|
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7813
diff
changeset
|
566 |
static Foundation GetFoundation_Clear(TileIndex tile, Slope tileh) |
39 | 567 |
{ |
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7813
diff
changeset
|
568 |
return FOUNDATION_NONE; |
39 | 569 |
} |
570 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
571 |
static void GetAcceptedCargo_Clear(TileIndex tile, AcceptedCargo ac) |
0 | 572 |
{ |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
573 |
/* unused */ |
0 | 574 |
} |
575 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
576 |
static void AnimateTile_Clear(TileIndex tile) |
0 | 577 |
{ |
578 |
/* unused */ |
|
579 |
} |
|
580 |
||
1293 | 581 |
void TileLoopClearHelper(TileIndex tile) |
0 | 582 |
{ |
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
583 |
byte self; |
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
584 |
byte neighbour; |
1293 | 585 |
TileIndex dirty = INVALID_TILE; |
0 | 586 |
|
3447 | 587 |
self = (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)); |
0 | 588 |
|
3447 | 589 |
neighbour = (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 1, 0), CLEAR_FIELDS)); |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
590 |
if (GetFenceSW(tile) == 0) { |
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
591 |
if (self != neighbour) { |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
592 |
SetFenceSW(tile, 3); |
0 | 593 |
dirty = tile; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
594 |
} |
0 | 595 |
} else { |
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
596 |
if (self == 0 && neighbour == 0) { |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
597 |
SetFenceSW(tile, 0); |
0 | 598 |
dirty = tile; |
599 |
} |
|
600 |
} |
|
601 |
||
3447 | 602 |
neighbour = (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, 1), CLEAR_FIELDS)); |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
603 |
if (GetFenceSE(tile) == 0) { |
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
604 |
if (self != neighbour) { |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
605 |
SetFenceSE(tile, 3); |
0 | 606 |
dirty = tile; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
607 |
} |
0 | 608 |
} else { |
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
609 |
if (self == 0 && neighbour == 0) { |
2979
883788245931
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
610 |
SetFenceSE(tile, 0); |
0 | 611 |
dirty = tile; |
612 |
} |
|
613 |
} |
|
614 |
||
2221
a25240840b32
(svn r2739) -Fix(?): Change the fence algorithm so it removes fences when no farm tile is adjacent
tron
parents:
2220
diff
changeset
|
615 |
if (dirty != INVALID_TILE) MarkTileDirtyByTile(dirty); |
0 | 616 |
} |
617 |
||
618 |
||
619 |
/* convert into snowy tiles */ |
|
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
620 |
static void TileLoopClearAlps(TileIndex tile) |
0 | 621 |
{ |
6669
487ac09b95c4
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6574
diff
changeset
|
622 |
int k = GetTileZ(tile) - GetSnowLine() + TILE_HEIGHT; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
623 |
|
4157
0c3210247472
(svn r5581) Slightly alter some snow line related calculations to make them a bit clearer
tron
parents:
4069
diff
changeset
|
624 |
if (k < 0) { // well below the snow line |
3447 | 625 |
if (!IsClearGround(tile, CLEAR_SNOW)) return; |
626 |
if (GetClearDensity(tile) == 0) SetClearGroundDensity(tile, CLEAR_GRASS, 3); |
|
0 | 627 |
} else { |
3447 | 628 |
if (!IsClearGround(tile, CLEAR_SNOW)) { |
629 |
SetClearGroundDensity(tile, CLEAR_SNOW, 0); |
|
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
630 |
} else { |
4157
0c3210247472
(svn r5581) Slightly alter some snow line related calculations to make them a bit clearer
tron
parents:
4069
diff
changeset
|
631 |
uint density = min((uint)k / TILE_HEIGHT, 3); |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
632 |
|
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
633 |
if (GetClearDensity(tile) < density) { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
634 |
AddClearDensity(tile, 1); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
635 |
} else if (GetClearDensity(tile) > density) { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
636 |
AddClearDensity(tile, -1); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
637 |
} else { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
638 |
return; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
639 |
} |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
640 |
} |
0 | 641 |
} |
642 |
||
643 |
MarkTileDirtyByTile(tile); |
|
644 |
} |
|
645 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
646 |
static void TileLoopClearDesert(TileIndex tile) |
0 | 647 |
{ |
3447 | 648 |
if (IsClearGround(tile, CLEAR_DESERT)) return; |
0 | 649 |
|
3379
ea8aa9e71328
(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.
belugas
parents:
3310
diff
changeset
|
650 |
if (GetTropicZone(tile) == TROPICZONE_DESERT) { |
3447 | 651 |
SetClearGroundDensity(tile, CLEAR_DESERT, 3); |
0 | 652 |
} else { |
3379
ea8aa9e71328
(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.
belugas
parents:
3310
diff
changeset
|
653 |
if (GetTropicZone(tile + TileDiffXY( 1, 0)) != TROPICZONE_DESERT && |
ea8aa9e71328
(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.
belugas
parents:
3310
diff
changeset
|
654 |
GetTropicZone(tile + TileDiffXY(-1, 0)) != TROPICZONE_DESERT && |
ea8aa9e71328
(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.
belugas
parents:
3310
diff
changeset
|
655 |
GetTropicZone(tile + TileDiffXY( 0, 1)) != TROPICZONE_DESERT && |
ea8aa9e71328
(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.
belugas
parents:
3310
diff
changeset
|
656 |
GetTropicZone(tile + TileDiffXY( 0, -1)) != TROPICZONE_DESERT) |
1981 | 657 |
return; |
3447 | 658 |
SetClearGroundDensity(tile, CLEAR_DESERT, 1); |
0 | 659 |
} |
660 |
||
661 |
MarkTileDirtyByTile(tile); |
|
662 |
} |
|
663 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
664 |
static void TileLoop_Clear(TileIndex tile) |
0 | 665 |
{ |
666 |
TileLoopClearHelper(tile); |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
667 |
|
2989 | 668 |
switch (_opt.landscape) { |
6683
7ec558346172
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6669
diff
changeset
|
669 |
case LT_TROPIC: TileLoopClearDesert(tile); break; |
7ec558346172
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6669
diff
changeset
|
670 |
case LT_ARCTIC: TileLoopClearAlps(tile); break; |
0 | 671 |
} |
672 |
||
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
673 |
switch (GetClearGround(tile)) { |
3447 | 674 |
case CLEAR_GRASS: |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
675 |
if (GetClearDensity(tile) == 3) return; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
676 |
|
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
677 |
if (_game_mode != GM_EDITOR) { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
678 |
if (GetClearCounter(tile) < 7) { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
679 |
AddClearCounter(tile, 1); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
680 |
return; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
681 |
} else { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
682 |
SetClearCounter(tile, 0); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
683 |
AddClearDensity(tile, 1); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
684 |
} |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
685 |
} else { |
3447 | 686 |
SetClearGroundDensity(tile, GB(Random(), 0, 8) > 21 ? CLEAR_GRASS : CLEAR_ROUGH, 3); |
0 | 687 |
} |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
688 |
break; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
689 |
|
3447 | 690 |
case CLEAR_FIELDS: { |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
691 |
uint field_type; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
692 |
|
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
693 |
if (_game_mode == GM_EDITOR) return; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
694 |
|
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
695 |
if (GetClearCounter(tile) < 7) { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
696 |
AddClearCounter(tile, 1); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
697 |
return; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
698 |
} else { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
699 |
SetClearCounter(tile, 0); |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
700 |
} |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
701 |
|
4333
2ff83c9c81fa
(svn r6032) -Fix: when a farm is gone, remove the fields when it is full grown and should be harvest (not before that)
truelight
parents:
4328
diff
changeset
|
702 |
if (GetIndustryIndexOfField(tile) == INVALID_INDUSTRY && GetFieldType(tile) >= 7) { |
4328
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
703 |
/* This farmfield is no longer farmfield, so make it grass again */ |
4815
c2a54b213fde
(svn r6739) -Fix (r6001): Crash on removing farmland belonging to a farm. The search would loop
Darkvater
parents:
4560
diff
changeset
|
704 |
MakeClear(tile, CLEAR_GRASS, 2); |
4328
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
705 |
} else { |
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
706 |
field_type = GetFieldType(tile); |
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
707 |
field_type = (field_type < 8) ? field_type + 1 : 0; |
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
708 |
SetFieldType(tile, field_type); |
23dd79414386
(svn r6001) -Feature: when removing a farm, his farmland is removed too (over time) (based on peter1138's patch, FS#82)
truelight
parents:
4300
diff
changeset
|
709 |
} |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
710 |
break; |
0 | 711 |
} |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
712 |
|
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
713 |
default: |
0 | 714 |
return; |
715 |
} |
|
716 |
||
717 |
MarkTileDirtyByTile(tile); |
|
718 |
} |
|
719 |
||
6573 | 720 |
void GenerateClearTile() |
0 | 721 |
{ |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
722 |
uint i, gi; |
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
723 |
TileIndex tile; |
0 | 724 |
|
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
725 |
/* add rough tiles */ |
2635 | 726 |
i = ScaleByMapSize(GB(Random(), 0, 10) + 0x400); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
727 |
gi = ScaleByMapSize(GB(Random(), 0, 7) + 0x80); |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
728 |
|
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
729 |
SetGeneratingWorldProgress(GWP_ROUGH_ROCKY, gi + i); |
0 | 730 |
do { |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
731 |
IncreaseGeneratingWorldProgress(GWP_ROUGH_ROCKY); |
2051 | 732 |
tile = RandomTile(); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
733 |
if (IsTileType(tile, MP_CLEAR) && !IsClearGround(tile, CLEAR_DESERT)) SetClearGroundDensity(tile, CLEAR_ROUGH, 3); |
0 | 734 |
} while (--i); |
735 |
||
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
736 |
/* add rocky tiles */ |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
737 |
i = gi; |
0 | 738 |
do { |
2150
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2140
diff
changeset
|
739 |
uint32 r = Random(); |
2051 | 740 |
tile = RandomTileSeed(r); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
741 |
|
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
742 |
IncreaseGeneratingWorldProgress(GWP_ROUGH_ROCKY); |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
743 |
if (IsTileType(tile, MP_CLEAR) && !IsClearGround(tile, CLEAR_DESERT)) { |
2150
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2140
diff
changeset
|
744 |
uint j = GB(r, 16, 4) + 5; |
2951 | 745 |
for (;;) { |
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
746 |
TileIndex tile_new; |
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
747 |
|
3447 | 748 |
SetClearGroundDensity(tile, CLEAR_ROCKS, 3); |
0 | 749 |
do { |
750 |
if (--j == 0) goto get_out; |
|
7813
49fbe41f8a04
(svn r10672) -Codechange: typify some parameters/variables.
rubidium
parents:
7809
diff
changeset
|
751 |
tile_new = tile + TileOffsByDiagDir((DiagDirection)GB(Random(), 0, 2)); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
752 |
} while (!IsTileType(tile_new, MP_CLEAR) || IsClearGround(tile_new, CLEAR_DESERT)); |
0 | 753 |
tile = tile_new; |
754 |
} |
|
755 |
get_out:; |
|
756 |
} |
|
757 |
} while (--i); |
|
758 |
} |
|
759 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
760 |
static void ClickTile_Clear(TileIndex tile) |
0 | 761 |
{ |
762 |
/* not used */ |
|
763 |
} |
|
764 |
||
7179
3e123c2b7c93
(svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium
parents:
6987
diff
changeset
|
765 |
static uint32 GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode) |
0 | 766 |
{ |
767 |
return 0; |
|
768 |
} |
|
769 |
||
2220 | 770 |
static const StringID _clear_land_str[] = { |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
771 |
STR_080D_GRASS, |
0 | 772 |
STR_080B_ROUGH_LAND, |
773 |
STR_080A_ROCKS, |
|
774 |
STR_080E_FIELDS, |
|
775 |
STR_080F_SNOW_COVERED_LAND, |
|
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
776 |
STR_0810_DESERT |
0 | 777 |
}; |
778 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
779 |
static void GetTileDesc_Clear(TileIndex tile, TileDesc *td) |
0 | 780 |
{ |
3447 | 781 |
if (IsClearGround(tile, CLEAR_GRASS) && GetClearDensity(tile) == 0) { |
2955
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
782 |
td->str = STR_080C_BARE_LAND; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
783 |
} else { |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
784 |
td->str = _clear_land_str[GetClearGround(tile)]; |
27221592ebbc
(svn r3514) -Codechange: Replace direct fiddling of bits for the ground type and density of clear tiles with symbolic names and accessors.
tron
parents:
2952
diff
changeset
|
785 |
} |
1901
fb05044cf5c3
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
786 |
td->owner = GetTileOwner(tile); |
0 | 787 |
} |
788 |
||
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2221
diff
changeset
|
789 |
static void ChangeTileOwner_Clear(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 790 |
{ |
791 |
return; |
|
792 |
} |
|
793 |
||
6573 | 794 |
void InitializeClearLand() |
1093
e8d26c7dc42f
(svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents:
1059
diff
changeset
|
795 |
{ |
3422
12cdb13ddb56
(svn r4249) -Codechange: Replace more occurences of 16 by TILE_SIZE and of 8 by TILE_HEIGHT. Reverted one change from the previous commit because it was faulty
celestar
parents:
3418
diff
changeset
|
796 |
_opt.snow_line = _patches.snow_line_height * TILE_HEIGHT; |
0 | 797 |
} |
798 |
||
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
799 |
static CommandCost TerraformTile_Clear(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
800 |
{ |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
801 |
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
802 |
} |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
803 |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
804 |
extern const TileTypeProcs _tile_type_clear_procs = { |
6449
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
805 |
DrawTile_Clear, ///< draw_tile_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
806 |
GetSlopeZ_Clear, ///< get_slope_z_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
807 |
ClearTile_Clear, ///< clear_tile_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
808 |
GetAcceptedCargo_Clear, ///< get_accepted_cargo_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
809 |
GetTileDesc_Clear, ///< get_tile_desc_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
810 |
GetTileTrackStatus_Clear, ///< get_tile_track_status_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
811 |
ClickTile_Clear, ///< click_tile_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
812 |
AnimateTile_Clear, ///< animate_tile_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
813 |
TileLoop_Clear, ///< tile_loop_clear |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
814 |
ChangeTileOwner_Clear, ///< change_tile_owner_clear |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
815 |
NULL, ///< get_produced_cargo_proc |
e520244dc71e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6432
diff
changeset
|
816 |
NULL, ///< vehicle_enter_tile_proc |
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7813
diff
changeset
|
817 |
GetFoundation_Clear, ///< get_foundation_proc |
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7983
diff
changeset
|
818 |
TerraformTile_Clear, ///< terraform_tile_proc |
0 | 819 |
}; |