11#include "../void_map.h" 
   12#include "../signs_base.h" 
   13#include "../depot_base.h" 
   15#include "../gamelog_internal.h" 
   16#include "../network/network.h" 
   17#include "../network/network_func.h" 
   18#include "../gfxinit.h" 
   19#include "../viewport_func.h" 
   20#include "../viewport_kdtree.h" 
   21#include "../industry.h" 
   22#include "../clear_map.h" 
   23#include "../vehicle_func.h" 
   24#include "../string_func.h" 
   25#include "../strings_func.h" 
   26#include "../window_func.h" 
   27#include "../roadveh.h" 
   28#include "../roadveh_cmd.h" 
   30#include "../station_base.h" 
   31#include "../waypoint_base.h" 
   32#include "../roadstop_base.h" 
   33#include "../tunnelbridge_map.h" 
   34#include "../pathfinder/yapf/yapf_cache.h" 
   35#include "../elrail_func.h" 
   36#include "../signs_func.h" 
   37#include "../aircraft.h" 
   38#include "../object_map.h" 
   39#include "../object_base.h" 
   40#include "../tree_map.h" 
   41#include "../company_func.h" 
   42#include "../road_cmd.h" 
   43#include "../ai/ai.hpp" 
   44#include "../script/script_gui.h" 
   45#include "../game/game.hpp" 
   47#include "../economy_base.h" 
   48#include "../animated_tile_map.h" 
   49#include "../animated_tile_func.h" 
   50#include "../subsidy_base.h" 
   51#include "../subsidy_func.h" 
   53#include "../newgrf_station.h" 
   54#include "../engine_func.h" 
   55#include "../rail_gui.h" 
   56#include "../core/backup_type.hpp" 
   57#include "../smallmap_gui.h" 
   58#include "../news_func.h" 
   59#include "../order_backup.h" 
   61#include "../disaster_vehicle.h" 
   64#include "../timer/timer.h" 
   65#include "../timer/timer_game_calendar.h" 
   66#include "../timer/timer_game_economy.h" 
   67#include "../timer/timer_game_tick.h" 
   68#include "../picker_func.h" 
   74#include "table/strings.h" 
   76#include "../safeguards.h" 
   96    if (include_invalid_water_class) {
 
  113  bool has_water = 
false;
 
  114  bool has_canal = 
false;
 
  115  bool has_river = 
false;
 
  124        } 
else if (!
IsLock(neighbour)) {
 
  148  if (!has_water && !has_canal && !has_river && include_invalid_water_class) {
 
  153  if (has_river && !has_canal) {
 
  155  } 
else if (has_canal || !has_water) {
 
 
  162static void ConvertTownOwner()
 
  164  for (
auto tile : 
Map::Iterate()) {
 
  182static void UpdateExclusiveRights()
 
  185    t->exclusivity = CompanyID::Invalid();
 
  189static const uint8_t convert_currency[] = {
 
  198static void UpdateCurrencies()
 
  206static void UpdateVoidTiles()
 
  214  return rt >= min ? (
RailType)(rt + 1): rt;
 
  225  UpdateAllTextEffectVirtCoords();
 
  226  RebuildViewportKdtree();
 
 
  229void ClearAllCachedNames()
 
  231  ClearAllStationCachedNames();
 
  233  ClearAllIndustryCachedNames();
 
  252  ClearAllCachedNames();
 
  254  ResetViewportAfterLoadGame();
 
  272    if (i->psa != 
nullptr) {
 
  273      i->psa->feature = GSF_INDUSTRIES;
 
  274      i->psa->tile = i->location.tile;
 
  278    if (s->airport.psa != 
nullptr) {
 
  279      s->airport.psa->feature = GSF_AIRPORTS;
 
  280      s->airport.psa->tile = s->airport.tile;
 
  284    for (
auto &it : t->psa_list) {
 
  290    if (rv->IsFrontEngine()) {
 
 
  313typedef void (CDECL *SignalHandlerPointer)(int);
 
  314static SignalHandlerPointer _prev_segfault = 
nullptr;
 
  315static SignalHandlerPointer _prev_abort    = 
nullptr;
 
  316static SignalHandlerPointer _prev_fpe      = 
nullptr;
 
  336  signal(SIGSEGV, _prev_segfault);
 
  337  signal(SIGABRT, _prev_abort);
 
  338  signal(SIGFPE,  _prev_fpe);
 
 
  365  message.reserve(1024);
 
  366  message += 
"Loading your savegame caused OpenTTD to crash.\n";
 
  372      "This is most likely caused by a missing NewGRF or a NewGRF that\n" 
  373      "has been loaded as replacement for a missing NewGRF. OpenTTD\n" 
  374      "cannot easily determine whether a replacement NewGRF is of a newer\n" 
  375      "or older version.\n" 
  376      "It will load a NewGRF with the same GRF ID as the missing NewGRF.\n" 
  377      "This means that if the author makes incompatible NewGRFs with the\n" 
  378      "same GRF ID, OpenTTD cannot magically do the right thing. In most\n" 
  379      "cases, OpenTTD will load the savegame and not crash, but this is an\n" 
  381      "Please load the savegame with the appropriate NewGRFs installed.\n" 
  382      "The missing/compatible NewGRFs are:\n";
 
  387        format_append(message, 
"NewGRF {:08X} (checksum {}) not found.\n  Loaded NewGRF \"{}\" (checksum {}) with same GRF ID instead.\n",
 
  391        format_append(message, 
"NewGRF {:08X} ({}) not found; checksum {}.\n",
 
  392            std::byteswap(c->ident.grfid), c->filename, 
FormatArrayAsHex(c->ident.md5sum));
 
  397      "This is probably caused by a corruption in the savegame.\n" 
  398      "Please file a bug report and attach this savegame.\n";
 
  403  SignalHandlerPointer call = 
nullptr;
 
  405    case SIGSEGV: call = _prev_segfault; 
break;
 
  406    case SIGABRT: call = _prev_abort; 
break;
 
  407    case SIGFPE:  call = _prev_fpe; 
break;
 
  408    default: NOT_REACHED();
 
  410  if (call != 
nullptr) call(signum);
 
 
  459    t.
m3() = (hasroad ? bits : 0);
 
 
  479  int entry_x = v->
x_pos;
 
  480  int entry_y = v->
y_pos;
 
  484    case DIR_SW: entry_x &= ~TILE_UNIT_MASK; 
break;
 
  485    case DIR_SE: entry_y &= ~TILE_UNIT_MASK; 
break;
 
  487    default: NOT_REACHED();
 
  497  if (middle_z == entry_z) 
return 0;
 
 
  514    if (v->IsGroundVehicle()) {
 
 
  566  if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 
TileIndex{1};
 
  574  RebuildStationKdtree();
 
  577  RebuildViewportKdtree();
 
  587    Debug(net, 0, 
"The loading savegame was paused due to an error state");
 
  588    Debug(net, 0, 
"  This savegame cannot be used for multiplayer");
 
  611      st->train_station.w = st->train_station.h = 0;
 
  615      if (t.m5() > 7) 
continue; 
 
  620      assert(dx >= 0 && dy >= 0);
 
  631      t.height() = 
GB(t.type(), 0, 4);
 
  632      SB(t.type(), 0, 2, 
GB(t.m6(), 0, 2));
 
  635        SB(t.type(), 2, 2, 
GB(t.m6(), 6, 2));
 
  638        SB(t.type(), 2, 2, 0);
 
  667      if (!c->name.empty()) c->name_1 = STR_SV_UNNAMED;
 
  675      if (!st->name.empty()) st->string_id = STR_SV_STNAME_FALLBACK;
 
  690      if (st->airport.tile       == 0) st->airport.tile = 
INVALID_TILE;
 
  691      if (st->train_station.tile == 0) st->train_station.tile   = 
INVALID_TILE;
 
  841    cp->front->cargo_payment = cp;
 
  842    cp->current_station = cp->front->last_station_visited;
 
  849    static constexpr uint8_t WBL_COAST_FLAG = 0; 
 
  854      switch (
GB(t.m5(), 4, 4)) {
 
  881            st = StationType::Rail;
 
  884            st = StationType::Airport;
 
  887            st = StationType::Truck;
 
  890            st = StationType::Bus;
 
  892          } 
else if (gfx == 75) {                 
 
  893            st = StationType::Oilrig;
 
  896            st = StationType::Dock;
 
  898          } 
else if (gfx == 82) {                 
 
  899            st = StationType::Buoy;
 
  902            st = StationType::Airport;
 
  905            st = StationType::Truck;
 
  908            st = StationType::Bus;
 
  940        bst->
rect.BeforeAddTile(t, StationRect::ADD_FORCE);
 
  947          case StationType::Truck:
 
  948          case StationType::Bus:
 
  969          case StationType::Oilrig: {
 
 1009          t.m4() |= (t.m2() << 4);
 
 1038      c->engine_renew_list            = 
nullptr;
 
 1039      c->settings.engine_renew        = 
false;
 
 1040      c->settings.engine_renew_months = 6;
 
 1041      c->settings.engine_renew_money  = 100000;
 
 1063            uint tmp = 
GB(t.m4(), 0, 4);
 
 1064            SB(t.m4(), 0, 4, 
GB(t.m2(), 0, 4));
 
 1065            SB(t.m2(), 0, 4, tmp);
 
 1066          } 
else if (
HasBit(t.m5(), 2)) {
 
 1076          std::swap(t.m3(), t.m4());
 
 1090          SB(t.m5(), 6, 2, 
GB(t.m5(), 4, 2));
 
 1094              SB(t.m4(), 0, 4, 
GB(t.m5(), 0, 4));
 
 1095              SB(t.m4(), 4, 4, 0);
 
 1096              SB(t.m6(), 2, 4, 0);
 
 1099              SB(t.m4(), 5, 2, 
GB(t.m5(), 2, 2));
 
 1103          SB(t.m7(), 6, 2, 1); 
 
 1114            SB(t.m7(), 6, 2, 1); 
 
 1130          if (fix_roadtypes) 
SB(t.m7(), 6, 2, 
GB(t.m7(), 5, 3));
 
 1131          SB(t.m7(), 5, 1, 
GB(t.m3(), 7, 1)); 
 
 1135              SB(t.m7(), 0, 4, 
GB(t.m3(), 0, 4));  
 
 1136              SB(t.m6(), 3, 3, 
GB(t.m3(), 4, 3));  
 
 1137              SB(t.m3(), 0, 4, 
GB(t.m4(), 4, 4));   
 
 1138              SB(t.m3(), 4, 4, 
GB(t.m5(), 0, 4));   
 
 1139              SB(t.m5(), 0, 4, 
GB(t.m4(), 0, 4));   
 
 1143              SB(t.m7(), 0, 5, 
GB(t.m4(), 0, 5));  
 
 1144              SB(t.m6(), 3, 3, 
GB(t.m3(), 4, 3));  
 
 1145              SB(t.m3(), 4, 4, 
GB(t.m5(), 0, 4));   
 
 1146              SB(t.m5(), 0, 1, 
GB(t.m4(), 6, 1));   
 
 1147              SB(t.m5(), 5, 1, 
GB(t.m4(), 5, 1));   
 
 1163          if (fix_roadtypes) 
SB(t.m7(), 6, 2, 
GB(t.m3(), 0, 3));
 
 1165          SB(t.m3(), 4, 4, t.m1());
 
 1172            if (fix_roadtypes) 
SB(t.m7(), 6, 2, 
GB(t.m3(), 0, 3));
 
 1175            SB(t.m7(), 0, 5, o.base()); 
 
 1178          SB(t.m6(), 2, 4, 
GB(t.m2(), 4, 4)); 
 
 1179          SB(t.m7(), 5, 1, 
GB(t.m4(), 7, 1)); 
 
 1242              t.m2() = town.base();
 
 1245              SB(t.m6(), 2, 4, 0);
 
 1250            if (
GB(t.m5(), 3, 2) == 0) {
 
 1267          uint north_south = 
GB(t.m5(), 5, 1);
 
 1271          t.m5() = 1 << 7 | type << 2 | dir;
 
 1277      if (!v->IsGroundVehicle()) 
continue;
 
 1284          case DIAGDIR_NE: 
if ((v->x_pos & 0xF) !=  0)            
continue; 
break;
 
 1287          case DIAGDIR_NW: 
if ((v->y_pos & 0xF) !=  0)            
continue; 
break;
 
 1291        v->UpdatePosition();
 
 1306      bool has_road = 
false;
 
 1327        SB(t.m7(), 6, 2, 0); 
 
 1409            SB(t.m4(), 4, 4, 0);
 
 1426    static constexpr VehStates OLD_VS_WAIT_FOR_SLOT{0x40};
 
 1428      rv->vehstatus.
Reset(OLD_VS_WAIT_FOR_SLOT);
 
 1449  AfterLoadStations();
 
 1486        for (j = 0; j != 50; j++) PlantRandomFarmField(i);
 
 1494      for (
Order &order : orderlist->GetOrders()) {
 
 1519          SB(t.m5(), 3, 2, 
GB(t.m3(), 6, 2));
 
 1520          SB(t.m3(), 6, 2, 0);
 
 1575          case GFX_POWERPLANT_SPARKS:
 
 1576            t.m3() = 
GB(t.m1(), 2, 5);
 
 1579          case GFX_OILWELL_ANIMATED_1:
 
 1580          case GFX_OILWELL_ANIMATED_2:
 
 1581          case GFX_OILWELL_ANIMATED_3:
 
 1582            t.m3() = 
GB(t.m1(), 0, 2);
 
 1585          case GFX_COAL_MINE_TOWER_ANIMATED:
 
 1586          case GFX_COPPER_MINE_TOWER_ANIMATED:
 
 1587          case GFX_GOLD_MINE_TOWER_ANIMATED:
 
 1622        v->cur_speed *= 128;
 
 1624        v->acceleration = avi->acceleration;
 
 1643      if (style.has_value()) {
 
 1666        t->larger_town = 
true;
 
 1676          v->current_order.IsType(OT_LOADING)) {         
 
 1677        Station::Get(v->last_station_visited)->loading_vehicles.push_back(v);
 
 1688      for (
auto iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ) {
 
 1691          iter = st->loading_vehicles.erase(iter);
 
 1717        SB(t.m2(), 4, 4, 0);
 
 1719        SB(t.m2(), 4, 3, 
GB(t.m2(), 0, 3));
 
 1727      if (rv->state == 250 || rv->state == 251) {
 
 1779      for (uint j = 0; j < std::size(i->produced); j++) {
 
 1780        i->produced[j].cargo = indsp->produced_cargo[j];
 
 1782      for (uint j = 0; j < std::size(i->accepted); j++) {
 
 1813      for (
Order &o : orderlist->GetOrders()) {
 
 1814        o.ConvertFromOldSavegame();
 
 1819      if (v->orders != 
nullptr && v->GetFirstOrder() != 
nullptr && v->GetFirstOrder()->IsType(OT_NOTHING)) {
 
 1820        v->orders->FreeChain();
 
 1821        v->orders = 
nullptr;
 
 1824      v->current_order.ConvertFromOldSavegame();
 
 1825      if (v->type == 
VEH_ROAD && v->IsPrimaryVehicle() && v->FirstShared() == v) {
 
 1832      for (
Order &order : orderlist->GetOrders()) {
 
 1849      for (
Order &order : orderlist->GetOrders()) {
 
 1850        if (!order.IsType(OT_GOTO_DEPOT)) 
continue;
 
 1856      if (!v->current_order.IsType(OT_GOTO_DEPOT)) 
continue;
 
 1857      v->current_order.SetDepotActionType((
OrderDepotActionFlags)(v->current_order.GetDepotActionType() >> 1));
 
 1867            case StationType::Oilrig:
 
 1868            case StationType::Dock:
 
 1869            case StationType::Buoy:
 
 1871              SB(t.m3(), 0, 2, 0);
 
 1882          SB(t.m3(), 0, 2, 0);
 
 1968      v->profit_this_year <<= 8;
 
 1969      v->profit_last_year <<= 8;
 
 1970      v->running_ticks = 0;
 
 1978        SB(t.m6(), 2, 6, 
GB(t.m6(), 3, 5));
 
 1979        SB(t.m3(), 5, 1, 0);
 
 2060      if (t->First() == t) t->ReserveTrackUnderConsist();
 
 2076      st->indtype = IT_INVALID;
 
 2083      if (!a->IsNormalAircraft()) {
 
 2084        a->engine_type = a->First()->engine_type;
 
 2090      if (c->bankrupt_asked.base() == 0xFF) c->bankrupt_asked.Set();
 
 2094      if (e->company_avail.base() == 0xFF) e->company_avail.Set();
 
 2098      if (t->have_ratings.base() == 0xFF) t->have_ratings.Set();
 
 2099      for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = 
RATING_INITIAL;
 
 2110        t.m3() = 
GB(t.m5(), 0, 5);
 
 2122      t.m3() = type == 
OBJECT_HQ ? 
GB(t.m3(), 1, 1) | 
GB(t.m3(), 0, 1) << 4 : 0;
 
 2139        uint offset = t.m3();
 
 2142        t.m3() = 
GB(t.m6(), 2, 4);
 
 2143        SB(t.m6(), 2, 4, 0);
 
 2153            SlError(STR_ERROR_TOO_MANY_OBJECTS);
 
 2162          t.m2() = o->
index.base();
 
 2166          Tile northern_tile = t - 
TileXY(
GB(offset, 0, 4), 
GB(offset, 4, 4));
 
 2168          t.m2() = northern_tile.
m2();
 
 2196        case 5: layout = 1; 
break;
 
 2197        case 0: layout = 2; 
break;
 
 2199      t->layout = 
static_cast<TownLayout>(layout - 1);
 
 2215      for (
Order &o : orderlist->GetOrders()) {
 
 2231      if (v->subtype == 2  && v->state != 0) {
 
 2246      for (
Vehicle *v : st->loading_vehicles) {
 
 2251        if (v->cargo_payment == 
nullptr) v->cargo_payment = 
new CargoPayment(v);
 
 2268        remove = *tile == *j;
 
 2307        wp->train_station.tile = wp->xy;
 
 2308        wp->train_station.w = 1;
 
 2309        wp->train_station.h = 1;
 
 2312        wp->train_station.w = 0;
 
 2313        wp->train_station.h = 0;
 
 2321      if (s->remaining < 12) {
 
 2323        s->remaining = 12 - s->remaining; 
 
 2324        s->awarded = CompanyID::Invalid(); 
 
 2350        s->remaining = 24 - s->remaining; 
 
 2358            if (ss != 
nullptr && sd != 
nullptr && ss->
owner == sd->
owner &&
 
 2363              s->awarded = ss->
owner;
 
 2401        Debug(sl, 0, 
"Removing invalid depot {} at {}, {}", d->index, 
TileX(d->xy), 
TileY(d->xy));
 
 2406      tile.
m2() = d->index.base();
 
 2415      if (t->force_proceed != 
TFP_NONE) {
 
 2434        uint density = 
GB(t.m2(), 6, 2);
 
 2435        uint ground = 
GB(t.m2(), 4, 2);
 
 2436        t.m2() = ground << 6 | density << 4;
 
 2444      a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks;
 
 2448      t->wait_counter = t->current_order.IsType(OT_LOADING) ? 0 : t->load_unload_ticks;
 
 2454    struct AirportTileConversion {
 
 2458    static const AirportTileConversion atcs[] = {
 
 2473        for (
const auto &atc : atcs) {
 
 2474          if (old_gfx < atc.old_start) {
 
 2478          if (old_gfx < atc.old_start + atc.num_frames) {
 
 2483          offset += atc.num_frames - 1;
 
 2492      if (st->airport.tile != 
INVALID_TILE && st->airport.type == 15) {
 
 2501        st->airport.w = st->airport.GetSpec()->size_x;
 
 2502        st->airport.h = st->airport.GetSpec()->size_y;
 
 2538      if (!v->IsNormalAircraft()) 
continue;
 
 2540      if (st == 
nullptr && v->state != 
FLYING) {
 
 2559            uint per_proc = t.m7();
 
 2560            t.m7() = 
GB(t.m6(), 2, 6) | (
GB(t.m3(), 5, 1) << 6);
 
 2561            SB(t.m3(), 5, 1, 0);
 
 2562            SB(t.m6(), 2, 6, std::min(per_proc, 63U));
 
 2606      if (!wp->name.empty()) wp->town_cn = UINT16_MAX;
 
 2623      if (!v->IsGroundVehicle()) 
continue;
 
 2633      if (
GetSlopePixelZ(v->x_pos, v->y_pos, 
true) != v->z_pos) 
continue;
 
 2668          default: NOT_REACHED();
 
 2676          default: NOT_REACHED();
 
 2686      bool loading = rv->current_order.IsType(OT_LOADING) || rv->current_order.IsType(OT_LEAVESTATION);
 
 2691        SB(rv->state, 
RVS_ENTERED_STOP, 1, loading || rv->frame > RVC_DRIVE_THROUGH_STOP_FRAME);
 
 2723      if (v->IsGroundVehicle() && 
TileVirtXY(v->x_pos, v->y_pos) == v->tile) {
 
 2816      if (!v->IsPrimaryVehicle()) 
continue;
 
 2819      if (v->cur_implicit_order_index >= v->GetNumOrders()) v->cur_implicit_order_index = 0;
 
 2821      v->cur_real_order_index = v->cur_implicit_order_index;
 
 2822      v->UpdateRealOrderIndex();
 
 2853        assert(ind->psa != 
nullptr);
 
 2856        bool is_empty = 
true;
 
 2857        for (uint i = 0; i < 
sizeof(ind->psa->storage); i++) {
 
 2858          if (ind->psa->GetValue(i) != 0) {
 
 2865          ind->psa->grfid = _industry_mngr.
GetGRFID(ind->type);
 
 2876        assert(st->airport.psa != 
nullptr);
 
 2879        bool is_empty = 
true;
 
 2880        for (uint i = 0; i < 
sizeof(st->airport.psa->storage); i++) {
 
 2881          if (st->airport.psa->GetValue(i) != 0) {
 
 2888          st->airport.psa->grfid = _airport_mngr.
GetGRFID(st->airport.type);
 
 2890          delete st->airport.psa;
 
 2891          st->airport.psa = 
nullptr;
 
 2908      uint fence = 
GB(t.m4(), 5, 3);
 
 2912      fence = 
GB(t.m4(), 2, 3);
 
 2916      SB(t.m4(), 2, 3, 0);
 
 2917      SB(t.m4(), 5, 3, 0);
 
 2925        case LandscapeType::Arctic:
 
 2929        case LandscapeType::Tropic:
 
 2942    _saved_scrollpos_zoom += ZOOM_BASE_SHIFT;
 
 2943    _saved_scrollpos_x *= ZOOM_BASE;
 
 2944    _saved_scrollpos_y *= ZOOM_BASE;
 
 2974      c->months_of_bankruptcy = 3 * c->months_of_bankruptcy;
 
 2983        v->acceleration = avi->acceleration;
 
 2998    extern uint8_t _old_units;
 
 3042    std::vector<uint> skip_frames;
 
 3044      if (!v->IsFrontEngine()) 
continue;
 
 3045      skip_frames.clear();
 
 3047      uint prev_tile_skip = 0;
 
 3050        if (u->tile != prev_tile) {
 
 3051          prev_tile_skip = cur_skip;
 
 3052          prev_tile = u->tile;
 
 3054          cur_skip = prev_tile_skip;
 
 3057        uint &this_skip = skip_frames.emplace_back(prev_tile_skip);
 
 3063            if (u->frame <= (roadside ? 9 : 5)) this_skip = cur_skip;
 
 3068            if (u->frame <= (roadside ? 5 : 9)) this_skip = cur_skip;
 
 3073            if (u->frame <= (roadside ? 4 : 2)) this_skip = cur_skip;
 
 3080      while (cur_skip > skip_frames[0]) {
 
 3083        for (uint sf : skip_frames) {
 
 3084          if (sf >= cur_skip) IndividualRoadVehicleController(u, prev);
 
 3096      for (
Order &order : orderlist->GetOrders()) {
 
 3097        order.SetTravelTimetabled(order.GetTravelTime() > 0);
 
 3098        order.SetWaitTimetabled(order.GetWaitTime() > 0);
 
 3100      orderlist->RecalculateTimetableDuration();
 
 3111#ifndef DEBUG_DUMP_COMMANDS 
 3126        t->growth_rate = TownTicksToGameTicks(t->growth_rate & ~0x8000);
 
 3138      for (
auto &a : i->accepted) {
 
 3140          a.last_accepted = i->GetAccepted(0).last_accepted;
 
 3155      int x = s->x_pos & 0xF;
 
 3156      int y = s->y_pos & 0xF;
 
 3157      if (x == 8 && y == 8) 
continue;
 
 3162      switch (shipdiagdir) {
 
 3163        default: NOT_REACHED();
 
 3173      if ((shipdiagdir == slopediagdir) == second_half) {
 
 3197        st->industry->neutral_station = st;
 
 3230      if (st->ship_station.tile != 
INVALID_TILE) UpdateStationDockingTiles(st);
 
 3247      if (c->settings.renew_keep_length) wagon_removal.
Set(c->index);
 
 3250      if (g->flags.Any()) {
 
 3261      v->last_loading_tick = std::max(
TimerGameTick::counter, 
static_cast<uint64_t
>(v->current_order_time)) - v->current_order_time;
 
 3274      if (rv->IsArticulatedPart()) 
continue;
 
 3277      if (rv->cur_speed > 0) 
continue;
 
 3289      if (closest_depot.found && 
DistanceManhattan(rv->tile, closest_depot.location) < 512u) {
 
 3292          u->tile = closest_depot.location;
 
 3301          u->UpdatePosition();
 
 3303        RoadVehLeaveDepot(rv, 
false);
 
 3311          SB(t.m2(), 0, 4, 0);
 
 3354      if (s->acceleration == 0) s->acceleration = ShipVehInfo(s->engine_type)->
acceleration;
 
 3360      c->max_loan = COMPANY_MAX_LOAN_DEFAULT;
 
 3365    ScriptObject::InitializeRandomizers();
 
 3395      g->number = c->freegroups.
UseID(g->index.base());
 
 3397      c->freegroups.
UseID(g->number);
 
 
 3456  AfterLoadStations();
 
 3468  InvalidateAllPickerWindows();
 
 
static void SetSignalHandlers()
Replaces signal handlers of SIGSEGV and SIGABRT and stores pointers to original handlers in memory.
 
static uint FixVehicleInclination(Vehicle *v, Direction dir)
Fixes inclination of a vehicle.
 
Company * DoStartupNewCompany(bool is_ai, CompanyID company=CompanyID::Invalid())
Create a new company and sets all company variables default values.
 
static void InitializeWindowsAndCaches()
Initialization of the windows and several kinds of caches.
 
static void CheckGroundVehiclesAtCorrectZ()
Check whether the ground vehicles are at the correct Z-coordinate.
 
static bool _saveload_crash_with_missing_newgrfs
Was the saveload crash because of missing NewGRFs?
 
static void FixOwnerOfRailTrack(Tile t)
Tries to change owner of this rail tile to a valid owner.
 
static void CDECL HandleSavegameLoadCrash(int signum)
Signal handler used to give a user a more useful report for crashes during the savegame loading proce...
 
static bool MayHaveBridgeAbove(Tile t)
Checks for the possibility that a bridge may be on this tile These are in fact all the tile types on ...
 
void SetWaterClassDependingOnSurroundings(Tile t, bool include_invalid_water_class)
Makes a tile canal or water depending on the surroundings.
 
static void StartScripts()
Start the scripts.
 
bool SaveloadCrashWithMissingNewGRFs()
Did loading the savegame cause a crash? If so, were NewGRFs missing?
 
void UpdateAllVirtCoords()
Update the viewport coordinates of all signs.
 
void ClearOldOrders()
Clear all old orders.
 
bool AfterLoadGame()
Perform a (large) amount of savegame conversion magic in order to load older savegames and to fill th...
 
void ReloadNewGRFData()
Reload all NewGRF files during a running game.
 
static void ResetSignalHandlers()
Resets signal handlers back to original handlers.
 
void GetAircraftFlightLevelBounds(const Vehicle *v, int *min, int *max)
Get the 'flight level' bounds, in pixels from 'z_pos' 0 for a particular vehicle for normal flight si...
 
void AircraftNextAirportPos_and_Order(Aircraft *v)
set the right pos when heading to other airports after takeoff
 
Station * GetTargetAirportIfValid(const Aircraft *v)
Returns aircraft's target station if v->target_airport is a valid station with airport.
 
void SetAircraftPosition(Aircraft *v, int x, int y, int z)
Set aircraft position.
 
@ AIR_AIRCRAFT
an airplane
 
void UpdateAircraftCache(Aircraft *v, bool update_range=false)
Update cached values of an aircraft.
 
@ FLYING
Vehicle is flying in the air.
 
@ AT_OILRIG
Oilrig airport.
 
std::vector< TileIndex > _animated_tiles
The table/list with animated tiles.
 
@ Animated
Tile is animated.
 
@ None
Tile is not animated.
 
void SetAnimatedTileState(Tile t, AnimatedTileState state)
Set the animated state of a tile.
 
VehicleFlag
Bit numbers in Vehicle::vehicle_flags.
 
@ PathfinderLost
Vehicle's pathfinder is lost.
 
@ LoadingFinished
Vehicle has finished loading.
 
debug_inline constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
 
constexpr T AssignBit(T &x, const uint8_t y, bool value)
Assigns a bit in a variable.
 
constexpr T SB(T &x, const uint8_t s, const uint8_t n, const U d)
Set n bits in x starting at bit s to d.
 
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
 
debug_inline static constexpr uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
 
constexpr T ClrBit(T &x, const uint8_t y)
Clears a bit in a variable.
 
TileIndex GetNorthernBridgeEnd(TileIndex t)
Finds the northern end of a bridge starting at a middle tile.
 
void SetBridgeMiddle(Tile t, Axis a)
Set that there is a bridge over the given axis.
 
bool IsBridgeTile(Tile t)
checks if there is a bridge on this tile
 
void ClearBridgeMiddle(Tile t)
Removes bridges from the given, that is bridges along the X and Y axis.
 
bool IsBridge(Tile t)
Checks if this is a bridge, instead of a tunnel.
 
void AfterLoadCompanyStats()
Rebuilding of company statistics after loading a savegame.
 
bool IsValidCargoType(CargoType cargo)
Test whether cargo type is not INVALID_CARGO.
 
static const CargoType CARGO_NO_REFIT
Do not refit cargo of a vehicle (used in vehicle orders and auto-replace/auto-renew).
 
@ TAE_GOODS
Cargo behaves goods/candy-like.
 
@ TAE_PASSENGERS
Cargo behaves passenger-like.
 
@ TAE_MAIL
Cargo behaves mail-like.
 
@ TAE_FOOD
Cargo behaves food/fizzy-drinks-like.
 
@ TAE_WATER
Cargo behaves water-like.
 
static void StartNew(CompanyID company)
Start a new AI company.
 
constexpr bool Test(Tvalue_type value) const
Test if the value-th bit is set.
 
constexpr Tstorage base() const noexcept
Retrieve the raw value behind this bit set.
 
constexpr Timpl & Reset()
Reset all bits.
 
constexpr Timpl & Set()
Set all bits.
 
TStorage storage
The storage of the timer.
 
UnitID UseID(UnitID index)
Use a unit number.
 
static void StartNew()
Start up a new GameScript.
 
void TestRevision()
Finds out if current revision is different than last revision stored in the savegame.
 
const GRFIdentifier & GetOverriddenIdentifier(const GRFConfig &c)
Try to find the overridden GRF identifier of the given GRF.
 
void PrintDebug(int level)
Prints gamelog to debug output.
 
void GRFRemove(uint32_t grfid)
Logs removal of a GRF.
 
void GRFAddList(const GRFConfigList &newg)
Logs adding of list of GRFs.
 
void GRFCompatible(const GRFIdentifier &newg)
Logs loading compatible GRF (the same ID, but different MD5 hash)
 
void Oldver()
Logs loading from savegame without gamelog.
 
void TestMode()
Finds last stored game mode or landscape.
 
uint32_t GetGRFID(uint16_t entity_id) const
Gives the GRFID of the file the entity belongs to.
 
static constexpr TimerGameTick::Ticks DAY_TICKS
1 day is 74 ticks; TimerGameCalendar::date_fract used to be uint16_t and incremented by 885.
 
static constexpr TimerGameTick::Ticks TOWN_GROWTH_TICKS
Cycle duration for towns trying to grow (this originates from the size of the town array in TTD).
 
Wrapper class to abstract away the way the tiles are stored.
 
debug_inline uint16_t & m2()
Primarily used for indices to towns, industries and stations.
 
debug_inline uint8_t & m7()
Primarily used for newgrf support.
 
debug_inline uint8_t & m6()
General purpose.
 
debug_inline uint8_t & m3()
General purpose.
 
debug_inline uint8_t & m5()
General purpose.
 
A timeout timer will fire once after the interval.
 
static void SetDate(Date date, DateFract fract)
Set the date.
 
static Date date
Current date in days (day counter).
 
static Year year
Current year, starting at 0.
 
static DateFract date_fract
Fractional part of the day.
 
static constexpr TimerGame< struct Economy >::Date MIN_DATE
The date on January 1, year 0.
 
static constexpr TimerGame< struct Calendar >::Year DEF_END_YEAR
The default scoring end year.
 
static constexpr TimerGame< struct Economy >::Year MIN_YEAR
The absolute minimum year in OTTD.
 
static constexpr int SECONDS_PER_DAY
approximate seconds per day, not for precise calculations
 
static constexpr TimerGame< struct Calendar >::Year ORIGINAL_BASE_YEAR
The minimum starting year/base year of the original TTD.
 
static constexpr TimerGame< struct Calendar >::Date DAYS_TILL_ORIGINAL_BASE_YEAR
The date of the first day of the original base year.
 
static Date date
Current date in days (day counter).
 
static Year year
Current year, starting at 0.
 
static DateFract date_fract
Fractional part of the day.
 
static void SetDate(Date date, DateFract fract)
Set the date.
 
static TickCounter counter
Monotonic counter, in ticks, since start of game.
 
bool IsClearGround(Tile t, ClearGround ct)
Set the type of clear tile.
 
void SetFence(Tile t, DiagDirection side, uint h)
Sets the type of fence (and whether there is one) for the given border.
 
@ CLEAR_SNOW
0-3 (Not stored in map.)
 
void MakeClear(Tile t, ClearGround g, uint density)
Make a clear tile.
 
ClearGround GetClearGround(Tile t)
Get the type of clear tile.
 
void SetClearGroundDensity(Tile t, ClearGround type, uint density)
Sets ground type and density in one go, also sets the counter to 0.
 
uint GetClearDensity(Tile t)
Get the density of a non-field clear tile.
 
TimeoutTimer< TimerGameTick > _new_competitor_timeout({ TimerGameTick::Priority::COMPETITOR_TIMEOUT, 0 }, []() { if(_game_mode==GM_MENU||!AI::CanStartNew()) return;if(_networking &&Company::GetNumItems() >=_settings_client.network.max_companies) return;if(_settings_game.difficulty.competitors_interval==0) return;uint8_t n=0;for(const Company *c :Company::Iterate()) { if(c->is_ai) n++;} if(n >=_settings_game.difficulty.max_no_competitors) return;Command< CMD_COMPANY_CTRL >::Post(CCA_NEW_AI, CompanyID::Invalid(), CRR_NONE, INVALID_CLIENT_ID);})
Start a new competitor company if possible.
 
void RandomiseCompanyManagerFace(CompanyManagerFace &cmf, Randomizer &randomizer)
Completely randomise a company manager face, including style.
 
void ResetCompanyLivery(Company *c)
Reset the livery schemes to the company's primary colour.
 
void UpdateCompanyLiveries(Company *c)
Update liveries for a company.
 
void SetCompanyManagerFaceStyle(CompanyManagerFace &cmf, uint style)
Set a company face style.
 
CompanyID GetFirstPlayableCompanyID()
Get the index of the first available company.
 
std::optional< uint > FindCompanyManagerFaceLabel(std::string_view label)
Find a company manager face style by label.
 
CompanyID _current_company
Company currently doing an action.
 
CompanyManagerFace ConvertFromOldCompanyManagerFace(uint32_t face)
Converts an old company manager's face format to the new company manager's face format.
 
static constexpr Owner OWNER_TOWN
A town owns the tile, or a town is expanding.
 
static constexpr Owner OWNER_NONE
The tile has no ownership.
 
static constexpr Owner INVALID_OWNER
An invalid owner.
 
static constexpr Owner OWNER_WATER
The tile/execution is done by "water".
 
#define Debug(category, level, format_string,...)
Output a line of debugging information.
 
bool IsDepotTile(Tile tile)
Is the given tile a tile with a depot on it?
 
Direction DiagDirToDir(DiagDirection dir)
Convert a DiagDirection to a Direction.
 
DiagDirection ReverseDiagDir(DiagDirection d)
Returns the reverse direction of the given DiagDirection.
 
Direction ReverseDir(Direction d)
Return the reverse of a direction.
 
Direction AxisToDirection(Axis a)
Converts an Axis to a Direction.
 
Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
 
DiagDirection XYNSToDiagDir(Axis xy, uint ns)
Convert an axis and a flag for north/south into a DiagDirection.
 
DiagDirection DirToDiagDir(Direction dir)
Convert a Direction to a DiagDirection.
 
Direction
Defines the 8 directions on the map.
 
@ INVALID_DIR
Flag for an invalid direction.
 
Axis
Allow incrementing of DiagDirDiff variables.
 
DiagDirection
Enumeration for diagonal directions.
 
@ DIAGDIR_NE
Northeast, upper right on your monitor.
 
@ DIAGDIR_END
Used for iterations.
 
@ DIAGDIR_BEGIN
Used for iterations.
 
void RecomputePrices()
Computes all prices, payments and maximum loan.
 
bool AddInflation(bool check_year)
Add monthly inflation.
 
static const uint64_t MAX_INFLATION
Maximum inflation (including fractional part) without causing overflows in int64_t price computations...
 
void StartupEngines()
Start/initialise all our engines.
 
void CopyTempEngineData()
Copy data from temporary engine array into the real engine pool.
 
@ RoadIsTram
Road vehicle is a tram/light rail vehicle.
 
EngineFlag
Engine.flags is a bitmask, with the following values.
 
@ Available
This vehicle is available to everyone.
 
@ ExclusivePreview
This vehicle is in the exclusive preview stage, either being used or being offered to a company.
 
constexpr std::underlying_type_t< enum_type > to_underlying(enum_type e)
Implementation of std::to_underlying (from C++23)
 
@ WL_CRITICAL
Critical errors, the MessageBox is shown in all cases.
 
void ShowErrorMessage(EncodedString &&summary_msg, int x, int y, CommandCost &cc)
Display an error message in a window.
 
@ FT_SCENARIO
old or new scenario
 
Gamelog _gamelog
Gamelog instance.
 
void LoadStringWidthTable(FontSizes fontsizes)
Initialize _stringwidth_table cache for the specified font sizes.
 
PauseModes _pause_mode
The current pause mode.
 
void GfxLoadSprites()
Initialise and load all the sprites.
 
@ GVF_GOINGDOWN_BIT
Vehicle is currently going downhill. (Cached track information for acceleration)
 
@ GVF_GOINGUP_BIT
Vehicle is currently going uphill. (Cached track information for acceleration)
 
void UpdateGroupChildren()
Update children list for each group.
 
@ ReplaceProtection
If set, the global autoreplace has no effect on the group.
 
@ ReplaceWagonRemoval
If set, autoreplace will perform wagon removal on vehicles in this group.
 
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
 
void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
Mark a tile given by its index dirty for repaint.
 
@ BuildingIsProtected
towns and AI will not remove this house, while human players will be able to
 
static const HouseID NEW_HOUSE_OFFSET
Offset for new houses.
 
static const uint8_t TOWN_HOUSE_COMPLETED
Simple value that indicates the house has reached the final stage of construction.
 
IndustryBuildData _industry_builder
In-game manager of industries.
 
void TrimIndustryAcceptedProduced(Industry *ind)
Remove unused industry accepted/produced slots – entries after the last slot with valid cargo.
 
const IndustrySpec * GetIndustrySpec(IndustryType thistype)
Accessor for array _industry_specs.
 
IndustryType GetIndustryType(Tile tile)
Retrieve the type for this industry.
 
IndustryGfx GetIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile.
 
@ PlantOnBuild
Fields are planted around when built (all farms)
 
@ BuiltOnWater
is built on water (oil rig)
 
void AfterLoadLabelMaps()
Perform rail type and road type conversion if necessary.
 
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
Returns information about trackdirs and signal states.
 
void ChangeTileOwner(TileIndex tile, Owner old_owner, Owner new_owner)
Change the owner of a tile.
 
int GetSlopePixelZ(int x, int y, bool ground_vehicle)
Return world Z coordinate of a given point of a tile.
 
@ Random
Randomise borders.
 
void AfterLoadLinkGraphs()
Spawn the threads for running link graph calculations.
 
@ DT_MANUAL
Manual distribution. No link graph calculations are run.
 
void SetupColoursAndInitialWindow()
Initialise the default colours (remaps and the likes), and load the main windows.
 
uint DistanceManhattan(TileIndex t0, TileIndex t1)
Gets the Manhattan distance between the two given tiles.
 
TileIndex TileAddXY(TileIndex tile, int x, int y)
Adds a given offset to a tile.
 
static debug_inline TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
 
TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir)
Adds a DiagDir to a tile.
 
TileIndexDiff TileDiffXY(int x, int y)
Calculates an offset for the given coordinate(-offset).
 
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
 
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
 
TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
Convert a DiagDirection to a TileIndexDiff.
 
static debug_inline TileIndex TileVirtXY(uint x, uint y)
Get a tile from the virtual XY-coordinate.
 
constexpr bool IsInsideMM(const size_t x, const size_t min, const size_t max) noexcept
Checks if a value is in an interval.
 
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
 
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
 
void GenerateSavegameId()
Generate an unique savegame ID.
 
bool _networking
are we in networking mode?
 
bool _network_dedicated
are we a dedicated server?
 
bool _network_server
network-server is active
 
@ GSF_FAKE_TOWNS
Fake town GrfSpecFeature for NewGRF debugging (parent scope)
 
void ShowNewGRFError()
Show the first NewGRF error we can find.
 
uint8_t StationGfx
Copy from station_map.h.
 
GRFConfigList _grfconfig
First item in list of current GRF set up.
 
GRFListCompatibility IsGoodGRFConfigList(GRFConfigList &grfconfig)
Check if all GRFs in the GRF config from a savegame can be loaded.
 
GRFListCompatibility
Status of post-gameload GRF compatibility check.
 
@ GLC_COMPATIBLE
Compatible (eg. the same ID, but different checksum) GRF found in at least one case.
 
@ GLC_ALL_GOOD
All GRF needed by game are present.
 
@ GLC_NOT_FOUND
At least one GRF couldn't be found (higher priority than GLC_COMPATIBLE)
 
@ GCS_NOT_FOUND
GRF file was not found in the local cache.
 
@ Compatible
GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches)
 
void DeleteInvalidEngineNews()
Remove engine announcements for invalid engines.
 
uint16_t ObjectType
Types of objects.
 
static const ObjectType OBJECT_STATUE
Statue in towns.
 
static const ObjectType OBJECT_HQ
HeadQuarter of a player.
 
@ Error
A game paused because a (critical) error.
 
@ ActiveClients
A game paused for 'min_active_clients'.
 
@ Normal
A game normally paused.
 
@ Join
A game paused for 'pause_on_join'.
 
@ OSL_PLATFORM_FAR_END
Stop at the far end of the platform.
 
@ OUFB_TRANSFER
Transfer all cargo onto the platform.
 
@ OUFB_UNLOAD
Force unloading all cargo onto the platform, possibly not getting paid.
 
OrderDepotActionFlags
Actions that can be performed when the vehicle enters the depot.
 
@ OLFB_NO_LOAD
Do not load anything.
 
@ ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS
The vehicle will not stop at any stations it passes except the destination.
 
RailTypes GetCompanyRailTypes(CompanyID company, bool introduces)
Get the rail types the given company can build.
 
void InitializeRailGUI()
Resets the rail GUI - sets default railtype to build and resets the signal GUI.
 
RailType GetRailType(Tile t)
Gets the rail type of the given tile.
 
static debug_inline bool IsRailDepotTile(Tile t)
Is this tile rail tile and a rail depot?
 
void SetTrackReservation(Tile t, TrackBits b)
Sets the reserved track bits of the tile.
 
@ RAIL_GROUND_WATER
Grass with a fence and shore or water on the free halftile.
 
static debug_inline bool IsRailDepot(Tile t)
Is this rail tile a rail depot?
 
void SetDepotReservation(Tile t, bool b)
Set the reservation state of the depot.
 
static debug_inline bool IsPlainRail(Tile t)
Returns whether this is plain rails, with or without signals.
 
bool HasSignals(Tile t)
Checks if a rail tile has signals.
 
static debug_inline bool IsPlainRailTile(Tile t)
Checks whether the tile is a rail tile or rail tile with signals.
 
void SetSignalStates(Tile tile, uint state)
Set the states of the signals (Along/AgainstTrackDir)
 
void SetRailType(Tile t, RailType r)
Sets the rail type of the given tile.
 
RailType
Enumeration for all possible railtypes.
 
@ RAILTYPE_ELECTRIC
Electric rails.
 
@ RAILTYPE_RAIL
Standard non-electric rails.
 
Randomizer _random
Random used in the game state calculations.
 
RoadTypes GetCompanyRoadTypes(CompanyID company, bool introduces)
Get the road types the given company can build.
 
void UpdateNearestTownForRoadTiles(bool invalidate)
Updates cached nearest town for all road tiles.
 
void UpdateLevelCrossing(TileIndex tile, bool sound=true, bool force_bar=false)
Update a level crossing to barred or open (crossing may include multiple adjacent tiles).
 
void SetRoadOwner(Tile t, RoadTramType rtt, Owner o)
Set the owner of a specific road type.
 
bool HasTownOwnedRoad(Tile t)
Checks if given tile has town owned road.
 
static debug_inline bool IsRoadDepot(Tile t)
Return whether a tile is a road depot.
 
bool IsLevelCrossingTile(Tile t)
Return whether a tile is a level crossing tile.
 
void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt)
Set the present road types of a tile.
 
@ ROAD_TILE_NORMAL
Normal road.
 
@ ROAD_TILE_DEPOT
Depot (one entrance)
 
@ ROAD_TILE_CROSSING
Level crossing.
 
RoadBits GetCrossingRoadBits(Tile tile)
Get the road bits of a level crossing.
 
Owner GetRoadOwner(Tile t, RoadTramType rtt)
Get the owner of a specific road type.
 
static debug_inline RoadTileType GetRoadTileType(Tile t)
Get the type of the road tile.
 
void SetCrossingReservation(Tile t, bool b)
Set the reservation state of the rail crossing.
 
bool IsLevelCrossing(Tile t)
Return whether a tile is a level crossing.
 
RoadBits
Enumeration for the road parts on a tile.
 
@ ROAD_Y
Full road along the y-axis (north-west + south-east)
 
@ ROAD_X
Full road along the x-axis (south-west + north-east)
 
RoadTramType
The different types of road type.
 
@ RTT_ROAD
Road road type.
 
@ RTT_TRAM
Tram road type.
 
RoadType
The different roadtypes we support.
 
@ INVALID_ROADTYPE
flag for invalid roadtype
 
@ ROADTYPE_ROAD
Basic road type.
 
@ RVS_ENTERED_STOP
Only set when a vehicle has entered the stop.
 
@ RVSB_IN_ROAD_STOP
The vehicle is in a road stop.
 
@ RVS_IN_DT_ROAD_STOP
The vehicle is in a drive-through road stop.
 
@ RVS_IN_ROAD_STOP
The vehicle is in a road stop.
 
@ RVSB_IN_DEPOT
The vehicle is in a depot.
 
@ RVSB_WORMHOLE
The vehicle is in a tunnel and/or bridge.
 
@ RVS_DRIVE_SIDE
Only used when retrieving move data.
 
const uint8_t _road_stop_stop_frame[]
Table of road stop stop frames, when to stop at a road stop.
 
void SlError(StringID string, const std::string &extra_msg)
Error handler.
 
void SetSaveLoadError(StringID str)
Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friend...
 
void SlErrorCorrupt(const std::string &msg)
Error handler for corrupt savegames.
 
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
 
bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor=0)
Checks whether the savegame is below major.
 
@ SLV_AI_START_DATE
309 PR#10653 Removal of individual AI start dates and added a generic one.
 
@ SLV_190
190 26547 Separate order travel and wait times
 
@ SLV_ECONOMY_MODE_TIMEKEEPING_UNITS
327 PR#11341 Mode to display economy measurements in wallclock units.
 
@ SLV_PROTECT_PLACED_HOUSES
351 PR#13270 Houses individually placed by players can be protected from town/AI removal.
 
@ SLV_COMPANY_INAUGURATED_PERIOD_V2
349 PR#13448 Fix savegame storage for company inaugurated year in wallclock mode.
 
@ SLV_182
182 25115 FS#5492, r25259, r25296 Goal status
 
@ SLV_186
186 25833 Objects storage
 
@ SLV_16
16.0 2817 16.1 3155
 
@ SLV_SERVE_NEUTRAL_INDUSTRIES
210 PR#7234 Company stations can serve industries with attached neutral stations.
 
@ SLV_188
188 26169 v1.4 FS#5831 Unify RV travel time
 
@ SLV_198
198 PR#6763 Switch town growth rate and counter to actual game ticks
 
@ SLV_EXTEND_RAILTYPES
200 PR#6805 Extend railtypes to 64, adding uint16_t to map array.
 
@ SLV_17
17.0 3212 17.1 3218
 
@ SLV_EXTEND_INDUSTRY_CARGO_SLOTS
202 PR#6867 Increase industry cargo slots to 16 in, 16 out
 
@ SLV_GROUP_REPLACE_WAGON_REMOVAL
291 PR#7441 Per-group wagon removal flag.
 
@ SLV_VELOCITY_NAUTICAL
305 PR#10594 Separation of land and nautical velocity (knots!)
 
@ SLV_VEHICLE_ECONOMY_AGE
334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age
 
@ SLV_4
4.0 1 4.1 122 0.3.3, 0.3.4 4.2 1222 0.3.5 4.3 1417 4.4 1426
 
@ SLV_TOWN_CARGOGEN
208 PR#6965 New algorithms for town building cargo generation.
 
@ SLV_LINKGRAPH_SECONDS
308 PR#10610 Store linkgraph update intervals in seconds instead of days.
 
@ SLV_SAVEGAME_ID
313 PR#10719 Add an unique ID to every savegame (used to deduplicate surveys).
 
@ SLV_11
11.0 2033 11.1 2041
 
@ SLV_FACE_STYLES
355 PR#14319 Addition of face styles, replacing gender and ethnicity.
 
@ SLV_ENDING_YEAR
218 PR#7747 v1.10 Configurable ending year.
 
@ SLV_WATER_TILE_TYPE
342 PR#13030 Simplify water tile type.
 
@ SLV_ANIMATED_TILE_STATE_IN_MAP
347 PR#13082 Animated tile state saved for improved performance.
 
@ SLV_MULTITILE_DOCKS
216 PR#7380 Multiple docks per station.
 
@ SLV_ROAD_TYPES
214 PR#6811 NewGRF road types.
 
@ SLV_GS_INDUSTRY_CONTROL
287 PR#7912 and PR#8115 GS industry control.
 
@ SLV_2
2.0 0.3.0 2.1 0.3.1, 0.3.2
 
@ SLV_INCREASE_HOUSE_LIMIT
348 PR#12288 Increase house limit to 4096.
 
@ SLV_LAST_LOADING_TICK
301 PR#9693 Store tick of last loading for vehicles.
 
@ SLV_SCRIPT_RANDOMIZER
333 PR#12063 v14.0-RC1 Save script randomizers.
 
@ SLV_DEPOT_UNBUNCHING
331 PR#11945 Allow unbunching shared order vehicles at a depot.
 
@ SLV_SHIP_ACCELERATION
329 PR#10734 Start using Vehicle's acceleration field for ships too.
 
@ SLV_MULTITRACK_LEVEL_CROSSINGS
302 PR#9931 v13.0 Multi-track level crossings.
 
@ SLV_192
192 26700 FS#6066 Fix saving of order backups
 
@ SLV_ECONOMY_DATE
326 PR#10700 Split calendar and economy timers and dates.
 
@ SLV_GROUP_NUMBERS
336 PR#12297 Add per-company group numbers.
 
@ SLV_NEWGRF_LAST_SERVICE
317 PR#11124 Added stable date_of_last_service to avoid NewGRF trouble.
 
@ SLV_184
184 25508 Unit localisation split
 
@ SLV_INCREASE_STATION_TYPE_FIELD_SIZE
337 PR#12572 Increase size of StationType field in map array
 
@ SLV_NONFLOODING_WATER_TILES
345 PR#13013 Store water tile non-flooding state.
 
@ SLV_TREES_WATER_CLASS
213 PR#7405 WaterClass update for tree tiles.
 
@ SLV_SHIPS_STOP_IN_LOCKS
206 PR#7150 Ship/lock movement changes.
 
@ SLV_183
183 25363 Cargodist
 
@ SLV_REPAIR_OBJECT_DOCKING_TILES
299 PR#9594 v12.0 Fixing issue with docking tiles overlapping objects.
 
@ SLV_CONSISTENT_PARTIAL_Z
306 PR#10570 Conversion from an inconsistent partial Z calculation for slopes, to one that is (more) ...
 
@ SLV_SCRIPT_SAVE_INSTANCES
352 PR#13556 Scripts are allowed to save instances.
 
@ SLV_MAX_LOAN_FOR_COMPANY
330 PR#11224 Separate max loan for each company.
 
bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major)
Checks whether the savegame is below or at major.
 
Declaration of functions used in more save/load files.
 
void AfterLoadVehiclesPhase1(bool part_of_load)
Called after load for phase 1 of vehicle initialisation.
 
void ResetOldNames()
Free the memory of the old names array.
 
void FixupTrainLengths()
Fixup old train spacing.
 
void MoveBuoysToWaypoints()
Perform all steps to upgrade from the old station buoys to the new version that uses waypoints.
 
void UpdateOldAircraft()
need to be called to load aircraft from old version
 
void ConvertOldMultiheadToNew()
Converts all trains to the new subtype format introduced in savegame 16.2 It also links multiheaded e...
 
void ConnectMultiheadedTrains()
Link front and rear multiheaded engines to each other This is done when loading a savegame.
 
void AfterLoadRoadStops()
(Re)building of road stop caches after loading a savegame.
 
void MoveWaypointsToBaseStations()
Perform all steps to upgrade from the old waypoints to the new version that uses station.
 
void AfterLoadVehiclesPhase2(bool part_of_load)
Called after load for phase 2 of vehicle initialisation.
 
void UpdateHousesAndTowns()
Check and update town and house values.
 
std::string CopyFromOldName(StringID id)
Copy and convert old custom names to UTF-8.
 
void AfterLoadStoryBook()
Called after load to trash broken pages.
 
void ShowScriptDebugWindowIfScriptError()
Open the AI debug window if one of the AI scripts has crashed.
 
VehicleDefaultSettings _old_vds
Used for loading default vehicles settings from old savegames.
 
GameSettings _settings_game
Game settings of a running game or the scenario editor.
 
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
 
ClientSettings _settings_client
The current settings for this game.
 
@ SIGTYPE_COMBO
presignal inter-block
 
@ SIG_SEMAPHORE
Old-fashioned semaphore signal.
 
@ SIG_ELECTRIC
Light signal.
 
void UpdateAllSignVirtCoords()
Update the coordinates of all signs.
 
DiagDirection GetInclinedSlopeDirection(Slope s)
Returns the direction of an inclined slope.
 
void BuildOwnerLegend()
Completes the array for the owned property legend.
 
@ Industry
Source/destination is an industry.
 
@ Town
Source/destination is a town.
 
void UpdateAllStationVirtCoords()
Update the virtual coords needed to draw the station sign for all stations.
 
void UpdateAirportsNoise()
Recalculate the noise generated by the airports of each town.
 
void UpdateStationAcceptance(Station *st, bool show_msg)
Update the acceptance for a station.
 
StationType GetStationType(Tile t)
Get the station type of this tile.
 
StationGfx GetStationGfx(Tile t)
Get the station graphics of this tile.
 
void SetStationGfx(Tile t, StationGfx gfx)
Set the station graphics of this tile.
 
bool IsAirportTile(Tile t)
Is this tile a station tile and an airport tile?
 
bool IsBayRoadStopTile(Tile t)
Is tile t a bay (non-drive through) road stop station?
 
bool IsBuoy(Tile t)
Is tile t a buoy tile?
 
bool IsDriveThroughStopTile(Tile t)
Is tile t a drive through road stop station or waypoint?
 
bool HasStationTileRail(Tile t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
 
void SetRailStationReservation(Tile t, bool b)
Set the reservation state of the rail station.
 
bool IsAnyRoadStop(Tile t)
Is the station at t a road station?
 
bool IsStationTileBlocked(Tile t)
Is tile t a blocked tile?
 
bool IsTruckStop(Tile t)
Is the station at t a truck stop?
 
bool IsStationRoadStop(Tile t)
Is the station at t a road station?
 
bool HasStationRail(Tile t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
 
static const int GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET
The offset for the drive through parts.
 
bool IsOilRig(Tile t)
Is tile t part of an oilrig?
 
bool IsBuoyTile(Tile t)
Is tile t a buoy tile?
 
bool IsDock(Tile t)
Is tile t a dock tile?
 
@ Dock
Station with a dock.
 
@ Train
Station with train station.
 
@ Airport
Station with an airport.
 
StationType
Station types.
 
std::string FormatArrayAsHex(std::span< const uint8_t > data)
Format a byte array into a continuous hex string.
 
EncodedString GetEncodedString(StringID str)
Encode a string with no parameters into an encoded string.
 
static constexpr StringID SPECSTR_PRESIDENT_NAME
Special string for the president's name.
 
static constexpr StringID SPECSTR_TOWNNAME_START
Special strings for town names.
 
Information about a aircraft vehicle.
 
Aircraft, helicopters, rotors and their shadows belong to this class.
 
Class to backup a specific variable and restore it later.
 
void Restore()
Restore the variable.
 
Base class for all station-ish types.
 
TileArea train_station
Tile area the train 'station' part covers.
 
Owner owner
The owner of this station.
 
StationRect rect
NOSAVE: Station spread out rectangle maintained by StationRect::xxx() functions.
 
Town * town
The town this station is associated with.
 
static BaseStation * GetByTile(TileIndex tile)
Get the base station belonging to a specific tile.
 
VehicleType type
Type of vehicle.
 
static void AfterLoad()
Savegame conversion for cargopackets.
 
Helper class to perform the cargo payment.
 
Specification of a cargo type.
 
static CargoSpec * Get(size_t index)
Retrieve cargo details for the given cargo type.
 
TownAcceptanceEffect town_acceptance_effect
The effect that delivering this cargo type has on towns. Also affects destination of subsidies.
 
CompanySettings company
default values for per-company settings
 
Structure to return information about the closest depot location, and whether it could be found.
 
CompanySettings settings
settings specific for each company
 
static bool IsValidAiID(auto index)
Is this company a valid company, controlled by the computer (a NoAI program)?
 
bool freeform_edges
allow terraforming the tiles at the map edges
 
uint16_t max_bridge_length
maximum length of bridges
 
uint16_t terraform_frame_burst
how many tile heights may, over a short period, be terraformed?
 
uint16_t max_tunnel_length
maximum length of tunnels
 
uint16_t tree_frame_burst
how many trees may, over a short period, be planted?
 
uint8_t map_height_limit
the maximum allowed heightlevel
 
uint16_t clear_frame_burst
how many tiles may, over a short period, be cleared?
 
uint8_t number_towns
the amount of towns
 
uint32_t max_loan
the maximum initial loan
 
uint16_t competitors_interval
the interval (in minutes) between adding competitors
 
uint8_t industry_density
The industry density.
 
Disasters, like submarines, skyrangers and their shadows, belong to this class.
 
TownLayout town_layout
select town layout,
 
TimekeepingUnits timekeeping_units
time units to use for the game economy, either calendar or wallclock
 
bool allow_town_level_crossings
towns are allowed to build level crossings
 
bool allow_town_roads
towns are allowed to build roads (always allowed when generating world / in SE)
 
bool station_noise_level
build new airports when the town noise level is still within accepted limits
 
bool infrastructure_maintenance
enable monthly maintenance fee for owner infrastructure
 
uint8_t feeder_payment_share
percentage of leg payment to virtually pay in feeder systems
 
TownCargoGenMode town_cargogen_mode
algorithm for generating cargo from houses,
 
uint8_t larger_towns
the number of cities to build. These start off larger and grow twice as fast
 
uint64_t inflation_payment
Cumulated inflation of cargo payment since game start; 16 bit fractional part.
 
uint64_t inflation_prices
Cumulated inflation of prices since game start; 16 bit fractional part.
 
Money old_max_loan_unround
Old: Unrounded max loan.
 
uint16_t old_max_loan_unround_fract
Old: Fraction of the unrounded max loan.
 
EngineMiscFlags misc_flags
Miscellaneous flags.
 
AbstractFileType abstract
Abstract file type.
 
Basic data to distinguish a GRF.
 
MD5Hash md5sum
MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF)
 
TimerGameCalendar::Year ending_year
scoring end date
 
LandscapeType landscape
the landscape we're currently in
 
uint8_t snow_line_height
the configured snow line height (deduced from "snow_coverage")
 
uint8_t town_name
the town name generator used for town names
 
TimerGameCalendar::Year starting_year
starting date
 
LocaleSettings locale
settings related to used currency/unit system in the current game
 
PathfinderSettings pf
settings for all pathfinders
 
EconomySettings economy
settings to change the economy
 
ConstructionSettings construction
construction of things in-game
 
DifficultySettings difficulty
settings related to the difficulty
 
GameCreationSettings game_creation
settings used during the creation of a game (map)
 
StationSettings station
settings related to station management
 
VehicleSettings vehicle
options for vehicles
 
LinkGraphSettings linkgraph
settings for link graph calculations
 
Stores station stats for a single cargo.
 
@ Rating
This indicates whether a cargo has a rating at the station.
 
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
 
static HouseSpec * Get(size_t house_id)
Get the spec for a house ID.
 
HouseExtraFlags extra_flags
some more flags
 
void Reset()
Completely reset the industry build data.
 
Defines the data structure for constructing industry.
 
std::array< CargoType, INDUSTRY_NUM_INPUTS > accepts_cargo
16 accepted cargoes.
 
IndustryBehaviours behaviour
How this industry will behave, and how others entities can use it.
 
Defines the internal data of a functional industry.
 
static Industry * GetByTile(TileIndex tile)
Get the industry of the given tile.
 
uint16_t recalc_time
time (in days) for recalculating each link graph component.
 
DistributionType distribution_mail
distribution type for mail
 
DistributionType distribution_default
distribution type for all other goods
 
DistributionType distribution_pax
distribution type for passengers
 
DistributionType distribution_armoured
distribution type for armoured cargo class
 
uint16_t recalc_interval
time (in days) between subsequent checks for link graphs to be calculated.
 
uint8_t units_velocity_nautical
unit system for velocity of ships and aircraft
 
uint8_t currency
currency we currently use
 
uint8_t units_velocity
unit system for velocity of trains and road vehicles
 
uint8_t units_power
unit system for power
 
uint8_t units_height
unit system for height
 
uint8_t units_force
unit system for force
 
uint8_t units_volume
unit system for volume
 
uint8_t units_weight
unit system for weight
 
Size related data of the map.
 
static uint SizeY()
Get the size of the map along the Y.
 
static IterateWrapper Iterate()
Returns an iterable ensemble of all Tiles.
 
static debug_inline uint SizeX()
Get the size of the map along the X.
 
static uint MaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
 
static debug_inline uint MaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
 
An object, such as transmitter, on the map.
 
ObjectType type
Type of the object.
 
Town * town
Town the object is built in.
 
static void IncTypeCount(ObjectType type)
Increment the count of objects for this type.
 
TimerGameCalendar::Date build_date
Date of construction.
 
TileArea location
Location of the object.
 
Data for backing up an order of a vehicle so it can be restored after a vehicle is rebuilt in the sam...
 
Shared order list linking together the linked list of orders and the list of vehicles sharing this or...
 
bool IsType(OrderType type) const
Check whether this order is of the given type.
 
uint16_t w
The width of the area.
 
TileIndex tile
The base tile of the area.
 
uint16_t h
The height of the area.
 
uint8_t wait_for_pbs_path
how long to wait for a path reservation.
 
uint8_t wait_oneway_signal
waitingtime in days before a oneway signal
 
bool reverse_at_signals
whether to reverse at signals at all
 
bool forbid_90_deg
forbid trains to make 90 deg turns
 
uint8_t wait_twoway_signal
waitingtime in days before a twoway signal
 
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
 
static Titem * Get(auto index)
Returns Titem with given index.
 
static size_t GetNumItems()
Returns number of valid items in the pool.
 
Tindex index
Index of this pool item.
 
static bool CanAllocateItem(size_t n=1)
Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()
 
static bool IsValidID(auto index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
 
static Titem * GetIfValid(auto index)
Returns Titem with given index.
 
static constexpr size_t MAX_SIZE
Make template parameter accessible from outside.
 
RailTypes railtypes
Railtypes, mangled if elrail is disabled.
 
A Stop for a Road Vehicle.
 
Buses, trucks and trams belong to this class.
 
RoadType roadtype
NOSAVE: Roadtype of this vehicle.
 
uint8_t acceleration
Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick)
 
All ships have this type.
 
static bool IsExpected(const BaseStation *st)
Helper for checking whether the given station is of this type.
 
static Pool::IterateWrapper< Station > Iterate(size_t from=0)
Returns an iterable ensemble of all valid stations of type T.
 
static Station * Get(auto index)
Gets station with given index.
 
static Station * GetIfValid(auto index)
Returns station if the index is a valid index for this station type.
 
static Station * From(BaseStation *st)
Converts a BaseStation to SpecializedStation with type checking.
 
T * Next() const
Get next vehicle in the chain.
 
static Pool::IterateWrapper< T > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
 
static T * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
 
bool modified_catchment
different-size catchment areas
 
bool serve_neutral_industries
company stations can serve industries with attached neutral stations
 
RoadStop * bus_stops
All the road stops.
 
static void RecomputeCatchmentForAll()
Recomputes catchment of all stations.
 
RoadStop * truck_stops
All the truck stops.
 
Struct about subsidies, offered and awarded.
 
'Train' is either a loco or a wagon.
 
Default settings for vehicles.
 
uint8_t plane_crashes
number of plane crashes, 0 = none, 1 = reduced, 2 = normal
 
uint8_t roadveh_acceleration_model
realistic acceleration for road vehicles
 
uint8_t roadveh_slope_steepness
Steepness of hills for road vehicles when using realistic acceleration.
 
uint8_t train_acceleration_model
realistic acceleration for trains
 
uint8_t train_slope_steepness
Steepness of hills for trains when using realistic acceleration.
 
uint8_t road_side
the side of the road vehicles drive on
 
bool dynamic_engines
enable dynamic allocation of engine data
 
uint8_t max_train_length
maximum length for trains
 
uint8_t plane_speed
divisor for speed of aircraft
 
bool disable_elrails
when true, the elrails are disabled
 
Direction direction
facing
 
VehStates vehstatus
Status.
 
Order current_order
The current order (+ status, like: loading)
 
int32_t y_pos
y coordinate.
 
int32_t x_pos
x coordinate.
 
TileIndex tile
Current tile index.
 
Owner owner
Which company owns the vehicle?
 
Representation of a waypoint.
 
void RebuildSubsidisedSourceAndDestinationCache()
Perform a full rebuild of the subsidies cache.
 
bool MayAnimateTile(TileIndex tile)
Test if a tile may be animated.
 
bool IsTileFlat(TileIndex tile, int *h)
Check if a given tile is flat.
 
int GetTileMaxZ(TileIndex t)
Get top height of the tile inside the map.
 
int GetTileZ(TileIndex tile)
Get bottom height of the tile.
 
uint TileHash(uint x, uint y)
Calculate a hash value from a tile position.
 
bool IsTileOwner(Tile tile, Owner owner)
Checks if a tile belongs to the given owner.
 
void SetTileType(Tile tile, TileType type)
Set the type of a tile.
 
Owner GetTileOwner(Tile tile)
Returns the owner of a tile.
 
void SetTileOwner(Tile tile, Owner owner)
Sets the owner of a tile.
 
int GetTileMaxPixelZ(TileIndex tile)
Get top height of the tile.
 
static debug_inline TileType GetTileType(Tile tile)
Get the tiletype of a given tile.
 
void SetAnimationFrame(Tile t, uint8_t frame)
Set a new animation frame.
 
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
 
Slope GetTileSlope(TileIndex tile)
Return the slope of a given tile inside the map.
 
void SetTropicZone(Tile tile, TropicZone type)
Set the tropic zone.
 
static debug_inline uint TileHeight(Tile tile)
Returns the height of a tile.
 
static constexpr uint TILE_UNIT_MASK
For masking in/out the inner-tile world coordinate units.
 
@ TROPICZONE_NORMAL
Normal tropiczone.
 
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
 
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > > TileIndex
The index/ID of a Tile.
 
static constexpr uint TILE_SIZE
Tile size in world coordinates.
 
static constexpr uint MIN_SNOWLINE_HEIGHT
Minimum snowline height.
 
static constexpr uint TILE_HEIGHT
Height of a height level in world coordinate AND in pixels in ZOOM_BASE.
 
@ MP_TREES
Tile got trees.
 
@ MP_ROAD
A tile with road (or tram tracks)
 
@ MP_STATION
A tile of a station.
 
@ MP_TUNNELBRIDGE
Tunnel entry/exit and bridge heads.
 
@ MP_CLEAR
A tile without any structures, i.e. grass, rocks, farm fields etc.
 
@ MP_HOUSE
A house by a town.
 
@ MP_INDUSTRY
Part of an industry.
 
@ MP_VOID
Invisible tiles at the SW and SE border.
 
@ MP_OBJECT
Contains objects such as transmitters and owned land.
 
static const uint TOWN_GROWTH_WINTER
The town only needs this cargo in the winter (any amount)
 
const CargoSpec * FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect)
Determines the first cargo with a certain town effect.
 
Town * ClosestTownFromTile(TileIndex tile, uint threshold)
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
 
static const uint TOWN_GROWTH_DESERT
The town needs the cargo for growth when on desert (any amount)
 
void UpdateTownMaxPass(Town *t)
Update the maximum amount of monthly passengers and mail for a town, based on its population.
 
void ClearAllTownCachedNames()
Clear the cached_name of all towns.
 
Town * CalcClosestTownFromTile(TileIndex tile, uint threshold=UINT_MAX)
Return the town closest to the given tile within threshold.
 
@ CustomGrowth
Growth rate is controlled by GS.
 
static const uint16_t TOWN_GROWTH_RATE_NONE
Special value for Town::growth_rate to disable town growth.
 
void MakeDefaultName(T *obj)
Set the default name for a depot/waypoint.
 
void UpdateAllTownVirtCoords()
Update the virtual coords needed to draw the town sign for all towns.
 
HouseID GetHouseType(Tile t)
Get the type of this house, which is an index into the house spec array.
 
void SetHouseType(Tile t, HouseID house_id)
Set the house type.
 
void SetLiftPosition(Tile t, uint8_t pos)
Set the position of the lift on this animated house.
 
void SetHouseCompleted(Tile t, bool status)
Mark this house as been completed.
 
void SetHouseProtected(Tile t, bool house_protected)
Set a house as protected from removal by towns.
 
void SetTownIndex(Tile t, TownID index)
Set the town index for a road or house tile.
 
bool IsHouseCompleted(Tile t)
Get the completion of this house.
 
static constexpr int RATING_INITIAL
initial rating
 
@ TCGM_ORIGINAL
Original algorithm (quadratic cargo by population)
 
@ TL_RANDOM
Random town layout.
 
@ TL_BETTER_ROADS
Extended original algorithm (min. 2 distance between roads)
 
TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal track bits incidating with that diagdir.
 
Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal trackdir that runs in that direction.
 
TrackBits TrackStatusToTrackBits(TrackStatus ts)
Returns the present-track-information of a TrackStatus.
 
TrackBits
Allow incrementing of Track variables.
 
@ TRACK_BIT_WORMHOLE
Bitflag for a wormhole (used for tunnels)
 
@ TRACK_BIT_Y
Y-axis track.
 
@ TRACK_BIT_NONE
No track.
 
@ TRACK_BIT_X
X-axis track.
 
@ INVALID_TRACK
Flag for an invalid track.
 
@ TRACK_LOWER
Track in the lower corner of the tile (south)
 
@ TRACK_UPPER
Track in the upper corner of the tile (north)
 
void CheckTrainsLengths()
Checks if lengths of all rail vehicles are valid.
 
VehicleRailFlag
Rail vehicle flags.
 
@ TFP_NONE
Normal operation.
 
@ TFP_STUCK
Proceed till next signal, but ignore being stuck till then. This includes force leaving depots.
 
TransportType
Available types of transport.
 
@ TRANSPORT_RAIL
Transport by train.
 
@ TRANSPORT_ROAD
Transport by road vehicle.
 
TreeGround GetTreeGround(Tile t)
Returns the groundtype for tree tiles.
 
TreeGround
Enumeration for ground types of tiles with trees.
 
@ TREE_GROUND_SNOW_DESERT
a desert or snow tile, depend on landscape
 
bool IsTunnelTile(Tile t)
Is this a tunnel (entrance)?
 
const uint8_t _tunnel_visibility_frame[DIAGDIR_END]
Frame when a vehicle should be hidden in a tunnel with a certain direction.
 
DiagDirection GetTunnelBridgeDirection(Tile t)
Get the direction pointing to the other end.
 
TransportType GetTunnelBridgeTransportType(Tile t)
Tunnel: Get the transport type of the tunnel (road or rail) Bridge: Get the transport type of the bri...
 
TileIndex GetOtherTunnelBridgeEnd(Tile t)
Determines type of the wormhole and returns its other end.
 
void SetTunnelBridgeReservation(Tile t, bool b)
Set the reservation state of the rail tunnel/bridge.
 
@ Crashed
Vehicle is crashed.
 
@ Hidden
Vehicle is not visible.
 
@ Stopped
Vehicle is stopped by the player.
 
@ VEH_INVALID
Non-existing type of vehicle.
 
@ VEH_ROAD
Road vehicle type.
 
@ VEH_SHIP
Ship vehicle type.
 
@ VEH_TRAIN
Train vehicle type.
 
void MakeVoid(Tile t)
Make a nice void tile ;)
 
void MakeShore(Tile t)
Helper function to make a coast tile.
 
void SetWaterClass(Tile t, WaterClass wc)
Set the water class at a tile.
 
bool IsShipDepot(Tile t)
Is it a water tile with a ship depot on it?
 
WaterClass
classes of water (for WATER_TILE_CLEAR water tile type).
 
@ WATER_CLASS_CANAL
Canal.
 
@ WATER_CLASS_INVALID
Used for industry tiles on land (also for oilrig if newgrf says so).
 
@ WATER_CLASS_RIVER
River.
 
bool IsShipDepotTile(Tile t)
Is it a ship depot tile?
 
bool IsCoast(Tile t)
Is it a coast tile?
 
WaterTileType GetWaterTileType(Tile t)
Get the water tile type of a tile.
 
void SetNonFloodingWaterTile(Tile t, bool b)
Set the non-flooding water tile state of a tile.
 
void SetWaterTileType(Tile t, WaterTileType type)
Set the water tile type of a tile.
 
WaterClass GetWaterClass(Tile t)
Get the water class at a tile.
 
void MakeCanal(Tile t, Owner o, uint8_t random_bits)
Make a canal tile.
 
TileIndex GetOtherShipDepotTile(Tile t)
Get the other tile of the ship depot.
 
@ WATER_TILE_LOCK
Water lock.
 
@ WATER_TILE_DEPOT
Water Depot.
 
@ WATER_TILE_CLEAR
Plain water.
 
void SetDockingTile(Tile t, bool b)
Set the docking tile state of a tile.
 
@ LOCK_PART_MIDDLE
Middle part of a lock.
 
bool IsWater(Tile t)
Is it a plain water tile?
 
bool IsLock(Tile t)
Is there a lock on a given water tile?
 
void MakeSea(Tile t)
Make a sea tile.
 
LockPart GetLockPart(Tile t)
Get the part of a lock.
 
void ResetWindowSystem()
Reset the windowing system, by means of shutting it down followed by re-initialization.
 
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
 
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
 
@ WC_COMPANY_INFRASTRUCTURE
Company infrastructure overview; Window numbers:
 
@ WC_COMPANY_COLOUR
Company colour selection; Window numbers:
 
@ WC_BUILD_TOOLBAR
Build toolbar; Window numbers:
 
void YapfNotifyTrackLayoutChange(TileIndex tile, Track track)
Use this function to notify YAPF that track layout (or signal configuration) has change.