(svn r6165) -Feature: control click Goto Depot will now make the vehicle service
authorbjarni
Sun, 27 Aug 2006 09:28:52 +0000
changeset 4412 945e8a9bb89a
parent 4411 c8eaf5401817
child 4413 91cbf110f0d9
(svn r6165) -Feature: control click Goto Depot will now make the vehicle service
at the depot and leave right away.
To tell the difference the status of stopping vehicles will be in red,
while servicing vehicles will be green.
-Codechange: remove some dead code in CmdSendAircraftToHangar() since it is
conflicting with new functionality. Now p2 means the same for all types
aircraft_cmd.c
aircraft_gui.c
lang/english.txt
roadveh_cmd.c
roadveh_gui.c
ship_cmd.c
ship_gui.c
train_cmd.c
train_gui.c
--- a/aircraft_cmd.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/aircraft_cmd.c	Sun Aug 27 09:28:52 2006 +0000
@@ -492,9 +492,8 @@
  * @param tile unused
  * @param p1 vehicle ID to send to the hangar
  * @param p2 various bitmasked elements
- * - p2 = 0      - aircraft goes to the depot and stays there (user command)
- * - p2 (bit 16) - aircraft will try to goto a depot, but not stop there (eg autorenew or autoreplace)
- * - p2 (bit 17) - aircraft will try to goto a depot at the airport specified by low word of p2 XXX - Not Used
+ * - p2 bit 0 - aircraft will try to goto a hangar, but not stop there (service only)
+ * - p2 bit 1 - aircraft will try to locate another airport with a hangar if the target airport lacks one (used by helicopters for autorenew and autoreplace)
  */
 int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -516,14 +515,13 @@
 	} else {
 		bool next_airport_has_hangar = true;
 		/* If bit 17 is set, next airport is specified by low word of p2, otherwise it's the target airport */
-		/* XXX - I don't think p2 is any valid station cause all calls use either 0, 1, or 1<<16!!!!!!!!! */
-		StationID next_airport_index = (HASBIT(p2, 17)) ? (StationID)p2 : v->u.air.targetairport;
+		StationID next_airport_index = v->u.air.targetairport;
 		const Station *st = GetStation(next_airport_index);
 		/* If the station is not a valid airport or if it has no hangars */
 		if (!IsValidStation(st) || st->airport_tile == 0 || GetAirport(st->airport_type)->nof_depots == 0) {
 			StationID station;
 
-			if (p2 != 0) return CMD_ERROR;
+			if (!HASBIT(p2, 1)) return CMD_ERROR;
 			// the aircraft has to search for a hangar on its own
 			station = FindNearestHangar(v);
 
@@ -536,7 +534,8 @@
 
 		if (flags & DC_EXEC) {
 			v->current_order.type = OT_GOTO_DEPOT;
-			v->current_order.flags = HASBIT(p2, 16) ? 0 : OF_NON_STOP | OF_FULL_LOAD;
+			v->current_order.flags = OF_NON_STOP;
+			if (!HASBIT(p2,0)) SETBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 			v->current_order.dest.station = next_airport_index;
 			InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 			if (HASBIT(p2, 17) || (p2 == 0 && v->u.air.state == FLYING && !next_airport_has_hangar)) {
@@ -1593,7 +1592,7 @@
 				HASBIT(GetEngine(v->engine_type)->player_avail, _local_player))
 			)) {
 		_current_player = _local_player;
-		DoCommandP(v->tile, v->index, 1 << 16, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
+		DoCommandP(v->tile, v->index, 3, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
 		_current_player = OWNER_NONE;
 	}
 }
@@ -1655,9 +1654,9 @@
 		// only the vehicle owner needs to calculate the rest (locally)
 		if (EngineHasReplacementForPlayer(p, v->engine_type) ||
 			(p->engine_renew && v->age - v->max_age > (p->engine_renew_months * 30))) {
-			// send the aircraft to the hangar at next airport (bit 17 set)
+			// send the aircraft to the hangar at next airport
 			_current_player = _local_player;
-			DoCommandP(v->tile, v->index, 1 << 16, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
+			DoCommandP(v->tile, v->index, 1, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
 			_current_player = OWNER_NONE;
 		}
 	}
--- a/aircraft_gui.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/aircraft_gui.c	Sun Aug 27 09:28:52 2006 +0000
@@ -557,7 +557,11 @@
 				/* Aircrafts always go to a station, even if you say depot */
 				SetDParam(0, v->current_order.dest.station);
 				SetDParam(1, v->cur_speed * 128 / 10);
-				str = STR_HEADING_FOR_HANGAR + _patches.vehicle_speed;
+				if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
+					str = STR_HEADING_FOR_HANGAR + _patches.vehicle_speed;
+				} else {
+					str = STR_HEADING_FOR_HANGAR_SERVICE + _patches.vehicle_speed;
+				}
 			} break;
 
 			case OT_LOADING:
@@ -592,7 +596,7 @@
 			ScrollMainWindowTo(v->x_pos, v->y_pos);
 			break;
 		case 7: /* goto hangar */
-			DoCommandP(v->tile, v->index, 0, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO));
+			DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO));
 			break;
 		case 8: /* refit */
 			ShowAircraftRefitWindow(v);
--- a/lang/english.txt	Sun Aug 27 07:23:46 2006 +0000
+++ b/lang/english.txt	Sun Aug 27 09:28:52 2006 +0000
@@ -2456,8 +2456,10 @@
 STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT                             :Go non-stop to {TOWN} Train Depot
 STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT                             :Service non-stop at {TOWN} Train Depot
 
-STR_HEADING_FOR_TRAIN_DEPOT                                     :{LTBLUE}Heading for {TOWN} Train Depot
-STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{LTBLUE}Heading for {TOWN} Train Depot, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT                                     :{LTBLUE}Heading for {RED}{TOWN} Train Depot
+STR_HEADING_FOR_TRAIN_DEPOT_VEL                                 :{LTBLUE}Heading for {RED}{TOWN} Train Depot{LTBLUE}, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE                             :{LTBLUE}Heading for {GREEN}{TOWN} Train Depot
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL                         :{LTBLUE}Heading for {GREEN}{TOWN} Train Depot{LTBLUE}, {VELOCITY}
 
 STR_INVALID_ORDER                                               :{RED} (Invalid Order)
 
@@ -2521,10 +2523,10 @@
 STR_8843_TRAIN_VEHICLE_SELECTION                                :{BLACK}Train vehicle selection list - click on vehicle for information
 STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN                            :{BLACK}Build the highlighted train vehicle
 STR_8845_RENAME_TRAIN_VEHICLE_TYPE                              :{BLACK}Rename train vehicle type
-STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Current train action - click here to stop/start train
+STR_8846_CURRENT_TRAIN_ACTION_CLICK                             :{BLACK}Current train action - click here to stop/start train{}{RED}Red depot names{BLACK}: Stay in depot{}{GREEN}Green depot names{BLACK}: Service only
 STR_8847_SHOW_TRAIN_S_ORDERS                                    :{BLACK}Show train's orders
 STR_8848_CENTER_MAIN_VIEW_ON_TRAIN                              :{BLACK}Centre main view on train's location
-STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Send train to depot
+STR_8849_SEND_TRAIN_TO_DEPOT                                    :{BLACK}Send train to depot and stop it there{}Control click will make the train get service only and leave right away
 STR_884A_FORCE_TRAIN_TO_PROCEED                                 :{BLACK}Force train to proceed without waiting for signal to clear it
 STR_884B_REVERSE_DIRECTION_OF_TRAIN                             :{BLACK}Reverse direction of train
 STR_884C_SHOW_TRAIN_DETAILS                                     :{BLACK}Show train details
@@ -2590,16 +2592,18 @@
 STR_9014_CAN_T_SELL_ROAD_VEHICLE                                :{WHITE}Can't sell road vehicle...
 STR_9015_CAN_T_STOP_START_ROAD_VEHICLE                          :{WHITE}Can't stop/start road vehicle...
 STR_9016_ROAD_VEHICLE_IS_WAITING                                :{WHITE}Road vehicle {COMMA} is waiting in depot
-STR_HEADING_FOR_ROAD_DEPOT                                      :{LTBLUE}Heading for {TOWN} Road Depot
-STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{LTBLUE}Heading for {TOWN} Road Depot, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT                                      :{LTBLUE}Heading for {RED}{TOWN} Road Depot
+STR_HEADING_FOR_ROAD_DEPOT_VEL                                  :{LTBLUE}Heading for {RED}{TOWN} Road Depot{LTBLUE}, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE                              :{LTBLUE}Heading for {GREEN}{TOWN} Road Depot
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL                          :{LTBLUE}Heading for {GREEN}{TOWN} Road Depot{LTBLUE}, {VELOCITY}
 STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT                            :{WHITE}Can't send vehicle to depot...
 STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unable to find local depot
 STR_901A_ROAD_VEHICLES_CLICK_ON                                 :{BLACK}Road vehicles - click on vehicle for information
 STR_901B_BUILD_NEW_ROAD_VEHICLES                                :{BLACK}Build new road vehicles (requires road vehicle depot)
-STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Current vehicle action - click here to stop/start vehicle
+STR_901C_CURRENT_VEHICLE_ACTION                                 :{BLACK}Current vehicle action - click here to stop/start vehicle{}{RED}Red depot names{BLACK}: Stay in depot{}{GREEN}Green depot names{BLACK}: Service only
 STR_901D_SHOW_VEHICLE_S_ORDERS                                  :{BLACK}Show vehicle's orders
 STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE                            :{BLACK}Centre main view on vehicle's location
-STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Send vehicle to depot
+STR_901F_SEND_VEHICLE_TO_DEPOT                                  :{BLACK}Send vehicle to depot and stop it there{}Control click will make the vehicle get service only and leave right away
 STR_9020_FORCE_VEHICLE_TO_TURN_AROUND                           :{BLACK}Force vehicle to turn around
 STR_9021_SHOW_ROAD_VEHICLE_DETAILS                              :{BLACK}Show road vehicle details
 STR_9022_VEHICLES_CLICK_ON_VEHICLE                              :{BLACK}Vehicles - click on vehicle for information
@@ -2660,8 +2664,10 @@
 STR_9818_CAN_T_STOP_START_SHIP                                  :{WHITE}Can't stop/start ship...
 STR_9819_CAN_T_SEND_SHIP_TO_DEPOT                               :{WHITE}Can't send ship to depot...
 STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT                             :{WHITE}Unable to find local depot
-STR_HEADING_FOR_SHIP_DEPOT                                      :{LTBLUE}Heading for {TOWN} Ship Depot
-STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{LTBLUE}Heading for {TOWN} Ship Depot, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT                                      :{LTBLUE}Heading for {RED}{TOWN} Ship Depot
+STR_HEADING_FOR_SHIP_DEPOT_VEL                                  :{LTBLUE}Heading for {RED}{TOWN} Ship Depot{LTBLUE}, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE                              :{LTBLUE}Heading for {GREEN}{TOWN} Ship Depot
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL                          :{LTBLUE}Heading for {GREEN}{TOWN} Ship Depot{LTBLUE}, {VELOCITY}
 STR_981C_SHIP_IS_WAITING_IN_DEPOT                               :{WHITE}Ship {COMMA} is waiting in depot
 STR_981D_BUILD_SHIP_DOCK                                        :{BLACK}Build ship dock
 STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING                          :{BLACK}Build ship depot (for building and servicing ships)
@@ -2673,10 +2679,10 @@
 STR_9824_BUILD_NEW_SHIPS_REQUIRES                               :{BLACK}Build new ships (requires ship depot)
 STR_9825_SHIP_SELECTION_LIST_CLICK                              :{BLACK}Ship selection list - click on ship for information
 STR_9826_BUILD_THE_HIGHLIGHTED_SHIP                             :{BLACK}Build the highlighted ship
-STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Current ship action - click here to stop/start ship
+STR_9827_CURRENT_SHIP_ACTION_CLICK                              :{BLACK}Current ship action - click here to stop/start ship{}{RED}Red depot names{BLACK}: Stay in depot{}{GREEN}Green depot names{BLACK}: Service only
 STR_9828_SHOW_SHIP_S_ORDERS                                     :{BLACK}Show ship's orders
 STR_9829_CENTER_MAIN_VIEW_ON_SHIP                               :{BLACK}Centre main view on ship's location
-STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Send ship to depot
+STR_982A_SEND_SHIP_TO_DEPOT                                     :{BLACK}Send ship to depot and stop it there{}Control click will make the ship get service only and leave right away
 STR_982B_SHOW_SHIP_DETAILS                                      :{BLACK}Show ship details
 STR_982C_NEW_SHIP_NOW_AVAILABLE                                 :{BLACK}{BIGFONT}New ship now available!
 STR_982D                                                        :{BLACK}{BIGFONT}{STRING}
@@ -2725,8 +2731,10 @@
 STR_A010_RELIABILITY_BREAKDOWNS                                 :{BLACK}Reliability: {LTBLUE}{COMMA}%  {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
 STR_A011_BUILT_VALUE                                            :{LTBLUE}{STRING}{BLACK}   Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
 STR_A012_CAN_T_SEND_AIRCRAFT_TO                                 :{WHITE}Can't send aircraft to hangar...
-STR_HEADING_FOR_HANGAR                                          :{LTBLUE}Heading for {STATION} Hangar
-STR_HEADING_FOR_HANGAR_VEL                                      :{LTBLUE}Heading for {STATION} Hangar, {VELOCITY}
+STR_HEADING_FOR_HANGAR                                          :{LTBLUE}Heading for {RED}{TOWN} Hangar
+STR_HEADING_FOR_HANGAR_VEL                                      :{LTBLUE}Heading for {RED}{TOWN} Hangar{LTBLUE}, {VELOCITY}
+STR_HEADING_FOR_HANGAR_SERVICE                                  :{LTBLUE}Heading for {GREEN}{TOWN} Hangar
+STR_HEADING_FOR_HANGAR_SERVICE_VEL                              :{LTBLUE}Heading for {GREEN}{TOWN} Hangar{LTBLUE}, {VELOCITY}
 STR_A014_AIRCRAFT_IS_WAITING_IN                                 :{WHITE}Aircraft {COMMA} is waiting in the aircraft hangar
 STR_A015_AIRCRAFT_IN_THE_WAY                                    :{WHITE}Aircraft in the way
 STR_A016_CAN_T_STOP_START_AIRCRAFT                              :{WHITE}Can't stop/start aircraft...
@@ -2745,10 +2753,10 @@
 STR_A024_CENTER_MAIN_VIEW_ON_HANGAR                             :{BLACK}Centre main view on hangar location
 STR_A025_AIRCRAFT_SELECTION_LIST                                :{BLACK}Aircraft selection list - click on aircraft for information
 STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT                         :{BLACK}Build the highlighted aircraft
-STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Current aircraft action - click here to stop/start aircraft
+STR_A027_CURRENT_AIRCRAFT_ACTION                                :{BLACK}Current aircraft action - click here to stop/start aircraft{}{RED}Red hangar names{BLACK}: Stay in depot{}{GREEN}Green hangar names{BLACK}: Service only
 STR_A028_SHOW_AIRCRAFT_S_ORDERS                                 :{BLACK}Show aircraft's orders
 STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT                           :{BLACK}Centre main view on aircraft's location
-STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Send aircraft to hangar
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR                                :{BLACK}Send aircraft to hangar and stop it there{}Control click will make the aircraft get service only and leave right away
 STR_A02B_SHOW_AIRCRAFT_DETAILS                                  :{BLACK}Show aircraft details
 STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE                             :{BLACK}{BIGFONT}New aircraft now available!
 STR_A02D                                                        :{BLACK}{BIGFONT}{STRING}
--- a/roadveh_cmd.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/roadveh_cmd.c	Sun Aug 27 09:28:52 2006 +0000
@@ -357,7 +357,7 @@
 /** Send a road vehicle to the depot.
  * @param tile unused
  * @param p1 vehicle ID to send to the depot
- * @param p2 unused
+ * @param p2 if bit 0 is set, then the road vehicle will only service at the depot. 0 Makes it stop inside
  */
 int32 CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -393,7 +393,8 @@
 	if (flags & DC_EXEC) {
 		ClearSlot(v);
 		v->current_order.type = OT_GOTO_DEPOT;
-		v->current_order.flags = OF_NON_STOP | OF_HALT_IN_DEPOT;
+		v->current_order.flags = OF_NON_STOP;
+		if (!HASBIT(p2,0)) SETBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 		v->current_order.dest.depot = dep->index;
 		v->dest_tile = dep->xy;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
--- a/roadveh_gui.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/roadveh_gui.c	Sun Aug 27 09:28:52 2006 +0000
@@ -343,7 +343,11 @@
 				Depot *depot = GetDepot(v->current_order.dest.depot);
 				SetDParam(0, depot->town_index);
 				SetDParam(1, v->cur_speed / 2);
-				str = STR_HEADING_FOR_ROAD_DEPOT + _patches.vehicle_speed;
+				if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
+					str = STR_HEADING_FOR_ROAD_DEPOT + _patches.vehicle_speed;
+				} else {
+					str = STR_HEADING_FOR_ROAD_DEPOT_SERVICE + _patches.vehicle_speed;
+				}
 			} break;
 
 			case OT_LOADING:
@@ -379,7 +383,7 @@
 			ScrollMainWindowTo(v->x_pos, v->y_pos);
 			break;
 		case 7: /* goto depot */
-			DoCommandP(v->tile, v->index, 0, NULL, CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT));
+			DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, NULL, CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT));
 			break;
 		case 8: /* turn around */
 			DoCommandP(v->tile, v->index, 0, NULL, CMD_TURN_ROADVEH | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN));
--- a/ship_cmd.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/ship_cmd.c	Sun Aug 27 09:28:52 2006 +0000
@@ -995,7 +995,7 @@
 /** Send a ship to the depot.
  * @param tile unused
  * @param p1 vehicle ID to send to the depot
- * @param p2 unused
+ * @param p2 p2 if bit 0 is set, then the ship will only service at the depot. 0 Makes it stop inside
  */
 int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -1032,7 +1032,8 @@
 	if (flags & DC_EXEC) {
 		v->dest_tile = dep->xy;
 		v->current_order.type = OT_GOTO_DEPOT;
-		v->current_order.flags = OF_NON_STOP | OF_HALT_IN_DEPOT;
+		v->current_order.flags = OF_NON_STOP;
+		if (!HASBIT(p2,0)) SETBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 		v->current_order.dest.depot = dep->index;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 	}
--- a/ship_gui.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/ship_gui.c	Sun Aug 27 09:28:52 2006 +0000
@@ -490,7 +490,11 @@
 						Depot *depot = GetDepot(v->current_order.dest.depot);
 						SetDParam(0, depot->town_index);
 						SetDParam(1, v->cur_speed / 2);
-						str = STR_HEADING_FOR_SHIP_DEPOT + _patches.vehicle_speed;
+						if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
+							str = STR_HEADING_FOR_SHIP_DEPOT + _patches.vehicle_speed;
+						} else {
+							str = STR_HEADING_FOR_SHIP_DEPOT_SERVICE + _patches.vehicle_speed;
+						}
 					} break;
 
 					case OT_LOADING:
@@ -526,7 +530,7 @@
 					ScrollMainWindowTo(v->x_pos, v->y_pos);
 					break;
 				case 7: /* goto hangar */
-					DoCommandP(v->tile, v->index, 0, NULL, CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT));
+					DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, NULL, CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT));
 					break;
 				case 8: /* refit */
 					ShowShipRefitWindow(v);
--- a/train_cmd.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/train_cmd.c	Sun Aug 27 09:28:52 2006 +0000
@@ -1924,7 +1924,7 @@
 /** Send a train to a depot
  * @param tile unused
  * @param p1 train to send to the depot
- * @param p2 unused
+ * @param p2 if bit 0 is set, then the train will only service at the depot. 0 Makes it stop inside
  */
 int32 CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 {
@@ -1960,7 +1960,8 @@
 	if (flags & DC_EXEC) {
 		v->dest_tile = tfdd.tile;
 		v->current_order.type = OT_GOTO_DEPOT;
-		v->current_order.flags = OF_NON_STOP | OF_FULL_LOAD;
+		v->current_order.flags = OF_NON_STOP;
+		if (!HASBIT(p2,0)) SETBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
 		v->current_order.dest.depot = GetDepotByTile(tfdd.tile)->index;
 		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
 		/* If there is no depot in front, reverse automatically */
--- a/train_gui.c	Sun Aug 27 07:23:46 2006 +0000
+++ b/train_gui.c	Sun Aug 27 09:28:52 2006 +0000
@@ -975,7 +975,11 @@
 			case OT_GOTO_DEPOT: {
 				Depot *dep = GetDepot(v->current_order.dest.depot);
 				SetDParam(0, dep->town_index);
-				str = STR_HEADING_FOR_TRAIN_DEPOT + _patches.vehicle_speed;
+				if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
+					str = STR_HEADING_FOR_TRAIN_DEPOT + _patches.vehicle_speed;
+				} else {
+					str = STR_HEADING_FOR_TRAIN_DEPOT_SERVICE + _patches.vehicle_speed;
+				}
 				SetDParam(1, v->u.rail.last_speed);
 			} break;
 
@@ -1021,7 +1025,7 @@
 			break;
 		case 7:	/* goto depot */
 			/* TrainGotoDepot has a nice randomizer in the pathfinder, which causes desyncs... */
-			DoCommandP(v->tile, v->index, 0, NULL, CMD_TRAIN_GOTO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT));
+			DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, NULL, CMD_TRAIN_GOTO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT));
 			break;
 		case 8: /* force proceed */
 			DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));