Changeset - r27078:cf14d56e290b
[Not reviewed]
master
0 1 0
PeterN - 14 months ago 2023-04-12 21:30:03
peter1138@openttd.org
Fix #10343: Don't extend town-disallowed roadtypes. (#10347)

Towns currently don't build disallowed roadtypes, however they should
also not extend disallowed roadtypes as well.

If the roadtype that cannot be extended happens to be the roadtype that
the town was going to build then this restriction is ignored.
1 file changed with 18 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/town_cmd.cpp
Show inline comments
 
@@ -1362,6 +1362,20 @@ static inline bool RoadTypesAllowHouseHe
 
	return !allow;
 
}
 

	
 
/** Test if town can grow road onto a specific tile.
 
 * @param town Town that is building.
 
 * @param tile Tile to build upon.
 
 * @return true iff the tile's road type don't prevent extending the road.
 
 */
 
static bool TownCanGrowRoad(const Town *town, TileIndex tile)
 
{
 
	if (!IsTileType(tile, MP_ROAD)) return true;
 

	
 
	/* Allow extending on roadtypes which can be built by town, or if the road type matches the type the town will build. */
 
	RoadType rt = GetRoadTypeRoad(tile);
 
	return HasBit(GetRoadTypeInfo(rt)->flags, ROTF_TOWN_BUILD) || GetTownRoadType(town) == rt;
 
}
 

	
 
/**
 
 * Grows the given town.
 
 * There are at the moment 3 possible way's for
 
@@ -1438,6 +1452,8 @@ static void GrowTownInTile(TileIndex *ti
 
		}
 

	
 
	} else if (target_dir < DIAGDIR_END && !(cur_rb & DiagDirToRoadBits(ReverseDiagDir(target_dir)))) {
 
		if (!TownCanGrowRoad(t1, tile)) return;
 

	
 
		/* Continue building on a partial road.
 
		 * Should be always OK, so we only generate
 
		 * the fitting RoadBits */
 
@@ -1557,6 +1573,8 @@ static void GrowTownInTile(TileIndex *ti
 
			return;
 
		}
 

	
 
		if (!TownCanGrowRoad(t1, tile)) return;
 

	
 
		_grow_town_result = GROWTH_SEARCH_STOPPED;
 
	}
 

	
0 comments (0 inline, 0 general)