train_cmd.c
changeset 534 17ab2f22ff74
parent 507 8aa8100b0b22
child 540 fbed599dadbb
equal deleted inserted replaced
533:f512d1b9bc17 534:17ab2f22ff74
   201 {
   201 {
   202 	const RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
   202 	const RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
   203 	int cap;
   203 	int cap;
   204 	uint multihead = ((rvi->flags & RVI_MULTIHEAD) ? 1 : 0);
   204 	uint multihead = ((rvi->flags & RVI_MULTIHEAD) ? 1 : 0);
   205 
   205 
   206 	SET_DPARAM32(0, ((_price.build_railvehicle >> 3) * rvi->base_cost) >> 5);
   206 	SetDParam(0, ((_price.build_railvehicle >> 3) * rvi->base_cost) >> 5);
   207 	SET_DPARAM16(2, rvi->max_speed * 10 >> 4);
   207 	SetDParam(2, rvi->max_speed * 10 >> 4);
   208 	SET_DPARAM16(3, rvi->power << multihead);
   208 	SetDParam(3, rvi->power << multihead);
   209 	SET_DPARAM16(1, rvi->weight << multihead);
   209 	SetDParam(1, rvi->weight << multihead);
   210 
   210 
   211 	SET_DPARAM32(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead);
   211 	SetDParam(4, (rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8) << multihead);
   212 
   212 
   213 	cap = rvi->capacity;
   213 	cap = rvi->capacity;
   214 	SET_DPARAM16(5, STR_8838_N_A);
   214 	SetDParam(5, STR_8838_N_A);
   215 	if (cap != 0) {
   215 	if (cap != 0) {
   216 		SET_DPARAM16(6, cap << multihead);
   216 		SetDParam(6, cap << multihead);
   217 		SET_DPARAM16(5, _cargoc.names_long_p[rvi->cargo_type]);
   217 		SetDParam(5, _cargoc.names_long_p[rvi->cargo_type]);
   218 	}
   218 	}
   219 	DrawStringMultiCenter(x, y, STR_885B_COST_WEIGHT_T_SPEED_POWER, maxw);
   219 	DrawStringMultiCenter(x, y, STR_885B_COST_WEIGHT_T_SPEED_POWER, maxw);
   220 }
   220 }
   221 
   221 
   222 
   222 
  1722 
  1722 
  1723 	/* check if a train ever visited this station before */
  1723 	/* check if a train ever visited this station before */
  1724 	st = DEREF_STATION(station);
  1724 	st = DEREF_STATION(station);
  1725 	if (!(st->had_vehicle_of_type & HVOT_TRAIN)) {
  1725 	if (!(st->had_vehicle_of_type & HVOT_TRAIN)) {
  1726 		st->had_vehicle_of_type |= HVOT_TRAIN;
  1726 		st->had_vehicle_of_type |= HVOT_TRAIN;
  1727 		SET_DPARAM16(0, st->index);
  1727 		SetDParam(0, st->index);
  1728 		flags = (v->owner == _local_player) ? NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ARRIVAL_PLAYER, 0) : NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ARRIVAL_OTHER, 0);
  1728 		flags = (v->owner == _local_player) ? NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ARRIVAL_PLAYER, 0) : NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ARRIVAL_OTHER, 0);
  1729 		AddNewsItem(
  1729 		AddNewsItem(
  1730 			STR_8801_CITIZENS_CELEBRATE_FIRST,
  1730 			STR_8801_CITIZENS_CELEBRATE_FIRST,
  1731 			flags,
  1731 			flags,
  1732 			v->index,
  1732 			v->index,
  1997 	SetVehicleCrashed(v);
  1997 	SetVehicleCrashed(v);
  1998 	if (coll->subtype == 0)
  1998 	if (coll->subtype == 0)
  1999 		SetVehicleCrashed(coll);
  1999 		SetVehicleCrashed(coll);
  2000 
  2000 
  2001 
  2001 
  2002 	SET_DPARAM16(0, num);
  2002 	SetDParam(0, num);
  2003 
  2003 
  2004 	AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
  2004 	AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
  2005 		NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
  2005 		NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
  2006 		v->index,
  2006 		v->index,
  2007 		0);
  2007 		0);
  2556 
  2556 
  2557 		// User initiated?
  2557 		// User initiated?
  2558 		else if (t & OF_FULL_LOAD) {
  2558 		else if (t & OF_FULL_LOAD) {
  2559 			v->vehstatus |= VS_STOPPED;
  2559 			v->vehstatus |= VS_STOPPED;
  2560 			if (v->owner == _local_player) {
  2560 			if (v->owner == _local_player) {
  2561 				SET_DPARAM16(0, v->unitnumber);
  2561 				SetDParam(0, v->unitnumber);
  2562 				AddNewsItem(
  2562 				AddNewsItem(
  2563 					STR_8814_TRAIN_IS_WAITING_IN_DEPOT,
  2563 					STR_8814_TRAIN_IS_WAITING_IN_DEPOT,
  2564 					NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2564 					NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2565 					v->index,
  2565 					v->index,
  2566 					0);
  2566 					0);
  2643 		CheckIfTrainNeedsService(v);
  2643 		CheckIfTrainNeedsService(v);
  2644 
  2644 
  2645 		// check if train hasn't advanced in its order list for a set number of days
  2645 		// check if train hasn't advanced in its order list for a set number of days
  2646 		if (_patches.lost_train_days && v->num_orders && !(v->vehstatus & VS_STOPPED) && ++v->u.rail.days_since_order_progr >= _patches.lost_train_days && v->owner == _local_player) {
  2646 		if (_patches.lost_train_days && v->num_orders && !(v->vehstatus & VS_STOPPED) && ++v->u.rail.days_since_order_progr >= _patches.lost_train_days && v->owner == _local_player) {
  2647 			v->u.rail.days_since_order_progr = 0;
  2647 			v->u.rail.days_since_order_progr = 0;
  2648 			SET_DPARAM16(0, v->unitnumber);
  2648 			SetDParam(0, v->unitnumber);
  2649 			AddNewsItem(
  2649 			AddNewsItem(
  2650 				STR_TRAIN_IS_LOST,
  2650 				STR_TRAIN_IS_LOST,
  2651 				NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2651 				NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2652 				v->index,
  2652 				v->index,
  2653 				0);
  2653 				0);
  2682 	FOR_ALL_VEHICLES(v) {
  2682 	FOR_ALL_VEHICLES(v) {
  2683 		if (v->type == VEH_Train && v->subtype == 0) {
  2683 		if (v->type == VEH_Train && v->subtype == 0) {
  2684 
  2684 
  2685 			// show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list)
  2685 			// show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list)
  2686 			if (_patches.train_income_warn && v->owner == _local_player && v->age >= 730 && v->profit_this_year < 0) {
  2686 			if (_patches.train_income_warn && v->owner == _local_player && v->age >= 730 && v->profit_this_year < 0) {
  2687 				SET_DPARAM32(1, v->profit_this_year);
  2687 				SetDParam(1, v->profit_this_year);
  2688 				SET_DPARAM16(0, v->unitnumber);
  2688 				SetDParam(0, v->unitnumber);
  2689 				AddNewsItem(
  2689 				AddNewsItem(
  2690 					STR_TRAIN_IS_UNPROFITABLE,
  2690 					STR_TRAIN_IS_UNPROFITABLE,
  2691 					NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2691 					NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0),
  2692 					v->index,
  2692 					v->index,
  2693 					0);
  2693 					0);