310 &EngineIntroDateSorter, |
310 &EngineIntroDateSorter, |
311 &EngineNameSorter, |
311 &EngineNameSorter, |
312 &TrainEngineRunningCostSorter, |
312 &TrainEngineRunningCostSorter, |
313 &TrainEnginePowerVsRunningCostSorter, |
313 &TrainEnginePowerVsRunningCostSorter, |
314 &EngineReliabilitySorter, |
314 &EngineReliabilitySorter, |
315 },{ |
315 }, { |
316 /* Road vehicles */ |
316 /* Road vehicles */ |
317 &EngineNumberSorter, |
317 &EngineNumberSorter, |
318 &EngineIntroDateSorter, |
318 &EngineIntroDateSorter, |
319 &EngineNameSorter, |
319 &EngineNameSorter, |
320 &EngineReliabilitySorter, |
320 &EngineReliabilitySorter, |
321 },{ |
321 }, { |
322 /* Ships */ |
322 /* Ships */ |
323 &EngineNumberSorter, |
323 &EngineNumberSorter, |
324 &EngineIntroDateSorter, |
324 &EngineIntroDateSorter, |
325 &EngineNameSorter, |
325 &EngineNameSorter, |
326 &EngineReliabilitySorter, |
326 &EngineReliabilitySorter, |
327 },{ |
327 }, { |
328 /* Aircraft */ |
328 /* Aircraft */ |
329 &EngineNumberSorter, |
329 &EngineNumberSorter, |
330 &AircraftEngineCostSorter, |
330 &AircraftEngineCostSorter, |
331 &AircraftEngineSpeedSorter, |
331 &AircraftEngineSpeedSorter, |
332 &EngineIntroDateSorter, |
332 &EngineIntroDateSorter, |
346 STR_SORT_BY_DROPDOWN_NAME, |
346 STR_SORT_BY_DROPDOWN_NAME, |
347 STR_ENGINE_SORT_RUNNING_COST, |
347 STR_ENGINE_SORT_RUNNING_COST, |
348 STR_ENGINE_SORT_POWER_VS_RUNNING_COST, |
348 STR_ENGINE_SORT_POWER_VS_RUNNING_COST, |
349 STR_SORT_BY_RELIABILITY, |
349 STR_SORT_BY_RELIABILITY, |
350 INVALID_STRING_ID |
350 INVALID_STRING_ID |
351 },{ |
351 }, { |
352 /* Road vehicles */ |
352 /* Road vehicles */ |
353 STR_ENGINE_SORT_ENGINE_ID, |
353 STR_ENGINE_SORT_ENGINE_ID, |
354 STR_ENGINE_SORT_INTRO_DATE, |
354 STR_ENGINE_SORT_INTRO_DATE, |
355 STR_SORT_BY_DROPDOWN_NAME, |
355 STR_SORT_BY_DROPDOWN_NAME, |
356 STR_SORT_BY_RELIABILITY, |
356 STR_SORT_BY_RELIABILITY, |
357 INVALID_STRING_ID |
357 INVALID_STRING_ID |
358 },{ |
358 }, { |
359 /* Ships */ |
359 /* Ships */ |
360 STR_ENGINE_SORT_ENGINE_ID, |
360 STR_ENGINE_SORT_ENGINE_ID, |
361 STR_ENGINE_SORT_INTRO_DATE, |
361 STR_ENGINE_SORT_INTRO_DATE, |
362 STR_SORT_BY_DROPDOWN_NAME, |
362 STR_SORT_BY_DROPDOWN_NAME, |
363 STR_SORT_BY_RELIABILITY, |
363 STR_SORT_BY_RELIABILITY, |
364 INVALID_STRING_ID |
364 INVALID_STRING_ID |
365 },{ |
365 }, { |
366 /* Aircraft */ |
366 /* Aircraft */ |
367 STR_ENGINE_SORT_ENGINE_ID, |
367 STR_ENGINE_SORT_ENGINE_ID, |
368 STR_ENGINE_SORT_COST, |
368 STR_ENGINE_SORT_COST, |
369 STR_SORT_BY_MAX_SPEED, |
369 STR_SORT_BY_MAX_SPEED, |
370 STR_ENGINE_SORT_INTRO_DATE, |
370 STR_ENGINE_SORT_INTRO_DATE, |
404 int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0); |
404 int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0); |
405 |
405 |
406 /* Purchase Cost - Engine weight */ |
406 /* Purchase Cost - Engine weight */ |
407 SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5); |
407 SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5); |
408 SetDParam(1, rvi->weight << multihead); |
408 SetDParam(1, rvi->weight << multihead); |
409 DrawString(x,y, STR_PURCHASE_INFO_COST_WEIGHT, 0); |
409 DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, 0); |
410 y += 10; |
410 y += 10; |
411 |
411 |
412 /* Max speed - Engine power */ |
412 /* Max speed - Engine power */ |
413 SetDParam(0, rvi->max_speed * 10 / 16); |
413 SetDParam(0, rvi->max_speed * 10 / 16); |
414 SetDParam(1, rvi->power << multihead); |
414 SetDParam(1, rvi->power << multihead); |
415 DrawString(x,y, STR_PURCHASE_INFO_SPEED_POWER, 0); |
415 DrawString(x, y, STR_PURCHASE_INFO_SPEED_POWER, 0); |
416 y += 10; |
416 y += 10; |
417 |
417 |
418 /* Max tractive effort - not applicable if old acceleration or maglev */ |
418 /* Max tractive effort - not applicable if old acceleration or maglev */ |
419 if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) { |
419 if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) { |
420 SetDParam(0, ((rvi->weight << multihead) * 10 * rvi->tractive_effort) / 256); |
420 SetDParam(0, ((rvi->weight << multihead) * 10 * rvi->tractive_effort) / 256); |
421 DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0); |
421 DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, 0); |
422 y += 10; |
422 y += 10; |
423 } |
423 } |
424 |
424 |
425 /* Running cost */ |
425 /* Running cost */ |
426 SetDParam(0, (rvi->running_cost_base * _price.running_rail[rvi->running_cost_class] >> 8) << multihead); |
426 SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost_base) * _price.running_rail[rvi->running_cost_class] >> 8) << multihead); |
427 DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
427 DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
428 y += 10; |
428 y += 10; |
429 |
429 |
430 /* Powered wagons power - Powered wagons extra weight */ |
430 /* Powered wagons power - Powered wagons extra weight */ |
431 if (rvi->pow_wag_power != 0) { |
431 if (rvi->pow_wag_power != 0) { |
432 SetDParam(0, rvi->pow_wag_power); |
432 SetDParam(0, rvi->pow_wag_power); |
433 SetDParam(1, rvi->pow_wag_weight); |
433 SetDParam(1, rvi->pow_wag_weight); |
434 DrawString(x,y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0); |
434 DrawString(x, y, STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT, 0); |
435 y += 10; |
435 y += 10; |
436 }; |
436 }; |
437 |
437 |
438 return y; |
438 return y; |
439 } |
439 } |
442 static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi) |
442 static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const RoadVehicleInfo *rvi) |
443 { |
443 { |
444 bool refittable = (_engine_info[engine_number].refit_mask != 0); |
444 bool refittable = (_engine_info[engine_number].refit_mask != 0); |
445 |
445 |
446 /* Purchase cost - Max speed */ |
446 /* Purchase cost - Max speed */ |
447 SetDParam(0, rvi->base_cost * (_price.roadveh_base>>3)>>5); |
447 SetDParam(0, rvi->base_cost * (_price.roadveh_base >> 3) >> 5); |
448 SetDParam(1, rvi->max_speed * 10 / 32); |
448 SetDParam(1, rvi->max_speed * 10 / 32); |
449 DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0); |
449 DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0); |
450 y += 10; |
450 y += 10; |
451 |
451 |
452 /* Running cost */ |
452 /* Running cost */ |
466 |
466 |
467 /* Draw ship specific details */ |
467 /* Draw ship specific details */ |
468 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi) |
468 static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const ShipVehicleInfo *svi) |
469 { |
469 { |
470 /* Purchase cost - Max speed */ |
470 /* Purchase cost - Max speed */ |
471 SetDParam(0, svi->base_cost * (_price.ship_base>>3)>>5); |
471 SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5); |
472 SetDParam(1, svi->max_speed * 10 / 32); |
472 SetDParam(1, svi->max_speed * 10 / 32); |
473 DrawString(x,y, STR_PURCHASE_INFO_COST_SPEED, 0); |
473 DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0); |
474 y += 10; |
474 y += 10; |
475 |
475 |
476 /* Cargo type + capacity */ |
476 /* Cargo type + capacity */ |
477 SetDParam(0, svi->cargo_type); |
477 SetDParam(0, svi->cargo_type); |
478 SetDParam(1, svi->capacity); |
478 SetDParam(1, svi->capacity); |
479 SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY); |
479 SetDParam(2, svi->refittable ? STR_9842_REFITTABLE : STR_EMPTY); |
480 DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0); |
480 DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0); |
481 y += 10; |
481 y += 10; |
482 |
482 |
483 /* Running cost */ |
483 /* Running cost */ |
484 SetDParam(0, svi->running_cost * _price.ship_running >> 8); |
484 SetDParam(0, GetEngineProperty(engine_number, 0x0B, svi->running_cost) * _price.ship_running >> 8); |
485 DrawString(x,y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
485 DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
486 y += 10; |
486 y += 10; |
487 |
487 |
488 return y; |
488 return y; |
489 } |
489 } |
490 |
490 |
492 static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi) |
492 static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const AircraftVehicleInfo *avi) |
493 { |
493 { |
494 CargoID cargo; |
494 CargoID cargo; |
495 |
495 |
496 /* Purchase cost - Max speed */ |
496 /* Purchase cost - Max speed */ |
497 SetDParam(0, avi->base_cost * (_price.aircraft_base>>3)>>5); |
497 SetDParam(0, avi->base_cost * (_price.aircraft_base >> 3) >> 5); |
498 SetDParam(1, avi->max_speed * 10 / 16); |
498 SetDParam(1, avi->max_speed * 10 / 16); |
499 DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0); |
499 DrawString(x, y, STR_PURCHASE_INFO_COST_SPEED, 0); |
500 y += 10; |
500 y += 10; |
501 |
501 |
502 /* Cargo capacity */ |
502 /* Cargo capacity */ |
514 DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0); |
514 DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0); |
515 } |
515 } |
516 y += 10; |
516 y += 10; |
517 |
517 |
518 /* Running cost */ |
518 /* Running cost */ |
519 SetDParam(0, avi->running_cost * _price.aircraft_running >> 8); |
519 SetDParam(0, GetEngineProperty(engine_number, 0x0E, avi->running_cost) * _price.aircraft_running >> 8); |
520 DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
520 DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, 0); |
521 y += 10; |
521 y += 10; |
522 |
522 |
523 return y; |
523 return y; |
524 } |
524 } |
558 |
558 |
559 SetDParam(0, rvi->cargo_type); |
559 SetDParam(0, rvi->cargo_type); |
560 SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead); |
560 SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead); |
561 SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY); |
561 SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY); |
562 } |
562 } |
563 DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0); |
563 DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0); |
564 y += 10; |
564 y += 10; |
565 } |
565 } |
566 break; |
566 break; |
567 case VEH_ROAD: |
567 case VEH_ROAD: |
568 y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number)); |
568 y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number)); |