forked from mirror/OpenTTD
(svn r2285) - Codechange: Fix up some of the missing things from server-checking; namely bridge-type, bridge-length, dragged end-tile (bridge/station), station_spread
- Fix: [ 1197256 ] max station spread patch < 7 does not work. Station spread was not taking into account when not using drag&drop. Fix this up, and add a callback to the settings window to immediately reflect the changes.
This commit is contained in:
@@ -148,15 +148,14 @@ bool CheckBridge_Stuff(byte bridge_type, int bridge_len)
|
||||
{
|
||||
int max; // max possible length of a bridge (with patch 100)
|
||||
|
||||
if (_bridge_available_year[bridge_type] > _cur_year)
|
||||
return false;
|
||||
if (bridge_type >= MAX_BRIDGES) return false;
|
||||
if (_bridge_available_year[bridge_type] > _cur_year) return false;
|
||||
|
||||
max = _bridge_maxlen[bridge_type];
|
||||
if (max >= 16 && _patches.longbridges)
|
||||
max = 100;
|
||||
|
||||
if (bridge_len < _bridge_minlen[bridge_type] || bridge_len > max)
|
||||
return false;
|
||||
if (bridge_len < _bridge_minlen[bridge_type] || bridge_len > max) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -186,8 +185,7 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
bridge_type = p2 & 0xFF;
|
||||
railtype = (byte)(p2 >> 8);
|
||||
|
||||
/* Out of bounds bridge */
|
||||
if (bridge_type >= MAX_BRIDGES) return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
|
||||
if (p1 > MapSize()) return CMD_ERROR;
|
||||
|
||||
// type of bridge
|
||||
if (HASBIT(railtype, 7)) { // bit 15 of original p2 param
|
||||
@@ -220,6 +218,10 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
} else
|
||||
return_cmd_error(STR_500A_START_AND_END_MUST_BE_IN);
|
||||
|
||||
/* set and test bridge length, availability */
|
||||
bridge_len = ((sx + sy - x - y) >> 4) - 1;
|
||||
if (!CheckBridge_Stuff(bridge_type, bridge_len)) return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
|
||||
|
||||
/* retrieve landscape height and ensure it's on land */
|
||||
if (
|
||||
((FindLandscapeHeight(&ti_end, sx, sy),
|
||||
@@ -246,8 +248,7 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
|
||||
// Towns are not allowed to use bridges on slopes.
|
||||
allow_on_slopes = ((!_is_ai_player || _patches.ainew_active)
|
||||
&& _current_player != OWNER_TOWN
|
||||
&& _patches.build_on_slopes);
|
||||
&& _current_player != OWNER_TOWN && _patches.build_on_slopes);
|
||||
|
||||
/* Try and clear the start landscape */
|
||||
|
||||
@@ -295,17 +296,14 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
);
|
||||
}
|
||||
|
||||
/* set various params */
|
||||
bridge_len = ((sx + sy - x - y) >> 4) - 1;
|
||||
// position of middle part of the odd bridge (larger than MAX(i) otherwise)
|
||||
odd_middle_part = (bridge_len % 2) ? (bridge_len / 2) : bridge_len;
|
||||
|
||||
//position of middle part of the odd bridge (larger than MAX(i) otherwise)
|
||||
odd_middle_part=(bridge_len%2)?(bridge_len/2):bridge_len;
|
||||
|
||||
for(i = 0; i != bridge_len; i++) {
|
||||
if (direction != 0)
|
||||
y+=16;
|
||||
else
|
||||
x+=16;
|
||||
for (i = 0; i != bridge_len; i++) {
|
||||
if (direction != 0) {
|
||||
y += 16;
|
||||
} else
|
||||
x += 16;
|
||||
|
||||
FindLandscapeHeight(&ti, x, y);
|
||||
|
||||
|
Reference in New Issue
Block a user