From 2c1bfe10ac74925c6b447df417ca39c2d722e2f5 Mon Sep 17 00:00:00 2001 From: rubidium Date: Mon, 22 Oct 2007 19:11:50 +0000 Subject: [PATCH] (svn r11339) -Add: autoroad; same as autorail, but for road and trams and only on X and Y direction. Patch by Octopussy and skidd13. --- bin/data/openttd.grf | Bin 29983 -> 31847 bytes src/gfxinit.cpp | 2 +- src/gui.h | 1 + src/lang/english.txt | 2 + src/road_gui.cpp | 181 +++++++++++++++++++++++++++++++++++-------- src/table/files.h | 2 +- src/table/sprites.h | 6 +- 7 files changed, 159 insertions(+), 35 deletions(-) diff --git a/bin/data/openttd.grf b/bin/data/openttd.grf index 6bfc3dc1191183a2692cf06ef283525cccc6e42d..627c602bca617e6a5ff9ea7ab15051b89a999922 100644 GIT binary patch delta 8363 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 diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 84a04f1b8a..b1f22fe3ae 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -324,7 +324,7 @@ static const SpriteID _openttd_grf_indexes[] = { 377, 377, ///< · small 153, 153, ///< · medium 601, 601, ///< · large - SPR_WARNING_SIGN, SPR_WARNING_SIGN, + SPR_WARNING_SIGN, SPR_CURSOR_AUTOTRAM, END }; diff --git a/src/gui.h b/src/gui.h index 78be95fe5e..d4da017146 100644 --- a/src/gui.h +++ b/src/gui.h @@ -88,6 +88,7 @@ enum { /* Road specific actions */ DDSP_PLACE_ROAD_NE, DDSP_PLACE_ROAD_NW, + DDSP_PLACE_AUTOROAD, }; /* misc_gui.cpp */ diff --git a/src/lang/english.txt b/src/lang/english.txt index 44f1d0b22b..1550ff97f4 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1667,7 +1667,9 @@ STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Can't bu STR_180A_ROAD_CONSTRUCTION :Road construction STR_180A_TRAMWAY_CONSTRUCTION :Tramway construction STR_180B_BUILD_ROAD_SECTION :{BLACK}Build road section +STR_BUILD_AUTOROAD_TIP :{BLACK}Build road section using the Autoroad mode STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Build tramway section +STR_BUILD_AUTOTRAM_TIP :{BLACK}Build tramway section using the Autotram mode STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Build road vehicle depot (for building and servicing vehicles) STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Build tram vehicle depot (for building and servicing vehicles) STR_180D_BUILD_BUS_STATION :{BLACK}Build bus station diff --git a/src/road_gui.cpp b/src/road_gui.cpp index a65a79f57b..34b9e314c6 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -30,7 +30,22 @@ static void ShowRoadDepotPicker(); static bool _remove_button_clicked; -static byte _place_road_flag; +/** + * Define the values of the RoadFlags + * @see CmdBuildLongRoad + */ +enum RoadFlags { + RF_NONE = 0x00, + RF_START_HALFROAD_Y = 0x01, // The start tile in Y-dir should have only a half hoad + RF_END_HALFROAD_Y = 0x02, // The end tile in Y-dir should have only a half hoad + RF_DIR_Y = 0x04, // The direction is Y-dir + RF_DIR_X = RF_NONE, // Dummy; Dir X is set when RF_DIR_Y is not set + RF_START_HALFROAD_X = 0x08, // The start tile in X-dir should have only a half hoad + RF_END_HALFROAD_X = 0x10, // The end tile in X-dir should have only a half hoad +}; +DECLARE_ENUM_AS_BIT_SET(RoadFlags); + +static RoadFlags _place_road_flag; static RoadType _cur_roadtype; @@ -42,18 +57,52 @@ void CcPlaySound1D(bool success, TileIndex tile, uint32 p1, uint32 p2) if (success) SndPlayTileFx(SND_1F_SPLAT, tile); } +/** + * Set the initial flags for the road constuction. + * The flags are: + * @li The direction is the Y-dir + * @li The first tile has a partitial RoadBit (true or false) + * + * @param tile The start tile + */ static void PlaceRoad_NE(TileIndex tile) { - _place_road_flag = (_tile_fract_coords.y >= 8) + 4; + _place_road_flag = RF_DIR_Y; + if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y; VpStartPlaceSizing(tile, VPM_FIX_X, DDSP_PLACE_ROAD_NE); } +/** + * Set the initial flags for the road constuction. + * The flags are: + * @li The direction is the X-dir + * @li The first tile has a partitial RoadBit (true or false) + * + * @param tile The start tile + */ static void PlaceRoad_NW(TileIndex tile) { - _place_road_flag = (_tile_fract_coords.x >= 8) + 0; + _place_road_flag = RF_DIR_X; + if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X; VpStartPlaceSizing(tile, VPM_FIX_Y, DDSP_PLACE_ROAD_NW); } +/** + * Set the initial flags for the road constuction. + * The flags are: + * @li The direction is not set. + * @li The first tile has a partitial RoadBit (true or false) + * + * @param tile The start tile + */ +static void PlaceRoad_AutoRoad(TileIndex tile) +{ + _place_road_flag = RF_NONE; + if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X; + if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y; + VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_PLACE_AUTOROAD); +} + static void PlaceRoad_Bridge(TileIndex tile) { VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE); @@ -83,6 +132,7 @@ struct RoadTypeInfo { SpriteID cursor_nesw; ///< Cursor for building NE and SW bits SpriteID cursor_nwse; ///< Cursor for building NW and SE bits + SpriteID cursor_autoroad; ///< Cursor for building autoroad }; /** What errors/cursors must be shown for several types of roads */ @@ -98,6 +148,7 @@ static const RoadTypeInfo _road_type_infos[] = { SPR_CURSOR_ROAD_NESW, SPR_CURSOR_ROAD_NWSE, + SPR_CURSOR_AUTOROAD, }, { STR_1804_CAN_T_BUILD_TRAMWAY_HERE, @@ -110,6 +161,7 @@ static const RoadTypeInfo _road_type_infos[] = { SPR_CURSOR_TRAMWAY_NESW, SPR_CURSOR_TRAMWAY_NWSE, + SPR_CURSOR_AUTOTRAM, }, }; @@ -187,6 +239,7 @@ enum RoadToolbarWidgets { RTW_STICKY, RTW_ROAD_X, RTW_ROAD_Y, + RTW_AUTOROAD, RTW_DEMOLISH, RTW_DEPOT, RTW_BUS_STATION, @@ -198,16 +251,38 @@ enum RoadToolbarWidgets { typedef void OnButtonClick(Window *w); +/** + * Function that handles the click on the + * X road placement button. + * + * @param w The current window + */ static void BuildRoadClick_NE(Window *w) { HandlePlacePushButton(w, RTW_ROAD_X, _road_type_infos[_cur_roadtype].cursor_nesw, 1, PlaceRoad_NE); } +/** + * Function that handles the click on the + * Y road placement button. + * + * @param w The current window + */ static void BuildRoadClick_NW(Window *w) { HandlePlacePushButton(w, RTW_ROAD_Y, _road_type_infos[_cur_roadtype].cursor_nwse, 1, PlaceRoad_NW); } +/** + * Function that handles the click on the + * autoroad placement button. + * + * @param w The current window + */ +static void BuildRoadClick_AutoRoad(Window *w) +{ + HandlePlacePushButton(w, RTW_AUTOROAD, _road_type_infos[_cur_roadtype].cursor_autoroad, 1, PlaceRoad_AutoRoad); +} static void BuildRoadClick_Demolish(Window *w) { @@ -251,9 +326,11 @@ static void BuildRoadClick_Remove(Window *w) SetSelectionRed(IsWindowWidgetLowered(w, RTW_REMOVE)); } +/** Array with the handlers of the button-clicks for the road-toolbar */ static OnButtonClick* const _build_road_button_proc[] = { BuildRoadClick_NE, BuildRoadClick_NW, + BuildRoadClick_AutoRoad, BuildRoadClick_Demolish, BuildRoadClick_Depot, BuildRoadClick_BusStation, @@ -263,6 +340,7 @@ static OnButtonClick* const _build_road_button_proc[] = { BuildRoadClick_Remove }; +/** Array with the keycode of the button-clicks for the road-toolbar */ static const uint16 _road_keycodes[] = { '1', '2', @@ -270,6 +348,7 @@ static const uint16 _road_keycodes[] = { '4', '5', '6', + '7', 'B', 'T', 'R', @@ -291,6 +370,7 @@ static void UpdateRemoveWidgetStatus(Window *w, int clicked_widget) break; case RTW_ROAD_X: case RTW_ROAD_Y: + case RTW_AUTOROAD: case RTW_BUS_STATION: case RTW_TRUCK_STATION: /* Removal button is enabled only if the road/station @@ -361,13 +441,38 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) break; case WE_PLACE_DRAG: + /* Here we update the end tile flags + * of the road placement actions. + * At first we reset the end halfroad + * bits and if needed we set them again. */ switch (e->we.place.select_proc) { case DDSP_PLACE_ROAD_NE: - _place_road_flag = (_place_road_flag & ~2) | ((e->we.place.pt.y & 8) >> 2); + _place_road_flag &= ~RF_END_HALFROAD_Y; + if (e->we.place.pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y; break; case DDSP_PLACE_ROAD_NW: - _place_road_flag = (_place_road_flag & ~2) | ((e->we.place.pt.x & 8) >> 2); + _place_road_flag &= ~RF_END_HALFROAD_X; + if (e->we.place.pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X; + break; + + case DDSP_PLACE_AUTOROAD: + _place_road_flag &= ~(RF_END_HALFROAD_Y | RF_END_HALFROAD_X); + if (e->we.place.pt.y & 8) _place_road_flag |= RF_END_HALFROAD_Y; + if (e->we.place.pt.x & 8) _place_road_flag |= RF_END_HALFROAD_X; + + /* For autoroad we need to update the + * direction of the road */ + if (_thd.size.x > _thd.size.y || (_thd.size.x == _thd.size.y && + (_tile_fract_coords.x < _tile_fract_coords.y && (_tile_fract_coords.x + _tile_fract_coords.y) < 16) || + (_tile_fract_coords.x > _tile_fract_coords.y && (_tile_fract_coords.x + _tile_fract_coords.y) > 16) )) { + /* Set dir = X */ + _place_road_flag &= ~RF_DIR_Y; + } else { + /* Set dir = Y */ + _place_road_flag |= RF_DIR_Y; + } + break; } @@ -391,6 +496,13 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) case DDSP_PLACE_ROAD_NE: case DDSP_PLACE_ROAD_NW: + case DDSP_PLACE_AUTOROAD: + /* Flag description: + * Use the first three bits (0x07) if dir == Y + * else use the last 2 bits (X dir has + * not the 3rd bit set) */ + _place_road_flag = (RoadFlags)((_place_road_flag & RF_DIR_Y) ? (_place_road_flag & 0x07) : (_place_road_flag >> 3)); + DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | _ctrl_pressed << 5, CcPlaySound1D, _remove_button_clicked ? CMD_REMOVE_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) : @@ -417,23 +529,25 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e) /** Widget definition of the build road toolbar */ static const Widget _build_road_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION -{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 227, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 228, 239, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY { WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X { WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, // RTW_DEPOT -{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, // RTW_BUS_STATION -{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, // RTW_TRUCK_STATION -{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE -{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL -{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_ROAD_VEHICLE_DEPOT}, // RTW_DEPOT +{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_BUS_STATION}, // RTW_BUS_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_TRUCK_LOADING_BAY}, // RTW_TRUCK_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 153, 195, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 218, 239, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE + { WIDGETS_END}, }; static const WindowDesc _build_road_desc = { - WDP_ALIGN_TBR, 22, 218, 36, 218, 36, + WDP_ALIGN_TBR, 22, 240, 36, 240, 36, WC_BUILD_TOOLBAR, WC_NONE, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, _build_road_widgets, @@ -443,23 +557,25 @@ static const WindowDesc _build_road_desc = { /** Widget definition of the build tram toolbar */ static const Widget _build_tramway_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 205, 0, 13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION -{ WWT_STICKYBOX, RESIZE_NONE, 7, 206, 217, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 227, 0, 13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 228, 239, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY { WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_TRAMWAY_NW, STR_180B_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_X { WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_TRAMWAY_NE, STR_180B_BUILD_TRAMWAY_SECTION}, // RTW_ROAD_Y -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_TRAM_VEHICLE_DEPOT}, // RTW_DEPOT -{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_PASSENGER_TRAM_STATION}, // RTW_BUS_STATION -{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_CARGO_TRAM_STATION}, // RTW_TRUCK_STATION -{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 173, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_TRAMWAY_BRIDGE}, // RTW_BUILD_BRIDGE -{ WWT_IMGBTN, RESIZE_NONE, 7, 174, 195, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_TRAMWAY_TUNNEL}, // RTW_BUILD_TUNNEL -{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, // RTW_REMOVE +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOTRAM, STR_BUILD_AUTOTRAM_TIP}, // RTW_AUTOROAD +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_ROAD_DEPOT, STR_180C_BUILD_TRAM_VEHICLE_DEPOT}, // RTW_DEPOT +{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 131, 14, 35, SPR_IMG_BUS_STATION, STR_180D_BUILD_PASSENGER_TRAM_STATION}, // RTW_BUS_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 132, 153, 14, 35, SPR_IMG_TRUCK_BAY, STR_180E_BUILD_CARGO_TRAM_STATION}, // RTW_TRUCK_STATION +{ WWT_IMGBTN, RESIZE_NONE, 7, 153, 195, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_TRAMWAY_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 196, 217, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_TRAMWAY_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 218, 239, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS}, // RTW_REMOVE + { WIDGETS_END}, }; static const WindowDesc _build_tramway_desc = { - WDP_ALIGN_TBR, 22, 218, 36, 218, 36, + WDP_ALIGN_TBR, 22, 240, 36, 240, 36, WC_BUILD_TOOLBAR, WC_NONE, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, _build_tramway_widgets, @@ -479,23 +595,24 @@ void ShowBuildRoadToolbar(RoadType roadtype) /** Widget definition of the build road toolbar in the scenario editor */ static const Widget _build_road_scen_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // RTW_CLOSEBOX -{ WWT_CAPTION, RESIZE_NONE, 7, 11, 139, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION -{ WWT_STICKYBOX, RESIZE_NONE, 7, 140, 151, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY +{ WWT_CAPTION, RESIZE_NONE, 7, 11, 161, 0, 13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION +{ WWT_STICKYBOX, RESIZE_NONE, 7, 162, 173, 0, 13, 0x0, STR_STICKY_BUTTON}, // RTW_STICKY { WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_ROAD_NW, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_X { WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_ROAD_NE, STR_180B_BUILD_ROAD_SECTION}, // RTW_ROAD_Y -{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH +{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_AUTOROAD, STR_BUILD_AUTOROAD_TIP}, // RTW_AUTOROAD +{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 87, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC}, // RTW_DEMOLISH { WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_DEPOT { WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_BUS_STATION { WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL}, // RTW_TRUCK_STATION -{ WWT_IMGBTN, RESIZE_NONE, 7, 66, 107, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE -{ WWT_IMGBTN, RESIZE_NONE, 7, 108, 129, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL -{ WWT_IMGBTN, RESIZE_NONE, 7, 130, 151, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE +{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 130, 14, 35, SPR_IMG_BRIDGE, STR_180F_BUILD_ROAD_BRIDGE}, // RTW_BUILD_BRIDGE +{ WWT_IMGBTN, RESIZE_NONE, 7, 131, 151, 14, 35, SPR_IMG_ROAD_TUNNEL, STR_1810_BUILD_ROAD_TUNNEL}, // RTW_BUILD_TUNNEL +{ WWT_IMGBTN, RESIZE_NONE, 7, 152, 173, 14, 35, SPR_IMG_REMOVE, STR_1811_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE { WIDGETS_END}, }; static const WindowDesc _build_road_scen_desc = { - WDP_AUTO, WDP_AUTO, 152, 36, 152, 36, + WDP_AUTO, WDP_AUTO, 174, 36, 174, 36, WC_SCEN_BUILD_ROAD, WC_NONE, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, _build_road_scen_widgets, diff --git a/src/table/files.h b/src/table/files.h index 3deba561ae..40b2645f80 100644 --- a/src/table/files.h +++ b/src/table/files.h @@ -59,7 +59,7 @@ static MD5File files_openttd[] = { { "autorail.grf", { 0xed, 0x44, 0x7f, 0xbb, 0x19, 0x44, 0x48, 0x4c, 0x07, 0x8a, 0xb1, 0xc1, 0x5c, 0x12, 0x3a, 0x60 } }, { "canalsw.grf", { 0x13, 0x9c, 0x98, 0xcf, 0xb8, 0x7c, 0xd7, 0x1f, 0xca, 0x34, 0xa5, 0x6b, 0x65, 0x31, 0xec, 0x0f } }, { "elrailsw.grf", { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } }, - { "openttd.grf", { 0x20, 0x64, 0x4a, 0xf6, 0x75, 0x26, 0x5b, 0x92, 0xbb, 0x6f, 0x8d, 0x0e, 0x34, 0x7e, 0xa6, 0xe3 } }, + { "openttd.grf", { 0x95, 0xe3, 0x09, 0xe4, 0x2c, 0x2d, 0x47, 0x80, 0xd2, 0x09, 0x06, 0x64, 0xaf, 0x20, 0x32, 0x14 } }, { "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } }, { "roadstops.grf", { 0xa1, 0x5b, 0xb3, 0x52, 0x60, 0x12, 0x3c, 0xb7, 0x7b, 0x73, 0x09, 0xc1, 0x1a, 0xb4, 0xd0, 0xb8 } }, { "group.grf", { 0xe8, 0x52, 0x5f, 0x1c, 0x3e, 0xf9, 0x91, 0x9d, 0x0f, 0x70, 0x8c, 0x8a, 0x21, 0xa4, 0xc7, 0x02 } }, diff --git a/src/table/sprites.h b/src/table/sprites.h index ee9b6fa3fe..9caff36f2e 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -47,7 +47,7 @@ enum Sprites { SPR_ASCII_SPACE_BIG = 450, /* Extra graphic spritenumbers */ - OPENTTD_SPRITES_COUNT = 112, // number of gfx-sprites in openttd.grf + OPENTTD_SPRITES_COUNT = 116, // number of gfx-sprites in openttd.grf SPR_SIGNALS_BASE = 4896, SPR_CANALS_BASE = SPR_SIGNALS_BASE + 486, @@ -1225,6 +1225,7 @@ enum Sprites { /* road_gui.c */ SPR_IMG_ROAD_NW = 1309, SPR_IMG_ROAD_NE = 1310, + SPR_IMG_AUTOROAD = SPR_OPENTTD_BASE + 112, SPR_IMG_ROAD_DEPOT = 1295, SPR_IMG_BUS_STATION = 749, SPR_IMG_TRUCK_BAY = 750, @@ -1233,6 +1234,7 @@ enum Sprites { SPR_IMG_REMOVE = 714, SPR_IMG_TRAMWAY_NW = SPR_TRAMWAY_BASE + 0, SPR_IMG_TRAMWAY_NE = SPR_TRAMWAY_BASE + 1, + SPR_IMG_AUTOTRAM = SPR_OPENTTD_BASE + 114, /* rail_gui.c */ SPR_IMG_RAIL_NS = 1251, @@ -1349,8 +1351,10 @@ enum CursorSprite { /* road cursors */ SPR_CURSOR_ROAD_NESW = 1311, SPR_CURSOR_ROAD_NWSE = 1312, + SPR_CURSOR_AUTOROAD = SPR_OPENTTD_BASE + 113, SPR_CURSOR_TRAMWAY_NESW = SPR_TRAMWAY_BASE + 2, SPR_CURSOR_TRAMWAY_NWSE = SPR_TRAMWAY_BASE + 3, + SPR_CURSOR_AUTOTRAM = SPR_OPENTTD_BASE + 115, SPR_CURSOR_ROAD_DEPOT = 1297, SPR_CURSOR_BUS_STATION = 2725,