author | rubidium |
Sat, 26 Apr 2008 20:54:56 +0000 | |
branch | 0.6 |
changeset 10366 | 960aae8c20e2 |
parent 9112 | ec6800eaa340 |
child 9281 | d8cd9ac52a68 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
3 |
/** @file unmovable_cmd.cpp */ |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1796
diff
changeset
|
6 |
#include "openttd.h" |
8615
6b91ca653bad
(svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents:
8612
diff
changeset
|
7 |
#include "tile_cmd.h" |
6949
72d11a1e1e60
(svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents:
6923
diff
changeset
|
8 |
#include "landscape.h" |
8612
6414fc21c2f3
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
8604
diff
changeset
|
9 |
#include "command_func.h" |
8720
4e60c30e2006
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents:
8706
diff
changeset
|
10 |
#include "viewport_func.h" |
8750
fdd6054e7bae
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8726
diff
changeset
|
11 |
#include "player_func.h" |
fdd6054e7bae
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8726
diff
changeset
|
12 |
#include "player_base.h" |
0 | 13 |
#include "gui.h" |
384
bf1303e754ff
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
222
diff
changeset
|
14 |
#include "station.h" |
0 | 15 |
#include "town.h" |
405
6830ae7a0d5d
(svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky)
darkvater
parents:
384
diff
changeset
|
16 |
#include "sprite.h" |
7698
7b2eb61fca53
(svn r10480) -Fix: Don't allow building lighthouses and transmitters under bridges in the scenario editor, or during world generation.
maedhros
parents:
7449
diff
changeset
|
17 |
#include "bridge_map.h" |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
18 |
#include "unmovable_map.h" |
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
2150
diff
changeset
|
19 |
#include "variables.h" |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
20 |
#include "genworld.h" |
6486
4f8af35b11eb
(svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium
parents:
5919
diff
changeset
|
21 |
#include "bridge.h" |
8078
bdf94bf88568
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
8045
diff
changeset
|
22 |
#include "autoslope.h" |
8345
6caa3fdb972c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
8291
diff
changeset
|
23 |
#include "transparency.h" |
8627
448ebf3a8291
(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:
8615
diff
changeset
|
24 |
#include "functions.h" |
448ebf3a8291
(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:
8615
diff
changeset
|
25 |
#include "window_func.h" |
8706
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
26 |
#include "vehicle_func.h" |
8750
fdd6054e7bae
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8726
diff
changeset
|
27 |
#include "player_gui.h" |
0 | 28 |
|
8760
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
29 |
#include "table/strings.h" |
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
30 |
#include "table/sprites.h" |
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
31 |
#include "table/unmovable_land.h" |
ce0891c412ce
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8750
diff
changeset
|
32 |
|
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
33 |
/** Destroy a HQ. |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
34 |
* During normal gameplay you can only implicitely destroy a HQ when you are |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
35 |
* rebuilding it. Otherwise, only water can destroy it. |
6980
6b5dee376733
(svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents:
6949
diff
changeset
|
36 |
* @param pid Player requesting the destruction of his HQ |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
37 |
* @param flags docommand flags of calling function |
6980
6b5dee376733
(svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents:
6949
diff
changeset
|
38 |
* @return cost of the operation |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
39 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7216
diff
changeset
|
40 |
static CommandCost DestroyCompanyHQ(PlayerID pid, uint32 flags) |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
41 |
{ |
4060
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
42 |
Player* p = GetPlayer(pid); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
43 |
|
4060
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
44 |
if (flags & DC_EXEC) { |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
45 |
TileIndex t = p->location_of_house; |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
46 |
|
4060
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
47 |
DoClearSquare(t + TileDiffXY(0, 0)); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
48 |
DoClearSquare(t + TileDiffXY(0, 1)); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
49 |
DoClearSquare(t + TileDiffXY(1, 0)); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
50 |
DoClearSquare(t + TileDiffXY(1, 1)); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
51 |
p->location_of_house = 0; // reset HQ position |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
52 |
InvalidateWindow(WC_COMPANY, pid); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
53 |
} |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
54 |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
55 |
/* cost of relocating company is 1% of company value */ |
8726
5ae45b46506b
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8720
diff
changeset
|
56 |
return CommandCost(EXPENSES_PROPERTY, CalculateCompanyValue(p) / 100); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
57 |
} |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
58 |
|
3386
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
59 |
void UpdateCompanyHQ(Player *p, uint score) |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
60 |
{ |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
61 |
byte val; |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
62 |
TileIndex tile = p->location_of_house; |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
63 |
|
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
64 |
if (tile == 0) return; |
3386
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
65 |
|
3388
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
66 |
(val = 0, score < 170) || |
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
67 |
(val++, score < 350) || |
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
68 |
(val++, score < 520) || |
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
69 |
(val++, score < 720) || |
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
70 |
(val++, true); |
3386
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
71 |
|
3388
c802170b5dd4
(svn r4196) -Codechange: Add and make use of an accessor that modifies the size of the Company HQ
celestar
parents:
3386
diff
changeset
|
72 |
EnlargeCompanyHQ(tile, val); |
3386
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
73 |
|
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
74 |
MarkTileDirtyByTile(tile + TileDiffXY(0, 0)); |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
75 |
MarkTileDirtyByTile(tile + TileDiffXY(0, 1)); |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
76 |
MarkTileDirtyByTile(tile + TileDiffXY(1, 0)); |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
77 |
MarkTileDirtyByTile(tile + TileDiffXY(1, 1)); |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
78 |
} |
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
79 |
|
8291
443b58ba6f8a
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
8097
diff
changeset
|
80 |
extern CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID *station, bool check_clear = true); |
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
81 |
|
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
82 |
/** Build or relocate the HQ. This depends if the HQ is already built or not |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3427
diff
changeset
|
83 |
* @param tile tile where the HQ will be built or relocated to |
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
84 |
* @param flags type of operation |
2473
bbc4e805214d
(svn r2999) Do not pass if the HQ gets built for the first time or gets relocated as parameter - the command function has to check this anyway
tron
parents:
2436
diff
changeset
|
85 |
* @param p1 unused |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
86 |
* @param p2 unused |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
87 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7216
diff
changeset
|
88 |
CommandCost CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
89 |
{ |
1962
51ee4f459268
(svn r2468) -Codechange: Got rid of DEREF_PLAYER and replaced it by GetPlayer
celestar
parents:
1902
diff
changeset
|
90 |
Player *p = GetPlayer(_current_player); |
8726
5ae45b46506b
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8720
diff
changeset
|
91 |
CommandCost cost(EXPENSES_PROPERTY); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
92 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
93 |
cost = CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL); |
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
94 |
if (CmdFailed(cost)) return cost; |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
95 |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
96 |
if (p->location_of_house != 0) { // Moving HQ |
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
97 |
cost.AddCost(DestroyCompanyHQ(_current_player, flags)); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
98 |
} |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
99 |
|
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
100 |
if (flags & DC_EXEC) { |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
101 |
int score = UpdateCompanyRatingAndValue(p, false); |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
102 |
|
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
103 |
p->location_of_house = tile; |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
104 |
|
3385
41ebb01a92f2
(svn r4193) -Codechange: Add and make use of an accessor function to create company HQs
celestar
parents:
3310
diff
changeset
|
105 |
MakeCompanyHQ(tile, _current_player); |
41ebb01a92f2
(svn r4193) -Codechange: Add and make use of an accessor function to create company HQs
celestar
parents:
3310
diff
changeset
|
106 |
|
3386
edda700ed8e5
(svn r4194) -Codechange: Renamed UpdatePlayerHouse to UpdateCompanyHQ because the rest of the code calls it Comapany HQ. Moved it to unmovable_cmd.c because CompanyHQ is an unmovable and has nothing to do with economy.
celestar
parents:
3385
diff
changeset
|
107 |
UpdateCompanyHQ(p, score); |
3017
915fae59d5e0
(svn r3597) Miscellaneous (I like that word) changes: Fix some indentation, add consts, reduce indentation level by short-circuit logic, convert if cascades to switch, whitespace, bracing, plus some minor stuff
tron
parents:
2951
diff
changeset
|
108 |
InvalidateWindow(WC_COMPANY, p->index); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
109 |
} |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
110 |
|
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
111 |
return cost; |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
112 |
} |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1792
diff
changeset
|
113 |
|
8706
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
114 |
/** Purchase a land area. Actually you only purchase one tile, so |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
115 |
* the name is a bit confusing ;p |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
116 |
* @param tile the tile the player is purchasing |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
117 |
* @param flags for this command type |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
118 |
* @param p1 unused |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
119 |
* @param p2 unused |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
120 |
* @return error of cost of operation |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
121 |
*/ |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
122 |
CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
123 |
{ |
8726
5ae45b46506b
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8720
diff
changeset
|
124 |
CommandCost cost(EXPENSES_CONSTRUCTION); |
8706
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
125 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
126 |
if (IsOwnedLandTile(tile) && IsTileOwner(tile, _current_player)) { |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
127 |
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
128 |
} |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
129 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
130 |
cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
131 |
if (CmdFailed(cost)) return CMD_ERROR; |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
132 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
133 |
if (flags & DC_EXEC) { |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
134 |
MakeOwnedLand(tile, _current_player); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
135 |
MarkTileDirtyByTile(tile); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
136 |
} |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
137 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
138 |
return cost.AddCost(_price.clear_roughland * 10); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
139 |
} |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
140 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
141 |
/** Sell a land area. Actually you only sell one tile, so |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
142 |
* the name is a bit confusing ;p |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
143 |
* @param tile the tile the player is selling |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
144 |
* @param flags for this command type |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
145 |
* @param p1 unused |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
146 |
* @param p2 unused |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
147 |
* @return error or cost of operation |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
148 |
*/ |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
149 |
CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
150 |
{ |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
151 |
if (!IsOwnedLandTile(tile)) return CMD_ERROR; |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
152 |
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) return CMD_ERROR; |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
153 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
154 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
155 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
156 |
|
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
157 |
if (flags & DC_EXEC) DoClearSquare(tile); |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
158 |
|
8726
5ae45b46506b
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8720
diff
changeset
|
159 |
return CommandCost(EXPENSES_CONSTRUCTION,- _price.clear_roughland * 2); |
8706
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
160 |
} |
e76561c3dd66
(svn r11773) -Codechange: move some non-clear-land functions from clear_cmd.cpp to a more correct location.
rubidium
parents:
8635
diff
changeset
|
161 |
|
8045
2878bb74729f
(svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium
parents:
7990
diff
changeset
|
162 |
static Foundation GetFoundation_Unmovable(TileIndex tile, Slope tileh); |
2878bb74729f
(svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium
parents:
7990
diff
changeset
|
163 |
|
0 | 164 |
static void DrawTile_Unmovable(TileInfo *ti) |
165 |
{ |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
166 |
|
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
167 |
switch (GetUnmovableType(ti->tile)) { |
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
168 |
case UNMOVABLE_TRANSMITTER: |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
169 |
case UNMOVABLE_LIGHTHOUSE: { |
9072
6d250714e35d
(svn r12157) -Codechange: Remove a structure definition and replace it with another one closely matching
belugas
parents:
9067
diff
changeset
|
170 |
const DrawTileSeqStruct* dtu = &_draw_tile_transmitterlighthouse_data[GetUnmovableType(ti->tile)]; |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
171 |
|
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7829
diff
changeset
|
172 |
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED); |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
173 |
DrawClearLandTile(ti, 2); |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
174 |
|
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
175 |
AddSortableSpriteToDraw( |
9072
6d250714e35d
(svn r12157) -Codechange: Remove a structure definition and replace it with another one closely matching
belugas
parents:
9067
diff
changeset
|
176 |
dtu->image.sprite, PAL_NONE, ti->x | dtu->delta_x, ti->y | dtu->delta_y, |
6d250714e35d
(svn r12157) -Codechange: Remove a structure definition and replace it with another one closely matching
belugas
parents:
9067
diff
changeset
|
177 |
dtu->size_x, dtu->size_y, dtu->size_z, ti->z, |
8345
6caa3fdb972c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
8291
diff
changeset
|
178 |
IsTransparencySet(TO_STRUCTURES) |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
179 |
); |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
180 |
break; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
181 |
} |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
182 |
|
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
183 |
case UNMOVABLE_STATUE: |
8045
2878bb74729f
(svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium
parents:
7990
diff
changeset
|
184 |
/* This should prevent statues from sinking into the ground when on a slope. */ |
2878bb74729f
(svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium
parents:
7990
diff
changeset
|
185 |
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, GetFoundation_Unmovable(ti->tile, ti->tileh)); |
2878bb74729f
(svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium
parents:
7990
diff
changeset
|
186 |
|
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5852
diff
changeset
|
187 |
DrawGroundSprite(SPR_CONCRETE_GROUND, PAL_NONE); |
0 | 188 |
|
8345
6caa3fdb972c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
8291
diff
changeset
|
189 |
AddSortableSpriteToDraw(SPR_STATUE_COMPANY, PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), ti->x, ti->y, 16, 16, 25, ti->z, IsTransparencySet(TO_STRUCTURES)); |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
190 |
break; |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
191 |
|
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
192 |
case UNMOVABLE_OWNED_LAND: |
0 | 193 |
DrawClearLandTile(ti, 0); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
194 |
|
0 | 195 |
AddSortableSpriteToDraw( |
7829
88883899c9e6
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7698
diff
changeset
|
196 |
SPR_BOUGHT_LAND, PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), |
8097
68eefbb4ff46
(svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents:
8078
diff
changeset
|
197 |
ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSlopeZ(ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2) |
0 | 198 |
); |
5573
afa6f92a71fd
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
4848
diff
changeset
|
199 |
DrawBridgeMiddle(ti); |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
200 |
break; |
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
201 |
|
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
202 |
default: { |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
203 |
const DrawTileSeqStruct* dtss; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
204 |
const DrawTileSprites* t; |
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5852
diff
changeset
|
205 |
SpriteID palette; |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
206 |
|
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
207 |
assert(IsCompanyHQ(ti->tile)); |
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7829
diff
changeset
|
208 |
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED); |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
209 |
|
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5852
diff
changeset
|
210 |
palette = PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)); |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
211 |
|
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
212 |
t = &_unmovable_display_datas[GetCompanyHQSection(ti->tile)]; |
9067
88f2bc991236
(svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch
parents:
9066
diff
changeset
|
213 |
DrawGroundSprite(t->ground.sprite, palette); |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
214 |
|
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
215 |
foreach_draw_tile_seq(dtss, t->seq) { |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
216 |
AddSortableSpriteToDraw( |
9066
29d5a0dfc329
(svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID
frosch
parents:
8964
diff
changeset
|
217 |
dtss->image.sprite, palette, |
4230
cd86b1c47f33
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4083
diff
changeset
|
218 |
ti->x + dtss->delta_x, ti->y + dtss->delta_y, |
cd86b1c47f33
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4083
diff
changeset
|
219 |
dtss->size_x, dtss->size_y, |
7829
88883899c9e6
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7698
diff
changeset
|
220 |
dtss->size_z, ti->z + dtss->delta_z, |
8345
6caa3fdb972c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
8291
diff
changeset
|
221 |
IsTransparencySet(TO_STRUCTURES) |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
222 |
); |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
223 |
} |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
224 |
break; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4060
diff
changeset
|
225 |
} |
0 | 226 |
} |
227 |
} |
|
228 |
||
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
229 |
static uint GetSlopeZ_Unmovable(TileIndex tile, uint x, uint y) |
0 | 230 |
{ |
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
231 |
if (IsOwnedLand(tile)) { |
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
232 |
uint z; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
233 |
Slope tileh = GetTileSlope(tile, &z); |
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
234 |
|
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
235 |
return z + GetPartialZ(x & 0xF, y & 0xF, tileh); |
3282
4f91ee240e68
(svn r3996) -Fix: Slope and height information returned for some tile types is wrong
tron
parents:
3183
diff
changeset
|
236 |
} else { |
4231
dea6a63dd058
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
237 |
return GetTileMaxZ(tile); |
3282
4f91ee240e68
(svn r3996) -Fix: Slope and height information returned for some tile types is wrong
tron
parents:
3183
diff
changeset
|
238 |
} |
0 | 239 |
} |
240 |
||
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7829
diff
changeset
|
241 |
static Foundation GetFoundation_Unmovable(TileIndex tile, Slope tileh) |
39 | 242 |
{ |
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7829
diff
changeset
|
243 |
return IsOwnedLand(tile) ? FOUNDATION_NONE : FlatteningFoundation(tileh); |
39 | 244 |
} |
245 |
||
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7216
diff
changeset
|
246 |
static CommandCost ClearTile_Unmovable(TileIndex tile, byte flags) |
0 | 247 |
{ |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
248 |
if (IsCompanyHQ(tile)) { |
4060
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
249 |
if (_current_player == OWNER_WATER) { |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
250 |
return DestroyCompanyHQ(GetTileOwner(tile), DC_EXEC); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
251 |
} else { |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
252 |
return_cmd_error(STR_5804_COMPANY_HEADQUARTERS_IN); |
215196195b2a
(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water
tron
parents:
3657
diff
changeset
|
253 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
254 |
} |
0 | 255 |
|
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
256 |
if (IsOwnedLand(tile)) { |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3427
diff
changeset
|
257 |
return DoCommand(tile, 0, 0, flags, CMD_SELL_LAND_AREA); |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
258 |
} |
0 | 259 |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
260 |
/* checks if you're allowed to remove unmovable things */ |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
147
diff
changeset
|
261 |
if (_game_mode != GM_EDITOR && _current_player != OWNER_WATER && ((flags & DC_AUTO || !_cheats.magic_bulldozer.value)) ) |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
147
diff
changeset
|
262 |
return_cmd_error(STR_5800_OBJECT_IN_THE_WAY); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
263 |
|
6583
82012e77b10c
(svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight
parents:
6573
diff
changeset
|
264 |
if (IsStatue(tile)) { |
8957
ed06a4be28b9
(svn r12031) -Fix [FS#1689,FS#1719]: Prevent towns from removing or claiming ownership of player owned tiles when growing.
peter1138
parents:
8760
diff
changeset
|
265 |
if (flags & DC_AUTO) return_cmd_error(STR_5800_OBJECT_IN_THE_WAY); |
ed06a4be28b9
(svn r12031) -Fix [FS#1689,FS#1719]: Prevent towns from removing or claiming ownership of player owned tiles when growing.
peter1138
parents:
8760
diff
changeset
|
266 |
|
6583
82012e77b10c
(svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight
parents:
6573
diff
changeset
|
267 |
TownID town = GetStatueTownID(tile); |
8958
b2c67df4bcc0
(svn r12032) -Fix: When removing a statue, remove town statue flag for the statue owner, not current player.
peter1138
parents:
8957
diff
changeset
|
268 |
ClrBit(GetTown(town)->statues, GetTileOwner(tile)); |
6583
82012e77b10c
(svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight
parents:
6573
diff
changeset
|
269 |
InvalidateWindow(WC_TOWN_AUTHORITY, town); |
82012e77b10c
(svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight
parents:
6573
diff
changeset
|
270 |
} |
82012e77b10c
(svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight
parents:
6573
diff
changeset
|
271 |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
272 |
if (flags & DC_EXEC) { |
0 | 273 |
DoClearSquare(tile); |
274 |
} |
|
275 |
||
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
276 |
return CommandCost(); |
0 | 277 |
} |
278 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
279 |
static void GetAcceptedCargo_Unmovable(TileIndex tile, AcceptedCargo ac) |
0 | 280 |
{ |
281 |
uint level; // HQ level (depends on company performance) in the range 1..5. |
|
282 |
||
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
283 |
if (!IsCompanyHQ(tile)) return; |
0 | 284 |
|
285 |
/* HQ accepts passenger and mail; but we have to divide the values |
|
286 |
* between 4 tiles it occupies! */ |
|
287 |
||
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
288 |
level = GetCompanyHQSize(tile) + 1; |
0 | 289 |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
290 |
/* Top town building generates 10, so to make HQ interesting, the top |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
291 |
* type makes 20. */ |
5852
cb3f71b16e1a
(svn r8055) -Codechange: Replace the different max, dmax, maxu whatever macros by a simple template function max(), that requires two arguments of the same type. While I'm at it change a variable called "max" to "maxval" in a function that calls max().
celestar
parents:
5838
diff
changeset
|
292 |
ac[CT_PASSENGERS] = max(1U, level); |
0 | 293 |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
294 |
/* Top town building generates 4, HQ can make up to 8. The |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
295 |
* proportion passengers:mail is different because such a huge |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
296 |
* commercial building generates unusually high amount of mail |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
297 |
* correspondence per physical visitor. */ |
5852
cb3f71b16e1a
(svn r8055) -Codechange: Replace the different max, dmax, maxu whatever macros by a simple template function max(), that requires two arguments of the same type. While I'm at it change a variable called "max" to "maxval" in a function that calls max().
celestar
parents:
5838
diff
changeset
|
298 |
ac[CT_MAIL] = max(1U, level / 2); |
0 | 299 |
} |
300 |
||
301 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
302 |
static void GetTileDesc_Unmovable(TileIndex tile, TileDesc *td) |
0 | 303 |
{ |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
304 |
switch (GetUnmovableType(tile)) { |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
305 |
case UNMOVABLE_TRANSMITTER: td->str = STR_5801_TRANSMITTER; break; |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
306 |
case UNMOVABLE_LIGHTHOUSE: td->str = STR_5802_LIGHTHOUSE; break; |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
307 |
case UNMOVABLE_STATUE: td->str = STR_2016_STATUE; break; |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
308 |
case UNMOVABLE_OWNED_LAND: td->str = STR_5805_COMPANY_OWNED_LAND; break; |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
309 |
default: td->str = STR_5803_COMPANY_HEADQUARTERS; break; |
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
310 |
} |
1901
fb05044cf5c3
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
311 |
td->owner = GetTileOwner(tile); |
0 | 312 |
} |
313 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
314 |
static void AnimateTile_Unmovable(TileIndex tile) |
0 | 315 |
{ |
316 |
/* not used */ |
|
317 |
} |
|
318 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
319 |
static void TileLoop_Unmovable(TileIndex tile) |
0 | 320 |
{ |
2150
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2148
diff
changeset
|
321 |
uint level; // HQ level (depends on company performance) in the range 1..5. |
0 | 322 |
uint32 r; |
323 |
||
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
324 |
if (!IsCompanyHQ(tile)) return; |
0 | 325 |
|
326 |
/* HQ accepts passenger and mail; but we have to divide the values |
|
327 |
* between 4 tiles it occupies! */ |
|
328 |
||
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
329 |
level = GetCompanyHQSize(tile) + 1; |
0 | 330 |
assert(level < 6); |
331 |
||
332 |
r = Random(); |
|
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
333 |
/* Top town buildings generate 250, so the top HQ type makes 256. */ |
2150
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2148
diff
changeset
|
334 |
if (GB(r, 0, 8) < (256 / 4 / (6 - level))) { |
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2148
diff
changeset
|
335 |
uint amt = GB(r, 0, 8) / 8 / 4 + 1; |
0 | 336 |
if (_economy.fluct <= 0) amt = (amt + 1) >> 1; |
337 |
MoveGoodsToStation(tile, 2, 2, CT_PASSENGERS, amt); |
|
338 |
} |
|
339 |
||
6919
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
340 |
/* Top town building generates 90, HQ can make up to 196. The |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
341 |
* proportion passengers:mail is about the same as in the acceptance |
339210ecccd3
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents:
6683
diff
changeset
|
342 |
* equations. */ |
2150
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2148
diff
changeset
|
343 |
if (GB(r, 8, 8) < (196 / 4 / (6 - level))) { |
010d923a81a9
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2148
diff
changeset
|
344 |
uint amt = GB(r, 8, 8) / 8 / 4 + 1; |
0 | 345 |
if (_economy.fluct <= 0) amt = (amt + 1) >> 1; |
346 |
MoveGoodsToStation(tile, 2, 2, CT_MAIL, amt); |
|
347 |
} |
|
348 |
} |
|
349 |
||
350 |
||
9112
ec6800eaa340
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
9092
diff
changeset
|
351 |
static TrackStatus GetTileTrackStatus_Unmovable(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) |
0 | 352 |
{ |
353 |
return 0; |
|
354 |
} |
|
355 |
||
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
356 |
static void ClickTile_Unmovable(TileIndex tile) |
0 | 357 |
{ |
3427
98d955156735
(svn r4255) -Codechange: Add and make use of more accessor functions concerning unmovables. unmovable_cmd is now map access free
celestar
parents:
3422
diff
changeset
|
358 |
if (IsCompanyHQ(tile)) ShowPlayerCompany(GetTileOwner(tile)); |
0 | 359 |
} |
360 |
||
361 |
||
362 |
/* checks, if a radio tower is within a 9x9 tile square around tile */ |
|
4083
990d8f571180
(svn r5398) Rename checkRadioTowerNearby() to IsRadioTowerNearby() and flip its return value to make it a bit less ambiguous
tron
parents:
4077
diff
changeset
|
363 |
static bool IsRadioTowerNearby(TileIndex tile) |
0 | 364 |
{ |
1981 | 365 |
TileIndex tile_s = tile - TileDiffXY(4, 4); |
0 | 366 |
|
367 |
BEGIN_TILE_LOOP(tile, 9, 9, tile_s) |
|
4083
990d8f571180
(svn r5398) Rename checkRadioTowerNearby() to IsRadioTowerNearby() and flip its return value to make it a bit less ambiguous
tron
parents:
4077
diff
changeset
|
368 |
if (IsTransmitterTile(tile)) return true; |
0 | 369 |
END_TILE_LOOP(tile, 9, 9, tile_s) |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
370 |
|
4083
990d8f571180
(svn r5398) Rename checkRadioTowerNearby() to IsRadioTowerNearby() and flip its return value to make it a bit less ambiguous
tron
parents:
4077
diff
changeset
|
371 |
return false; |
0 | 372 |
} |
373 |
||
6573 | 374 |
void GenerateUnmovables() |
0 | 375 |
{ |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
376 |
int i, li, j, loop_count; |
1977
4392ae3d8e31
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1962
diff
changeset
|
377 |
TileIndex tile; |
1335
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1225
diff
changeset
|
378 |
uint h; |
3164
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
379 |
uint maxx; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
380 |
uint maxy; |
0 | 381 |
|
6683
7ec558346172
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6584
diff
changeset
|
382 |
if (_opt.landscape == LT_TOYLAND) return; |
0 | 383 |
|
384 |
/* add radio tower */ |
|
1202
7d8b86bd8ba2
(svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents:
1093
diff
changeset
|
385 |
i = ScaleByMapSize(1000); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
386 |
j = ScaleByMapSize(15); // maximum number of radio towers on the map |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
387 |
li = ScaleByMapSize1D((Random() & 3) + 7); |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
388 |
SetGeneratingWorldProgress(GWP_UNMOVABLE, j + li); |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
389 |
|
0 | 390 |
do { |
2051 | 391 |
tile = RandomTile(); |
7698
7b2eb61fca53
(svn r10480) -Fix: Don't allow building lighthouses and transmitters under bridges in the scenario editor, or during world generation.
maedhros
parents:
7449
diff
changeset
|
392 |
if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h >= TILE_HEIGHT * 4 && !IsBridgeAbove(tile)) { |
4083
990d8f571180
(svn r5398) Rename checkRadioTowerNearby() to IsRadioTowerNearby() and flip its return value to make it a bit less ambiguous
tron
parents:
4077
diff
changeset
|
393 |
if (IsRadioTowerNearby(tile)) continue; |
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
394 |
MakeTransmitter(tile); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
395 |
IncreaseGeneratingWorldProgress(GWP_UNMOVABLE); |
2951 | 396 |
if (--j == 0) break; |
0 | 397 |
} |
398 |
} while (--i); |
|
399 |
||
6683
7ec558346172
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6584
diff
changeset
|
400 |
if (_opt.landscape == LT_TROPIC) return; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
401 |
|
0 | 402 |
/* add lighthouses */ |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
403 |
i = li; |
3164
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
404 |
maxx = MapMaxX(); |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
405 |
maxy = MapMaxY(); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
406 |
loop_count = 0; |
0 | 407 |
do { |
3164
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
408 |
uint32 r; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
409 |
DiagDirection dir; |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
410 |
int perimeter; |
3164
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
411 |
|
0 | 412 |
restart: |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
413 |
/* Avoid infinite loops */ |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
414 |
if (++loop_count > 1000) break; |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
415 |
|
0 | 416 |
r = Random(); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
417 |
|
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
418 |
/* Scatter the lighthouses more evenly around the perimeter */ |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
419 |
perimeter = (GB(r, 16, 16) % (2 * (maxx + maxy))) - maxy; |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
420 |
for (dir = DIAGDIR_NE; perimeter > 0; dir++) { |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
421 |
perimeter -= (DiagDirToAxis(dir) == AXIS_X) ? maxx : maxy; |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
422 |
} |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
423 |
|
3164
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
424 |
switch (dir) { |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
425 |
default: |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
426 |
case DIAGDIR_NE: tile = TileXY(maxx, r % maxy); break; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
427 |
case DIAGDIR_SE: tile = TileXY(r % maxx, 0); break; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
428 |
case DIAGDIR_SW: tile = TileXY(0, r % maxy); break; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
429 |
case DIAGDIR_NW: tile = TileXY(r % maxx, maxy); break; |
22513656d02b
(svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir
tron
parents:
3017
diff
changeset
|
430 |
} |
0 | 431 |
j = 20; |
432 |
do { |
|
2951 | 433 |
if (--j == 0) goto restart; |
4559
c853d2440065
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4300
diff
changeset
|
434 |
tile = TILE_MASK(tile + TileOffsByDiagDir(dir)); |
7698
7b2eb61fca53
(svn r10480) -Fix: Don't allow building lighthouses and transmitters under bridges in the scenario editor, or during world generation.
maedhros
parents:
7449
diff
changeset
|
435 |
} while (!(IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == SLOPE_FLAT && h <= TILE_HEIGHT * 2 && !IsBridgeAbove(tile))); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
436 |
|
0 | 437 |
assert(tile == TILE_MASK(tile)); |
438 |
||
3310
7339b2b1e957
(svn r4073) Add functions to make and test for (most) unmovable tiles
tron
parents:
3282
diff
changeset
|
439 |
MakeLighthouse(tile); |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
4231
diff
changeset
|
440 |
IncreaseGeneratingWorldProgress(GWP_UNMOVABLE); |
0 | 441 |
} while (--i); |
442 |
} |
|
443 |
||
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2186
diff
changeset
|
444 |
static void ChangeTileOwner_Unmovable(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 445 |
{ |
1901
fb05044cf5c3
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
446 |
if (!IsTileOwner(tile, old_player)) return; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
160
diff
changeset
|
447 |
|
4848
56549aa3e234
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4559
diff
changeset
|
448 |
if (IsOwnedLand(tile) && new_player != PLAYER_SPECTATOR) { |
1902 | 449 |
SetTileOwner(tile, new_player); |
8964
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
450 |
} else if (IsStatueTile(tile)) { |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
451 |
TownID town = GetStatueTownID(tile); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
452 |
Town *t = GetTown(town); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
453 |
ClrBit(t->statues, old_player); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
454 |
if (new_player != PLAYER_SPECTATOR && !HasBit(t->statues, new_player)) { |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
455 |
/* Transfer ownership to the new company */ |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
456 |
SetBit(t->statues, new_player); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
457 |
SetTileOwner(tile, new_player); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
458 |
} else { |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
459 |
DoClearSquare(tile); |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
460 |
} |
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
461 |
|
d90216f46fa3
(svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies.
peter1138
parents:
8958
diff
changeset
|
462 |
InvalidateWindow(WC_TOWN_AUTHORITY, town); |
2026 | 463 |
} else { |
0 | 464 |
DoClearSquare(tile); |
465 |
} |
|
466 |
} |
|
467 |
||
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
468 |
static CommandCost TerraformTile_Unmovable(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
469 |
{ |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
470 |
/* Owned land remains unsold */ |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
471 |
if (IsOwnedLand(tile) && CheckTileOwnership(tile)) return CommandCost(); |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
472 |
|
8078
bdf94bf88568
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
8045
diff
changeset
|
473 |
if (AutoslopeEnabled() && (IsStatue(tile) || IsCompanyHQ(tile))) { |
8726
5ae45b46506b
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8720
diff
changeset
|
474 |
if (!IsSteepSlope(tileh_new) && (z_new + GetSlopeMaxZ(tileh_new) == GetTileMaxZ(tile))) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform); |
8078
bdf94bf88568
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
8045
diff
changeset
|
475 |
} |
bdf94bf88568
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
8045
diff
changeset
|
476 |
|
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
477 |
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
478 |
} |
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
479 |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
480 |
extern const TileTypeProcs _tile_type_unmovable_procs = { |
1493
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
481 |
DrawTile_Unmovable, /* draw_tile_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
482 |
GetSlopeZ_Unmovable, /* get_slope_z_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
483 |
ClearTile_Unmovable, /* clear_tile_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
484 |
GetAcceptedCargo_Unmovable, /* get_accepted_cargo_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
485 |
GetTileDesc_Unmovable, /* get_tile_desc_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
486 |
GetTileTrackStatus_Unmovable, /* get_tile_track_status_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
487 |
ClickTile_Unmovable, /* click_tile_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
488 |
AnimateTile_Unmovable, /* animate_tile_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
489 |
TileLoop_Unmovable, /* tile_loop_clear */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
490 |
ChangeTileOwner_Unmovable, /* change_tile_owner_clear */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
491 |
NULL, /* get_produced_cargo_proc */ |
ea21c3f7feea
(svn r1997) Fixed errorneous tab expansion on the indentation side which happenned in r1993. Pointed out by Tron.
pasky
parents:
1489
diff
changeset
|
492 |
NULL, /* vehicle_enter_tile_proc */ |
7831
5dded9b03500
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7829
diff
changeset
|
493 |
GetFoundation_Unmovable, /* get_foundation_proc */ |
7990
70039e33e893
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7831
diff
changeset
|
494 |
TerraformTile_Unmovable, /* terraform_tile_proc */ |
0 | 495 |
}; |