998 // (a bit strange function name for it, but it really does clear the land, when DC_EXEC is in flags) |
998 // (a bit strange function name for it, but it really does clear the land, when DC_EXEC is in flags) |
999 ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags, 5 << axis, _patches.nonuniform_stations ? &est : NULL); |
999 ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags, 5 << axis, _patches.nonuniform_stations ? &est : NULL); |
1000 if (CmdFailed(ret)) return ret; |
1000 if (CmdFailed(ret)) return ret; |
1001 |
1001 |
1002 st->train_tile = finalvalues[0]; |
1002 st->train_tile = finalvalues[0]; |
1003 if (!st->facilities) st->xy = finalvalues[0]; |
1003 st->AddFacility(FACIL_TRAIN, finalvalues[0]); |
1004 st->facilities |= FACIL_TRAIN; |
|
1005 st->owner = _current_player; |
|
1006 |
1004 |
1007 st->trainst_w = finalvalues[1]; |
1005 st->trainst_w = finalvalues[1]; |
1008 st->trainst_h = finalvalues[2]; |
1006 st->trainst_h = finalvalues[2]; |
1009 |
|
1010 st->build_date = _date; |
|
1011 |
1007 |
1012 st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); |
1008 st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); |
1013 |
1009 |
1014 tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); |
1010 tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); |
1015 track = AxisToTrack(axis); |
1011 track = AxisToTrack(axis); |
1413 //point to the correct item in the _busstops or _truckstops array |
1409 //point to the correct item in the _busstops or _truckstops array |
1414 *currstop = road_stop; |
1410 *currstop = road_stop; |
1415 |
1411 |
1416 //initialize an empty station |
1412 //initialize an empty station |
1417 road_stop->prev = prev; |
1413 road_stop->prev = prev; |
1418 if (!st->facilities) st->xy = tile; |
1414 st->AddFacility((type) ? FACIL_TRUCK_STOP : FACIL_BUS_STOP, tile); |
1419 st->facilities |= (type) ? FACIL_TRUCK_STOP : FACIL_BUS_STOP; |
|
1420 st->owner = _current_player; |
|
1421 |
|
1422 st->build_date = _date; |
|
1423 |
1415 |
1424 st->rect.BeforeAddTile(tile, StationRect::ADD_TRY); |
1416 st->rect.BeforeAddTile(tile, StationRect::ADD_TRY); |
1425 |
1417 |
1426 MakeRoadStop(tile, st->owner, st->index, type ? RS_TRUCK : RS_BUS, (DiagDirection)p1); |
1418 MakeRoadStop(tile, st->owner, st->index, type ? RS_TRUCK : RS_BUS, (DiagDirection)p1); |
1427 |
1419 |
1672 } |
1664 } |
1673 |
1665 |
1674 cost += _price.build_airport * w * h; |
1666 cost += _price.build_airport * w * h; |
1675 |
1667 |
1676 if (flags & DC_EXEC) { |
1668 if (flags & DC_EXEC) { |
1677 st->owner = _current_player; |
|
1678 st->airport_tile = tile; |
1669 st->airport_tile = tile; |
1679 if (!st->facilities) st->xy = tile; |
1670 st->AddFacility(FACIL_AIRPORT, tile); |
1680 st->facilities |= FACIL_AIRPORT; |
|
1681 st->airport_type = (byte)p1; |
1671 st->airport_type = (byte)p1; |
1682 st->airport_flags = 0; |
1672 st->airport_flags = 0; |
1683 |
|
1684 st->build_date = _date; |
|
1685 |
1673 |
1686 st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); |
1674 st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); |
1687 |
1675 |
1688 /* if airport was demolished while planes were en-route to it, the |
1676 /* if airport was demolished while planes were en-route to it, the |
1689 * positions can no longer be the same (v->u.air.pos), since different |
1677 * positions can no longer be the same (v->u.air.pos), since different |
1951 if (!GenerateStationName(st, tile, 3)) return CMD_ERROR; |
1939 if (!GenerateStationName(st, tile, 3)) return CMD_ERROR; |
1952 } |
1940 } |
1953 |
1941 |
1954 if (flags & DC_EXEC) { |
1942 if (flags & DC_EXEC) { |
1955 st->dock_tile = tile; |
1943 st->dock_tile = tile; |
1956 if (!st->facilities) st->xy = tile; |
1944 st->AddFacility(FACIL_DOCK, tile); |
1957 st->facilities |= FACIL_DOCK; |
|
1958 st->owner = _current_player; |
|
1959 |
|
1960 st->build_date = _date; |
|
1961 |
1945 |
1962 st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY); |
1946 st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY); |
1963 |
1947 |
1964 MakeDock(tile, st->owner, st->index, direction); |
1948 MakeDock(tile, st->owner, st->index, direction); |
1965 |
1949 |