Changeset - r7906:fcc177c43cab
[Not reviewed]
master
0 6 0
skidd13 - 17 years ago 2007-11-18 13:55:23
skidd13@openttd.org
(svn r11457) -Fix: (r11455) Reenable the accidentaly removed one way roads option
-Change: Enable one way roads like the remove via a toolbar icon
6 files changed with 80 insertions and 37 deletions:
0 comments (0 inline, 0 general)
bin/data/openttdd.grf
Show inline comments
 
binary diff not shown
bin/data/openttdw.grf
Show inline comments
 
binary diff not shown
src/lang/english.txt
Show inline comments
 
@@ -1302,768 +1302,769 @@ STR_MESSAGES_DISABLE_ALL                
 
STR_MESSAGES_ENABLE_ALL                                         :{BLACK}Enable all
 

	
 
STR_CONSTRUCT_COAL_MINE_TIP                                     :{BLACK}Construct Coal Mine
 
STR_CONSTRUCT_FOREST_TIP                                        :{BLACK}Plant Forest
 
STR_CONSTRUCT_OIL_RIG_TIP                                       :{BLACK}Construct Oil Rig
 
STR_CONSTRUCT_FARM_TIP                                          :{BLACK}Fund Farm
 
STR_CONSTRUCT_COPPER_ORE_MINE_TIP                               :{BLACK}Construct Copper Ore Mine
 
STR_CONSTRUCT_OIL_WELLS_TIP                                     :{BLACK}Drill for Oil
 
STR_CONSTRUCT_GOLD_MINE_TIP                                     :{BLACK}Construct Gold Mine
 
STR_CONSTRUCT_DIAMOND_MINE_TIP                                  :{BLACK}Construct Diamond Mine
 
STR_CONSTRUCT_IRON_ORE_MINE_TIP                                 :{BLACK}Construct Iron Ore Mine
 
STR_CONSTRUCT_FRUIT_PLANTATION_TIP                              :{BLACK}Fund Fruit Plantation
 
STR_CONSTRUCT_RUBBER_PLANTATION_TIP                             :{BLACK}Fund Rubber Plantation
 
STR_CONSTRUCT_WATER_SUPPLY_TIP                                  :{BLACK}Fund Water Supply
 
STR_CONSTRUCT_COTTON_CANDY_TIP                                  :{BLACK}Plant Candyfloss Forest
 
STR_CONSTRUCT_BATTERY_FARM_TIP                                  :{BLACK}Fund Battery Farm
 
STR_CONSTRUCT_COLA_WELLS_TIP                                    :{BLACK}Drill for Cola
 
STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP                             :{BLACK}Fund Plastic Fountains
 
STR_CONSTRUCT_BUBBLE_GENERATOR_TIP                              :{BLACK}Construct Bubble Generator
 
STR_CONSTRUCT_TOFFEE_QUARRY_TIP                                 :{BLACK}Fund Toffee Quarry
 
STR_CONSTRUCT_SUGAR_MINE_TIP                                    :{BLACK}Construct Sugar Mine
 

	
 
STR_INDUSTRYDIR_CAPTION                                         :{WHITE}Industries
 
STR_INDUSTRYDIR_ITEM                                            :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% transported)
 
STR_INDUSTRYDIR_ITEM_TWO                                        :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}/{CARGO}){YELLOW} ({COMMA}%/{COMMA}% transported)
 
STR_INDUSTRYDIR_ITEM_NOPROD                                     :{ORANGE}{INDUSTRY}
 

	
 
STR_INDUSTRY_TOO_CLOSE                                          :{WHITE}...too close to another industry
 

	
 
STR_RAIL_REFIT_VEHICLE_TO_CARRY                                 :{BLACK}Refit train to carry a different cargo type
 
STR_RAIL_REFIT_VEHICLE                                          :{BLACK}Refit train
 
STR_RAIL_SELECT_TYPE_OF_CARGO_FOR                               :{BLACK}Select type of cargo for train to carry
 
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED                             :{BLACK}Refit train to carry highlighted cargo type
 
STR_RAIL_CAN_T_REFIT_VEHICLE                                    :{WHITE}Can't refit train...
 
STR_CONFIG_PATCHES_SERVINT_ISPERCENT                            :{LTBLUE}Service intervals are in percents: {ORANGE}{STRING1}
 
STR_CONFIG_GAME_PRODUCTION                                      :{WHITE}Change production
 

	
 
TEMP_AI_IN_PROGRESS                                             :{WHITE}Welcome to the new AI under development. If you encounter problems, take a screenshot and post it in the forum.
 
TEMP_AI_ACTIVATED                                               :{WHITE}Warning: this new AI is still alpha! Currently, only trucks and busses work!
 
TEMP_AI_MULTIPLAYER                                             :{WHITE}Warning: implementation is still experimental (using new AI).
 

	
 
############ network gui strings
 

	
 
STR_NETWORK_MULTIPLAYER                                         :{WHITE}Multiplayer
 

	
 
STR_NETWORK_PLAYER_NAME                                         :{BLACK}Player name:
 
STR_NETWORK_ENTER_NAME_TIP                                      :{BLACK}This is the name other players will identify you by
 
STR_NETWORK_CONNECTION                                          :{BLACK}Connection:
 
STR_NETWORK_CONNECTION_TIP                                      :{BLACK}Choose between an internet game or a Local Area Network (LAN) game
 

	
 
STR_NETWORK_START_SERVER                                        :{BLACK}Start server
 
STR_NETWORK_START_SERVER_TIP                                    :{BLACK}Start your own server
 

	
 
STR_NETWORK_GAME_NAME                                           :{BLACK}Name
 
STR_NETWORK_GAME_NAME_TIP                                       :{BLACK}Name of the game
 
STR_NETWORK_INFO_ICONS_TIP                                      :{BLACK}Language, server version, etc.
 
STR_NETWORK_CLICK_GAME_TO_SELECT                                :{BLACK}Click a game from the list to select it
 

	
 
STR_NETWORK_FIND_SERVER                                         :{BLACK}Find server
 
STR_NETWORK_FIND_SERVER_TIP                                     :{BLACK}Search network for a server
 
STR_NETWORK_ADD_SERVER                                          :{BLACK}Add server
 
STR_NETWORK_ADD_SERVER_TIP                                      :{BLACK}Adds a server to the list which will always be checked for running games.
 
STR_NETWORK_ENTER_IP                                            :{BLACK}Enter the address of the host
 

	
 
STR_NETWORK_GENERAL_ONLINE                                      :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
 
STR_NETWORK_CLIENTS_CAPTION                                     :{BLACK}Clients
 
STR_NETWORK_CLIENTS_CAPTION_TIP                                 :{BLACK}Clients online / clients max{}Companies online / companies max
 
STR_NETWORK_GAME_INFO                                           :{SILVER}GAME INFO
 
STR_ORANGE                                                      :{ORANGE}{STRING}
 
STR_NETWORK_CLIENTS                                             :{SILVER}Clients:  {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
 
STR_NETWORK_LANGUAGE                                            :{SILVER}Language:  {WHITE}{STRING}
 
STR_NETWORK_TILESET                                             :{SILVER}Tileset:  {WHITE}{STRING}
 
STR_NETWORK_MAP_SIZE                                            :{SILVER}Map size:  {WHITE}{COMMA}x{COMMA}
 
STR_NETWORK_SERVER_VERSION                                      :{SILVER}Server version:  {WHITE}{STRING}
 
STR_NETWORK_SERVER_ADDRESS                                      :{SILVER}Server address:  {WHITE}{STRING} : {NUM}
 
STR_NETWORK_START_DATE                                          :{SILVER}Start date:  {WHITE}{DATE_SHORT}
 
STR_NETWORK_CURRENT_DATE                                        :{SILVER}Current date:  {WHITE}{DATE_SHORT}
 
STR_NETWORK_PASSWORD                                            :{SILVER}Password protected!
 
STR_NETWORK_SERVER_OFFLINE                                      :{SILVER}SERVER OFFLINE
 
STR_NETWORK_SERVER_FULL                                         :{SILVER}SERVER FULL
 
STR_NETWORK_VERSION_MISMATCH                                    :{SILVER}VERSION MISMATCH
 
STR_NETWORK_GRF_MISMATCH                                        :{SILVER}NEWGRF MISMATCH
 

	
 
STR_NETWORK_JOIN_GAME                                           :{BLACK}Join game
 

	
 

	
 
STR_NETWORK_START_GAME_WINDOW                                   :{WHITE}Start new multiplayer game
 

	
 
STR_NETWORK_NEW_GAME_NAME                                       :{BLACK}Game name:
 
STR_NETWORK_NEW_GAME_NAME_TIP                                   :{BLACK}The game name will be displayed to other players in the multiplayer game selection menu
 
STR_NETWORK_SET_PASSWORD                                        :{BLACK}Set password
 
STR_NETWORK_PASSWORD_TIP                                        :{BLACK}Protect your game with a password if you don't want it to be publicly accessible
 
STR_NETWORK_SELECT_MAP                                          :{BLACK}Select a map:
 
STR_NETWORK_SELECT_MAP_TIP                                      :{BLACK}Which map do you want to play?
 
STR_NETWORK_LAN_INTERNET_COMBO                                  :{BLACK}{SKIP}{STRING}
 
STR_NETWORK_LAN                                                 :LAN
 
STR_NETWORK_INTERNET                                            :Internet
 
STR_NETWORK_LAN_INTERNET                                        :LAN / Internet
 
STR_NETWORK_INTERNET_ADVERTISE                                  :Internet (advertise)
 
STR_NETWORK_CLIENTS_SELECT                                      :{BLACK}{SKIP}{SKIP}{NUM} client{P "" s}
 
STR_NETWORK_NUMBER_OF_CLIENTS                                   :{BLACK}Max clients:
 
STR_NETWORK_NUMBER_OF_CLIENTS_TIP                               :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
 
STR_NETWORK_COMPANIES_SELECT                                    :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P y ies}
 
STR_NETWORK_NUMBER_OF_COMPANIES                                 :{BLACK}Max companies:
 
STR_NETWORK_NUMBER_OF_COMPANIES_TIP                             :{BLACK}Limit the server to a certain amount of companies
 
STR_NETWORK_SPECTATORS_SELECT                                   :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spectator{P "" s}
 
STR_NETWORK_NUMBER_OF_SPECTATORS                                :{BLACK}Max spectators:
 
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP                            :{BLACK}Limit the server to a certain amount of spectators
 
STR_NETWORK_LANGUAGE_SPOKEN                                     :{BLACK}Language spoken:
 
STR_NETWORK_LANGUAGE_TIP                                        :{BLACK}Other players will know which language is spoken on the server
 
STR_NETWORK_LANGUAGE_COMBO                                      :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
 
STR_NETWORK_START_GAME                                          :{BLACK}Start Game
 
STR_NETWORK_START_GAME_TIP                                      :{BLACK}Start a new network game from a random map, or scenario
 
STR_NETWORK_LOAD_GAME                                           :{BLACK}Load Game
 
STR_NETWORK_LOAD_GAME_TIP                                       :{BLACK}Resume an earlier saved multiplayer game (be sure to connect as the correct player)
 

	
 
############ Leave those lines in this order!!
 
STR_NETWORK_LANG_ANY                                            :Any
 
STR_NETWORK_LANG_ENGLISH                                        :English
 
STR_NETWORK_LANG_GERMAN                                         :German
 
STR_NETWORK_LANG_FRENCH                                         :French
 
STR_NETWORK_LANG_BRAZILIAN                                      :Brazilian
 
STR_NETWORK_LANG_BULGARIAN                                      :Bulgarian
 
STR_NETWORK_LANG_CHINESE                                        :Chinese
 
STR_NETWORK_LANG_CZECH                                          :Czech
 
STR_NETWORK_LANG_DANISH                                         :Danish
 
STR_NETWORK_LANG_DUTCH                                          :Dutch
 
STR_NETWORK_LANG_ESPERANTO                                      :Esperanto
 
STR_NETWORK_LANG_FINNISH                                        :Finnish
 
STR_NETWORK_LANG_HUNGARIAN                                      :Hungarian
 
STR_NETWORK_LANG_ICELANDIC                                      :Icelandic
 
STR_NETWORK_LANG_ITALIAN                                        :Italian
 
STR_NETWORK_LANG_JAPANESE                                       :Japanese
 
STR_NETWORK_LANG_KOREAN                                         :Korean
 
STR_NETWORK_LANG_LITHUANIAN                                     :Lithuanian
 
STR_NETWORK_LANG_NORWEGIAN                                      :Norwegian
 
STR_NETWORK_LANG_POLISH                                         :Polish
 
STR_NETWORK_LANG_PORTUGUESE                                     :Portuguese
 
STR_NETWORK_LANG_ROMANIAN                                       :Romanian
 
STR_NETWORK_LANG_RUSSIAN                                        :Russian
 
STR_NETWORK_LANG_SLOVAK                                         :Slovak
 
STR_NETWORK_LANG_SLOVENIAN                                      :Slovenian
 
STR_NETWORK_LANG_SPANISH                                        :Spanish
 
STR_NETWORK_LANG_SWEDISH                                        :Swedish
 
STR_NETWORK_LANG_TURKISH                                        :Turkish
 
STR_NETWORK_LANG_UKRAINIAN                                      :Ukrainian
 
############ End of leave-in-this-order
 

	
 
STR_NETWORK_GAME_LOBBY                                          :{WHITE}Multiplayer game lobby
 

	
 
STR_NETWORK_PREPARE_TO_JOIN                                     :{BLACK}Preparing to join:   {ORANGE}{STRING}
 
STR_NETWORK_COMPANY_LIST_TIP                                    :{BLACK}A list of all companies currently in this game. You can either join one or start a new one if there is a free company slot
 
STR_NETWORK_NEW_COMPANY                                         :{BLACK}New company
 
STR_NETWORK_NEW_COMPANY_TIP                                     :{BLACK}Create a new company
 
STR_NETWORK_SPECTATE_GAME                                       :{BLACK}Spectate game
 
STR_NETWORK_SPECTATE_GAME_TIP                                   :{BLACK}Watch the game as a spectator
 
STR_NETWORK_JOIN_COMPANY                                        :{BLACK}Join company
 
STR_NETWORK_JOIN_COMPANY_TIP                                    :{BLACK}Help manage this company
 
STR_NETWORK_REFRESH                                             :{BLACK}Refresh server
 
STR_NETWORK_REFRESH_TIP                                         :{BLACK}Refresh the server info
 

	
 
STR_NETWORK_COMPANY_INFO                                        :{SILVER}COMPANY INFO
 

	
 
STR_NETWORK_COMPANY_NAME                                        :{SILVER}Company name:  {WHITE}{STRING}
 
STR_NETWORK_INAUGURATION_YEAR                                   :{SILVER}Inauguration:  {WHITE}{NUM}
 
STR_NETWORK_VALUE                                               :{SILVER}Company value:  {WHITE}{CURRENCY}
 
STR_NETWORK_CURRENT_BALANCE                                     :{SILVER}Current balance:  {WHITE}{CURRENCY}
 
STR_NETWORK_LAST_YEARS_INCOME                                   :{SILVER}Last year's income:  {WHITE}{CURRENCY}
 
STR_NETWORK_PERFORMANCE                                         :{SILVER}Performance:  {WHITE}{NUM}
 

	
 
STR_NETWORK_VEHICLES                                            :{SILVER}Vehicles:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
 
STR_NETWORK_STATIONS                                            :{SILVER}Stations:  {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
 
STR_NETWORK_PLAYERS                                             :{SILVER}Players:  {WHITE}{STRING}
 

	
 
STR_NETWORK_CONNECTING                                          :{WHITE}Connecting...
 

	
 
############ Leave those lines in this order!!
 
STR_NETWORK_CONNECTING_1                                        :{BLACK}(1/6) Connecting..
 
STR_NETWORK_CONNECTING_2                                        :{BLACK}(2/6) Authorising..
 
STR_NETWORK_CONNECTING_3                                        :{BLACK}(3/6) Waiting..
 
STR_NETWORK_CONNECTING_4                                        :{BLACK}(4/6) Downloading map..
 
STR_NETWORK_CONNECTING_5                                        :{BLACK}(5/6) Processing data..
 
STR_NETWORK_CONNECTING_6                                        :{BLACK}(6/6) Registering..
 

	
 
STR_NETWORK_CONNECTING_SPECIAL_1                                :{BLACK}Fetching game info..
 
STR_NETWORK_CONNECTING_SPECIAL_2                                :{BLACK}Fetching company info..
 
############ End of leave-in-this-order
 
STR_NETWORK_CONNECTING_WAITING                                  :{BLACK}{NUM} client{P "" s} in front of you
 
STR_NETWORK_CONNECTING_DOWNLOADING                              :{BLACK}{NUM} / {NUM} kbytes downloaded so far
 

	
 
STR_NETWORK_DISCONNECT                                          :{BLACK}Disconnect
 

	
 
STR_NETWORK_GIVE_MONEY_CAPTION                                  :{WHITE}Enter the amount of money you want to give
 
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION                          :{WHITE}Server is protected. Enter password
 
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION                       :{WHITE}Company is protected. Enter password
 
STR_NETWORK_CLIENT_LIST                                         :{WHITE}Client List
 

	
 
STR_NETWORK_ERR_NOTAVAILABLE                                    :{WHITE} No network devices found or compiled without ENABLE_NETWORK
 
STR_NETWORK_ERR_NOSERVER                                        :{WHITE} Could not find any network games
 
STR_NETWORK_ERR_NOCONNECTION                                    :{WHITE} The server didn't answer the request
 
STR_NETWORK_ERR_NEWGRF_MISMATCH                                 :{WHITE} Could not connect due to NewGRF mismatch
 
STR_NETWORK_ERR_DESYNC                                          :{WHITE} Network-Game synchronisation failed
 
STR_NETWORK_ERR_LOSTCONNECTION                                  :{WHITE} Network-Game connection lost
 
STR_NETWORK_ERR_SAVEGAMEERROR                                   :{WHITE} Could not load savegame
 
STR_NETWORK_ERR_SERVER_START                                    :{WHITE} Could not start the server
 
STR_NETWORK_ERR_CLIENT_START                                    :{WHITE} Could not connect
 
STR_NETWORK_ERR_TIMEOUT                                         :{WHITE} Connection #{NUM} timed out
 
STR_NETWORK_ERR_SERVER_ERROR                                    :{WHITE} A protocol-error was made and the connection was closed
 
STR_NETWORK_ERR_WRONG_REVISION                                  :{WHITE} The revision of this client does not match the server's revision
 
STR_NETWORK_ERR_WRONG_PASSWORD                                  :{WHITE} Wrong password
 
STR_NETWORK_ERR_SERVER_FULL                                     :{WHITE} The server is full
 
STR_NETWORK_ERR_SERVER_BANNED                                   :{WHITE} You are banned from this server
 
STR_NETWORK_ERR_KICKED                                          :{WHITE} You were kicked out of the game
 
STR_NETWORK_ERR_CHEATER                                         :{WHITE} Cheating is not allowed on this server
 

	
 
STR_NETWORK_ERR_LEFT                                            :has left the game
 
############ Leave those lines in this order!!
 
STR_NETWORK_ERR_CLIENT_GENERAL                                  :general error
 
STR_NETWORK_ERR_CLIENT_DESYNC                                   :desync error
 
STR_NETWORK_ERR_CLIENT_SAVEGAME                                 :could not load map
 
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST                          :connection lost
 
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR                           :protocol error
 
STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH                          :NewGRF mismatch
 
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED                           :not authorized
 
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED                             :received strange packet
 
STR_NETWORK_ERR_CLIENT_WRONG_REVISION                           :wrong revision
 
STR_NETWORK_ERR_CLIENT_NAME_IN_USE                              :name already in use
 
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD                           :wrong password
 
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH                          :wrong player-id in DoCommand
 
STR_NETWORK_ERR_CLIENT_KICKED                                   :kicked by server
 
STR_NETWORK_ERR_CLIENT_CHEATER                                  :was trying to use a cheat
 
STR_NETWORK_ERR_CLIENT_SERVER_FULL                              :server full
 
############ End of leave-in-this-order
 
STR_NETWORK_CLIENT_JOINED                                       :has joined the game
 
STR_NETWORK_GIVE_MONEY                                          :gave your company some money ({CURRENCY})
 
STR_NETWORK_GAVE_MONEY_AWAY                                     :you gave {STRING} some money ({CURRENCY})
 
STR_NETWORK_CHAT_COMPANY_CAPTION                                :[Team] :
 
STR_NETWORK_CHAT_COMPANY                                        :[Team] {STRING}: {GRAY}{STRING}
 
STR_NETWORK_CHAT_TO_COMPANY                                     :[Team] To {STRING}: {GRAY}{STRING}
 
STR_NETWORK_CHAT_CLIENT_CAPTION                                 :[Private] :
 
STR_NETWORK_CHAT_CLIENT                                         :[Private] {STRING}: {GRAY}{STRING}
 
STR_NETWORK_CHAT_TO_CLIENT                                      :[Private] To {STRING}: {GRAY}{STRING}
 
STR_NETWORK_CHAT_ALL_CAPTION                                    :[All] :
 
STR_NETWORK_CHAT_ALL                                            :[All] {STRING}: {GRAY}{STRING}
 
STR_NETWORK_NAME_CHANGE                                         :has changed his/her name to
 
STR_NETWORK_SERVER_SHUTDOWN                                     :{WHITE} The server closed the session
 
STR_NETWORK_SERVER_REBOOT                                       :{WHITE} The server is restarting...{}Please wait...
 

	
 
STR_NETWORK_SERVER                                              :Server
 
STR_NETWORK_CLIENT                                              :Client
 
STR_NETWORK_SPECTATORS                                          :Spectators
 

	
 
STR_NETWORK_CLIENTLIST_NONE                                     :(none)
 
STR_NETWORK_CLIENTLIST_KICK                                     :Kick
 
STR_NETWORK_CLIENTLIST_GIVE_MONEY                               :Give money
 
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL                             :Speak to all
 
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY                         :Speak to company
 
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT                          :Private message
 

	
 

	
 
STR_NETWORK_SEND                                                :{BLACK}Send
 

	
 
############ end network gui strings
 

	
 

	
 
STR_CONFIG_PATCHES_MAP_X                                        :{LTBLUE}X-size of map: {ORANGE}{STRING1}
 
STR_CONFIG_PATCHES_MAP_Y                                        :{LTBLUE}Y-size of map: {ORANGE}{STRING1}
 

	
 

	
 
##### PNG-MAP-Loader
 

	
 
STR_PNGMAP_ERROR                                                :{WHITE}Cannot load landscape from PNG...
 
STR_PNGMAP_ERR_FILE_NOT_FOUND                                   :{WHITE}...file not found.
 
STR_PNGMAP_ERR_IMAGE_TYPE                                       :{WHITE}...could not convert image type. 8 or 24-bit PNG image needed.
 
STR_PNGMAP_ERR_MISC                                             :{WHITE}...something just went wrong. Sorry. (probably corrupted file)
 

	
 
STR_BMPMAP_ERROR                                                :{WHITE}Cannot load landscape from BMP...
 
STR_BMPMAP_ERR_IMAGE_TYPE                                       :{WHITE}...could not convert image type.
 

	
 
##id 0x0800
 
STR_0800_COST                                                   :{TINYFONT}{RED}Cost: {CURRENCY}
 
STR_0801_COST                                                   :{RED}Cost: {CURRENCY}
 
STR_0802_INCOME                                                 :{TINYFONT}{GREEN}Income: {CURRENCY}
 
STR_0803_INCOME                                                 :{GREEN}Income: {CURRENCY}
 
STR_FEEDER_TINY                                                 :{TINYFONT}{YELLOW}Transfer: {CURRENCY}
 
STR_FEEDER                                                      :{YELLOW}Transfer: {CURRENCY}
 
STR_0805_ESTIMATED_COST                                         :{WHITE}Estimated Cost: {CURRENCY}
 
STR_0807_ESTIMATED_INCOME                                       :{WHITE}Estimated Income: {CURRENCY}
 
STR_0808_CAN_T_RAISE_LAND_HERE                                  :{WHITE}Can't raise land here...
 
STR_0809_CAN_T_LOWER_LAND_HERE                                  :{WHITE}Can't lower land here...
 
STR_080A_ROCKS                                                  :Rocks
 
STR_080B_ROUGH_LAND                                             :Rough land
 
STR_080C_BARE_LAND                                              :Bare land
 
STR_080D_GRASS                                                  :Grass
 
STR_080E_FIELDS                                                 :Fields
 
STR_080F_SNOW_COVERED_LAND                                      :Snow-covered land
 
STR_0810_DESERT                                                 :Desert
 

	
 
##id 0x1000
 
STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION                         :{WHITE}Land sloped in wrong direction
 
STR_1001_IMPOSSIBLE_TRACK_COMBINATION                           :{WHITE}Impossible track combination
 
STR_1002_EXCAVATION_WOULD_DAMAGE                                :{WHITE}Excavation would damage tunnel
 
STR_1003_ALREADY_AT_SEA_LEVEL                                   :{WHITE}Already at sea-level
 
STR_1004_TOO_HIGH                                               :{WHITE}Too high
 
STR_1005_NO_SUITABLE_RAILROAD_TRACK                             :{WHITE}No suitable railway track
 
STR_1007_ALREADY_BUILT                                          :{WHITE}...already built
 
STR_1008_MUST_REMOVE_RAILROAD_TRACK                             :{WHITE}Must remove railway track first
 
STR_100A_RAILROAD_CONSTRUCTION                                  :{WHITE}Railway Construction
 
STR_TITLE_ELRAIL_CONSTRUCTION                                   :{WHITE}Electrified Railway Construction
 
STR_100B_MONORAIL_CONSTRUCTION                                  :{WHITE}Monorail Construction
 
STR_100C_MAGLEV_CONSTRUCTION                                    :{WHITE}MagLev Construction
 
STR_100D_SELECT_RAIL_BRIDGE                                     :{WHITE}Select Rail Bridge
 
STR_100E_CAN_T_BUILD_TRAIN_DEPOT                                :{WHITE}Can't build train depot here...
 
STR_100F_CAN_T_BUILD_RAILROAD_STATION                           :{WHITE}Can't build railway station here...
 
STR_1010_CAN_T_BUILD_SIGNALS_HERE                               :{WHITE}Can't build signals here...
 
STR_1011_CAN_T_BUILD_RAILROAD_TRACK                             :{WHITE}Can't build railway track here...
 
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK                            :{WHITE}Can't remove railway track from here...
 
STR_1013_CAN_T_REMOVE_SIGNALS_FROM                              :{WHITE}Can't remove signals from here...
 
STR_1014_TRAIN_DEPOT_ORIENTATION                                :{WHITE}Train Depot Orientation
 
STR_1015_RAILROAD_CONSTRUCTION                                  :Railway construction
 
STR_TOOLB_ELRAIL_CONSTRUCTION                                   :Electrified Railway construction
 
STR_1016_MONORAIL_CONSTRUCTION                                  :Monorail construction
 
STR_1017_MAGLEV_CONSTRUCTION                                    :MagLev construction
 
STR_1018_BUILD_RAILROAD_TRACK                                   :{BLACK}Build railway track
 
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING                         :{BLACK}Build train depot (for building and servicing trains)
 
STR_101A_BUILD_RAILROAD_STATION                                 :{BLACK}Build railway station
 
STR_101B_BUILD_RAILROAD_SIGNALS                                 :{BLACK}Build railway signals
 
STR_101C_BUILD_RAILROAD_BRIDGE                                  :{BLACK}Build railway bridge
 
STR_101D_BUILD_RAILROAD_TUNNEL                                  :{BLACK}Build railway tunnel
 
STR_101E_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Toggle build/remove for railway track and signals
 
STR_101F_BRIDGE_SELECTION_CLICK                                 :{BLACK}Bridge selection - click on your prefered bridge to build it
 
STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO                       :{BLACK}Select railway depot orientation
 
STR_1021_RAILROAD_TRACK                                         :Railway track
 
STR_1023_RAILROAD_TRAIN_DEPOT                                   :Railway train depot
 
STR_1024_AREA_IS_OWNED_BY_ANOTHER                               :{WHITE}...area is owned by another company
 
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS                          :Railway track with normal signals
 
STR_RAILROAD_TRACK_WITH_PRESIGNALS                              :Railway track with pre-signals
 
STR_RAILROAD_TRACK_WITH_EXITSIGNALS                             :Railway track with exit-signals
 
STR_RAILROAD_TRACK_WITH_COMBOSIGNALS                            :Railway track with combo-signals
 
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS                       :Railway track with normal and pre-signals
 
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS                      :Railway track with normal and exit-signals
 
STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS                     :Railway track with normal and combo-signals
 
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS                         :Railway track with pre- and exit-signals
 
STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS                        :Railway track with pre- and combo-signals
 
STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS                       :Railway track with exit- and combo-signals
 
STR_MUST_REMOVE_RAILWAY_STATION_FIRST                           :{WHITE}Must remove railway station first
 

	
 

	
 

	
 
##id 0x1800
 
STR_1801_MUST_REMOVE_ROAD_FIRST                                 :{WHITE}Must remove road first
 
STR_ROAD_WORKS_IN_PROGRESS                                      :{WHITE}Road works in progress
 
STR_1802_ROAD_CONSTRUCTION                                      :{WHITE}Road Construction
 
STR_1802_TRAMWAY_CONSTRUCTION                                   :{WHITE}Tramway Construction
 
STR_1803_SELECT_ROAD_BRIDGE                                     :{WHITE}Select Road Bridge
 
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION                        :{WHITE}... one way roads can't have junctions
 
STR_1804_CAN_T_BUILD_ROAD_HERE                                  :{WHITE}Can't build road here...
 
STR_1804_CAN_T_BUILD_TRAMWAY_HERE                               :{WHITE}Can't build tramway here...
 
STR_1805_CAN_T_REMOVE_ROAD_FROM                                 :{WHITE}Can't remove road from here...
 
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM                              :{WHITE}Can't remove tramway from here...
 
STR_1806_ROAD_DEPOT_ORIENTATION                                 :{WHITE}Road Depot Orientation
 
STR_1806_TRAM_DEPOT_ORIENTATION                                 :{WHITE}Tram Depot Orientation
 
STR_1807_CAN_T_BUILD_ROAD_VEHICLE                               :{WHITE}Can't build road vehicle depot here...
 
STR_1807_CAN_T_BUILD_TRAM_VEHICLE                               :{WHITE}Can't build tram vehicle depot here...
 
STR_1808_CAN_T_BUILD_BUS_STATION                                :{WHITE}Can't build bus station...
 
STR_1809_CAN_T_BUILD_TRUCK_STATION                              :{WHITE}Can't build lorry station...
 
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION                     :{WHITE}Can't build passenger tram station...
 
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION                         :{WHITE}Can't build freight tram station...
 
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
 
STR_180E_BUILD_TRUCK_LOADING_BAY                                :{BLACK}Build lorry loading bay
 
STR_180D_BUILD_PASSENGER_TRAM_STATION                           :{BLACK}Build passenger tram station
 
STR_180E_BUILD_CARGO_TRAM_STATION                               :{BLACK}Build freight tram station
 
STR_180F_BUILD_ROAD_BRIDGE                                      :{BLACK}Build road bridge
 
STR_180F_BUILD_TRAMWAY_BRIDGE                                   :{BLACK}Build tramway bridge
 
STR_1810_BUILD_ROAD_TUNNEL                                      :{BLACK}Build road tunnel
 
STR_1810_BUILD_TRAMWAY_TUNNEL                                   :{BLACK}Build tramway tunnel
 
STR_TOGGLE_ONE_WAY_ROAD                                         :{BLACK}Activate/Deactivate one way roads
 
STR_1811_TOGGLE_BUILD_REMOVE_FOR                                :{BLACK}Toggle build/remove for road construction
 
STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS                       :{BLACK}Toggle build/remove for tramway construction
 
STR_1813_SELECT_ROAD_VEHICLE_DEPOT                              :{BLACK}Select road vehicle depot orientation
 
STR_1813_SELECT_TRAM_VEHICLE_DEPOT                              :{BLACK}Select tram vehicle depot orientation
 
STR_1814_ROAD                                                   :Road
 
STR_1815_ROAD_WITH_STREETLIGHTS                                 :Road with streetlights
 
STR_1816_TREE_LINED_ROAD                                        :Tree-lined road
 
STR_1817_ROAD_VEHICLE_DEPOT                                     :Road vehicle depot
 
STR_1818_ROAD_RAIL_LEVEL_CROSSING                               :Road/rail level crossing
 
STR_CAN_T_REMOVE_BUS_STATION                                    :{WHITE}Can't remove bus station...
 
STR_CAN_T_REMOVE_TRUCK_STATION                                  :{WHITE}Can't remove lorry station...
 
STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION                         :{WHITE}Can't remove passenger tram station...
 
STR_CAN_T_REMOVE_CARGO_TRAM_STATION                             :{WHITE}Can't remove freight tram station...
 

	
 
##id 0x2000
 
STR_2000_TOWNS                                                  :{WHITE}Towns
 
STR_TOWN_LABEL_POP                                              :{WHITE}{TOWN} ({COMMA})
 
STR_TOWN_LABEL                                                  :{WHITE}{TOWN}
 
STR_TOWN_LABEL_TINY_BLACK                                       :{TINYFONT}{BLACK}{TOWN}
 
STR_TOWN_LABEL_TINY_WHITE                                       :{TINYFONT}{WHITE}{TOWN}
 
STR_2002                                                        :{TINYFONT}{BLACK}{SIGN}
 
STR_2004_BUILDING_MUST_BE_DEMOLISHED                            :{WHITE}Building must be demolished first
 
STR_2005                                                        :{WHITE}{TOWN}
 
STR_2006_POPULATION                                             :{BLACK}Population: {ORANGE}{COMMA}{BLACK}  Houses: {ORANGE}{COMMA}
 
STR_2007_RENAME_TOWN                                            :Rename Town
 
STR_2008_CAN_T_RENAME_TOWN                                      :{WHITE}Can't rename town...
 
STR_2009_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} local authority refuses to allow this
 
STR_200A_TOWN_NAMES_CLICK_ON_NAME                               :{BLACK}Town names - click on name to centre view on town
 
STR_200B_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centre the main view on town location
 
STR_200C_CHANGE_TOWN_NAME                                       :{BLACK}Change town name
 
STR_200D_PASSENGERS_LAST_MONTH_MAX                              :{BLACK}Passengers last month: {ORANGE}{COMMA}{BLACK}  max: {ORANGE}{COMMA}
 
STR_200E_MAIL_LAST_MONTH_MAX                                    :{BLACK}Mail last month: {ORANGE}{COMMA}{BLACK}  max: {ORANGE}{COMMA}
 
STR_200F_TALL_OFFICE_BLOCK                                      :Tall office block
 
STR_2010_OFFICE_BLOCK                                           :Office block
 
STR_2011_SMALL_BLOCK_OF_FLATS                                   :Small block of flats
 
STR_2012_CHURCH                                                 :Church
 
STR_2013_LARGE_OFFICE_BLOCK                                     :Large office block
 
STR_2014_TOWN_HOUSES                                            :Town houses
 
STR_2015_HOTEL                                                  :Hotel
 
STR_2016_STATUE                                                 :Statue
 
STR_2017_FOUNTAIN                                               :Fountain
 
STR_2018_PARK                                                   :Park
 
STR_2019_OFFICE_BLOCK                                           :Office block
 
STR_201A_SHOPS_AND_OFFICES                                      :Shops and offices
 
STR_201B_MODERN_OFFICE_BUILDING                                 :Modern office building
 
STR_201C_WAREHOUSE                                              :Warehouse
 
STR_201D_OFFICE_BLOCK                                           :Office block
 
STR_201E_STADIUM                                                :Stadium
 
STR_201F_OLD_HOUSES                                             :Old houses
 
STR_2020_LOCAL_AUTHORITY                                        :{BLACK}Local authority
 
STR_2021_SHOW_INFORMATION_ON_LOCAL                              :{BLACK}Show information on local authority
 
STR_2022_LOCAL_AUTHORITY                                        :{WHITE}{TOWN} local authority
 
STR_2023_TRANSPORT_COMPANY_RATINGS                              :{BLACK}Transport company ratings:
 
STR_2024                                                        :{YELLOW}{COMPANY} {COMPANYNUM}: {ORANGE}{STRING}
 
STR_2025_SUBSIDIES                                              :{WHITE}Subsidies
 
STR_2026_SUBSIDIES_ON_OFFER_FOR                                 :{BLACK}Subsidies on offer for services taking:
 
STR_2027_FROM_TO                                                :{ORANGE}{STRING} from {STRING2} to {STRING2}
 
STR_2028_BY                                                     :{YELLOW} (by {DATE_SHORT})
 
STR_202A_NONE                                                   :{ORANGE}None
 
STR_202B_SERVICES_ALREADY_SUBSIDISED                            :{BLACK}Services already subsidised:
 
STR_202C_FROM_TO                                                :{ORANGE}{STRING} from {STATION} to {STATION}{YELLOW} ({COMPANY}
 
STR_202D_UNTIL                                                  :{YELLOW}, until {DATE_SHORT})
 
STR_202E_OFFER_OF_SUBSIDY_EXPIRED                               :{BLACK}{BIGFONT}Offer of subsidy expired:{}{}{STRING} from {STRING2} to {STRING2} will now not attract a subsidy.
 
STR_202F_SUBSIDY_WITHDRAWN_SERVICE                              :{BLACK}{BIGFONT}Subsidy withdrawn:{}{}{STRING} service from {STATION} to {STATION} is no longer subsidised.
 
STR_2030_SERVICE_SUBSIDY_OFFERED                                :{BLACK}{BIGFONT}Service subsidy offered:{}{}First {STRING} service from {STRING2} to {STRING2} will attract a year's subsidy from the local authority!
 
STR_2031_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Service subsidy awarded to {COMPANY}!{}{}{STRING} service from {STATION} to {STATION} will pay 50% extra for the next year!
 
STR_2032_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Service subsidy awarded to {COMPANY}!{}{}{STRING} service from {STATION} to {STATION} will pay double rates for the next year!
 
STR_2033_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Service subsidy awarded to {COMPANY}!{}{}{STRING} service from {STATION} to {STATION} will pay triple rates for the next year!
 
STR_2034_SERVICE_SUBSIDY_AWARDED                                :{BLACK}{BIGFONT}Service subsidy awarded to {COMPANY}!{}{}{STRING} service from {STATION} to {STATION} will pay quadruple rates for the next year!
 
STR_2035_LOCAL_AUTHORITY_REFUSES                                :{WHITE}{TOWN} local authority refuses to allow another airport to be built in this town
 
STR_2036_COTTAGES                                               :Cottages
 
STR_2037_HOUSES                                                 :Houses
 
STR_2038_FLATS                                                  :Flats
 
STR_2039_TALL_OFFICE_BLOCK                                      :Tall office block
 
STR_203A_SHOPS_AND_OFFICES                                      :Shops and offices
 
STR_203B_SHOPS_AND_OFFICES                                      :Shops and offices
 
STR_203C_THEATER                                                :Theatre
 
STR_203D_STADIUM                                                :Stadium
 
STR_203E_OFFICES                                                :Offices
 
STR_203F_HOUSES                                                 :Houses
 
STR_2040_CINEMA                                                 :Cinema
 
STR_2041_SHOPPING_MALL                                          :Shopping mall
 
STR_2042_DO_IT                                                  :{BLACK}Do it
 
STR_2043_LIST_OF_THINGS_TO_DO_AT                                :{BLACK}List of things to do at this town - click on item for more details
 
STR_2044_CARRY_OUT_THE_HIGHLIGHTED                              :{BLACK}Carry out the highlighted action in the list above
 
STR_2045_ACTIONS_AVAILABLE                                      :{BLACK}Actions available:
 
STR_2046_SMALL_ADVERTISING_CAMPAIGN                             :Small advertising campaign
 
STR_2047_MEDIUM_ADVERTISING_CAMPAIGN                            :Medium advertising campaign
 
STR_2048_LARGE_ADVERTISING_CAMPAIGN                             :Large advertising campaign
 
STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION                         :Fund local road reconstruction
 
STR_204A_BUILD_STATUE_OF_COMPANY                                :Build statue of company owner
 
STR_204B_FUND_NEW_BUILDINGS                                     :Fund new buildings
 
STR_204C_BUY_EXCLUSIVE_TRANSPORT                                :Buy exclusive transport rights
 
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY                              :Bribe the local authority
 
STR_204D_INITIATE_A_SMALL_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiate a small local advertising campaign, to attract more passengers and cargo to your transport services.{}  Cost: {CURRENCY}
 
STR_204E_INITIATE_A_MEDIUM_LOCAL                                :{WHITE}{STRING}{}{YELLOW} Initiate a medium local advertising campaign, to attract more passengers and cargo to your transport services.{}  Cost: {CURRENCY}
 
STR_204F_INITIATE_A_LARGE_LOCAL                                 :{WHITE}{STRING}{}{YELLOW} Initiate a large local advertising campaign, to attract more passengers and cargo to your transport services.{}  Cost: {CURRENCY}
 
STR_2050_FUND_THE_RECONSTRUCTION                                :{WHITE}{STRING}{}{YELLOW} Fund the reconstruction of the urban road network. Causes considerable disruption to road traffic for up to 6 months.{}  Cost: {CURRENCY}
 
STR_2051_BUILD_A_STATUE_IN_HONOR                                :{WHITE}{STRING}{}{YELLOW} Build a statue in honour of your company.{} Cost: {CURRENCY}
 
STR_2052_FUND_THE_CONSTRUCTION_OF                               :{WHITE}{STRING}{}{YELLOW} Fund the construction of new commercial buildings in the town.{}  Cost: {CURRENCY}
 
STR_2053_BUY_1_YEAR_S_EXCLUSIVE                                 :{WHITE}{STRING}{}{YELLOW} Buy 1 year's exclusive transport rights in town. Town authority will only allow passengers and cargo to use your company's stations.{} Cost: {CURRENCY}
 
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC                         :{WHITE}{STRING}{}{YELLOW} Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}  Cost: {CURRENCY}
 
STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING                       :{BIGFONT}{BLACK}Traffic chaos in {TOWN}!{}{}Road rebuilding programme funded by {COMPANY} brings 6 months of misery to motorists!
 
STR_2056                                                        :{TINYFONT}{WHITE}{TOWN}
 
STR_2057                                                        :{ORANGE}{TOWN}{BLACK} ({COMMA})
 
STR_2058_UNDER_CONSTRUCTION                                     :{STRING} (under construction)
 
STR_2059_IGLOO                                                  :Igloo
 
STR_205A_TEPEES                                                 :Tepees
 
STR_205B_TEAPOT_HOUSE                                           :Teapot-House
 
STR_205C_PIGGY_BANK                                             :Piggy-Bank
 

	
 
STR_INDUSTRY                                                    :{INDUSTRY}
 
STR_TOWN                                                        :{TOWN}
 
STR_INDUSTRY_FORMAT                                             :{TOWN} {STRING}
 
STR_STATION                                                     :{STATION}
 

	
 
##id 0x2800
 
STR_LANDSCAPING                                                 :Landscaping
 
STR_2800_PLANT_TREES                                            :Plant trees
 
STR_2801_PLACE_SIGN                                             :Place sign
 
STR_2802_TREES                                                  :{WHITE}Trees
 
STR_2803_TREE_ALREADY_HERE                                      :{WHITE}...tree already here
 
STR_2804_SITE_UNSUITABLE                                        :{WHITE}...site unsuitable
 
STR_2805_CAN_T_PLANT_TREE_HERE                                  :{WHITE}Can't plant tree here...
 
STR_2806                                                        :{WHITE}{SIGN}
 
STR_2808_TOO_MANY_SIGNS                                         :{WHITE}...too many signs
 
STR_2809_CAN_T_PLACE_SIGN_HERE                                  :{WHITE}Can't place sign here...
 
STR_280A_SIGN                                                   :Sign
 
STR_280B_EDIT_SIGN_TEXT                                         :{WHITE}Edit sign text
 
STR_280C_CAN_T_CHANGE_SIGN_NAME                                 :{WHITE}Can't change sign name...
 
STR_280D_SELECT_TREE_TYPE_TO_PLANT                              :{BLACK}Select tree type to plant
 
STR_280E_TREES                                                  :Trees
 
STR_280F_RAINFOREST                                             :Rainforest
 
STR_2810_CACTUS_PLANTS                                          :Cactus Plants
 

	
 
##id 0x3000
 
STR_3000_RAIL_STATION_SELECTION                                 :{WHITE}Rail Station Selection
 
STR_3001_AIRPORT_SELECTION                                      :{WHITE}Airport Selection
 
STR_3002_ORIENTATION                                            :{BLACK}Orientation
 
STR_3003_NUMBER_OF_TRACKS                                       :{BLACK}Number of tracks
 
STR_3004_PLATFORM_LENGTH                                        :{BLACK}Platform length
 
STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD                          :{WHITE}Too close to another railway station
 
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING                         :{WHITE}Adjoins more than one existing station/loading area
 
STR_3007_TOO_MANY_STATIONS_LOADING                              :{WHITE}Too many stations/loading areas in this town
 
STR_3008_TOO_MANY_STATIONS_LOADING                              :{WHITE}Too many stations/loading areas
 
STR_3008A_TOO_MANY_BUS_STOPS                                    :{WHITE}Too many bus stops
 
STR_3008B_TOO_MANY_TRUCK_STOPS                                  :{WHITE}Too many lorry stations
 
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION                           :{WHITE}Too close to another station/loading area
 
STR_300A_0                                                      :{WHITE}{STATION} {STATIONFEATURES}
 
STR_300B_MUST_DEMOLISH_RAILROAD                                 :{WHITE}Must demolish railway station first
 
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT                           :{WHITE}Too close to another airport
 
STR_300E_MUST_DEMOLISH_AIRPORT_FIRST                            :{WHITE}Must demolish airport first
 

	
 
STR_3030_RENAME_STATION_LOADING                                 :Rename station/loading area
 
STR_3031_CAN_T_RENAME_STATION                                   :{WHITE}Can't rename station...
 
STR_3032_RATINGS                                                :{BLACK}Ratings
 
STR_3033_ACCEPTS                                                :{BLACK}Accepts
 
STR_3034_LOCAL_RATING_OF_TRANSPORT                              :{BLACK}Local rating of transport service:
 

	
 
############ range for rating starts
 
STR_3035_APPALLING                                              :Appalling
 
STR_3036_VERY_POOR                                              :Very Poor
 
STR_3037_POOR                                                   :Poor
 
STR_3038_MEDIOCRE                                               :Mediocre
 
STR_3039_GOOD                                                   :Good
 
STR_303A_VERY_GOOD                                              :Very Good
 
STR_303B_EXCELLENT                                              :Excellent
 
STR_303C_OUTSTANDING                                            :Outstanding
 
############ range for rating ends
 

	
 
STR_303D                                                        :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
 
STR_303E_NO_LONGER_ACCEPTS                                      :{WHITE}{STATION} no longer accepts {STRING}
 
STR_303F_NO_LONGER_ACCEPTS_OR                                   :{WHITE}{STATION} no longer accepts {STRING} or {STRING}
 
STR_3040_NOW_ACCEPTS                                            :{WHITE}{STATION} now accepts {STRING}
 
STR_3041_NOW_ACCEPTS_AND                                        :{WHITE}{STATION} now accepts {STRING} and {STRING}
 
STR_3042_BUS_STATION_ORIENTATION                                :{WHITE}Bus Station Orientation
 
STR_3043_TRUCK_STATION_ORIENT                                   :{WHITE}Lorry Station Orientation
 
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION                     :{WHITE}Passenger Tram Orientation
 
STR_3043_CARGO_TRAM_STATION_ORIENT                              :{WHITE}Freight Tram Orientation
 
STR_3046_MUST_DEMOLISH_BUS_STATION                              :{WHITE}Must demolish bus station first
 
STR_3047_MUST_DEMOLISH_TRUCK_STATION                            :{WHITE}Must demolish lorry station first
 
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION                   :{WHITE}Must demolish passenger tram station first
 
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION                       :{WHITE}Must demolish freight tram station first
 
STR_3048_STATIONS                                               :{WHITE}{COMPANY} - {COMMA} Station{P "" s}
 
STR_3049_0                                                      :{YELLOW}{STATION} {STATIONFEATURES}
 
STR_304A_NONE                                                   :{YELLOW}- None -
 
STR_304B_SITE_UNSUITABLE                                        :{WHITE}...site unsuitable
 
STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK                              :{WHITE}Too close to another dock
 
STR_304D_MUST_DEMOLISH_DOCK_FIRST                               :{WHITE}Must demolish dock first
 
STR_304E_SELECT_RAILROAD_STATION                                :{BLACK}Select railway station orientation
 
STR_304F_SELECT_NUMBER_OF_PLATFORMS                             :{BLACK}Select number of platforms for railway station
 
STR_3050_SELECT_LENGTH_OF_RAILROAD                              :{BLACK}Select length of railway station
 
STR_3051_SELECT_BUS_STATION_ORIENTATION                         :{BLACK}Select bus station orientation
 
STR_3052_SELECT_TRUCK_LOADING_BAY                               :{BLACK}Select lorry loading bay orientation
 
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION              :{BLACK}Select passenger tram station orientation
 
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION                  :{BLACK}Select freight tram station orientation
 
STR_3053_CENTER_MAIN_VIEW_ON_STATION                            :{BLACK}Centre main view on station location
 
STR_3054_SHOW_STATION_RATINGS                                   :{BLACK}Show station ratings
 
STR_3055_CHANGE_NAME_OF_STATION                                 :{BLACK}Change name of station
 
STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Show list of accepted cargo
 
STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Station names - click on name to centre main view on station
 
STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Select size/type of airport
 
STR_305C_0                                                      :{STATION} {STATIONFEATURES}
 
STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
 
STR_305E_RAILROAD_STATION                                       :Railway station
 
STR_305F_AIRCRAFT_HANGAR                                        :Aircraft hangar
 
STR_3060_AIRPORT                                                :Airport
 
STR_3061_TRUCK_LOADING_AREA                                     :Lorry loading area
 
STR_3062_BUS_STATION                                            :Bus station
 
STR_3063_SHIP_DOCK                                              :Ship dock
 
STR_3064_HIGHLIGHT_COVERAGE_AREA                                :{BLACK}Highlight coverage area of proposed site
 
STR_3065_DON_T_HIGHLIGHT_COVERAGE                               :{BLACK}Don't highlight coverage area of proposed site
 
STR_3066_COVERAGE_AREA_HIGHLIGHT                                :{BLACK}Coverage area highlight
 
STR_3068_DOCK                                                   :{WHITE}Dock
 
STR_3069_BUOY                                                   :Buoy
 
STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...buoy in the way
 
STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...station too spread out
 
STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...nonuniform stations disabled
 
STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Hold down CTRL to select more than one item
 

	
 
STR_UNDEFINED                                                   :(undefined string)
 
STR_STAT_CLASS_DFLT                                             :Default station
 
STR_STAT_CLASS_WAYP                                             :Waypoints
 

	
 
##id 0x3800
 
STR_3800_SHIP_DEPOT_ORIENTATION                                 :{WHITE}Ship Depot Orientation
 
STR_3801_MUST_BE_BUILT_ON_WATER                                 :{WHITE}...must be built on water
 
STR_3802_CAN_T_BUILD_SHIP_DEPOT                                 :{WHITE}Can't build ship depot here...
 
STR_3803_SELECT_SHIP_DEPOT_ORIENTATION                          :{BLACK}Select ship depot orientation
 
STR_3804_WATER                                                  :Water
 
STR_3805_COAST_OR_RIVERBANK                                     :Coast or riverbank
 
STR_3806_SHIP_DEPOT                                             :Ship depot
 
STR_3807_CAN_T_BUILD_ON_WATER                                   :{WHITE}...Can't build on water
 
STR_MUST_DEMOLISH_CANAL_FIRST                                   :{WHITE}Must demolish canal first
 

	
 
##id 0x4000
 
STR_4000_SAVE_GAME                                              :{WHITE}Save Game
 
STR_4001_LOAD_GAME                                              :{WHITE}Load Game
 
STR_4002_SAVE                                                   :{BLACK}Save
 
STR_4003_DELETE                                                 :{BLACK}Delete
 
STR_4004                                                        :{COMPANY}, {DATE_LONG}
 
STR_4005_BYTES_FREE                                             :{BLACK}{COMMA} megabyte{P "" s} free
 
STR_4006_UNABLE_TO_READ_DRIVE                                   :{BLACK}Unable to read drive
 
STR_4007_GAME_SAVE_FAILED                                       :{WHITE}Game Save Failed{}{STRING}
 
STR_4008_UNABLE_TO_DELETE_FILE                                  :{WHITE}Unable to delete file
 
STR_4009_GAME_LOAD_FAILED                                       :{WHITE}Game Load Failed{}{STRING}
 
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR                   :Internal error: {STRING}
 
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME                         :Broken savegame - {STRING}
 
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME                        :Savegame is made with newer version
 
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE                       :File not readable
 
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE                      :File not writeable
 
STR_400A_LIST_OF_DRIVES_DIRECTORIES                             :{BLACK}List of drives, directories and saved-game files
 
STR_400B_CURRENTLY_SELECTED_NAME                                :{BLACK}Currently selected name for saved-game
 
STR_400C_DELETE_THE_CURRENTLY_SELECTED                          :{BLACK}Delete the currently selected saved-game
 
STR_400D_SAVE_THE_CURRENT_GAME_USING                            :{BLACK}Save the current game, using the selected name
 
STR_400E_SELECT_NEW_GAME_TYPE                                   :{WHITE}Select New Game Type
 
STR_400F_SELECT_SCENARIO_GREEN_PRE                              :{BLACK}Select scenario (green), pre-set game (blue), or random new game
 
STR_4010_GENERATE_RANDOM_NEW_GAME                               :Generate random new game
 
STR_4011_LOAD_HEIGHTMAP                                         :{WHITE}Load Heightmap
 

	
 
##id 0x4800
 
STR_4800_IN_THE_WAY                                             :{WHITE}{STRING} in the way
 
STR_4801                                                        :{WHITE}{INDUSTRY}
 
STR_4802_COAL_MINE                                              :Coal Mine
 
STR_4803_POWER_STATION                                          :Power Station
 
STR_4804_SAWMILL                                                :Sawmill
 
STR_4805_FOREST                                                 :Forest
 
STR_4806_OIL_REFINERY                                           :Oil Refinery
 
STR_4807_OIL_RIG                                                :Oil Rig
 
STR_4808_FACTORY                                                :Factory
 
STR_4809_PRINTING_WORKS                                         :Printing Works
 
STR_480A_STEEL_MILL                                             :Steel Mill
 
STR_480B_FARM                                                   :Farm
 
STR_480C_COPPER_ORE_MINE                                        :Copper Ore Mine
 
STR_480D_OIL_WELLS                                              :Oil Wells
 
STR_480E_BANK                                                   :Bank
 
STR_480F_FOOD_PROCESSING_PLANT                                  :Food Processing Plant
 
STR_4810_PAPER_MILL                                             :Paper Mill
 
STR_4811_GOLD_MINE                                              :Gold Mine
 
STR_4812_BANK                                                   :Bank
 
STR_4813_DIAMOND_MINE                                           :Diamond Mine
 
STR_4814_IRON_ORE_MINE                                          :Iron Ore Mine
 
STR_4815_FRUIT_PLANTATION                                       :Fruit Plantation
 
STR_4816_RUBBER_PLANTATION                                      :Rubber Plantation
 
STR_4817_WATER_SUPPLY                                           :Water Supply
 
STR_4818_WATER_TOWER                                            :Water Tower
 
STR_4819_FACTORY                                                :Factory
 
STR_481A_FARM                                                   :Farm
 
STR_481B_LUMBER_MILL                                            :Lumber Mill
 
STR_481C_COTTON_CANDY_FOREST                                    :Candyfloss Forest
 
STR_481D_CANDY_FACTORY                                          :Sweet Factory
 
STR_481E_BATTERY_FARM                                           :Battery Farm
 
STR_481F_COLA_WELLS                                             :Cola Wells
 
STR_4820_TOY_SHOP                                               :Toy Shop
 
STR_4821_TOY_FACTORY                                            :Toy Factory
 
STR_4822_PLASTIC_FOUNTAINS                                      :Plastic Fountains
 
STR_4823_FIZZY_DRINK_FACTORY                                    :Fizzy Drink Factory
 
STR_4824_BUBBLE_GENERATOR                                       :Bubble Generator
 
STR_4825_TOFFEE_QUARRY                                          :Toffee Quarry
 
STR_4826_SUGAR_MINE                                             :Sugar Mine
 

	
 
############ range for requires starts
 
STR_4827_REQUIRES                                               :{BLACK}Requires: {YELLOW}{STRING}
 
STR_4828_REQUIRES                                               :{BLACK}Requires: {YELLOW}{STRING}, {STRING}
 
STR_4829_REQUIRES                                               :{BLACK}Requires: {YELLOW}{STRING}, {STRING}, {STRING}
 
############ range for requires ends
 

	
 
############ range for produces starts
 
STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING                      :{BLACK}Cargo waiting to be processed:
 
STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO                     :{YELLOW}{CARGO}{BLACK}
 
STR_4827_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}
 
STR_4828_PRODUCES                                               :{BLACK}Produces: {YELLOW}{STRING}, {STRING}
 
############ range for produces ends
 

	
 
STR_482A_PRODUCTION_LAST_MONTH                                  :{BLACK}Production last month:
 
STR_482B_TRANSPORTED                                            :{YELLOW}{CARGO}{BLACK} ({COMMA}% transported)
 
STR_482C_CENTER_THE_MAIN_VIEW_ON                                :{BLACK}Centre the main view on industry location
 
STR_482D_NEW_UNDER_CONSTRUCTION                                 :{BLACK}{BIGFONT}New {STRING} under construction near {TOWN}!
 
STR_482E_NEW_BEING_PLANTED_NEAR                                 :{BLACK}{BIGFONT}New {STRING} being planted near {TOWN}!
 
STR_482F_COST                                                   :{BLACK}Cost: {YELLOW}{CURRENCY}
 
STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY                          :{WHITE}Can't construct this industry type here...
 
STR_4831_FOREST_CAN_ONLY_BE_PLANTED                             :{WHITE}...forest can only be planted above snow-line
 
STR_4832_ANNOUNCES_IMMINENT_CLOSURE                             :{BLACK}{BIGFONT}{STRING2} announces imminent closure!
 
STR_4833_SUPPLY_PROBLEMS_CAUSE_TO                               :{BLACK}{BIGFONT}Supply problems cause {STRING2} to announce imminent closure!
 
STR_4834_LACK_OF_NEARBY_TREES_CAUSES                            :{BLACK}{BIGFONT}Lack of nearby trees causes {STRING2} to announce imminent closure!
 
STR_4835_INCREASES_PRODUCTION                                   :{BLACK}{BIGFONT}{INDUSTRY} increases production!
 
STR_4836_NEW_COAL_SEAM_FOUND_AT                                 :{BLACK}{BIGFONT}New coal seam found at {INDUSTRY}!{}Production is expected to double!
 
STR_4837_NEW_OIL_RESERVES_FOUND                                 :{BLACK}{BIGFONT}New oil reserves found at {INDUSTRY}!{}Production is expected to double!
 
STR_4838_IMPROVED_FARMING_METHODS                               :{BLACK}{BIGFONT}Improved farming methods at {INDUSTRY} are expected to double production!
 
STR_4839_PRODUCTION_DOWN_BY_50                                  :{BLACK}{BIGFONT}{INDUSTRY} production down by 50%
 
STR_483A_INSECT_INFESTATION_CAUSES                              :{BLACK}{BIGFONT}Insect infestation causes havoc at {INDUSTRY}!{}Production down by 50%
 
STR_483B_CAN_ONLY_BE_POSITIONED                                 :{WHITE}...can only be positioned near edges of map
 
STR_INDUSTRY_PROD_GOUP                                          :{BLACK}{BIGFONT}{STRING} production at {INDUSTRY} increases {COMMA}%!
 
STR_INDUSTRY_PROD_GODOWN                                        :{BLACK}{BIGFONT}{STRING} production at {INDUSTRY} decreases {COMMA}%!
 

	
 
##id 0x5000
 
STR_5000_TRAIN_IN_TUNNEL                                        :{WHITE}Train in tunnel
 
STR_5001_ROAD_VEHICLE_IN_TUNNEL                                 :{WHITE}Road vehicle in tunnel
 
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY                              :{WHITE}Another tunnel in the way
 
STR_5005_UNABLE_TO_EXCAVATE_LAND                                :{WHITE}Unable to excavate land for other end of tunnel
 
STR_5006_MUST_DEMOLISH_TUNNEL_FIRST                             :{WHITE}Must demolish tunnel first
 
STR_5007_MUST_DEMOLISH_BRIDGE_FIRST                             :{WHITE}Must demolish bridge first
 
STR_5008_CANNOT_START_AND_END_ON                                :{WHITE}Cannot start and end in the same spot
 
STR_BRIDGEHEADS_NOT_SAME_HEIGHT                                 :{WHITE}Bridge heads not at the same level
 
STR_BRIDGE_TOO_LOW_FOR_TERRAIN                                  :{WHITE}Bridge is too low for the terrain
 
STR_500A_START_AND_END_MUST_BE_IN                               :{WHITE}Start and end must be in line
 
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL                             :{WHITE}Site unsuitable for tunnel entrance
 
STR_500D                                                        :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
 
STR_500E_SUSPENSION_STEEL                                       :Suspension, Steel
 
STR_500F_GIRDER_STEEL                                           :Girder, Steel
 
STR_5010_CANTILEVER_STEEL                                       :Cantilever, Steel
 
STR_5011_SUSPENSION_CONCRETE                                    :Suspension, Concrete
 
STR_5012_WOODEN                                                 :Wooden
 
STR_5013_CONCRETE                                               :Concrete
 
STR_5014_TUBULAR_STEEL                                          :Tubular, Steel
 
STR_BRIDGE_TUBULAR_SILICON                                      :Tubular, Silicon
 
STR_5015_CAN_T_BUILD_BRIDGE_HERE                                :{WHITE}Can't build bridge here...
 
STR_5016_CAN_T_BUILD_TUNNEL_HERE                                :{WHITE}Can't build tunnel here...
 
STR_5017_RAILROAD_TUNNEL                                        :Railway tunnel
 
STR_5018_ROAD_TUNNEL                                            :Road tunnel
 
STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE                           :Steel suspension rail bridge
 
STR_501C_STEEL_GIRDER_RAIL_BRIDGE                               :Steel girder rail bridge
 
STR_501D_STEEL_CANTILEVER_RAIL_BRIDGE                           :Steel cantilever rail bridge
 
STR_501E_REINFORCED_CONCRETE_SUSPENSION                         :Reinforced concrete suspension rail bridge
 
STR_501F_WOODEN_RAIL_BRIDGE                                     :Wooden rail bridge
 
STR_5020_CONCRETE_RAIL_BRIDGE                                   :Concrete rail bridge
 
STR_5021_STEEL_SUSPENSION_ROAD_BRIDGE                           :Steel suspension road bridge
 
STR_5022_STEEL_GIRDER_ROAD_BRIDGE                               :Steel girder road bridge
 
STR_5023_STEEL_CANTILEVER_ROAD_BRIDGE                           :Steel cantilever road bridge
 
STR_5024_REINFORCED_CONCRETE_SUSPENSION                         :Reinforced concrete suspension road bridge
 
STR_5025_WOODEN_ROAD_BRIDGE                                     :Wooden road bridge
 
STR_5026_CONCRETE_ROAD_BRIDGE                                   :Concrete road bridge
 
STR_5027_TUBULAR_RAIL_BRIDGE                                    :Tubular rail bridge
 
STR_5028_TUBULAR_ROAD_BRIDGE                                    :Tubular road bridge
 

	
 
##id 0x5800
 
STR_5800_OBJECT_IN_THE_WAY                                      :{WHITE}Object in the way
 
STR_5801_TRANSMITTER                                            :Transmitter
 
STR_5802_LIGHTHOUSE                                             :Lighthouse
 
STR_5803_COMPANY_HEADQUARTERS                                   :Company Headquarters
 
STR_5804_COMPANY_HEADQUARTERS_IN                                :{WHITE}...company headquarters in the way
 
STR_5805_COMPANY_OWNED_LAND                                     :Company-owned land
 
STR_5806_CAN_T_PURCHASE_THIS_LAND                               :{WHITE}Can't purchase this land area...
 
STR_5807_YOU_ALREADY_OWN_IT                                     :{WHITE}...you already own it!
src/road_gui.cpp
Show inline comments
 
/* $Id$ */
 

	
 
/** @file road_gui.cpp */
 

	
 
#include "stdafx.h"
 
#include "openttd.h"
 
#include "table/sprites.h"
 
#include "table/strings.h"
 
#include "strings.h"
 
#include "functions.h"
 
#include "map.h"
 
#include "tile.h"
 
#include "window.h"
 
#include "gui.h"
 
#include "viewport.h"
 
#include "gfx.h"
 
#include "sound.h"
 
#include "command.h"
 
#include "variables.h"
 
#include "road.h"
 
#include "road_cmd.h"
 
#include "road_map.h"
 
#include "station_map.h"
 
//needed for catchments
 
#include "station.h"
 

	
 

	
 
static void ShowRVStationPicker(RoadStop::Type rs);
 
static void ShowRoadDepotPicker();
 

	
 
static bool _remove_button_clicked;
 
static bool _one_way_button_clicked;
 

	
 
/**
 
 * 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 road
 
	RF_END_HALFROAD_Y   = 0x02,    // The end tile in Y-dir should have only a half road
 
	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 road
 
	RF_END_HALFROAD_X   = 0x10,    // The end tile in X-dir should have only a half road
 
};
 
DECLARE_ENUM_AS_BIT_SET(RoadFlags);
 

	
 
static RoadFlags _place_road_flag;
 

	
 
static RoadType _cur_roadtype;
 

	
 
static DiagDirection _road_depot_orientation;
 
static DiagDirection _road_station_picker_orientation;
 

	
 
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 X-dir
 
 * @li The first tile has a partitial RoadBit (true or false)
 
 *
 
 * @param tile The start tile
 
 */
 
static void PlaceRoad_X_Dir(TileIndex tile)
 
{
 
	_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_X_DIR);
 
}
 

	
 
/**
 
 * 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_Y_Dir(TileIndex tile)
 
{
 
	_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_Y_DIR);
 
}
 

	
 
/**
 
 * 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);
 
}
 

	
 

	
 
void CcBuildRoadTunnel(bool success, TileIndex tile, uint32 p1, uint32 p2)
 
{
 
	if (success) {
 
		SndPlayTileFx(SND_20_SPLAT_2, tile);
 
		ResetObjectToPlace();
 
	} else {
 
		SetRedErrorSquare(_build_tunnel_endtile);
 
	}
 
}
 

	
 
/** Structure holding information per roadtype for several functions */
 
struct RoadTypeInfo {
 
	StringID err_build_road;        ///< Building a normal piece of road
 
	StringID err_remove_road;       ///< Removing a normal piece of road
 
	StringID err_depot;             ///< Building a depot
 
	StringID err_build_station[2];  ///< Building a bus or truck station
 
	StringID err_remove_station[2]; ///< Removing of a bus or truck station
 

	
 
	StringID picker_title[2];       ///< Title for the station picker for bus or truck stations
 
	StringID picker_tooltip[2];     ///< Tooltip for the station picker for bus or truck stations
 

	
 
	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 */
 
static const RoadTypeInfo _road_type_infos[] = {
 
	{
 
		STR_1804_CAN_T_BUILD_ROAD_HERE,
 
		STR_1805_CAN_T_REMOVE_ROAD_FROM,
 
		STR_1807_CAN_T_BUILD_ROAD_VEHICLE,
 
		{ STR_1808_CAN_T_BUILD_BUS_STATION,        STR_1809_CAN_T_BUILD_TRUCK_STATION },
 
		{ STR_CAN_T_REMOVE_BUS_STATION,            STR_CAN_T_REMOVE_TRUCK_STATION     },
 
		{ STR_3042_BUS_STATION_ORIENTATION,        STR_3043_TRUCK_STATION_ORIENT      },
 
		{ STR_3051_SELECT_BUS_STATION_ORIENTATION, STR_3052_SELECT_TRUCK_LOADING_BAY  },
 

	
 
		SPR_CURSOR_ROAD_NESW,
 
		SPR_CURSOR_ROAD_NWSE,
 
		SPR_CURSOR_AUTOROAD,
 
	},
 
	{
 
		STR_1804_CAN_T_BUILD_TRAMWAY_HERE,
 
		STR_1805_CAN_T_REMOVE_TRAMWAY_FROM,
 
		STR_1807_CAN_T_BUILD_TRAM_VEHICLE,
 
		{ STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION,        STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION        },
 
		{ STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION,            STR_CAN_T_REMOVE_CARGO_TRAM_STATION            },
 
		{ STR_3042_PASSENGER_TRAM_STATION_ORIENTATION,        STR_3043_CARGO_TRAM_STATION_ORIENT             },
 
		{ STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION, STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION },
 

	
 
		SPR_CURSOR_TRAMWAY_NESW,
 
		SPR_CURSOR_TRAMWAY_NWSE,
 
		SPR_CURSOR_AUTOTRAM,
 
	},
 
};
 

	
 
static void PlaceRoad_Tunnel(TileIndex tile)
 
{
 
	DoCommandP(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, CcBuildRoadTunnel, CMD_BUILD_TUNNEL | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
 
}
 

	
 
static void BuildRoadOutsideStation(TileIndex tile, DiagDirection direction)
 
{
 
	tile += TileOffsByDiagDir(direction);
 
	// if there is a roadpiece just outside of the station entrance, build a connecting route
 
	if (IsTileType(tile, MP_ROAD) && GetRoadTileType(tile) == ROAD_TILE_NORMAL) {
 
		if (GetRoadBits(tile, _cur_roadtype) != ROAD_NONE) {
 
			DoCommandP(tile, _cur_roadtype << 4 | DiagDirToRoadBits(ReverseDiagDir(direction)), 0, NULL, CMD_BUILD_ROAD);
 
		}
 
	}
 
}
 

	
 
void CcRoadDepot(bool success, TileIndex tile, uint32 p1, uint32 p2)
 
{
 
	if (success) {
 
		DiagDirection dir = (DiagDirection)GB(p1, 0, 2);
 
		SndPlayTileFx(SND_1F_SPLAT, tile);
 
		ResetObjectToPlace();
 
		BuildRoadOutsideStation(tile, dir);
 
		/* For a drive-through road stop build connecting road for other entrance */
 
		if (HASBIT(p2, 1)) BuildRoadOutsideStation(tile, ReverseDiagDir(dir));
 
	}
 
}
 

	
 
static void PlaceRoad_Depot(TileIndex tile)
 
{
 
	DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot));
 
}
 

	
 
static void PlaceRoadStop(TileIndex tile, uint32 p2, uint32 cmd)
 
{
 
	uint32 p1 = _road_station_picker_orientation;
 

	
 
	if (p1 >= DIAGDIR_END) {
 
		SETBIT(p2, 1); // It's a drive-through stop
 
		p1 -= DIAGDIR_END; // Adjust picker result to actual direction
 
	}
 
	DoCommandP(tile, p1, p2, CcRoadDepot, cmd);
 
}
 

	
 
static void PlaceRoad_BusStation(TileIndex tile)
 
{
 
	if (_remove_button_clicked) {
 
		DoCommandP(tile, 0, RoadStop::BUS, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[RoadStop::BUS]));
 
	} else {
 
		PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::BUS]));
 
	}
 
}
 

	
 
static void PlaceRoad_TruckStation(TileIndex tile)
 
{
 
	if (_remove_button_clicked) {
 
		DoCommandP(tile, 0, RoadStop::TRUCK, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[RoadStop::TRUCK]));
 
	} else {
 
		PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::TRUCK]));
 
	}
 
}
 

	
 
static void PlaceRoad_DemolishArea(TileIndex tile)
 
{
 
	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_DEMOLISH_AREA);
 
}
 

	
 
/** Enum referring to the widgets of the build road toolbar */
 
enum RoadToolbarWidgets {
 
	RTW_CLOSEBOX = 0,
 
	RTW_CAPTION,
 
	RTW_STICKY,
 
	RTW_ROAD_X,
 
	RTW_ROAD_Y,
 
	RTW_AUTOROAD,
 
	RTW_DEMOLISH,
 
	RTW_DEPOT,
 
	RTW_BUS_STATION,
 
	RTW_TRUCK_STATION,
 
	RTW_ONE_WAY,
 
	RTW_BUILD_BRIDGE,
 
	RTW_BUILD_TUNNEL,
 
	RTW_REMOVE,
 
};
 

	
 
typedef void OnButtonClick(Window *w);
 

	
 
/**
 
 * Function that handles the click on the
 
 *  X road placement button.
 
 *
 
 * @param w The current window
 
 */
 
static void BuildRoadClick_X_Dir(Window *w)
 
{
 
	HandlePlacePushButton(w, RTW_ROAD_X, _road_type_infos[_cur_roadtype].cursor_nwse, VHM_RECT, PlaceRoad_X_Dir);
 
}
 

	
 
/**
 
 * Function that handles the click on the
 
 *  Y road placement button.
 
 *
 
 * @param w The current window
 
 */
 
static void BuildRoadClick_Y_Dir(Window *w)
 
{
 
	HandlePlacePushButton(w, RTW_ROAD_Y, _road_type_infos[_cur_roadtype].cursor_nesw, VHM_RECT, PlaceRoad_Y_Dir);
 
}
 

	
 
/**
 
 * 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, VHM_RECT, PlaceRoad_AutoRoad);
 
}
 

	
 
static void BuildRoadClick_Demolish(Window *w)
 
{
 
	HandlePlacePushButton(w, RTW_DEMOLISH, ANIMCURSOR_DEMOLISH, VHM_RECT, PlaceRoad_DemolishArea);
 
}
 

	
 
static void BuildRoadClick_Depot(Window *w)
 
{
 
	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
	if (HandlePlacePushButton(w, RTW_DEPOT, SPR_CURSOR_ROAD_DEPOT, VHM_RECT, PlaceRoad_Depot)) ShowRoadDepotPicker();
 
}
 

	
 
static void BuildRoadClick_BusStation(Window *w)
 
{
 
	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
	if (HandlePlacePushButton(w, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, VHM_RECT, PlaceRoad_BusStation)) ShowRVStationPicker(RoadStop::BUS);
 
}
 

	
 
static void BuildRoadClick_TruckStation(Window *w)
 
{
 
	if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
	if (HandlePlacePushButton(w, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, VHM_RECT, PlaceRoad_TruckStation)) ShowRVStationPicker(RoadStop::TRUCK);
 
}
 

	
 
/**
 
 * Function that handles the click on the
 
 *  one way road button.
 
 *
 
 * @param w The current window
 
 */
 
static void BuildRoadClick_OneWay(Window *w)
 
{
 
	if (IsWindowWidgetDisabled(w, RTW_ONE_WAY)) return;
 
	SetWindowDirty(w);
 
	ToggleWidgetLoweredState(w, RTW_ONE_WAY);
 
}
 

	
 
static void BuildRoadClick_Bridge(Window *w)
 
{
 
	HandlePlacePushButton(w, RTW_BUILD_BRIDGE, SPR_CURSOR_BRIDGE, VHM_RECT, PlaceRoad_Bridge);
 
}
 

	
 
static void BuildRoadClick_Tunnel(Window *w)
 
{
 
	HandlePlacePushButton(w, RTW_BUILD_TUNNEL, SPR_CURSOR_ROAD_TUNNEL, VHM_SPECIAL, PlaceRoad_Tunnel);
 
}
 

	
 
static void BuildRoadClick_Remove(Window *w)
 
{
 
	if (IsWindowWidgetDisabled(w, RTW_REMOVE)) return;
 
	SetWindowDirty(w);
 
	SndPlayFx(SND_15_BEEP);
 
	ToggleWidgetLoweredState(w, RTW_REMOVE);
 
	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_X_Dir,
 
	BuildRoadClick_Y_Dir,
 
	BuildRoadClick_AutoRoad,
 
	BuildRoadClick_Demolish,
 
	BuildRoadClick_Depot,
 
	BuildRoadClick_BusStation,
 
	BuildRoadClick_TruckStation,
 
	BuildRoadClick_OneWay,
 
	BuildRoadClick_Bridge,
 
	BuildRoadClick_Tunnel,
 
	BuildRoadClick_Remove
 
};
 

	
 
/** Array with the keycode of the button-clicks for the road-toolbar */
 
static const uint16 _road_keycodes[] = {
 
	'1',
 
	'2',
 
	'3',
 
	'4',
 
	'5',
 
	'6',
 
	'7',
 
	'8',
 
	'B',
 
	'T',
 
	'R',
 
};
 

	
 
/**
 
 * Update the remove button lowered state of the road toolbar
 
 *
 
 * @param w The toolbar window
 
 * @param clicked_widget The widget which the player clicked just now
 
 */
 
static void UpdateRemoveWidgetStatus(Window *w, int clicked_widget)
 
static void UpdateOptionWidgetStatus(Window *w, int clicked_widget)
 
{
 
	/* The remove and the one way button state is driven
 
	 * by the other buttons so they don't act on themselfs.
 
	 * Both are only valid if they are able to apply as options. */
 
	switch (clicked_widget) {
 
		case RTW_REMOVE:
 
			/* If it is the removal button that has been clicked, do nothing,
 
			 * as it is up to the other buttons to drive removal status */
 
			return;
 
			RaiseWindowWidget(w, RTW_ONE_WAY);
 
			break;
 
		case RTW_ONE_WAY:
 
			RaiseWindowWidget(w, RTW_REMOVE);
 
			break;
 
		case RTW_BUS_STATION:
 
		case RTW_TRUCK_STATION:
 
			DisableWindowWidget(w, RTW_ONE_WAY);
 
			SetWindowWidgetDisabledState(w, RTW_REMOVE, !IsWindowWidgetLowered(w, 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
 
			 * button is still lowered.  Once raised, it has to be disabled */
 
			SetWindowWidgetDisabledState(w, RTW_REMOVE, !IsWindowWidgetLowered(w, clicked_widget));
 
			SetWindowWidgetsDisabledState(w, !IsWindowWidgetLowered(w, clicked_widget),
 
				RTW_REMOVE,
 
				RTW_ONE_WAY,
 
				WIDGET_LIST_END);
 
			break;
 

	
 
		default:
 
			/* When any other buttons than road/station, raise and
 
			 * disable the removal button */
 
			DisableWindowWidget(w, RTW_REMOVE);
 
			RaiseWindowWidget(w, RTW_REMOVE);
 
			SetWindowWidgetsDisabledState(w, true,
 
				RTW_REMOVE,
 
				RTW_ONE_WAY,
 
				WIDGET_LIST_END);
 
			SetWindowWidgetsLoweredState (w, false,
 
				RTW_REMOVE,
 
				RTW_ONE_WAY,
 
				WIDGET_LIST_END);
 
			break;
 
	}
 
}
 

	
 
static void BuildRoadToolbWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_CREATE: DisableWindowWidget(w, RTW_REMOVE); break;
 
	case WE_CREATE:
 
		SetWindowWidgetsDisabledState(w, true,
 
			RTW_REMOVE,
 
			RTW_ONE_WAY,
 
			WIDGET_LIST_END);
 
		break;
 

	
 
	case WE_PAINT:
 
		SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_ROAD),
 
			RTW_DEPOT,
 
			RTW_BUS_STATION,
 
			RTW_TRUCK_STATION,
 
			WIDGET_LIST_END);
 
		DrawWindowWidgets(w);
 
		break;
 

	
 
	case WE_CLICK:
 
		if (e->we.click.widget >= RTW_ROAD_X) {
 
			_remove_button_clicked = false;
 
			_one_way_button_clicked = false;
 
			_build_road_button_proc[e->we.click.widget - RTW_ROAD_X](w);
 
		}
 
		UpdateRemoveWidgetStatus(w, e->we.click.widget);
 
		UpdateOptionWidgetStatus(w, e->we.click.widget);
 
		break;
 

	
 
	case WE_KEYPRESS:
 
		for (uint8 i = 0; i != lengthof(_road_keycodes); i++) {
 
			if (e->we.keypress.keycode == _road_keycodes[i]) {
 
				e->we.keypress.cont = false;
 
				_remove_button_clicked = false;
 
				_one_way_button_clicked = false;
 
				_build_road_button_proc[i](w);
 
				UpdateRemoveWidgetStatus(w, i + RTW_ROAD_X);
 
				UpdateOptionWidgetStatus(w, i + RTW_ROAD_X);
 
				break;
 
			}
 
		}
 
		MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection
 
		break;
 

	
 
	case WE_PLACE_OBJ:
 
		_remove_button_clicked = IsWindowWidgetLowered(w, RTW_REMOVE);
 
		_one_way_button_clicked = IsWindowWidgetLowered(w, RTW_ONE_WAY);
 
		_place_proc(e->we.place.tile);
 
		break;
 

	
 
	case WE_ABORT_PLACE_OBJ:
 
		RaiseWindowButtons(w);
 
		DisableWindowWidget(w, RTW_REMOVE);
 
		InvalidateWidget(w, RTW_REMOVE);
 

	
 
		w = FindWindowById(WC_BUS_STATION, 0);
 
		if (w != NULL) WP(w, def_d).close = true;
 
		w = FindWindowById(WC_TRUCK_STATION, 0);
 
		if (w != NULL) WP(w, def_d).close = true;
 
		w = FindWindowById(WC_BUILD_DEPOT, 0);
 
		if (w != NULL) WP(w, def_d).close = true;
 
		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_X_DIR:
 
				_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_ROAD_Y_DIR:
 
				_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_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;
 
		}
 

	
 
		VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.select_method);
 
		return;
 

	
 
	case WE_PLACE_MOUSEUP:
 
		if (e->we.place.pt.x != -1) {
 
			TileIndex start_tile = e->we.place.starttile;
 
			TileIndex end_tile = e->we.place.tile;
 

	
 
			switch (e->we.place.select_proc) {
 
				case DDSP_BUILD_BRIDGE:
 
					ResetObjectToPlace();
 
					ShowBuildBridgeWindow(start_tile, end_tile, 0x80 | RoadTypeToRoadTypes(_cur_roadtype));
 
					break;
 

	
 
				case DDSP_DEMOLISH_AREA:
 
					DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
 
					break;
 

	
 
				case DDSP_PLACE_ROAD_X_DIR:
 
				case DDSP_PLACE_ROAD_Y_DIR:
 
				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,
 
					DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5), CcPlaySound1D,
 
						(_ctrl_pressed || _remove_button_clicked) ?
 
						CMD_REMOVE_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
 
						CMD_BUILD_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road));
 
					break;
 
			}
 
		}
 
		break;
 

	
 
	case WE_PLACE_PRESIZE: {
 
		TileIndex tile = e->we.place.tile;
 

	
 
		DoCommand(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, DC_AUTO, CMD_BUILD_TUNNEL);
 
		VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile);
 
		break;
 
	}
 

	
 
	case WE_DESTROY:
 
		if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
 
		break;
 
	}
 
}
 

	
 
/** 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,   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_CAPTION,   RESIZE_NONE,     7,    11,   250,     0,    13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},   // RTW_CAPTION
 
{  WWT_STICKYBOX,   RESIZE_NONE,     7,   251,   262,     0,    13, 0x0,                        STR_STICKY_BUTTON},                 // RTW_STICKY
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_ROAD_X_DIR,         STR_180B_BUILD_ROAD_SECTION},       // RTW_ROAD_X
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_ROAD_Y_DIR,         STR_180B_BUILD_ROAD_SECTION},       // RTW_ROAD_Y
 
{     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
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   154,   175,    14,    35, SPR_IMG_ROAD_ONE_WAY,       STR_TOGGLE_ONE_WAY_ROAD},           // RTW_ONE_WAY
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   176,   218,    14,    35, SPR_IMG_BRIDGE,             STR_180F_BUILD_ROAD_BRIDGE},        // RTW_BUILD_BRIDGE
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   219,   240,    14,    35, SPR_IMG_ROAD_TUNNEL,        STR_1810_BUILD_ROAD_TUNNEL},        // RTW_BUILD_TUNNEL
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   241,   262,    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, 240, 36, 240, 36,
 
	WDP_ALIGN_TBR, 22, 263, 36, 263, 36,
 
	WC_BUILD_TOOLBAR, WC_NONE,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 
	_build_road_widgets,
 
	BuildRoadToolbWndProc
 
};
 

	
 
/** 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,   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_CAPTION,   RESIZE_NONE,     7,    11,   228,     0,    13, STR_1802_TRAMWAY_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},        // RTW_CAPTION
 
{  WWT_STICKYBOX,   RESIZE_NONE,     7,   229,   240,     0,    13, 0x0,                        STR_STICKY_BUTTON},                         // RTW_STICKY
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_TRAMWAY_X_DIR,      STR_180B_BUILD_TRAMWAY_SECTION},            // RTW_ROAD_X
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_TRAMWAY_Y_DIR,      STR_180B_BUILD_TRAMWAY_SECTION},            // RTW_ROAD_Y
 
{     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
 
{      WWT_EMPTY,   RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                        STR_NULL},                                  // RTW_ONE_WAY
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   154,   196,    14,    35, SPR_IMG_BRIDGE,             STR_180F_BUILD_TRAMWAY_BRIDGE},             // RTW_BUILD_BRIDGE
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   197,   218,    14,    35, SPR_IMG_ROAD_TUNNEL,        STR_1810_BUILD_TRAMWAY_TUNNEL},             // RTW_BUILD_TUNNEL
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   219,   240,    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, 240, 36, 240, 36,
 
	WDP_ALIGN_TBR, 22, 241, 36, 241, 36,
 
	WC_BUILD_TOOLBAR, WC_NONE,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 
	_build_tramway_widgets,
 
	BuildRoadToolbWndProc
 
};
 

	
 
void ShowBuildRoadToolbar(RoadType roadtype)
 
{
 
	if (!IsValidPlayer(_current_player)) return;
 
	_cur_roadtype = roadtype;
 

	
 
	DeleteWindowById(WC_BUILD_TOOLBAR, 0);
 
	Window *w = AllocateWindowDesc(roadtype == ROADTYPE_ROAD ? &_build_road_desc : &_build_tramway_desc);
 
	if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w);
 
}
 

	
 
/** 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,   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_CAPTION,   RESIZE_NONE,     7,    11,   184,     0,    13, STR_1802_ROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},  // RTW_CAPTION
 
{  WWT_STICKYBOX,   RESIZE_NONE,     7,   185,   196,     0,    13, 0x0,                        STR_STICKY_BUTTON},                // RTW_STICKY
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_ROAD_X_DIR,         STR_180B_BUILD_ROAD_SECTION},      // RTW_ROAD_X
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_ROAD_Y_DIR,         STR_180B_BUILD_ROAD_SECTION},      // RTW_ROAD_Y
 
{     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,    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
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,    88,   109,    14,    35, SPR_IMG_ROAD_ONE_WAY,       STR_TOGGLE_ONE_WAY_ROAD},          // RTW_ONE_WAY
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   110,   152,    14,    35, SPR_IMG_BRIDGE,             STR_180F_BUILD_ROAD_BRIDGE},       // RTW_BUILD_BRIDGE
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   153,   174,    14,    35, SPR_IMG_ROAD_TUNNEL,        STR_1810_BUILD_ROAD_TUNNEL},       // RTW_BUILD_TUNNEL
 
{     WWT_IMGBTN,   RESIZE_NONE,     7,   175,   196,    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, 174, 36, 174, 36,
 
	WDP_AUTO, WDP_AUTO, 197, 36, 197, 36,
 
	WC_SCEN_BUILD_ROAD, WC_NONE,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 
	_build_road_scen_widgets,
 
	BuildRoadToolbWndProc
 
};
 

	
 
void ShowBuildRoadScenToolbar()
 
{
 
	_cur_roadtype = ROADTYPE_ROAD;
 
	AllocateWindowDescFront(&_build_road_scen_desc, 0);
 
}
 

	
 
/** Enum referring to the widgets of the build road depot window */
 
enum BuildRoadDepotWidgets {
 
	BRDW_CLOSEBOX = 0,
 
	BRDW_CAPTION,
 
	BRDW_BACKGROUND,
 
	BRDW_DEPOT_NE,
 
	BRDW_DEPOT_SE,
 
	BRDW_DEPOT_SW,
 
	BRDW_DEPOT_NW,
 
};
 

	
 
static void BuildRoadDepotWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_CREATE: LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE); break;
 

	
 
	case WE_PAINT:
 
		DrawWindowWidgets(w);
 

	
 
		DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype);
 
		DrawRoadDepotSprite(70, 69, DIAGDIR_SE, _cur_roadtype);
 
		DrawRoadDepotSprite( 2, 69, DIAGDIR_SW, _cur_roadtype);
 
		DrawRoadDepotSprite( 2, 17, DIAGDIR_NW, _cur_roadtype);
 
		break;
 

	
 
	case WE_CLICK:
 
		switch (e->we.click.widget) {
 
			case BRDW_DEPOT_NW:
 
			case BRDW_DEPOT_NE:
 
			case BRDW_DEPOT_SW:
 
			case BRDW_DEPOT_SE:
 
				RaiseWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE);
 
				_road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE);
 
				LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE);
 
				SndPlayFx(SND_15_BEEP);
 
				SetWindowDirty(w);
 
				break;
 
		}
 
		break;
 

	
 
	case WE_MOUSELOOP:
 
		if (WP(w, def_d).close) DeleteWindow(w);
 
		break;
 

	
 
	case WE_DESTROY:
 
		if (!WP(w, def_d).close) ResetObjectToPlace();
 
		break;
 
	}
 
}
 

	
 
/** Widget definition of the build road depot window */
 
static const Widget _build_road_depot_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},              // BRDW_CLOSEBOX
 
{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   139,     0,    13, STR_1806_ROAD_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},    // BRDW_CAPTION
 
{      WWT_PANEL,   RESIZE_NONE,     7,     0,   139,    14,   121, 0x0,                             STR_NULL},                           // BRDW_BACKGROUND
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    17,    66, 0x0,                             STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NE
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    69,   118, 0x0,                             STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SE
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    69,   118, 0x0,                             STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_SW
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    17,    66, 0x0,                             STR_1813_SELECT_ROAD_VEHICLE_DEPOT}, // BRDW_DEPOT_NW
 
{   WIDGETS_END},
 
};
 

	
 
/** Widget definition of the build tram depot window */
 
static const Widget _build_tram_depot_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},              // BRDW_CLOSEBOX
 
{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   139,     0,    13, STR_1806_TRAM_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},    // BRDW_CAPTION
 
{      WWT_PANEL,   RESIZE_NONE,     7,     0,   139,    14,   121, 0x0,                             STR_NULL},                           // BRDW_BACKGROUND
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    17,    66, 0x0,                             STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NE
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    69,   118, 0x0,                             STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SE
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    69,   118, 0x0,                             STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_SW
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    17,    66, 0x0,                             STR_1813_SELECT_TRAM_VEHICLE_DEPOT}, // BRDW_DEPOT_NW
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _build_road_depot_desc = {
 
	WDP_AUTO, WDP_AUTO, 140, 122, 140, 122,
 
	WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_build_road_depot_widgets,
 
	BuildRoadDepotWndProc
 
};
 

	
 
static const WindowDesc _build_tram_depot_desc = {
 
	WDP_AUTO, WDP_AUTO, 140, 122, 140, 122,
 
	WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_build_tram_depot_widgets,
 
	BuildRoadDepotWndProc
 
};
 

	
 
static void ShowRoadDepotPicker()
 
{
 
	AllocateWindowDesc(_cur_roadtype == ROADTYPE_ROAD ? &_build_road_depot_desc : &_build_tram_depot_desc);
 
}
 

	
 
/** Enum referring to the widgets of the build road station window */
 
enum BuildRoadStationWidgets {
 
	BRSW_CLOSEBOX = 0,
 
	BRSW_CAPTION,
 
	BRSW_BACKGROUND,
 
	BRSW_STATION_NE,
 
	BRSW_STATION_SE,
 
	BRSW_STATION_SW,
 
	BRSW_STATION_NW,
 
	BRSW_STATION_X,
 
	BRSW_STATION_Y,
 
	BRSW_LT_OFF,
 
	BRSW_LT_ON,
 
	BRSW_INFO,
 
};
 

	
 
static void RoadStationPickerWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_CREATE:
 
		/* Trams don't have non-drivethrough stations */
 
		if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) {
 
			_road_station_picker_orientation = DIAGDIR_END;
 
		}
 
		SetWindowWidgetsDisabledState(w, _cur_roadtype == ROADTYPE_TRAM,
 
			BRSW_STATION_NE,
 
			BRSW_STATION_SE,
 
			BRSW_STATION_SW,
 
			BRSW_STATION_NW,
 
			WIDGET_LIST_END);
 

	
 
		LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
 
		LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
 
		break;
 

	
 
	case WE_PAINT: {
 
		if (WP(w, def_d).close) return;
 

	
 
		DrawWindowWidgets(w);
 

	
 
		if (_station_show_coverage) {
 
			int rad = _patches.modified_catchment ? CA_TRUCK /* = CA_BUS */ : 4;
 
			SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
 
		} else {
 
			SetTileSelectSize(1, 1);
 
		}
 

	
 
		StationType st = (w->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK;
 

	
 
		StationPickerDrawSprite(103, 35, st, RAILTYPE_BEGIN, ROADTYPE_ROAD, 0);
 
		StationPickerDrawSprite(103, 85, st, RAILTYPE_BEGIN, ROADTYPE_ROAD, 1);
 
		StationPickerDrawSprite( 35, 85, st, RAILTYPE_BEGIN, ROADTYPE_ROAD, 2);
 
		StationPickerDrawSprite( 35, 35, st, RAILTYPE_BEGIN, ROADTYPE_ROAD, 3);
 

	
 
		StationPickerDrawSprite(171, 35, st, RAILTYPE_BEGIN, _cur_roadtype, 4);
 
		StationPickerDrawSprite(171, 85, st, RAILTYPE_BEGIN, _cur_roadtype, 5);
 

	
 
		DrawStationCoverageAreaText(2, 146,
 
			(w->window_class == WC_BUS_STATION) ? SCT_PASSENGERS_ONLY : SCT_NON_PASSENGERS_ONLY,
 
			3);
 

	
 
	} break;
 

	
 
	case WE_CLICK: {
 
		switch (e->we.click.widget) {
 
			case BRSW_STATION_NE:
 
			case BRSW_STATION_SE:
 
			case BRSW_STATION_SW:
 
			case BRSW_STATION_NW:
 
			case BRSW_STATION_X:
 
			case BRSW_STATION_Y:
 
				RaiseWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
 
				_road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE);
 
				LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
 
				SndPlayFx(SND_15_BEEP);
 
				SetWindowDirty(w);
 
				break;
 

	
 
			case BRSW_LT_OFF:
 
			case BRSW_LT_ON:
 
				RaiseWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
 
				_station_show_coverage = (e->we.click.widget != BRSW_LT_OFF);
 
				LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
 
				SndPlayFx(SND_15_BEEP);
 
				SetWindowDirty(w);
 
				break;
 
		}
 
	} break;
 

	
 
	case WE_MOUSELOOP: {
 
		if (WP(w, def_d).close) {
 
			DeleteWindow(w);
 
			return;
 
		}
 

	
 
		CheckRedrawStationCoverage(w);
 
	} break;
 

	
 
	case WE_DESTROY:
 
		if (!WP(w, def_d).close) ResetObjectToPlace();
 
		break;
 
	}
 
}
 

	
 
/** Widget definition of the build raod station window */
 
static const Widget _rv_station_picker_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                         STR_018B_CLOSE_WINDOW},             // BRSW_CLOSEBOX
 
{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   206,     0,    13, STR_NULL,                         STR_018C_WINDOW_TITLE_DRAG_THIS},   // BRSW_CAPTION
 
{      WWT_PANEL,   RESIZE_NONE,     7,     0,   206,    14,   176, 0x0,                              STR_NULL},                          // BRSW_BACKGROUND
 

	
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    17,    66, 0x0,                              STR_NULL},                          // BRSW_STATION_NE
 
{      WWT_PANEL,   RESIZE_NONE,    14,    71,   136,    69,   118, 0x0,                              STR_NULL},                          // BRSW_STATION_SE
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    69,   118, 0x0,                              STR_NULL},                          // BRSW_STATION_SW
 
{      WWT_PANEL,   RESIZE_NONE,    14,     3,    68,    17,    66, 0x0,                              STR_NULL},                          // BRSW_STATION_NW
 
{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    17,    66, 0x0,                              STR_NULL},                          // BRSW_STATION_X
 
{      WWT_PANEL,   RESIZE_NONE,    14,   139,   204,    69,   118, 0x0,                              STR_NULL},                          // BRSW_STATION_Y
 

	
 
{    WWT_TEXTBTN,   RESIZE_NONE,    14,    10,    69,   133,   144, STR_02DB_OFF,                     STR_3065_DON_T_HIGHLIGHT_COVERAGE}, // BRSW_LT_OFF
 
{    WWT_TEXTBTN,   RESIZE_NONE,    14,    70,   129,   133,   144, STR_02DA_ON,                      STR_3064_HIGHLIGHT_COVERAGE_AREA},  // BRSW_LT_ON
 
{      WWT_LABEL,   RESIZE_NONE,     7,     0,   139,   120,   133, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL},                          // BRSW_INFO
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _rv_station_picker_desc = {
 
	WDP_AUTO, WDP_AUTO, 207, 177, 207, 177,
 
	WC_BUS_STATION, WC_BUILD_TOOLBAR,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_rv_station_picker_widgets,
 
	RoadStationPickerWndProc
 
};
 

	
 
static void ShowRVStationPicker(RoadStop::Type rs)
 
{
 
	Window *w = AllocateWindowDesc(&_rv_station_picker_desc);
 
	if (w == NULL) return;
 

	
 
	w->window_class = (rs == RoadStop::BUS) ? WC_BUS_STATION : WC_TRUCK_STATION;
 
	w->widget[BRSW_CAPTION].data = _road_type_infos[_cur_roadtype].picker_title[rs];
 
	for (uint i = BRSW_STATION_NE; i < BRSW_LT_OFF; i++) w->widget[i].tooltips = _road_type_infos[_cur_roadtype].picker_tooltip[rs];
 
}
 

	
 
void InitializeRoadGui()
 
{
 
	_road_depot_orientation = DIAGDIR_NW;
 
	_road_station_picker_orientation = DIAGDIR_NW;
 
}
src/table/files.h
Show inline comments
 
/* $Id$ */
 

	
 
/*
 
	MD5 sums of graphics files
 

	
 
	DOS -
 

	
 
	TRG1.GRF 9311676280e5b14077a8ee41c1b42192
 
	TRGC.GRF ed446637e034104c5559b32c18afe78d
 
	TRGH.GRF ee6616fb0e6ef6b24892c58c93d86fc9
 
	TRGI.GRF da6a6c9dcc451eec88d79211437b76a8
 
	TRGT.GRF fcde1d7e8a74197d72a62695884b909e
 
	SAMPLE.CAT 422ea3dd074d2859bb51639a6e0e85da
 

	
 
	WINDOWS -
 

	
 
	TRG1R.GRF b04ce593d8c5016e07473a743d7d3358
 
	TRGCR.GRF 3668f410c761a050b5e7095a2b14879b
 
	TRGHR.GRF 06bf2b7a31766f048baac2ebe43457b1
 
	TRGIR.GRF 0c2484ff6be49fc63a83be6ab5c38f32
 
	TRGTR.GRF de53650517fe661ceaa3138c6edb0eb8
 
	SAMPLE.CAT 9212e81e72badd4bbe1eaeae66458e10
 
*/
 

	
 

	
 
static FileList files_dos = {
 
	{
 
		{ "TRG1.GRF",      {0x93, 0x11, 0x67, 0x62, 0x80, 0xe5, 0xb1, 0x40, 0x77, 0xa8, 0xee, 0x41, 0xc1, 0xb4, 0x21, 0x92} }, //    0 - 4792 inclusive
 
		{ "TRGI.GRF",      {0xda, 0x6a, 0x6c, 0x9d, 0xcc, 0x45, 0x1e, 0xec, 0x88, 0xd7, 0x92, 0x11, 0x43, 0x7b, 0x76, 0xa8} }  // 4793 - 4889 inclusive
 
	}, {
 
		{ "TRGC.GRF",      {0xed, 0x44, 0x66, 0x37, 0xe0, 0x34, 0x10, 0x4c, 0x55, 0x59, 0xb3, 0x2c, 0x18, 0xaf, 0xe7, 0x8d} },
 
		{ "TRGH.GRF",      {0xee, 0x66, 0x16, 0xfb, 0x0e, 0x6e, 0xf6, 0xb2, 0x48, 0x92, 0xc5, 0x8c, 0x93, 0xd8, 0x6f, 0xc9} },
 
		{ "TRGT.GRF",      {0xfc, 0xde, 0x1d, 0x7e, 0x8a, 0x74, 0x19, 0x7d, 0x72, 0xa6, 0x26, 0x95, 0x88, 0x4b, 0x90, 0x9e} }
 
	},
 
	{ "SAMPLE.CAT",    {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda} },
 
	{ "CHARS.GRF",     {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
 
	{ "OPENTTDD.GRF",  {0x85, 0x5f, 0x38, 0xa6, 0xb2, 0xc9, 0xd7, 0x51, 0xaa, 0xca, 0x0d, 0xae, 0xd9, 0x8d, 0x71, 0x98} }
 
	{ "OPENTTDD.GRF",  {0x4a, 0x9e, 0x0d, 0x41, 0x9e, 0x66, 0x13, 0x17, 0xb9, 0x61, 0x81, 0xc7, 0xca, 0xef, 0x6b, 0xdc} }
 
};
 

	
 
static FileList files_win = {
 
	{
 
		{ "TRG1R.GRF",     {0xb0, 0x4c, 0xe5, 0x93, 0xd8, 0xc5, 0x01, 0x6e, 0x07, 0x47, 0x3a, 0x74, 0x3d, 0x7d, 0x33, 0x58} }, //    0 - 4792 inclusive
 
		{ "TRGIR.GRF",     {0x0c, 0x24, 0x84, 0xff, 0x6b, 0xe4, 0x9f, 0xc6, 0x3a, 0x83, 0xbe, 0x6a, 0xb5, 0xc3, 0x8f, 0x32} }  // 4793 - 4895 inclusive
 
	}, {
 
		{ "TRGCR.GRF",     {0x36, 0x68, 0xf4, 0x10, 0xc7, 0x61, 0xa0, 0x50, 0xb5, 0xe7, 0x09, 0x5a, 0x2b, 0x14, 0x87, 0x9b} },
 
		{ "TRGHR.GRF",     {0x06, 0xbf, 0x2b, 0x7a, 0x31, 0x76, 0x6f, 0x04, 0x8b, 0xaa, 0xc2, 0xeb, 0xe4, 0x34, 0x57, 0xb1} },
 
		{ "TRGTR.GRF",     {0xde, 0x53, 0x65, 0x05, 0x17, 0xfe, 0x66, 0x1c, 0xea, 0xa3, 0x13, 0x8c, 0x6e, 0xdb, 0x0e, 0xb8} }
 
	},
 
	{ "SAMPLE.CAT",    {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10} },
 
	{ "CHARS.GRF",     {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
 
	{ "OPENTTDW.GRF",  {0x3e, 0xff, 0xe8, 0x43, 0xc9, 0x31, 0xf6, 0x9d, 0x0b, 0x40, 0xb1, 0x64, 0xbf, 0x16, 0xde, 0x5a} }
 
	{ "OPENTTDW.GRF",  {0xe7, 0xe5, 0x4a, 0x12, 0x5c, 0xec, 0x46, 0x53, 0x1d, 0x37, 0x0a, 0xf4, 0x69, 0xf7, 0x4a, 0x9c} }
 
};
src/table/sprites.h
Show inline comments
 
/* $Id$ */
 

	
 
#ifndef SPRITES_H
 
#define SPRITES_H
 

	
 
/** @file sprites.h
 
 * This file contails all sprite-related enums and defines. These consist mainly of
 
 * the sprite numbers and a bunch of masks and macros to handle sprites and to get
 
 * rid of all the magic numbers in the code.
 
 *
 
 * @NOTE:
 
 * ALL SPRITE NUMBERS BELOW 5126 are in the main files
 
 *
 
 * All elements which consist of two elements should
 
 * have the same name and then suffixes
 
 *   _GROUND and _BUILD for building-type sprites
 
 *   _REAR and _FRONT for transport-type sprites (tiles where vehicles are on)
 
 * These sprites are split because of the Z order of the elements
 
 *  (like some parts of a bridge are behind the vehicle, while others are before)
 
 *
 
 *
 
 * All sprites which are described here are referenced only one to a handful of times
 
 * throughout the code. When introducing new sprite enums, use meaningful names.
 
 * Don't be lazy and typing, and only use abbrevations when their meaning is clear or
 
 * the length of the enum would get out of hand. In that case EXPLAIN THE ABBREVATION
 
 * IN THIS FILE, and perhaps add some comments in the code where it is used.
 
 * Now, don't whine about this being too much typing work if the enums are like
 
 * 30 characters in length. If your editor doen't help you simplifying your work,
 
 * get a proper editor. If your Operating Systems don't have any decent editors,
 
 * get a proper Operating System.
 
 *
 
 * @todo Split the "Sprites" enum into smaller chunks and document them
 
 */
 

	
 
enum Sprites {
 
	SPR_SELECT_TILE  = 752,
 
	SPR_DOT          = 774, // corner marker for lower/raise land
 
	SPR_DOT_SMALL    = 4078,
 
	SPR_WHITE_POINT  = 4079,
 

	
 
	/* ASCII */
 
	SPR_ASCII_SPACE       = 2,
 
	SPR_ASCII_SPACE_SMALL = 226,
 
	SPR_ASCII_SPACE_BIG   = 450,
 

	
 
	SPR_LARGE_SMALL_WINDOW = 682,
 

	
 
	/* Extra graphic spritenumbers */
 
	SPR_OPENTTD_BASE     = 4896,
 
	OPENTTD_SPRITE_COUNT = 134,
 
	OPENTTD_SPRITE_COUNT = 135,
 

	
 
	/* Halftile-selection sprites */
 
	SPR_HALFTILE_SELECTION_FLAT = SPR_OPENTTD_BASE,
 
	SPR_HALFTILE_SELECTION_DOWN = SPR_OPENTTD_BASE + 4,
 
	SPR_HALFTILE_SELECTION_UP   = SPR_OPENTTD_BASE + 8,
 

	
 
	SPR_SQUARE             = SPR_OPENTTD_BASE + 38, // colored square (used for newgrf compatibility)
 
	SPR_BLOT               = SPR_OPENTTD_BASE + 39, // colored circle (mainly used as vehicle profit marker and for server compatibility)
 
	SPR_LOCK               = SPR_OPENTTD_BASE + 40, // lock icon (for password protected servers)
 
	SPR_BOX_EMPTY          = SPR_OPENTTD_BASE + 41,
 
	SPR_BOX_CHECKED        = SPR_OPENTTD_BASE + 42,
 
	SPR_WARNING_SIGN       = SPR_OPENTTD_BASE + 43, // warning sign (shown if there are any newgrf errors)
 
	SPR_WINDOW_RESIZE      = SPR_OPENTTD_BASE + 44, // resize icon
 
	/* Arrow icons pointing in all 4 directions */
 
	SPR_ARROW_DOWN         = SPR_OPENTTD_BASE + 45,
 
	SPR_ARROW_UP           = SPR_OPENTTD_BASE + 46,
 
	SPR_ARROW_LEFT         = SPR_OPENTTD_BASE + 47,
 
	SPR_ARROW_RIGHT        = SPR_OPENTTD_BASE + 48,
 
	SPR_HOUSE_ICON         = SPR_OPENTTD_BASE + 49,
 
	SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 50,
 
	SPR_PIN_UP             = SPR_OPENTTD_BASE + 51,   // pin icon
 
	SPR_PIN_DOWN           = SPR_OPENTTD_BASE + 52,
 

	
 
	/* Clone vehicles stuff */
 
	SPR_CLONE_TRAIN    = SPR_OPENTTD_BASE + 106,
 
	SPR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 107,
 
	SPR_CLONE_SHIP     = SPR_OPENTTD_BASE + 108,
 
	SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 109,
 

	
 
	SPR_SELL_TRAIN        = SPR_OPENTTD_BASE +  93,
 
	SPR_SELL_ROADVEH      = SPR_OPENTTD_BASE +  94,
 
	SPR_SELL_SHIP         = SPR_OPENTTD_BASE +  95,
 
	SPR_SELL_AIRCRAFT     = SPR_OPENTTD_BASE +  96,
 
	SPR_SELL_ALL_TRAIN    = SPR_OPENTTD_BASE +  97,
 
	SPR_SELL_ALL_ROADVEH  = SPR_OPENTTD_BASE +  98,
 
	SPR_SELL_ALL_SHIP     = SPR_OPENTTD_BASE +  99,
 
	SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 100,
 
	SPR_REPLACE_TRAIN     = SPR_OPENTTD_BASE + 101,
 
	SPR_REPLACE_ROADVEH   = SPR_OPENTTD_BASE + 102,
 
	SPR_REPLACE_SHIP      = SPR_OPENTTD_BASE + 103,
 
	SPR_REPLACE_AIRCRAFT  = SPR_OPENTTD_BASE + 104,
 
	SPR_SELL_CHAIN_TRAIN  = SPR_OPENTTD_BASE + 105,
 

	
 
	SPR_GROUP_CREATE_TRAIN         = SPR_OPENTTD_BASE + 114,
 
	SPR_GROUP_CREATE_ROADVEH       = SPR_OPENTTD_BASE + 115,
 
	SPR_GROUP_CREATE_SHIP          = SPR_OPENTTD_BASE + 116,
 
	SPR_GROUP_CREATE_AIRCRAFT      = SPR_OPENTTD_BASE + 117,
 
	SPR_GROUP_DELETE_TRAIN         = SPR_OPENTTD_BASE + 118,
 
	SPR_GROUP_DELETE_ROADVEH       = SPR_OPENTTD_BASE + 119,
 
	SPR_GROUP_DELETE_SHIP          = SPR_OPENTTD_BASE + 120,
 
	SPR_GROUP_DELETE_AIRCRAFT      = SPR_OPENTTD_BASE + 121,
 
	SPR_GROUP_RENAME_TRAIN         = SPR_OPENTTD_BASE + 122,
 
	SPR_GROUP_RENAME_ROADVEH       = SPR_OPENTTD_BASE + 123,
 
	SPR_GROUP_RENAME_SHIP          = SPR_OPENTTD_BASE + 124,
 
	SPR_GROUP_RENAME_AIRCRAFT      = SPR_OPENTTD_BASE + 125,
 
	SPR_GROUP_REPLACE_ON_TRAIN     = SPR_OPENTTD_BASE + 126,
 
	SPR_GROUP_REPLACE_ON_ROADVEH   = SPR_OPENTTD_BASE + 127,
 
	SPR_GROUP_REPLACE_ON_SHIP      = SPR_OPENTTD_BASE + 128,
 
	SPR_GROUP_REPLACE_ON_AIRCRAFT  = SPR_OPENTTD_BASE + 129,
 
	SPR_GROUP_REPLACE_OFF_TRAIN    = SPR_OPENTTD_BASE + 130,
 
	SPR_GROUP_REPLACE_OFF_ROADVEH  = SPR_OPENTTD_BASE + 131,
 
	SPR_GROUP_REPLACE_OFF_SHIP     = SPR_OPENTTD_BASE + 132,
 
	SPR_GROUP_REPLACE_OFF_AIRCRAFT = SPR_OPENTTD_BASE + 133,
 

	
 
	SPR_SIGNALS_BASE  = SPR_OPENTTD_BASE + OPENTTD_SPRITE_COUNT,
 
	PRESIGNAL_SPRITE_COUNT                   =  48,
 
	PRESIGNAL_AND_SEMAPHORE_SPRITE_COUNT     = 112,
 
	PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT = 240,
 

	
 
	SPR_CANALS_BASE   = SPR_SIGNALS_BASE + PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT,
 
	CANALS_SPRITE_COUNT = 65,
 

	
 
	SPR_SLOPES_BASE              = SPR_CANALS_BASE + CANALS_SPRITE_COUNT,
 
	SPR_SLOPES_INCLINED_OFFSET   = 15,
 
	SPR_SLOPES_VIRTUAL_BASE      = SPR_SLOPES_BASE - SPR_SLOPES_INCLINED_OFFSET, // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations.
 
	SPR_TRKFOUND_BLOCK_SIZE      = 22, // The normal track foundation sprites are organized in blocks of 22.
 
	NORMAL_FOUNDATION_SPRITE_COUNT = 74,
 
	/* Halftile foundations */
 
	SPR_HALFTILE_FOUNDATION_BASE = SPR_SLOPES_BASE + NORMAL_FOUNDATION_SPRITE_COUNT,
 
	SPR_HALFTILE_BLOCK_SIZE      = 4,  // The half tile foundation sprites are organized in blocks of 4.
 
	NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT = 90,
 

	
 
	SPR_AUTORAIL_BASE = SPR_HALFTILE_FOUNDATION_BASE + NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT,
 
	AUTORAIL_SPRITE_COUNT = 55,
 

	
 
	SPR_ELRAIL_BASE   = SPR_AUTORAIL_BASE + AUTORAIL_SPRITE_COUNT,
 
	ELRAIL_SPRITE_COUNT = 48,
 

	
 
	SPR_2CCMAP_BASE   = SPR_ELRAIL_BASE + ELRAIL_SPRITE_COUNT,
 
	TWOCCMAP_SPRITE_COUNT = 256,
 

	
 
	SPR_AIRPORTX_BASE     = SPR_2CCMAP_BASE + TWOCCMAP_SPRITE_COUNT, // The sprites used for other airport angles
 
	SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE,
 
	SPR_NSRUNWAY1         = SPR_AIRPORTX_BASE + 1,
 
	SPR_NSRUNWAY2         = SPR_AIRPORTX_BASE + 2,
 
	SPR_NSRUNWAY3         = SPR_AIRPORTX_BASE + 3,
 
	SPR_NSRUNWAY4         = SPR_AIRPORTX_BASE + 4,
 
	SPR_NSRUNWAY_END      = SPR_AIRPORTX_BASE + 5,
 
	SPR_NEWHANGAR_S       = SPR_AIRPORTX_BASE + 6,
 
	SPR_NEWHANGAR_S_WALL  = SPR_AIRPORTX_BASE + 7,
 
	SPR_NEWHANGAR_W       = SPR_AIRPORTX_BASE + 8,
 
	SPR_NEWHANGAR_W_WALL  = SPR_AIRPORTX_BASE + 9,
 
	SPR_NEWHANGAR_N       = SPR_AIRPORTX_BASE + 10,
 
	SPR_NEWHANGAR_E       = SPR_AIRPORTX_BASE + 11,
 
	SPR_NEWHELIPAD        = SPR_AIRPORTX_BASE + 12,
 
	SPR_GRASS_RIGHT       = SPR_AIRPORTX_BASE + 13,
 
	SPR_GRASS_LEFT        = SPR_AIRPORTX_BASE + 14,
 
	AIRPORTX_SPRITE_COUNT = 15,
 

	
 
	SPR_ROADSTOP_BASE     = SPR_AIRPORTX_BASE + AIRPORTX_SPRITE_COUNT, // The sprites used for drive-through road stops
 
	SPR_BUS_STOP_DT_Y_W   = SPR_ROADSTOP_BASE,
 
	SPR_BUS_STOP_DT_Y_E   = SPR_ROADSTOP_BASE + 1,
 
	SPR_BUS_STOP_DT_X_W   = SPR_ROADSTOP_BASE + 2,
 
	SPR_BUS_STOP_DT_X_E   = SPR_ROADSTOP_BASE + 3,
 
	SPR_TRUCK_STOP_DT_Y_W = SPR_ROADSTOP_BASE + 4,
 
	SPR_TRUCK_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 5,
 
	SPR_TRUCK_STOP_DT_X_W = SPR_ROADSTOP_BASE + 6,
 
	SPR_TRUCK_STOP_DT_X_E = SPR_ROADSTOP_BASE + 7,
 
	ROADSTOP_SPRITE_COUNT = 8,
 

	
 
	/* Tramway sprites */
 
	SPR_TRAMWAY_BASE                 = SPR_ROADSTOP_BASE + ROADSTOP_SPRITE_COUNT,
 
	SPR_TRAMWAY_OVERLAY              = SPR_TRAMWAY_BASE + 4,
 
	SPR_TRAMWAY_TRAM                 = SPR_TRAMWAY_BASE + 27,
 
	SPR_TRAMWAY_SLOPED_OFFSET        = 11,
 
	SPR_TRAMWAY_BUS_STOP_DT_Y_W      = SPR_TRAMWAY_BASE + 25,
 
	SPR_TRAMWAY_BUS_STOP_DT_Y_E      = SPR_TRAMWAY_BASE + 23,
 
	SPR_TRAMWAY_BUS_STOP_DT_X_W      = SPR_TRAMWAY_BASE + 24,
 
	SPR_TRAMWAY_BUS_STOP_DT_X_E      = SPR_TRAMWAY_BASE + 26,
 
	SPR_TRAMWAY_PAVED_STRAIGHT_Y     = SPR_TRAMWAY_BASE + 46,
 
	SPR_TRAMWAY_PAVED_STRAIGHT_X     = SPR_TRAMWAY_BASE + 47,
 
	SPR_TRAMWAY_BACK_WIRES_STRAIGHT  = SPR_TRAMWAY_BASE + 55,
 
	SPR_TRAMWAY_FRONT_WIRES_STRAIGHT = SPR_TRAMWAY_BASE + 56,
 
	SPR_TRAMWAY_BACK_WIRES_SLOPED    = SPR_TRAMWAY_BASE + 72,
 
	SPR_TRAMWAY_FRONT_WIRES_SLOPED   = SPR_TRAMWAY_BASE + 68,
 
	SPR_TRAMWAY_TUNNEL_WIRES         = SPR_TRAMWAY_BASE + 80,
 
	SPR_TRAMWAY_BRIDGE               = SPR_TRAMWAY_BASE + 107,
 
	TRAMWAY_SPRITE_COUNT = 113,
 

	
 
	/* One way road sprites */
 
	SPR_ONEWAY_BASE = SPR_TRAMWAY_BASE + TRAMWAY_SPRITE_COUNT,
 
	ONEWAY_SPRITE_COUNT = 6,
 

	
 
	/* Flags sprites (in same order as enum NetworkLanguage) */
 
	SPR_FLAGS_BASE = SPR_ONEWAY_BASE + ONEWAY_SPRITE_COUNT,
 
	FLAGS_SPRITE_COUNT = 29,
 

	
 
	/* Not really a sprite, but an empty bounding box. Used to construct bounding boxes, that help sorting the sprites, but do not have a sprite associated. */
 
	SPR_EMPTY_BOUNDING_BOX = SPR_FLAGS_BASE + FLAGS_SPRITE_COUNT,
 
	EMPTY_BOUNDING_BOX_SPRITE_COUNT = 1,
 

	
 
	/* From where can we start putting NewGRFs? */
 
	SPR_NEWGRFS_BASE = SPR_EMPTY_BOUNDING_BOX + EMPTY_BOUNDING_BOX_SPRITE_COUNT,
 

	
 
	/* Manager face sprites */
 
	SPR_GRADIENT = 874, // background gradient behind manager face
 

	
 
	/* Icon showing player colour. */
 
	SPR_PLAYER_ICON = 747,
 

	
 
	/* is itself no foundation sprite, because tileh 0 has no foundation */
 
	SPR_FOUNDATION_BASE = 989,
 

	
 
	/* Shadow cell */
 
	SPR_SHADOW_CELL = 1004,
 

	
 
	/* Unmovables spritenumbers */
 
	SPR_UNMOVABLE_TRANSMITTER   = 2601,
 
	SPR_UNMOVABLE_LIGHTHOUSE    = 2602,
 
	SPR_TINYHQ_NORTH            = 2603,
 
	SPR_TINYHQ_EAST             = 2604,
 
	SPR_TINYHQ_WEST             = 2605,
 
	SPR_TINYHQ_SOUTH            = 2606,
 
	SPR_SMALLHQ_NORTH           = 2607,
 
	SPR_SMALLHQ_EAST            = 2608,
 
	SPR_SMALLHQ_WEST            = 2609,
 
	SPR_SMALLHQ_SOUTH           = 2610,
 
	SPR_MEDIUMHQ_NORTH          = 2611,
 
	SPR_MEDIUMHQ_NORTH_WALL     = 2612,
 
	SPR_MEDIUMHQ_EAST           = 2613,
 
	SPR_MEDIUMHQ_EAST_WALL      = 2614,
 
	SPR_MEDIUMHQ_WEST           = 2615,
 
	SPR_MEDIUMHQ_WEST_WALL      = 2616, //very tiny piece of wall
 
	SPR_MEDIUMHQ_SOUTH          = 2617,
 
	SPR_LARGEHQ_NORTH_GROUND    = 2618,
 
	SPR_LARGEHQ_NORTH_BUILD     = 2619,
 
	SPR_LARGEHQ_EAST_GROUND     = 2620,
 
	SPR_LARGEHQ_EAST_BUILD      = 2621,
 
	SPR_LARGEHQ_WEST_GROUND     = 2622,
 
	SPR_LARGEHQ_WEST_BUILD      = 2623,
 
	SPR_LARGEHQ_SOUTH           = 2624,
 
	SPR_HUGEHQ_NORTH_GROUND     = 2625,
 
	SPR_HUGEHQ_NORTH_BUILD      = 2626,
 
	SPR_HUGEHQ_EAST_GROUND      = 2627,
 
	SPR_HUGEHQ_EAST_BUILD       = 2628,
 
	SPR_HUGEHQ_WEST_GROUND      = 2629,
 
	SPR_HUGEHQ_WEST_BUILD       = 2630,
 
	SPR_HUGEHQ_SOUTH            = 2631,
 
	SPR_CONCRETE_GROUND         = 1420,
 
	SPR_STATUE_COMPANY          = 2632,
 
	SPR_BOUGHT_LAND             = 4790,
 

	
 
	/* sprites for rail and rail stations*/
 
	SPR_RAIL_SNOW_OFFSET        = 26,
 
	SPR_MONO_SNOW_OFFSET        = 26,
 
	SPR_MGLV_SNOW_OFFSET        = 26,
 

	
 
	SPR_RAIL_SINGLE_Y           = 1005,
 
	SPR_RAIL_SINGLE_X           = 1006,
 
	SPR_RAIL_SINGLE_NORTH       = 1007,
 
	SPR_RAIL_SINGLE_SOUTH       = 1008,
 
	SPR_RAIL_SINGLE_EAST        = 1009,
 
	SPR_RAIL_SINGLE_WEST        = 1010,
 
	SPR_RAIL_TRACK_Y            = 1011,
 
	SPR_RAIL_TRACK_X            = 1012,
 
	SPR_RAIL_TRACK_BASE         = 1018,
 
	SPR_RAIL_TRACK_N_S          = 1035,
 
	SPR_RAIL_TRACK_Y_SNOW       = 1037,
 
	SPR_RAIL_TRACK_X_SNOW       = 1038,
 
	SPR_RAIL_DEPOT_SE_1         = 1063,
 
	SPR_RAIL_DEPOT_SE_2         = 1064,
 
	SPR_RAIL_DEPOT_SW_1         = 1065,
 
	SPR_RAIL_DEPOT_SW_2         = 1066,
 
	SPR_RAIL_DEPOT_NE           = 1067,
 
	SPR_RAIL_DEPOT_NW           = 1068,
 
	SPR_RAIL_PLATFORM_Y_FRONT         = 1069,
 
	SPR_RAIL_PLATFORM_X_REAR          = 1070,
 
	SPR_RAIL_PLATFORM_Y_REAR          = 1071,
 
	SPR_RAIL_PLATFORM_X_FRONT         = 1072,
 
	SPR_RAIL_PLATFORM_BUILDING_X      = 1073,
 
	SPR_RAIL_PLATFORM_BUILDING_Y      = 1074,
 
	SPR_RAIL_PLATFORM_PILLARS_Y_FRONT = 1075,
 
	SPR_RAIL_PLATFORM_PILLARS_X_REAR  = 1076,
 
	SPR_RAIL_PLATFORM_PILLARS_Y_REAR  = 1077,
 
	SPR_RAIL_PLATFORM_PILLARS_X_FRONT = 1078,
 
	SPR_RAIL_ROOF_STRUCTURE_X_TILE_A  = 1079, //First half of the roof structure
 
	SPR_RAIL_ROOF_STRUCTURE_Y_TILE_A  = 1080,
 
	SPR_RAIL_ROOF_STRUCTURE_X_TILE_B  = 1081, //Second half of the roof structure
 
	SPR_RAIL_ROOF_STRUCTURE_Y_TILE_B  = 1082,
 
	SPR_RAIL_ROOF_GLASS_X_TILE_A      = 1083, //First half of the roof glass
 
	SPR_RAIL_ROOF_GLASS_Y_TILE_A      = 1084,
 
	SPR_RAIL_ROOF_GLASS_X_TILE_B      = 1085, //second half of the roof glass
 
	SPR_RAIL_ROOF_GLASS_Y_TILE_B      = 1086,
 
	SPR_MONO_SINGLE_Y                 = 1087,
 
	SPR_MONO_SINGLE_X                 = 1088,
 
	SPR_MONO_SINGLE_NORTH             = 1089,
 
	SPR_MONO_SINGLE_SOUTH             = 1090,
 
	SPR_MONO_SINGLE_EAST              = 1091,
 
	SPR_MONO_SINGLE_WEST              = 1092,
 
	SPR_MONO_TRACK_Y                  = 1093,
 
	SPR_MONO_TRACK_BASE               = 1100,
 
	SPR_MONO_TRACK_N_S                = 1117,
 
	SPR_MGLV_SINGLE_Y                 = 1169,
 
	SPR_MGLV_SINGLE_X                 = 1170,
 
	SPR_MGLV_SINGLE_NORTH             = 1171,
 
	SPR_MGLV_SINGLE_SOUTH             = 1172,
 
	SPR_MGLV_SINGLE_EAST              = 1173,
 
	SPR_MGLV_SINGLE_WEST              = 1174,
 
	SPR_MGLV_TRACK_Y                  = 1175,
 
	SPR_MGLV_TRACK_BASE               = 1182,
 
	SPR_MGLV_TRACK_N_S                = 1199,
 
	SPR_WAYPOINT_X_1            = SPR_OPENTTD_BASE + 78,
 
	SPR_WAYPOINT_X_2            = SPR_OPENTTD_BASE + 79,
 
	SPR_WAYPOINT_Y_1            = SPR_OPENTTD_BASE + 80,
 
	SPR_WAYPOINT_Y_2            = SPR_OPENTTD_BASE + 81,
 
	OFFSET_TILEH_IMPOSSIBLE     = 0,
 
	OFFSET_TILEH_1              = 14,
 
	OFFSET_TILEH_2              = 15,
 
	OFFSET_TILEH_3              = 22,
 
	OFFSET_TILEH_4              = 13,
 
	OFFSET_TILEH_6              = 21,
 
	OFFSET_TILEH_7              = 17,
 
	OFFSET_TILEH_8              = 12,
 
	OFFSET_TILEH_9              = 23,
 
	OFFSET_TILEH_11             = 18,
 
	OFFSET_TILEH_12             = 20,
 
	OFFSET_TILEH_13             = 19,
 
	OFFSET_TILEH_14             = 16,
 

	
 
	/* Track fences */
 
	SPR_TRACK_FENCE_FLAT_X    = 1301,
 
	SPR_TRACK_FENCE_FLAT_Y    = 1302,
 
	SPR_TRACK_FENCE_FLAT_VERT = 1303,
 
	SPR_TRACK_FENCE_FLAT_HORZ = 1304,
 
	SPR_TRACK_FENCE_SLOPE_SW  = 1305,
 
	SPR_TRACK_FENCE_SLOPE_SE  = 1306,
 
	SPR_TRACK_FENCE_SLOPE_NE  = 1307,
 
	SPR_TRACK_FENCE_SLOPE_NW  = 1308,
 

	
 
	/* Elrail stuff */
 
	/* Wires. First identifier is the direction of the track, second is the required placement of the pylon.
 
	 * "short" denotes a wire that requires a pylon on each end. Third identifier is the direction of the slope
 
	 * (in positive coordinate direction) */
 
	SPR_WIRE_X_SHORT      = SPR_ELRAIL_BASE + 0,
 
	SPR_WIRE_Y_SHORT      = SPR_ELRAIL_BASE + 1,
 
	SPR_WIRE_EW_SHORT     = SPR_ELRAIL_BASE + 2,
 
	SPR_WIRE_NS_SHORT     = SPR_ELRAIL_BASE + 3,
 
	SPR_WIRE_X_SHORT_DOWN = SPR_ELRAIL_BASE + 4,
 
	SPR_WIRE_Y_SHORT_UP   = SPR_ELRAIL_BASE + 5,
 
	SPR_WIRE_X_SHORT_UP   = SPR_ELRAIL_BASE + 6,
 
	SPR_WIRE_Y_SHORT_DOWN = SPR_ELRAIL_BASE + 7,
 

	
 
	SPR_WIRE_X_SW      = SPR_ELRAIL_BASE +  8,
 
	SPR_WIRE_Y_SE      = SPR_ELRAIL_BASE +  9,
 
	SPR_WIRE_EW_E      = SPR_ELRAIL_BASE + 10,
 
	SPR_WIRE_NS_S      = SPR_ELRAIL_BASE + 11,
 
	SPR_WIRE_X_SW_DOWN = SPR_ELRAIL_BASE + 12,
 
	SPR_WIRE_Y_SE_UP   = SPR_ELRAIL_BASE + 13,
 
	SPR_WIRE_X_SW_UP   = SPR_ELRAIL_BASE + 14,
 
	SPR_WIRE_Y_SE_DOWN = SPR_ELRAIL_BASE + 15,
 

	
 
	SPR_WIRE_X_NE      = SPR_ELRAIL_BASE + 16,
 
	SPR_WIRE_Y_NW      = SPR_ELRAIL_BASE + 17,
 
	SPR_WIRE_EW_W      = SPR_ELRAIL_BASE + 18,
 
	SPR_WIRE_NS_N      = SPR_ELRAIL_BASE + 19,
 
	SPR_WIRE_X_NE_DOWN = SPR_ELRAIL_BASE + 20,
 
	SPR_WIRE_Y_NW_UP   = SPR_ELRAIL_BASE + 21,
 
	SPR_WIRE_X_NE_UP   = SPR_ELRAIL_BASE + 22,
 
	SPR_WIRE_Y_NW_DOWN = SPR_ELRAIL_BASE + 23,
 

	
 
	/* Tunnel entries */
 
	SPR_WIRE_TUNNEL_NE = SPR_ELRAIL_BASE + 24,
 
	SPR_WIRE_TUNNEL_SE = SPR_ELRAIL_BASE + 25,
 
	SPR_WIRE_TUNNEL_SW = SPR_ELRAIL_BASE + 26,
 
	SPR_WIRE_TUNNEL_NW = SPR_ELRAIL_BASE + 27,
 

	
 
	/* Depot entries */
 
	SPR_WIRE_DEPOT_SW = SPR_ELRAIL_BASE + 24,
 
	SPR_WIRE_DEPOT_NW = SPR_ELRAIL_BASE + 25,
 
	SPR_WIRE_DEPOT_NE = SPR_ELRAIL_BASE + 26,
 
	SPR_WIRE_DEPOT_SE = SPR_ELRAIL_BASE + 27,
 

	
 

	
 
	/* Pylons, first identifier is the direction of the track, second the placement relative to the track */
 
	SPR_PYLON_Y_NE = SPR_ELRAIL_BASE + 28,
 
	SPR_PYLON_Y_SW = SPR_ELRAIL_BASE + 29,
 
	SPR_PYLON_X_NW = SPR_ELRAIL_BASE + 30,
 
	SPR_PYLON_X_SE = SPR_ELRAIL_BASE + 31,
 
	SPR_PYLON_EW_N = SPR_ELRAIL_BASE + 32,
 
	SPR_PYLON_EW_S = SPR_ELRAIL_BASE + 33,
 
	SPR_PYLON_NS_W = SPR_ELRAIL_BASE + 34,
 
	SPR_PYLON_NS_E = SPR_ELRAIL_BASE + 35,
 

	
 
	/* sprites for roads */
 
	SPR_ROAD_PAVED_STRAIGHT_Y       = 1313,
 
	SPR_ROAD_PAVED_STRAIGHT_X       = 1314,
 

	
 
	/* sprites for airports and airfields*/
 
	/* Small airports are AIRFIELD, everything else is AIRPORT */
 
	SPR_HELIPORT                    = 2633,
 
	SPR_AIRPORT_APRON               = 2634,
 
	SPR_AIRPORT_AIRCRAFT_STAND      = 2635,
 
	SPR_AIRPORT_TAXIWAY_NS_WEST     = 2636,
 
	SPR_AIRPORT_TAXIWAY_EW_SOUTH    = 2637,
 
	SPR_AIRPORT_TAXIWAY_XING_SOUTH  = 2638,
 
	SPR_AIRPORT_TAXIWAY_XING_WEST   = 2639,
 
	SPR_AIRPORT_TAXIWAY_NS_CTR      = 2640,
 
	SPR_AIRPORT_TAXIWAY_XING_EAST   = 2641,
 
	SPR_AIRPORT_TAXIWAY_NS_EAST     = 2642,
 
	SPR_AIRPORT_TAXIWAY_EW_NORTH    = 2643,
 
	SPR_AIRPORT_TAXIWAY_EW_CTR      = 2644,
 
	SPR_AIRPORT_RUNWAY_EXIT_A       = 2645,
 
	SPR_AIRPORT_RUNWAY_EXIT_B       = 2646,
 
	SPR_AIRPORT_RUNWAY_EXIT_C       = 2647,
 
	SPR_AIRPORT_RUNWAY_EXIT_D       = 2648,
 
	SPR_AIRPORT_RUNWAY_END          = 2649, //We should have different ends
 
	SPR_AIRPORT_TERMINAL_A          = 2650,
 
	SPR_AIRPORT_TOWER               = 2651,
 
	SPR_AIRPORT_CONCOURSE           = 2652,
 
	SPR_AIRPORT_TERMINAL_B          = 2653,
 
	SPR_AIRPORT_TERMINAL_C          = 2654,
 
	SPR_AIRPORT_HANGAR_FRONT        = 2655,
 
	SPR_AIRPORT_HANGAR_REAR         = 2656,
 
	SPR_AIRFIELD_HANGAR_FRONT       = 2657,
 
	SPR_AIRFIELD_HANGAR_REAR        = 2658,
 
	SPR_AIRPORT_JETWAY_1            = 2659,
 
	SPR_AIRPORT_JETWAY_2            = 2660,
 
	SPR_AIRPORT_JETWAY_3            = 2661,
 
	SPR_AIRPORT_PASSENGER_TUNNEL    = 2662,
 
	SPR_AIRPORT_FENCE_Y             = 2663,
 
	SPR_AIRPORT_FENCE_X             = 2664,
 
	SPR_AIRFIELD_TERM_A             = 2665,
 
	SPR_AIRFIELD_TERM_B             = 2666,
 
	SPR_AIRFIELD_TERM_C_GROUND      = 2667,
 
@@ -857,660 +857,661 @@ enum Sprites {
 
	SPR_BTTUB_X_ROAD_REAR_MID   = 2576,
 
	SPR_BTTUB_X_ROAD_REAR_END   = 2577,
 
	SPR_BTTUB_Y_ROAD_REAR_BEG   = 2578,
 
	SPR_BTTUB_Y_ROAD_REAR_MID   = 2579,
 
	SPR_BTTUB_Y_ROAD_REAR_END   = 2580,
 
	SPR_BTTUB_X_MONO_REAR_BEG   = 2581,
 
	SPR_BTTUB_X_MONO_REAR_MID   = 2582,
 
	SPR_BTTUB_X_MONO_REAR_END   = 2583,
 
	SPR_BTTUB_Y_MONO_REAR_BEG   = 2584,
 
	SPR_BTTUB_Y_MONO_REAR_MID   = 2585,
 
	SPR_BTTUB_Y_MONO_REAR_END   = 2586,
 
	SPR_BTTUB_X_MGLV_REAR_BEG   = 2587,
 
	SPR_BTTUB_X_MGLV_REAR_MID   = 2588,
 
	SPR_BTTUB_X_MGLV_REAR_END   = 2589,
 
	SPR_BTTUB_Y_MGLV_REAR_BEG   = 2590,
 
	SPR_BTTUB_Y_MGLV_REAR_MID   = 2591,
 
	SPR_BTTUB_Y_MGLV_REAR_END   = 2592,
 

	
 

	
 
	/* ramps (for all bridges except wood and tubular?)*/
 
	SPR_BTGEN_RAIL_X_SLOPE_DOWN = 2437,
 
	SPR_BTGEN_RAIL_X_SLOPE_UP   = 2438,
 
	SPR_BTGEN_RAIL_Y_SLOPE_DOWN = 2439,
 
	SPR_BTGEN_RAIL_Y_SLOPE_UP   = 2440,
 
	SPR_BTGEN_RAIL_RAMP_X_UP    = 2441,
 
	SPR_BTGEN_RAIL_RAMP_X_DOWN  = 2442,
 
	SPR_BTGEN_RAIL_RAMP_Y_UP    = 2443,
 
	SPR_BTGEN_RAIL_RAMP_Y_DOWN  = 2444,
 
	SPR_BTGEN_ROAD_X_SLOPE_DOWN = 2445,
 
	SPR_BTGEN_ROAD_X_SLOPE_UP   = 2446,
 
	SPR_BTGEN_ROAD_Y_SLOPE_DOWN = 2447,
 
	SPR_BTGEN_ROAD_Y_SLOPE_UP   = 2448,
 
	SPR_BTGEN_ROAD_RAMP_X_UP    = 2449,
 
	SPR_BTGEN_ROAD_RAMP_X_DOWN  = 2450,
 
	SPR_BTGEN_ROAD_RAMP_Y_UP    = 2451,
 
	SPR_BTGEN_ROAD_RAMP_Y_DOWN  = 2452,
 
	SPR_BTGEN_MONO_X_SLOPE_DOWN = 4326,
 
	SPR_BTGEN_MONO_X_SLOPE_UP   = 4327,
 
	SPR_BTGEN_MONO_Y_SLOPE_DOWN = 4328,
 
	SPR_BTGEN_MONO_Y_SLOPE_UP   = 4329,
 
	SPR_BTGEN_MONO_RAMP_X_UP    = 4330,
 
	SPR_BTGEN_MONO_RAMP_X_DOWN  = 4331,
 
	SPR_BTGEN_MONO_RAMP_Y_UP    = 4332,
 
	SPR_BTGEN_MONO_RAMP_Y_DOWN  = 4333,
 
	SPR_BTGEN_MGLV_X_SLOPE_DOWN = 4366,
 
	SPR_BTGEN_MGLV_X_SLOPE_UP   = 4367,
 
	SPR_BTGEN_MGLV_Y_SLOPE_DOWN = 4368,
 
	SPR_BTGEN_MGLV_Y_SLOPE_UP   = 4369,
 
	SPR_BTGEN_MGLV_RAMP_X_UP    = 4370,
 
	SPR_BTGEN_MGLV_RAMP_X_DOWN  = 4371,
 
	SPR_BTGEN_MGLV_RAMP_Y_UP    = 4372,
 
	SPR_BTGEN_MGLV_RAMP_Y_DOWN  = 4373,
 

	
 
	/* Vehicle view sprites */
 
	SPR_CENTRE_VIEW_VEHICLE   = 683,
 
	SPR_SEND_TRAIN_TODEPOT    = 685,
 
	SPR_SEND_ROADVEH_TODEPOT  = 686,
 
	SPR_SEND_AIRCRAFT_TODEPOT = 687,
 
	SPR_SEND_SHIP_TODEPOT     = 688,
 

	
 
	SPR_IGNORE_SIGNALS        = 689,
 
	SPR_SHOW_ORDERS           = 690,
 
	SPR_SHOW_VEHICLE_DETAILS  = 691,
 
	SPR_REFIT_VEHICLE         = 692,
 
	SPR_FORCE_VEHICLE_TURN    = 715,
 

	
 
	/* Vehicle sprite-flags (red/green) */
 
	SPR_FLAG_VEH_STOPPED  = 3090,
 
	SPR_FLAG_VEH_RUNNING  = 3091,
 

	
 
	SPR_VEH_BUS_SW_VIEW   = 3097,
 
	SPR_VEH_BUS_SIDE_VIEW = 3098,
 

	
 
	/* Rotor sprite numbers */
 
	SPR_ROTOR_STOPPED   = 3901,
 
	SPR_ROTOR_MOVING_1  = 3902,
 
	SPR_ROTOR_MOVING_3  = 3904,
 

	
 
	/* Town/house sprites */
 
	SPR_LIFT = 1443,
 

	
 
	//used in town_land.h
 
	//CNST1..3 = Those are the different stages of construction
 
	//The last 2 hexas correspond to the type of building it represent, if any
 
	SPR_CNST1_TALLOFFICE_00                 = 1421,
 
	SPR_CNST2_TALLOFFICE_00                 = 1422,
 
	SPR_CNST3_TALLOFFICE_00                 = 1423,
 
	SPR_GROUND_TALLOFFICE_00                = 1424,
 
	SPR_BUILD_TALLOFFICE_00                 = 1425, //temperate
 
	SPR_CNST1_OFFICE_01                     = 1426,
 
	SPR_CNST2_OFFICE_01                     = 1427,
 
	SPR_BUILD_OFFICE_01                     = 1428, //temperate
 
	SPR_GROUND_OFFICE_01                    = 1429,
 
	SPR_CNST1_SMLBLCKFLATS_02               = 1430, //Small Block of Flats
 
	SPR_CNST2_SMLBLCKFLATS_02               = 1431,
 
	SPR_BUILD_SMLBLCKFLATS_02               = 1432, //temperate
 
	SPR_GROUND_SMLBLCKFLATS_02              = 1433,
 
	SPR_CNST1_TEMPCHURCH                    = 1434,
 
	SPR_CNST2_TEMPCHURCH                    = 1435,
 
	SPR_BUILD_TEMPCHURCH                    = 1436,
 
	SPR_GROUND_TEMPCHURCH                   = 1437,
 
	SPR_CNST1_LARGEOFFICE_04                = 1440,
 
	SPR_CNST2_LARGEOFFICE_04                = 1441,
 
	SPR_BUILD_LARGEOFFICE_04                = 1442, // temperate, sub-arctic, subtropical
 
	SPR_BUILD_LARGEOFFICE_04_SNOW           = 4569, // same, with snow
 
	// These are in fact two houses for the same houseID.  so V1 and V2
 
	SPR_CNST1_TOWNHOUSE_06_V1               = 1444,
 
	SPR_CNST2_TOWNHOUSE_06_V1               = 1445,
 
	SPR_BUILD_TOWNHOUSE_06_V1               = 1446, // 1st variation
 
	SPR_GRND_TOWNHOUSE_06_V1                = 1447,
 
	SPR_CNST1_TOWNHOUSE_06_V2               = 1501, // used as ground, but is stage1
 
	SPR_CNST1_TOWNHOUSE_06_V2_P             = 1502, // pipes extensions for previous
 
	SPR_CNST2_TOWNHOUSE_06_V2_G             = 1503, // Ground of cnst stage 2
 
	SPR_CNST2_TOWNHOUSE_06_V2               = 1504, // real cnst stage 2
 
	SPR_GRND_TOWNHOUSE_06_V2                = 1505,
 
	SPR_BUILD_TOWNHOUSE_06_V2               = 1506, // 2nd variation
 
	SPR_CNST1_HOTEL_07_NW                   = 1448,
 
	SPR_CNST2_HOTEL_07_NW                   = 1449,
 
	SPR_BUILD_HOTEL_07_NW                   = 1450,
 
	SPR_CNST1_HOTEL_07_SE                   = 1451,
 
	SPR_CNST2_HOTEL_07_SE                   = 1452,
 
	SPR_BUILD_HOTEL_07_SE                   = 1453,
 
	SPR_STATUE_HORSERIDER_09                = 1454,
 
	SPR_FOUNTAIN_0A                         = 1455,
 
	SPR_PARKSTATUE_0B                       = 1456,
 
	SPR_PARKALLEY_0C                        = 1457,
 
	SPR_CNST1_OFFICE_0D                     = 1458,
 
	SPR_CNST2_OFFICE_0D                     = 1459,
 
	SPR_BUILD_OFFICE_0D                     = 1460,
 
	SPR_CNST1_SHOPOFFICE_0E                 = 1461,
 
	SPR_CNST2_SHOPOFFICE_0E                 = 1462,
 
	SPR_BUILD_SHOPOFFICE_0E                 = 1463,
 
	SPR_CNST1_SHOPOFFICE_0F                 = 1464,
 
	SPR_CNST2_SHOPOFFICE_0F                 = 1465,
 
	SPR_BUILD_SHOPOFFICE_0F                 = 1466,
 

	
 
	/* Easter egg/disaster sprites */
 
	SPR_BLIMP                  = 3905, // Zeppelin
 
	SPR_BLIMP_CRASHING         = 3906,
 
	SPR_BLIMP_CRASHED          = 3907,
 
	SPR_UFO_SMALL_SCOUT        = 3908, // XCOM - UFO Defense
 
	SPR_UFO_SMALL_SCOUT_DARKER = 3909,
 
	SPR_SUB_SMALL_NE           = 3910, // Silent Service
 
	SPR_SUB_SMALL_SE           = 3911,
 
	SPR_SUB_SMALL_SW           = 3912,
 
	SPR_SUB_SMALL_NW           = 3913,
 
	SPR_SUB_LARGE_NE           = 3914,
 
	SPR_SUB_LARGE_SE           = 3915,
 
	SPR_SUB_LARGE_SW           = 3916,
 
	SPR_SUB_LARGE_NW           = 3917,
 
	SPR_F_15                   = 3918, // F-15 Strike Eagle
 
	SPR_F_15_FIRING            = 3919,
 
	SPR_UFO_HARVESTER          = 3920, // XCOM - UFO Defense
 
	SPR_XCOM_SKYRANGER         = 3921,
 
	SPR_AH_64A                 = 3922, // Gunship
 
	SPR_AH_64A_FIRING          = 3923,
 

	
 
	/* main_gui.c */
 
	SPR_IMG_TERRAFORM_UP    = 694,
 
	SPR_IMG_TERRAFORM_DOWN  = 695,
 
	SPR_IMG_DYNAMITE        = 703,
 
	SPR_IMG_ROCKS           = 4084,
 
	SPR_IMG_LIGHTHOUSE_DESERT = 4085, // XXX - is Desert image on the desert-climate
 
	SPR_IMG_TRANSMITTER     = 4086,
 
	SPR_IMG_LEVEL_LAND      = SPR_OPENTTD_BASE + 91,
 
	SPR_IMG_BUILD_CANAL     = SPR_OPENTTD_BASE + 88,
 
	SPR_IMG_BUILD_LOCK      = SPR_CANALS_BASE + 64,
 
	SPR_IMG_PAUSE           = 726,
 
	SPR_IMG_FASTFORWARD     = SPR_OPENTTD_BASE + 90,
 
	SPR_IMG_SETTINGS        = 751,
 
	SPR_IMG_SAVE            = 724,
 
	SPR_IMG_SMALLMAP        = 708,
 
	SPR_IMG_TOWN            = 4077,
 
	SPR_IMG_SUBSIDIES       = 679,
 
	SPR_IMG_COMPANY_LIST    = 1299,
 
	SPR_IMG_COMPANY_FINANCE = 737,
 
	SPR_IMG_COMPANY_GENERAL = 743,
 
	SPR_IMG_GRAPHS          = 745,
 
	SPR_IMG_COMPANY_LEAGUE  = 684,
 
	SPR_IMG_SHOW_COUNTOURS  = 738,
 
	SPR_IMG_SHOW_VEHICLES   = 739,
 
	SPR_IMG_SHOW_ROUTES     = 740,
 
	SPR_IMG_INDUSTRY        = 741,
 
	SPR_IMG_PLANTTREES      = 742,
 
	SPR_IMG_TRAINLIST       = 731,
 
	SPR_IMG_TRUCKLIST       = 732,
 
	SPR_IMG_SHIPLIST        = 733,
 
	SPR_IMG_AIRPLANESLIST   = 734,
 
	SPR_IMG_ZOOMIN          = 735,
 
	SPR_IMG_ZOOMOUT         = 736,
 
	SPR_IMG_BUILDRAIL       = 727,
 
	SPR_IMG_BUILDROAD       = 728,
 
	SPR_IMG_BUILDWATER      = 729,
 
	SPR_IMG_BUILDAIR        = 730,
 
	SPR_IMG_LANDSCAPING     = 4083,
 
	SPR_IMG_MUSIC           = 713,
 
	SPR_IMG_MESSAGES        = 680,
 
	SPR_IMG_QUERY           = 723,
 
	SPR_IMG_SIGN            = 4082,
 
	SPR_IMG_BUY_LAND        = 4791,
 

	
 
	/* OPEN TRANSPORT TYCOON in gamescreen */
 
	SPR_OTTD_O                = 4842,
 
	SPR_OTTD_P                = 4841,
 
	SPR_OTTD_E                = SPR_OPENTTD_BASE + 12,
 
	SPR_OTTD_D                = SPR_OPENTTD_BASE + 13,
 
	SPR_OTTD_N                = 4839,
 
	SPR_OTTD_T                = 4836,
 
	SPR_OTTD_R                = 4837,
 
	SPR_OTTD_A                = 4838,
 
	SPR_OTTD_S                = 4840,
 
	SPR_OTTD_Y                = 4843,
 
	SPR_OTTD_C                = 4844,
 

	
 
	SPR_HIGHSCORE_CHART_BEGIN = 4804,
 
	SPR_TYCOON_IMG1_BEGIN     = 4814,
 
	SPR_TYCOON_IMG2_BEGIN     = 4824,
 

	
 
	/* Industry sprites */
 
	SPR_IT_SUGAR_MINE_SIEVE         = 4775,
 
	SPR_IT_SUGAR_MINE_CLOUDS        = 4784,
 
	SPR_IT_SUGAR_MINE_PILE          = 4780,
 
	SPR_IT_TOFFEE_QUARRY_TOFFEE     = 4766,
 
	SPR_IT_TOFFEE_QUARRY_SHOVEL     = 4767,
 
	SPR_IT_BUBBLE_GENERATOR_SPRING  = 4746,
 
	SPR_IT_BUBBLE_GENERATOR_BUBBLE  = 4747,
 
	SPR_IT_TOY_FACTORY_STAMP_HOLDER = 4717,
 
	SPR_IT_TOY_FACTORY_STAMP        = 4718,
 
	SPR_IT_TOY_FACTORY_CLAY         = 4719,
 
	SPR_IT_TOY_FACTORY_ROBOT        = 4720,
 
	SPR_IT_POWER_PLANT_TRANSFORMERS = 2054,
 

	
 
	/*small icons of cargo available in station waiting*/
 
	SPR_CARGO_PASSENGER             = 4297,
 
	SPR_CARGO_COAL                  = 4298,
 
	SPR_CARGO_MAIL                  = 4299,
 
	SPR_CARGO_OIL                   = 4300,
 
	SPR_CARGO_LIVESTOCK             = 4301,
 
	SPR_CARGO_GOODS                 = 4302,
 
	SPR_CARGO_GRAIN                 = 4303,
 
	SPR_CARGO_WOOD                  = 4304,
 
	SPR_CARGO_IRON_ORE              = 4305,
 
	SPR_CARGO_STEEL                 = 4306,
 
	SPR_CARGO_VALUES_GOLD           = 4307,  /*shared between temperate and arctic*/
 
	SPR_CARGO_FRUIT                 = 4308,
 
	SPR_CARGO_COPPER_ORE            = 4309,
 
	SPR_CARGO_WATERCOLA             = 4310,  /*shared between desert and toyland*/
 
	SPR_CARGO_DIAMONDS              = 4311,
 
	SPR_CARGO_FOOD                  = 4312,
 
	SPR_CARGO_PAPER                 = 4313,
 
	SPR_CARGO_RUBBER                = 4314,
 
	SPR_CARGO_CANDY                 = 4315,
 
	SPR_CARGO_SUGAR                 = 4316,
 
	SPR_CARGO_TOYS                  = 4317,
 
	SPR_CARGO_COTTONCANDY           = 4318,
 
	SPR_CARGO_FIZZYDRINK            = 4319,
 
	SPR_CARGO_TOFFEE                = 4320,
 
	SPR_CARGO_BUBBLES               = 4321,
 
	SPR_CARGO_PLASTIC               = 4322,
 
	SPR_CARGO_BATTERIES             = 4323,
 

	
 
	/* Effect vehicles */
 
	SPR_BULLDOZER_NE = 1416,
 
	SPR_BULLDOZER_SE = 1417,
 
	SPR_BULLDOZER_SW = 1418,
 
	SPR_BULLDOZER_NW = 1419,
 

	
 
	SPR_SMOKE_0 = 2040,
 
	SPR_SMOKE_1 = 2041,
 
	SPR_SMOKE_2 = 2042,
 
	SPR_SMOKE_3 = 2043,
 
	SPR_SMOKE_4 = 2044,
 

	
 
	SPR_DIESEL_SMOKE_0 = 3073,
 
	SPR_DIESEL_SMOKE_1 = 3074,
 
	SPR_DIESEL_SMOKE_2 = 3075,
 
	SPR_DIESEL_SMOKE_3 = 3076,
 
	SPR_DIESEL_SMOKE_4 = 3077,
 
	SPR_DIESEL_SMOKE_5 = 3078,
 

	
 
	SPR_STEAM_SMOKE_0 = 3079,
 
	SPR_STEAM_SMOKE_1 = 3080,
 
	SPR_STEAM_SMOKE_2 = 3081,
 
	SPR_STEAM_SMOKE_3 = 3082,
 
	SPR_STEAM_SMOKE_4 = 3083,
 

	
 
	SPR_ELECTRIC_SPARK_0 = 3084,
 
	SPR_ELECTRIC_SPARK_1 = 3085,
 
	SPR_ELECTRIC_SPARK_2 = 3086,
 
	SPR_ELECTRIC_SPARK_3 = 3087,
 
	SPR_ELECTRIC_SPARK_4 = 3088,
 
	SPR_ELECTRIC_SPARK_5 = 3089,
 

	
 
	SPR_CHIMNEY_SMOKE_0 = 3701,
 
	SPR_CHIMNEY_SMOKE_1 = 3702,
 
	SPR_CHIMNEY_SMOKE_2 = 3703,
 
	SPR_CHIMNEY_SMOKE_3 = 3704,
 
	SPR_CHIMNEY_SMOKE_4 = 3705,
 
	SPR_CHIMNEY_SMOKE_5 = 3706,
 
	SPR_CHIMNEY_SMOKE_6 = 3707,
 
	SPR_CHIMNEY_SMOKE_7 = 3708,
 

	
 
	SPR_EXPLOSION_LARGE_0 = 3709,
 
	SPR_EXPLOSION_LARGE_1 = 3710,
 
	SPR_EXPLOSION_LARGE_2 = 3711,
 
	SPR_EXPLOSION_LARGE_3 = 3712,
 
	SPR_EXPLOSION_LARGE_4 = 3713,
 
	SPR_EXPLOSION_LARGE_5 = 3714,
 
	SPR_EXPLOSION_LARGE_6 = 3715,
 
	SPR_EXPLOSION_LARGE_7 = 3716,
 
	SPR_EXPLOSION_LARGE_8 = 3717,
 
	SPR_EXPLOSION_LARGE_9 = 3718,
 
	SPR_EXPLOSION_LARGE_A = 3719,
 
	SPR_EXPLOSION_LARGE_B = 3720,
 
	SPR_EXPLOSION_LARGE_C = 3721,
 
	SPR_EXPLOSION_LARGE_D = 3722,
 
	SPR_EXPLOSION_LARGE_E = 3723,
 
	SPR_EXPLOSION_LARGE_F = 3724,
 

	
 
	SPR_EXPLOSION_SMALL_0 = 3725,
 
	SPR_EXPLOSION_SMALL_1 = 3726,
 
	SPR_EXPLOSION_SMALL_2 = 3727,
 
	SPR_EXPLOSION_SMALL_3 = 3728,
 
	SPR_EXPLOSION_SMALL_4 = 3729,
 
	SPR_EXPLOSION_SMALL_5 = 3730,
 
	SPR_EXPLOSION_SMALL_6 = 3731,
 
	SPR_EXPLOSION_SMALL_7 = 3732,
 
	SPR_EXPLOSION_SMALL_8 = 3733,
 
	SPR_EXPLOSION_SMALL_9 = 3734,
 
	SPR_EXPLOSION_SMALL_A = 3735,
 
	SPR_EXPLOSION_SMALL_B = 3736,
 

	
 
	SPR_BREAKDOWN_SMOKE_0 = 3737,
 
	SPR_BREAKDOWN_SMOKE_1 = 3738,
 
	SPR_BREAKDOWN_SMOKE_2 = 3739,
 
	SPR_BREAKDOWN_SMOKE_3 = 3740,
 

	
 
	SPR_BUBBLE_0 = 4748,
 
	SPR_BUBBLE_1 = 4749,
 
	SPR_BUBBLE_2 = 4750,
 
	SPR_BUBBLE_GENERATE_0 = 4751,
 
	SPR_BUBBLE_GENERATE_1 = 4752,
 
	SPR_BUBBLE_GENERATE_2 = 4753,
 
	SPR_BUBBLE_GENERATE_3 = 4754,
 
	SPR_BUBBLE_BURST_0 = 4755,
 
	SPR_BUBBLE_BURST_1 = 4756,
 
	SPR_BUBBLE_BURST_2 = 4757,
 
	SPR_BUBBLE_ABSORB_0 = 4758,
 
	SPR_BUBBLE_ABSORB_1 = 4759,
 
	SPR_BUBBLE_ABSORB_2 = 4760,
 
	SPR_BUBBLE_ABSORB_3 = 4761,
 
	SPR_BUBBLE_ABSORB_4 = 4762,
 

	
 
	/* Electrified rail build menu */
 
	SPR_BUILD_NS_ELRAIL = SPR_ELRAIL_BASE + 36,
 
	SPR_BUILD_X_ELRAIL  = SPR_ELRAIL_BASE + 37,
 
	SPR_BUILD_EW_ELRAIL = SPR_ELRAIL_BASE + 38,
 
	SPR_BUILD_Y_ELRAIL  = SPR_ELRAIL_BASE + 39,
 
	SPR_BUILD_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 44,
 

	
 
	/* airport_gui.c */
 
	SPR_IMG_AIRPORT       = 744,
 

	
 
	/* dock_gui.c */
 
	SPR_IMG_SHIP_DEPOT    = 748,
 
	SPR_IMG_SHIP_DOCK     = 746,
 
	SPR_IMG_BOUY          = 693,
 

	
 
	/* music_gui.c */
 
	SPR_IMG_SKIP_TO_PREV  = 709,
 
	SPR_IMG_SKIP_TO_NEXT  = 710,
 
	SPR_IMG_STOP_MUSIC    = 711,
 
	SPR_IMG_PLAY_MUSIC    = 712,
 

	
 
	/* road_gui.c */
 
	SPR_IMG_ROAD_Y_DIR    = 1309,
 
	SPR_IMG_ROAD_X_DIR    = 1310,
 
	SPR_IMG_AUTOROAD      = SPR_OPENTTD_BASE + 82,
 
	SPR_IMG_ROAD_DEPOT    = 1295,
 
	SPR_IMG_BUS_STATION   = 749,
 
	SPR_IMG_TRUCK_BAY     = 750,
 
	SPR_IMG_BRIDGE        = 2594,
 
	SPR_IMG_ROAD_TUNNEL   = 2429,
 
	SPR_IMG_REMOVE        = 714,
 
	SPR_IMG_ROAD_ONE_WAY  = SPR_OPENTTD_BASE + 134,
 
	SPR_IMG_TRAMWAY_Y_DIR = SPR_TRAMWAY_BASE + 0,
 
	SPR_IMG_TRAMWAY_X_DIR = SPR_TRAMWAY_BASE + 1,
 
	SPR_IMG_AUTOTRAM      = SPR_OPENTTD_BASE + 84,
 

	
 
	/* rail_gui.c */
 
	SPR_IMG_RAIL_NS    = 1251,
 
	SPR_IMG_RAIL_NE    = 1252,
 
	SPR_IMG_RAIL_EW    = 1253,
 
	SPR_IMG_RAIL_NW    = 1254,
 
	SPR_IMG_AUTORAIL   = SPR_OPENTTD_BASE + 53,
 
	SPR_IMG_AUTOELRAIL = SPR_OPENTTD_BASE + 57,
 
	SPR_IMG_AUTOMONO   = SPR_OPENTTD_BASE + 63,
 
	SPR_IMG_AUTOMAGLEV = SPR_OPENTTD_BASE + 69,
 

	
 
	SPR_IMG_WAYPOINT = SPR_OPENTTD_BASE + 76,
 

	
 
	SPR_IMG_DEPOT_RAIL   = 1294,
 
	SPR_IMG_DEPOT_ELRAIL = SPR_OPENTTD_BASE + 61,
 
	SPR_IMG_DEPOT_MONO   = SPR_OPENTTD_BASE + 67,
 
	SPR_IMG_DEPOT_MAGLEV = SPR_OPENTTD_BASE + 73,
 

	
 
	SPR_IMG_RAIL_STATION = 1298,
 
	SPR_IMG_RAIL_SIGNALS = 1291,
 

	
 
	SPR_IMG_TUNNEL_RAIL   = 2430,
 
	SPR_IMG_TUNNEL_MONO   = 2431,
 
	SPR_IMG_TUNNEL_MAGLEV = 2432,
 

	
 
	SPR_IMG_CONVERT_RAIL   = SPR_OPENTTD_BASE + 55,
 
	SPR_IMG_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 59,
 
	SPR_IMG_CONVERT_MONO   = SPR_OPENTTD_BASE + 65,
 
	SPR_IMG_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 71,
 

	
 
	/* intro_gui.c, genworld_gui.c */
 
	SPR_SELECT_TEMPERATE           = 4882,
 
	SPR_SELECT_TEMPERATE_PUSHED    = 4883,
 
	SPR_SELECT_SUB_ARCTIC          = 4884,
 
	SPR_SELECT_SUB_ARCTIC_PUSHED   = 4885,
 
	SPR_SELECT_SUB_TROPICAL        = 4886,
 
	SPR_SELECT_SUB_TROPICAL_PUSHED = 4887,
 
	SPR_SELECT_TOYLAND             = 4888,
 
	SPR_SELECT_TOYLAND_PUSHED      = 4889,
 
};
 

	
 
/** Cursor sprite numbers */
 
enum CursorSprite {
 
	/* Terraform */
 
	/* Cursors */
 
	SPR_CURSOR_MOUSE          = 0,
 
	SPR_CURSOR_ZZZ            = 1,
 
	SPR_CURSOR_BOUY           = 702,
 
	SPR_CURSOR_QUERY          = 719,
 
	SPR_CURSOR_HQ             = 720,
 
	SPR_CURSOR_SHIP_DEPOT     = 721,
 
	SPR_CURSOR_SIGN           = 722,
 

	
 
	SPR_CURSOR_TREE           = 2010,
 
	SPR_CURSOR_BUY_LAND       = 4792,
 
	SPR_CURSOR_LEVEL_LAND     = SPR_OPENTTD_BASE + 92,
 

	
 
	SPR_CURSOR_TOWN           = 4080,
 
	SPR_CURSOR_INDUSTRY       = 4081,
 
	SPR_CURSOR_ROCKY_AREA     = 4087,
 
	SPR_CURSOR_LIGHTHOUSE     = 4088,
 
	SPR_CURSOR_TRANSMITTER    = 4089,
 

	
 
	/* airport cursors */
 
	SPR_CURSOR_AIRPORT        = 2724,
 

	
 
	/* dock cursors */
 
	SPR_CURSOR_DOCK           = 3668,
 
	SPR_CURSOR_CANAL          = SPR_OPENTTD_BASE + 89,
 
	SPR_CURSOR_LOCK           = SPR_OPENTTD_BASE + 87,
 

	
 
	/* shared road & rail cursors */
 
	SPR_CURSOR_BRIDGE         = 2593,
 

	
 
	/* rail cursors */
 
	SPR_CURSOR_NS_TRACK       = 1263,
 
	SPR_CURSOR_SWNE_TRACK     = 1264,
 
	SPR_CURSOR_EW_TRACK       = 1265,
 
	SPR_CURSOR_NWSE_TRACK     = 1266,
 

	
 
	SPR_CURSOR_NS_MONO        = 1267,
 
	SPR_CURSOR_SWNE_MONO      = 1268,
 
	SPR_CURSOR_EW_MONO        = 1269,
 
	SPR_CURSOR_NWSE_MONO      = 1270,
 

	
 
	SPR_CURSOR_NS_MAGLEV      = 1271,
 
	SPR_CURSOR_SWNE_MAGLEV    = 1272,
 
	SPR_CURSOR_EW_MAGLEV      = 1273,
 
	SPR_CURSOR_NWSE_MAGLEV    = 1274,
 

	
 
	SPR_CURSOR_NS_ELRAIL      = SPR_ELRAIL_BASE + 40,
 
	SPR_CURSOR_SWNE_ELRAIL    = SPR_ELRAIL_BASE + 41,
 
	SPR_CURSOR_EW_ELRAIL      = SPR_ELRAIL_BASE + 42,
 
	SPR_CURSOR_NWSE_ELRAIL    = SPR_ELRAIL_BASE + 43,
 

	
 
	SPR_CURSOR_RAIL_STATION   = 1300,
 

	
 
	SPR_CURSOR_TUNNEL_RAIL    = 2434,
 
	SPR_CURSOR_TUNNEL_ELRAIL  = SPR_ELRAIL_BASE + 45,
 
	SPR_CURSOR_TUNNEL_MONO    = 2435,
 
	SPR_CURSOR_TUNNEL_MAGLEV  = 2436,
 

	
 
	SPR_CURSOR_AUTORAIL       = SPR_OPENTTD_BASE + 54,
 
	SPR_CURSOR_AUTOELRAIL     = SPR_OPENTTD_BASE + 58,
 
	SPR_CURSOR_AUTOMONO       = SPR_OPENTTD_BASE + 64,
 
	SPR_CURSOR_AUTOMAGLEV     = SPR_OPENTTD_BASE + 70,
 

	
 
	SPR_CURSOR_WAYPOINT       = SPR_OPENTTD_BASE + 77,
 

	
 
	SPR_CURSOR_RAIL_DEPOT     = 1296,
 
	SPR_CURSOR_ELRAIL_DEPOT   = SPR_OPENTTD_BASE + 62,
 
	SPR_CURSOR_MONO_DEPOT     = SPR_OPENTTD_BASE + 68,
 
	SPR_CURSOR_MAGLEV_DEPOT   = SPR_OPENTTD_BASE + 74,
 

	
 
	SPR_CURSOR_CONVERT_RAIL   = SPR_OPENTTD_BASE + 56,
 
	SPR_CURSOR_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 60,
 
	SPR_CURSOR_CONVERT_MONO   = SPR_OPENTTD_BASE + 66,
 
	SPR_CURSOR_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 72,
 

	
 
	/* road cursors */
 
	SPR_CURSOR_ROAD_NESW      = 1311,
 
	SPR_CURSOR_ROAD_NWSE      = 1312,
 
	SPR_CURSOR_AUTOROAD       = SPR_OPENTTD_BASE + 83,
 
	SPR_CURSOR_TRAMWAY_NESW   = SPR_TRAMWAY_BASE + 2,
 
	SPR_CURSOR_TRAMWAY_NWSE   = SPR_TRAMWAY_BASE + 3,
 
	SPR_CURSOR_AUTOTRAM       = SPR_OPENTTD_BASE + 85,
 

	
 
	SPR_CURSOR_ROAD_DEPOT     = 1297,
 
	SPR_CURSOR_BUS_STATION    = 2725,
 
	SPR_CURSOR_TRUCK_STATION  = 2726,
 
	SPR_CURSOR_ROAD_TUNNEL    = 2433,
 

	
 
	SPR_CURSOR_CLONE_TRAIN    = SPR_OPENTTD_BASE + 110,
 
	SPR_CURSOR_CLONE_ROADVEH  = SPR_OPENTTD_BASE + 111,
 
	SPR_CURSOR_CLONE_SHIP     = SPR_OPENTTD_BASE + 112,
 
	SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 113,
 
};
 

	
 
/// Animation macro in table/animcursors.h (_animcursors[])
 
enum AnimCursors {
 
	ANIMCURSOR_DEMOLISH     = -1, ///<  704 -  707 - demolish dynamite
 
	ANIMCURSOR_LOWERLAND    = -2, ///<  699 -  701 - lower land tool
 
	ANIMCURSOR_RAISELAND    = -3, ///<  696 -  698 - raise land tool
 
	ANIMCURSOR_PICKSTATION  = -4, ///<  716 -  718 - goto-order icon
 
	ANIMCURSOR_BUILDSIGNALS = -5, ///< 1292 - 1293 - build signal
 
};
 

	
 
/**
 
 * Bitmask setup. For the graphics system, 32 bits are used to define
 
 * the sprite to be displayed. This variable contains various information:<p>
 
 * <ul><li> SPRITE_WIDTH is the number of bits used for the actual sprite to be displayed.
 
 * This always starts at bit 0.</li>
 
 * <li> TRANSPARENT_BIT is the bit number which toggles sprite transparency</li>
 
 * <li> RECOLOR_BIT toggles the recoloring system</li>
 
 * <li> PALETTE_SPRITE_WIDTH and PALETTE_SPRITE_START determine the position and number of
 
 * bits used for the recoloring process. For transparency, it must be 0x322.</li></ul>
 
 */
 
enum SpriteSetup {
 
	TRANSPARENT_BIT = 31,       ///< toggles transparency in the sprite
 
	RECOLOR_BIT = 30,           ///< toggles recoloring in the sprite
 
	OFFSET_BIT = 29,
 

	
 
	PALETTE_WIDTH = 24,         ///< number of bits of the sprite containing the recolor palette
 
	SPRITE_WIDTH = 24,          ///< number of bits for the sprite number
 
};
 

	
 
/**
 
 * these masks change the colors of the palette for a sprite.
 
 * Apart from this bit, a sprite number is needed to define
 
 * the palette used for recoloring. This palette is stored
 
 * in the bits marked by PALETTE_SPRITE_MASK.
 
 * @note Do not modify this enum. Alter SpriteSetup instead
 
 * @see SpriteSetup
 
 */
 
enum Modifiers {
 
	SPRITE_MODIFIER_USE_OFFSET    = OFFSET_BIT,
 
	SPRITE_MODIFIER_OPAQUE        = OFFSET_BIT,
 
	///when a sprite is to be displayed transparently, this bit needs to be set.
 
	PALETTE_MODIFIER_TRANSPARENT  = TRANSPARENT_BIT,
 
	///this bit is set when a recoloring process is in action
 
	PALETTE_MODIFIER_COLOR        = RECOLOR_BIT,
 

	
 
	//This is used for the GfxFillRect function
 
	///Used to draw a "grey out" rectangle. @see GfxFillRect
 
	PALETTE_MODIFIER_GREYOUT        = TRANSPARENT_BIT,
 
	///Set when a colortable mode is used. @see GfxFillRect
 
	USE_COLORTABLE                  = RECOLOR_BIT,
 
};
 

	
 
/** Masks needed for sprite operations.
 
 * @note Do not modify this enum. Alter SpriteSetup instead
 
 * @see SpriteSetup */
 
enum SpriteMasks {
 
	///Maximum number of sprites that can be loaded at a given time.
 
	MAX_SPRITES = 1 << SPRITE_WIDTH,
 
	///The mask to for the main sprite
 
	SPRITE_MASK = MAX_SPRITES - 1,
 

	
 
	MAX_PALETTES = 1 << PALETTE_WIDTH,
 
	///The mask for the auxiliary sprite (the one that takes care of recoloring)
 
	PALETTE_MASK = MAX_PALETTES - 1,
 
};
 

	
 
assert_compile( (1 << TRANSPARENT_BIT & SPRITE_MASK) == 0 );
 
assert_compile( (1 << RECOLOR_BIT & SPRITE_MASK) == 0 );
 
assert_compile( !(TRANSPARENT_BIT == RECOLOR_BIT) );
 
assert_compile( (1 << TRANSPARENT_BIT & PALETTE_MASK) == 0);
 
assert_compile( (1 << RECOLOR_BIT & PALETTE_MASK) == 0 );
 

	
 
enum Recoloring {
 
	PALETTE_RECOLOR_START       = 0x307,
 
};
 

	
 

	
 
static const SpriteID PALETTE_CRASH = 0x324;
 
static const SpriteID PAL_NONE = 0;
 

	
 
	//note: these numbers are already the modified once the renderer needs.
 
	//the actual sprite number is the upper 16 bits of the number
 

	
 
	///Here a puslating red tile is drawn if you try to build a wrong tunnel or raise/lower land where it is not possible
 
static const SpriteID PALETTE_TILE_RED_PULSATING  = 0x303;
 
	///makes a square red. is used when removing rails or other stuff
 
static const SpriteID PALETTE_SEL_TILE_RED        = 0x304;
 
	///This draws a blueish square (catchment areas for example)
 
static const SpriteID PALETTE_SEL_TILE_BLUE       = 0x305;
 
	//0x306 is a real sprite (the little dot you get when you try to raise/lower a corner of the map
 
	//here the color switches begin
 
	//use this if you add stuff to the value, so that the resulting color
 
	//is not a fixed value.
 
	//NOTE THAT THE SWITCH 0x8000 is NOT present in _TO_COLORS yet!
 
enum PaletteSprites {
 
	PALETTE_TO_DARK_BLUE        = 0x307,
 
	PALETTE_TO_PALE_GREEN       = 0x308,
 
	PALETTE_TO_PINK             = 0x309,
 
	PALETTE_TO_YELLOW           = 0x30A,
 
	PALETTE_TO_RED              = 0x30B,
 
	PALETTE_TO_LIGHT_BLUE       = 0x30C,
 
	PALETTE_TO_GREEN            = 0x30D,
 
	PALETTE_TO_DARK_GREEN       = 0x30E,
 
	PALETTE_TO_BLUE             = 0x30F,
 
	PALETTE_TO_CREAM            = 0x310,
 
	//maybe don't use as player color because it doesn't display in the graphs?
 
	PALETTE_TO_MAUVE            = 0x311,
 
	PALETTE_TO_PURPLE           = 0x312,
 
	PALETTE_TO_ORANGE           = 0x313,
 
	PALETTE_TO_BROWN            = 0x314,
 
	PALETTE_TO_GREY             = 0x315,
 
	PALETTE_TO_WHITE            = 0x316,
 
	//sets color to bare land stuff, for rail and road (and crossings)
 
	PALETTE_TO_BARE_LAND        = 0x317,
 
	//XXX is 318-31A really not used?
 
	PALETTE_TO_STRUCT_BLUE      = 0x31B,
 
	//structure color to something brownish (for the cantilever bridges for example)
 
	PALETTE_TO_STRUCT_BROWN     = 0x31C,
 
	PALETTE_TO_STRUCT_WHITE     = 0x31D,
 
	//sets bridge or structure to red, little concrete one and cantilever use this one for example
 
	PALETTE_TO_STRUCT_RED       = 0x31E,
 
	PALETTE_TO_STRUCT_GREEN     = 0x31F,
 
	PALETTE_TO_STRUCT_CONCRETE  = 0x320, //Sets the suspension bridge to concrete, also other strucutures use it
 
	PALETTE_TO_STRUCT_YELLOW    = 0x321, //Sets the bridge color to yellow (suspension and tubular)
 
	PALETTE_TO_TRANSPARENT      = 0x322, //This sets the sprite to transparent
 
	//This is used for changing the tubular bridges to the silicon display, or some grayish color
 
	PALETTE_TO_STRUCT_GREY      = 0x323,
 

	
 
	//XXX - const - PALETTE_CRASH               = 0x324,  //this changes stuff to the "crash color"
 
	//XXX another place where structures are colored.
 
	//I'm not sure which colors these are
 
	PALETTE_59E                 = 0x59E,
 
	PALETTE_59F                 = 0x59F,
 
};
 

	
 
#endif /* SPRITES_H */
0 comments (0 inline, 0 general)