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
 
@@ -2081,193 +2081,195 @@ STR_702B_MAXIMUM_PERMITTED_LOAN         
 
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)
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
 
@@ -176,202 +176,202 @@ static void PlayerFinancesWndProc(Window
 
		} 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++) {
vehicle.c
Show inline comments
 
@@ -2229,194 +2229,205 @@ Trackdir GetVehicleTrackdir(const Vehicl
 
				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),
0 comments (0 inline, 0 general)