mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r21314) -Fix [FS#4253]: [NewGRF] (Hopefully) make callback 157 behave more like TTDPatch does, i.e. fall back to the default check when the callback is not yielding a result for a tile instead of disallowing building the object
This commit is contained in:
parent
753b1ca0a7
commit
31a5f8f043
|
@ -202,18 +202,20 @@ CommandCost CmdBuildObject(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||
}
|
||||
|
||||
/* So, now the surface is checked... check the slope of said surface. */
|
||||
if (HasBit(spec->callback_mask, CBM_OBJ_SLOPE_CHECK)) {
|
||||
TILE_AREA_LOOP(t, ta) {
|
||||
int allowed_z;
|
||||
if (GetTileSlope(tile, (uint*)&allowed_z) != SLOPE_FLAT) allowed_z += TILE_HEIGHT;
|
||||
|
||||
TILE_AREA_LOOP(t, ta) {
|
||||
uint16 callback = CALLBACK_FAILED;
|
||||
if (HasBit(spec->callback_mask, CBM_OBJ_SLOPE_CHECK)) {
|
||||
TileIndex diff = t - tile;
|
||||
uint16 callback = GetObjectCallback(CBID_OBJECT_LAND_SLOPE_CHECK, GetTileSlope(t, NULL), TileY(diff) << 4 | TileX(diff), spec, NULL, t);
|
||||
if (callback != 0) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
|
||||
callback = GetObjectCallback(CBID_OBJECT_LAND_SLOPE_CHECK, GetTileSlope(t, NULL), TileY(diff) << 4 | TileX(diff), spec, NULL, t);
|
||||
}
|
||||
} else {
|
||||
/* Check whether the ground is flat enough. */
|
||||
int allowed_z = -1;
|
||||
TILE_AREA_LOOP(t, ta) {
|
||||
/* We'll do the bridge test later; it's quite custom. */
|
||||
|
||||
if (callback == CALLBACK_FAILED) {
|
||||
cost.AddCost(CheckBuildableTile(t, 0, allowed_z, false));
|
||||
} else if (callback != 0) {
|
||||
return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue