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); |