/* * This file is part of OpenTTD. * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ /** @file table/roadveh_movement.h Data about how a road vehicle must drive on a tile */ static const RoadDriveEntry _roadveh_drive_data_0[] = { {15, 5}, {14, 5}, {13, 5}, {12, 5}, {11, 5}, {10, 5}, { 9, 5}, { 8, 5}, { 7, 5}, { 6, 5}, { 5, 5}, { 4, 5}, { 3, 5}, { 2, 5}, { 1, 5}, { 0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_1[] = { {5, 0}, {5, 1}, {5, 2}, {5, 3}, {5, 4}, {5, 5}, {5, 6}, {5, 7}, {5, 8}, {5, 9}, {5, 10}, {5, 11}, {5, 12}, {5, 13}, {5, 14}, {5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_2[] = { {5, 0}, {5, 1}, {5, 2}, {4, 3}, {3, 4}, {2, 5}, {1, 5}, {0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_3[] = { {15, 5}, {14, 5}, {13, 5}, {12, 5}, {11, 5}, {10, 5}, { 9, 6}, { 8, 7}, { 7, 8}, { 6, 9}, { 5, 10}, { 5, 11}, { 5, 12}, { 5, 13}, { 5, 14}, { 5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_4[] = { { 5, 0}, { 5, 1}, { 5, 2}, { 5, 3}, { 5, 4}, { 5, 5}, { 6, 6}, { 7, 7}, { 8, 8}, { 9, 9}, {10, 9}, {11, 9}, {12, 9}, {13, 9}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_5[] = { {0, 9}, {1, 9}, {2, 9}, {3, 10}, {4, 11}, {5, 12}, {5, 13}, {5, 14}, {5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_6[] = { {0, 6}, {0, 7}, {0, 8}, {0, 9}, {RDE_TURNED | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_7[] = { {6, 15}, {7, 15}, {8, 15}, {9, 15}, {RDE_TURNED | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_8[] = { { 0, 9}, { 1, 9}, { 2, 9}, { 3, 9}, { 4, 9}, { 5, 9}, { 6, 9}, { 7, 9}, { 8, 9}, { 9, 9}, {10, 9}, {11, 9}, {12, 9}, {13, 9}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_9[] = { {9, 15}, {9, 14}, {9, 13}, {9, 12}, {9, 11}, {9, 10}, {9, 9}, {9, 8}, {9, 7}, {9, 6}, {9, 5}, {9, 4}, {9, 3}, {9, 2}, {9, 1}, {9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_10[] = { {0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 8}, {7, 7}, {8, 6}, {9, 5}, {9, 4}, {9, 3}, {9, 2}, {9, 1}, {9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_11[] = { { 9, 15}, { 9, 14}, { 9, 13}, {10, 12}, {11, 11}, {12, 10}, {13, 9}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_12[] = { {15, 5}, {14, 5}, {13, 5}, {12, 4}, {11, 3}, {10, 2}, { 9, 1}, { 9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_13[] = { {9, 15}, {9, 14}, {9, 13}, {9, 12}, {9, 11}, {9, 10}, {8, 9}, {7, 8}, {6, 7}, {5, 6}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_14[] = { {15, 8}, {15, 7}, {15, 6}, {15, 5}, {RDE_TURNED | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_15[] = { {8, 0}, {7, 0}, {6, 0}, {5, 0}, {RDE_TURNED | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_16[] = { {15, 9}, {14, 9}, {13, 9}, {12, 9}, {11, 9}, {10, 9}, { 9, 9}, { 8, 9}, { 7, 9}, { 6, 9}, { 5, 9}, { 4, 9}, { 3, 9}, { 2, 9}, { 1, 9}, { 0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_17[] = { {9, 0}, {9, 1}, {9, 2}, {9, 3}, {9, 4}, {9, 5}, {9, 6}, {9, 7}, {9, 8}, {9, 9}, {9, 10}, {9, 11}, {9, 12}, {9, 13}, {9, 14}, {9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_18[] = { {9, 0}, {9, 1}, {9, 2}, {9, 3}, {9, 4}, {9, 5}, {8, 6}, {7, 7}, {6, 8}, {5, 9}, {4, 9}, {3, 9}, {2, 9}, {1, 9}, {0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_19[] = { {15, 9}, {14, 9}, {13, 9}, {12, 10}, {11, 11}, {10, 12}, { 9, 13}, { 9, 14}, { 9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_20[] = { { 9, 0}, { 9, 1}, {10, 2}, {11, 3}, {12, 4}, {13, 5}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_21[] = { {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 6}, {6, 7}, {7, 8}, {8, 9}, {9, 10}, {9, 11}, {9, 12}, {9, 13}, {9, 14}, {9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_drive_data_22[] = { {0, 8}, {0, 7}, {0, 6}, {0, 5}, {RDE_TURNED | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_23[] = { {8, 15}, {7, 15}, {6, 15}, {5, 15}, {RDE_TURNED | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_24[] = { { 0, 5}, { 1, 5}, { 2, 5}, { 3, 5}, { 4, 5}, { 5, 5}, { 6, 5}, { 7, 5}, { 8, 5}, { 9, 5}, {10, 5}, {11, 5}, {12, 5}, {13, 5}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_25[] = { {5, 15}, {5, 14}, {5, 13}, {5, 12}, {5, 11}, {5, 10}, {5, 9}, {5, 8}, {5, 7}, {5, 6}, {5, 5}, {5, 4}, {5, 3}, {5, 2}, {5, 1}, {5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_26[] = { {0, 5}, {1, 5}, {2, 5}, {3, 4}, {4, 3}, {5, 2}, {5, 1}, {5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_27[] = { { 5, 15}, { 5, 14}, { 5, 13}, { 5, 12}, { 5, 11}, { 5, 10}, { 6, 9}, { 7, 8}, { 8, 7}, { 9, 6}, {10, 5}, {11, 5}, {12, 5}, {13, 5}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_drive_data_28[] = { {15, 9}, {14, 9}, {13, 9}, {12, 9}, {11, 9}, {10, 9}, { 9, 9}, { 8, 8}, { 7, 7}, { 6, 6}, { 5, 5}, { 5, 4}, { 5, 3}, { 5, 2}, { 5, 1}, { 5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_drive_data_29[] = { {5, 15}, {5, 14}, {5, 13}, {5, 12}, {4, 11}, {3, 10}, {2, 9}, {1, 9}, {0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_30[] = { {15, 6}, {15, 7}, {15, 8}, {15, 9}, {RDE_TURNED | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_drive_data_31[] = { {6, 0}, {7, 0}, {8, 0}, {9, 0}, {RDE_TURNED | DIAGDIR_SE, 0} }; static const RoadDriveEntry _rv_station_left_sw_far[] = { {15, 5}, {14, 5}, {13, 6}, {13, 7}, {13, 8}, {13, 9}, {13, 10}, {13, 11}, {12, 12}, {11, 12}, {10, 12}, { 9, 12}, { 8, 12}, { 7, 12}, { 6, 12}, { 5, 11}, { 5, 10}, { 5, 9}, { 5, 8}, { 5, 7}, { 5, 6}, { 5, 7}, { 5, 8}, { 5, 9}, { 5, 10}, { 5, 11}, { 6, 12}, { 7, 12}, { 8, 12}, { 9, 12}, {10, 12}, {11, 12}, {12, 12}, {13, 11}, {13, 10}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _rv_station_left_nw_far[] = { { 5, 0}, { 5, 1}, { 6, 2}, { 7, 2}, { 8, 2}, { 9, 2}, {10, 2}, {11, 2}, {12, 3}, {12, 4}, {12, 5}, {12, 6}, {12, 7}, {12, 8}, {12, 9}, {11, 10}, {10, 10}, { 9, 10}, { 8, 10}, { 7, 10}, { 6, 10}, { 7, 10}, { 8, 10}, { 9, 10}, {10, 10}, {11, 10}, {12, 9}, {12, 8}, {12, 7}, {12, 6}, {12, 5}, {12, 4}, {12, 3}, {11, 2}, {10, 2}, { 9, 1}, { 9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _rv_station_left_sw_near[] = { {15, 5}, {14, 5}, {13, 6}, {13, 7}, {13, 8}, {13, 9}, {13, 10}, {13, 11}, {12, 12}, {11, 12}, {10, 12}, { 9, 11}, { 9, 10}, { 9, 9}, { 9, 8}, { 9, 7}, { 9, 6}, { 9, 7}, { 9, 8}, { 9, 9}, { 9, 10}, { 9, 11}, {10, 12}, {11, 12}, {12, 12}, {13, 11}, {13, 10}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _rv_station_left_nw_near[] = { { 5, 0}, { 5, 1}, { 6, 2}, { 7, 2}, { 8, 2}, { 9, 2}, {10, 2}, {11, 2}, {12, 3}, {12, 4}, {12, 5}, {11, 6}, {10, 6}, { 9, 6}, { 8, 6}, { 7, 6}, { 6, 6}, { 7, 6}, { 8, 6}, { 9, 6}, {10, 6}, {11, 6}, {12, 5}, {12, 4}, {12, 3}, {11, 2}, {10, 2}, { 9, 1}, { 9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _rv_station_left_ne_far[] = { { 0, 9}, { 1, 9}, { 2, 8}, { 2, 7}, { 2, 6}, { 2, 5}, { 2, 4}, { 3, 3}, { 4, 3}, { 5, 3}, { 6, 3}, { 7, 3}, { 8, 3}, { 9, 3}, {10, 4}, {10, 5}, {10, 6}, {10, 7}, {10, 8}, {10, 9}, {10, 8}, {10, 7}, {10, 6}, {10, 5}, {10, 4}, { 9, 3}, { 8, 3}, { 7, 3}, { 6, 3}, { 5, 3}, { 4, 3}, { 3, 3}, { 2, 4}, { 1, 5}, { 0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _rv_station_left_se_far[] = { {9, 15}, {9, 14}, {8, 13}, {7, 13}, {6, 13}, {5, 13}, {4, 13}, {3, 12}, {3, 11}, {3, 10}, {3, 9}, {3, 8}, {3, 7}, {3, 6}, {4, 5}, {5, 5}, {6, 5}, {7, 5}, {8, 5}, {9, 5}, {8, 5}, {7, 5}, {6, 5}, {5, 5}, {4, 5}, {3, 6}, {3, 7}, {3, 8}, {3, 9}, {3, 10}, {3, 11}, {3, 12}, {4, 13}, {5, 14}, {5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _rv_station_left_ne_near[] = { {0, 9}, {1, 9}, {2, 8}, {2, 7}, {2, 6}, {2, 5}, {2, 4}, {3, 3}, {4, 3}, {5, 3}, {6, 4}, {6, 5}, {6, 6}, {6, 7}, {6, 8}, {6, 9}, {6, 8}, {6, 7}, {6, 6}, {6, 5}, {6, 4}, {5, 3}, {4, 3}, {3, 3}, {2, 4}, {1, 5}, {0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _rv_station_left_se_near[] = { {9, 15}, {9, 14}, {8, 13}, {7, 13}, {6, 13}, {5, 13}, {4, 13}, {3, 12}, {3, 11}, {3, 10}, {4, 9}, {5, 9}, {6, 9}, {7, 9}, {8, 9}, {9, 9}, {8, 9}, {7, 9}, {6, 9}, {5, 9}, {4, 9}, {3, 10}, {3, 11}, {3, 12}, {4, 13}, {5, 14}, {5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _rv_station_right_sw_far[] = { {15, 9}, {14, 9}, {13, 10}, {13, 11}, {12, 12}, {11, 12}, {10, 12}, { 9, 12}, { 8, 12}, { 7, 12}, { 6, 12}, { 5, 11}, { 5, 10}, { 5, 9}, { 5, 8}, { 5, 7}, { 5, 6}, { 5, 7}, { 5, 8}, { 5, 9}, { 5, 10}, { 5, 11}, { 6, 12}, { 7, 12}, { 8, 12}, { 9, 12}, {10, 12}, {11, 12}, {12, 12}, {13, 11}, {13, 10}, {13, 9}, {13, 8}, {13, 7}, {13, 6}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _rv_station_right_nw_far[] = { { 9, 0}, { 9, 1}, {10, 2}, {11, 2}, {12, 3}, {12, 4}, {12, 5}, {12, 6}, {12, 7}, {12, 8}, {12, 9}, {11, 10}, {10, 10}, { 9, 10}, { 8, 10}, { 7, 10}, { 6, 10}, { 7, 10}, { 8, 10}, { 9, 10}, {10, 10}, {11, 10}, {12, 9}, {12, 8}, {12, 7}, {12, 6}, {12, 5}, {12, 4}, {12, 3}, {11, 2}, {10, 2}, { 9, 2}, { 8, 2}, { 7, 2}, { 6, 2}, { 5, 1}, { 5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _rv_station_right_sw_near[] = { {15, 9}, {14, 9}, {13, 10}, {13, 11}, {12, 12}, {11, 12}, {10, 12}, { 9, 11}, { 9, 10}, { 9, 9}, { 9, 8}, { 9, 7}, { 9, 6}, { 9, 7}, { 9, 8}, { 9, 9}, { 9, 10}, { 9, 11}, {10, 12}, {11, 12}, {12, 12}, {13, 11}, {13, 10}, {13, 9}, {13, 8}, {13, 7}, {13, 6}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _rv_station_right_nw_near[] = { { 9, 0}, { 9, 1}, {10, 2}, {11, 2}, {12, 3}, {12, 4}, {12, 5}, {11, 6}, {10, 6}, { 9, 6}, { 8, 6}, { 7, 6}, { 6, 6}, { 7, 6}, { 8, 6}, { 9, 6}, {10, 6}, {11, 6}, {12, 5}, {12, 4}, {12, 3}, {11, 2}, {10, 2}, { 9, 2}, { 8, 2}, { 7, 2}, { 6, 2}, { 5, 1}, { 5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _rv_station_right_ne_far[] = { { 0, 5}, { 1, 5}, { 2, 4}, { 3, 3}, { 4, 3}, { 5, 3}, { 6, 3}, { 7, 3}, { 8, 3}, { 9, 3}, {10, 4}, {10, 5}, {10, 6}, {10, 7}, {10, 8}, {10, 9}, {10, 8}, {10, 7}, {10, 6}, {10, 5}, {10, 4}, { 9, 3}, { 8, 3}, { 7, 3}, { 6, 3}, { 5, 3}, { 4, 3}, { 3, 3}, { 2, 4}, { 2, 5}, { 2, 6}, { 2, 7}, { 2, 8}, { 1, 9}, { 0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _rv_station_right_se_far[] = { {5, 15}, {5, 14}, {4, 13}, {3, 12}, {3, 11}, {3, 10}, {3, 9}, {3, 8}, {3, 7}, {3, 6}, {4, 5}, {5, 5}, {6, 5}, {7, 5}, {8, 5}, {9, 5}, {8, 5}, {7, 5}, {6, 5}, {5, 5}, {4, 5}, {3, 6}, {3, 7}, {3, 8}, {3, 9}, {3, 10}, {3, 11}, {3, 12}, {4, 13}, {5, 13}, {6, 13}, {7, 13}, {8, 13}, {9, 14}, {9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _rv_station_right_ne_near[] = { {0, 5}, {1, 5}, {2, 4}, {3, 3}, {4, 3}, {5, 3}, {6, 4}, {6, 5}, {6, 6}, {6, 7}, {6, 8}, {6, 9}, {6, 8}, {6, 7}, {6, 6}, {6, 5}, {6, 4}, {5, 3}, {4, 3}, {3, 3}, {2, 4}, {2, 5}, {2, 6}, {2, 7}, {2, 8}, {1, 9}, {0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _rv_station_right_se_near[] = { {5, 15}, {5, 14}, {4, 13}, {3, 12}, {3, 11}, {3, 10}, {4, 9}, {5, 9}, {6, 9}, {7, 9}, {8, 9}, {9, 9}, {8, 9}, {7, 9}, {6, 9}, {5, 9}, {4, 9}, {3, 10}, {3, 11}, {3, 12}, {4, 13}, {5, 13}, {6, 13}, {7, 13}, {8, 13}, {9, 14}, {9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry * const _road_road_drive_data[] = { _roadveh_drive_data_0, _roadveh_drive_data_1, _roadveh_drive_data_2, _roadveh_drive_data_3, _roadveh_drive_data_4, _roadveh_drive_data_5, _roadveh_drive_data_6, _roadveh_drive_data_7, _roadveh_drive_data_8, _roadveh_drive_data_9, _roadveh_drive_data_10, _roadveh_drive_data_11, _roadveh_drive_data_12, _roadveh_drive_data_13, _roadveh_drive_data_14, _roadveh_drive_data_15, _roadveh_drive_data_16, _roadveh_drive_data_17, _roadveh_drive_data_18, _roadveh_drive_data_19, _roadveh_drive_data_20, _roadveh_drive_data_21, _roadveh_drive_data_22, _roadveh_drive_data_23, _roadveh_drive_data_24, _roadveh_drive_data_25, _roadveh_drive_data_26, _roadveh_drive_data_27, _roadveh_drive_data_28, _roadveh_drive_data_29, _roadveh_drive_data_30, _roadveh_drive_data_31, _rv_station_left_sw_far, _rv_station_left_nw_far, _rv_station_left_sw_near, _rv_station_left_nw_near, _rv_station_left_sw_far, _rv_station_left_nw_far, _rv_station_left_sw_near, _rv_station_left_nw_near, _rv_station_left_ne_far, _rv_station_left_se_far, _rv_station_left_ne_near, _rv_station_left_se_near, _rv_station_left_ne_far, _rv_station_left_se_far, _rv_station_left_ne_near, _rv_station_left_se_near, _rv_station_right_sw_far, _rv_station_right_nw_far, _rv_station_right_sw_near, _rv_station_right_nw_near, _rv_station_right_sw_far, _rv_station_right_nw_far, _rv_station_right_sw_near, _rv_station_right_nw_near, _rv_station_right_ne_far, _rv_station_right_se_far, _rv_station_right_ne_near, _rv_station_right_se_near, _rv_station_right_ne_far, _rv_station_right_se_far, _rv_station_right_ne_near, _rv_station_right_se_near, }; /** Table of road stop stop frames, when to stop at a road stop. */ extern const byte _road_stop_stop_frame[] = { /* Duplicated left and right because of "entered stop" bit */ 20, 20, 16, 16, 20, 20, 16, 16, 19, 19, 15, 15, 19, 19, 15, 15, 16, 16, 12, 12, 16, 16, 12, 12, 15, 15, 11, 11, 15, 15, 11, 11 }; static const RoadDriveEntry _roadveh_tram_turn_ne_0[] = { {15, 5}, {14, 5}, {13, 5}, {12, 5}, {11, 5}, {10, 5}, { 9, 5}, { 8, 5}, { 7, 5}, { 6, 5}, { 5, 5}, { 4, 5}, { 3, 5}, { 2, 5}, { 1, 5}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, { 0, 9}, {RDE_TURNED | DIAGDIR_SW, 0}, { 1, 9}, { 2, 9}, { 3, 9}, { 4, 9}, { 5, 9}, { 6, 9}, { 7, 9}, { 8, 9}, { 9, 9}, {10, 9}, {11, 9}, {12, 9}, {13, 9}, {14, 9}, {15, 9}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_tram_turn_ne_1[] = { {15, 9}, {14, 9}, {13, 9}, {12, 9}, {11, 9}, {10, 9}, { 9, 9}, { 8, 9}, { 7, 9}, { 6, 9}, { 5, 9}, { 4, 9}, { 3, 9}, { 2, 9}, { 1, 9}, { 0, 9}, { 0, 8}, { 0, 7}, { 0, 6}, { 0, 5}, {RDE_TURNED | DIAGDIR_SW, 0}, { 1, 5}, { 2, 5}, { 3, 5}, { 4, 5}, { 5, 5}, { 6, 5}, { 7, 5}, { 8, 5}, { 9, 5}, {10, 5}, {11, 5}, {12, 5}, {13, 5}, {14, 5}, {15, 5}, {RDE_NEXT_TILE | DIAGDIR_SW, 0} }; static const RoadDriveEntry _roadveh_tram_turn_se_0[] = { {5, 0}, {5, 1}, {5, 2}, {5, 3}, {5, 4}, {5, 5}, {5, 6}, {5, 7}, {5, 8}, {5, 9}, {5, 10}, {5, 11}, {5, 12}, {5, 13}, {5, 14}, {5, 15}, {6, 15}, {7, 15}, {8, 15}, {9, 15}, {RDE_TURNED | DIAGDIR_NW, 0}, {9, 14}, {9, 13}, {9, 12}, {9, 11}, {9, 10}, {9, 9}, {9, 8}, {9, 7}, {9, 6}, {9, 5}, {9, 4}, {9, 3}, {9, 2}, {9, 1}, {9, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_tram_turn_se_1[] = { {9, 0}, {9, 1}, {9, 2}, {9, 3}, {9, 4}, {9, 5}, {9, 6}, {9, 7}, {9, 8}, {9, 9}, {9, 10}, {9, 11}, {9, 12}, {9, 13}, {9, 14}, {9, 15}, {8, 15}, {7, 15}, {6, 15}, {5, 15}, {RDE_TURNED | DIAGDIR_NW, 0}, {5, 14}, {5, 13}, {5, 12}, {5, 11}, {5, 10}, {5, 9}, {5, 8}, {5, 7}, {5, 6}, {5, 5}, {5, 4}, {5, 3}, {5, 2}, {5, 1}, {5, 0}, {RDE_NEXT_TILE | DIAGDIR_NW, 0} }; static const RoadDriveEntry _roadveh_tram_turn_sw_0[] = { { 0, 9}, { 1, 9}, { 2, 9}, { 3, 9}, { 4, 9}, { 5, 9}, { 6, 9}, { 7, 9}, { 8, 9}, { 9, 9}, {10, 9}, {11, 9}, {12, 9}, {13, 9}, {14, 9}, {15, 9}, {15, 8}, {15, 7}, {15, 6}, {15, 5}, {RDE_TURNED | DIAGDIR_NE, 0}, {14, 5}, {13, 5}, {12, 5}, {11, 5}, {10, 5}, { 9, 5}, { 8, 5}, { 7, 5}, { 6, 5}, { 5, 5}, { 4, 5}, { 3, 5}, { 2, 5}, { 1, 5}, { 0, 5}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_tram_turn_sw_1[] = { { 0, 5}, { 1, 5}, { 2, 5}, { 3, 5}, { 4, 5}, { 5, 5}, { 6, 5}, { 7, 5}, { 8, 5}, { 9, 5}, {10, 5}, {11, 5}, {12, 5}, {13, 5}, {14, 5}, {15, 5}, {15, 6}, {15, 7}, {15, 8}, {15, 9}, {RDE_TURNED | DIAGDIR_NE, 0}, {14, 9}, {13, 9}, {12, 9}, {11, 9}, {10, 9}, { 9, 9}, { 8, 9}, { 7, 9}, { 6, 9}, { 5, 9}, { 4, 9}, { 3, 9}, { 2, 9}, { 1, 9}, { 0, 9}, {RDE_NEXT_TILE | DIAGDIR_NE, 0} }; static const RoadDriveEntry _roadveh_tram_turn_nw_0[] = { {9, 15}, {9, 14}, {9, 13}, {9, 12}, {9, 11}, {9, 10}, {9, 9}, {9, 8}, {9, 7}, {9, 6}, {9, 5}, {9, 4}, {9, 3}, {9, 2}, {9, 1}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {RDE_TURNED | DIAGDIR_SE, 0}, {5, 1}, {5, 2}, {5, 3}, {5, 4}, {5, 5}, {5, 6}, {5, 7}, {5, 8}, {5, 9}, {5, 10}, {5, 11}, {5, 12}, {5, 13}, {5, 14}, {5, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry _roadveh_tram_turn_nw_1[] = { {5, 15}, {5, 14}, {5, 13}, {5, 12}, {5, 11}, {5, 10}, {5, 9}, {5, 8}, {5, 7}, {5, 6}, {5, 5}, {5, 4}, {5, 3}, {5, 2}, {5, 1}, {5, 0}, {6, 0}, {7, 0}, {8, 0}, {9, 0}, {RDE_TURNED | DIAGDIR_SE, 0}, {9, 1}, {9, 2}, {9, 3}, {9, 4}, {9, 5}, {9, 6}, {9, 7}, {9, 8}, {9, 9}, {9, 10}, {9, 11}, {9, 12}, {9, 13}, {9, 14}, {9, 15}, {RDE_NEXT_TILE | DIAGDIR_SE, 0} }; static const RoadDriveEntry * const _road_tram_drive_data[] = { _roadveh_drive_data_0, _roadveh_drive_data_1, _roadveh_drive_data_2, _roadveh_drive_data_3, _roadveh_drive_data_4, _roadveh_drive_data_5, _roadveh_tram_turn_ne_0, _roadveh_tram_turn_se_0, _roadveh_drive_data_8, _roadveh_drive_data_9, _roadveh_drive_data_10, _roadveh_drive_data_11, _roadveh_drive_data_12, _roadveh_drive_data_13, _roadveh_tram_turn_sw_0, _roadveh_tram_turn_nw_0, _roadveh_drive_data_16, _roadveh_drive_data_17, _roadveh_drive_data_18, _roadveh_drive_data_19, _roadveh_drive_data_20, _roadveh_drive_data_21, _roadveh_tram_turn_ne_1, _roadveh_tram_turn_se_1, _roadveh_drive_data_24, _roadveh_drive_data_25, _roadveh_drive_data_26, _roadveh_drive_data_27, _roadveh_drive_data_28, _roadveh_drive_data_29, _roadveh_tram_turn_sw_1, _roadveh_tram_turn_nw_1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, }; static const RoadDriveEntry * const * const _road_drive_data[2] = { _road_road_drive_data, _road_tram_drive_data, };