OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Functions | Variables
engine.cpp File Reference

Base for all engine handling. More...

`#include "stdafx.h"`
`#include "company_func.h"`
`#include "command_func.h"`
`#include "news_func.h"`
`#include "aircraft.h"`
`#include "newgrf.h"`
`#include "newgrf_engine.h"`
`#include "strings_func.h"`
`#include "core/random_func.hpp"`
`#include "window_func.h"`
`#include "date_func.h"`
`#include "autoreplace_gui.h"`
`#include "string_func.h"`
`#include "ai/ai.hpp"`
`#include "core/pool_func.hpp"`
`#include "engine_gui.h"`
`#include "engine_func.h"`
`#include "engine_base.h"`
`#include "company_base.h"`
`#include "vehicle_func.h"`
`#include "articulated_vehicles.h"`
`#include "error.h"`
`#include "table/strings.h"`
`#include "table/engines.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Functions
| assert_compile (lengthof(_orig_rail_vehicle_info)+lengthof(_orig_road_vehicle_info)+lengthof(_orig_ship_vehicle_info)+lengthof(_orig_aircraft_vehicle_info)==lengthof(_orig_engine_info))
void | SetupEngines ()
| Initialise the engine pool with the data from the original vehicles.
void | ShowEnginePreviewWindow (EngineID engine)
static bool | IsWagon (EngineID index)
| Determine whether an engine type is a wagon (and not a loco).
static void | CalcEngineReliability (Engine *e)
| Update #reliability of engine e, (if needed) update the engine GUIs.
void | SetYearEngineAgingStops ()
| Compute the value for _year_engine_aging_stops.
void | StartupOneEngine (Engine *e, Date aging_date)
| Start/initialise one engine.
void | StartupEngines ()
| Start/initialise all our engines.
static void | AcceptEnginePreview (EngineID eid, CompanyID company)
| Company company accepts engine eid for preview.
static CompanyID | GetPreviewCompany (Engine *e)
| Get the best company for an engine preview.
static bool | IsVehicleTypeDisabled (VehicleType type, bool ai)
| Checks if a vehicle type is disabled for all/ai companies.
void | EnginesDailyLoop ()
| Daily check to offer an exclusive engine preview to the companies.
void | ClearEnginesHiddenFlagOfCompany (CompanyID cid)
| Clear the 'hidden' flag for all engines of a new company.
CommandCost | CmdSetVehicleVisibility (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Set the visibility of an engine.
CommandCost | CmdWantEnginePreview (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Accept an engine prototype.
static void | NewVehicleAvailable (Engine *e)
| An engine has become available for general use.
void | EnginesMonthlyLoop ()
| Monthly update of the availability, reliability, and preview offers of the engines.
static bool | IsUniqueEngineName (const char *name)
| Is name still free as name for an engine?
CommandCost | CmdRenameEngine (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Rename an engine.
bool | IsEngineBuildable (EngineID engine, VehicleType type, CompanyID company)
| Check if an engine is buildable.
bool | IsEngineRefittable (EngineID engine)
| Check if an engine is refittable.
void | CheckEngines ()
| Check for engines that have an appropriate availability.

## Variables
EnginePool | _engine_pool ("Engine")
EngineOverrideManager | _engine_mngr
static Year | _year_engine_aging_stops
| Year that engine aging stops.
const uint8 | _engine_counts [4]
| Number of engines of each vehicle type in original engine data.
const uint8 | _engine_offsets [4]
| Offset of the first engine of each vehicle type in original engine data.

## Detailed Description

Base for all engine handling.

Definition in file engine.cpp.

## Function Documentation

static void AcceptEnginePreview | ( | EngineID | eid,
|  | CompanyID | company
| ) |  |
| static

Company company accepts engine eid for preview.

Parameters

  eid | Engine being accepted (is under preview).
  company | Current company previewing the engine.

Definition at line 695 of file engine.cpp.

References _date, _local_company, AddDateIntroducedRailTypes(), AddRemoveEngineFromAutoreplaceAndBuildWindows(), CompanyProperties::avail_railtypes, Company::avail_roadtypes, Engine::company_avail, EF_ROAD_TRAM, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), GetRailTypeInfo(), HasBit(), RailtypeInfo::introduces_railtypes, INVALID_COMPANY, InvalidateWindowData(), EngineInfo::misc_flags, Engine::preview_asked, Engine::preview_company, RAILTYPE_END, ROADTYPE_ROAD, ROADTYPE_TRAM, SetBit(), TRANSPORT_ROAD, TRANSPORT_WATER, Engine::type, VEH_ROAD, VEH_SHIP, VEH_TRAIN, WC_BUILD_TOOLBAR, and WC_ENGINE_PREVIEW.

Referenced by CmdWantEnginePreview().

static void CalcEngineReliability | ( | Engine * | e | ) |
| static

Update #reliability of engine e, (if needed) update the engine GUIs.

Parameters

  e | Engine to update.

Definition at line 560 of file engine.cpp.

References _settings_game, AddRemoveEngineFromAutoreplaceAndBuildWindows(), EngineInfo::base_life, Engine::company_avail, Engine::duration_phase_1, Engine::duration_phase_2, Engine::duration_phase_3, max(), VehicleSettings::never_expire_vehicles, Engine::reliability, Engine::reliability_final, Engine::reliability_max, Engine::reliability_start, EngineInfo::retire_early, SetWindowClassesDirty(), Engine::type, GameSettings::vehicle, WC_BUILD_VEHICLE, and WC_REPLACE_VEHICLE.

Referenced by EnginesMonthlyLoop(), and StartupOneEngine().

void ClearEnginesHiddenFlagOfCompany | ( | CompanyID | cid | ) |

Clear the 'hidden' flag for all engines of a new company.

Parameters

  cid | Company being created.

Definition at line 824 of file engine.cpp.

References Engine::company_hidden, and SB().

Referenced by DoStartupNewCompany().

CommandCost CmdRenameEngine | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text
| ) |  |

Rename an engine.

Parameters

  tile | unused
  flags | operation to perform
  p1 | engine ID to rename
  p2 | unused
  text | the new name or an empty string when resetting to the default

Returns
  the cost of this operation or an error

Definition at line 1011 of file engine.cpp.

References CMD_ERROR, DC_EXEC, free(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), IsUniqueEngineName(), MarkWholeScreenDirty(), MAX_LENGTH_ENGINE_NAME_CHARS, Engine::name, return_cmd_error, stredup(), StrEmpty(), and Utf8StringLength().

CommandCost CmdSetVehicleVisibility | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text
| ) |  |

Set the visibility of an engine.

Parameters

  tile | Unused.
  flags | Operation to perform.
  p1 | Unused.
  p2 | Bit 31: 0=visible, 1=hidden, other bits for the EngineID.
  text | Unused.

Returns
  The cost of this operation or an error.

Definition at line 841 of file engine.cpp.

References _current_company, AddRemoveEngineFromAutoreplaceAndBuildWindows(), CMD_ERROR, Engine::company_hidden, DC_EXEC, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsEngineBuildable(), MAX_COMPANIES, SB(), and Engine::type.

CommandCost CmdWantEnginePreview | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text
| ) |  |

Accept an engine prototype.

XXX - it is possible that the top-company changes while you are waiting to accept the offer? Then it becomes invalid

Parameters

  tile | unused
  flags | operation to perform
  p1 | engine-prototype offered
  p2 | unused
  text | unused

Returns
  the cost of this operation or an error

Definition at line 865 of file engine.cpp.

References _current_company, AcceptEnginePreview(), CMD_ERROR, DC_EXEC, ENGINE_EXCLUSIVE_PREVIEW, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), and Engine::preview_company.

void EnginesDailyLoop | ( |  | ) |

Daily check to offer an exclusive engine preview to the companies.

Functions used by the IncreaseDate function.

Definition at line 780 of file engine.cpp.

References _cur_year, _date, _year_engine_aging_stops, AddDateIntroducedRailTypes(), CompanyProperties::avail_railtypes, CountBits(), DeleteWindowById(), ENGINE_EXCLUSIVE_PREVIEW, Engine::flags, GetPreviewCompany(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, IsInteractiveCompany(), IsVehicleTypeDisabled(), MAX_COMPANIES, AI::NewEvent(), Engine::preview_asked, Engine::preview_company, Engine::preview_wait, SetBit(), Engine::type, and WC_ENGINE_PREVIEW.

Referenced by OnNewDay().

void EnginesMonthlyLoop | ( |  | ) |

Monthly update of the availability, reliability, and preview offers of the engines.

Definition at line 948 of file engine.cpp.

References _cur_year, _date, _year_engine_aging_stops, CalcEngineReliability(), DAYS_IN_YEAR, ENGINE_AVAILABLE, ENGINE_EXCLUSIVE_PREVIEW, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Engine::intro_date, INVALID_COMPANY, InvalidateWindowClassesData(), Engine::IsEnabled(), IsVehicleTypeDisabled(), IsWagon(), MAX_DAY, NewVehicleAvailable(), Engine::preview_asked, Engine::preview_company, Engine::type, and WC_BUILD_VEHICLE.

Referenced by ClickChangeDateCheat(), and OnNewMonth().

static CompanyID GetPreviewCompany | ( | Engine * | e | ) |
| static

Get the best company for an engine preview.

Parameters

  e | Engine to preview.

Returns
  Best company if it exists, INVALID_COMPANY otherwise.

Definition at line 731 of file engine.cpp.

References CompanyProperties::block_preview, Engine::CanCarryCargo(), Vehicle::cargo_type, FOR_ALL_VEHICLES, Vehicle::GetEngine(), GetUnionOfArticulatedRefitMasks(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, CompanyProperties::old_economy, Vehicle::owner, CompanyEconomyEntry::performance_history, Engine::preview_asked, Engine::type, BaseVehicle::type, and VEH_TRAIN.

Referenced by EnginesDailyLoop().

bool IsEngineBuildable | ( | EngineID | engine,
|  | VehicleType | type,
|  | CompanyID | company
| ) |  |

Check if an engine is buildable.

Parameters

  engine | index of the engine to check.
  type | the type the engine should be.
  company | index of the company.

Returns
  True if an engine is valid, of the specified type, and buildable by the given company.

Definition at line 1047 of file engine.cpp.

References CompanyProperties::avail_railtypes, Engine::company_avail, ENGINE_AVAILABLE, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), GetRailTypeInfo(), HasBit(), Engine::IsEnabled(), OWNER_DEITY, Engine::type, and VEH_TRAIN.

Referenced by CheckAutoreplaceValidity(), CmdBuildVehicle(), CmdSetVehicleVisibility(), and GetNewEngineType().

bool IsEngineRefittable | ( | EngineID | engine | ) |

Check if an engine is refittable.

Note: Likely you want to use IsArticulatedVehicleRefittable().

Parameters

  engine | index of the engine to check.

Returns
  true if the engine is refittable.

Definition at line 1083 of file engine.cpp.

References EngineInfo::callback_mask, Engine::CanCarryCargo(), CBM_VEHICLE_CARGO_SUFFIX, CT_INVALID, Engine::GetDefaultCargoType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), and HasBit().

Referenced by GetArticulatedVehicleCargoesAndRefits(), IsArticulatedVehicleRefittable(), IsVehicleRefitable(), and OrdersWindow::UpdateAutoRefitState().

static bool IsUniqueEngineName | ( | const char * | name | ) |
| static

Is name still free as name for an engine?

Parameters

  name | New name of an engine.

Returns
  `false` if the name is being used already, else `true`.

Definition at line 991 of file engine.cpp.

References Engine::name.

Referenced by CmdRenameEngine().

static bool IsVehicleTypeDisabled | ( | VehicleType | type,
|  | bool | ai
| ) |  |
| static

Checks if a vehicle type is disabled for all/ai companies.

Parameters

  type | The vehicle type which shall be checked.
  ai | If true, check if the type is disabled for AI companies, otherwise check if the vehicle type is disabled for human companies.

Returns
  Whether or not a vehicle type is disabled.

Definition at line 767 of file engine.cpp.

References _settings_game, GameSettings::ai, AISettings::ai_disable_veh_aircraft, AISettings::ai_disable_veh_roadveh, AISettings::ai_disable_veh_ship, AISettings::ai_disable_veh_train, VehicleSettings::max_aircraft, VehicleSettings::max_roadveh, VehicleSettings::max_ships, VehicleSettings::max_trains, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, and GameSettings::vehicle.

Referenced by EnginesDailyLoop(), EnginesMonthlyLoop(), and NewVehicleAvailable().

static bool IsWagon | ( | EngineID | index | ) |
| static

Determine whether an engine type is a wagon (and not a loco).

Parameters

  index | Engine getting queried.

Returns
  Whether the queried engine is a wagon.

Definition at line 550 of file engine.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), RAILVEH_WAGON, Engine::type, and VEH_TRAIN.

Referenced by EnginesMonthlyLoop(), and NewVehicleAvailable().

static void NewVehicleAvailable | ( | Engine * | e | ) |
| static

An engine has become available for general use.

Also handle the exclusive engine preview contract.

Parameters

  e | Engine generally available as of now.

Definition at line 880 of file engine.cpp.

References _date, AddDateIntroducedRailTypes(), AddNewsItem(), AddRemoveEngineFromAutoreplaceAndBuildWindows(), CompanyProperties::avail_railtypes, Company::avail_roadtypes, CompanyProperties::block_preview, AI::BroadcastNewEvent(), Engine::company_avail, DeleteWindowById(), EF_ROAD_TRAM, ENGINE_AVAILABLE, ENGINE_EXCLUSIVE_PREVIEW, Vehicle::engine_type, Engine::flags, FOR_ALL_VEHICLES, SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), GetEngineCategoryName(), GetRailTypeInfo(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, RailtypeInfo::introduces_railtypes, InvalidateWindowData(), Aircraft::IsNormalAircraft(), IsVehicleTypeDisabled(), IsWagon(), EngineInfo::misc_flags, NF_VEHICLE, NR_ENGINE, NT_NEW_VEHICLES, Vehicle::owner, RAILTYPE_END, ROADTYPE_ROAD, ROADTYPE_TRAM, SetBit(), SetDParam(), TRANSPORT_ROAD, TRANSPORT_WATER, Engine::type, BaseVehicle::type, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, WC_BUILD_TOOLBAR, and WC_ENGINE_PREVIEW.

Referenced by EnginesMonthlyLoop().

void SetYearEngineAgingStops | ( |  | ) |

Compute the value for _year_engine_aging_stops.

Definition at line 598 of file engine.cpp.

References _settings_game, _year_engine_aging_stops, EngineInfo::base_intro, EngineInfo::climates, ConvertDateToYMD(), DAYS_IN_LEAP_YEAR, GameSettings::game_creation, HasBit(), GameCreationSettings::landscape, EngineInfo::lifelength, max(), RAILVEH_WAGON, Engine::type, VEH_TRAIN, and YearMonthDay::year.

Referenced by AfterLoadGRFs().

void StartupEngines | ( |  | ) |

Start/initialise all our engines.

Must be called whenever there are changes to the NewGRF config.

Definition at line 669 of file engine.cpp.

References _date, _year_engine_aging_stops, CompanyProperties::avail_railtypes, Company::avail_roadtypes, ConvertYMDToDate(), GetCompanyRailtypes(), GetCompanyRoadtypes(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowClassesData(), min(), StartupOneEngine(), and WC_BUILD_VEHICLE.

Referenced by _GenerateWorld(), AfterLoadGame(), DEF_CONSOLE_CMD(), SaveLoadWindow::OnTimeout(), and ReloadNewGRFData().

void StartupOneEngine | ( | Engine * | e,
|  | Date | aging_date
| ) |  |

Start/initialise one engine.

Parameters

  e | The engine to initialise.
  aging_date | The date used for age calculations.

Definition at line 624 of file engine.cpp.

References _date, _settings_game, EngineInfo::base_intro, EngineInfo::base_life, CalcEngineReliability(), EngineInfo::climates, Engine::company_avail, Engine::company_hidden, ConvertYMDToDate(), Engine::duration_phase_1, Engine::duration_phase_2, Engine::duration_phase_3, ENGINE_AVAILABLE, Engine::flags, GameSettings::game_creation, GB(), HasBit(), Engine::intro_date, GameCreationSettings::landscape, Engine::reliability_final, Engine::reliability_max, Engine::reliability_spd_dec, Engine::reliability_start, and GameCreationSettings::starting_year.

Referenced by FixTTOEngines(), and StartupEngines().

## Variable Documentation

const uint8 _engine_counts[4]

Initial value:
{
lengthof(_orig_rail_vehicle_info),
lengthof(_orig_road_vehicle_info),
lengthof(_orig_ship_vehicle_info),
lengthof(_orig_aircraft_vehicle_info),
}

Number of engines of each vehicle type in original engine data.

Definition at line 52 of file engine.cpp.

Referenced by GetNewEngine(), and ParamSet().

const uint8 _engine_offsets[4]

Initial value:
{
0,
lengthof(_orig_rail_vehicle_info),
lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info),
lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info),
}

Offset of the first engine of each vehicle type in original engine data.

Definition at line 60 of file engine.cpp.

Referenced by ParamSet().

Year _year_engine_aging_stops
| static

Year that engine aging stops.

Engines will not reduce in reliability and no more engines will be introduced

Definition at line 49 of file engine.cpp.

Referenced by EnginesDailyLoop(), EnginesMonthlyLoop(), SetYearEngineAgingStops(), and StartupEngines().