Index: src/rail_gui.cpp =================================================================== --- src/rail_gui.cpp (revision 18816) +++ src/rail_gui.cpp (working copy) @@ -115,17 +115,30 @@ static void PlaceExtraDepotRail(TileIndex tile, uint16 extra) { if (GetRailTileType(tile) != RAIL_TILE_NORMAL) return; - if ((GetTrackBits(tile) & GB(extra, 8, 8)) == 0) return; + if ((GetTrackBits(tile) & GB(extra, _settings_game.pf.forbid_90_deg ? 10 : 4, 6)) == 0) return; - DoCommandP(tile, _cur_railtype, extra & 0xFF, CMD_BUILD_SINGLE_RAIL); + DoCommandP(tile, _cur_railtype, GB(extra, 0, 3), CMD_BUILD_SINGLE_RAIL); } +#define M(track, bits, bits_no_90) ((uint16)((track) | (bits) << 4 | (bits_no_90) << 10)) /** Additional pieces of track to add at the entrance of a depot. */ static const uint16 _place_depot_extra[12] = { - 0x0604, 0x2102, 0x1202, 0x0505, // First additional track for directions 0..3 - 0x2400, 0x2801, 0x1800, 0x1401, // Second additional track - 0x2203, 0x0904, 0x0A05, 0x1103, // Third additional track + M(TRACK_LEFT, TRACK_BIT_Y | TRACK_BIT_UPPER, TRACK_BIT_Y), + M(TRACK_UPPER, TRACK_BIT_X | TRACK_BIT_RIGHT, TRACK_BIT_X), + M(TRACK_UPPER, TRACK_BIT_Y | TRACK_BIT_LEFT, TRACK_BIT_Y), + M(TRACK_RIGHT, TRACK_BIT_X | TRACK_BIT_UPPER, TRACK_BIT_X), + + M(TRACK_X, TRACK_BIT_UPPER | TRACK_BIT_RIGHT, TRACK_BIT_UPPER | TRACK_BIT_RIGHT), + M(TRACK_Y, TRACK_BIT_LOWER | TRACK_BIT_RIGHT, TRACK_BIT_LOWER | TRACK_BIT_RIGHT), + M(TRACK_X, TRACK_BIT_LOWER | TRACK_BIT_LEFT, TRACK_BIT_LOWER | TRACK_BIT_LEFT), + M(TRACK_Y, TRACK_BIT_UPPER | TRACK_BIT_LEFT, TRACK_BIT_UPPER | TRACK_BIT_LEFT), + + M(TRACK_LOWER, TRACK_BIT_Y | TRACK_BIT_RIGHT, TRACK_BIT_Y), + M(TRACK_LEFT, TRACK_BIT_X | TRACK_BIT_LOWER, TRACK_BIT_X), + M(TRACK_RIGHT, TRACK_BIT_Y | TRACK_BIT_LOWER, TRACK_BIT_Y), + M(TRACK_LOWER, TRACK_BIT_X | TRACK_BIT_LEFT, TRACK_BIT_X), }; +#undef M void CcRailDepot(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)