summaryrefslogtreecommitdiff
path: root/water_cmd.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2005-05-12 23:46:01 +0000
committerDarkvater <Darkvater@openttd.org>2005-05-12 23:46:01 +0000
commitddd4958164980954577fcca388ffeb455f3fc463 (patch)
treedde69a1afcdeffecc49a408ef9164ad83781a82f /water_cmd.c
parent0727085b3b4f1fde705f307274ccf4d785a20854 (diff)
downloadopenttd-ddd4958164980954577fcca388ffeb455f3fc463.tar.xz
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
- CodeChange: remove cmd-misuses CmdStartScenario() and CmdDestroyCompanyHQ() - Fix (invisible): when parameter checking CmdRestoreOrderIndex() the vehicle did not have its orders yet, so it would fail. So move doing this until AFTER the orders have been added back in RestoreVehicleOrders()
Diffstat (limited to 'water_cmd.c')
-rw-r--r--water_cmd.c61
1 files changed, 37 insertions, 24 deletions
diff --git a/water_cmd.c b/water_cmd.c
index 55a9e7188..9c14736e2 100644
--- a/water_cmd.c
+++ b/water_cmd.c
@@ -159,30 +159,44 @@ static void MarkTilesAroundDirty(uint tile)
MarkTileDirtyByTile(TILE_ADDXY(tile, -1, 0));
}
+/** Builds a lock (ship-lift)
+ * @param x,y tile coordinates where to place the lock
+ * @param p1 unused
+ * @param p2 unused
+ */
int32 CmdBuildLock(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
- uint tile = TILE_FROM_XY(x,y);
- int32 ret;
- uint th;
+ TileIndex tile = TILE_FROM_XY(x,y);
+ uint tileh;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
- th = GetTileSlope(tile, NULL);
+ tileh = GetTileSlope(tile, NULL);
- if (th==3 || th==6 || th==9 || th==12) {
- static const byte _shiplift_dirs[16] = {0,0,0,2,0,0,1,0,0,3,0,0,0};
- ret = DoBuildShiplift(tile, _shiplift_dirs[th], flags);
- return ret;
- }
- else
- return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
+ if (tileh == 3 || tileh == 6 || tileh == 9 || tileh == 12) {
+ static const byte _shiplift_dirs[16] = {0, 0, 0, 2, 0, 0, 1, 0, 0, 3, 0, 0, 0};
+ return DoBuildShiplift(tile, _shiplift_dirs[tileh], flags);
+ }
+
+ return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
+/** Build a piece of canal.
+ * @param x,y end tile of stretch-dragging
+ * @param p1 start tile of stretch-dragging
+ * @param p2 unused
+ */
int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
int32 ret, cost;
int size_x, size_y;
- int sx = TileX((TileIndex)p1);
- int sy = TileY((TileIndex)p1);
+ int sx, sy;
+
+ if (p1 > MapSize()) return CMD_ERROR;
+
+ sx = TileX(p1);
+ sy = TileY(p1);
+ /* x,y are in pixel-coordinates, transform to tile-coordinates
+ * to be able to use the BEGIN_TILE_LOOP() macro */
x >>= 4; y >>= 4;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -192,11 +206,13 @@ int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
size_x = (x - sx) + 1;
size_y = (y - sy) + 1;
+ /* Outside the editor you can only drag canals, and not areas */
+ if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR;
+
cost = 0;
BEGIN_TILE_LOOP(tile, size_x, size_y, TILE_XY(sx, sy)) {
ret = 0;
- if (GetTileSlope(tile, NULL) != 0)
- return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
+ if (GetTileSlope(tile, NULL) != 0) return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
// can't make water of water!
if (IsTileType(tile, MP_WATER)) {
@@ -204,19 +220,16 @@ int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
} else {
/* is middle piece of a bridge? */
if (IsTileType(tile, MP_TUNNELBRIDGE) && _map5[tile] & 0x40) { /* build under bridge */
- if (_map5[tile] & 0x20) { // transport route under bridge
- _error_message = STR_5800_OBJECT_IN_THE_WAY;
- ret = CMD_ERROR;
- }
- else if (_map5[tile] & 0x18) { // already water under bridge
- _error_message = STR_1007_ALREADY_BUILT;
- ret = CMD_ERROR;
- }
+ if (_map5[tile] & 0x20) // transport route under bridge
+ return_cmd_error(STR_5800_OBJECT_IN_THE_WAY);
+
+ if (_map5[tile] & 0x18) // already water under bridge
+ return_cmd_error(STR_1007_ALREADY_BUILT);
/* no bridge? then try to clear it. */
} else
ret = DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
- if (ret == CMD_ERROR) return ret;
+ if (CmdFailed(ret)) return CMD_ERROR;
cost += ret;
/* execute modifications */