diff --git a/src/lang/english.txt b/src/lang/english.txt index 56c5928149..0e02e330c9 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1525,6 +1525,9 @@ STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the driv STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right +STR_CONFIG_SETTING_DIAGONAL_ROADS :Diagonal Roads: {STRING2} +STR_CONFIG_SETTING_DIAGONAL_ROADS_HELPTEXT :Choose whether to turn smooth corners into diagonal roads + STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING2} ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Counter clockwise diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 1a3d925d80..33c0124092 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1315,7 +1315,7 @@ static bool RoadVehLeaveDepot(RoadVehicle *v, bool first) v->direction = DiagDirToDir(dir); Trackdir tdir = DiagDirToDiagTrackdir(dir); - const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype)][(_settings_game.vehicle.road_side << RVS_DRIVE_SIDE) + tdir]; + const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype) + (_settings_game.vehicle.diagonal_roads * 2)][(_settings_game.vehicle.road_side << RVS_DRIVE_SIDE) + tdir]; int x = TileX(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].x & 0xF); int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF); @@ -1713,7 +1713,7 @@ bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev) /* Get move position data for next frame. * For a drive-through road stop use 'straight road' move data. * In this case v->state is masked to give the road stop entry direction. */ - RoadDriveEntry rd = _road_drive_data[GetRoadTramType(v->roadtype)][( + RoadDriveEntry rd = _road_drive_data[GetRoadTramType(v->roadtype) + (_settings_game.vehicle.diagonal_roads * 2)][( (HasBit(v->state, RVS_IN_DT_ROAD_STOP) ? v->state & RVSB_ROAD_STOP_TRACKDIR_MASK : v->state) + (_settings_game.vehicle.road_side << RVS_DRIVE_SIDE)) ^ v->overtaking][v->frame + 1]; @@ -1812,7 +1812,7 @@ again: } /* Get position data for first frame on the new tile */ - const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype)][(dir + (_settings_game.vehicle.road_side << RVS_DRIVE_SIDE)) ^ v->overtaking]; + const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype) + (_settings_game.vehicle.diagonal_roads * 2)][(dir + (_settings_game.vehicle.road_side << RVS_DRIVE_SIDE)) ^ v->overtaking]; int x = TileX(tile) * TILE_SIZE + rdp[start_frame].x; int y = TileY(tile) * TILE_SIZE + rdp[start_frame].y; @@ -1928,7 +1928,7 @@ again: return false; } - const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype)][(_settings_game.vehicle.road_side << RVS_DRIVE_SIDE) + dir]; + const RoadDriveEntry *rdp = _road_drive_data[GetRoadTramType(v->roadtype) + (_settings_game.vehicle.diagonal_roads * 2)][(_settings_game.vehicle.road_side << RVS_DRIVE_SIDE) + dir]; int x = TileX(v->tile) * TILE_SIZE + rdp[turn_around_start_frame].x; int y = TileY(v->tile) * TILE_SIZE + rdp[turn_around_start_frame].y; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8081449663..062de66019 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2355,6 +2355,7 @@ static SettingsContainer &GetSettingsTree() genworld->Add(new SettingEntry("game_creation.height_affects_rocks")); genworld->Add(new SettingEntry("game_creation.tree_placer")); genworld->Add(new SettingEntry("vehicle.road_side")); + genworld->Add(new SettingEntry("vehicle.diagonal_roads")); genworld->Add(new SettingEntry("economy.larger_towns")); genworld->Add(new SettingEntry("economy.initial_city_size")); genworld->Add(new SettingEntry("economy.town_layout")); diff --git a/src/settings_type.h b/src/settings_type.h index f3023cab93..2475f0038f 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -665,6 +665,7 @@ struct VehicleSettings { Year no_introduce_vehicles_after; ///< do not introduce vehicles after this year byte extend_vehicle_life; ///< extend vehicle life by this many years byte road_side; ///< the side of the road vehicles drive on + bool diagonal_roads; ///< whether road corners are turned into diagonals uint8 plane_crashes; ///< number of plane crashes, 0 = none, 1 = reduced, 2 = normal bool adjacent_crossings; ///< enable closing of adjacent level crossings bool safer_crossings; ///< enable safer level crossings diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index adec173922..cd153d7ee4 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -625,6 +625,14 @@ pre_cb = CheckRoadSide post_cb = RoadSideChanged cat = SC_BASIC +[SDT_BOOL] +var = vehicle.diagonal_roads +flags = SF_NO_NETWORK +def = false +str = STR_CONFIG_SETTING_DIAGONAL_ROADS +strhelp = STR_CONFIG_SETTING_DIAGONAL_ROADS_HELPTEXT +cat = SC_EXPERT + ; Construction [SDT_VAR]