Changeset - r16574:0699a6196cb8
[Not reviewed]
master
0 1 0
rubidium - 14 years ago 2010-11-24 23:08:12
rubidium@openttd.org
(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
1 file changed with 11 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/object_cmd.cpp
Show inline comments
 
@@ -202,18 +202,20 @@ CommandCost CmdBuildObject(TileIndex til
 
		}
 

	
 
		/* 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);
 
			}
 
		}
 
	}
0 comments (0 inline, 0 general)