mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-13 02:52:37 +00:00
Add: Scale oil refinery edge distance up by map size
Also scales oil rig distance up, since they use the same algorithm.
This commit is contained in:
parent
b870596f15
commit
5feb06e3f3
@ -1225,6 +1225,29 @@ static CommandCost CheckNewIndustry_Forest(TileIndex tile)
|
||||
return CommandCost();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a tile is within a distance from map edges, scaled by map dimensions independently.
|
||||
* Each dimension is checked independently, and dimensions smaller than 256 are not scaled.
|
||||
* @param tile Which tile to check distance of.
|
||||
* @param maxdist Normal distance on a 256x256 map.
|
||||
* @return True if the tile is near the map edge.
|
||||
*/
|
||||
static bool CheckScaledDistanceFromEdge(TileIndex tile, uint maxdist)
|
||||
{
|
||||
uint maxdist_x = maxdist;
|
||||
uint maxdist_y = maxdist;
|
||||
|
||||
if (MapSizeX() > 256) maxdist_x *= MapSizeX() / 256;
|
||||
if (MapSizeY() > 256) maxdist_y *= MapSizeY() / 256;
|
||||
|
||||
if (DistanceFromEdgeDir(tile, DIAGDIR_NE) < maxdist_x) return true;
|
||||
if (DistanceFromEdgeDir(tile, DIAGDIR_NW) < maxdist_y) return true;
|
||||
if (DistanceFromEdgeDir(tile, DIAGDIR_SW) < maxdist_x) return true;
|
||||
if (DistanceFromEdgeDir(tile, DIAGDIR_SE) < maxdist_y) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the conditions of #CHECK_REFINERY (Industry should be positioned near edge of the map).
|
||||
* @param tile %Tile to perform the checking.
|
||||
@ -1233,7 +1256,8 @@ static CommandCost CheckNewIndustry_Forest(TileIndex tile)
|
||||
static CommandCost CheckNewIndustry_OilRefinery(TileIndex tile)
|
||||
{
|
||||
if (_game_mode == GM_EDITOR) return CommandCost();
|
||||
if (DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _settings_game.game_creation.oil_refinery_limit) return CommandCost();
|
||||
|
||||
if (CheckScaledDistanceFromEdge(TILE_ADDXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost();
|
||||
|
||||
return_cmd_error(STR_ERROR_CAN_ONLY_BE_POSITIONED);
|
||||
}
|
||||
@ -1248,8 +1272,9 @@ extern bool _ignore_restrictions;
|
||||
static CommandCost CheckNewIndustry_OilRig(TileIndex tile)
|
||||
{
|
||||
if (_game_mode == GM_EDITOR && _ignore_restrictions) return CommandCost();
|
||||
|
||||
if (TileHeight(tile) == 0 &&
|
||||
DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _settings_game.game_creation.oil_refinery_limit) return CommandCost();
|
||||
CheckScaledDistanceFromEdge(TILE_ADDXY(tile, 1, 1), _settings_game.game_creation.oil_refinery_limit)) return CommandCost();
|
||||
|
||||
return_cmd_error(STR_ERROR_CAN_ONLY_BE_POSITIONED);
|
||||
}
|
||||
|
@ -1326,8 +1326,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terrain type: {
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis only) Hilliness of the landscape
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry density: {STRING2}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil refineries: {STRING2}
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oil refineries are only constructed near the map border, that is at the coast for island maps
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil industries: {STRING2}
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up.
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING2}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Control at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING2}
|
||||
|
Loading…
Reference in New Issue
Block a user