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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 MsK50E)kF*o00TK_djJ3c delta 6823 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 D4q9zU 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,