author | rubidium |
Tue, 25 Dec 2007 11:26:07 +0000 | |
changeset 8131 | 160939e24ed3 |
parent 8119 | 52b48108425a |
child 8138 | dbfdc08fa6b9 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
3 |
/** @file clear_cmd.cpp */ |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1878
diff
changeset
|
6 |
#include "openttd.h" |
3144
33e42feae531
(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
72276cd8ee2b
(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
04b5403aaf6b
(svn r815) Include strings.h only in the files which need it.
tron
parents:
473
diff
changeset
|
9 |
#include "table/strings.h" |
679
04ca2cd69420
(svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
507
diff
changeset
|
10 |
#include "map.h" |
2154
f86c59e73a16
(svn r2664) Remove depedency on player.h from variables.h
tron
parents:
2153
diff
changeset
|
11 |
#include "player.h" |
0 | 12 |
#include "viewport.h" |
8116
8da76dcb3287
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
8108
diff
changeset
|
13 |
#include "command_func.h" |
3156
f4caf4197189
(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
|
14 |
#include "tunnel_map.h" |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
15 |
#include "bridge_map.h" |
6160
fa42299e967e
(svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium
parents:
6123
diff
changeset
|
16 |
#include "bridge.h" |
6343
76d17f784c13
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6248
diff
changeset
|
17 |
#include "landscape.h" |
2153
ecfc674410b4
(svn r2663) Include variables.h only in these files which need it, not globally via openttd.h
tron
parents:
2150
diff
changeset
|
18 |
#include "variables.h" |
2517
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2436
diff
changeset
|
19 |
#include "table/sprites.h" |
3310
a19f247b75b6
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
20 |
#include "unmovable_map.h" |
4300
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
21 |
#include "genworld.h" |
4328
1b3940c35724
(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
|
22 |
#include "industry.h" |
6974
952d742f6dee
(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:
6972
diff
changeset
|
23 |
#include "water_map.h" |
8119
52b48108425a
(svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents:
8116
diff
changeset
|
24 |
#include "tile_cmd.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8119
diff
changeset
|
25 |
#include "vehicle.h" |
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8119
diff
changeset
|
26 |
#include "functions.h" |
0 | 27 |
|
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
28 |
/* |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
29 |
* In one terraforming command all four corners of a initial tile can be raised/lowered (though this is not available to the player). |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
30 |
* The maximal amount of height modifications is archieved when raising a complete flat land from sea level to MAX_TILE_HEIGHT or vice versa. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
31 |
* This affects all corners with a manhatten distance smaller than MAX_TILE_HEIGHT to one of the initial 4 corners. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
32 |
* Their maximal amount is computed to 4 * \sum_{i=1}^{h_max} i = 2 * h_max * (h_max + 1). |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
33 |
*/ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
34 |
static const int TERRAFORMER_MODHEIGHT_SIZE = 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 1); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
35 |
|
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
36 |
/* |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
37 |
* The maximal amount of affected tiles (i.e. the tiles that incident with one of the corners above, is computed similiar to |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
38 |
* 1 + 4 * \sum_{i=1}^{h_max} (i+1) = 1 + 2 * h_max + (h_max + 3). |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
39 |
*/ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
40 |
static const int TERRAFORMER_TILE_TABLE_SIZE = 1 + 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 3); |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
41 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
42 |
struct TerraformerHeightMod { |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
43 |
TileIndex tile; ///< Referenced tile. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
44 |
byte height; ///< New TileHeight (height of north corner) of the tile. |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
45 |
}; |
0 | 46 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
47 |
struct TerraformerState { |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
48 |
int modheight_count; ///< amount of entries in "modheight". |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
49 |
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
|
50 |
|
7545
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
51 |
/** |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
52 |
* Dirty tiles, i.e.\ at least one corner changed. |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
53 |
* |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
54 |
* This array contains the tiles which are or will be marked as dirty. |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
55 |
* |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
56 |
* @ingroup dirty |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
57 |
*/ |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
58 |
TileIndex tile_table[TERRAFORMER_TILE_TABLE_SIZE]; |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
59 |
TerraformerHeightMod modheight[TERRAFORMER_MODHEIGHT_SIZE]; ///< Height modifications. |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
60 |
}; |
0 | 61 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
62 |
/** |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
63 |
* Gets the TileHeight (height of north corner) of a tile as of current terraforming progress. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
64 |
* |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
65 |
* @param ts TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
66 |
* @param tile Tile. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
67 |
* @return TileHeight. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
68 |
*/ |
0 | 69 |
static int TerraformGetHeightOfTile(TerraformerState *ts, TileIndex tile) |
70 |
{ |
|
71 |
TerraformerHeightMod *mod = ts->modheight; |
|
72 |
int count; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
73 |
|
2639 | 74 |
for (count = ts->modheight_count; count != 0; count--, mod++) { |
75 |
if (mod->tile == tile) return mod->height; |
|
0 | 76 |
} |
77 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
78 |
/* TileHeight unchanged so far, read value from map. */ |
1044
63e0601a43cc
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
79 |
return TileHeight(tile); |
0 | 80 |
} |
81 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
82 |
/** |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
83 |
* Stores the TileHeight (height of north corner) of a tile in a TerraformerState. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
84 |
* |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
85 |
* @param ts TerraformerState. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
86 |
* @param tile Tile. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
87 |
* @param height New TileHeight. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
88 |
*/ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
89 |
static void TerraformSetHeightOfTile(TerraformerState *ts, TileIndex tile, int height) |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
90 |
{ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
91 |
/* Find tile in the "modheight" table. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
92 |
* Note: In a normal user-terraform command the tile will not be found in the "modheight" table. |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
93 |
* But during house- or industry-construction multiple corners can be terraformed at once. */ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
94 |
TerraformerHeightMod *mod = ts->modheight; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
95 |
int count = ts->modheight_count; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
96 |
while ((count > 0) && (mod->tile != tile)) { |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
97 |
mod++; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
98 |
count--; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
99 |
} |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
100 |
|
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
101 |
/* New entry? */ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
102 |
if (count == 0) { |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
103 |
assert(ts->modheight_count < TERRAFORMER_MODHEIGHT_SIZE); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
104 |
ts->modheight_count++; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
105 |
} |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
106 |
|
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
107 |
/* Finally store the new value */ |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
108 |
mod->tile = tile; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
109 |
mod->height = (byte)height; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
110 |
} |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
111 |
|
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
112 |
/** |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
113 |
* Adds a tile to the "tile_table" in a TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
114 |
* |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
115 |
* @param ts TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
116 |
* @param tile Tile. |
7545
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
117 |
* @ingroup dirty |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
118 |
*/ |
0 | 119 |
static void TerraformAddDirtyTile(TerraformerState *ts, TileIndex tile) |
120 |
{ |
|
121 |
int count; |
|
122 |
TileIndex *t; |
|
123 |
||
124 |
count = ts->tile_table_count; |
|
125 |
||
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6357
diff
changeset
|
126 |
for (t = ts->tile_table; count != 0; count--, t++) { |
2639 | 127 |
if (*t == tile) return; |
0 | 128 |
} |
129 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
130 |
assert(ts->tile_table_count < TERRAFORMER_TILE_TABLE_SIZE); |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
131 |
|
0 | 132 |
ts->tile_table[ts->tile_table_count++] = tile; |
133 |
} |
|
134 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
135 |
/** |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
136 |
* Adds all tiles that incident with the north corner of a specific tile to the "tile_table" in a TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
137 |
* |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
138 |
* @param ts TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
139 |
* @param tile Tile. |
7545
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7517
diff
changeset
|
140 |
* @ingroup dirty |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
141 |
*/ |
0 | 142 |
static void TerraformAddDirtyTileAround(TerraformerState *ts, TileIndex tile) |
143 |
{ |
|
1981 | 144 |
TerraformAddDirtyTile(ts, tile + TileDiffXY( 0, -1)); |
145 |
TerraformAddDirtyTile(ts, tile + TileDiffXY(-1, -1)); |
|
146 |
TerraformAddDirtyTile(ts, tile + TileDiffXY(-1, 0)); |
|
0 | 147 |
TerraformAddDirtyTile(ts, tile); |
148 |
} |
|
149 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
150 |
/** |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
151 |
* Terraform the north corner of a tile to a specific height. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
152 |
* |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
153 |
* @param ts TerraformerState. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
154 |
* @param tile Tile. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
155 |
* @param height Aimed height. |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
156 |
* @param return Error code or cost. |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
157 |
*/ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
158 |
static CommandCost TerraformTileHeight(TerraformerState *ts, TileIndex tile, int height) |
0 | 159 |
{ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
160 |
CommandCost total_cost = CommandCost(); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
161 |
|
863
6a1444534f62
(svn r1344) Use MapSize[XY]() (or MapSize()/MapMax[XY]() where appropriate) instead of TILES_[XY]
tron
parents:
856
diff
changeset
|
162 |
assert(tile < MapSize()); |
0 | 163 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
164 |
/* Check range of destination height */ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
165 |
if (height < 0) return_cmd_error(STR_1003_ALREADY_AT_SEA_LEVEL); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
166 |
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
|
167 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
168 |
/* |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
169 |
* Check if the terraforming has any effect. |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
170 |
* This can only be true, if multiple corners of the start-tile are terraformed (i.e. the terraforming is done by towns/industries etc.). |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
171 |
* In this case the terraforming should fail. (Don't know why.) |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
172 |
*/ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
173 |
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
|
174 |
|
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
175 |
/* Check "too close to edge of map" */ |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
176 |
uint x = TileX(tile); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
177 |
uint y = TileY(tile); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
178 |
if ((x <= 1) || (y <= 1) || (x >= MapMaxX() - 1) || (y >= MapMaxY() - 1)) { |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
179 |
/* |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
180 |
* Determine a sensible error tile |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
181 |
* Note: If x and y are both zero this will disable the error tile. (Tile 0 cannot be highlighted :( ) |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
182 |
*/ |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
183 |
if ((x == 1) && (y != 0)) x = 0; |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
184 |
if ((y == 1) && (x != 0)) y = 0; |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
185 |
_terraform_err_tile = TileXY(x, y); |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
186 |
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); |
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
187 |
} |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
188 |
|
0a3ff8c6ed75
(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:
7480
diff
changeset
|
189 |
/* Mark incident tiles, that are involved in the terraforming */ |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
190 |
TerraformAddDirtyTileAround(ts, tile); |
0 | 191 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
192 |
/* Store the height modification */ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
193 |
TerraformSetHeightOfTile(ts, tile, height); |
0 | 194 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
195 |
/* Increment cost */ |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
196 |
total_cost.AddCost(_price.terraform); |
0 | 197 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
198 |
/* Recurse to neighboured corners if height difference is larger than 1 */ |
0 | 199 |
{ |
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
200 |
const TileIndexDiffC *ttm; |
0 | 201 |
|
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
202 |
static const TileIndexDiffC _terraform_tilepos[] = { |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
203 |
{ 1, 0}, // move to tile in SE |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
204 |
{-2, 0}, // undo last move, and move to tile in NW |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
205 |
{ 1, 1}, // undo last move, and move to tile in SW |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
206 |
{ 0, -2} // undo last move, and move to tile in NE |
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
207 |
}; |
0 | 208 |
|
2952 | 209 |
for (ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) { |
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
210 |
tile += ToTileIndexDiff(*ttm); |
0 | 211 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
212 |
/* Get TileHeight of neighboured tile as of current terraform progress */ |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
213 |
int r = TerraformGetHeightOfTile(ts, tile); |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
214 |
int height_diff = height - r; |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
215 |
|
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
216 |
/* Is the height difference to the neighboured corner greater than 1? */ |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
217 |
if (abs(height_diff) > 1) { |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
218 |
/* Terraform the neighboured corner. The resulting height difference should be 1. */ |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
219 |
height_diff += (height_diff < 0 ? 1 : -1); |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
220 |
CommandCost cost = TerraformTileHeight(ts, tile, r + height_diff); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
221 |
if (CmdFailed(cost)) return cost; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
222 |
total_cost.AddCost(cost); |
0 | 223 |
} |
224 |
} |
|
225 |
} |
|
226 |
||
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
227 |
return total_cost; |
0 | 228 |
} |
229 |
||
1775
548dc04d50e2
(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
|
230 |
/** Terraform land |
3491
35d747bb5e82
(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
|
231 |
* @param tile tile to terraform |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
232 |
* @param flags for this command type |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
233 |
* @param p1 corners to terraform (SLOPE_xxx) |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
234 |
* @param p2 direction; eg up (non-zero) or down (zero) |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
235 |
* @return error or cost of terraforming |
0 | 236 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
237 |
CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 238 |
{ |
239 |
TerraformerState ts; |
|
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
240 |
CommandCost total_cost = CommandCost(); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
241 |
int direction = (p2 != 0 ? 1 : -1); |
0 | 242 |
|
243 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
244 |
||
245 |
_terraform_err_tile = 0; |
|
246 |
||
247 |
ts.modheight_count = ts.tile_table_count = 0; |
|
248 |
||
1878
980fabc7d8a5
(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
|
249 |
/* Make an extra check for map-bounds cause we add tiles to the originating tile */ |
2934
3f29a7212713
(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
|
250 |
if (tile + TileDiffXY(1, 1) >= MapSize()) return CMD_ERROR; |
1878
980fabc7d8a5
(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
|
251 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
252 |
/* Compute the costs and the terraforming result in a model of the landscape */ |
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
253 |
if ((p1 & SLOPE_W) != 0) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
254 |
TileIndex t = tile + TileDiffXY(1, 0); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
255 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
256 |
if (CmdFailed(cost)) return cost; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
257 |
total_cost.AddCost(cost); |
0 | 258 |
} |
259 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
260 |
if ((p1 & SLOPE_S) != 0) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
261 |
TileIndex t = tile + TileDiffXY(1, 1); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
262 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
263 |
if (CmdFailed(cost)) return cost; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
264 |
total_cost.AddCost(cost); |
0 | 265 |
} |
266 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
267 |
if ((p1 & SLOPE_E) != 0) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
268 |
TileIndex t = tile + TileDiffXY(0, 1); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
269 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
270 |
if (CmdFailed(cost)) return cost; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
271 |
total_cost.AddCost(cost); |
0 | 272 |
} |
273 |
||
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
274 |
if ((p1 & SLOPE_N) != 0) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
275 |
TileIndex t = tile + TileDiffXY(0, 0); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
276 |
CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction); |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
277 |
if (CmdFailed(cost)) return cost; |
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
278 |
total_cost.AddCost(cost); |
0 | 279 |
} |
280 |
||
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
281 |
/* Check if the terraforming is valid wrt. tunnels, bridges and objects on the surface */ |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
282 |
{ |
0 | 283 |
int count; |
284 |
TileIndex *ti = ts.tile_table; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
285 |
|
1775
548dc04d50e2
(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
|
286 |
for (count = ts.tile_table_count; count != 0; count--, ti++) { |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
287 |
TileIndex tile = *ti; |
0 | 288 |
|
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
289 |
/* Find new heights of tile corners */ |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
290 |
uint z_N = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0)); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
291 |
uint z_W = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0)); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
292 |
uint z_S = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1)); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
293 |
uint z_E = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1)); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
294 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
295 |
/* Find min and max height of tile */ |
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
296 |
uint z_min = min(min(z_N, z_W), min(z_S, z_E)); |
0a3ff8c6ed75
(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:
7480
diff
changeset
|
297 |
uint z_max = max(max(z_N, z_W), max(z_S, z_E)); |
6718
ac9a2ab07d64
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
6683
diff
changeset
|
298 |
|
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
299 |
/* Compute tile slope */ |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
300 |
uint tileh = (z_max > z_min + 1 ? SLOPE_STEEP : SLOPE_FLAT); |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
301 |
if (z_W > z_min) tileh += SLOPE_W; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
302 |
if (z_S > z_min) tileh += SLOPE_S; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
303 |
if (z_E > z_min) tileh += SLOPE_E; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
304 |
if (z_N > z_min) tileh += SLOPE_N; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
305 |
|
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
306 |
/* Check if bridge would take damage */ |
6718
ac9a2ab07d64
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
6683
diff
changeset
|
307 |
if (direction == 1 && MayHaveBridgeAbove(tile) && IsBridgeAbove(tile) && |
ac9a2ab07d64
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
6683
diff
changeset
|
308 |
GetBridgeHeight(GetSouthernBridgeEnd(tile)) <= z_max * TILE_HEIGHT) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
309 |
_terraform_err_tile = tile; // highlight the tile under the bridge |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
310 |
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4815
diff
changeset
|
311 |
} |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
312 |
/* Check if tunnel would take damage */ |
6718
ac9a2ab07d64
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
6683
diff
changeset
|
313 |
if (direction == -1 && IsTunnelInWay(tile, z_min * TILE_HEIGHT)) { |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
314 |
_terraform_err_tile = tile; // highlight the tile above the tunnel |
6718
ac9a2ab07d64
(svn r9950) -Feature(tte): allow terraforming under bridges.
rubidium
parents:
6683
diff
changeset
|
315 |
return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE); |
2639 | 316 |
} |
7487
0a3ff8c6ed75
(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:
7480
diff
changeset
|
317 |
/* Check tiletype-specific things, and add extra-cost */ |
7637
43e2956af72e
(svn r11168) -Fix [FS#1256]: assert on terraforming of industries. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
318 |
CommandCost cost = _tile_type_procs[GetTileType(tile)]->terraform_tile_proc(tile, flags | DC_AUTO, z_min * TILE_HEIGHT, (Slope) tileh); |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
319 |
if (CmdFailed(cost)) { |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
320 |
_terraform_err_tile = tile; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
321 |
return cost; |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
322 |
} |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
323 |
total_cost.AddCost(cost); |
0 | 324 |
} |
325 |
} |
|
326 |
||
327 |
if (flags & DC_EXEC) { |
|
328 |
/* change the height */ |
|
329 |
{ |
|
330 |
int count; |
|
331 |
TerraformerHeightMod *mod; |
|
332 |
||
333 |
mod = ts.modheight; |
|
1775
548dc04d50e2
(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
|
334 |
for (count = ts.modheight_count; count != 0; count--, mod++) { |
1979
82d8bcc16ce2
(svn r2485) Missed two uint -> TileIndex, thanks _Luca_
tron
parents:
1977
diff
changeset
|
335 |
TileIndex til = mod->tile; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
336 |
|
1059
fe97d81a1b4f
(svn r1560) Introduce SetTileType() and SetTileHeight()
tron
parents:
1044
diff
changeset
|
337 |
SetTileHeight(til, mod->height); |
0 | 338 |
} |
339 |
} |
|
340 |
||
341 |
/* finally mark the dirty tiles dirty */ |
|
342 |
{ |
|
343 |
int count; |
|
344 |
TileIndex *ti = ts.tile_table; |
|
1775
548dc04d50e2
(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
|
345 |
for (count = ts.tile_table_count; count != 0; count--, ti++) { |
0 | 346 |
MarkTileDirtyByTile(*ti); |
347 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
348 |
} |
0 | 349 |
} |
7517
c02f7d09b1bc
(svn r11032) -Codechange: unmagicify some table sizes and removal of some unnecessary variables. Patch by frosch.
rubidium
parents:
7509
diff
changeset
|
350 |
return total_cost; |
0 | 351 |
} |
352 |
||
353 |
||
1796
614d996f6be7
(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
|
354 |
/** Levels a selected (rectangle) area of land |
3491
35d747bb5e82
(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
|
355 |
* @param tile end tile of area-drag |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
356 |
* @param flags for this command type |
1796
614d996f6be7
(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 p1 start tile of area drag |
614d996f6be7
(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
|
358 |
* @param p2 unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
359 |
* @return error or cost of terraforming |
0 | 360 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
361 |
CommandCost CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 362 |
{ |
363 |
int size_x, size_y; |
|
3491
35d747bb5e82
(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 ex; |
35d747bb5e82
(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
|
365 |
int ey; |
0 | 366 |
int sx, sy; |
367 |
uint h, curh; |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
368 |
CommandCost money; |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
369 |
CommandCost ret; |
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
370 |
CommandCost cost; |
0 | 371 |
|
2934
3f29a7212713
(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
|
372 |
if (p1 >= MapSize()) return CMD_ERROR; |
1796
614d996f6be7
(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
|
373 |
|
889
64d2f7d5f02b
(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 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
64d2f7d5f02b
(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
|
375 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
376 |
/* remember level height */ |
1044
63e0601a43cc
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
377 |
h = TileHeight(p1); |
0 | 378 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
379 |
/* make sure sx,sy are smaller than ex,ey */ |
3491
35d747bb5e82
(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 |
ex = TileX(tile); |
35d747bb5e82
(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
|
381 |
ey = TileY(tile); |
926
a6d140a6a4de
(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 |
sx = TileX(p1); |
a6d140a6a4de
(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
|
383 |
sy = TileY(p1); |
6106 | 384 |
if (ex < sx) Swap(ex, sx); |
385 |
if (ey < sy) Swap(ey, sy); |
|
1981 | 386 |
tile = TileXY(sx, sy); |
0 | 387 |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6357
diff
changeset
|
388 |
size_x = ex - sx + 1; |
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6357
diff
changeset
|
389 |
size_y = ey - sy + 1; |
0 | 390 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
391 |
money.AddCost(GetAvailableMoneyForCommand()); |
0 | 392 |
|
1796
614d996f6be7
(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
|
393 |
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) { |
1044
63e0601a43cc
(svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
tron
parents:
1035
diff
changeset
|
394 |
curh = TileHeight(tile2); |
0 | 395 |
while (curh != h) { |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
396 |
ret = DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND); |
1796
614d996f6be7
(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
|
397 |
if (CmdFailed(ret)) break; |
0 | 398 |
|
399 |
if (flags & DC_EXEC) { |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
400 |
money.AddCost(-ret.GetCost()); |
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
401 |
if (money.GetCost() < 0) { |
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
402 |
_additional_cash_required = ret.GetCost(); |
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
403 |
return cost; |
0 | 404 |
} |
7480
1ae973d5f341
(svn r10991) -Codechange: add documentation, enumification and some code simplifications to the terraforming code. Patch by frosch.
rubidium
parents:
7335
diff
changeset
|
405 |
DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND); |
0 | 406 |
} |
407 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
408 |
cost.AddCost(ret); |
0 | 409 |
curh += (curh > h) ? -1 : 1; |
410 |
} |
|
1796
614d996f6be7
(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
|
411 |
} END_TILE_LOOP(tile2, size_x, size_y, tile) |
0 | 412 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
413 |
return (cost.GetCost() == 0) ? CMD_ERROR : cost; |
0 | 414 |
} |
415 |
||
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
416 |
/** Purchase a land area. Actually you only purchase one tile, so |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
417 |
* the name is a bit confusing ;p |
3491
35d747bb5e82
(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
|
418 |
* @param tile the tile the player is purchasing |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
419 |
* @param flags for this command type |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
420 |
* @param p1 unused |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
421 |
* @param p2 unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
422 |
* @return error of cost of operation |
0 | 423 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
424 |
CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 425 |
{ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
426 |
CommandCost cost; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
427 |
|
0 | 428 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
429 |
|
3310
a19f247b75b6
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
430 |
if (IsOwnedLandTile(tile) && IsTileOwner(tile, _current_player)) { |
0 | 431 |
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT); |
3310
a19f247b75b6
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
432 |
} |
0 | 433 |
|
3491
35d747bb5e82
(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
|
434 |
cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
435 |
if (CmdFailed(cost)) return CMD_ERROR; |
0 | 436 |
|
437 |
if (flags & DC_EXEC) { |
|
3310
a19f247b75b6
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
438 |
MakeOwnedLand(tile, _current_player); |
a19f247b75b6
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3279
diff
changeset
|
439 |
MarkTileDirtyByTile(tile); |
0 | 440 |
} |
441 |
||
7977
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
442 |
return cost.AddCost(_price.clear_roughland * 10); |
0 | 443 |
} |
444 |
||
445 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
446 |
static CommandCost ClearTile_Clear(TileIndex tile, byte flags) |
1095 | 447 |
{ |
6953
230d1e3ac86c
(svn r10208) -Codechange: replace int32 with Money where appropriate.
rubidium
parents:
6950
diff
changeset
|
448 |
static const Money* clear_price_table[] = { |
7977
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
449 |
&_price.clear_grass, |
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
450 |
&_price.clear_roughland, |
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
451 |
&_price.clear_rocks, |
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
452 |
&_price.clear_fields, |
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
453 |
&_price.clear_roughland, |
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
454 |
&_price.clear_roughland, |
0 | 455 |
}; |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
456 |
CommandCost price; |
2955
24de69e236d2
(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 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
458 |
if (!IsClearGround(tile, CLEAR_GRASS) || GetClearDensity(tile) != 0) { |
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
459 |
price.AddCost(*clear_price_table[GetClearGround(tile)]); |
2955
24de69e236d2
(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
24de69e236d2
(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
48749e4c2dc6
(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 |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
468 |
* the name is a bit confusing ;p |
3491
35d747bb5e82
(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 |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
470 |
* @param flags for this command type |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
471 |
* @param p1 unused |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
472 |
* @param p2 unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
473 |
* @return error or cost of operation |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1775
diff
changeset
|
474 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6718
diff
changeset
|
475 |
CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 476 |
{ |
477 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
478 |
||
3310
a19f247b75b6
(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
980fabc7d8a5
(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; |
980fabc7d8a5
(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 |
|
7727
5aaf86199444
(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:
7637
diff
changeset
|
483 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
0 | 484 |
|
4000
4009d092b306
(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 |
|
7977
4a4e11757be5
(svn r11533) -Codechange: Rename some unclear clear_x prices member names.
belugas
parents:
7727
diff
changeset
|
487 |
return CommandCost(- _price.clear_roughland * 2); |
0 | 488 |
} |
489 |
||
490 |
||
491 |
#include "table/clear_land.h" |
|
492 |
||
493 |
||
2436
7d5df545bd5d
(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 |
{ |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
496 |
DrawGroundSprite(SPR_FLAT_BARE_LAND + _tileh_to_sprite[ti->tileh] + set * 19, PAL_NONE); |
0 | 497 |
} |
498 |
||
2436
7d5df545bd5d
(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
a36cc46e754d
(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) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
502 |
DrawGroundSprite(SPR_FLAT_ROUGH_LAND + _tileh_to_sprite[ti->tileh], PAL_NONE); |
0 | 503 |
} else { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
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
a36cc46e754d
(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
7f950533d510
(svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents:
3636
diff
changeset
|
513 |
z += TILE_HEIGHT; |
7f950533d510
(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
3ddf7c78d469
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
517 |
if (GetFenceSW(ti->tile) != 0) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
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
3ddf7c78d469
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
521 |
if (GetFenceSE(ti->tile) != 0) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
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
91e9fc028c95
(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
91e9fc028c95
(svn r3794) Use already available accessor functions instead of GB()
tron
parents:
3156
diff
changeset
|
530 |
DrawClearLandTile(ti, GetClearDensity(ti->tile)); |
2955
24de69e236d2
(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
24de69e236d2
(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); |
24de69e236d2
(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: |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
538 |
DrawGroundSprite(SPR_FLAT_ROCKY_LAND_1 + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
24de69e236d2
(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: |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
542 |
DrawGroundSprite(_clear_land_sprites_1[GetFieldType(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
24de69e236d2
(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: |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
546 |
DrawGroundSprite(_clear_land_sprites_2[GetClearDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
24de69e236d2
(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; |
24de69e236d2
(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: |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
550 |
DrawGroundSprite(_clear_land_sprites_3[GetClearDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); |
2955
24de69e236d2
(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); |
5385
3868f2e6db9b
(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
2823b3643862
(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
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
560 |
uint z; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
561 |
Slope tileh = GetTileSlope(tile, &z); |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4157
diff
changeset
|
562 |
|
2823b3643862
(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 |
|
7335
141c6b86ec1f
(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:
7317
diff
changeset
|
566 |
static Foundation GetFoundation_Clear(TileIndex tile, Slope tileh) |
39 | 567 |
{ |
7335
141c6b86ec1f
(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:
7317
diff
changeset
|
568 |
return FOUNDATION_NONE; |
39 | 569 |
} |
570 |
||
1977
37bbebf94434
(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
37bbebf94434
(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
de4a862fa8e2
(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; |
de4a862fa8e2
(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
3ddf7c78d469
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
590 |
if (GetFenceSW(tile) == 0) { |
2221
de4a862fa8e2
(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
3ddf7c78d469
(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
de4a862fa8e2
(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
3ddf7c78d469
(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
3ddf7c78d469
(svn r3554) Add accessors for the field type and fences of clear tiles
tron
parents:
2956
diff
changeset
|
603 |
if (GetFenceSE(tile) == 0) { |
2221
de4a862fa8e2
(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
3ddf7c78d469
(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
de4a862fa8e2
(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
3ddf7c78d469
(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
de4a862fa8e2
(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
37bbebf94434
(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 |
{ |
6343
76d17f784c13
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6248
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
8d0051fdde68
(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
24de69e236d2
(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
8d0051fdde68
(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
24de69e236d2
(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 |
|
24de69e236d2
(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) { |
24de69e236d2
(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); |
24de69e236d2
(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) { |
24de69e236d2
(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); |
24de69e236d2
(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 { |
24de69e236d2
(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; |
24de69e236d2
(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 |
} |
24de69e236d2
(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
37bbebf94434
(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
50b253bb9819
(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
50b253bb9819
(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 && |
50b253bb9819
(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 && |
50b253bb9819
(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 && |
50b253bb9819
(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
37bbebf94434
(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) { |
6357
f0f5e7d1713c
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6343
diff
changeset
|
669 |
case LT_TROPIC: TileLoopClearDesert(tile); break; |
f0f5e7d1713c
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6343
diff
changeset
|
670 |
case LT_ARCTIC: TileLoopClearAlps(tile); break; |
0 | 671 |
} |
672 |
||
2955
24de69e236d2
(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
24de69e236d2
(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
24de69e236d2
(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) { |
24de69e236d2
(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) { |
24de69e236d2
(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); |
24de69e236d2
(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; |
24de69e236d2
(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 { |
24de69e236d2
(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); |
24de69e236d2
(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); |
24de69e236d2
(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 |
} |
24de69e236d2
(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
24de69e236d2
(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; |
24de69e236d2
(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
24de69e236d2
(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; |
24de69e236d2
(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 |
|
24de69e236d2
(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; |
24de69e236d2
(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 |
|
24de69e236d2
(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) { |
24de69e236d2
(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); |
24de69e236d2
(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; |
24de69e236d2
(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 { |
24de69e236d2
(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); |
24de69e236d2
(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 |
} |
24de69e236d2
(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
050e8ea8f3bb
(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
1b3940c35724
(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
d702c4027451
(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
1b3940c35724
(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 { |
1b3940c35724
(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); |
1b3940c35724
(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; |
1b3940c35724
(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); |
1b3940c35724
(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
24de69e236d2
(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
24de69e236d2
(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 |
|
24de69e236d2
(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 |
||
6247 | 720 |
void GenerateClearTile() |
0 | 721 |
{ |
4300
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
722 |
uint i, gi; |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
723 |
TileIndex tile; |
0 | 724 |
|
4300
c7e43c47a2b9
(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
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
727 |
gi = ScaleByMapSize(GB(Random(), 0, 7) + 0x80); |
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
728 |
|
c7e43c47a2b9
(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
c7e43c47a2b9
(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
c7e43c47a2b9
(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
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
736 |
/* add rocky tiles */ |
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
737 |
i = gi; |
0 | 738 |
do { |
2150
f710b959b1c4
(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
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
741 |
|
c7e43c47a2b9
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
742 |
IncreaseGeneratingWorldProgress(GWP_ROUGH_ROCKY); |
c7e43c47a2b9
(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
f710b959b1c4
(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
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1901
diff
changeset
|
746 |
TileIndex tile_new; |
37bbebf94434
(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; |
|
7317
e61af9d8a2b3
(svn r10672) -Codechange: typify some parameters/variables.
rubidium
parents:
7313
diff
changeset
|
751 |
tile_new = tile + TileOffsByDiagDir((DiagDirection)GB(Random(), 0, 2)); |
4300
c7e43c47a2b9
(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
37bbebf94434
(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 |
||
6683
b88ae30866ce
(svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium
parents:
6491
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
24de69e236d2
(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
24de69e236d2
(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
37bbebf94434
(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
24de69e236d2
(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; |
24de69e236d2
(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 { |
24de69e236d2
(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)]; |
24de69e236d2
(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
03bf9bf99319
(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
7d5df545bd5d
(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 |
||
6247 | 794 |
void InitializeClearLand() |
1093
4fdc46eaf423
(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
a6eba3443452
(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 |
||
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
799 |
static CommandCost TerraformTile_Clear(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
800 |
{ |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
801 |
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
802 |
} |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
803 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
804 |
extern const TileTypeProcs _tile_type_clear_procs = { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
805 |
DrawTile_Clear, ///< draw_tile_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
806 |
GetSlopeZ_Clear, ///< get_slope_z_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
807 |
ClearTile_Clear, ///< clear_tile_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
808 |
GetAcceptedCargo_Clear, ///< get_accepted_cargo_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
809 |
GetTileDesc_Clear, ///< get_tile_desc_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
810 |
GetTileTrackStatus_Clear, ///< get_tile_track_status_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
811 |
ClickTile_Clear, ///< click_tile_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
812 |
AnimateTile_Clear, ///< animate_tile_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
813 |
TileLoop_Clear, ///< tile_loop_clear |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
814 |
ChangeTileOwner_Clear, ///< change_tile_owner_clear |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
815 |
NULL, ///< get_produced_cargo_proc |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6106
diff
changeset
|
816 |
NULL, ///< vehicle_enter_tile_proc |
7335
141c6b86ec1f
(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:
7317
diff
changeset
|
817 |
GetFoundation_Clear, ///< get_foundation_proc |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7487
diff
changeset
|
818 |
TerraformTile_Clear, ///< terraform_tile_proc |
0 | 819 |
}; |