| 208 | } |
| 209 | |
| 210 | static bool FixTTOMapArray() |
| 211 | { |
| 212 | for (auto tile : Map::Iterate()) { |
| 213 | TileType tt = GetTileType(tile); |
| 214 | if (tt == 11) { |
| 215 | /* TTO has a different way of storing monorail. |
| 216 | * Instead of using bits in m3 it uses a different tile type. */ |
| 217 | tile.m3() = 1; // rail type = monorail (in TTD) |
| 218 | SetTileType(tile, MP_RAILWAY); |
| 219 | tile.m2() = 1; // set monorail ground to RailGroundType::Grass |
| 220 | tt = MP_RAILWAY; |
| 221 | } |
| 222 | |
| 223 | switch (tt) { |
| 224 | case MP_CLEAR: |
| 225 | break; |
| 226 | |
| 227 | case MP_RAILWAY: |
| 228 | switch (GB(tile.m5(), 6, 2)) { |
| 229 | case 0: // RailTileType::Normal |
| 230 | break; |
| 231 | case 1: // RailTileType::Signals |
| 232 | tile.m4() = (~tile.m5() & 1) << 2; // signal variant (present only in OTTD) |
| 233 | SB(tile.m2(), 6, 2, GB(tile.m5(), 3, 2)); // signal status |
| 234 | tile.m3() |= 0xC0; // both signals are present |
| 235 | tile.m5() = HasBit(tile.m5(), 5) ? 2 : 1; // track direction (only X or Y) |
| 236 | tile.m5() |= 0x40; // RailTileType::Signals |
| 237 | break; |
| 238 | case 3: // RailTileType::Depot |
| 239 | tile.m2() = 0; |
| 240 | break; |
| 241 | default: |
| 242 | return false; |
| 243 | } |
| 244 | break; |
| 245 | |
| 246 | case MP_ROAD: // road (depot) or level crossing |
| 247 | switch (GB(tile.m5(), 4, 4)) { |
| 248 | case 0: // RoadTileType::Normal |
| 249 | if (tile.m2() == 4) tile.m2() = 5; // 'small trees' -> Roadside::Trees |
| 250 | break; |
| 251 | case 1: // RoadTileType::Crossing (there aren't monorail crossings in TTO) |
| 252 | tile.m3() = tile.m1(); // set owner of road = owner of rail |
| 253 | break; |
| 254 | case 2: // RoadTileType::Depot |
| 255 | break; |
| 256 | default: |
| 257 | return false; |
| 258 | } |
| 259 | break; |
| 260 | |
| 261 | case MP_HOUSE: |
| 262 | tile.m3() = tile.m2() & 0xC0; // construction stage |
| 263 | tile.m2() &= 0x3F; // building type |
| 264 | if (tile.m2() >= 5) tile.m2()++; // skip "large office block on snow" |
| 265 | break; |
| 266 | |
| 267 | case MP_TREES: |
no test coverage detected