Changeset - r4604:56d029090928
[Not reviewed]
master
0 4 0
peter1138 - 18 years ago 2006-09-15 17:36:54
peter1138@openttd.org
(svn r6456) - Replace single colour scheme for passenger wagons with separate schemes for each of steam, diesel or electric engines. Savegames from the previous revision will not load.
4 files changed with 21 insertions and 6 deletions:
0 comments (0 inline, 0 general)
lang/english.txt
Show inline comments
 
@@ -1985,385 +1985,387 @@ STR_680E_VEHICLE_BREAKDOWNS             
 
STR_680F_SUBSIDY_MULTIPLIER                                     :{LTBLUE}Subsidy multiplier: {ORANGE}{STRING}
 
STR_6810_COST_OF_CONSTRUCTION                                   :{LTBLUE}Cost of construction: {ORANGE}{STRING}
 
STR_6811_TERRAIN_TYPE                                           :{LTBLUE}Terrain type: {ORANGE}{STRING}
 
STR_6812_QUANTITY_OF_SEA_LAKES                                  :{LTBLUE}Quantity of sea/lakes: {ORANGE}{STRING}
 
STR_6813_ECONOMY                                                :{LTBLUE}Economy: {ORANGE}{STRING}
 
STR_6814_TRAIN_REVERSING                                        :{LTBLUE}Train reversing: {ORANGE}{STRING}
 
STR_6815_DISASTERS                                              :{LTBLUE}Disasters: {ORANGE}{STRING}
 
STR_16816_CITY_APPROVAL                                         :{LTBLUE}City council's attitude towards area restructuring: {ORANGE}{STRING}
 
############ range for difficulty settings ends
 

	
 
STR_26816_NONE                                                  :None
 
STR_6816_LOW                                                    :Low
 
STR_6817_NORMAL                                                 :Normal
 
STR_6818_HIGH                                                   :High
 
STR_6819                                                        :{BLACK}<
 
STR_681A                                                        :{BLACK}>
 
STR_681B_VERY_SLOW                                              :Very Slow
 
STR_681C_SLOW                                                   :Slow
 
STR_681D_MEDIUM                                                 :Medium
 
STR_681E_FAST                                                   :Fast
 
STR_681F_VERY_FAST                                              :Very Fast
 
STR_VERY_LOW                                                    :Very Low
 
STR_6820_LOW                                                    :Low
 
STR_6821_MEDIUM                                                 :Medium
 
STR_6822_HIGH                                                   :High
 
STR_6823_NONE                                                   :None
 
STR_6824_REDUCED                                                :Reduced
 
STR_6825_NORMAL                                                 :Normal
 
STR_6826_X1_5                                                   :x1.5
 
STR_6827_X2                                                     :x2
 
STR_6828_X3                                                     :x3
 
STR_6829_X4                                                     :x4
 
STR_682A_VERY_FLAT                                              :Very Flat
 
STR_682B_FLAT                                                   :Flat
 
STR_682C_HILLY                                                  :Hilly
 
STR_682D_MOUNTAINOUS                                            :Mountainous
 
STR_682E_STEADY                                                 :Steady
 
STR_682F_FLUCTUATING                                            :Fluctuating
 
STR_6830_IMMEDIATE                                              :Immediate
 
STR_6831_3_MONTHS_AFTER_PLAYER                                  :3 months after player
 
STR_6832_6_MONTHS_AFTER_PLAYER                                  :6 months after player
 
STR_6833_9_MONTHS_AFTER_PLAYER                                  :9 months after player
 
STR_6834_AT_END_OF_LINE_AND_AT_STATIONS                         :At end of line, and at stations
 
STR_6835_AT_END_OF_LINE_ONLY                                    :At end of line only
 
STR_6836_OFF                                                    :Off
 
STR_6837_ON                                                     :On
 
STR_6838_SHOW_HI_SCORE_CHART                                    :{BLACK}Show hi-score chart
 
STR_6839_PERMISSIVE                                             :Permissive
 
STR_683A_TOLERANT                                               :Tolerant
 
STR_683B_HOSTILE                                                :Hostile
 

	
 
##id 0x7000
 
STR_7000                                                        :
 
STR_7001                                                        :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
 
STR_7002_PLAYER                                                 :(Player {COMMA})
 
STR_7004_NEW_FACE                                               :{BLACK}New Face
 
STR_7005_COLOR_SCHEME                                           :{BLACK}Colour Scheme
 
STR_7006_COLOR_SCHEME                                           :{GOLD}Colour Scheme:
 
STR_7007_NEW_COLOR_SCHEME                                       :{WHITE}New Colour Scheme
 
STR_7008_COMPANY_NAME                                           :{BLACK}Company Name
 
STR_7009_PRESIDENT_NAME                                         :{BLACK}Manager Name
 
STR_700A_COMPANY_NAME                                           :Company Name
 
STR_700B_PRESIDENT_S_NAME                                       :Manager's Name
 
STR_700C_CAN_T_CHANGE_COMPANY_NAME                              :{WHITE}Can't change company name...
 
STR_700D_CAN_T_CHANGE_PRESIDENT                                 :{WHITE}Can't change manager's name...
 
STR_700E_FINANCES                                               :{WHITE}{COMPANY} Finances {BLACK}{PLAYERNAME}
 
STR_700F_EXPENDITURE_INCOME                                     :{WHITE}Expenditure/Income
 
STR_7010                                                        :{WHITE}{NUM}
 
STR_7011_CONSTRUCTION                                           :{GOLD}Construction
 
STR_7012_NEW_VEHICLES                                           :{GOLD}New Vehicles
 
STR_7013_TRAIN_RUNNING_COSTS                                    :{GOLD}Train Running Costs
 
STR_7014_ROAD_VEH_RUNNING_COSTS                                 :{GOLD}Road Veh. Running Costs
 
STR_7015_AIRCRAFT_RUNNING_COSTS                                 :{GOLD}Aircraft Running Costs
 
STR_7016_SHIP_RUNNING_COSTS                                     :{GOLD}Ship Running Costs
 
STR_7017_PROPERTY_MAINTENANCE                                   :{GOLD}Property Maintenance
 
STR_7018_TRAIN_INCOME                                           :{GOLD}Train Income
 
STR_7019_ROAD_VEHICLES_INCOME                                   :{GOLD}Road Vehicle Income
 
STR_701A_AIRCRAFT_INCOME                                        :{GOLD}Aircraft Income
 
STR_701B_SHIP_INCOME                                            :{GOLD}Ship Income
 
STR_701C_LOAN_INTEREST                                          :{GOLD}Loan Interest
 
STR_701D_OTHER                                                  :{GOLD}Other
 
STR_701E                                                        :{BLACK}-{CURRENCY64}
 
STR_701F                                                        :{BLACK}+{CURRENCY64}
 
STR_7020_TOTAL                                                  :{WHITE}Total:
 
STR_7021                                                        :{COMPANY}{PLAYERNAME}
 
STR_7022_INCOME_GRAPH                                           :{WHITE}Income Graph
 
STR_CURRCOMPACT                                                 :{CURRCOMPACT64}
 
STR_7024                                                        :{COMMA}
 
STR_7025_OPERATING_PROFIT_GRAPH                                 :{WHITE}Operating Profit Graph
 
STR_7026_BANK_BALANCE                                           :{WHITE}Bank Balance
 
STR_7027_LOAN                                                   :{WHITE}Loan
 
STR_MAX_LOAN                                                    :{WHITE}Max Loan:  {BLACK}{CURRENCY64}
 
STR_7028                                                        :{BLACK}{CURRENCY64}
 
STR_7029_BORROW                                                 :{BLACK}Borrow {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 
STR_702A_REPAY                                                  :{BLACK}Repay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
 
STR_702B_MAXIMUM_PERMITTED_LOAN                                 :{WHITE}...maximum permitted loan size is {CURRENCY}
 
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY                            :{WHITE}Can't borrow any more money...
 
STR_702D_LOAN_ALREADY_REPAYED                                   :{WHITE}...no loan to repay
 
STR_702E_REQUIRED                                               :{WHITE}...{CURRENCY} required
 
STR_702F_CAN_T_REPAY_LOAN                                       :{WHITE}Can't repay loan...
 
STR_INSUFFICIENT_FUNDS                                          :{WHITE}Can't give away money that is loaned from the bank...
 
STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT                          :{BLACK}Select new face for manager
 
STR_7031_CHANGE_THE_COMPANY_VEHICLE                             :{BLACK}Change the company vehicle livery
 
STR_7032_CHANGE_THE_PRESIDENT_S                                 :{BLACK}Change the manager's name
 
STR_7033_CHANGE_THE_COMPANY_NAME                                :{BLACK}Change the company name
 
STR_7034_CLICK_ON_SELECTED_NEW_COLOR                            :{BLACK}Click on desired colour scheme
 
STR_7035_INCREASE_SIZE_OF_LOAN                                  :{BLACK}Increase size of loan
 
STR_7036_REPAY_PART_OF_LOAN                                     :{BLACK}Repay part of loan
 
STR_7037_PRESIDENT                                              :{WHITE}{PLAYERNAME}{}{GOLD}(Manager)
 
STR_7038_INAUGURATED                                            :{GOLD}Inaugurated: {WHITE}{NUM}
 
STR_7039_VEHICLES                                               :{GOLD}Vehicles:
 
STR_TRAINS                                                      :{WHITE}{COMMA} train{P "" s}
 
STR_ROAD_VEHICLES                                               :{WHITE}{COMMA} road vehicle{P "" s}
 
STR_AIRCRAFT                                                    :{WHITE}{COMMA} aircraft
 
STR_SHIPS                                                       :{WHITE}{COMMA} ship{P "" s}
 
STR_7042_NONE                                                   :{WHITE}None
 
STR_7043_FACE_SELECTION                                         :{WHITE}Face Selection
 
STR_7044_MALE                                                   :{BLACK}Male
 
STR_7045_FEMALE                                                 :{BLACK}Female
 
STR_7046_NEW_FACE                                               :{BLACK}New Face
 
STR_7047_CANCEL_NEW_FACE_SELECTION                              :{BLACK}Cancel new face selection
 
STR_7048_ACCEPT_NEW_FACE_SELECTION                              :{BLACK}Accept new face selection
 
STR_7049_SELECT_MALE_FACES                                      :{BLACK}Select male faces
 
STR_704A_SELECT_FEMALE_FACES                                    :{BLACK}Select female faces
 
STR_704B_GENERATE_RANDOM_NEW_FACE                               :{BLACK}Generate random new face
 
STR_704C_KEY                                                    :{BLACK}Key
 
STR_704D_SHOW_KEY_TO_GRAPHS                                     :{BLACK}Show key to graphs
 
STR_704E_KEY_TO_COMPANY_GRAPHS                                  :{WHITE}Key to company graphs
 
STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY                           :{BLACK}Click here to toggle company's entry on graph on/off
 
STR_7050_UNITS_OF_CARGO_DELIVERED                               :{WHITE}Units of cargo delivered
 
STR_7051_COMPANY_PERFORMANCE_RATINGS                            :{WHITE}Company performance ratings (maximum rating=1000)
 
STR_7052_COMPANY_VALUES                                         :{WHITE}Company values
 
STR_7053_COMPANY_LEAGUE_TABLE                                   :{WHITE}Company League Table
 
STR_7054                                                        :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
 
STR_7055                                                        :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME}  '{STRING}'
 
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE                           :{BLACK}{BIGFONT}Transport company in trouble!
 
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED                           :{BLACK}{BIGFONT}{COMPANY} will be sold off or declared bankrupt unless performance increases soon!
 
STR_7058_PRESIDENT                                              :{BLACK}{PLAYERNAME}{}(Manager)
 
STR_7059_TRANSPORT_COMPANY_MERGER                               :{BLACK}{BIGFONT}Transport company merger!
 
STR_705A_HAS_BEEN_SOLD_TO_FOR                                   :{BLACK}{BIGFONT}{COMPANY} has been sold to {COMPANY} for {CURRENCY}!
 
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT                         :{WHITE}We are looking for a transport company to take-over our company.{}{}Do you want to purchase {COMPANY} for {CURRENCY}?
 
STR_705C_BANKRUPT                                               :{BLACK}{BIGFONT}Bankrupt!
 
STR_705D_HAS_BEEN_CLOSED_DOWN_BY                                :{BLACK}{BIGFONT}{COMPANY} has been closed down by creditors and all assets sold off!
 
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED                         :{BLACK}{BIGFONT}New transport company launched!
 
STR_705F_STARTS_CONSTRUCTION_NEAR                               :{BLACK}{BIGFONT}{COMPANY} starts construction near {TOWN}!
 
STR_7060_CAN_T_BUY_COMPANY                                      :{WHITE}Can't buy company...
 
STR_7061_CARGO_PAYMENT_RATES                                    :{WHITE}Cargo Payment Rates
 
STR_7062_DAYS_IN_TRANSIT                                        :{BLACK}{TINYFONT}Days in transit
 
STR_7063_PAYMENT_FOR_DELIVERING                                 :{BLACK}{TINYFONT}Payment for delivering 10 units (or 10,000 litres) of cargo a distance of 20 squares
 
STR_7064_TOGGLE_GRAPH_FOR_CARGO                                 :{BLACK}Toggle graph for cargo type on/off
 
STR_7065                                                        :{BLACK}{TINYFONT}{STRING}
 
STR_7066_ENGINEER                                               :Engineer
 
STR_7067_TRAFFIC_MANAGER                                        :Traffic Manager
 
STR_7068_TRANSPORT_COORDINATOR                                  :Transport Coordinator
 
STR_7069_ROUTE_SUPERVISOR                                       :Route Supervisor
 
STR_706A_DIRECTOR                                               :Director
 
STR_706B_CHIEF_EXECUTIVE                                        :Chief Executive
 
STR_706C_CHAIRMAN                                               :Chairman
 
STR_706D_PRESIDENT                                              :President
 
STR_706E_TYCOON                                                 :Tycoon
 
STR_706F_BUILD_HQ                                               :{BLACK}Build HQ
 
STR_7070_BUILD_COMPANY_HEADQUARTERS                             :{BLACK}Build company headquarters / view company headquarters
 
STR_RELOCATE_COMPANY_HEADQUARTERS                               :{BLACK}Rebuild company headquarters elsewhere for 1% cost of company value
 
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS                       :{WHITE}Can't build company headquarters...
 
STR_7072_VIEW_HQ                                                :{BLACK}View HQ
 
STR_RELOCATE_HQ                                                 :{BLACK}Relocate HQ
 
STR_COMPANY_PASSWORD                                            :{BLACK}Password
 
STR_COMPANY_PASSWORD_TOOLTIP                                    :{BLACK}Password-protect your company to prevent unauthorised users from joining.
 
STR_SET_COMPANY_PASSWORD                                        :Set company password
 
STR_7073_WORLD_RECESSION_FINANCIAL                              :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
 
STR_7074_RECESSION_OVER_UPTURN_IN                               :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
 
STR_7075_TOGGLE_LARGE_SMALL_WINDOW                              :{BLACK}Toggle large/small window size
 
STR_7076_COMPANY_VALUE                                          :{GOLD}Company value: {WHITE}{CURRENCY64}
 
STR_7077_BUY_25_SHARE_IN_COMPANY                                :{BLACK}Buy 25% share in company
 
STR_7078_SELL_25_SHARE_IN_COMPANY                               :{BLACK}Sell 25% share in company
 
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY                           :{BLACK}Buy 25% share in this company
 
STR_707A_SELL_25_SHARE_IN_THIS_COMPANY                          :{BLACK}Sell 25% share in this company
 
STR_707B_CAN_T_BUY_25_SHARE_IN_THIS                             :{WHITE}Can't buy 25% share in this company...
 
STR_707C_CAN_T_SELL_25_SHARE_IN                                 :{WHITE}Can't sell 25% share in this company...
 
STR_707D_OWNED_BY                                               :{WHITE}({COMMA}% owned by {COMPANY})
 
STR_707E_OWNED_BY_OWNED_BY                                      :{WHITE}({COMMA}% owned by {COMPANY}{}   {COMMA}% owned by {COMPANY})
 
STR_707F_HAS_BEEN_TAKEN_OVER_BY                                 :{BLACK}{BIGFONT}{COMPANY} has been taken over by {COMPANY}!
 
STR_7080_PROTECTED                                              :{WHITE}This company is not old enough to trade shares yet...
 

	
 
STR_LIVERY_DEFAULT                                              :Standard Livery
 
STR_LIVERY_STEAM                                                :Steam Engine
 
STR_LIVERY_DIESEL                                               :Diesel Engine
 
STR_LIVERY_ELECTRIC                                             :Electric Engine
 
STR_LIVERY_MONORAIL                                             :Monorail Engine
 
STR_LIVERY_MAGLEV                                               :Maglev Engine
 
STR_LIVERY_DMU                                                  :DMU
 
STR_LIVERY_EMU                                                  :EMU
 
STR_LIVERY_PASSENGER_WAGON                                      :Passenger Coach
 
STR_LIVERY_PASSENGER_WAGON_STEAM                                :Passenger Coach (Steam)
 
STR_LIVERY_PASSENGER_WAGON_DIESEL                               :Passenger Coach (Diesel)
 
STR_LIVERY_PASSENGER_WAGON_ELECTRIC                             :Passenger Coach (Electric)
 
STR_LIVERY_FREIGHT_WAGON                                        :Freight Wagon
 
STR_LIVERY_BUS                                                  :Bus
 
STR_LIVERY_TRUCK                                                :Lorry
 
STR_LIVERY_PASSENGER_SHIP                                       :Passenger Ferry
 
STR_LIVERY_FREIGHT_SHIP                                         :Freight Ship
 
STR_LIVERY_HELICOPTER                                           :Helicopter
 
STR_LIVERY_SMALL_PLANE                                          :Small Aeroplane
 
STR_LIVERY_LARGE_PLANE                                          :Large Aeroplane
 

	
 
##id 0x8000
 
STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Kirby Paul Tank (Steam)
 
STR_8001_MJS_250_DIESEL                                         :MJS 250 (Diesel)
 
STR_8002_PLODDYPHUT_CHOO_CHOO                                   :Ploddyphut Choo-Choo
 
STR_8003_POWERNAUT_CHOO_CHOO                                    :Powernaut Choo-Choo
 
STR_8004_MIGHTYMOVER_CHOO_CHOO                                  :Mightymover Choo-Choo
 
STR_8005_PLODDYPHUT_DIESEL                                      :Ploddyphut Diesel
 
STR_8006_POWERNAUT_DIESEL                                       :Powernaut Diesel
 
STR_8007_WILLS_2_8_0_STEAM                                      :Wills 2-8-0 (Steam)
 
STR_8008_CHANEY_JUBILEE_STEAM                                   :Chaney 'Jubilee' (Steam)
 
STR_8009_GINZU_A4_STEAM                                         :Ginzu 'A4' (Steam)
 
STR_800A_SH_8P_STEAM                                            :SH '8P' (Steam)
 
STR_800B_MANLEY_MOREL_DMU_DIESEL                                :Manley-Morel DMU (Diesel)
 
STR_800C_DASH_DIESEL                                            :'Dash' (Diesel)
 
STR_800D_SH_HENDRY_25_DIESEL                                    :SH/Hendry '25' (Diesel)
 
STR_800E_UU_37_DIESEL                                           :UU '37' (Diesel)
 
STR_800F_FLOSS_47_DIESEL                                        :Floss '47' (Diesel)
 
STR_8010_CS_4000_DIESEL                                         :CS 4000 (Diesel)
 
STR_8011_CS_2400_DIESEL                                         :CS 2400 (Diesel)
 
STR_8012_CENTENNIAL_DIESEL                                      :Centennial (Diesel)
 
STR_8013_KELLING_3100_DIESEL                                    :Kelling 3100 (Diesel)
 
STR_8014_TURNER_TURBO_DIESEL                                    :Turner Turbo (Diesel)
 
STR_8015_MJS_1000_DIESEL                                        :MJS 1000 (Diesel)
 
STR_8016_SH_125_DIESEL                                          :SH '125' (Diesel)
 
STR_8017_SH_30_ELECTRIC                                         :SH '30' (Electric)
 
STR_8018_SH_40_ELECTRIC                                         :SH '40' (Electric)
 
STR_8019_T_I_M_ELECTRIC                                         :'T.I.M.' (Electric)
 
STR_801A_ASIASTAR_ELECTRIC                                      :'AsiaStar' (Electric)
 
STR_801B_PASSENGER_CAR                                          :Passenger Carriage
 
STR_801C_MAIL_VAN                                               :Mail Van
 
STR_801D_COAL_CAR                                               :Coal Truck
 
STR_801E_OIL_TANKER                                             :Oil Tanker
 
STR_801F_LIVESTOCK_VAN                                          :Livestock Van
 
STR_8020_GOODS_VAN                                              :Goods Van
 
STR_8021_GRAIN_HOPPER                                           :Grain Hopper
 
STR_8022_WOOD_TRUCK                                             :Wood Truck
 
STR_8023_IRON_ORE_HOPPER                                        :Iron Ore Hopper
 
STR_8024_STEEL_TRUCK                                            :Steel Truck
 
STR_8025_ARMORED_VAN                                            :Armoured Van
 
STR_8026_FOOD_VAN                                               :Food Van
 
STR_8027_PAPER_TRUCK                                            :Paper Truck
 
STR_8028_COPPER_ORE_HOPPER                                      :Copper Ore Hopper
 
STR_8029_WATER_TANKER                                           :Water Tanker
 
STR_802A_FRUIT_TRUCK                                            :Fruit Truck
 
STR_802B_RUBBER_TRUCK                                           :Rubber Truck
 
STR_802C_SUGAR_TRUCK                                            :Sugar Truck
 
STR_802D_COTTON_CANDY_HOPPER                                    :Candyfloss Hopper
 
STR_802E_TOFFEE_HOPPER                                          :Toffee Hopper
 
STR_802F_BUBBLE_VAN                                             :Bubble Van
 
STR_8030_COLA_TANKER                                            :Cola Tanker
 
STR_8031_CANDY_VAN                                              :Sweet Van
 
STR_8032_TOY_VAN                                                :Toy Van
 
STR_8033_BATTERY_TRUCK                                          :Battery Truck
 
STR_8034_FIZZY_DRINK_TRUCK                                      :Fizzy Drink Truck
 
STR_8035_PLASTIC_TRUCK                                          :Plastic Truck
 
STR_8036_X2001_ELECTRIC                                         :'X2001' (Electric)
 
STR_8037_MILLENNIUM_Z1_ELECTRIC                                 :'Millennium Z1' (Electric)
 
STR_8038_WIZZOWOW_Z99                                           :Wizzowow Z99
 
STR_8039_PASSENGER_CAR                                          :Passenger Carriage
 
STR_803A_MAIL_VAN                                               :Mail Van
 
STR_803B_COAL_CAR                                               :Coal Truck
 
STR_803C_OIL_TANKER                                             :Oil Tanker
 
STR_803D_LIVESTOCK_VAN                                          :Livestock Van
 
STR_803E_GOODS_VAN                                              :Goods Van
 
STR_803F_GRAIN_HOPPER                                           :Grain Hopper
 
STR_8040_WOOD_TRUCK                                             :Wood Truck
 
STR_8041_IRON_ORE_HOPPER                                        :Iron Ore Hopper
 
STR_8042_STEEL_TRUCK                                            :Steel Truck
 
STR_8043_ARMORED_VAN                                            :Armoured Van
 
STR_8044_FOOD_VAN                                               :Food Van
 
STR_8045_PAPER_TRUCK                                            :Paper Truck
 
STR_8046_COPPER_ORE_HOPPER                                      :Copper Ore Hopper
 
STR_8047_WATER_TANKER                                           :Water Tanker
 
STR_8048_FRUIT_TRUCK                                            :Fruit Truck
 
STR_8049_RUBBER_TRUCK                                           :Rubber Truck
 
STR_804A_SUGAR_TRUCK                                            :Sugar Truck
 
STR_804B_COTTON_CANDY_HOPPER                                    :Candyfloss Hopper
 
STR_804C_TOFFEE_HOPPER                                          :Toffee Hopper
 
STR_804D_BUBBLE_VAN                                             :Bubble Van
 
STR_804E_COLA_TANKER                                            :Cola Tanker
 
STR_804F_CANDY_VAN                                              :Sweet Van
 
STR_8050_TOY_VAN                                                :Toy Van
 
STR_8051_BATTERY_TRUCK                                          :Battery Truck
 
STR_8052_FIZZY_DRINK_TRUCK                                      :Fizzy Drink Truck
 
STR_8053_PLASTIC_TRUCK                                          :Plastic Truck
 
STR_8054_LEV1_LEVIATHAN_ELECTRIC                                :Lev1 'Leviathan' (Electric)
 
STR_8055_LEV2_CYCLOPS_ELECTRIC                                  :Lev2 'Cyclops' (Electric)
 
STR_8056_LEV3_PEGASUS_ELECTRIC                                  :Lev3 'Pegasus' (Electric)
 
STR_8057_LEV4_CHIMAERA_ELECTRIC                                 :Lev4 'Chimaera' (Electric)
 
STR_8058_WIZZOWOW_ROCKETEER                                     :Wizzowow Rocketeer
 
STR_8059_PASSENGER_CAR                                          :Passenger Carriage
 
STR_805A_MAIL_VAN                                               :Mail Van
 
STR_805B_COAL_CAR                                               :Coal Truck
 
STR_805C_OIL_TANKER                                             :Oil Tanker
 
STR_805D_LIVESTOCK_VAN                                          :Livestock Van
 
STR_805E_GOODS_VAN                                              :Goods Van
 
STR_805F_GRAIN_HOPPER                                           :Grain Hopper
 
STR_8060_WOOD_TRUCK                                             :Wood Truck
 
STR_8061_IRON_ORE_HOPPER                                        :Iron Ore Hopper
 
STR_8062_STEEL_TRUCK                                            :Steel Truck
 
STR_8063_ARMORED_VAN                                            :Armoured Van
 
STR_8064_FOOD_VAN                                               :Food Van
 
STR_8065_PAPER_TRUCK                                            :Paper Truck
 
STR_8066_COPPER_ORE_HOPPER                                      :Copper Ore Hopper
 
STR_8067_WATER_TANKER                                           :Water Tanker
 
STR_8068_FRUIT_TRUCK                                            :Fruit Truck
 
STR_8069_RUBBER_TRUCK                                           :Rubber Truck
 
STR_806A_SUGAR_TRUCK                                            :Sugar Truck
 
STR_806B_COTTON_CANDY_HOPPER                                    :Candyfloss Hopper
 
STR_806C_TOFFEE_HOPPER                                          :Toffee Hopper
 
STR_806D_BUBBLE_VAN                                             :Bubble Van
 
STR_806E_COLA_TANKER                                            :Cola Tanker
 
STR_806F_CANDY_VAN                                              :Sweet Van
 
STR_8070_TOY_VAN                                                :Toy Van
 
STR_8071_BATTERY_TRUCK                                          :Battery Truck
 
STR_8072_FIZZY_DRINK_TRUCK                                      :Fizzy Drink Truck
 
STR_8073_PLASTIC_TRUCK                                          :Plastic Truck
 
STR_8074_MPS_REGAL_BUS                                          :MPS Regal Bus
 
STR_8075_HEREFORD_LEOPARD_BUS                                   :Hereford Leopard Bus
 
STR_8076_FOSTER_BUS                                             :Foster Bus
 
STR_8077_FOSTER_MKII_SUPERBUS                                   :Foster MkII Superbus
 
STR_8078_PLODDYPHUT_MKI_BUS                                     :Ploddyphut MkI Bus
 
STR_8079_PLODDYPHUT_MKII_BUS                                    :Ploddyphut MkII Bus
 
STR_807A_PLODDYPHUT_MKIII_BUS                                   :Ploddyphut MkIII Bus
 
STR_807B_BALOGH_COAL_TRUCK                                      :Balogh Coal Truck
 
STR_807C_UHL_COAL_TRUCK                                         :Uhl Coal Truck
 
STR_807D_DW_COAL_TRUCK                                          :DW Coal Truck
 
STR_807E_MPS_MAIL_TRUCK                                         :MPS Mail Truck
 
STR_807F_REYNARD_MAIL_TRUCK                                     :Reynard Mail Truck
 
STR_8080_PERRY_MAIL_TRUCK                                       :Perry Mail Truck
 
STR_8081_MIGHTYMOVER_MAIL_TRUCK                                 :MightyMover Mail Truck
 
STR_8082_POWERNAUGHT_MAIL_TRUCK                                 :Powernaught Mail Truck
 
STR_8083_WIZZOWOW_MAIL_TRUCK                                    :Wizzowow Mail Truck
 
STR_8084_WITCOMBE_OIL_TANKER                                    :Witcombe Oil Tanker
 
STR_8085_FOSTER_OIL_TANKER                                      :Foster Oil Tanker
 
STR_8086_PERRY_OIL_TANKER                                       :Perry Oil Tanker
 
STR_8087_TALBOTT_LIVESTOCK_VAN                                  :Talbott Livestock Van
 
STR_8088_UHL_LIVESTOCK_VAN                                      :Uhl Livestock Van
 
STR_8089_FOSTER_LIVESTOCK_VAN                                   :Foster Livestock Van
 
STR_808A_BALOGH_GOODS_TRUCK                                     :Balogh Goods Truck
 
STR_808B_CRAIGHEAD_GOODS_TRUCK                                  :Craighead Goods Truck
 
STR_808C_GOSS_GOODS_TRUCK                                       :Goss Goods Truck
 
STR_808D_HEREFORD_GRAIN_TRUCK                                   :Hereford Grain Truck
 
STR_808E_THOMAS_GRAIN_TRUCK                                     :Thomas Grain Truck
 
STR_808F_GOSS_GRAIN_TRUCK                                       :Goss Grain Truck
 
STR_8090_WITCOMBE_WOOD_TRUCK                                    :Witcombe Wood Truck
 
STR_8091_FOSTER_WOOD_TRUCK                                      :Foster Wood Truck
 
STR_8092_MORELAND_WOOD_TRUCK                                    :Moreland Wood Truck
 
STR_8093_MPS_IRON_ORE_TRUCK                                     :MPS Iron Ore Truck
 
STR_8094_UHL_IRON_ORE_TRUCK                                     :Uhl Iron Ore Truck
 
STR_8095_CHIPPY_IRON_ORE_TRUCK                                  :Chippy Iron Ore Truck
 
STR_8096_BALOGH_STEEL_TRUCK                                     :Balogh Steel Truck
 
STR_8097_UHL_STEEL_TRUCK                                        :Uhl Steel Truck
 
STR_8098_KELLING_STEEL_TRUCK                                    :Kelling Steel Truck
 
STR_8099_BALOGH_ARMORED_TRUCK                                   :Balogh Armoured Truck
 
STR_809A_UHL_ARMORED_TRUCK                                      :Uhl Armoured Truck
 
STR_809B_FOSTER_ARMORED_TRUCK                                   :Foster Armoured Truck
 
STR_809C_FOSTER_FOOD_VAN                                        :Foster Food Van
 
STR_809D_PERRY_FOOD_VAN                                         :Perry Food Van
 
STR_809E_CHIPPY_FOOD_VAN                                        :Chippy Food Van
 
STR_809F_UHL_PAPER_TRUCK                                        :Uhl Paper Truck
 
STR_80A0_BALOGH_PAPER_TRUCK                                     :Balogh Paper Truck
 
STR_80A1_MPS_PAPER_TRUCK                                        :MPS Paper Truck
 
STR_80A2_MPS_COPPER_ORE_TRUCK                                   :MPS Copper Ore Truck
 
STR_80A3_UHL_COPPER_ORE_TRUCK                                   :Uhl Copper Ore Truck
 
STR_80A4_GOSS_COPPER_ORE_TRUCK                                  :Goss Copper Ore Truck
 
STR_80A5_UHL_WATER_TANKER                                       :Uhl Water Tanker
 
STR_80A6_BALOGH_WATER_TANKER                                    :Balogh Water Tanker
 
STR_80A7_MPS_WATER_TANKER                                       :MPS Water Tanker
 
STR_80A8_BALOGH_FRUIT_TRUCK                                     :Balogh Fruit Truck
 
STR_80A9_UHL_FRUIT_TRUCK                                        :Uhl Fruit Truck
 
STR_80AA_KELLING_FRUIT_TRUCK                                    :Kelling Fruit Truck
 
STR_80AB_BALOGH_RUBBER_TRUCK                                    :Balogh Rubber Truck
 
STR_80AC_UHL_RUBBER_TRUCK                                       :Uhl Rubber Truck
 
STR_80AD_RMT_RUBBER_TRUCK                                       :RMT Rubber Truck
 
STR_80AE_MIGHTYMOVER_SUGAR_TRUCK                                :MightyMover Sugar Truck
 
STR_80AF_POWERNAUGHT_SUGAR_TRUCK                                :Powernaught Sugar Truck
 
STR_80B0_WIZZOWOW_SUGAR_TRUCK                                   :Wizzowow Sugar Truck
 
STR_80B1_MIGHTYMOVER_COLA_TRUCK                                 :MightyMover Cola Truck
 
STR_80B2_POWERNAUGHT_COLA_TRUCK                                 :Powernaught Cola Truck
 
STR_80B3_WIZZOWOW_COLA_TRUCK                                    :Wizzowow Cola Truck
 
STR_80B4_MIGHTYMOVER_COTTON_CANDY                               :MightyMover Candyfloss Truck
 
STR_80B5_POWERNAUGHT_COTTON_CANDY                               :Powernaught Candyfloss Truck
livery.h
Show inline comments
 
/* $Id$ */
 

	
 
#ifndef LIVERY_H
 
#define LIVERY_H
 

	
 

	
 
/* List of different livery schemes. */
 
typedef enum LiverySchemes {
 
	LS_DEFAULT,
 

	
 
	/* Rail vehicles */
 
	LS_STEAM,
 
	LS_DIESEL,
 
	LS_ELECTRIC,
 
	LS_MONORAIL,
 
	LS_MAGLEV,
 
	LS_DMU,
 
	LS_EMU,
 
	LS_PASSENGER_WAGON,
 
	LS_PASSENGER_WAGON_STEAM,
 
	LS_PASSENGER_WAGON_DIESEL,
 
	LS_PASSENGER_WAGON_ELECTRIC,
 
	LS_FREIGHT_WAGON,
 

	
 
	/* Road vehicles */
 
	LS_BUS,
 
	LS_TRUCK,
 

	
 
	/* Ships */
 
	LS_PASSENGER_SHIP,
 
	LS_FREIGHT_SHIP,
 

	
 
	/* Aircraft */
 
	LS_HELICOPTER,
 
	LS_SMALL_PLANE,
 
	LS_LARGE_PLANE,
 

	
 
	LS_END
 
} LiveryScheme;
 

	
 

	
 
/* List of different livery classes, used only by the livery GUI. */
 
typedef enum LiveryClasses {
 
	LC_OTHER,
 
	LC_RAIL,
 
	LC_ROAD,
 
	LC_SHIP,
 
	LC_AIRCRAFT,
 
	LC_END
 
} LiveryClass;
 

	
 

	
 
typedef struct Livery {
 
	bool in_use;  ///< Set if this livery should be used instead of the default livery.
 
	byte colour1; ///< First colour, for all vehicles.
 
	byte colour2; ///< Second colour, for vehicles with 2CC support.
 
} Livery;
 

	
 
#endif /* LIVERY_H */
 

	
player_gui.c
Show inline comments
 
@@ -80,394 +80,394 @@ static void DrawPlayerEconomyStats(const
 
		// draw max loan aligned to loan below (y += 10)
 
		SetDParam64(0, (uint64)_economy.max_loan);
 
		DrawString(202, y+10, STR_MAX_LOAN, 0);
 
	} else {
 
		y = 15;
 
	}
 

	
 
	DrawString(2, y, STR_7026_BANK_BALANCE, 0);
 
	SetDParam64(0, p->money64);
 
	DrawStringRightAligned(182, y, STR_7028, 0);
 

	
 
	y += 10;
 

	
 
	DrawString(2, y, STR_7027_LOAN, 0);
 
	SetDParam64(0, p->current_loan);
 
	DrawStringRightAligned(182, y, STR_7028, 0);
 

	
 
	y += 12;
 

	
 
	GfxFillRect(182 - 75, y-2, 182, y-2, 215);
 

	
 
	SetDParam64(0, p->money64 - p->current_loan);
 
	DrawStringRightAligned(182, y, STR_7028, 0);
 
}
 

	
 
static const Widget _player_finances_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   379,     0,    13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   380,   394,     0,    13, 0x2AA,             STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
 
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   395,   406,     0,    13, 0x0,               STR_STICKY_BUTTON},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   406,    14,   169, 0x0,               STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   406,   170,   203, 0x0,               STR_NULL},
 
{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,   202,   204,   215, STR_7029_BORROW,   STR_7035_INCREASE_SIZE_OF_LOAN},
 
{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,   203,   406,   204,   215, STR_702A_REPAY,    STR_7036_REPAY_PART_OF_LOAN},
 
{   WIDGETS_END},
 
};
 

	
 
static const Widget _other_player_finances_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   379,     0,    13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   380,   394,     0,    13, 0x2AA,             STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
 
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   395,   406,     0,    13, 0x0,               STR_STICKY_BUTTON},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   406,    14,   169, 0x0,               STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   406,   170,   203, 0x0,               STR_NULL},
 
{   WIDGETS_END},
 
};
 

	
 
static const Widget _other_player_finances_small_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   253,     0,    13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   254,   267,     0,    13, 0x2AA,             STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
 
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   268,   279,     0,    13, 0x0,               STR_STICKY_BUTTON},
 
{      WWT_EMPTY,   RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,               STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   279,    14,    47, 0x0,               STR_NULL},
 
{   WIDGETS_END},
 
};
 

	
 
static const Widget _player_finances_small_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   253,     0,    13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   254,   267,     0,    13, 0x2AA,             STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
 
{  WWT_STICKYBOX,   RESIZE_NONE,    14,   268,   279,     0,    13, 0x0,               STR_STICKY_BUTTON},
 
{      WWT_EMPTY,   RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,               STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   279,    14,    47, 0x0,               STR_NULL},
 
{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,     0,   139,    48,    59, STR_7029_BORROW,   STR_7035_INCREASE_SIZE_OF_LOAN},
 
{ WWT_PUSHTXTBTN,   RESIZE_NONE,    14,   140,   279,    48,    59, STR_702A_REPAY,    STR_7036_REPAY_PART_OF_LOAN},
 
{   WIDGETS_END},
 
};
 

	
 

	
 
static void PlayerFinancesWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		PlayerID player = w->window_number;
 
		const Player *p = GetPlayer(player);
 

	
 
		w->disabled_state = p->current_loan != 0 ? 0 : (1 << 7);
 

	
 
		SetDParam(0, p->name_1);
 
		SetDParam(1, p->name_2);
 
		SetDParam(2, GetPlayerNameString(player, 3));
 
		SetDParam(4, 10000);
 
		DrawWindowWidgets(w);
 

	
 
		DrawPlayerEconomyStats(p, (byte)WP(w,def_d).data_1);
 
	} break;
 

	
 
	case WE_CLICK:
 
		switch (e->click.widget) {
 
		case 2: {/* toggle size */
 
			byte mode = (byte)WP(w,def_d).data_1;
 
			bool stickied = !!(w->flags4 & WF_STICKY);
 
			PlayerID player = w->window_number;
 
			DeleteWindow(w);
 
			DoShowPlayerFinances(player, !HASBIT(mode, 0), stickied);
 
		} break;
 

	
 
		case 6: /* increase loan */
 
			DoCommandP(0, 0, _ctrl_pressed, NULL, CMD_INCREASE_LOAN | CMD_MSG(STR_702C_CAN_T_BORROW_ANY_MORE_MONEY));
 
			break;
 

	
 
		case 7: /* repay loan */
 
			DoCommandP(0, 0, _ctrl_pressed, NULL, CMD_DECREASE_LOAN | CMD_MSG(STR_702F_CAN_T_REPAY_LOAN));
 
			break;
 
		}
 
		break;
 
	}
 
}
 

	
 
static const WindowDesc _player_finances_desc = {
 
	-1,-1, 407, 216,
 
	WC_FINANCES,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
 
	_player_finances_widgets,
 
	PlayerFinancesWndProc
 
};
 

	
 
static const WindowDesc _player_finances_small_desc = {
 
	-1,-1, 280, 60,
 
	WC_FINANCES,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
 
	_player_finances_small_widgets,
 
	PlayerFinancesWndProc
 
};
 

	
 
static const WindowDesc _other_player_finances_desc = {
 
	-1,-1, 407, 204,
 
	WC_FINANCES,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
 
	_other_player_finances_widgets,
 
	PlayerFinancesWndProc
 
};
 

	
 
static const WindowDesc _other_player_finances_small_desc = {
 
	-1,-1, 280, 48,
 
	WC_FINANCES,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
 
	_other_player_finances_small_widgets,
 
	PlayerFinancesWndProc
 
};
 

	
 
static const WindowDesc * const desc_table[2*2] = {
 
	&_player_finances_desc,&_player_finances_small_desc,
 
	&_other_player_finances_desc,&_other_player_finances_small_desc,
 
};
 

	
 
static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied)
 
{
 
	Window *w;
 
	int mode;
 

	
 
	mode = (player != _local_player) * 2 + show_small;
 
	w = AllocateWindowDescFront(desc_table[mode], player);
 
	if (w != NULL) {
 
		w->caption_color = w->window_number;
 
		WP(w,def_d).data_1 = mode;
 
		if (show_stickied) {
 
			w->flags4 |= WF_STICKY;
 
		}
 
	}
 
}
 

	
 
void ShowPlayerFinances(PlayerID player)
 
{
 
	DoShowPlayerFinances(player, false, false);
 
}
 

	
 
/* List of colours for the livery window */
 
static const StringID _colour_dropdown[] = {
 
	STR_00D1_DARK_BLUE,
 
	STR_00D2_PALE_GREEN,
 
	STR_00D3_PINK,
 
	STR_00D4_YELLOW,
 
	STR_00D5_RED,
 
	STR_00D6_LIGHT_BLUE,
 
	STR_00D7_GREEN,
 
	STR_00D8_DARK_GREEN,
 
	STR_00D9_BLUE,
 
	STR_00DA_CREAM,
 
	STR_00DB_MAUVE,
 
	STR_00DC_PURPLE,
 
	STR_00DD_ORANGE,
 
	STR_00DE_BROWN,
 
	STR_00DF_GREY,
 
	STR_00E0_WHITE,
 
	INVALID_STRING_ID
 
};
 

	
 
/* Association of liveries to livery classes */
 
static const LiveryClass livery_class[LS_END] = {
 
	LC_OTHER,
 
	LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL,
 
	LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL,
 
	LC_ROAD, LC_ROAD,
 
	LC_SHIP, LC_SHIP,
 
	LC_AIRCRAFT, LC_AIRCRAFT, LC_AIRCRAFT,
 
};
 

	
 
/* Number of liveries in each class, used to determine the height of the livery window */
 
static const byte livery_height[] = {
 
	1,
 
	9,
 
	11,
 
	2,
 
	2,
 
	3,
 
};
 

	
 
typedef struct livery_d {
 
	uint32 sel;
 
	LiveryClass livery_class;
 
} livery_d;
 
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(livery_d));
 

	
 
static void ShowColourDropDownMenu(Window *w, uint32 widget)
 
{
 
	uint32 used_colours = 0;
 
	const Livery *livery;
 
	LiveryScheme scheme;
 

	
 
	/* Disallow other player colours for the primary colour */
 
	if (HASBIT(WP(w, livery_d).sel, LS_DEFAULT) && widget == 10) {
 
		const Player *p;
 
		FOR_ALL_PLAYERS(p) {
 
			if (p->is_active && p->index != _local_player) SETBIT(used_colours, p->player_color);
 
		}
 
	}
 

	
 
	/* Get the first selected livery to use as the default dropdown item */
 
	for (scheme = 0; scheme < LS_END; scheme++) {
 
		if (HASBIT(WP(w, livery_d).sel, scheme)) break;
 
	}
 
	if (scheme == LS_END) scheme = LS_DEFAULT;
 
	livery = &GetPlayer(w->window_number)->livery[scheme];
 

	
 
	ShowDropDownMenu(w, _colour_dropdown, widget == 10 ? livery->colour1 : livery->colour2, widget, used_colours, 0);
 
}
 

	
 
static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
		case WE_PAINT: {
 
			const Player *p = GetPlayer(w->window_number);
 
			LiveryScheme scheme = LS_DEFAULT;
 
			int y = 51;
 

	
 
			if ((WP(w, livery_d).sel == 0)) {
 
				/* Disable dropdown controls if no scheme is selected */
 
				w->disabled_state = 1 << 9 | 1 << 10 | 1 << 11 | 1 << 12;
 
			} else {
 
				w->disabled_state = 0;
 
				for (scheme = 0; scheme < LS_END; scheme++) {
 
					if (HASBIT(WP(w, livery_d).sel, scheme)) break;
 
				}
 
				if (scheme == LS_END) scheme = LS_DEFAULT;
 
			}
 

	
 
			SetDParam(0, STR_00D1_DARK_BLUE + p->livery[scheme].colour1);
 
			SetDParam(1, STR_00D1_DARK_BLUE + p->livery[scheme].colour2);
 

	
 
			DrawWindowWidgets(w);
 

	
 
			for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
 
				if (livery_class[scheme] == WP(w, livery_d).livery_class) {
 
					bool sel = HASBIT(WP(w, livery_d).sel, scheme) != 0;
 

	
 
					if (scheme != LS_DEFAULT) {
 
						DrawSprite(p->livery[scheme].in_use ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, 2, y);
 
					}
 

	
 
					DrawString(15, y, STR_LIVERY_DEFAULT + scheme, sel ? 0xC : 0x10);
 

	
 
					DrawSprite(SPR_SQUARE | GENERAL_SPRITE_COLOR(p->livery[scheme].colour1) | PALETTE_MODIFIER_COLOR, 152, y);
 
					DrawSprite(SPR_SQUARE | GENERAL_SPRITE_COLOR(p->livery[scheme].colour2) | PALETTE_MODIFIER_COLOR, 277, y);
 

	
 
					DrawString(165, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour1, sel ? 0xC : 2);
 
					DrawString(290, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour2, sel ? 0xC : 2);
 

	
 
					y += 14;
 
				}
 
			}
 
			break;
 
		}
 

	
 
		case WE_CLICK: {
 
			switch (e->click.widget) {
 
				/* Livery Class buttons */
 
				case 2:
 
				case 3:
 
				case 4:
 
				case 5:
 
				case 6: {
 
					LiveryScheme scheme;
 

	
 
					WP(w, livery_d).livery_class = e->click.widget - 2;
 
					WP(w, livery_d).sel = 0;
 

	
 
					/* Select the first item in the list */
 
					for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
 
						if (livery_class[scheme] == WP(w, livery_d).livery_class) {
 
							WP(w, livery_d).sel = 1 << scheme;
 
							break;
 
						}
 
					}
 
					w->click_state = 1 << e->click.widget;
 
					w->height = 49 + livery_height[WP(w, livery_d).livery_class] * 14;
 
					w->widget[13].bottom = w->height - 1;
 
					w->widget[13].data = livery_height[WP(w, livery_d).livery_class] << 8 | 1;
 
					MarkWholeScreenDirty();
 
					break;
 
				}
 

	
 
				case 9:
 
				case 10: // First colour dropdown
 
					ShowColourDropDownMenu(w, 10);
 
					break;
 

	
 
				case 11:
 
				case 12: // Second colour dropdown
 
					ShowColourDropDownMenu(w, 12);
 
					break;
 

	
 
				case 13: {
 
					LiveryScheme scheme;
 
					LiveryScheme j = (e->click.pt.y - 48) / 14;
 

	
 
					for (scheme = 0; scheme <= j; scheme++) {
 
						if (livery_class[scheme] != WP(w, livery_d).livery_class) j++;
 
						if (scheme >= LS_END) return;
 
					}
 
					if (j >= LS_END) return;
 

	
 
					/* If clicking on the left edge, toggle using the livery */
 
					if (e->click.pt.x < 10) {
 
						DoCommandP(0, j | (2 << 8), !GetPlayer(w->window_number)->livery[j].in_use, NULL, CMD_SET_PLAYER_COLOR);
 
					}
 

	
 
					if (_ctrl_pressed) {
 
						TOGGLEBIT(WP(w, livery_d).sel, j);
 
					} else {
 
						WP(w, livery_d).sel = 1 << j;
 
					}
 
					SetWindowDirty(w);
 
					break;
 
				}
 
			}
 
			break;
 
		}
 

	
 
		case WE_DROPDOWN_SELECT: {
 
			LiveryScheme scheme;
 

	
 
			for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
 
				if (HASBIT(WP(w, livery_d).sel, scheme)) {
 
					DoCommandP(0, scheme | (e->dropdown.button == 10 ? 0 : 256), e->dropdown.index, NULL, CMD_SET_PLAYER_COLOR);
 
				}
 
			}
 
			break;
 
		}
 
	}
 
}
 

	
 
static const Widget _select_player_livery_widgets[] = {
 
{ WWT_CLOSEBOX, RESIZE_NONE, 14,   0,  10,   0,  13, STR_00C5,                  STR_018B_CLOSE_WINDOW },
 
{  WWT_CAPTION, RESIZE_NONE, 14,  11, 399,   0,  13, STR_7007_NEW_COLOR_SCHEME, STR_018C_WINDOW_TITLE_DRAG_THIS },
 
{   WWT_IMGBTN, RESIZE_NONE, 14,   0,  21,  14,  35, SPR_IMG_COMPANY_GENERAL,   STR_NULL },
 
{   WWT_IMGBTN, RESIZE_NONE, 14,  22,  43,  14,  35, SPR_IMG_TRAINLIST,         STR_NULL },
 
{   WWT_IMGBTN, RESIZE_NONE, 14,  44,  65,  14,  35, SPR_IMG_TRUCKLIST,         STR_NULL },
 
{   WWT_IMGBTN, RESIZE_NONE, 14,  66,  87,  14,  35, SPR_IMG_SHIPLIST,          STR_NULL },
 
{   WWT_IMGBTN, RESIZE_NONE, 14,  88, 109,  14,  35, SPR_IMG_AIRPLANESLIST,     STR_NULL },
 
{    WWT_PANEL, RESIZE_NONE, 14, 110, 399,  14,  35, 0x0,                       STR_NULL },
 
{    WWT_PANEL, RESIZE_NONE, 14,   0, 149,  36,  47, 0x0,                       STR_NULL },
 
{  WWT_TEXTBTN, RESIZE_NONE, 14, 150, 262,  36,  47, STR_02BD,                  STR_7007_NEW_COLOR_SCHEME },
 
{  WWT_TEXTBTN, RESIZE_NONE, 14, 263, 274,  36,  47, STR_0225,                  STR_7007_NEW_COLOR_SCHEME },
 
{  WWT_TEXTBTN, RESIZE_NONE, 14, 275, 387,  36,  47, STR_02E1,                  STR_7007_NEW_COLOR_SCHEME },
 
{  WWT_TEXTBTN, RESIZE_NONE, 14, 388, 399,  36,  47, STR_0225,                  STR_7007_NEW_COLOR_SCHEME },
 
{   WWT_MATRIX, RESIZE_NONE, 14,   0, 399,  48,  48 + 1 * 14, (1 << 8) | 1,     STR_NULL },
 
{ WIDGETS_END },
 
};
 

	
 
static const WindowDesc _select_player_livery_desc = {
 
	-1,-1, 400, 49 + 1 * 14,
 
	WC_PLAYER_COLOR, 0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_select_player_livery_widgets,
 
	SelectPlayerLiveryWndProc
 
};
 

	
 
static void SelectPlayerFaceWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		Player *p;
 
		w->click_state = (w->click_state & ~(1<<5|1<<6)) | ((1<<5) << WP(w,facesel_d).gender);
 
		DrawWindowWidgets(w);
vehicle.c
Show inline comments
 
@@ -2133,386 +2133,397 @@ int32 CmdChangeServiceInt(TileIndex tile
 
	v = GetVehicle(p1);
 

	
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		v->service_interval = serv_int;
 
		InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
 
	}
 

	
 
	return 0;
 
}
 

	
 

	
 
static Rect _old_vehicle_coords;
 

	
 
void BeginVehicleMove(Vehicle *v) {
 
	_old_vehicle_coords.left = v->left_coord;
 
	_old_vehicle_coords.top = v->top_coord;
 
	_old_vehicle_coords.right = v->right_coord;
 
	_old_vehicle_coords.bottom = v->bottom_coord;
 
}
 

	
 
void EndVehicleMove(Vehicle *v)
 
{
 
	MarkAllViewportsDirty(
 
		min(_old_vehicle_coords.left,v->left_coord),
 
		min(_old_vehicle_coords.top,v->top_coord),
 
		max(_old_vehicle_coords.right,v->right_coord)+1,
 
		max(_old_vehicle_coords.bottom,v->bottom_coord)+1
 
	);
 
}
 

	
 
/* returns true if staying in the same tile */
 
bool GetNewVehiclePos(const Vehicle *v, GetNewVehiclePosResult *gp)
 
{
 
	static const int8 _delta_coord[16] = {
 
		-1,-1,-1, 0, 1, 1, 1, 0, /* x */
 
		-1, 0, 1, 1, 1, 0,-1,-1, /* y */
 
	};
 

	
 
	int x = v->x_pos + _delta_coord[v->direction];
 
	int y = v->y_pos + _delta_coord[v->direction + 8];
 

	
 
	gp->x = x;
 
	gp->y = y;
 
	gp->old_tile = v->tile;
 
	gp->new_tile = TileVirtXY(x, y);
 
	return gp->old_tile == gp->new_tile;
 
}
 

	
 
static const Direction _new_direction_table[] = {
 
	DIR_N , DIR_NW, DIR_W ,
 
	DIR_NE, DIR_SE, DIR_SW,
 
	DIR_E , DIR_SE, DIR_S
 
};
 

	
 
Direction GetDirectionTowards(const Vehicle* v, int x, int y)
 
{
 
	Direction dir;
 
	DirDiff dirdiff;
 
	int i = 0;
 

	
 
	if (y >= v->y_pos) {
 
		if (y != v->y_pos) i+=3;
 
		i+=3;
 
	}
 

	
 
	if (x >= v->x_pos) {
 
		if (x != v->x_pos) i++;
 
		i++;
 
	}
 

	
 
	dir = v->direction;
 

	
 
	dirdiff = DirDifference(_new_direction_table[i], dir);
 
	if (dirdiff == DIRDIFF_SAME) return dir;
 
	return ChangeDir(dir, dirdiff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT);
 
}
 

	
 
Trackdir GetVehicleTrackdir(const Vehicle* v)
 
{
 
	if (v->vehstatus & VS_CRASHED) return 0xFF;
 

	
 
	switch (v->type) {
 
		case VEH_Train:
 
			if (v->u.rail.track == 0x80) /* We'll assume the train is facing outwards */
 
				return DiagdirToDiagTrackdir(GetRailDepotDirection(v->tile)); /* Train in depot */
 

	
 
			if (v->u.rail.track == 0x40) /* train in tunnel, so just use his direction and assume a diagonal track */
 
				return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
 

	
 
			return TrackDirectionToTrackdir(FIND_FIRST_BIT(v->u.rail.track),v->direction);
 

	
 
		case VEH_Ship:
 
			if (IsShipInDepot(v))
 
				/* We'll assume the ship is facing outwards */
 
				return DiagdirToDiagTrackdir(GetShipDepotDirection(v->tile));
 

	
 
			return TrackDirectionToTrackdir(FIND_FIRST_BIT(v->u.ship.state),v->direction);
 

	
 
		case VEH_Road:
 
			if (IsRoadVehInDepot(v)) /* We'll assume the road vehicle is facing outwards */
 
				return DiagdirToDiagTrackdir(GetRoadDepotDirection(v->tile));
 

	
 
			if (IsRoadStopTile(v->tile)) /* We'll assume the road vehicle is facing outwards */
 
				return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); /* Road vehicle in a station */
 

	
 
			/* If vehicle's state is a valid track direction (vehicle is not turning around) return it */
 
			if ((v->u.road.state & 7) < 6) return v->u.road.state;
 

	
 
			/* Vehicle is turning around, get the direction from vehicle's direction */
 
			return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
 

	
 
		/* case VEH_Aircraft: case VEH_Special: case VEH_Disaster: */
 
		default: return 0xFF;
 
	}
 
}
 
/* Return value has bit 0x2 set, when the vehicle enters a station. Then,
 
 * result << 8 contains the id of the station entered. If the return value has
 
 * bit 0x8 set, the vehicle could not and did not enter the tile. Are there
 
 * other bits that can be set? */
 
uint32 VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y)
 
{
 
	return _tile_type_procs[GetTileType(tile)]->vehicle_enter_tile_proc(v, tile, x, y);
 
}
 

	
 
UnitID GetFreeUnitNumber(byte type)
 
{
 
	UnitID unit, max = 0;
 
	const Vehicle *u;
 
	static bool *cache = NULL;
 
	static UnitID gmax = 0;
 

	
 
	switch (type) {
 
		case VEH_Train:    max = _patches.max_trains; break;
 
		case VEH_Road:     max = _patches.max_roadveh; break;
 
		case VEH_Ship:     max = _patches.max_ships; break;
 
		case VEH_Aircraft: max = _patches.max_aircraft; break;
 
		default: NOT_REACHED();
 
	}
 

	
 
	if (max == 0) {
 
		/* we can't build any of this kind of vehicle, so we just return 1 instead of looking for a free number
 
		 * a max of 0 will cause the following code to write to a NULL pointer
 
		 * We know that 1 is bigger than the max allowed vehicle number, so it's the same as returning something, that is too big
 
		 */
 
		return 1;
 
	}
 

	
 
	if (max > gmax) {
 
		gmax = max;
 
		free(cache);
 
		cache = malloc((max + 1) * sizeof(*cache));
 
	}
 

	
 
	// Clear the cache
 
	memset(cache, 0, (max + 1) * sizeof(*cache));
 

	
 
	// Fill the cache
 
	FOR_ALL_VEHICLES(u) {
 
		if (u->type == type && u->owner == _current_player && u->unitnumber != 0 && u->unitnumber <= max)
 
			cache[u->unitnumber] = true;
 
	}
 

	
 
	// Find the first unused unit number
 
	for (unit = 1; unit <= max; unit++) {
 
		if (!cache[unit]) break;
 
	}
 

	
 
	return unit;
 
}
 

	
 
static PalSpriteID GetEngineColourMap(EngineID engine_type, PlayerID player, EngineID parent_engine_type, CargoID cargo_type)
 
{
 
	SpriteID map;
 
	const Player *p = GetPlayer(player);
 
	LiveryScheme scheme = LS_DEFAULT;
 

	
 
	/* The default livery is always available for use, but its in_use flag determines
 
	 * whether any _other_ liveries are in use. */
 
	if (p->livery[LS_DEFAULT].in_use) {
 
		/* Determine the livery scheme to use */
 
		switch (GetEngine(engine_type)->type) {
 
			case VEH_Train: {
 
				switch (_engine_info[engine_type].railtype) {
 
					case RAILTYPE_RAIL:
 
					case RAILTYPE_ELECTRIC:
 
					{
 
						const RailVehicleInfo *rvi = RailVehInfo(engine_type);
 

	
 
						if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
 
						if (rvi->flags & RVI_WAGON) {
 
							scheme = (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_VALUABLES) ?
 
								LS_PASSENGER_WAGON : LS_FREIGHT_WAGON;
 
							if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_VALUABLES) {
 
								if (parent_engine_type == INVALID_ENGINE) {
 
									scheme = LS_PASSENGER_WAGON_STEAM;
 
								} else {
 
									switch (RailVehInfo(parent_engine_type)->engclass) {
 
										case 0: scheme = LS_PASSENGER_WAGON_STEAM; break;
 
										case 1: scheme = LS_PASSENGER_WAGON_DIESEL; break;
 
										case 2: scheme = LS_PASSENGER_WAGON_ELECTRIC; break;
 
									}
 
								}
 
							} else {
 
								scheme = LS_FREIGHT_WAGON;
 
							}
 
						} else {
 
							bool is_mu = HASBIT(_engine_info[engine_type].misc_flags, EF_RAIL_IS_MU);
 

	
 
							switch (rvi->engclass) {
 
								case 0: scheme = LS_STEAM; break;
 
								case 1: scheme = is_mu ? LS_DMU : LS_DIESEL; break;
 
								case 2: scheme = is_mu ? LS_EMU : LS_ELECTRIC; break;
 
							}
 
						}
 
						break;
 
					}
 

	
 
					case RAILTYPE_MONO: scheme = LS_MONORAIL; break;
 
					case RAILTYPE_MAGLEV: scheme = LS_MAGLEV; break;
 
				}
 
				break;
 
			}
 

	
 
			case VEH_Road: {
 
				const RoadVehicleInfo *rvi = RoadVehInfo(engine_type);
 
				if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
 
				scheme = (cargo_type == CT_PASSENGERS) ? LS_BUS : LS_TRUCK;
 
				break;
 
			}
 

	
 
			case VEH_Ship: {
 
				const ShipVehicleInfo *svi = ShipVehInfo(engine_type);
 
				if (cargo_type == CT_INVALID) cargo_type = svi->cargo_type;
 
				scheme = (cargo_type == CT_PASSENGERS) ? LS_PASSENGER_SHIP : LS_FREIGHT_SHIP;
 
				break;
 
			}
 

	
 
			case VEH_Aircraft: {
 
				const AircraftVehicleInfo *avi = AircraftVehInfo(engine_type);
 
				if (cargo_type == CT_INVALID) cargo_type = CT_PASSENGERS;
 
				switch (avi->subtype) {
 
					case 0: scheme = LS_HELICOPTER; break;
 
					case 1: scheme = LS_SMALL_PLANE; break;
 
					case 3: scheme = LS_LARGE_PLANE; break;
 
				}
 
				break;
 
			}
 
		}
 

	
 
		/* Switch back to the default scheme if the resolved scheme is not in use */
 
		if (!p->livery[scheme].in_use) scheme = LS_DEFAULT;
 
	}
 

	
 
	map = HASBIT(EngInfo(engine_type)->misc_flags, EF_USES_2CC) ?
 
		(SPR_2CCMAP_BASE + p->livery[scheme].colour1 + p->livery[scheme].colour2 * 16) :
 
		(PALETTE_RECOLOR_START + p->livery[scheme].colour1);
 

	
 
	return SPRITE_PALETTE(map << PALETTE_SPRITE_START);
 
}
 

	
 
PalSpriteID GetEnginePalette(EngineID engine_type, PlayerID player)
 
{
 
	return GetEngineColourMap(engine_type, player, INVALID_ENGINE, CT_INVALID);
 
}
 

	
 
PalSpriteID GetVehiclePalette(const Vehicle *v)
 
{
 
	if (v->type == VEH_Train) {
 
		return GetEngineColourMap(
 
			(v->u.rail.first_engine != INVALID_ENGINE && (IsArticulatedPart(v) || UsesWagonOverride(v))) ?
 
				v->u.rail.first_engine : v->engine_type,
 
			v->owner,
 
			v->u.rail.first_engine,
 
			v->cargo_type);
 
	}
 

	
 
	return GetEngineColourMap(v->engine_type, v->owner, INVALID_ENGINE, v->cargo_type);
 
}
 

	
 
// Save and load of vehicles
 
const SaveLoad _common_veh_desc[] = {
 
	    SLE_VAR(Vehicle, subtype,              SLE_UINT8),
 

	
 
	    SLE_REF(Vehicle, next,                 REF_VEHICLE_OLD),
 
	    SLE_VAR(Vehicle, string_id,            SLE_STRINGID),
 
	SLE_CONDVAR(Vehicle, unitnumber,           SLE_FILE_U8  | SLE_VAR_U16,  0, 7),
 
	SLE_CONDVAR(Vehicle, unitnumber,           SLE_UINT16,                  8, SL_MAX_VERSION),
 
	    SLE_VAR(Vehicle, owner,                SLE_UINT8),
 
	SLE_CONDVAR(Vehicle, tile,                 SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 
	SLE_CONDVAR(Vehicle, tile,                 SLE_UINT32,                  6, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle, dest_tile,            SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 
	SLE_CONDVAR(Vehicle, dest_tile,            SLE_UINT32,                  6, SL_MAX_VERSION),
 

	
 
	SLE_CONDVAR(Vehicle, x_pos,                SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 
	SLE_CONDVAR(Vehicle, x_pos,                SLE_UINT32,                  6, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle, y_pos,                SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
 
	SLE_CONDVAR(Vehicle, y_pos,                SLE_UINT32,                  6, SL_MAX_VERSION),
 
	    SLE_VAR(Vehicle, z_pos,                SLE_UINT8),
 
	    SLE_VAR(Vehicle, direction,            SLE_UINT8),
 

	
 
	    SLE_VAR(Vehicle, cur_image,            SLE_UINT16),
 
	    SLE_VAR(Vehicle, spritenum,            SLE_UINT8),
 
	    SLE_VAR(Vehicle, sprite_width,         SLE_UINT8),
 
	    SLE_VAR(Vehicle, sprite_height,        SLE_UINT8),
 
	    SLE_VAR(Vehicle, z_height,             SLE_UINT8),
 
	    SLE_VAR(Vehicle, x_offs,               SLE_INT8),
 
	    SLE_VAR(Vehicle, y_offs,               SLE_INT8),
 
	    SLE_VAR(Vehicle, engine_type,          SLE_UINT16),
 

	
 
	    SLE_VAR(Vehicle, max_speed,            SLE_UINT16),
 
	    SLE_VAR(Vehicle, cur_speed,            SLE_UINT16),
 
	    SLE_VAR(Vehicle, subspeed,             SLE_UINT8),
 
	    SLE_VAR(Vehicle, acceleration,         SLE_UINT8),
 
	    SLE_VAR(Vehicle, progress,             SLE_UINT8),
 

	
 
	    SLE_VAR(Vehicle, vehstatus,            SLE_UINT8),
 
	SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8  | SLE_VAR_U16,  0, 4),
 
	SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16,                  5, SL_MAX_VERSION),
 

	
 
	    SLE_VAR(Vehicle, cargo_type,           SLE_UINT8),
 
	    SLE_VAR(Vehicle, cargo_days,           SLE_UINT8),
 
	SLE_CONDVAR(Vehicle, cargo_source,         SLE_FILE_U8  | SLE_VAR_U16,  0, 6),
 
	SLE_CONDVAR(Vehicle, cargo_source,         SLE_UINT16,                  7, SL_MAX_VERSION),
 
	    SLE_VAR(Vehicle, cargo_cap,            SLE_UINT16),
 
	    SLE_VAR(Vehicle, cargo_count,          SLE_UINT16),
 

	
 
	    SLE_VAR(Vehicle, day_counter,          SLE_UINT8),
 
	    SLE_VAR(Vehicle, tick_counter,         SLE_UINT8),
 

	
 
	    SLE_VAR(Vehicle, cur_order_index,      SLE_UINT8),
 
	    SLE_VAR(Vehicle, num_orders,           SLE_UINT8),
 

	
 
	/* This next line is for version 4 and prior compatibility.. it temporarily reads
 
	    type and flags (which were both 4 bits) into type. Later on this is
 
	    converted correctly */
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type), SLE_UINT8,                 0, 4),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
 

	
 
	/* Orders for version 5 and on */
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),  SLE_UINT8,  5, SL_MAX_VERSION),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, flags), SLE_UINT8,  5, SL_MAX_VERSION),
 
	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, dest),  SLE_UINT16, 5, SL_MAX_VERSION),
 

	
 
	    SLE_REF(Vehicle, orders,               REF_ORDER),
 

	
 
	SLE_CONDVAR(Vehicle, age,                  SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
 
	SLE_CONDVAR(Vehicle, age,                  SLE_INT32,                  31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle, max_age,              SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
 
	SLE_CONDVAR(Vehicle, max_age,              SLE_INT32,                  31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
 
	SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32,                  31, SL_MAX_VERSION),
 
	SLE_CONDVAR(Vehicle, service_interval,     SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
 
	SLE_CONDVAR(Vehicle, service_interval,     SLE_INT32,                  31, SL_MAX_VERSION),
 
	    SLE_VAR(Vehicle, reliability,          SLE_UINT16),
 
	    SLE_VAR(Vehicle, reliability_spd_dec,  SLE_UINT16),
 
	    SLE_VAR(Vehicle, breakdown_ctr,        SLE_UINT8),
 
	    SLE_VAR(Vehicle, breakdown_delay,      SLE_UINT8),
 
	    SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8),
 
	    SLE_VAR(Vehicle, breakdown_chance,     SLE_UINT8),
 
	SLE_CONDVAR(Vehicle, build_year,           SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
 
	SLE_CONDVAR(Vehicle, build_year,           SLE_INT32,                 31, SL_MAX_VERSION),
 

	
 
	    SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
 

	
 
	    SLE_VAR(Vehicle, profit_this_year,     SLE_INT32),
 
	    SLE_VAR(Vehicle, profit_last_year,     SLE_INT32),
 
	    SLE_VAR(Vehicle, value,                SLE_UINT32),
 

	
 
	    SLE_VAR(Vehicle, random_bits,          SLE_UINT8),
 
	    SLE_VAR(Vehicle, waiting_triggers,     SLE_UINT8),
 

	
 
	    SLE_REF(Vehicle, next_shared,          REF_VEHICLE),
 
	    SLE_REF(Vehicle, prev_shared,          REF_VEHICLE),
 

	
 
	// reserve extra space in savegame here. (currently 10 bytes)
 
	SLE_CONDNULL(10,                                                       2, SL_MAX_VERSION),
 

	
 
	SLE_END()
 
};
 

	
 

	
 
static const SaveLoad _train_desc[] = {
 
	SLE_WRITEBYTE(Vehicle, type, VEH_Train, 0), // Train type. VEH_Train in mem, 0 in file.
 
	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
 
	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, crash_anim_pos),         SLE_UINT16),
 
	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, force_proceed),          SLE_UINT8),
 
	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, railtype),               SLE_UINT8),
 
	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, track),                  SLE_UINT8),
 

	
 
	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, flags),                  SLE_UINT8,  2, SL_MAX_VERSION),
 
	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, days_since_order_progr), SLE_UINT16, 2, SL_MAX_VERSION),
 

	
 
	SLE_CONDNULL(2, 2, 19),
 
	// reserve extra space in savegame here. (currently 11 bytes)
 
	SLE_CONDNULL(11, 2, SL_MAX_VERSION),
 

	
 
	SLE_END()
0 comments (0 inline, 0 general)