OpenTTD Source  20240917-master-g9ab0a47812
afterload.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #include "../stdafx.h"
11 #include "../void_map.h"
12 #include "../signs_base.h"
13 #include "../depot_base.h"
14 #include "../fios.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 "../roadveh.h"
26 #include "../roadveh_cmd.h"
27 #include "../train.h"
28 #include "../station_base.h"
29 #include "../waypoint_base.h"
30 #include "../roadstop_base.h"
31 #include "../tunnelbridge_map.h"
32 #include "../pathfinder/yapf/yapf_cache.h"
33 #include "../elrail_func.h"
34 #include "../signs_func.h"
35 #include "../aircraft.h"
36 #include "../object_map.h"
37 #include "../object_base.h"
38 #include "../tree_map.h"
39 #include "../company_func.h"
40 #include "../road_cmd.h"
41 #include "../ai/ai.hpp"
42 #include "../script/script_gui.h"
43 #include "../game/game.hpp"
44 #include "../town.h"
45 #include "../economy_base.h"
46 #include "../animated_tile_func.h"
47 #include "../subsidy_base.h"
48 #include "../subsidy_func.h"
49 #include "../newgrf.h"
50 #include "../newgrf_station.h"
51 #include "../engine_func.h"
52 #include "../rail_gui.h"
53 #include "../core/backup_type.hpp"
54 #include "../smallmap_gui.h"
55 #include "../news_func.h"
56 #include "../order_backup.h"
57 #include "../error.h"
58 #include "../disaster_vehicle.h"
59 #include "../ship.h"
60 #include "../water.h"
61 #include "../timer/timer.h"
62 #include "../timer/timer_game_calendar.h"
63 #include "../timer/timer_game_economy.h"
64 #include "../timer/timer_game_tick.h"
65 
66 #include "saveload_internal.h"
67 
68 #include <signal.h>
69 
70 #include "../safeguards.h"
71 
72 extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY);
73 
84 void SetWaterClassDependingOnSurroundings(Tile t, bool include_invalid_water_class)
85 {
86  /* If the slope is not flat, we always assume 'land' (if allowed). Also for one-corner-raised-shores.
87  * Note: Wrt. autosloping under industry tiles this is the most fool-proof behaviour. */
88  if (!IsTileFlat(t)) {
89  if (include_invalid_water_class) {
91  return;
92  } else {
93  SlErrorCorrupt("Invalid water class for dry tile");
94  }
95  }
96 
97  /* Mark tile dirty in all cases */
99 
100  if (TileX(t) == 0 || TileY(t) == 0 || TileX(t) == Map::MaxX() - 1 || TileY(t) == Map::MaxY() - 1) {
101  /* tiles at map borders are always WATER_CLASS_SEA */
103  return;
104  }
105 
106  bool has_water = false;
107  bool has_canal = false;
108  bool has_river = false;
109 
110  for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) {
111  Tile neighbour = TileAddByDiagDir(t, dir);
112  switch (GetTileType(neighbour)) {
113  case MP_WATER:
114  /* clear water and shipdepots have already a WaterClass associated */
115  if (IsCoast(neighbour)) {
116  has_water = true;
117  } else if (!IsLock(neighbour)) {
118  switch (GetWaterClass(neighbour)) {
119  case WATER_CLASS_SEA: has_water = true; break;
120  case WATER_CLASS_CANAL: has_canal = true; break;
121  case WATER_CLASS_RIVER: has_river = true; break;
122  default: SlErrorCorrupt("Invalid water class for tile");
123  }
124  }
125  break;
126 
127  case MP_RAILWAY:
128  /* Shore or flooded halftile */
129  has_water |= (GetRailGroundType(neighbour) == RAIL_GROUND_WATER);
130  break;
131 
132  case MP_TREES:
133  /* trees on shore */
134  has_water |= (GB(neighbour.m2(), 4, 2) == TREE_GROUND_SHORE);
135  break;
136 
137  default: break;
138  }
139  }
140 
141  if (!has_water && !has_canal && !has_river && include_invalid_water_class) {
143  return;
144  }
145 
146  if (has_river && !has_canal) {
148  } else if (has_canal || !has_water) {
150  } else {
152  }
153 }
154 
155 static void ConvertTownOwner()
156 {
157  for (auto tile : Map::Iterate()) {
158  switch (GetTileType(tile)) {
159  case MP_ROAD:
160  if (GB(tile.m5(), 4, 2) == ROAD_TILE_CROSSING && HasBit(tile.m3(), 7)) {
161  tile.m3() = OWNER_TOWN;
162  }
163  [[fallthrough]];
164 
165  case MP_TUNNELBRIDGE:
166  if (tile.m1() & 0x80) SetTileOwner(tile, OWNER_TOWN);
167  break;
168 
169  default: break;
170  }
171  }
172 }
173 
174 /* since savegame version 4.1, exclusive transport rights are stored at towns */
175 static void UpdateExclusiveRights()
176 {
177  for (Town *t : Town::Iterate()) {
178  t->exclusivity = INVALID_COMPANY;
179  }
180 
181  /* FIXME old exclusive rights status is not being imported (stored in s->blocked_months_obsolete)
182  * could be implemented this way:
183  * 1.) Go through all stations
184  * Build an array town_blocked[ town_id ][ company_id ]
185  * that stores if at least one station in that town is blocked for a company
186  * 2.) Go through that array, if you find a town that is not blocked for
187  * one company, but for all others, then give it exclusivity.
188  */
189 }
190 
191 static const uint8_t convert_currency[] = {
192  0, 1, 12, 8, 3,
193  10, 14, 19, 4, 5,
194  9, 11, 13, 6, 17,
195  16, 22, 21, 7, 15,
196  18, 2, 20,
197 };
198 
199 /* since savegame version 4.2 the currencies are arranged differently */
200 static void UpdateCurrencies()
201 {
203 }
204 
205 /* Up to revision 1413 the invisible tiles at the southern border have not been
206  * MP_VOID, even though they should have. This is fixed by this function
207  */
208 static void UpdateVoidTiles()
209 {
210  for (uint x = 0; x < Map::SizeX(); x++) MakeVoid(TileXY(x, Map::MaxY()));
211  for (uint y = 0; y < Map::SizeY(); y++) MakeVoid(TileXY(Map::MaxX(), y));
212 }
213 
214 static inline RailType UpdateRailType(RailType rt, RailType min)
215 {
216  return rt >= min ? (RailType)(rt + 1): rt;
217 }
218 
223 {
227  UpdateAllTextEffectVirtCoords();
228  RebuildViewportKdtree();
229 }
230 
231 void ClearAllCachedNames()
232 {
233  ClearAllStationCachedNames();
235  ClearAllIndustryCachedNames();
236 }
237 
248 {
249  /* Initialize windows */
252 
253  /* Update coordinates of the signs. */
254  ClearAllCachedNames();
256  ResetViewportAfterLoadGame();
257 
258  for (Company *c : Company::Iterate()) {
259  /* For each company, verify (while loading a scenario) that the inauguration date is the current year and set it
260  * accordingly if it is not the case. No need to set it on companies that are not been used already,
261  * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */
262  if (_file_to_saveload.abstract_ftype == FT_SCENARIO && c->inaugurated_year != EconomyTime::MIN_YEAR) {
263  c->inaugurated_year = TimerGameEconomy::year;
264  }
265  }
266 
267  /* Count number of objects per type */
268  for (Object *o : Object::Iterate()) {
269  Object::IncTypeCount(o->type);
270  }
271 
272  /* Identify owners of persistent storage arrays */
273  for (Industry *i : Industry::Iterate()) {
274  if (i->psa != nullptr) {
275  i->psa->feature = GSF_INDUSTRIES;
276  i->psa->tile = i->location.tile;
277  }
278  }
279  for (Station *s : Station::Iterate()) {
280  if (s->airport.psa != nullptr) {
281  s->airport.psa->feature = GSF_AIRPORTS;
282  s->airport.psa->tile = s->airport.tile;
283  }
284  }
285  for (Town *t : Town::Iterate()) {
286  for (auto &it : t->psa_list) {
287  it->feature = GSF_FAKE_TOWNS;
288  it->tile = t->xy;
289  }
290  }
291  for (RoadVehicle *rv : RoadVehicle::Iterate()) {
292  if (rv->IsFrontEngine()) {
293  rv->CargoChanged();
294  }
295  }
296 
297  RecomputePrices();
298 
300 
302 
303  /* Towns have a noise controlled number of airports system
304  * So each airport's noise value must be added to the town->noise_reached value
305  * Reset each town's noise_reached value to '0' before. */
307 
309  ShowNewGRFError();
310 
311  /* Rebuild the smallmap list of owners. */
313 }
314 
315 typedef void (CDECL *SignalHandlerPointer)(int);
316 static SignalHandlerPointer _prev_segfault = nullptr;
317 static SignalHandlerPointer _prev_abort = nullptr;
318 static SignalHandlerPointer _prev_fpe = nullptr;
319 
320 static void CDECL HandleSavegameLoadCrash(int signum);
321 
326 static void SetSignalHandlers()
327 {
328  _prev_segfault = signal(SIGSEGV, HandleSavegameLoadCrash);
329  _prev_abort = signal(SIGABRT, HandleSavegameLoadCrash);
330  _prev_fpe = signal(SIGFPE, HandleSavegameLoadCrash);
331 }
332 
336 static void ResetSignalHandlers()
337 {
338  signal(SIGSEGV, _prev_segfault);
339  signal(SIGABRT, _prev_abort);
340  signal(SIGFPE, _prev_fpe);
341 }
342 
345 
352 {
354 }
355 
362 static void CDECL HandleSavegameLoadCrash(int signum)
363 {
365 
366  std::string message;
367  message.reserve(1024);
368  message += "Loading your savegame caused OpenTTD to crash.\n";
369 
370  for (const GRFConfig *c = _grfconfig; !_saveload_crash_with_missing_newgrfs && c != nullptr; c = c->next) {
372  }
373 
375  message +=
376  "This is most likely caused by a missing NewGRF or a NewGRF that\n"
377  "has been loaded as replacement for a missing NewGRF. OpenTTD\n"
378  "cannot easily determine whether a replacement NewGRF is of a newer\n"
379  "or older version.\n"
380  "It will load a NewGRF with the same GRF ID as the missing NewGRF.\n"
381  "This means that if the author makes incompatible NewGRFs with the\n"
382  "same GRF ID, OpenTTD cannot magically do the right thing. In most\n"
383  "cases, OpenTTD will load the savegame and not crash, but this is an\n"
384  "exception.\n"
385  "Please load the savegame with the appropriate NewGRFs installed.\n"
386  "The missing/compatible NewGRFs are:\n";
387 
388  for (const GRFConfig *c = _grfconfig; c != nullptr; c = c->next) {
389  if (HasBit(c->flags, GCF_COMPATIBLE)) {
390  const GRFIdentifier *replaced = _gamelog.GetOverriddenIdentifier(c);
391  fmt::format_to(std::back_inserter(message), "NewGRF {:08X} (checksum {}) not found.\n Loaded NewGRF \"{}\" (checksum {}) with same GRF ID instead.\n",
392  BSWAP32(c->ident.grfid), FormatArrayAsHex(c->original_md5sum), c->filename, FormatArrayAsHex(replaced->md5sum));
393  }
394  if (c->status == GCS_NOT_FOUND) {
395  fmt::format_to(std::back_inserter(message), "NewGRF {:08X} ({}) not found; checksum {}.\n",
396  BSWAP32(c->ident.grfid), c->filename, FormatArrayAsHex(c->ident.md5sum));
397  }
398  }
399  } else {
400  message +=
401  "This is probably caused by a corruption in the savegame.\n"
402  "Please file a bug report and attach this savegame.\n";
403  }
404 
405  ShowInfoI(message);
406 
407  SignalHandlerPointer call = nullptr;
408  switch (signum) {
409  case SIGSEGV: call = _prev_segfault; break;
410  case SIGABRT: call = _prev_abort; break;
411  case SIGFPE: call = _prev_fpe; break;
412  default: NOT_REACHED();
413  }
414  if (call != nullptr) call(signum);
415 }
416 
422 static void FixOwnerOfRailTrack(Tile t)
423 {
425 
426  /* remove leftover rail piece from crossing (from very old savegames) */
427  Train *v = nullptr;
428  for (Train *w : Train::Iterate()) {
429  if (w->tile == TileIndex(t)) {
430  v = w;
431  break;
432  }
433  }
434 
435  if (v != nullptr) {
436  /* when there is a train on crossing (it could happen in TTD), set owner of crossing to train owner */
437  SetTileOwner(t, v->owner);
438  return;
439  }
440 
441  /* try to find any connected rail */
442  for (DiagDirection dd = DIAGDIR_BEGIN; dd < DIAGDIR_END; dd++) {
443  TileIndex tt = t + TileOffsByDiagDir(dd);
444  if (GetTileTrackStatus(t, TRANSPORT_RAIL, 0, dd) != 0 &&
447  SetTileOwner(t, GetTileOwner(tt));
448  return;
449  }
450  }
451 
452  if (IsLevelCrossingTile(t)) {
453  /* else change the crossing to normal road (road vehicles won't care) */
454  Owner road = GetRoadOwner(t, RTT_ROAD);
455  Owner tram = GetRoadOwner(t, RTT_TRAM);
456  RoadBits bits = GetCrossingRoadBits(t);
457  bool hasroad = HasBit(t.m7(), 6);
458  bool hastram = HasBit(t.m7(), 7);
459 
460  /* MakeRoadNormal */
461  SetTileType(t, MP_ROAD);
462  SetTileOwner(t, road);
463  t.m3() = (hasroad ? bits : 0);
464  t.m5() = (hastram ? bits : 0) | ROAD_TILE_NORMAL << 6;
465  SB(t.m6(), 2, 4, 0);
466  SetRoadOwner(t, RTT_TRAM, tram);
467  return;
468  }
469 
470  /* if it's not a crossing, make it clean land */
471  MakeClear(t, CLEAR_GRASS, 0);
472 }
473 
481 {
482  /* Compute place where this vehicle entered the tile */
483  int entry_x = v->x_pos;
484  int entry_y = v->y_pos;
485  switch (dir) {
486  case DIR_NE: entry_x |= TILE_UNIT_MASK; break;
487  case DIR_NW: entry_y |= TILE_UNIT_MASK; break;
488  case DIR_SW: entry_x &= ~TILE_UNIT_MASK; break;
489  case DIR_SE: entry_y &= ~TILE_UNIT_MASK; break;
490  case INVALID_DIR: break;
491  default: NOT_REACHED();
492  }
493  uint8_t entry_z = GetSlopePixelZ(entry_x, entry_y, true);
494 
495  /* Compute middle of the tile. */
496  int middle_x = (v->x_pos & ~TILE_UNIT_MASK) + TILE_SIZE / 2;
497  int middle_y = (v->y_pos & ~TILE_UNIT_MASK) + TILE_SIZE / 2;
498  uint8_t middle_z = GetSlopePixelZ(middle_x, middle_y, true);
499 
500  /* middle_z == entry_z, no height change. */
501  if (middle_z == entry_z) return 0;
502 
503  /* middle_z < entry_z, we are going downwards. */
504  if (middle_z < entry_z) return 1U << GVF_GOINGDOWN_BIT;
505 
506  /* middle_z > entry_z, we are going upwards. */
507  return 1U << GVF_GOINGUP_BIT;
508 }
509 
516 {
517  for (Vehicle *v : Vehicle::Iterate()) {
518  if (v->IsGroundVehicle()) {
519  /*
520  * Either the vehicle is not actually on the given tile, i.e. it is
521  * in the wormhole of a bridge or a tunnel, or the Z-coordinate must
522  * be the same as when it would be recalculated right now.
523  */
524  assert(v->tile != TileVirtXY(v->x_pos, v->y_pos) || v->z_pos == GetSlopePixelZ(v->x_pos, v->y_pos, true));
525  }
526  }
527 }
528 
535 static inline bool MayHaveBridgeAbove(Tile t)
536 {
537  return IsTileType(t, MP_CLEAR) || IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_ROAD) ||
539 }
540 
544 static void StartScripts()
545 {
546  /* Script debug window requires AIs to be started before trying to start GameScript. */
547 
548  /* Start the AIs. */
549  for (const Company *c : Company::Iterate()) {
550  if (Company::IsValidAiID(c->index)) AI::StartNew(c->index);
551  }
552 
553  /* Start the GameScript. */
554  Game::StartNew();
555 
557 }
558 
565 {
567 
568  extern TileIndex _cur_tileloop_tile; // From landscape.cpp.
569  /* The LFSR used in RunTileLoop iteration cannot have a zeroed state, make it non-zeroed. */
570  if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 1;
571 
573 
575  _gamelog.TestMode();
576 
577  RebuildTownKdtree();
578  RebuildStationKdtree();
579  /* This needs to be done even before conversion, because some conversions will destroy objects
580  * that otherwise won't exist in the tree. */
581  RebuildViewportKdtree();
582 
584 
587  } else if (_network_dedicated && (_pause_mode & PM_PAUSED_ERROR) != 0) {
588  Debug(net, 0, "The loading savegame was paused due to an error state");
589  Debug(net, 0, " This savegame cannot be used for multiplayer");
590  /* Restore the signals */
592  return false;
593  } else if (!_networking || _network_server) {
594  /* If we are in singleplayer mode, i.e. not networking, and loading the
595  * savegame or we are loading the savegame as network server we do
596  * not want to be bothered by being paused because of the automatic
597  * reason of a network server, e.g. joining clients or too few
598  * active clients. Note that resetting these values for a network
599  * client are very bad because then the client is going to execute
600  * the game loop when the server is not, i.e. it desyncs. */
602  }
603 
604  /* In very old versions, size of train stations was stored differently.
605  * They had swapped width and height if station was built along the Y axis.
606  * TTO and TTD used 3 bits for width/height, while OpenTTD used 4.
607  * Because the data stored by TTDPatch are unusable for rail stations > 7x7,
608  * recompute the width and height. Doing this unconditionally for all old
609  * savegames simplifies the code. */
611  for (Station *st : Station::Iterate()) {
612  st->train_station.w = st->train_station.h = 0;
613  }
614  for (auto t : Map::Iterate()) {
615  if (!IsTileType(t, MP_STATION)) continue;
616  if (t.m5() > 7) continue; // is it a rail station tile?
617  Station *st = Station::Get(t.m2());
618  assert(st->train_station.tile != 0);
619  int dx = TileX(t) - TileX(st->train_station.tile);
620  int dy = TileY(t) - TileY(st->train_station.tile);
621  assert(dx >= 0 && dy >= 0);
622  st->train_station.w = std::max<uint>(st->train_station.w, dx + 1);
623  st->train_station.h = std::max<uint>(st->train_station.h, dy + 1);
624  }
625  }
626 
629 
630  /* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */
631  for (auto t : Map::Iterate()) {
632  t.height() = GB(t.type(), 0, 4);
633  SB(t.type(), 0, 2, GB(t.m6(), 0, 2));
634  SB(t.m6(), 0, 2, 0);
635  if (MayHaveBridgeAbove(t)) {
636  SB(t.type(), 2, 2, GB(t.m6(), 6, 2));
637  SB(t.m6(), 6, 2, 0);
638  } else {
639  SB(t.type(), 2, 2, 0);
640  }
641  }
642  }
643 
644  /* in version 2.1 of the savegame, town owner was unified. */
645  if (IsSavegameVersionBefore(SLV_2, 1)) ConvertTownOwner();
646 
647  /* from version 4.1 of the savegame, exclusive rights are stored at towns */
648  if (IsSavegameVersionBefore(SLV_4, 1)) UpdateExclusiveRights();
649 
650  /* from version 4.2 of the savegame, currencies are in a different order */
651  if (IsSavegameVersionBefore(SLV_4, 2)) UpdateCurrencies();
652 
653  /* In old version there seems to be a problem that water is owned by
654  * OWNER_NONE, not OWNER_WATER.. I can't replicate it for the current
655  * (4.3) version, so I just check when versions are older, and then
656  * walk through the whole map.. */
657  if (IsSavegameVersionBefore(SLV_4, 3)) {
658  for (auto t : Map::Iterate()) {
659  if (IsTileType(t, MP_WATER) && GetTileOwner(t) >= MAX_COMPANIES) {
661  }
662  }
663  }
664 
666  for (Company *c : Company::Iterate()) {
667  c->name = CopyFromOldName(c->name_1);
668  if (!c->name.empty()) c->name_1 = STR_SV_UNNAMED;
669  c->president_name = CopyFromOldName(c->president_name_1);
670  if (!c->president_name.empty()) c->president_name_1 = SPECSTR_PRESIDENT_NAME;
671  }
672 
673  for (Station *st : Station::Iterate()) {
674  st->name = CopyFromOldName(st->string_id);
675  /* generating new name would be too much work for little effect, use the station name fallback */
676  if (!st->name.empty()) st->string_id = STR_SV_STNAME_FALLBACK;
677  }
678 
679  for (Town *t : Town::Iterate()) {
680  t->name = CopyFromOldName(t->townnametype);
681  if (!t->name.empty()) t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name;
682  }
683  }
684 
685  /* From this point the old names array is cleared. */
686  ResetOldNames();
687 
689  /* no station is determined by 'tile == INVALID_TILE' now (instead of '0') */
690  for (Station *st : Station::Iterate()) {
691  if (st->airport.tile == 0) st->airport.tile = INVALID_TILE;
692  if (st->train_station.tile == 0) st->train_station.tile = INVALID_TILE;
693  }
694 
695  /* the same applies to Company::location_of_HQ */
696  for (Company *c : Company::Iterate()) {
697  if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(SLV_4) && c->location_of_HQ == 0xFFFF)) {
698  c->location_of_HQ = INVALID_TILE;
699  }
700  }
701  }
702 
703  /* convert road side to my format. */
705 
706  /* Check if all NewGRFs are present, we are very strict in MP mode */
708  for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) {
709  if (c->status == GCS_NOT_FOUND) {
710  _gamelog.GRFRemove(c->ident.grfid);
711  } else if (HasBit(c->flags, GCF_COMPATIBLE)) {
712  _gamelog.GRFCompatible(&c->ident);
713  }
714  }
715 
716  if (_networking && gcf_res != GLC_ALL_GOOD) {
717  SetSaveLoadError(STR_NETWORK_ERROR_CLIENT_NEWGRF_MISMATCH);
718  /* Restore the signals */
720  return false;
721  }
722 
723  switch (gcf_res) {
724  case GLC_COMPATIBLE: ShowErrorMessage(STR_NEWGRF_COMPATIBLE_LOAD_WARNING, INVALID_STRING_ID, WL_CRITICAL); break;
725  case GLC_NOT_FOUND: ShowErrorMessage(STR_NEWGRF_DISABLED_WARNING, INVALID_STRING_ID, WL_CRITICAL); _pause_mode = PM_PAUSED_ERROR; break;
726  default: break;
727  }
728 
729  /* The value of TimerGameCalendar::date_fract got divided, so make sure that old games are converted correctly. */
731 
732  /* Update current year
733  * must be done before loading sprites as some newgrfs check it */
735 
736  /* Only new games can use wallclock units. */
738 
739  /* Update economy year. If we don't have a separate economy date saved, follow the calendar date. */
742  } else {
744  }
745 
746  /*
747  * Force the old behaviour for compatibility reasons with old savegames. As new
748  * settings can only be loaded from new savegames loading old savegames with new
749  * versions of OpenTTD will normally initialize settings newer than the savegame
750  * version with "new game" defaults which the player can define to their liking.
751  * For some settings we override that to keep the behaviour the same as when the
752  * game was saved.
753  *
754  * Note that there is no non-stop in here. This is because the setting could have
755  * either value in TTDPatch. To convert it properly the user has to make sure the
756  * right value has been chosen in the settings. Otherwise we will be converting
757  * it incorrectly in half of the times without a means to correct that.
758  */
767  }
773  }
779  }
786  }
787 
790  }
791 
792  /* Convert linkgraph update settings from days to seconds. */
796  }
797 
798  /* Load the sprites */
799  GfxLoadSprites();
801 
802  /* Copy temporary data to Engine pool */
804 
805  /* Connect front and rear engines of multiheaded trains and converts
806  * subtype to the new format */
808 
809  /* Connect front and rear engines of multiheaded trains */
811 
812  /* Fix the CargoPackets *and* fix the caches of CargoLists.
813  * If this isn't done before Stations and especially Vehicles are
814  * running their AfterLoad we might get in trouble. In the case of
815  * vehicles we could give the wrong (cached) count of items in a
816  * vehicle which causes different results when getting their caches
817  * filled; and that could eventually lead to desyncs. */
819 
820  /* Oilrig was moved from id 15 to 9. We have to do this conversion
821  * here as AfterLoadVehicles can check it indirectly via the newgrf
822  * code. */
824  for (Station *st : Station::Iterate()) {
825  if (st->airport.tile != INVALID_TILE && st->airport.type == 15) {
826  st->airport.type = AT_OILRIG;
827  }
828  }
829  }
830 
831  /* Update all vehicles */
832  AfterLoadVehicles(true);
833 
834  /* make sure there is a town in the game */
835  if (_game_mode == GM_NORMAL && Town::GetNumItems() == 0) {
836  SetSaveLoadError(STR_ERROR_NO_TOWN_IN_SCENARIO);
837  /* Restore the signals */
839  return false;
840  }
841 
842  /* The void tiles on the southern border used to belong to a wrong class (pre 4.3).
843  * This problem appears in savegame version 21 too, see r3455. But after loading the
844  * savegame and saving again, the buggy map array could be converted to new savegame
845  * version. It didn't show up before r12070. */
846  if (IsSavegameVersionBefore(SLV_87)) UpdateVoidTiles();
847 
848  /* Fix the cache for cargo payments. */
849  for (CargoPayment *cp : CargoPayment::Iterate()) {
850  cp->front->cargo_payment = cp;
851  cp->current_station = cp->front->last_station_visited;
852  }
853 
855  /* Locks in very old savegames had OWNER_WATER as owner */
856  for (auto t : Map::Iterate()) {
857  switch (GetTileType(t)) {
858  default: break;
859 
860  case MP_WATER:
862  break;
863 
864  case MP_STATION: {
865  if (HasBit(t.m6(), 3)) SetBit(t.m6(), 2);
866  StationGfx gfx = GetStationGfx(t);
867  StationType st;
868  if ( IsInsideMM(gfx, 0, 8)) { // Rail station
869  st = STATION_RAIL;
870  SetStationGfx(t, gfx - 0);
871  } else if (IsInsideMM(gfx, 8, 67)) { // Airport
872  st = STATION_AIRPORT;
873  SetStationGfx(t, gfx - 8);
874  } else if (IsInsideMM(gfx, 67, 71)) { // Truck
875  st = STATION_TRUCK;
876  SetStationGfx(t, gfx - 67);
877  } else if (IsInsideMM(gfx, 71, 75)) { // Bus
878  st = STATION_BUS;
879  SetStationGfx(t, gfx - 71);
880  } else if (gfx == 75) { // Oil rig
881  st = STATION_OILRIG;
882  SetStationGfx(t, gfx - 75);
883  } else if (IsInsideMM(gfx, 76, 82)) { // Dock
884  st = STATION_DOCK;
885  SetStationGfx(t, gfx - 76);
886  } else if (gfx == 82) { // Buoy
887  st = STATION_BUOY;
888  SetStationGfx(t, gfx - 82);
889  } else if (IsInsideMM(gfx, 83, 168)) { // Extended airport
890  st = STATION_AIRPORT;
891  SetStationGfx(t, gfx - 83 + 67 - 8);
892  } else if (IsInsideMM(gfx, 168, 170)) { // Drive through truck
893  st = STATION_TRUCK;
895  } else if (IsInsideMM(gfx, 170, 172)) { // Drive through bus
896  st = STATION_BUS;
898  } else {
899  /* Restore the signals */
901  return false;
902  }
903  SB(t.m6(), 3, 3, st);
904  break;
905  }
906  }
907  }
908  }
909 
911  /* Expansion of station type field in m6 */
912  for (auto t : Map::Iterate()) {
913  if (IsTileType(t, MP_STATION)) {
914  ClrBit(t.m6(), 6);
915  }
916  }
917  }
918 
919  for (auto t : Map::Iterate()) {
920  switch (GetTileType(t)) {
921  case MP_STATION: {
923 
924  /* Sanity check */
925  if (!IsBuoy(t) && bst->owner != GetTileOwner(t)) SlErrorCorrupt("Wrong owner for station tile");
926 
927  /* Set up station spread */
928  bst->rect.BeforeAddTile(t, StationRect::ADD_FORCE);
929 
930  /* Waypoints don't have road stops/oil rigs in the old format */
931  if (!Station::IsExpected(bst)) break;
932  Station *st = Station::From(bst);
933 
934  switch (GetStationType(t)) {
935  case STATION_TRUCK:
936  case STATION_BUS:
938  /* Before version 5 you could not have more than 250 stations.
939  * Version 6 adds large maps, so you could only place 253*253
940  * road stops on a map (no freeform edges) = 64009. So, yes
941  * someone could in theory create such a full map to trigger
942  * this assertion, it's safe to assume that's only something
943  * theoretical and does not happen in normal games. */
944  assert(RoadStop::CanAllocateItem());
945 
946  /* From this version on there can be multiple road stops of the
947  * same type per station. Convert the existing stops to the new
948  * internal data structure. */
949  RoadStop *rs = new RoadStop(t);
950 
951  RoadStop **head =
952  IsTruckStop(t) ? &st->truck_stops : &st->bus_stops;
953  *head = rs;
954  }
955  break;
956 
957  case STATION_OILRIG: {
958  /* The internal encoding of oil rigs was changed twice.
959  * It was 3 (till 2.2) and later 5 (till 5.1).
960  * DeleteOilRig asserts on the correct type, and
961  * setting it unconditionally does not hurt.
962  */
964 
965  /* Very old savegames sometimes have phantom oil rigs, i.e.
966  * an oil rig which got shut down, but not completely removed from
967  * the map
968  */
969  TileIndex t1 = TileAddXY(t, 0, 1);
970  if (!IsTileType(t1, MP_INDUSTRY) || GetIndustryGfx(t1) != GFX_OILRIG_1) {
971  DeleteOilRig(t);
972  }
973  break;
974  }
975 
976  default: break;
977  }
978  break;
979  }
980 
981  default: break;
982  }
983  }
984 
985  /* In version 6.1 we put the town index in the map-array. To do this, we need
986  * to use m2 (16bit big), so we need to clean m2, and that is where this is
987  * all about ;) */
988  if (IsSavegameVersionBefore(SLV_6, 1)) {
989  for (auto t : Map::Iterate()) {
990  switch (GetTileType(t)) {
991  case MP_HOUSE:
992  t.m4() = t.m2();
994  break;
995 
996  case MP_ROAD:
997  t.m4() |= (t.m2() << 4);
998  if ((GB(t.m5(), 4, 2) == ROAD_TILE_CROSSING ? (Owner)t.m3() : GetTileOwner(t)) == OWNER_TOWN) {
1000  } else {
1001  SetTownIndex(t, 0);
1002  }
1003  break;
1004 
1005  default: break;
1006  }
1007  }
1008  }
1009 
1010  /* Force the freeform edges to false for old savegames. */
1013  }
1014 
1015  /* From version 9.0, we update the max passengers of a town (was sometimes negative
1016  * before that. */
1018  for (Town *t : Town::Iterate()) UpdateTownMaxPass(t);
1019  }
1020 
1021  /* From version 16.0, we included autorenew on engines, which are now saved, but
1022  * of course, we do need to initialize them for older savegames. */
1024  for (Company *c : Company::Iterate()) {
1025  c->engine_renew_list = nullptr;
1026  c->settings.engine_renew = false;
1027  c->settings.engine_renew_months = 6;
1028  c->settings.engine_renew_money = 100000;
1029  }
1030 
1031  /* When loading a game, _local_company is not yet set to the correct value.
1032  * However, in a dedicated server we are a spectator, so nothing needs to
1033  * happen. In case we are not a dedicated server, the local company always
1034  * becomes the first available company, unless we are in the scenario editor
1035  * where all the companies are 'invalid'.
1036  */
1038  if (!_network_dedicated && c != nullptr) {
1040  }
1041  }
1042 
1044  for (auto t : Map::Iterate()) {
1045  switch (GetTileType(t)) {
1046  case MP_RAILWAY:
1047  if (IsPlainRail(t)) {
1048  /* Swap ground type and signal type for plain rail tiles, so the
1049  * ground type uses the same bits as for depots and waypoints. */
1050  uint tmp = GB(t.m4(), 0, 4);
1051  SB(t.m4(), 0, 4, GB(t.m2(), 0, 4));
1052  SB(t.m2(), 0, 4, tmp);
1053  } else if (HasBit(t.m5(), 2)) {
1054  /* Split waypoint and depot rail type and remove the subtype. */
1055  ClrBit(t.m5(), 2);
1056  ClrBit(t.m5(), 6);
1057  }
1058  break;
1059 
1060  case MP_ROAD:
1061  /* Swap m3 and m4, so the track type for rail crossings is the
1062  * same as for normal rail. */
1063  Swap(t.m3(), t.m4());
1064  break;
1065 
1066  default: break;
1067  }
1068  }
1069  }
1070 
1072  /* Added the RoadType */
1073  bool old_bridge = IsSavegameVersionBefore(SLV_42);
1074  for (auto t : Map::Iterate()) {
1075  switch (GetTileType(t)) {
1076  case MP_ROAD:
1077  SB(t.m5(), 6, 2, GB(t.m5(), 4, 2));
1078  switch (GetRoadTileType(t)) {
1079  default: SlErrorCorrupt("Invalid road tile type");
1080  case ROAD_TILE_NORMAL:
1081  SB(t.m4(), 0, 4, GB(t.m5(), 0, 4));
1082  SB(t.m4(), 4, 4, 0);
1083  SB(t.m6(), 2, 4, 0);
1084  break;
1085  case ROAD_TILE_CROSSING:
1086  SB(t.m4(), 5, 2, GB(t.m5(), 2, 2));
1087  break;
1088  case ROAD_TILE_DEPOT: break;
1089  }
1090  SB(t.m7(), 6, 2, 1); // Set pre-NRT road type bits for conversion later.
1091  break;
1092 
1093  case MP_STATION:
1094  if (IsStationRoadStop(t)) SB(t.m7(), 6, 2, 1);
1095  break;
1096 
1097  case MP_TUNNELBRIDGE:
1098  /* Middle part of "old" bridges */
1099  if (old_bridge && IsBridge(t) && HasBit(t.m5(), 6)) break;
1100  if (((old_bridge && IsBridge(t)) ? (TransportType)GB(t.m5(), 1, 2) : GetTunnelBridgeTransportType(t)) == TRANSPORT_ROAD) {
1101  SB(t.m7(), 6, 2, 1); // Set pre-NRT road type bits for conversion later.
1102  }
1103  break;
1104 
1105  default: break;
1106  }
1107  }
1108  }
1109 
1111  bool fix_roadtypes = !IsSavegameVersionBefore(SLV_61);
1112  bool old_bridge = IsSavegameVersionBefore(SLV_42);
1113 
1114  for (auto t : Map::Iterate()) {
1115  switch (GetTileType(t)) {
1116  case MP_ROAD:
1117  if (fix_roadtypes) SB(t.m7(), 6, 2, (RoadTypes)GB(t.m7(), 5, 3));
1118  SB(t.m7(), 5, 1, GB(t.m3(), 7, 1)); // snow/desert
1119  switch (GetRoadTileType(t)) {
1120  default: SlErrorCorrupt("Invalid road tile type");
1121  case ROAD_TILE_NORMAL:
1122  SB(t.m7(), 0, 4, GB(t.m3(), 0, 4)); // road works
1123  SB(t.m6(), 3, 3, GB(t.m3(), 4, 3)); // ground
1124  SB(t.m3(), 0, 4, GB(t.m4(), 4, 4)); // tram bits
1125  SB(t.m3(), 4, 4, GB(t.m5(), 0, 4)); // tram owner
1126  SB(t.m5(), 0, 4, GB(t.m4(), 0, 4)); // road bits
1127  break;
1128 
1129  case ROAD_TILE_CROSSING:
1130  SB(t.m7(), 0, 5, GB(t.m4(), 0, 5)); // road owner
1131  SB(t.m6(), 3, 3, GB(t.m3(), 4, 3)); // ground
1132  SB(t.m3(), 4, 4, GB(t.m5(), 0, 4)); // tram owner
1133  SB(t.m5(), 0, 1, GB(t.m4(), 6, 1)); // road axis
1134  SB(t.m5(), 5, 1, GB(t.m4(), 5, 1)); // crossing state
1135  break;
1136 
1137  case ROAD_TILE_DEPOT:
1138  break;
1139  }
1140  if (!IsRoadDepot(t) && !HasTownOwnedRoad(t)) {
1141  const Town *town = CalcClosestTownFromTile(t);
1142  if (town != nullptr) SetTownIndex(t, town->index);
1143  }
1144  t.m4() = 0;
1145  break;
1146 
1147  case MP_STATION:
1148  if (!IsStationRoadStop(t)) break;
1149 
1150  if (fix_roadtypes) SB(t.m7(), 6, 2, (RoadTypes)GB(t.m3(), 0, 3));
1151  SB(t.m7(), 0, 5, HasBit(t.m6(), 2) ? OWNER_TOWN : GetTileOwner(t));
1152  SB(t.m3(), 4, 4, t.m1());
1153  t.m4() = 0;
1154  break;
1155 
1156  case MP_TUNNELBRIDGE:
1157  if (old_bridge && IsBridge(t) && HasBit(t.m5(), 6)) break;
1158  if (((old_bridge && IsBridge(t)) ? (TransportType)GB(t.m5(), 1, 2) : GetTunnelBridgeTransportType(t)) == TRANSPORT_ROAD) {
1159  if (fix_roadtypes) SB(t.m7(), 6, 2, (RoadTypes)GB(t.m3(), 0, 3));
1160 
1161  Owner o = GetTileOwner(t);
1162  SB(t.m7(), 0, 5, o); // road owner
1163  SB(t.m3(), 4, 4, o == OWNER_NONE ? OWNER_TOWN : o); // tram owner
1164  }
1165  SB(t.m6(), 2, 4, GB(t.m2(), 4, 4)); // bridge type
1166  SB(t.m7(), 5, 1, GB(t.m4(), 7, 1)); // snow/desert
1167 
1168  t.m2() = 0;
1169  t.m4() = 0;
1170  break;
1171 
1172  default: break;
1173  }
1174  }
1175  }
1176 
1177  /* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */
1179  for (auto t : Map::Iterate()) {
1180  switch (GetTileType(t)) {
1181  case MP_RAILWAY:
1182  SetRailType(t, (RailType)GB(t.m3(), 0, 4));
1183  break;
1184 
1185  case MP_ROAD:
1186  if (IsLevelCrossing(t)) {
1187  SetRailType(t, (RailType)GB(t.m3(), 0, 4));
1188  }
1189  break;
1190 
1191  case MP_STATION:
1192  if (HasStationRail(t)) {
1193  SetRailType(t, (RailType)GB(t.m3(), 0, 4));
1194  }
1195  break;
1196 
1197  case MP_TUNNELBRIDGE:
1199  SetRailType(t, (RailType)GB(t.m3(), 0, 4));
1200  }
1201  break;
1202 
1203  default:
1204  break;
1205  }
1206  }
1207  }
1208 
1210  for (auto t : Map::Iterate()) {
1212  if (IsBridgeTile(t)) {
1213  if (HasBit(t.m5(), 6)) { // middle part
1214  Axis axis = (Axis)GB(t.m5(), 0, 1);
1215 
1216  if (HasBit(t.m5(), 5)) { // transport route under bridge?
1217  if (GB(t.m5(), 3, 2) == TRANSPORT_RAIL) {
1218  MakeRailNormal(
1219  t,
1220  GetTileOwner(t),
1221  axis == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X,
1222  GetRailType(t)
1223  );
1224  } else {
1225  TownID town = IsTileOwner(t, OWNER_TOWN) ? ClosestTownFromTile(t, UINT_MAX)->index : 0;
1226 
1227  /* MakeRoadNormal */
1228  SetTileType(t, MP_ROAD);
1229  t.m2() = town;
1230  t.m3() = 0;
1231  t.m5() = (axis == AXIS_X ? ROAD_Y : ROAD_X) | ROAD_TILE_NORMAL << 6;
1232  SB(t.m6(), 2, 4, 0);
1233  t.m7() = 1 << 6;
1234  SetRoadOwner(t, RTT_TRAM, OWNER_NONE);
1235  }
1236  } else {
1237  if (GB(t.m5(), 3, 2) == 0) {
1238  MakeClear(t, CLEAR_GRASS, 3);
1239  } else {
1240  if (!IsTileFlat(t)) {
1241  MakeShore(t);
1242  } else {
1243  if (GetTileOwner(t) == OWNER_WATER) {
1244  MakeSea(t);
1245  } else {
1246  MakeCanal(t, GetTileOwner(t), Random());
1247  }
1248  }
1249  }
1250  }
1251  SetBridgeMiddle(t, axis);
1252  } else { // ramp
1253  Axis axis = (Axis)GB(t.m5(), 0, 1);
1254  uint north_south = GB(t.m5(), 5, 1);
1255  DiagDirection dir = ReverseDiagDir(XYNSToDiagDir(axis, north_south));
1256  TransportType type = (TransportType)GB(t.m5(), 1, 2);
1257 
1258  t.m5() = 1 << 7 | type << 2 | dir;
1259  }
1260  }
1261  }
1262 
1263  for (Vehicle *v : Vehicle::Iterate()) {
1264  if (!v->IsGroundVehicle()) continue;
1265  if (IsBridgeTile(v->tile)) {
1266  DiagDirection dir = GetTunnelBridgeDirection(v->tile);
1267 
1268  if (dir != DirToDiagDir(v->direction)) continue;
1269  switch (dir) {
1270  default: SlErrorCorrupt("Invalid vehicle direction");
1271  case DIAGDIR_NE: if ((v->x_pos & 0xF) != 0) continue; break;
1272  case DIAGDIR_SE: if ((v->y_pos & 0xF) != TILE_SIZE - 1) continue; break;
1273  case DIAGDIR_SW: if ((v->x_pos & 0xF) != TILE_SIZE - 1) continue; break;
1274  case DIAGDIR_NW: if ((v->y_pos & 0xF) != 0) continue; break;
1275  }
1276  } else if (v->z_pos > GetTileMaxPixelZ(TileVirtXY(v->x_pos, v->y_pos))) {
1277  v->tile = GetNorthernBridgeEnd(v->tile);
1278  v->UpdatePosition();
1279  } else {
1280  continue;
1281  }
1282  if (v->type == VEH_TRAIN) {
1283  Train::From(v)->track = TRACK_BIT_WORMHOLE;
1284  } else {
1286  }
1287  }
1288  }
1289 
1291  /* Add road subtypes */
1292  for (auto t : Map::Iterate()) {
1293  bool has_road = false;
1294  switch (GetTileType(t)) {
1295  case MP_ROAD:
1296  has_road = true;
1297  break;
1298  case MP_STATION:
1299  has_road = IsAnyRoadStop(t);
1300  break;
1301  case MP_TUNNELBRIDGE:
1303  break;
1304  default:
1305  break;
1306  }
1307 
1308  if (has_road) {
1309  RoadType road_rt = HasBit(t.m7(), 6) ? ROADTYPE_ROAD : INVALID_ROADTYPE;
1310  RoadType tram_rt = HasBit(t.m7(), 7) ? ROADTYPE_TRAM : INVALID_ROADTYPE;
1311 
1312  assert(road_rt != INVALID_ROADTYPE || tram_rt != INVALID_ROADTYPE);
1313  SetRoadTypes(t, road_rt, tram_rt);
1314  SB(t.m7(), 6, 2, 0); // Clear pre-NRT road type bits.
1315  }
1316  }
1317  }
1318 
1319  /* Elrails got added in rev 24 */
1321  RailType min_rail = RAILTYPE_ELECTRIC;
1322 
1323  for (Train *v : Train::Iterate()) {
1324  RailType rt = RailVehInfo(v->engine_type)->railtype;
1325 
1326  v->railtype = rt;
1327  if (rt == RAILTYPE_ELECTRIC) min_rail = RAILTYPE_RAIL;
1328  }
1329 
1330  /* .. so we convert the entire map from normal to elrail (so maintain "fairness") */
1331  for (auto t : Map::Iterate()) {
1332  switch (GetTileType(t)) {
1333  case MP_RAILWAY:
1334  SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
1335  break;
1336 
1337  case MP_ROAD:
1338  if (IsLevelCrossing(t)) {
1339  SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
1340  }
1341  break;
1342 
1343  case MP_STATION:
1344  if (HasStationRail(t)) {
1345  SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
1346  }
1347  break;
1348 
1349  case MP_TUNNELBRIDGE:
1351  SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
1352  }
1353  break;
1354 
1355  default:
1356  break;
1357  }
1358  }
1359 
1360  for (Train *v : Train::Iterate()) {
1361  if (v->IsFrontEngine() || v->IsFreeWagon()) v->ConsistChanged(CCF_TRACK);
1362  }
1363 
1364  }
1365 
1366  /* In version 16.1 of the savegame a company can decide if trains, which get
1367  * replaced, shall keep their old length. In all prior versions, just default
1368  * to false */
1369  if (IsSavegameVersionBefore(SLV_16, 1)) {
1370  for (Company *c : Company::Iterate()) c->settings.renew_keep_length = false;
1371  }
1372 
1374  /* Waypoints became subclasses of stations ... */
1376  /* ... and buoys were moved to waypoints. */
1378  }
1379 
1380  /* From version 15, we moved a semaphore bit from bit 2 to bit 3 in m4, making
1381  * room for PBS. Now in version 21 move it back :P. */
1383  for (auto t : Map::Iterate()) {
1384  switch (GetTileType(t)) {
1385  case MP_RAILWAY:
1386  if (HasSignals(t)) {
1387  /* Original signal type/variant was stored in m4 but since saveload
1388  * version 48 they are in m2. The bits has been already moved to m2
1389  * (see the code somewhere above) so don't use m4, use m2 instead. */
1390 
1391  /* convert PBS signals to combo-signals */
1392  if (HasBit(t.m2(), 2)) SB(t.m2(), 0, 2, SIGTYPE_COMBO);
1393 
1394  /* move the signal variant back */
1395  SB(t.m2(), 2, 1, HasBit(t.m2(), 3) ? SIG_SEMAPHORE : SIG_ELECTRIC);
1396  ClrBit(t.m2(), 3);
1397  }
1398 
1399  /* Clear PBS reservation on track */
1400  if (!IsRailDepotTile(t)) {
1401  SB(t.m4(), 4, 4, 0);
1402  } else {
1403  ClrBit(t.m3(), 6);
1404  }
1405  break;
1406 
1407  case MP_STATION: // Clear PBS reservation on station
1408  ClrBit(t.m3(), 6);
1409  break;
1410 
1411  default: break;
1412  }
1413  }
1414  }
1415 
1417  for (RoadVehicle *rv : RoadVehicle::Iterate()) {
1418  rv->vehstatus &= ~0x40;
1419  }
1420  }
1421 
1423  for (Station *st : Station::Iterate()) {
1424  st->last_vehicle_type = VEH_INVALID;
1425  }
1426  }
1427 
1429 
1432  }
1433 
1434  for (Company *c : Company::Iterate()) {
1435  c->avail_railtypes = GetCompanyRailTypes(c->index);
1436  c->avail_roadtypes = GetCompanyRoadTypes(c->index);
1437  }
1438 
1439  AfterLoadStations();
1440 
1441  /* Time starts at 0 instead of 1920.
1442  * Account for this in older games by adding an offset */
1448 
1452  for (Company *c : Company::Iterate()) c->inaugurated_year += EconomyTime::ORIGINAL_BASE_YEAR;
1453  for (Industry *i : Industry::Iterate()) i->last_prod_year += EconomyTime::ORIGINAL_BASE_YEAR;
1454 
1455  for (Vehicle *v : Vehicle::Iterate()) {
1456  v->date_of_last_service += EconomyTime::DAYS_TILL_ORIGINAL_BASE_YEAR;
1457  v->build_year += CalendarTime::ORIGINAL_BASE_YEAR;
1458  }
1459  }
1460 
1461  /* From 32 on we save the industry who made the farmland.
1462  * To give this prettiness to old savegames, we remove all farmfields and
1463  * plant new ones. */
1465  for (auto t : Map::Iterate()) {
1466  if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) {
1467  /* remove fields */
1468  MakeClear(t, CLEAR_GRASS, 3);
1469  }
1470  }
1471 
1472  for (Industry *i : Industry::Iterate()) {
1473  uint j;
1474 
1476  for (j = 0; j != 50; j++) PlantRandomFarmField(i);
1477  }
1478  }
1479  }
1480 
1481  /* Setting no refit flags to all orders in savegames from before refit in orders were added */
1483  for (Order *order : Order::Iterate()) {
1484  order->SetRefit(CARGO_NO_REFIT);
1485  }
1486 
1487  for (Vehicle *v : Vehicle::Iterate()) {
1488  v->current_order.SetRefit(CARGO_NO_REFIT);
1489  }
1490  }
1491 
1492  /* from version 38 we have optional elrails, since we cannot know the
1493  * preference of a user, let elrails enabled; it can be disabled manually */
1495  /* do the same as when elrails were enabled/disabled manually just now */
1498 
1499  /* From version 53, the map array was changed for house tiles to allow
1500  * space for newhouses grf features. A new byte, m7, was also added. */
1502  for (auto t : Map::Iterate()) {
1503  if (IsTileType(t, MP_HOUSE)) {
1504  if (GB(t.m3(), 6, 2) != TOWN_HOUSE_COMPLETED) {
1505  /* Move the construction stage from m3[7..6] to m5[5..4].
1506  * The construction counter does not have to move. */
1507  SB(t.m5(), 3, 2, GB(t.m3(), 6, 2));
1508  SB(t.m3(), 6, 2, 0);
1509 
1510  /* The "house is completed" bit is now in m6[2]. */
1511  SetHouseCompleted(t, false);
1512  } else {
1513  /* The "lift has destination" bit has been moved from
1514  * m5[7] to m7[0]. */
1515  AssignBit(t.m7(), 0, HasBit(t.m5(), 7));
1516  ClrBit(t.m5(), 7);
1517 
1518  /* The "lift is moving" bit has been removed, as it does
1519  * the same job as the "lift has destination" bit. */
1520  ClrBit(t.m1(), 7);
1521 
1522  /* The position of the lift goes from m1[7..0] to m6[7..2],
1523  * making m1 totally free, now. The lift position does not
1524  * have to be a full byte since the maximum value is 36. */
1525  SetLiftPosition(t, GB(t.m1(), 0, 6 ));
1526 
1527  t.m1() = 0;
1528  t.m3() = 0;
1529  SetHouseCompleted(t, true);
1530  }
1531  }
1532  }
1533  }
1534 
1535  /* Check and update house and town values */
1537 
1539  for (auto t : Map::Iterate()) {
1540  if (IsTileType(t, MP_INDUSTRY)) {
1541  switch (GetIndustryGfx(t)) {
1542  case GFX_POWERPLANT_SPARKS:
1543  t.m3() = GB(t.m1(), 2, 5);
1544  break;
1545 
1546  case GFX_OILWELL_ANIMATED_1:
1547  case GFX_OILWELL_ANIMATED_2:
1548  case GFX_OILWELL_ANIMATED_3:
1549  t.m3() = GB(t.m1(), 0, 2);
1550  break;
1551 
1552  case GFX_COAL_MINE_TOWER_ANIMATED:
1553  case GFX_COPPER_MINE_TOWER_ANIMATED:
1554  case GFX_GOLD_MINE_TOWER_ANIMATED:
1555  t.m3() = t.m1();
1556  break;
1557 
1558  default: // No animation states to change
1559  break;
1560  }
1561  }
1562  }
1563  }
1564 
1566  /* Originally just the fact that some cargo had been paid for was
1567  * stored to stop people cheating and cashing in several times. This
1568  * wasn't enough though as it was cleared when the vehicle started
1569  * loading again, even if it didn't actually load anything, so now the
1570  * amount that has been paid is stored. */
1571  for (Vehicle *v : Vehicle::Iterate()) {
1572  ClrBit(v->vehicle_flags, 2);
1573  }
1574  }
1575 
1576  /* Buoys do now store the owner of the previous water tile, which can never
1577  * be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */
1579  for (Waypoint *wp : Waypoint::Iterate()) {
1580  if ((wp->facilities & FACIL_DOCK) != 0 && IsTileOwner(wp->xy, OWNER_NONE) && TileHeight(wp->xy) == 0) SetTileOwner(wp->xy, OWNER_WATER);
1581  }
1582  }
1583 
1585  /* Aircraft units changed from 8 mph to 1 km-ish/h */
1586  for (Aircraft *v : Aircraft::Iterate()) {
1587  if (v->subtype <= AIR_AIRCRAFT) {
1588  const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type);
1589  v->cur_speed *= 128;
1590  v->cur_speed /= 10;
1591  v->acceleration = avi->acceleration;
1592  }
1593  }
1594  }
1595 
1597 
1599  for (auto t : Map::Iterate()) {
1600  if (IsTileType(t, MP_OBJECT) && t.m5() == OBJECT_STATUE) {
1601  t.m2() = CalcClosestTownFromTile(t)->index;
1602  }
1603  }
1604  }
1605 
1606  /* A setting containing the proportion of towns that grow twice as
1607  * fast was added in version 54. From version 56 this is now saved in the
1608  * town as cities can be built specifically in the scenario editor. */
1610  for (Town *t : Town::Iterate()) {
1611  if (_settings_game.economy.larger_towns != 0 && (t->index % _settings_game.economy.larger_towns) == 0) {
1612  t->larger_town = true;
1613  }
1614  }
1615  }
1616 
1618  /* Added a FIFO queue of vehicles loading at stations */
1619  for (Vehicle *v : Vehicle::Iterate()) {
1620  if ((v->type != VEH_TRAIN || Train::From(v)->IsFrontEngine()) && // for all locs
1621  !(v->vehstatus & (VS_STOPPED | VS_CRASHED)) && // not stopped or crashed
1622  v->current_order.IsType(OT_LOADING)) { // loading
1623  Station::Get(v->last_station_visited)->loading_vehicles.push_back(v);
1624 
1625  /* The loading finished flag is *only* set when actually completely
1626  * finished. Because the vehicle is loading, it is not finished. */
1627  ClrBit(v->vehicle_flags, VF_LOADING_FINISHED);
1628  }
1629  }
1630  } else if (IsSavegameVersionBefore(SLV_59)) {
1631  /* For some reason non-loading vehicles could be in the station's loading vehicle list */
1632 
1633  for (Station *st : Station::Iterate()) {
1634  for (auto iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); /* nothing */) {
1635  Vehicle *v = *iter;
1636  if (!v->current_order.IsType(OT_LOADING)) {
1637  iter = st->loading_vehicles.erase(iter);
1638  } else {
1639  ++iter;
1640  }
1641  }
1642  }
1643  }
1644 
1646  /* Setting difficulty industry_density other than zero get bumped to +1
1647  * since a new option (very low at position 1) has been added */
1650  }
1651 
1652  /* Same goes for number of towns, although no test is needed, just an increment */
1654  }
1655 
1657  /* Since now we allow different signal types and variants on a single tile.
1658  * Move signal states to m4 to make room and clone the signal type/variant. */
1659  for (auto t : Map::Iterate()) {
1660  if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
1661  /* move signal states */
1662  SetSignalStates(t, GB(t.m2(), 4, 4));
1663  SB(t.m2(), 4, 4, 0);
1664  /* clone signal type and variant */
1665  SB(t.m2(), 4, 3, GB(t.m2(), 0, 3));
1666  }
1667  }
1668  }
1669 
1671  /* In some old savegames a bit was cleared when it should not be cleared */
1672  for (RoadVehicle *rv : RoadVehicle::Iterate()) {
1673  if (rv->state == 250 || rv->state == 251) {
1674  SetBit(rv->state, 2);
1675  }
1676  }
1677  }
1678 
1680  /* Added variables to support newindustries */
1681  for (Industry *i : Industry::Iterate()) i->founder = OWNER_NONE;
1682  }
1683 
1684  /* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported.
1685  Replace the owner for those by OWNER_NONE. */
1687  for (auto t : Map::Iterate()) {
1688  if (IsTileType(t, MP_WATER) &&
1690  GetTileOwner(t) == OWNER_WATER &&
1691  TileHeight(t) != 0) {
1693  }
1694  }
1695  }
1696 
1697  /*
1698  * Add the 'previous' owner to the ship depots so we can reset it with
1699  * the correct values when it gets destroyed. This prevents that
1700  * someone can remove canals owned by somebody else and it prevents
1701  * making floods using the removal of ship depots.
1702  */
1704  for (auto t : Map::Iterate()) {
1705  if (IsShipDepotTile(t)) {
1706  t.m4() = (TileHeight(t) == 0) ? OWNER_WATER : OWNER_NONE;
1707  }
1708  }
1709  }
1710 
1712  for (Station *st : Station::Iterate()) {
1713  for (GoodsEntry &ge : st->goods) {
1714  ge.last_speed = 0;
1716  }
1717  }
1718  }
1719 
1720  /* At version 78, industry cargo types can be changed, and are stored with the industry. For older save versions
1721  * copy the IndustrySpec's cargo types over to the Industry. */
1723  for (Industry *i : Industry::Iterate()) {
1724  const IndustrySpec *indsp = GetIndustrySpec(i->type);
1725  for (uint j = 0; j < std::size(i->produced); j++) {
1726  i->produced[j].cargo = indsp->produced_cargo[j];
1727  }
1728  for (uint j = 0; j < std::size(i->accepted); j++) {
1729  i->accepted[j].cargo = indsp->accepts_cargo[j];
1730  }
1731  }
1732  }
1733 
1734  /* Industry cargo slots were fixed size before (and including) SLV_VEHICLE_ECONOMY_AGE (either 2/3 or 16/16),
1735  * after this they are dynamic. Trim excess slots. */
1737  for (Industry *i : Industry::Iterate()) {
1739  }
1740  }
1741 
1742  /* Before version 81, the density of grass was always stored as zero, and
1743  * grassy trees were always drawn fully grassy. Furthermore, trees on rough
1744  * land used to have zero density, now they have full density. Therefore,
1745  * make all grassy/rough land trees have a density of 3. */
1747  for (auto t : Map::Iterate()) {
1748  if (GetTileType(t) == MP_TREES) {
1749  TreeGround groundType = (TreeGround)GB(t.m2(), 4, 2);
1750  if (groundType != TREE_GROUND_SNOW_DESERT) SB(t.m2(), 6, 2, 3);
1751  }
1752  }
1753  }
1754 
1755 
1757  /* Rework of orders. */
1758  for (Order *order : Order::Iterate()) order->ConvertFromOldSavegame();
1759 
1760  for (Vehicle *v : Vehicle::Iterate()) {
1761  if (v->orders != nullptr && v->orders->GetFirstOrder() != nullptr && v->orders->GetFirstOrder()->IsType(OT_NOTHING)) {
1762  v->orders->FreeChain();
1763  v->orders = nullptr;
1764  }
1765 
1766  v->current_order.ConvertFromOldSavegame();
1767  if (v->type == VEH_ROAD && v->IsPrimaryVehicle() && v->FirstShared() == v) {
1768  for (Order *order : v->Orders()) order->SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
1769  }
1770  }
1771  } else if (IsSavegameVersionBefore(SLV_94)) {
1772  /* Unload and transfer are now mutual exclusive. */
1773  for (Order *order : Order::Iterate()) {
1774  if ((order->GetUnloadType() & (OUFB_UNLOAD | OUFB_TRANSFER)) == (OUFB_UNLOAD | OUFB_TRANSFER)) {
1775  order->SetUnloadType(OUFB_TRANSFER);
1776  order->SetLoadType(OLFB_NO_LOAD);
1777  }
1778  }
1779 
1780  for (Vehicle *v : Vehicle::Iterate()) {
1781  if ((v->current_order.GetUnloadType() & (OUFB_UNLOAD | OUFB_TRANSFER)) == (OUFB_UNLOAD | OUFB_TRANSFER)) {
1782  v->current_order.SetUnloadType(OUFB_TRANSFER);
1783  v->current_order.SetLoadType(OLFB_NO_LOAD);
1784  }
1785  }
1787  /* OrderDepotActionFlags were moved, instead of starting at bit 4 they now start at bit 3. */
1788  for (Order *order : Order::Iterate()) {
1789  if (!order->IsType(OT_GOTO_DEPOT)) continue;
1790  order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() >> 1));
1791  }
1792 
1793  for (Vehicle *v : Vehicle::Iterate()) {
1794  if (!v->current_order.IsType(OT_GOTO_DEPOT)) continue;
1795  v->current_order.SetDepotActionType((OrderDepotActionFlags)(v->current_order.GetDepotActionType() >> 1));
1796  }
1797  }
1798 
1799  /* The water class was moved/unified. */
1801  for (auto t : Map::Iterate()) {
1802  switch (GetTileType(t)) {
1803  case MP_STATION:
1804  switch (GetStationType(t)) {
1805  case STATION_OILRIG:
1806  case STATION_DOCK:
1807  case STATION_BUOY:
1808  SetWaterClass(t, (WaterClass)GB(t.m3(), 0, 2));
1809  SB(t.m3(), 0, 2, 0);
1810  break;
1811 
1812  default:
1814  break;
1815  }
1816  break;
1817 
1818  case MP_WATER:
1819  SetWaterClass(t, (WaterClass)GB(t.m3(), 0, 2));
1820  SB(t.m3(), 0, 2, 0);
1821  break;
1822 
1823  case MP_OBJECT:
1825  break;
1826 
1827  default:
1828  /* No water class. */
1829  break;
1830  }
1831  }
1832  }
1833 
1835  for (auto t : Map::Iterate()) {
1836  /* Move river flag and update canals to use water class */
1837  if (IsTileType(t, MP_WATER)) {
1838  if (GetWaterClass(t) != WATER_CLASS_RIVER) {
1839  if (IsWater(t)) {
1840  Owner o = GetTileOwner(t);
1841  if (o == OWNER_WATER) {
1842  MakeSea(t);
1843  } else {
1844  MakeCanal(t, o, Random());
1845  }
1846  } else if (IsShipDepot(t)) {
1847  Owner o = (Owner)t.m4(); // Original water owner
1849  }
1850  }
1851  }
1852  }
1853 
1854  /* Update locks, depots, docks and buoys to have a water class based
1855  * on its neighbouring tiles. Done after river and canal updates to
1856  * ensure neighbours are correct. */
1857  for (auto t : Map::Iterate()) {
1858  if (!IsTileFlat(t)) continue;
1859 
1861  if (IsTileType(t, MP_STATION) && (IsDock(t) || IsBuoy(t))) SetWaterClassDependingOnSurroundings(t, false);
1862  }
1863  }
1864 
1866  for (auto t : Map::Iterate()) {
1867  /* skip oil rigs at borders! */
1868  if ((IsTileType(t, MP_WATER) || IsBuoyTile(t)) &&
1869  (TileX(t) == 0 || TileY(t) == 0 || TileX(t) == Map::MaxX() - 1 || TileY(t) == Map::MaxY() - 1)) {
1870  /* Some version 86 savegames have wrong water class at map borders (under buoy, or after removing buoy).
1871  * This conversion has to be done before buoys with invalid owner are removed. */
1873  }
1874 
1875  if (IsBuoyTile(t) || IsDriveThroughStopTile(t) || IsTileType(t, MP_WATER)) {
1876  Owner o = GetTileOwner(t);
1877  if (o < MAX_COMPANIES && !Company::IsValidID(o)) {
1878  Backup<CompanyID> cur_company(_current_company, o);
1880  cur_company.Restore();
1881  }
1882  if (IsBuoyTile(t)) {
1883  /* reset buoy owner to OWNER_NONE in the station struct
1884  * (even if it is owned by active company) */
1886  }
1887  } else if (IsTileType(t, MP_ROAD)) {
1888  /* works for all RoadTileType */
1889  for (RoadTramType rtt : _roadtramtypes) {
1890  /* update even non-existing road types to update tile owner too */
1891  Owner o = GetRoadOwner(t, rtt);
1892  if (o < MAX_COMPANIES && !Company::IsValidID(o)) SetRoadOwner(t, rtt, OWNER_NONE);
1893  }
1894  if (IsLevelCrossing(t)) {
1896  }
1897  } else if (IsPlainRailTile(t)) {
1899  }
1900  }
1901  }
1902 
1904  /* Profits are now with 8 bit fract */
1905  for (Vehicle *v : Vehicle::Iterate()) {
1906  v->profit_this_year <<= 8;
1907  v->profit_last_year <<= 8;
1908  v->running_ticks = 0;
1909  }
1910  }
1911 
1913  /* Increase HouseAnimationFrame from 5 to 7 bits */
1914  for (auto t : Map::Iterate()) {
1915  if (IsTileType(t, MP_HOUSE) && GetHouseType(t) >= NEW_HOUSE_OFFSET) {
1916  SB(t.m6(), 2, 6, GB(t.m6(), 3, 5));
1917  SB(t.m3(), 5, 1, 0);
1918  }
1919  }
1920  }
1921 
1923  GroupStatistics::UpdateAfterLoad(); // Ensure statistics pool is initialised before trying to delete vehicles
1924  /* Remove all trams from savegames without tram support.
1925  * There would be trams without tram track under causing crashes sooner or later. */
1926  for (RoadVehicle *v : RoadVehicle::Iterate()) {
1927  if (v->First() == v && HasBit(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM)) {
1928  ShowErrorMessage(STR_WARNING_LOADGAME_REMOVED_TRAMS, INVALID_STRING_ID, WL_CRITICAL);
1929  delete v;
1930  }
1931  }
1932  }
1933 
1935  for (auto t : Map::Iterate()) {
1936  /* Set newly introduced WaterClass of industry tiles */
1937  if (IsTileType(t, MP_STATION) && IsOilRig(t)) {
1939  }
1940  if (IsTileType(t, MP_INDUSTRY)) {
1941  if ((GetIndustrySpec(GetIndustryType(t))->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0) {
1943  } else {
1945  }
1946  }
1947 
1948  /* Replace "house construction year" with "house age" */
1949  if (IsTileType(t, MP_HOUSE) && IsHouseCompleted(t)) {
1950  t.m5() = ClampTo<uint8_t>(TimerGameCalendar::year - (t.m5() + CalendarTime::ORIGINAL_BASE_YEAR));
1951  }
1952  }
1953  }
1954 
1955  /* Move the signal variant back up one bit for PBS. We don't convert the old PBS
1956  * format here, as an old layout wouldn't work properly anyway. To be safe, we
1957  * clear any possible PBS reservations as well. */
1959  for (auto t : Map::Iterate()) {
1960  switch (GetTileType(t)) {
1961  case MP_RAILWAY:
1962  if (HasSignals(t)) {
1963  /* move the signal variant */
1964  SetSignalVariant(t, TRACK_UPPER, HasBit(t.m2(), 2) ? SIG_SEMAPHORE : SIG_ELECTRIC);
1965  SetSignalVariant(t, TRACK_LOWER, HasBit(t.m2(), 6) ? SIG_SEMAPHORE : SIG_ELECTRIC);
1966  ClrBit(t.m2(), 2);
1967  ClrBit(t.m2(), 6);
1968  }
1969 
1970  /* Clear PBS reservation on track */
1971  if (IsRailDepot(t)) {
1972  SetDepotReservation(t, false);
1973  } else {
1975  }
1976  break;
1977 
1978  case MP_ROAD: // Clear PBS reservation on crossing
1979  if (IsLevelCrossing(t)) SetCrossingReservation(t, false);
1980  break;
1981 
1982  case MP_STATION: // Clear PBS reservation on station
1983  if (HasStationRail(t)) SetRailStationReservation(t, false);
1984  break;
1985 
1986  case MP_TUNNELBRIDGE: // Clear PBS reservation on tunnels/bridges
1988  break;
1989 
1990  default: break;
1991  }
1992  }
1993  }
1994 
1995  /* Reserve all tracks trains are currently on. */
1997  for (const Train *t : Train::Iterate()) {
1998  if (t->First() == t) t->ReserveTrackUnderConsist();
1999  }
2000  }
2001 
2003  /* Non-town-owned roads now store the closest town */
2005 
2006  /* signs with invalid owner left from older savegames */
2007  for (Sign *si : Sign::Iterate()) {
2008  if (si->owner != OWNER_NONE && !Company::IsValidID(si->owner)) si->owner = OWNER_NONE;
2009  }
2010 
2011  /* Station can get named based on an industry type, but the current ones
2012  * are not, so mark them as if they are not named by an industry. */
2013  for (Station *st : Station::Iterate()) {
2014  st->indtype = IT_INVALID;
2015  }
2016  }
2017 
2019  for (Aircraft *a : Aircraft::Iterate()) {
2020  /* Set engine_type of shadow and rotor */
2021  if (!a->IsNormalAircraft()) {
2022  a->engine_type = a->First()->engine_type;
2023  }
2024  }
2025 
2026  /* More companies ... */
2027  for (Company *c : Company::Iterate()) {
2028  if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = MAX_UVALUE(CompanyMask);
2029  }
2030 
2031  for (Engine *e : Engine::Iterate()) {
2032  if (e->company_avail == 0xFF) e->company_avail = MAX_UVALUE(CompanyMask);
2033  }
2034 
2035  for (Town *t : Town::Iterate()) {
2036  if (t->have_ratings == 0xFF) t->have_ratings = MAX_UVALUE(CompanyMask);
2037  for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL;
2038  }
2039  }
2040 
2042  for (auto t : Map::Iterate()) {
2043  /* Check for HQ bit being set, instead of using map accessor,
2044  * since we've already changed it code-wise */
2045  if (IsTileType(t, MP_OBJECT) && HasBit(t.m5(), 7)) {
2046  /* Move size and part identification of HQ out of the m5 attribute,
2047  * on new locations */
2048  t.m3() = GB(t.m5(), 0, 5);
2049  t.m5() = OBJECT_HQ;
2050  }
2051  }
2052  }
2054  for (auto t : Map::Iterate()) {
2055  if (!IsTileType(t, MP_OBJECT)) continue;
2056 
2057  /* Reordering/generalisation of the object bits. */
2058  ObjectType type = t.m5();
2059  SB(t.m6(), 2, 4, type == OBJECT_HQ ? GB(t.m3(), 2, 3) : 0);
2060  t.m3() = type == OBJECT_HQ ? GB(t.m3(), 1, 1) | GB(t.m3(), 0, 1) << 4 : 0;
2061 
2062  /* Make sure those bits are clear as well! */
2063  t.m4() = 0;
2064  t.m7() = 0;
2065  }
2066  }
2067 
2069  /* Make real objects for object tiles. */
2070  for (auto t : Map::Iterate()) {
2071  if (!IsTileType(t, MP_OBJECT)) continue;
2072 
2073  if (Town::GetNumItems() == 0) {
2074  /* No towns, so remove all objects! */
2075  DoClearSquare(t);
2076  } else {
2077  uint offset = t.m3();
2078 
2079  /* Also move the animation state. */
2080  t.m3() = GB(t.m6(), 2, 4);
2081  SB(t.m6(), 2, 4, 0);
2082 
2083  if (offset == 0) {
2084  /* No offset, so make the object. */
2085  ObjectType type = t.m5();
2086  int size = type == OBJECT_HQ ? 2 : 1;
2087 
2088  if (!Object::CanAllocateItem()) {
2089  /* Nice... you managed to place 64k lighthouses and
2090  * antennae on the map... boohoo. */
2091  SlError(STR_ERROR_TOO_MANY_OBJECTS);
2092  }
2093 
2094  Object *o = new Object();
2095  o->location.tile = (TileIndex)t;
2096  o->location.w = size;
2097  o->location.h = size;
2099  o->town = type == OBJECT_STATUE ? Town::Get(t.m2()) : CalcClosestTownFromTile(t, UINT_MAX);
2100  t.m2() = o->index;
2101  Object::IncTypeCount(type);
2102  } else {
2103  /* We're at an offset, so get the ID from our "root". */
2104  Tile northern_tile = t - TileXY(GB(offset, 0, 4), GB(offset, 4, 4));
2105  assert(IsTileType(northern_tile, MP_OBJECT));
2106  t.m2() = northern_tile.m2();
2107  }
2108  }
2109  }
2110  }
2111 
2113  /* allow_town_roads is added, set it if town_layout wasn't TL_NO_ROADS */
2114  if (_settings_game.economy.town_layout == 0) { // was TL_NO_ROADS
2117  } else {
2120  }
2121 
2122  /* Initialize layout of all towns. Older versions were using different
2123  * generator for random town layout, use it if needed. */
2124  for (Town *t : Town::Iterate()) {
2126  t->layout = _settings_game.economy.town_layout;
2127  continue;
2128  }
2129 
2130  /* Use old layout randomizer code */
2131  uint8_t layout = TileHash(TileX(t->xy), TileY(t->xy)) % 6;
2132  switch (layout) {
2133  default: break;
2134  case 5: layout = 1; break;
2135  case 0: layout = 2; break;
2136  }
2137  t->layout = static_cast<TownLayout>(layout - 1);
2138  }
2139  }
2140 
2142  /* There could be (deleted) stations with invalid owner, set owner to OWNER NONE.
2143  * The conversion affects oil rigs and buoys too, but it doesn't matter as
2144  * they have st->owner == OWNER_NONE already. */
2145  for (Station *st : Station::Iterate()) {
2146  if (!Company::IsValidID(st->owner)) st->owner = OWNER_NONE;
2147  }
2148  }
2149 
2150  /* Trains could now stop in a specific location. */
2152  for (Order *o : Order::Iterate()) {
2153  if (o->IsType(OT_GOTO_STATION)) o->SetStopLocation(OSL_PLATFORM_FAR_END);
2154  }
2155  }
2156 
2159  for (Company *c : Company::Iterate()) {
2160  c->settings.vehicle = _old_vds;
2161  }
2162  }
2163 
2165  /* Delete small ufos heading for non-existing vehicles */
2167  if (v->subtype == 2 /* ST_SMALL_UFO */ && v->state != 0) {
2168  const Vehicle *u = Vehicle::GetIfValid(v->dest_tile.base());
2169  if (u == nullptr || u->type != VEH_ROAD || !RoadVehicle::From(u)->IsFrontEngine()) {
2170  delete v;
2171  }
2172  }
2173  }
2174 
2175  /* We didn't store cargo payment yet, so make them for vehicles that are
2176  * currently at a station and loading/unloading. If they don't get any
2177  * payment anymore they just removed in the next load/unload cycle.
2178  * However, some 0.7 versions might have cargo payment. For those we just
2179  * add cargopayment for the vehicles that don't have it.
2180  */
2181  for (Station *st : Station::Iterate()) {
2182  for (Vehicle *v : st->loading_vehicles) {
2183  /* There are always as many CargoPayments as Vehicles. We need to make the
2184  * assert() in Pool::GetNew() happy by calling CanAllocateItem(). */
2187  if (v->cargo_payment == nullptr) v->cargo_payment = new CargoPayment(v);
2188  }
2189  }
2190  }
2191 
2193  /* Animated tiles would sometimes not be actually animated or
2194  * in case of old savegames duplicate. */
2195 
2196  extern std::vector<TileIndex> _animated_tiles;
2197 
2198  for (auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); /* Nothing */) {
2199  /* Remove if tile is not animated */
2200  bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == nullptr;
2201 
2202  /* and remove if duplicate */
2203  for (auto j = _animated_tiles.begin(); !remove && j < tile; j++) {
2204  remove = *tile == *j;
2205  }
2206 
2207  if (remove) {
2208  tile = _animated_tiles.erase(tile);
2209  } else {
2210  tile++;
2211  }
2212  }
2213  }
2214 
2216  /* The train station tile area was added, but for really old (TTDPatch) it's already valid. */
2217  for (Waypoint *wp : Waypoint::Iterate()) {
2218  if (wp->facilities & FACIL_TRAIN) {
2219  wp->train_station.tile = wp->xy;
2220  wp->train_station.w = 1;
2221  wp->train_station.h = 1;
2222  } else {
2223  wp->train_station.tile = INVALID_TILE;
2224  wp->train_station.w = 0;
2225  wp->train_station.h = 0;
2226  }
2227  }
2228  }
2229 
2231  /* Convert old subsidies */
2232  for (Subsidy *s : Subsidy::Iterate()) {
2233  if (s->remaining < 12) {
2234  /* Converting nonawarded subsidy */
2235  s->remaining = 12 - s->remaining; // convert "age" to "remaining"
2236  s->awarded = INVALID_COMPANY; // not awarded to anyone
2237  const CargoSpec *cs = CargoSpec::Get(s->cargo_type);
2238  switch (cs->town_acceptance_effect) {
2239  case TAE_PASSENGERS:
2240  case TAE_MAIL:
2241  /* Town -> Town */
2242  s->src_type = s->dst_type = SourceType::Town;
2243  if (Town::IsValidID(s->src) && Town::IsValidID(s->dst)) continue;
2244  break;
2245  case TAE_GOODS:
2246  case TAE_FOOD:
2247  /* Industry -> Town */
2248  s->src_type = SourceType::Industry;
2249  s->dst_type = SourceType::Town;
2250  if (Industry::IsValidID(s->src) && Town::IsValidID(s->dst)) continue;
2251  break;
2252  default:
2253  /* Industry -> Industry */
2254  s->src_type = s->dst_type = SourceType::Industry;
2255  if (Industry::IsValidID(s->src) && Industry::IsValidID(s->dst)) continue;
2256  break;
2257  }
2258  } else {
2259  /* Do our best for awarded subsidies. The original source or destination industry
2260  * can't be determined anymore for awarded subsidies, so invalidate them.
2261  * Town -> Town subsidies are converted using simple heuristic */
2262  s->remaining = 24 - s->remaining; // convert "age of awarded subsidy" to "remaining"
2263  const CargoSpec *cs = CargoSpec::Get(s->cargo_type);
2264  switch (cs->town_acceptance_effect) {
2265  case TAE_PASSENGERS:
2266  case TAE_MAIL: {
2267  /* Town -> Town */
2268  const Station *ss = Station::GetIfValid(s->src);
2269  const Station *sd = Station::GetIfValid(s->dst);
2270  if (ss != nullptr && sd != nullptr && ss->owner == sd->owner &&
2271  Company::IsValidID(ss->owner)) {
2272  s->src_type = s->dst_type = SourceType::Town;
2273  s->src = ss->town->index;
2274  s->dst = sd->town->index;
2275  s->awarded = ss->owner;
2276  continue;
2277  }
2278  break;
2279  }
2280  default:
2281  break;
2282  }
2283  }
2284  /* Awarded non-town subsidy or invalid source/destination, invalidate */
2285  delete s;
2286  }
2287  }
2288 
2290  /* Recompute inflation based on old unround loan limit
2291  * Note: Max loan is 500000. With an inflation of 4% across 170 years
2292  * that results in a max loan of about 0.7 * 2^31.
2293  * So taking the 16 bit fractional part into account there are plenty of bits left
2294  * for unmodified savegames ...
2295  */
2296  uint64_t aimed_inflation = (_economy.old_max_loan_unround << 16 | _economy.old_max_loan_unround_fract) / _settings_game.difficulty.max_loan;
2297 
2298  /* ... well, just clamp it then. */
2299  if (aimed_inflation > MAX_INFLATION) aimed_inflation = MAX_INFLATION;
2300 
2301  /* Simulate the inflation, so we also get the payment inflation */
2302  while (_economy.inflation_prices < aimed_inflation) {
2303  if (AddInflation(false)) break;
2304  }
2305  }
2306 
2308  for (const Depot *d : Depot::Iterate()) {
2309  Tile tile = d->xy;
2310  /* At some point, invalid depots were saved into the game (possibly those removed in the past?)
2311  * Remove them here, so they don't cause issues further down the line */
2312  if (!IsDepotTile(tile)) {
2313  Debug(sl, 0, "Removing invalid depot {} at {}, {}", d->index, TileX(d->xy), TileY(d->xy));
2314  delete d;
2315  d = nullptr;
2316  continue;
2317  }
2318  tile.m2() = d->index;
2319  if (IsTileType(tile, MP_WATER)) Tile(GetOtherShipDepotTile(tile)).m2() = d->index;
2320  }
2321  }
2322 
2323  /* The behaviour of force_proceed has been changed. Now
2324  * it counts signals instead of some random time out. */
2326  for (Train *t : Train::Iterate()) {
2327  if (t->force_proceed != TFP_NONE) {
2328  t->force_proceed = TFP_STUCK;
2329  }
2330  }
2331  }
2332 
2333  /* The bits for the tree ground and tree density have
2334  * been swapped (m2 bits 7..6 and 5..4. */
2336  for (auto t : Map::Iterate()) {
2337  if (IsTileType(t, MP_CLEAR)) {
2338  if (GetRawClearGround(t) == CLEAR_SNOW) {
2340  SetBit(t.m3(), 4);
2341  } else {
2342  ClrBit(t.m3(), 4);
2343  }
2344  }
2345  if (IsTileType(t, MP_TREES)) {
2346  uint density = GB(t.m2(), 6, 2);
2347  uint ground = GB(t.m2(), 4, 2);
2348  t.m2() = ground << 6 | density << 4;
2349  }
2350  }
2351  }
2352 
2353  /* Wait counter and load/unload ticks got split. */
2355  for (Aircraft *a : Aircraft::Iterate()) {
2356  a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks;
2357  }
2358 
2359  for (Train *t : Train::Iterate()) {
2360  t->wait_counter = t->current_order.IsType(OT_LOADING) ? 0 : t->load_unload_ticks;
2361  }
2362  }
2363 
2364  /* Airport tile animation uses animation frame instead of other graphics id */
2366  struct AirportTileConversion {
2367  uint8_t old_start;
2368  uint8_t num_frames;
2369  };
2370  static const AirportTileConversion atcs[] = {
2371  {31, 12}, // APT_RADAR_GRASS_FENCE_SW
2372  {50, 4}, // APT_GRASS_FENCE_NE_FLAG
2373  {62, 2}, // 1 unused tile
2374  {66, 12}, // APT_RADAR_FENCE_SW
2375  {78, 12}, // APT_RADAR_FENCE_NE
2376  {101, 10}, // 9 unused tiles
2377  {111, 8}, // 7 unused tiles
2378  {119, 15}, // 14 unused tiles (radar)
2379  {140, 4}, // APT_GRASS_FENCE_NE_FLAG_2
2380  };
2381  for (auto t : Map::Iterate()) {
2382  if (IsAirportTile(t)) {
2383  StationGfx old_gfx = GetStationGfx(t);
2384  uint8_t offset = 0;
2385  for (const auto &atc : atcs) {
2386  if (old_gfx < atc.old_start) {
2387  SetStationGfx(t, old_gfx - offset);
2388  break;
2389  }
2390  if (old_gfx < atc.old_start + atc.num_frames) {
2391  SetAnimationFrame(t, old_gfx - atc.old_start);
2392  SetStationGfx(t, atc.old_start - offset);
2393  break;
2394  }
2395  offset += atc.num_frames - 1;
2396  }
2397  }
2398  }
2399  }
2400 
2402  for (Station *st : Station::Iterate()) {
2403  if (st->airport.tile != INVALID_TILE) {
2404  st->airport.w = st->airport.GetSpec()->size_x;
2405  st->airport.h = st->airport.GetSpec()->size_y;
2406  }
2407  }
2408  }
2409 
2411  for (auto t : Map::Iterate()) {
2412  /* Reset tropic zone for VOID tiles, they shall not have any. */
2414  }
2415 
2416  /* We need to properly number/name the depots.
2417  * The first step is making sure none of the depots uses the
2418  * 'default' names, after that we can assign the names. */
2419  for (Depot *d : Depot::Iterate()) d->town_cn = UINT16_MAX;
2420 
2421  for (Depot *d : Depot::Iterate()) MakeDefaultName(d);
2422  }
2423 
2425  for (Depot *d : Depot::Iterate()) d->build_date = TimerGameCalendar::date;
2426  }
2427 
2428  /* In old versions it was possible to remove an airport while a plane was
2429  * taking off or landing. This gives all kind of problems when building
2430  * another airport in the same station so we don't allow that anymore.
2431  * For old savegames with such aircraft we just throw them in the air and
2432  * treat the aircraft like they were flying already. */
2434  for (Aircraft *v : Aircraft::Iterate()) {
2435  if (!v->IsNormalAircraft()) continue;
2437  if (st == nullptr && v->state != FLYING) {
2438  v->state = FLYING;
2441  /* get aircraft back on running altitude */
2442  if ((v->vehstatus & VS_CRASHED) == 0) {
2443  GetAircraftFlightLevelBounds(v, &v->z_pos, nullptr);
2444  SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlightLevel(v));
2445  }
2446  }
2447  }
2448  }
2449 
2450  /* Move the animation frame to the same location (m7) for all objects. */
2452  for (auto t : Map::Iterate()) {
2453  switch (GetTileType(t)) {
2454  case MP_HOUSE:
2455  if (GetHouseType(t) >= NEW_HOUSE_OFFSET) {
2456  uint per_proc = t.m7();
2457  t.m7() = GB(t.m6(), 2, 6) | (GB(t.m3(), 5, 1) << 6);
2458  SB(t.m3(), 5, 1, 0);
2459  SB(t.m6(), 2, 6, std::min(per_proc, 63U));
2460  }
2461  break;
2462 
2463  case MP_INDUSTRY: {
2464  uint rand = t.m7();
2465  t.m7() = t.m3();
2466  t.m3() = rand;
2467  break;
2468  }
2469 
2470  case MP_OBJECT:
2471  t.m7() = t.m3();
2472  t.m3() = 0;
2473  break;
2474 
2475  default:
2476  /* For stations/airports it's already at m7 */
2477  break;
2478  }
2479  }
2480  }
2481 
2482  /* Add (random) colour to all objects. */
2484  for (Object *o : Object::Iterate()) {
2485  Owner owner = GetTileOwner(o->location.tile);
2486  o->colour = (owner == OWNER_NONE) ? static_cast<Colours>(GB(Random(), 0, 4)) : Company::Get(owner)->livery->colour1;
2487  }
2488  }
2489 
2491  for (auto t : Map::Iterate()) {
2492  if (!IsTileType(t, MP_STATION)) continue;
2493  if (!IsBuoy(t) && !IsOilRig(t) && !(IsDock(t) && IsTileFlat(t))) {
2495  }
2496  }
2497 
2498  /* Waypoints with custom name may have a non-unique town_cn,
2499  * renumber those. First set all affected waypoints to the
2500  * highest possible number to get them numbered in the
2501  * order they have in the pool. */
2502  for (Waypoint *wp : Waypoint::Iterate()) {
2503  if (!wp->name.empty()) wp->town_cn = UINT16_MAX;
2504  }
2505 
2506  for (Waypoint *wp : Waypoint::Iterate()) {
2507  if (!wp->name.empty()) MakeDefaultName(wp);
2508  }
2509  }
2510 
2512  _industry_builder.Reset(); // Initialize industry build data.
2513 
2514  /* The moment vehicles go from hidden to visible changed. This means
2515  * that vehicles don't always get visible anymore causing things to
2516  * get messed up just after loading the savegame. This fixes that. */
2517  for (Vehicle *v : Vehicle::Iterate()) {
2518  /* Not all vehicle types can be inside a tunnel. Furthermore,
2519  * testing IsTunnelTile() for invalid tiles causes a crash. */
2520  if (!v->IsGroundVehicle()) continue;
2521 
2522  /* Is the vehicle in a tunnel? */
2523  if (!IsTunnelTile(v->tile)) continue;
2524 
2525  /* Is the vehicle actually at a tunnel entrance/exit? */
2526  TileIndex vtile = TileVirtXY(v->x_pos, v->y_pos);
2527  if (!IsTunnelTile(vtile)) continue;
2528 
2529  /* Are we actually in this tunnel? Or maybe a lower tunnel? */
2530  if (GetSlopePixelZ(v->x_pos, v->y_pos, true) != v->z_pos) continue;
2531 
2532  /* What way are we going? */
2533  const DiagDirection dir = GetTunnelBridgeDirection(vtile);
2534  const DiagDirection vdir = DirToDiagDir(v->direction);
2535 
2536  /* Have we passed the visibility "switch" state already? */
2537  uint8_t pos = (DiagDirToAxis(vdir) == AXIS_X ? v->x_pos : v->y_pos) & TILE_UNIT_MASK;
2538  uint8_t frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos;
2539  extern const uint8_t _tunnel_visibility_frame[DIAGDIR_END];
2540 
2541  /* Should the vehicle be hidden or not? */
2542  bool hidden;
2543  if (dir == vdir) { // Entering tunnel
2544  hidden = frame >= _tunnel_visibility_frame[dir];
2545  v->tile = vtile;
2546  } else if (dir == ReverseDiagDir(vdir)) { // Leaving tunnel
2547  hidden = frame < TILE_SIZE - _tunnel_visibility_frame[dir];
2548  /* v->tile changes at the moment when the vehicle leaves the tunnel. */
2549  v->tile = hidden ? GetOtherTunnelBridgeEnd(vtile) : vtile;
2550  } else {
2551  /* We could get here in two cases:
2552  * - for road vehicles, it is reversing at the end of the tunnel
2553  * - it is crashed in the tunnel entry (both train or RV destroyed by UFO)
2554  * Whatever case it is, do not change anything and use the old values.
2555  * Especially changing RV's state would break its reversing in the middle. */
2556  continue;
2557  }
2558 
2559  if (hidden) {
2560  v->vehstatus |= VS_HIDDEN;
2561 
2562  switch (v->type) {
2563  case VEH_TRAIN: Train::From(v)->track = TRACK_BIT_WORMHOLE; break;
2564  case VEH_ROAD: RoadVehicle::From(v)->state = RVSB_WORMHOLE; break;
2565  default: NOT_REACHED();
2566  }
2567  } else {
2568  v->vehstatus &= ~VS_HIDDEN;
2569 
2570  switch (v->type) {
2571  case VEH_TRAIN: Train::From(v)->track = DiagDirToDiagTrackBits(vdir); break;
2572  case VEH_ROAD: RoadVehicle::From(v)->state = DiagDirToDiagTrackdir(vdir); RoadVehicle::From(v)->frame = frame; break;
2573  default: NOT_REACHED();
2574  }
2575  }
2576  }
2577  }
2578 
2580  for (RoadVehicle *rv : RoadVehicle::Iterate()) {
2581  if (rv->state == RVSB_IN_DEPOT || rv->state == RVSB_WORMHOLE) continue;
2582 
2583  bool loading = rv->current_order.IsType(OT_LOADING) || rv->current_order.IsType(OT_LEAVESTATION);
2584  if (HasBit(rv->state, RVS_IN_ROAD_STOP)) {
2585  extern const uint8_t _road_stop_stop_frame[];
2586  SB(rv->state, RVS_ENTERED_STOP, 1, loading || rv->frame > _road_stop_stop_frame[rv->state - RVSB_IN_ROAD_STOP + (_settings_game.vehicle.road_side << RVS_DRIVE_SIDE)]);
2587  } else if (HasBit(rv->state, RVS_IN_DT_ROAD_STOP)) {
2588  SB(rv->state, RVS_ENTERED_STOP, 1, loading || rv->frame > RVC_DRIVE_THROUGH_STOP_FRAME);
2589  }
2590  }
2591  }
2592 
2594  /* The train's pathfinder lost flag got moved. */
2595  for (Train *t : Train::Iterate()) {
2596  if (!HasBit(t->flags, 5)) continue;
2597 
2598  ClrBit(t->flags, 5);
2599  SetBit(t->vehicle_flags, VF_PATHFINDER_LOST);
2600  }
2601 
2602  /* Introduced terraform/clear limits. */
2603  for (Company *c : Company::Iterate()) {
2604  c->terraform_limit = _settings_game.construction.terraform_frame_burst << 16;
2605  c->clear_limit = _settings_game.construction.clear_frame_burst << 16;
2606  }
2607  }
2608 
2609 
2611  /*
2612  * The logic of GetPartialPixelZ has been changed, so the resulting Zs on
2613  * the map are consistent. This requires that the Z position of some
2614  * vehicles is updated to reflect this new situation.
2615  *
2616  * This needs to be before SLV_158, because that performs asserts using
2617  * GetSlopePixelZ which internally uses GetPartialPixelZ.
2618  */
2619  for (Vehicle *v : Vehicle::Iterate()) {
2620  if (v->IsGroundVehicle() && TileVirtXY(v->x_pos, v->y_pos) == v->tile) {
2621  /* Vehicle is on the ground, and not in a wormhole. */
2622  v->z_pos = GetSlopePixelZ(v->x_pos, v->y_pos, true);
2623  }
2624  }
2625  }
2626 
2628  for (Vehicle *v : Vehicle::Iterate()) {
2629  switch (v->type) {
2630  case VEH_TRAIN: {
2631  Train *t = Train::From(v);
2632 
2633  /* Clear old GOINGUP / GOINGDOWN flags.
2634  * It was changed in savegame version 139, but savegame
2635  * version 158 doesn't use these bits, so it doesn't hurt
2636  * to clear them unconditionally. */
2637  ClrBit(t->flags, 1);
2638  ClrBit(t->flags, 2);
2639 
2640  /* Clear both bits first. */
2643 
2644  /* Crashed vehicles can't be going up/down. */
2645  if (t->vehstatus & VS_CRASHED) break;
2646 
2647  /* Only X/Y tracks can be sloped. */
2648  if (t->track != TRACK_BIT_X && t->track != TRACK_BIT_Y) break;
2649 
2651  break;
2652  }
2653  case VEH_ROAD: {
2654  RoadVehicle *rv = RoadVehicle::From(v);
2657 
2658  /* Crashed vehicles can't be going up/down. */
2659  if (rv->vehstatus & VS_CRASHED) break;
2660 
2661  if (rv->state == RVSB_IN_DEPOT || rv->state == RVSB_WORMHOLE) break;
2662 
2663  TrackStatus ts = GetTileTrackStatus(rv->tile, TRANSPORT_ROAD, GetRoadTramType(rv->roadtype));
2664  TrackBits trackbits = TrackStatusToTrackBits(ts);
2665 
2666  /* Only X/Y tracks can be sloped. */
2667  if (trackbits != TRACK_BIT_X && trackbits != TRACK_BIT_Y) break;
2668 
2669  Direction dir = rv->direction;
2670 
2671  /* Test if we are reversing. */
2672  Axis a = trackbits == TRACK_BIT_X ? AXIS_X : AXIS_Y;
2673  if (AxisToDirection(a) != dir &&
2674  AxisToDirection(a) != ReverseDir(dir)) {
2675  /* When reversing, the road vehicle is on the edge of the tile,
2676  * so it can be safely compared to the middle of the tile. */
2677  dir = INVALID_DIR;
2678  }
2679 
2680  rv->gv_flags |= FixVehicleInclination(rv, dir);
2681  break;
2682  }
2683  case VEH_SHIP:
2684  break;
2685 
2686  default:
2687  continue;
2688  }
2689 
2690  if (IsBridgeTile(v->tile) && TileVirtXY(v->x_pos, v->y_pos) == v->tile) {
2691  /* In old versions, z_pos was 1 unit lower on bridge heads.
2692  * However, this invalid state could be converted to new savegames
2693  * by loading and saving the game in a new version. */
2694  v->z_pos = GetSlopePixelZ(v->x_pos, v->y_pos, true);
2695  DiagDirection dir = GetTunnelBridgeDirection(v->tile);
2696  if (v->type == VEH_TRAIN && !(v->vehstatus & VS_CRASHED) &&
2697  v->direction != DiagDirToDir(dir)) {
2698  /* If the train has left the bridge, it shouldn't have
2699  * track == TRACK_BIT_WORMHOLE - this could happen
2700  * when the train was reversed while on the last "tick"
2701  * on the ramp before leaving the ramp to the bridge. */
2702  Train::From(v)->track = DiagDirToDiagTrackBits(dir);
2703  }
2704  }
2705 
2706  /* If the vehicle is really above v->tile (not in a wormhole),
2707  * it should have set v->z_pos correctly. */
2708  assert(v->tile != TileVirtXY(v->x_pos, v->y_pos) || v->z_pos == GetSlopePixelZ(v->x_pos, v->y_pos, true));
2709  }
2710 
2711  /* Fill Vehicle::cur_real_order_index */
2712  for (Vehicle *v : Vehicle::Iterate()) {
2713  if (!v->IsPrimaryVehicle()) continue;
2714 
2715  /* Older versions are less strict with indices being in range and fix them on the fly */
2716  if (v->cur_implicit_order_index >= v->GetNumOrders()) v->cur_implicit_order_index = 0;
2717 
2718  v->cur_real_order_index = v->cur_implicit_order_index;
2719  v->UpdateRealOrderIndex();
2720  }
2721  }
2722 
2724  /* If the savegame is old (before version 100), then the value of 255
2725  * for these settings did not mean "disabled". As such everything
2726  * before then did reverse.
2727  * To simplify stuff we disable all turning around or we do not
2728  * disable anything at all. So, if some reversing was disabled we
2729  * will keep reversing disabled, otherwise it'll be turned on. */
2731 
2732  for (Train *t : Train::Iterate()) {
2733  _settings_game.vehicle.max_train_length = std::max<uint8_t>(_settings_game.vehicle.max_train_length, CeilDiv(t->gcache.cached_total_length, TILE_SIZE));
2734  }
2735  }
2736 
2738  /* Setting difficulty industry_density other than zero get bumped to +1
2739  * since a new option (minimal at position 1) has been added */
2742  }
2743  }
2744 
2746  /* Before savegame version 161, persistent storages were not stored in a pool. */
2747 
2749  for (Industry *ind : Industry::Iterate()) {
2750  assert(ind->psa != nullptr);
2751 
2752  /* Check if the old storage was empty. */
2753  bool is_empty = true;
2754  for (uint i = 0; i < sizeof(ind->psa->storage); i++) {
2755  if (ind->psa->GetValue(i) != 0) {
2756  is_empty = false;
2757  break;
2758  }
2759  }
2760 
2761  if (!is_empty) {
2762  ind->psa->grfid = _industry_mngr.GetGRFID(ind->type);
2763  } else {
2764  delete ind->psa;
2765  ind->psa = nullptr;
2766  }
2767  }
2768  }
2769 
2771  for (Station *st : Station::Iterate()) {
2772  if (!(st->facilities & FACIL_AIRPORT)) continue;
2773  assert(st->airport.psa != nullptr);
2774 
2775  /* Check if the old storage was empty. */
2776  bool is_empty = true;
2777  for (uint i = 0; i < sizeof(st->airport.psa->storage); i++) {
2778  if (st->airport.psa->GetValue(i) != 0) {
2779  is_empty = false;
2780  break;
2781  }
2782  }
2783 
2784  if (!is_empty) {
2785  st->airport.psa->grfid = _airport_mngr.GetGRFID(st->airport.type);
2786  } else {
2787  delete st->airport.psa;
2788  st->airport.psa = nullptr;
2789 
2790  }
2791  }
2792  }
2793  }
2794 
2795  /* This triggers only when old snow_lines were copied into the snow_line_height. */
2798  }
2799 
2801  /* We store 4 fences in the field tiles instead of only SE and SW. */
2802  for (auto t : Map::Iterate()) {
2803  if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue;
2804  if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) continue;
2805  uint fence = GB(t.m4(), 5, 3);
2806  if (fence != 0 && IsTileType(TileAddXY(t, 1, 0), MP_CLEAR) && IsClearGround(TileAddXY(t, 1, 0), CLEAR_FIELDS)) {
2807  SetFence(TileAddXY(t, 1, 0), DIAGDIR_NE, fence);
2808  }
2809  fence = GB(t.m4(), 2, 3);
2810  if (fence != 0 && IsTileType(TileAddXY(t, 0, 1), MP_CLEAR) && IsClearGround(TileAddXY(t, 0, 1), CLEAR_FIELDS)) {
2811  SetFence(TileAddXY(t, 0, 1), DIAGDIR_NW, fence);
2812  }
2813  SB(t.m4(), 2, 3, 0);
2814  SB(t.m4(), 5, 3, 0);
2815  }
2816  }
2817 
2818  /* The center of train vehicles was changed, fix up spacing. */
2820 
2822  for (Town *t : Town::Iterate()) {
2823  /* Set the default cargo requirement for town growth */
2825  case LT_ARCTIC:
2827  break;
2828 
2829  case LT_TROPIC:
2832  break;
2833  }
2834  }
2835  }
2836 
2838  /* Adjust zoom level to account for new levels */
2839  _saved_scrollpos_zoom = static_cast<ZoomLevel>(_saved_scrollpos_zoom + ZOOM_BASE_SHIFT);
2840  _saved_scrollpos_x *= ZOOM_BASE;
2841  _saved_scrollpos_y *= ZOOM_BASE;
2842  }
2843 
2844  /* When any NewGRF has been changed the availability of some vehicles might
2845  * have been changed too. e->company_avail must be set to 0 in that case
2846  * which is done by StartupEngines(). */
2847  if (gcf_res != GLC_ALL_GOOD) StartupEngines();
2848 
2849  /* The road owner of standard road stops was not properly accounted for. */
2851  for (auto t : Map::Iterate()) {
2852  if (!IsBayRoadStopTile(t)) continue;
2853  Owner o = GetTileOwner(t);
2854  SetRoadOwner(t, RTT_ROAD, o);
2855  SetRoadOwner(t, RTT_TRAM, o);
2856  }
2857  }
2858 
2860  /* Introduced tree planting limit. */
2861  for (Company *c : Company::Iterate()) c->tree_limit = _settings_game.construction.tree_frame_burst << 16;
2862  }
2863 
2865  /* Fix too high inflation rates */
2866  if (_economy.inflation_prices > MAX_INFLATION) _economy.inflation_prices = MAX_INFLATION;
2868 
2869  /* We have to convert the quarters of bankruptcy into months of bankruptcy */
2870  for (Company *c : Company::Iterate()) {
2871  c->months_of_bankruptcy = 3 * c->months_of_bankruptcy;
2872  }
2873  }
2874 
2875  {
2876  /* Station blocked, wires and pylon flags need to be stored in the map. This is effectively cached data, so no
2877  * version check is necessary. This is done here as the SLV_182 check below needs the blocked status. */
2878  for (auto t : Map::Iterate()) {
2879  if (HasStationTileRail(t)) SetRailStationTileFlags(t, GetStationSpec(t));
2880  }
2881  }
2882 
2884  /* Aircraft acceleration variable was bonkers */
2885  for (Aircraft *v : Aircraft::Iterate()) {
2886  if (v->subtype <= AIR_AIRCRAFT) {
2887  const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type);
2888  v->acceleration = avi->acceleration;
2889  }
2890  }
2891 
2892  /* Blocked tiles could be reserved due to a bug, which causes
2893  * other places to assert upon e.g. station reconstruction. */
2894  for (auto t : Map::Iterate()) {
2896  SetRailStationReservation(t, false);
2897  }
2898  }
2899  }
2900 
2902  /* The global units configuration is split up in multiple configurations. */
2903  extern uint8_t _old_units;
2904  _settings_game.locale.units_velocity = Clamp(_old_units, 0, 2);
2905  _settings_game.locale.units_power = Clamp(_old_units, 0, 2);
2906  _settings_game.locale.units_weight = Clamp(_old_units, 1, 2);
2907  _settings_game.locale.units_volume = Clamp(_old_units, 1, 2);
2909  _settings_game.locale.units_height = Clamp(_old_units, 0, 2);
2910  }
2911 
2913  /* Match nautical velocity with land velocity units. */
2915  }
2916 
2918  /* Move ObjectType from map to pool */
2919  for (auto t : Map::Iterate()) {
2920  if (IsTileType(t, MP_OBJECT)) {
2921  Object *o = Object::Get(t.m2());
2922  o->type = t.m5();
2923  t.m5() = 0; // zero upper bits of (now bigger) ObjectID
2924  }
2925  }
2926  }
2927 
2928  /* In version 2.2 of the savegame, we have new airports, so status of all aircraft is reset.
2929  * This has to be called after all map array updates */
2931 
2933  /* Fix articulated road vehicles.
2934  * Some curves were shorter than other curves.
2935  * Now they have the same length, but that means that trailing articulated parts will
2936  * take longer to go through the curve than the parts in front which already left the courve.
2937  * So, make articulated parts catch up. */
2938  bool roadside = _settings_game.vehicle.road_side == 1;
2939  std::vector<uint> skip_frames;
2940  for (RoadVehicle *v : RoadVehicle::Iterate()) {
2941  if (!v->IsFrontEngine()) continue;
2942  skip_frames.clear();
2943  TileIndex prev_tile = v->tile;
2944  uint prev_tile_skip = 0;
2945  uint cur_skip = 0;
2946  for (RoadVehicle *u = v; u != nullptr; u = u->Next()) {
2947  if (u->tile != prev_tile) {
2948  prev_tile_skip = cur_skip;
2949  prev_tile = u->tile;
2950  } else {
2951  cur_skip = prev_tile_skip;
2952  }
2953 
2954  uint &this_skip = skip_frames.emplace_back(prev_tile_skip);
2955 
2956  /* The following 3 curves now take longer than before */
2957  switch (u->state) {
2958  case 2:
2959  cur_skip++;
2960  if (u->frame <= (roadside ? 9 : 5)) this_skip = cur_skip;
2961  break;
2962 
2963  case 4:
2964  cur_skip++;
2965  if (u->frame <= (roadside ? 5 : 9)) this_skip = cur_skip;
2966  break;
2967 
2968  case 5:
2969  cur_skip++;
2970  if (u->frame <= (roadside ? 4 : 2)) this_skip = cur_skip;
2971  break;
2972 
2973  default:
2974  break;
2975  }
2976  }
2977  while (cur_skip > skip_frames[0]) {
2978  RoadVehicle *u = v;
2979  RoadVehicle *prev = nullptr;
2980  for (uint sf : skip_frames) {
2981  if (sf >= cur_skip) IndividualRoadVehicleController(u, prev);
2982 
2983  prev = u;
2984  u = u->Next();
2985  }
2986  cur_skip--;
2987  }
2988  }
2989  }
2990 
2992  for (Order *order : Order::Iterate()) {
2993  order->SetTravelTimetabled(order->GetTravelTime() > 0);
2994  order->SetWaitTimetabled(order->GetWaitTime() > 0);
2995  }
2996  for (OrderList *orderlist : OrderList::Iterate()) {
2997  orderlist->RecalculateTimetableDuration();
2998  }
2999  }
3000 
3001  /*
3002  * Only keep order-backups for network clients (and when replaying).
3003  * If we are a network server or not networking, then we just loaded a previously
3004  * saved-by-server savegame. There are no clients with a backup, so clear it.
3005  * Furthermore before savegame version SLV_192 the actual content was always corrupt.
3006  */
3008 #ifndef DEBUG_DUMP_COMMANDS
3009  /* Note: We cannot use CleanPool since that skips part of the destructor
3010  * and then leaks un-reachable Orders in the order pool. */
3011  for (OrderBackup *ob : OrderBackup::Iterate()) {
3012  delete ob;
3013  }
3014 #endif
3015  }
3016 
3018  /* Convert towns growth_rate and grow_counter to ticks */
3019  for (Town *t : Town::Iterate()) {
3020  /* 0x8000 = TOWN_GROWTH_RATE_CUSTOM previously */
3021  if (t->growth_rate & 0x8000) SetBit(t->flags, TOWN_CUSTOM_GROWTH);
3022  if (t->growth_rate != TOWN_GROWTH_RATE_NONE) {
3023  t->growth_rate = TownTicksToGameTicks(t->growth_rate & ~0x8000);
3024  }
3025  /* Add t->index % TOWN_GROWTH_TICKS to spread growth across ticks. */
3026  t->grow_counter = TownTicksToGameTicks(t->grow_counter) + t->index % Ticks::TOWN_GROWTH_TICKS;
3027  }
3028  }
3029 
3031  /* Make sure added industry cargo slots are cleared */
3032  for (Industry *i : Industry::Iterate()) {
3033  /* Make sure last_cargo_accepted_at is copied to elements for every valid input cargo.
3034  * The loading routine should put the original singular value into the first array element. */
3035  for (auto &a : i->accepted) {
3036  if (IsValidCargoID(a.cargo)) {
3037  a.last_accepted = i->GetAccepted(0).last_accepted;
3038  } else {
3039  a.last_accepted = 0;
3040  }
3041  }
3042  }
3043  }
3044 
3046  /* Move ships from lock slope to upper or lower position. */
3047  for (Ship *s : Ship::Iterate()) {
3048  /* Suitable tile? */
3049  if (!IsTileType(s->tile, MP_WATER) || !IsLock(s->tile) || GetLockPart(s->tile) != LOCK_PART_MIDDLE) continue;
3050 
3051  /* We don't need to adjust position when at the tile centre */
3052  int x = s->x_pos & 0xF;
3053  int y = s->y_pos & 0xF;
3054  if (x == 8 && y == 8) continue;
3055 
3056  /* Test if ship is on the second half of the tile */
3057  bool second_half;
3058  DiagDirection shipdiagdir = DirToDiagDir(s->direction);
3059  switch (shipdiagdir) {
3060  default: NOT_REACHED();
3061  case DIAGDIR_NE: second_half = x < 8; break;
3062  case DIAGDIR_NW: second_half = y < 8; break;
3063  case DIAGDIR_SW: second_half = x > 8; break;
3064  case DIAGDIR_SE: second_half = y > 8; break;
3065  }
3066 
3067  DiagDirection slopediagdir = GetInclinedSlopeDirection(GetTileSlope(s->tile));
3068 
3069  /* Heading up slope == passed half way */
3070  if ((shipdiagdir == slopediagdir) == second_half) {
3071  /* On top half of lock */
3072  s->z_pos = GetTileMaxZ(s->tile) * (int)TILE_HEIGHT;
3073  } else {
3074  /* On lower half of lock */
3075  s->z_pos = GetTileZ(s->tile) * (int)TILE_HEIGHT;
3076  }
3077  }
3078  }
3079 
3081  /* Ensure the original cargo generation mode is used */
3083  }
3084 
3086  /* Ensure the original neutral industry/station behaviour is used */
3088 
3089  /* Link oil rigs to their industry and back. */
3090  for (Station *st : Station::Iterate()) {
3091  if (IsTileType(st->xy, MP_STATION) && IsOilRig(st->xy)) {
3092  /* Industry tile is always adjacent during construction by TileDiffXY(0, 1) */
3093  st->industry = Industry::GetByTile(st->xy + TileDiffXY(0, 1));
3094  st->industry->neutral_station = st;
3095  }
3096  }
3097  } else {
3098  /* Link neutral station back to industry, as this is not saved. */
3099  for (Industry *ind : Industry::Iterate()) if (ind->neutral_station != nullptr) ind->neutral_station->industry = ind;
3100  }
3101 
3103  /* Update water class for trees. */
3104  for (auto t : Map::Iterate()) {
3106  }
3107  }
3108 
3109  /* Update structures for multitile docks */
3111  for (auto t : Map::Iterate()) {
3112  /* Clear docking tile flag from relevant tiles as it
3113  * was not previously cleared. */
3115  SetDockingTile(t, false);
3116  }
3117  /* Add docks and oilrigs to Station::ship_station. */
3118  if (IsTileType(t, MP_STATION)) {
3119  if (IsDock(t) || IsOilRig(t)) Station::GetByTile(t)->ship_station.Add(t);
3120  }
3121  }
3122  }
3123 
3125  /* Placing objects on docking tiles was not updating adjacent station's docking tiles. */
3126  for (Station *st : Station::Iterate()) {
3127  if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st);
3128  }
3129  }
3130 
3132  /* Reset roadtype/streetcartype info for non-road bridges. */
3133  for (auto t : Map::Iterate()) {
3136  }
3137  }
3138  }
3139 
3140  /* Make sure all industries exclusive supplier/consumer set correctly. */
3142  for (Industry *i : Industry::Iterate()) {
3143  i->exclusive_supplier = INVALID_OWNER;
3144  i->exclusive_consumer = INVALID_OWNER;
3145  }
3146  }
3147 
3149  /* Propagate wagon removal flag for compatibility */
3150  /* Temporary bitmask of company wagon removal setting */
3151  uint16_t wagon_removal = 0;
3152  for (const Company *c : Company::Iterate()) {
3153  if (c->settings.renew_keep_length) SetBit(wagon_removal, c->index);
3154  }
3155  for (Group *g : Group::Iterate()) {
3156  if (g->flags != 0) {
3157  /* Convert old replace_protection value to flag. */
3158  g->flags = 0;
3160  }
3161  if (HasBit(wagon_removal, g->owner)) SetBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL);
3162  }
3163  }
3164 
3165  /* Use current order time to approximate last loading time */
3167  for (Vehicle *v : Vehicle::Iterate()) {
3168  v->last_loading_tick = std::max(TimerGameTick::counter, static_cast<uint64_t>(v->current_order_time)) - v->current_order_time;
3169  }
3170  }
3171 
3172  /* Road stops is 'only' updating some caches, but they are needed for PF calls in SLV_MULTITRACK_LEVEL_CROSSINGS teleporting. */
3174 
3175  /* Road vehicles stopped on multitrack level crossings need teleporting to a depot
3176  * to avoid crashing into the side of the train they're waiting for. */
3178  /* Teleport road vehicles to the nearest depot. */
3179  for (RoadVehicle *rv : RoadVehicle::Iterate()) {
3180  /* Ignore trailers of articulated vehicles. */
3181  if (rv->IsArticulatedPart()) continue;
3182 
3183  /* Ignore moving vehicles. */
3184  if (rv->cur_speed > 0) continue;
3185 
3186  /* Ignore crashed vehicles. */
3187  if (rv->vehstatus & VS_CRASHED) continue;
3188 
3189  /* Ignore vehicles not on level crossings. */
3190  TileIndex cur_tile = rv->tile;
3191  if (!IsLevelCrossingTile(cur_tile)) continue;
3192 
3193  ClosestDepot closestDepot = rv->FindClosestDepot();
3194 
3195  /* Try to find a depot with a distance limit of 512 tiles (Manhattan distance). */
3196  if (closestDepot.found && DistanceManhattan(rv->tile, closestDepot.location) < 512u) {
3197  /* Teleport all parts of articulated vehicles. */
3198  for (RoadVehicle *u = rv; u != nullptr; u = u->Next()) {
3199  u->tile = closestDepot.location;
3200  int x = TileX(closestDepot.location) * TILE_SIZE + TILE_SIZE / 2;
3201  int y = TileY(closestDepot.location) * TILE_SIZE + TILE_SIZE / 2;
3202  u->x_pos = x;
3203  u->y_pos = y;
3204  u->z_pos = GetSlopePixelZ(x, y, true);
3205 
3206  u->vehstatus |= VS_HIDDEN;
3207  u->state = RVSB_IN_DEPOT;
3208  u->UpdatePosition();
3209  }
3210  RoadVehLeaveDepot(rv, false);
3211  }
3212  }
3213 
3215  /* Reset unused tree counters to reduce the savegame size. */
3216  for (auto t : Map::Iterate()) {
3217  if (IsTileType(t, MP_TREES)) {
3218  SB(t.m2(), 0, 4, 0);
3219  }
3220  }
3221  }
3222 
3223  /* Refresh all level crossings to bar adjacent crossing tiles, if needed. */
3224  for (auto tile : Map::Iterate()) {
3225  if (IsLevelCrossingTile(tile)) UpdateLevelCrossing(tile, false);
3226  }
3227  }
3228 
3229  /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */
3231 
3232  /* Station acceptance is some kind of cache */
3234  for (Station *st : Station::Iterate()) UpdateStationAcceptance(st, false);
3235  }
3236 
3239  }
3240 
3242  /* For older savegames, we don't now the actual interval; so set it to the newgame value. */
3244 
3245  /* We did load the "period" of the timer, but not the fired/elapsed. We can deduce that here. */
3247  _new_competitor_timeout.storage.elapsed = 0;
3248  _new_competitor_timeout.fired = _new_competitor_timeout.period.value == 0;
3249  }
3250 
3252  /* Set service date provided to NewGRF. */
3253  for (Vehicle *v : Vehicle::Iterate()) {
3254  v->date_of_last_service_newgrf = v->date_of_last_service.base();
3255  }
3256  }
3257 
3259  /* NewGRF acceleration information was added to ships. */
3260  for (Ship *s : Ship::Iterate()) {
3261  if (s->acceleration == 0) s->acceleration = ShipVehInfo(s->engine_type)->acceleration;
3262  }
3263  }
3264 
3266  for (Company *c : Company::Iterate()) {
3267  c->max_loan = COMPANY_MAX_LOAN_DEFAULT;
3268  }
3269  }
3270 
3272  ScriptObject::InitializeRandomizers();
3273  }
3274 
3276  for (Company *c : Company::Iterate()) {
3277  c->inaugurated_year_calendar = _settings_game.game_creation.starting_year;
3278  }
3279  }
3280 
3281  for (Company *c : Company::Iterate()) {
3283  }
3284 
3285  /* Update free group numbers data for each company, required regardless of savegame version. */
3286  for (Group *g : Group::Iterate()) {
3287  Company *c = Company::Get(g->owner);
3289  /* Use the index as group number when converting old savegames. */
3290  g->number = c->freegroups.UseID(g->index);
3291  } else {
3292  c->freegroups.UseID(g->number);
3293  }
3294  }
3295 
3296  AfterLoadLabelMaps();
3299 
3300  _gamelog.PrintDebug(1);
3301 
3303  /* Restore the signals */
3305 
3307 
3309 
3310  /* Start the scripts. This MUST happen after everything else except
3311  * starting a new company. */
3312  StartScripts();
3313 
3314  /* If Load Scenario / New (Scenario) Game is used,
3315  * a company does not exist yet. So create one here.
3316  * 1 exception: network-games. Those can have 0 companies
3317  * But this exception is not true for non-dedicated network servers! */
3319  CompanyID first_human_company = GetFirstPlayableCompanyID();
3320  if (!Company::IsValidID(first_human_company)) {
3321  Company *c = DoStartupNewCompany(false, first_human_company);
3323  }
3324  }
3325 
3326  return true;
3327 }
3328 
3338 {
3339  /* reload grf data */
3340  GfxLoadSprites();
3342  RecomputePrices();
3343  /* reload vehicles */
3344  ResetVehicleHash();
3345  AfterLoadVehicles(false);
3346  StartupEngines();
3348  /* update station graphics */
3349  AfterLoadStations();
3350  /* Update company statistics. */
3352  /* Check and update house and town values */
3354  /* Delete news referring to no longer existing entities */
3356  /* Update livery selection windows */
3358  /* Update company infrastructure counts. */
3360  /* redraw the whole screen */
3363 }
SLV_38
@ SLV_38
38 7195
Definition: saveload.h:88
LoadStringWidthTable
void LoadStringWidthTable(bool monospace)
Initialize _stringwidth_table cache.
Definition: gfx.cpp:1210
RoadVehicle
Buses, trucks and trams belong to this class.
Definition: roadveh.h:106
TileY
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
Definition: map_func.h:437
MP_CLEAR
@ MP_CLEAR
A tile without any structures, i.e. grass, rocks, farm fields etc.
Definition: tile_type.h:48
Vehicle::IsFrontEngine
debug_inline bool IsFrontEngine() const
Check if the vehicle is a front engine.
Definition: vehicle_base.h:945
MP_HOUSE
@ MP_HOUSE
A house by a town.
Definition: tile_type.h:51
IsTileFlat
bool IsTileFlat(TileIndex tile, int *h)
Check if a given tile is flat.
Definition: tile_map.cpp:95
EngineInfo::misc_flags
uint8_t misc_flags
Miscellaneous flags.
Definition: engine_type.h:155
BuildOwnerLegend
void BuildOwnerLegend()
Completes the array for the owned property legend.
Definition: smallmap_gui.cpp:345
CLEAR_SNOW
@ CLEAR_SNOW
0-3
Definition: clear_map.h:24
DIAGDIR_NE
@ DIAGDIR_NE
Northeast, upper right on your monitor.
Definition: direction_type.h:75
InvalidateWindowData
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-...
Definition: window.cpp:3208
ReverseDir
Direction ReverseDir(Direction d)
Return the reverse of a direction.
Definition: direction_func.h:54
SLV_74
@ SLV_74
74 11030
Definition: saveload.h:131
AfterLoadGame
bool AfterLoadGame()
Perform a (large) amount of savegame conversion magic in order to load older savegames and to fill th...
Definition: afterload.cpp:564
OverrideManagerBase::GetGRFID
uint32_t GetGRFID(uint16_t entity_id) const
Gives the GRFID of the file the entity belongs to.
Definition: newgrf_commons.cpp:139
VehicleSettings::road_side
uint8_t road_side
the side of the road vehicles drive on
Definition: settings_type.h:508
AircraftNextAirportPos_and_Order
void AircraftNextAirportPos_and_Order(Aircraft *v)
set the right pos when heading to other airports after takeoff
Definition: aircraft_cmd.cpp:1449
IsClearGround
bool IsClearGround(Tile t, ClearGround ct)
Set the type of clear tile.
Definition: clear_map.h:71
OUFB_UNLOAD
@ OUFB_UNLOAD
Force unloading all cargo onto the platform, possibly not getting paid.
Definition: order_type.h:54
SetBit
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
Definition: bitmath_func.hpp:121
SIG_SEMAPHORE
@ SIG_SEMAPHORE
Old-fashioned semaphore signal.
Definition: signal_type.h:18
SetSaveLoadError
void SetSaveLoadError(StringID str)
Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friend...
Definition: saveload.cpp:2794
Tile::m5
debug_inline uint8_t & m5()
General purpose.
Definition: map_func.h:161
FT_SCENARIO
@ FT_SCENARIO
old or new scenario
Definition: fileio_type.h:19
Order::IsType
bool IsType(OrderType type) const
Check whether this order is of the given type.
Definition: order_base.h:70
DIR_SW
@ DIR_SW
Southwest.
Definition: direction_type.h:31
Pool::PoolItem<&_town_pool >::Get
static Titem * Get(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:339
SettingsDisableElrail
void SettingsDisableElrail(int32_t new_value)
_settings_game.disable_elrail callback
Definition: elrail.cpp:598
TimerGameTick::counter
static TickCounter counter
Monotonic counter, in ticks, since start of game.
Definition: timer_game_tick.h:60
SetRoadTypes
void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt)
Set the present road types of a tile.
Definition: road_map.h:619
GameSettings::station
StationSettings station
settings related to station management
Definition: settings_type.h:605
MIN_SNOWLINE_HEIGHT
static const uint MIN_SNOWLINE_HEIGHT
Minimum snowline height.
Definition: tile_type.h:32
EconomySettings::larger_towns
uint8_t larger_towns
the number of cities to build. These start off larger and grow twice as fast
Definition: settings_type.h:526
SetRailStationTileFlags
void SetRailStationTileFlags(TileIndex tile, const StationSpec *statspec)
Set rail station tile flags for the given tile.
Definition: station_cmd.cpp:1326
SLV_GROUP_REPLACE_WAGON_REMOVAL
@ SLV_GROUP_REPLACE_WAGON_REMOVAL
291 PR#7441 Per-group wagon removal flag.
Definition: saveload.h:329
SLV_137
@ SLV_137
137 18912
Definition: saveload.h:207
GetTileMaxZ
int GetTileMaxZ(TileIndex t)
Get top height of the tile inside the map.
Definition: tile_map.cpp:136
FACIL_TRAIN
@ FACIL_TRAIN
Station with train station.
Definition: station_type.h:54
Tile::m3
debug_inline uint8_t & m3()
General purpose.
Definition: map_func.h:137
TimerGameConst< struct Calendar >::DAYS_TILL_ORIGINAL_BASE_YEAR
static constexpr TimerGame< struct Calendar >::Date DAYS_TILL_ORIGINAL_BASE_YEAR
The date of the first day of the original base year.
Definition: timer_game_common.h:184
CARGO_NO_REFIT
static const CargoID CARGO_NO_REFIT
Do not refit cargo of a vehicle (used in vehicle orders and auto-replace/auto-renew).
Definition: cargo_type.h:78
SLV_123
@ SLV_123
123 16909
Definition: saveload.h:190
SLV_32
@ SLV_32
32 6001
Definition: saveload.h:81
RoadBits
RoadBits
Enumeration for the road parts on a tile.
Definition: road_type.h:52
HandleSavegameLoadCrash
static void CDECL HandleSavegameLoadCrash(int signum)
Signal handler used to give a user a more useful report for crashes during the savegame loading proce...
Definition: afterload.cpp:362
SLV_70
@ SLV_70
70 10541
Definition: saveload.h:127
IsInsideMM
constexpr bool IsInsideMM(const T x, const size_t min, const size_t max) noexcept
Checks if a value is in an interval.
Definition: math_func.hpp:268
GetLockPart
uint8_t GetLockPart(Tile t)
Get the part of a lock.
Definition: water_map.h:329
SLV_GROUP_NUMBERS
@ SLV_GROUP_NUMBERS
336 PR#12297 Add per-company group numbers.
Definition: saveload.h:383
YapfNotifyTrackLayoutChange
void YapfNotifyTrackLayoutChange(TileIndex tile, Track track)
Use this function to notify YAPF that track layout (or signal configuration) has change.
Definition: yapf_rail.cpp:663
ROADTYPE_ROAD
@ ROADTYPE_ROAD
Basic road type.
Definition: road_type.h:27
_tile_type_procs
const TileTypeProcs *const _tile_type_procs[16]
Tile callback functions for each type of tile.
Definition: landscape.cpp:65
GLC_COMPATIBLE
@ GLC_COMPATIBLE
Compatible (eg. the same ID, but different checksum) GRF found in at least one case.
Definition: newgrf_config.h:54
SLV_49
@ SLV_49
49 8969
Definition: saveload.h:101
IsTunnelTile
bool IsTunnelTile(Tile t)
Is this a tunnel (entrance)?
Definition: tunnel_map.h:34
EconomySettings::town_layout
TownLayout town_layout
select town layout,
Definition: settings_type.h:528
Swap
constexpr void Swap(T &a, T &b)
Type safe swap operation.
Definition: math_func.hpp:283
PathfinderSettings::forbid_90_deg
bool forbid_90_deg
forbid trains to make 90 deg turns
Definition: settings_type.h:466
ShowErrorMessage
void ShowErrorMessage(StringID summary_msg, int x, int y, CommandCost cc)
Display an error message in a window.
Definition: error_gui.cpp:367
SLV_86
@ SLV_86
86 12042
Definition: saveload.h:146
Pool::PoolItem<&_company_pool >::GetIfValid
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:350
TRACK_BIT_X
@ TRACK_BIT_X
X-axis track.
Definition: track_type.h:37
GetTreeGround
TreeGround GetTreeGround(Tile t)
Returns the groundtype for tree tiles.
Definition: tree_map.h:102
ROAD_Y
@ ROAD_Y
Full road along the y-axis (north-west + south-east)
Definition: road_type.h:59
InitializeWindowsAndCaches
static void InitializeWindowsAndCaches()
Initialization of the windows and several kinds of caches.
Definition: afterload.cpp:247
VehicleSettings::max_train_length
uint8_t max_train_length
maximum length for trains
Definition: settings_type.h:491
ClosestTownFromTile
Town * ClosestTownFromTile(TileIndex tile, uint threshold)
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
Definition: town_cmd.cpp:3862
TimerGameCalendar::date_fract
static DateFract date_fract
Fractional part of the day.
Definition: timer_game_calendar.h:35
SLV_11
@ SLV_11
11.0 2033 11.1 2041
Definition: saveload.h:53
ROAD_TILE_CROSSING
@ ROAD_TILE_CROSSING
Level crossing.
Definition: road_map.h:24
GetWaterClass
WaterClass GetWaterClass(Tile t)
Get the water class at a tile.
Definition: water_map.h:115
Backup
Class to backup a specific variable and restore it later.
Definition: backup_type.hpp:21
AfterLoadRoadStops
void AfterLoadRoadStops()
(Re)building of road stop caches after loading a savegame.
Definition: station_sl.cpp:138
FACIL_DOCK
@ FACIL_DOCK
Station with a dock.
Definition: station_type.h:58
RAILTYPE_RAIL
@ RAILTYPE_RAIL
Standard non-electric rails.
Definition: rail_type.h:29
Map::MaxX
static debug_inline uint MaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
Definition: map_func.h:297
PM_PAUSED_ERROR
@ PM_PAUSED_ERROR
A game paused because a (critical) error.
Definition: openttd.h:73
SIGTYPE_COMBO
@ SIGTYPE_COMBO
presignal inter-block
Definition: signal_type.h:27
RAILTYPE_ELECTRIC
@ RAILTYPE_ELECTRIC
Electric rails.
Definition: rail_type.h:30
SpecializedVehicle::Next
T * Next() const
Get next vehicle in the chain.
Definition: vehicle_base.h:1130
SLV_93
@ SLV_93
93 12648
Definition: saveload.h:154
OUFB_TRANSFER
@ OUFB_TRANSFER
Transfer all cargo onto the platform.
Definition: order_type.h:55
BaseStation::town
Town * town
The town this station is associated with.
Definition: base_station_base.h:68
WC_COMPANY_COLOUR
@ WC_COMPANY_COLOUR
Company colour selection; Window numbers:
Definition: window_type.h:230
WATER_CLASS_SEA
@ WATER_CLASS_SEA
Sea.
Definition: water_map.h:48
SLV_87
@ SLV_87
87 12129
Definition: saveload.h:147
_gamelog
Gamelog _gamelog
Gamelog instance.
Definition: gamelog.cpp:31
Station
Station data structure.
Definition: station_base.h:439
BaseStation::GetByTile
static BaseStation * GetByTile(TileIndex tile)
Get the base station belonging to a specific tile.
Definition: base_station_base.h:166
GetTileSlope
Slope GetTileSlope(TileIndex tile)
Return the slope of a given tile inside the map.
Definition: tile_map.h:279
SLV_99
@ SLV_99
99 13838
Definition: saveload.h:161
FixOwnerOfRailTrack
static void FixOwnerOfRailTrack(Tile t)
Tries to change owner of this rail tile to a valid owner.
Definition: afterload.cpp:422
IsPlainRail
static debug_inline bool IsPlainRail(Tile t)
Returns whether this is plain rails, with or without signals.
Definition: rail_map.h:49
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
INVALID_OWNER
@ INVALID_OWNER
An invalid owner.
Definition: company_type.h:29
SLV_113
@ SLV_113
113 15340
Definition: saveload.h:178
SLV_152
@ SLV_152
152 21171
Definition: saveload.h:225
GameCreationSettings::snow_line_height
uint8_t snow_line_height
the configured snow line height (deduced from "snow_coverage")
Definition: settings_type.h:359
Economy::inflation_payment
uint64_t inflation_payment
Cumulated inflation of cargo payment since game start; 16 bit fractional part.
Definition: economy_type.h:52
ConstructionSettings::tree_frame_burst
uint16_t tree_frame_burst
how many trees may, over a short period, be planted?
Definition: settings_type.h:404
LocaleSettings::units_velocity_nautical
uint8_t units_velocity_nautical
unit system for velocity of ships and aircraft
Definition: settings_type.h:270
_network_server
bool _network_server
network-server is active
Definition: network.cpp:66
Object::location
TileArea location
Location of the object.
Definition: object_base.h:26
SLV_194
@ SLV_194
194 26881 v1.5
Definition: saveload.h:276
SetTunnelBridgeReservation
void SetTunnelBridgeReservation(Tile t, bool b)
Set the reservation state of the rail tunnel/bridge.
Definition: tunnelbridge_map.h:104
SLV_133
@ SLV_133
133 18674
Definition: saveload.h:202
GB
constexpr static debug_inline uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
Definition: bitmath_func.hpp:32
SIG_ELECTRIC
@ SIG_ELECTRIC
Light signal.
Definition: signal_type.h:17
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
RailType
RailType
Enumeration for all possible railtypes.
Definition: rail_type.h:27
_old_vds
VehicleDefaultSettings _old_vds
Used for loading default vehicles settings from old savegames.
Definition: settings.cpp:59
TREE_GROUND_SHORE
@ TREE_GROUND_SHORE
shore
Definition: tree_map.h:56
Pool::PoolItem::index
Tindex index
Index of this pool item.
Definition: pool_type.hpp:238
RVSB_IN_ROAD_STOP
@ RVSB_IN_ROAD_STOP
The vehicle is in a road stop.
Definition: roadveh.h:49
CargoSpec::Get
static CargoSpec * Get(size_t index)
Retrieve cargo details for the given cargo ID.
Definition: cargotype.h:134
DiagDirToAxis
Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
Definition: direction_func.h:214
VEH_TRAIN
@ VEH_TRAIN
Train vehicle type.
Definition: vehicle_type.h:24
LinkGraphSettings::distribution_mail
DistributionType distribution_mail
distribution type for mail
Definition: settings_type.h:546
TileAddXY
TileIndex TileAddXY(TileIndex tile, int x, int y)
Adds a given offset to a tile.
Definition: map_func.h:479
SlErrorCorrupt
void SlErrorCorrupt(const std::string &msg)
Error handler for corrupt savegames.
Definition: saveload.cpp:351
GetIndustryGfx
IndustryGfx GetIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile.
Definition: industry_map.h:137
SLV_ECONOMY_DATE
@ SLV_ECONOMY_DATE
326 PR#10700 Split calendar and economy timers and dates.
Definition: saveload.h:371
SLV_83
@ SLV_83
83 11589
Definition: saveload.h:142
GameSettings::difficulty
DifficultySettings difficulty
settings related to the difficulty
Definition: settings_type.h:593
GetTileZ
int GetTileZ(TileIndex tile)
Get bottom height of the tile.
Definition: tile_map.cpp:116
INVALID_TILE
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
Definition: tile_type.h:95
CLEAR_GRASS
@ CLEAR_GRASS
0-3
Definition: clear_map.h:20
VehicleSettings::plane_crashes
uint8_t plane_crashes
number of plane crashes, 0 = none, 1 = reduced, 2 = normal
Definition: settings_type.h:509
IsOilRig
bool IsOilRig(Tile t)
Is tile t part of an oilrig?
Definition: station_map.h:361
SLV_198
@ SLV_198
198 PR#6763 Switch town growth rate and counter to actual game ticks
Definition: saveload.h:281
SLV_184
@ SLV_184
184 25508 Unit localisation split
Definition: saveload.h:263
SLV_96
@ SLV_96
96 13226
Definition: saveload.h:158
Waypoint
Representation of a waypoint.
Definition: waypoint_base.h:23
MP_RAILWAY
@ MP_RAILWAY
A railway.
Definition: tile_type.h:49
TileHash
uint TileHash(uint x, uint y)
Calculate a hash value from a tile position.
Definition: tile_map.h:324
SLV_ROAD_TYPES
@ SLV_ROAD_TYPES
214 PR#6811 NewGRF road types.
Definition: saveload.h:300
OBJECT_STATUE
static const ObjectType OBJECT_STATUE
Statue in towns.
Definition: object_type.h:18
VF_LOADING_FINISHED
@ VF_LOADING_FINISHED
Vehicle has finished loading.
Definition: vehicle_base.h:45
EconomySettings::timekeeping_units
TimekeepingUnits timekeeping_units
time units to use for the game economy, either calendar or wallclock
Definition: settings_type.h:536
VEH_ROAD
@ VEH_ROAD
Road vehicle type.
Definition: vehicle_type.h:25
TILE_SIZE
static const uint TILE_SIZE
Tile size in world coordinates.
Definition: tile_type.h:15
DiagDirection
DiagDirection
Enumeration for diagonal directions.
Definition: direction_type.h:73
GCS_NOT_FOUND
@ GCS_NOT_FOUND
GRF file was not found in the local cache.
Definition: newgrf_config.h:37
Tile
Wrapper class to abstract away the way the tiles are stored.
Definition: map_func.h:25
UpdateOldAircraft
void UpdateOldAircraft()
need to be called to load aircraft from old version
Definition: vehicle_sl.cpp:164
IsLevelCrossingTile
bool IsLevelCrossingTile(Tile t)
Return whether a tile is a level crossing tile.
Definition: road_map.h:95
ClearBridgeMiddle
void ClearBridgeMiddle(Tile t)
Removes bridges from the given, that is bridges along the X and Y axis.
Definition: bridge_map.h:103
HasTownOwnedRoad
bool HasTownOwnedRoad(Tile t)
Checks if given tile has town owned road.
Definition: road_map.h:280
SLV_138
@ SLV_138
138 18942 1.0.x
Definition: saveload.h:208
CeilDiv
constexpr uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
Definition: math_func.hpp:320
SLV_131
@ SLV_131
131 18481
Definition: saveload.h:200
TimerGameEconomy::date_fract
static DateFract date_fract
Fractional part of the day.
Definition: timer_game_economy.h:38
SpecializedStation< Station, false >::Get
static Station * Get(size_t index)
Gets station with given index.
Definition: base_station_base.h:254
IsLevelCrossing
bool IsLevelCrossing(Tile t)
Return whether a tile is a level crossing.
Definition: road_map.h:85
_settings_client
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:56
CargoSpec
Specification of a cargo type.
Definition: cargotype.h:71
MP_INDUSTRY
@ MP_INDUSTRY
Part of an industry.
Definition: tile_type.h:56
SLV_192
@ SLV_192
192 26700 FS#6066 Fix saving of order backups
Definition: saveload.h:274
GetCompanyRoadTypes
RoadTypes GetCompanyRoadTypes(CompanyID company, bool introduces)
Get the road types the given company can build.
Definition: road.cpp:199
OrthogonalTileArea::Add
void Add(TileIndex to_add)
Add a single tile to a tile area; enlarge if needed.
Definition: tilearea.cpp:43
PathfinderSettings::wait_for_pbs_path
uint8_t wait_for_pbs_path
how long to wait for a path reservation.
Definition: settings_type.h:473
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > >
AxisToDirection
Direction AxisToDirection(Axis a)
Converts an Axis to a Direction.
Definition: direction_func.h:249
DifficultySettings::number_towns
uint8_t number_towns
the amount of towns
Definition: settings_type.h:101
RoadVehicle::roadtype
RoadType roadtype
NOSAVE: Roadtype of this vehicle.
Definition: roadveh.h:116
GoodsEntry::status
uint8_t status
Status of this cargo, see GoodsEntryStatus.
Definition: station_base.h:217
SLV_SERVE_NEUTRAL_INDUSTRIES
@ SLV_SERVE_NEUTRAL_INDUSTRIES
210 PR#7234 Company stations can serve industries with attached neutral stations.
Definition: saveload.h:296
_animated_tiles
std::vector< TileIndex > _animated_tiles
The table/list with animated tiles.
Definition: animated_tile.cpp:19
Engine
Definition: engine_base.h:37
ConstructionSettings::max_tunnel_length
uint16_t max_tunnel_length
maximum length of tunnels
Definition: settings_type.h:387
Vehicle
Vehicle data structure.
Definition: vehicle_base.h:244
Industry
Defines the internal data of a functional industry.
Definition: industry.h:68
GetRailType
RailType GetRailType(Tile t)
Gets the rail type of the given tile.
Definition: rail_map.h:115
SLV_36
@ SLV_36
36 6624
Definition: saveload.h:86
SLV_LAST_LOADING_TICK
@ SLV_LAST_LOADING_TICK
301 PR#9693 Store tick of last loading for vehicles.
Definition: saveload.h:341
Vehicle::owner
Owner owner
Which company owns the vehicle?
Definition: vehicle_base.h:309
SetSignalHandlers
static void SetSignalHandlers()
Replaces signal handlers of SIGSEGV and SIGABRT and stores pointers to original handlers in memory.
Definition: afterload.cpp:326
StartupEngines
void StartupEngines()
Start/initialise all our engines.
Definition: engine.cpp:763
ConstructionSettings::max_bridge_length
uint16_t max_bridge_length
maximum length of bridges
Definition: settings_type.h:385
TimerGameConst< struct Calendar >::DEF_END_YEAR
static constexpr TimerGame< struct Calendar >::Year DEF_END_YEAR
The default scoring end year.
Definition: timer_game_common.h:181
SLV_25
@ SLV_25
25 4259
Definition: saveload.h:73
INVALID_DIR
@ INVALID_DIR
Flag for an invalid direction.
Definition: direction_type.h:35
GetSlopePixelZ
int GetSlopePixelZ(int x, int y, bool ground_vehicle)
Return world Z coordinate of a given point of a tile.
Definition: landscape.cpp:303
GameCreationSettings::landscape
uint8_t landscape
the landscape we're currently in
Definition: settings_type.h:368
BaseStation::owner
Owner owner
The owner of this station.
Definition: base_station_base.h:69
SLV_143
@ SLV_143
143 20048
Definition: saveload.h:214
AIR_AIRCRAFT
@ AIR_AIRCRAFT
an airplane
Definition: aircraft.h:32
MP_ROAD
@ MP_ROAD
A tile with road (or tram tracks)
Definition: tile_type.h:50
TOWN_GROWTH_RATE_NONE
static const uint16_t TOWN_GROWTH_RATE_NONE
Special value for Town::growth_rate to disable town growth.
Definition: town.h:35
TCGM_ORIGINAL
@ TCGM_ORIGINAL
Original algorithm (quadratic cargo by population)
Definition: town_type.h:105
Tile::m7
debug_inline uint8_t & m7()
Primarily used for newgrf support.
Definition: map_func.h:185
_saveload_crash_with_missing_newgrfs
static bool _saveload_crash_with_missing_newgrfs
Was the saveload crash because of missing NewGRFs?
Definition: afterload.cpp:344
GetTargetAirportIfValid
Station * GetTargetAirportIfValid(const Aircraft *v)
Returns aircraft's target station if v->target_airport is a valid station with airport.
Definition: aircraft_cmd.cpp:2148
SetSignalStates
void SetSignalStates(Tile tile, uint state)
Set the states of the signals (Along/AgainstTrackDir)
Definition: rail_map.h:352
OrthogonalTileArea::h
uint16_t h
The height of the area.
Definition: tilearea_type.h:21
IsLock
bool IsLock(Tile t)
Is there a lock on a given water tile?
Definition: water_map.h:306
Vehicle::vehstatus
uint8_t vehstatus
Status.
Definition: vehicle_base.h:354
Object::IncTypeCount
static void IncTypeCount(ObjectType type)
Increment the count of objects for this type.
Definition: object_base.h:43
TAE_MAIL
@ TAE_MAIL
Cargo behaves mail-like.
Definition: cargotype.h:25
ShowNewGRFError
void ShowNewGRFError()
Show the first NewGRF error we can find.
Definition: newgrf_gui.cpp:45
GetCrossingRoadBits
RoadBits GetCrossingRoadBits(Tile tile)
Get the road bits of a level crossing.
Definition: road_map.h:348
Debug
#define Debug(category, level, format_string,...)
Ouptut a line of debugging information.
Definition: debug.h:37
StationType
StationType
Station types.
Definition: station_type.h:31
GCF_COMPATIBLE
@ GCF_COMPATIBLE
GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches)
Definition: newgrf_config.h:26
LocaleSettings::units_velocity
uint8_t units_velocity
unit system for velocity of trains and road vehicles
Definition: settings_type.h:269
MakeSea
void MakeSea(Tile t)
Make a sea tile.
Definition: water_map.h:423
SLV_16
@ SLV_16
16.0 2817 16.1 3155
Definition: saveload.h:60
Vehicle::x_pos
int32_t x_pos
x coordinate.
Definition: vehicle_base.h:304
SLV_SHIPS_STOP_IN_LOCKS
@ SLV_SHIPS_STOP_IN_LOCKS
206 PR#7150 Ship/lock movement changes.
Definition: saveload.h:291
SLV_6
@ SLV_6
6.0 1721 6.1 1768
Definition: saveload.h:46
GroundVehicle::gv_flags
uint16_t gv_flags
Definition: ground_vehicle.hpp:84
GameSettings::game_creation
GameCreationSettings game_creation
settings used during the creation of a game (map)
Definition: settings_type.h:594
GetTileTrackStatus
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
Returns information about trackdirs and signal states.
Definition: landscape.cpp:553
SpecializedStation< Station, false >::Iterate
static Pool::IterateWrapper< Station > Iterate(size_t from=0)
Returns an iterable ensemble of all valid stations of type T.
Definition: base_station_base.h:305
AI::StartNew
static void StartNew(CompanyID company)
Start a new AI company.
Definition: ai_core.cpp:36
TRANSPORT_ROAD
@ TRANSPORT_ROAD
Transport by road vehicle.
Definition: transport_type.h:28
LinkGraphSettings::recalc_interval
uint16_t recalc_interval
time (in days) between subsequent checks for link graphs to be calculated.
Definition: settings_type.h:544
ConvertFromOldCompanyManagerFace
CompanyManagerFace ConvertFromOldCompanyManagerFace(uint32_t face)
Converts an old company manager's face format to the new company manager's face format.
Definition: company_sl.cpp:45
IsCoast
bool IsCoast(Tile t)
Is it a coast tile?
Definition: water_map.h:204
SetCrossingReservation
void SetCrossingReservation(Tile t, bool b)
Set the reservation state of the rail crossing.
Definition: road_map.h:393
GetOtherShipDepotTile
TileIndex GetOtherShipDepotTile(Tile t)
Get the other tile of the ship depot.
Definition: water_map.h:281
DiagDirToDiagTrackBits
TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal track bits incidating with that diagdir.
Definition: track_func.h:524
RATING_INITIAL
@ RATING_INITIAL
initial rating
Definition: town_type.h:44
Aircraft
Aircraft, helicopters, rotors and their shadows belong to this class.
Definition: aircraft.h:74
GVF_GOINGDOWN_BIT
@ GVF_GOINGDOWN_BIT
Vehicle is currently going downhill. (Cached track information for acceleration)
Definition: ground_vehicle.hpp:56
GetTileType
static debug_inline TileType GetTileType(Tile tile)
Get the tiletype of a given tile.
Definition: tile_map.h:96
MakeClear
void MakeClear(Tile t, ClearGround g, uint density)
Make a clear tile.
Definition: clear_map.h:259
TRACK_BIT_NONE
@ TRACK_BIT_NONE
No track.
Definition: track_type.h:36
INDUSTRYBEH_PLANT_ON_BUILT
@ INDUSTRYBEH_PLANT_ON_BUILT
Fields are planted around when built (all farms)
Definition: industrytype.h:63
ChangeTileOwner
void ChangeTileOwner(TileIndex tile, Owner old_owner, Owner new_owner)
Change the owner of a tile.
Definition: landscape.cpp:564
RVS_DRIVE_SIDE
@ RVS_DRIVE_SIDE
Only used when retrieving move data.
Definition: roadveh.h:44
GoodsEntry::cargo
StationCargoList cargo
The cargo packets of cargo waiting in this station.
Definition: station_base.h:210
Pool::MAX_SIZE
static constexpr size_t MAX_SIZE
Make template parameter accessible from outside.
Definition: pool_type.hpp:84
SLV_69
@ SLV_69
69 10319
Definition: saveload.h:125
Group
Group data.
Definition: group.h:72
FreeUnitIDGenerator::UseID
UnitID UseID(UnitID index)
Use a unit number.
Definition: vehicle.cpp:1863
IsDock
bool IsDock(Tile t)
Is tile t a dock tile?
Definition: station_map.h:372
VehicleSettings::train_acceleration_model
uint8_t train_acceleration_model
realistic acceleration for trains
Definition: settings_type.h:493
IsTruckStop
bool IsTruckStop(Tile t)
Is the station at t a truck stop?
Definition: station_map.h:180
SetBridgeMiddle
void SetBridgeMiddle(Tile t, Axis a)
Set that there is a bridge over the given axis.
Definition: bridge_map.h:114
ROAD_TILE_NORMAL
@ ROAD_TILE_NORMAL
Normal road.
Definition: road_map.h:23
ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS
@ ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS
The vehicle will not stop at any stations it passes except the destination.
Definition: order_type.h:74
TransportType
TransportType
Available types of transport.
Definition: transport_type.h:19
GRFIdentifier
Basic data to distinguish a GRF.
Definition: newgrf_config.h:83
FileToSaveLoad::abstract_ftype
AbstractFileType abstract_ftype
Abstract type of file (scenario, heightmap, etc).
Definition: saveload.h:405
SLV_119
@ SLV_119
119 16242
Definition: saveload.h:185
GameSettings::pf
PathfinderSettings pf
settings for all pathfinders
Definition: settings_type.h:600
SLV_VELOCITY_NAUTICAL
@ SLV_VELOCITY_NAUTICAL
305 PR#10594 Separation of land and nautical velocity (knots!)
Definition: saveload.h:346
DistanceManhattan
uint DistanceManhattan(TileIndex t0, TileIndex t1)
Gets the Manhattan distance between the two given tiles.
Definition: map.cpp:140
UpdateAllTownVirtCoords
void UpdateAllTownVirtCoords()
Update the virtual coords needed to draw the town sign for all towns.
Definition: town_cmd.cpp:427
VS_HIDDEN
@ VS_HIDDEN
Vehicle is not visible.
Definition: vehicle_base.h:33
DIAGDIR_NW
@ DIAGDIR_NW
Northwest.
Definition: direction_type.h:78
SLV_26
@ SLV_26
26 4466
Definition: saveload.h:74
SLV_114
@ SLV_114
114 15601
Definition: saveload.h:179
COMPANY_FIRST
@ COMPANY_FIRST
First company, same as owner.
Definition: company_type.h:22
IsRailDepot
static debug_inline bool IsRailDepot(Tile t)
Is this rail tile a rail depot?
Definition: rail_map.h:95
SLV_142
@ SLV_142
142 20003
Definition: saveload.h:213
SLV_188
@ SLV_188
188 26169 v1.4 FS#5831 Unify RV travel time
Definition: saveload.h:268
EconomySettings::station_noise_level
bool station_noise_level
build new airports when the town noise level is still within accepted limits
Definition: settings_type.h:532
SLV_REPAIR_OBJECT_DOCKING_TILES
@ SLV_REPAIR_OBJECT_DOCKING_TILES
299 PR#9594 v12.0 Fixing issue with docking tiles overlapping objects.
Definition: saveload.h:338
TILE_UNIT_MASK
static const uint TILE_UNIT_MASK
For masking in/out the inner-tile world coordinate units.
Definition: tile_type.h:16
VEH_INVALID
@ VEH_INVALID
Non-existing type of vehicle.
Definition: vehicle_type.h:35
SLV_172
@ SLV_172
172 23947
Definition: saveload.h:249
StationSettings::serve_neutral_industries
bool serve_neutral_industries
company stations can serve industries with attached neutral stations
Definition: settings_type.h:566
Subsidy
Struct about subsidies, offered and awarded.
Definition: subsidy_base.h:22
GetStationGfx
StationGfx GetStationGfx(Tile t)
Get the station graphics of this tile.
Definition: station_map.h:68
DIAGDIR_SE
@ DIAGDIR_SE
Southeast.
Definition: direction_type.h:76
IsBayRoadStopTile
bool IsBayRoadStopTile(Tile t)
Is tile t a bay (non-drive through) road stop station?
Definition: station_map.h:266
IsGoodGRFConfigList
GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig)
Check if all GRFs in the GRF config from a savegame can be loaded.
Definition: newgrf_config.cpp:465
Tile::m2
debug_inline uint16_t & m2()
Primarily used for indices to towns, industries and stations.
Definition: map_func.h:125
SLV_124
@ SLV_124
124 16993
Definition: saveload.h:191
IsBridge
bool IsBridge(Tile t)
Checks if this is a bridge, instead of a tunnel.
Definition: bridge_map.h:24
BSWAP32
static uint32_t BSWAP32(uint32_t x)
Perform a 32 bits endianness bitswap on x.
Definition: bitmath_func.hpp:364
IsWater
bool IsWater(Tile t)
Is it a plain water tile?
Definition: water_map.h:150
SLV_98
@ SLV_98
98 13375
Definition: saveload.h:160
_new_competitor_timeout
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;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, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID);})
Start a new competitor company if possible.
SLV_159
@ SLV_159
159 21962
Definition: saveload.h:233
SLV_125
@ SLV_125
125 17113
Definition: saveload.h:193
GRFConfig
Information about GRF, used in the game and (part of it) in savegames.
Definition: newgrf_config.h:147
SetStationGfx
void SetStationGfx(Tile t, StationGfx gfx)
Set the station graphics of this tile.
Definition: station_map.h:80
StationGfx
uint8_t StationGfx
Copy from station_map.h.
Definition: newgrf_airport.h:22
SLV_148
@ SLV_148
148 20659
Definition: saveload.h:220
BaseStation::train_station
TileArea train_station
Tile area the train 'station' part covers.
Definition: base_station_base.h:84
OWNER_NONE
@ OWNER_NONE
The tile has no ownership.
Definition: company_type.h:25
ObjectType
uint16_t ObjectType
Types of objects.
Definition: object_type.h:14
Map::Iterate
static IterateWrapper Iterate()
Returns an iterable ensemble of all Tiles.
Definition: map_func.h:363
Industry::GetByTile
static Industry * GetByTile(TileIndex tile)
Get the industry of the given tile.
Definition: industry.h:240
WATER_TILE_CLEAR
@ WATER_TILE_CLEAR
Plain water.
Definition: water_map.h:40
FormatArrayAsHex
std::string FormatArrayAsHex(std::span< const uint8_t > data)
Format a byte array into a continuous hex string.
Definition: string.cpp:81
GSF_FAKE_TOWNS
@ GSF_FAKE_TOWNS
Fake town GrfSpecFeature for NewGRF debugging (parent scope)
Definition: newgrf.h:91
TrackBits
TrackBits
Allow incrementing of Track variables.
Definition: track_type.h:35
CalcClosestTownFromTile
Town * CalcClosestTownFromTile(TileIndex tile, uint threshold=UINT_MAX)
Return the town closest to the given tile within threshold.
Definition: town_cmd.cpp:3844
SLV_CONSISTENT_PARTIAL_Z
@ SLV_CONSISTENT_PARTIAL_Z
306 PR#10570 Conversion from an inconsistent partial Z calculation for slopes, to one that is (more) ...
Definition: saveload.h:347
Station::RecomputeCatchmentForAll
static void RecomputeCatchmentForAll()
Recomputes catchment of all stations.
Definition: station.cpp:537
SLV_56
@ SLV_56
56 9667
Definition: saveload.h:110
DifficultySettings::competitors_interval
uint16_t competitors_interval
the interval (in minutes) between adding competitors
Definition: settings_type.h:100
GVF_GOINGUP_BIT
@ GVF_GOINGUP_BIT
Vehicle is currently going uphill. (Cached track information for acceleration)
Definition: ground_vehicle.hpp:55
RoadTypes
RoadTypes
The different roadtypes we support, but then a bitmask of them.
Definition: road_type.h:38
BaseStation::rect
StationRect rect
NOSAVE: Station spread out rectangle maintained by StationRect::xxx() functions.
Definition: base_station_base.h:85
NEW_HOUSE_OFFSET
static const HouseID NEW_HOUSE_OFFSET
Offset for new houses.
Definition: house.h:28
SLV_EXTEND_INDUSTRY_CARGO_SLOTS
@ SLV_EXTEND_INDUSTRY_CARGO_SLOTS
202 PR#6867 Increase industry cargo slots to 16 in, 16 out
Definition: saveload.h:286
Vehicle::tile
TileIndex tile
Current tile index.
Definition: vehicle_base.h:264
TOWN_GROWTH_DESERT
static const uint TOWN_GROWTH_DESERT
The town needs the cargo for growth when on desert (any amount)
Definition: town.h:34
SLV_111
@ SLV_111
111 15190
Definition: saveload.h:176
SLV_135
@ SLV_135
135 18719
Definition: saveload.h:205
DIAGDIR_BEGIN
@ DIAGDIR_BEGIN
Used for iterations.
Definition: direction_type.h:74
MP_OBJECT
@ MP_OBJECT
Contains objects such as transmitters and owned land.
Definition: tile_type.h:58
ConstructionSettings::map_height_limit
uint8_t map_height_limit
the maximum allowed heightlevel
Definition: settings_type.h:382
VS_CRASHED
@ VS_CRASHED
Vehicle is crashed.
Definition: vehicle_base.h:40
ConstructionSettings::clear_frame_burst
uint16_t clear_frame_burst
how many tiles may, over a short period, be cleared?
Definition: settings_type.h:402
SLV_166
@ SLV_166
166 23415
Definition: saveload.h:242
GRFIdentifier::md5sum
MD5Hash md5sum
MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF)
Definition: newgrf_config.h:85
SLV_81
@ SLV_81
81 11244
Definition: saveload.h:140
SpecializedStation< Station, false >::IsExpected
static bool IsExpected(const BaseStation *st)
Helper for checking whether the given station is of this type.
Definition: base_station_base.h:235
WATER_CLASS_INVALID
@ WATER_CLASS_INVALID
Used for industry tiles on land (also for oilrig if newgrf says so).
Definition: water_map.h:51
MP_WATER
@ MP_WATER
Water tile.
Definition: tile_type.h:54
UpdateAirportsNoise
void UpdateAirportsNoise()
Recalculate the noise generated by the airports of each town.
Definition: station_cmd.cpp:2512
CargoPayment
Helper class to perform the cargo payment.
Definition: economy_base.h:24
ReverseDiagDir
DiagDirection ReverseDiagDir(DiagDirection d)
Returns the reverse direction of the given DiagDirection.
Definition: direction_func.h:118
SetFence
void SetFence(Tile t, DiagDirection side, uint h)
Sets the type of fence (and whether there is one) for the given border.
Definition: clear_map.h:240
MakeVoid
void MakeVoid(Tile t)
Make a nice void tile ;)
Definition: void_map.h:19
GetRawClearGround
ClearGround GetRawClearGround(Tile t)
Get the type of clear tile but never return CLEAR_SNOW.
Definition: clear_map.h:47
AfterLoadStoryBook
void AfterLoadStoryBook()
Called after load to trash broken pages.
Definition: story_sl.cpp:20
Vehicle::current_order
Order current_order
The current order (+ status, like: loading)
Definition: vehicle_base.h:356
CopyFromOldName
std::string CopyFromOldName(StringID id)
Copy and convert old custom names to UTF-8.
Definition: strings_sl.cpp:61
INDUSTRYBEH_BUILT_ONWATER
@ INDUSTRYBEH_BUILT_ONWATER
is built on water (oil rig)
Definition: industrytype.h:59
VEH_SHIP
@ VEH_SHIP
Ship vehicle type.
Definition: vehicle_type.h:26
_tunnel_visibility_frame
const uint8_t _tunnel_visibility_frame[DIAGDIR_END]
Frame when a vehicle should be hidden in a tunnel with a certain direction.
IsShipDepotTile
bool IsShipDepotTile(Tile t)
Is it a ship depot tile?
Definition: water_map.h:235
SLV_58
@ SLV_58
58 9762
Definition: saveload.h:112
DiagDirToDir
Direction DiagDirToDir(DiagDirection dir)
Convert a DiagDirection to a Direction.
Definition: direction_func.h:182
GetNorthernBridgeEnd
TileIndex GetNorthernBridgeEnd(TileIndex t)
Finds the northern end of a bridge starting at a middle tile.
Definition: bridge_map.cpp:39
Object
An object, such as transmitter, on the map.
Definition: object_base.h:23
Station::airport
Airport airport
Tile area the airport covers.
Definition: station_base.h:453
TL_RANDOM
@ TL_RANDOM
Random town layout.
Definition: town_type.h:87
_pause_mode
PauseMode _pause_mode
The current pause mode.
Definition: gfx.cpp:50
DIAGDIR_SW
@ DIAGDIR_SW
Southwest.
Definition: direction_type.h:77
HasStationTileRail
bool HasStationTileRail(Tile t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
Definition: station_map.h:146
TrimIndustryAcceptedProduced
void TrimIndustryAcceptedProduced(Industry *ind)
Remove unused industry accepted/produced slots – entries after the last slot with valid cargo.
Definition: industry_cmd.cpp:3230
SLV_GS_INDUSTRY_CONTROL
@ SLV_GS_INDUSTRY_CONTROL
287 PR#7912 and PR#8115 GS industry control.
Definition: saveload.h:324
LOCK_PART_MIDDLE
@ LOCK_PART_MIDDLE
Middle part of a lock.
Definition: water_map.h:74
SaveloadCrashWithMissingNewGRFs
bool SaveloadCrashWithMissingNewGRFs()
Did loading the savegame cause a crash? If so, were NewGRFs missing?
Definition: afterload.cpp:351
TileDiffXY
TileIndexDiff TileDiffXY(int x, int y)
Calculates an offset for the given coordinate(-offset).
Definition: map_func.h:401
_settings_game
GameSettings _settings_game
Game settings of a running game or the scenario editor.
Definition: settings.cpp:57
RVS_ENTERED_STOP
@ RVS_ENTERED_STOP
Only set when a vehicle has entered the stop.
Definition: roadveh.h:43
SLV_MULTITILE_DOCKS
@ SLV_MULTITILE_DOCKS
216 PR#7380 Multiple docks per station.
Definition: saveload.h:303
GetAircraftFlightLevelBounds
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...
Definition: aircraft_cmd.cpp:730
CompanyProperties::settings
CompanySettings settings
settings specific for each company
Definition: company_base.h:122
IsBuoyTile
bool IsBuoyTile(Tile t)
Is tile t a buoy tile?
Definition: station_map.h:403
IsBridgeTile
bool IsBridgeTile(Tile t)
checks if there is a bridge on this tile
Definition: bridge_map.h:35
RoadType
RoadType
The different roadtypes we support.
Definition: road_type.h:25
SetAircraftPosition
void SetAircraftPosition(Aircraft *v, int x, int y, int z)
Set aircraft position.
Definition: aircraft_cmd.cpp:534
GameSettings::economy
EconomySettings economy
settings to change the economy
Definition: settings_type.h:603
VS_STOPPED
@ VS_STOPPED
Vehicle is stopped by the player.
Definition: vehicle_base.h:34
Object::type
ObjectType type
Type of the object.
Definition: object_base.h:24
SLV_91
@ SLV_91
91 12347
Definition: saveload.h:152
SLV_VEHICLE_ECONOMY_AGE
@ SLV_VEHICLE_ECONOMY_AGE
334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age
Definition: saveload.h:380
SLV_182
@ SLV_182
182 25115 FS#5492, r25259, r25296 Goal status
Definition: saveload.h:261
SLV_EXTEND_RAILTYPES
@ SLV_EXTEND_RAILTYPES
200 PR#6805 Extend railtypes to 64, adding uint16_t to map array.
Definition: saveload.h:284
ClearAllTownCachedNames
void ClearAllTownCachedNames()
Clear the cached_name of all towns.
Definition: town_cmd.cpp:435
SLV_165
@ SLV_165
165 23304
Definition: saveload.h:241
IsSavegameVersionBeforeOrAt
bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major)
Checks whether the savegame is below or at major.
Definition: saveload.h:1248
GameCreationSettings::starting_year
TimerGameCalendar::Year starting_year
starting date
Definition: settings_type.h:353
Company::IsValidAiID
static bool IsValidAiID(size_t index)
Is this company a valid company, controlled by the computer (a NoAI program)?
Definition: company_base.h:159
Train
'Train' is either a loco or a wagon.
Definition: train.h:89
ConstructionSettings::freeform_edges
bool freeform_edges
allow terraforming the tiles at the map edges
Definition: settings_type.h:395
PathfinderSettings::wait_oneway_signal
uint8_t wait_oneway_signal
waitingtime in days before a oneway signal
Definition: settings_type.h:469
MoveWaypointsToBaseStations
void MoveWaypointsToBaseStations()
Perform all steps to upgrade from the old waypoints to the new version that uses station.
Definition: waypoint_sl.cpp:67
SLV_64
@ SLV_64
64 10006
Definition: saveload.h:119
DirToDiagDir
DiagDirection DirToDiagDir(Direction dir)
Convert a Direction to a DiagDirection.
Definition: direction_func.h:166
CopyTempEngineData
void CopyTempEngineData()
Copy data from temporary engine array into the real engine pool.
Definition: engine_sl.cpp:121
SetWaterClass
void SetWaterClass(Tile t, WaterClass wc)
Set the water class at a tile.
Definition: water_map.h:127
SLV_53
@ SLV_53
53 9316
Definition: saveload.h:106
GameCreationSettings::ending_year
TimerGameCalendar::Year ending_year
scoring end date
Definition: settings_type.h:354
SLV_31
@ SLV_31
31 5999
Definition: saveload.h:80
Gamelog::GRFRemove
void GRFRemove(uint32_t grfid)
Logs removal of a GRF.
Definition: gamelog.cpp:517
GetRoadTileType
static debug_inline RoadTileType GetRoadTileType(Tile t)
Get the type of the road tile.
Definition: road_map.h:52
SetTrackReservation
void SetTrackReservation(Tile t, TrackBits b)
Sets the reserved track bits of the tile.
Definition: rail_map.h:209
SLV_146
@ SLV_146
146 20446
Definition: saveload.h:218
_networking
bool _networking
are we in networking mode?
Definition: network.cpp:65
LocaleSettings::units_volume
uint8_t units_volume
unit system for volume
Definition: settings_type.h:273
GetTileOwner
Owner GetTileOwner(Tile tile)
Returns the owner of a tile.
Definition: tile_map.h:178
RVS_IN_ROAD_STOP
@ RVS_IN_ROAD_STOP
The vehicle is in a road stop.
Definition: roadveh.h:45
MP_TUNNELBRIDGE
@ MP_TUNNELBRIDGE
Tunnel entry/exit and bridge heads.
Definition: tile_type.h:57
UpdateAllSignVirtCoords
void UpdateAllSignVirtCoords()
Update the coordinates of all signs.
Definition: signs.cpp:59
MakeCanal
void MakeCanal(Tile t, Owner o, uint8_t random_bits)
Make a canal tile.
Definition: water_map.h:444
INVALID_ROADTYPE
@ INVALID_ROADTYPE
flag for invalid roadtype
Definition: road_type.h:30
TimerGameCalendar::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition: timer_game_calendar.cpp:66
Tile::m6
debug_inline uint8_t & m6()
General purpose.
Definition: map_func.h:173
VehicleDefaultSettings
Default settings for vehicles.
Definition: settings_type.h:574
GetHouseType
HouseID GetHouseType(Tile t)
Get the type of this house, which is an index into the house spec array.
Definition: town_map.h:60
IsDepotTile
bool IsDepotTile(Tile tile)
Is the given tile a tile with a depot on it?
Definition: depot_map.h:41
DIR_NW
@ DIR_NW
Northwest.
Definition: direction_type.h:33
GameSettings::linkgraph
LinkGraphSettings linkgraph
settings for link graph calculations
Definition: settings_type.h:604
SLV_164
@ SLV_164
164 23290
Definition: saveload.h:239
StationCargoList::AvailableCount
uint AvailableCount() const
Returns sum of cargo still available for loading at the sation.
Definition: cargopacket.h:588
SLV_ECONOMY_MODE_TIMEKEEPING_UNITS
@ SLV_ECONOMY_MODE_TIMEKEEPING_UNITS
327 PR#11341 Mode to display economy measurements in wallclock units.
Definition: saveload.h:372
TAE_PASSENGERS
@ TAE_PASSENGERS
Cargo behaves passenger-like.
Definition: cargotype.h:24
SLV_4
@ 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
Definition: saveload.h:37
MoveBuoysToWaypoints
void MoveBuoysToWaypoints()
Perform all steps to upgrade from the old station buoys to the new version that uses waypoints.
Definition: station_sl.cpp:45
SLV_103
@ SLV_103
103 14598
Definition: saveload.h:166
SpecializedStation< Station, false >::From
static Station * From(BaseStation *st)
Converts a BaseStation to SpecializedStation with type checking.
Definition: base_station_base.h:283
SetRailStationReservation
void SetRailStationReservation(Tile t, bool b)
Set the reservation state of the rail station.
Definition: station_map.h:564
_network_dedicated
bool _network_dedicated
are we a dedicated server?
Definition: network.cpp:68
TrackStatusToTrackBits
TrackBits TrackStatusToTrackBits(TrackStatus ts)
Returns the present-track-information of a TrackStatus.
Definition: track_func.h:363
Gamelog::PrintDebug
void PrintDebug(int level)
Prints gamelog to debug output.
Definition: gamelog.cpp:323
SLV_175
@ SLV_175
175 24136
Definition: saveload.h:253
FixupTrainLengths
void FixupTrainLengths()
Fixup old train spacing.
Definition: vehicle_sl.cpp:544
SetTileOwner
void SetTileOwner(Tile tile, Owner owner)
Sets the owner of a tile.
Definition: tile_map.h:198
Station::truck_stops
RoadStop * truck_stops
All the truck stops.
Definition: station_base.h:450
IndustrySpec
Defines the data structure for constructing industry.
Definition: industrytype.h:101
StartScripts
static void StartScripts()
Start the scripts.
Definition: afterload.cpp:544
CargoPacket::AfterLoad
static void AfterLoad()
Savegame conversion for cargopackets.
Definition: cargopacket_sl.cpp:23
UpdateNearestTownForRoadTiles
void UpdateNearestTownForRoadTiles(bool invalidate)
Updates cached nearest town for all road tiles.
Definition: road_cmd.cpp:1918
LocaleSettings::units_power
uint8_t units_power
unit system for power
Definition: settings_type.h:271
GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET
static const int GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET
The offset for the drive through parts.
Definition: station_map.h:36
TOWN_HOUSE_COMPLETED
static const uint8_t TOWN_HOUSE_COMPLETED
Simple value that indicates the house has reached the final stage of construction.
Definition: house.h:23
FindFirstCargoWithTownAcceptanceEffect
const CargoSpec * FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect)
Determines the first cargo with a certain town effect.
Definition: town_cmd.cpp:3018
GetStationType
StationType GetStationType(Tile t)
Get the station type of this tile.
Definition: station_map.h:44
LocaleSettings::units_weight
uint8_t units_weight
unit system for weight
Definition: settings_type.h:272
OWNER_TOWN
@ OWNER_TOWN
A town owns the tile, or a town is expanding.
Definition: company_type.h:24
SourceType::Town
@ Town
Source/destination is a town.
VehicleSettings::plane_speed
uint8_t plane_speed
divisor for speed of aircraft
Definition: settings_type.h:503
DisasterVehicle
Disasters, like submarines, skyrangers and their shadows, belong to this class.
Definition: disaster_vehicle.h:37
EconomySettings::town_cargogen_mode
TownCargoGenMode town_cargogen_mode
algorithm for generating cargo from houses,
Definition: settings_type.h:529
TownLayout
TownLayout
Town Layouts.
Definition: town_type.h:80
IsPlainRailTile
static debug_inline bool IsPlainRailTile(Tile t)
Checks whether the tile is a rail tile or rail tile with signals.
Definition: rail_map.h:60
MayHaveBridgeAbove
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 ...
Definition: afterload.cpp:535
DIR_NE
@ DIR_NE
Northeast.
Definition: direction_type.h:27
AXIS_X
@ AXIS_X
The X axis.
Definition: direction_type.h:117
RAIL_GROUND_WATER
@ RAIL_GROUND_WATER
Grass with a fence and shore or water on the free halftile.
Definition: rail_map.h:499
TRACK_BIT_WORMHOLE
@ TRACK_BIT_WORMHOLE
Bitflag for a wormhole (used for tunnels)
Definition: track_type.h:52
SLV_84
@ SLV_84
84 11822
Definition: saveload.h:143
Vehicle::direction
Direction direction
facing
Definition: vehicle_base.h:307
TileOffsByDiagDir
TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
Convert a DiagDirection to a TileIndexDiff.
Definition: map_func.h:565
SLV_INCREASE_STATION_TYPE_FIELD_SIZE
@ SLV_INCREASE_STATION_TYPE_FIELD_SIZE
337 PR#12572 Increase size of StationType field in map array
Definition: saveload.h:384
DifficultySettings::industry_density
uint8_t industry_density
The industry density.
Definition: settings_type.h:102
MP_TREES
@ MP_TREES
Tile got trees.
Definition: tile_type.h:52
Ticks::TOWN_GROWTH_TICKS
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).
Definition: timer_game_tick.h:83
UpdateAircraftCache
void UpdateAircraftCache(Aircraft *v, bool update_range=false)
Update cached values of an aircraft.
Definition: aircraft_cmd.cpp:603
VehicleSettings::roadveh_acceleration_model
uint8_t roadveh_acceleration_model
realistic acceleration for road vehicles
Definition: settings_type.h:494
Map::SizeX
static debug_inline uint SizeX()
Get the size of the map along the X.
Definition: map_func.h:270
AssignBit
constexpr T AssignBit(T &x, const uint8_t y, bool value)
Assigns a bit in a variable.
Definition: bitmath_func.hpp:200
SLV_120
@ SLV_120
120 16439
Definition: saveload.h:187
SLV_48
@ SLV_48
48 8935
Definition: saveload.h:100
TOWN_GROWTH_WINTER
static const uint TOWN_GROWTH_WINTER
The town only needs this cargo in the winter (any amount)
Definition: town.h:33
DT_MANUAL
@ DT_MANUAL
Manual distribution. No link graph calculations are run.
Definition: linkgraph_type.h:25
EconomySettings::infrastructure_maintenance
bool infrastructure_maintenance
enable monthly maintenance fee for owner infrastructure
Definition: settings_type.h:535
SLV_134
@ SLV_134
134 18703
Definition: saveload.h:203
IndustryBuildData::Reset
void Reset()
Completely reset the industry build data.
Definition: industry_cmd.cpp:2435
SLV_46
@ SLV_46
46 8705
Definition: saveload.h:98
SLV_94
@ SLV_94
94 12816
Definition: saveload.h:155
EconomySettings::allow_town_level_crossings
bool allow_town_level_crossings
towns are allowed to build level crossings
Definition: settings_type.h:534
MakeDefaultName
void MakeDefaultName(T *obj)
Set the default name for a depot/waypoint.
Definition: town.h:253
Ship
All ships have this type.
Definition: ship.h:24
AfterLoadVehicles
void AfterLoadVehicles(bool part_of_load)
Called after load to update coordinates.
Definition: vehicle_sl.cpp:255
GoodsEntry
Stores station stats for a single cargo.
Definition: station_base.h:166
SLV_45
@ SLV_45
45 8501
Definition: saveload.h:97
_current_company
CompanyID _current_company
Company currently doing an action.
Definition: company_cmd.cpp:53
Gamelog::TestMode
void TestMode()
Finds last stored game mode or landscape.
Definition: gamelog.cpp:446
TreeGround
TreeGround
Enumeration for ground types of tiles with trees.
Definition: tree_map.h:52
VehicleSettings::dynamic_engines
bool dynamic_engines
enable dynamic allocation of engine data
Definition: settings_type.h:505
SLV_34
@ SLV_34
34 6455
Definition: saveload.h:83
ShowScriptDebugWindowIfScriptError
void ShowScriptDebugWindowIfScriptError()
Open the AI debug window if one of the AI scripts has crashed.
Definition: script_gui.cpp:1343
Pool::PoolItem<&_town_pool >::Iterate
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Definition: pool_type.hpp:388
TimeoutTimer
A timeout timer will fire once after the interval.
Definition: timer.h:116
ROADTYPE_TRAM
@ ROADTYPE_TRAM
Trams.
Definition: road_type.h:28
Map::MaxY
static uint MaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
Definition: map_func.h:306
IsBuoy
bool IsBuoy(Tile t)
Is tile t a buoy tile?
Definition: station_map.h:393
TimerGameEconomy::year
static Year year
Current year, starting at 0.
Definition: timer_game_economy.h:35
ConnectMultiheadedTrains
void ConnectMultiheadedTrains()
Link front and rear multiheaded engines to each other This is done when loading a savegame.
Definition: vehicle_sl.cpp:34
OSL_PLATFORM_FAR_END
@ OSL_PLATFORM_FAR_END
Stop at the far end of the platform.
Definition: order_type.h:86
WATER_CLASS_CANAL
@ WATER_CLASS_CANAL
Canal.
Definition: water_map.h:49
SetHouseCompleted
void SetHouseCompleted(Tile t, bool status)
Mark this house as been completed.
Definition: town_map.h:157
PMB_PAUSED_NETWORK
@ PMB_PAUSED_NETWORK
Pause mode bits when paused for network reasons.
Definition: openttd.h:80
MP_VOID
@ MP_VOID
Invisible tiles at the SW and SE border.
Definition: tile_type.h:55
SLV_59
@ SLV_59
59 9779
Definition: saveload.h:113
RebuildSubsidisedSourceAndDestinationCache
void RebuildSubsidisedSourceAndDestinationCache()
Perform a full rebuild of the subsidies cache.
Definition: subsidy.cpp:135
Pool::PoolItem<&_town_pool >::GetNumItems
static size_t GetNumItems()
Returns number of valid items in the pool.
Definition: pool_type.hpp:369
GetCompanyRailTypes
RailTypes GetCompanyRailTypes(CompanyID company, bool introduces)
Get the rail types the given company can build.
Definition: rail.cpp:251
TL_BETTER_ROADS
@ TL_BETTER_ROADS
Extended original algorithm (min. 2 distance between roads)
Definition: town_type.h:83
SLV_24
@ SLV_24
24 4150
Definition: saveload.h:71
IsRailDepotTile
static debug_inline bool IsRailDepotTile(Tile t)
Is this tile rail tile and a rail depot?
Definition: rail_map.h:105
Economy::inflation_prices
uint64_t inflation_prices
Cumulated inflation of prices since game start; 16 bit fractional part.
Definition: economy_type.h:51
Backup::Restore
void Restore()
Restore the variable.
Definition: backup_type.hpp:110
SLV_106
@ SLV_106
106 14919
Definition: saveload.h:170
SpecializedVehicle< Train, Type >::From
static Train * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
Definition: vehicle_base.h:1215
Axis
Axis
Allow incrementing of DiagDirDiff variables.
Definition: direction_type.h:116
SLV_149
@ SLV_149
149 20832
Definition: saveload.h:221
TRANSPORT_RAIL
@ TRANSPORT_RAIL
Transport by train.
Definition: transport_type.h:27
SetDepotReservation
void SetDepotReservation(Tile t, bool b)
Set the reservation state of the depot.
Definition: rail_map.h:270
MakeShore
void MakeShore(Tile t)
Helper function to make a coast tile.
Definition: water_map.h:384
DeleteInvalidEngineNews
void DeleteInvalidEngineNews()
Remove engine announcements for invalid engines.
Definition: news_gui.cpp:963
SLV_50
@ SLV_50
50 8973
Definition: saveload.h:103
SLV_1
@ SLV_1
1.0 0.1.x, 0.2.x
Definition: saveload.h:33
AfterLoadLinkGraphs
void AfterLoadLinkGraphs()
Spawn the threads for running link graph calculations.
Definition: linkgraph_sl.cpp:232
ROAD_TILE_DEPOT
@ ROAD_TILE_DEPOT
Depot (one entrance)
Definition: road_map.h:25
SLV_78
@ SLV_78
78 11176
Definition: saveload.h:136
OrthogonalTileArea::tile
TileIndex tile
The base tile of the area.
Definition: tilearea_type.h:19
Gamelog::GetOverriddenIdentifier
const GRFIdentifier * GetOverriddenIdentifier(const GRFConfig *c)
Try to find the overridden GRF identifier of the given GRF.
Definition: gamelog.cpp:712
InvalidateWindowClassesData
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...
Definition: window.cpp:3225
SLV_SHIP_ACCELERATION
@ SLV_SHIP_ACCELERATION
329 PR#10734 Start using Vehicle's acceleration field for ships too.
Definition: saveload.h:374
_file_to_saveload
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
Definition: saveload.cpp:60
HasStationRail
bool HasStationRail(Tile t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint?
Definition: station_map.h:135
OWNER_WATER
@ OWNER_WATER
The tile/execution is done by "water".
Definition: company_type.h:26
OrderList
Shared order list linking together the linked list of orders and the list of vehicles sharing this or...
Definition: order_base.h:259
UpdateAllVirtCoords
void UpdateAllVirtCoords()
Update the viewport coordinates of all signs.
Definition: afterload.cpp:222
GenerateSavegameId
void GenerateSavegameId()
Generate an unique savegame ID.
Definition: misc.cpp:87
SLV_139
@ SLV_139
139 19346
Definition: saveload.h:209
GRFConfig::next
struct GRFConfig * next
NOSAVE: Next item in the linked list.
Definition: newgrf_config.h:174
Vehicle::cargo_payment
CargoPayment * cargo_payment
The cargo payment we're currently in.
Definition: vehicle_base.h:277
SLV_128
@ SLV_128
128 18281
Definition: saveload.h:196
ShipVehicleInfo::acceleration
uint8_t acceleration
Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick)
Definition: engine_type.h:70
HasSignals
bool HasSignals(Tile t)
Checks if a rail tile has signals.
Definition: rail_map.h:72
MarkTileDirtyByTile
void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
Mark a tile given by its index dirty for repaint.
Definition: viewport.cpp:2054
SetDockingTile
void SetDockingTile(Tile t, bool b)
Set the docking tile state of a tile.
Definition: water_map.h:364
SetRailType
void SetRailType(Tile t, RailType r)
Sets the rail type of the given tile.
Definition: rail_map.h:125
Economy::old_max_loan_unround_fract
uint16_t old_max_loan_unround_fract
Old: Fraction of the unrounded max loan.
Definition: economy_type.h:56
SLV_90
@ SLV_90
90 12293
Definition: saveload.h:151
SLV_136
@ SLV_136
136 18764
Definition: saveload.h:206
SLV_140
@ SLV_140
140 19382
Definition: saveload.h:211
SLV_TOWN_CARGOGEN
@ SLV_TOWN_CARGOGEN
208 PR#6965 New algorithms for town building cargo generation.
Definition: saveload.h:293
SLV_144
@ SLV_144
144 20334
Definition: saveload.h:215
SLV_2
@ SLV_2
2.0 0.3.0 2.1 0.3.1, 0.3.2
Definition: saveload.h:34
MP_STATION
@ MP_STATION
A tile of a station.
Definition: tile_type.h:53
GetRoadOwner
Owner GetRoadOwner(Tile t, RoadTramType rtt)
Get the owner of a specific road type.
Definition: road_map.h:234
SLV_21
@ SLV_21
21 3472 0.4.x
Definition: saveload.h:68
SLV_42
@ SLV_42
42 7573
Definition: saveload.h:93
SLV_43
@ SLV_43
43 7642
Definition: saveload.h:94
WC_COMPANY_INFRASTRUCTURE
@ WC_COMPANY_INFRASTRUCTURE
Company infrastructure overview; Window numbers:
Definition: window_type.h:581
DifficultySettings::max_loan
uint32_t max_loan
the maximum initial loan
Definition: settings_type.h:103
SpecializedStation< Station, false >::GetByTile
static Station * GetByTile(TileIndex tile)
Get the station belonging to a specific tile.
Definition: base_station_base.h:273
SetTileType
void SetTileType(Tile tile, TileType type)
Set the type of a tile.
Definition: tile_map.h:131
Pool::PoolItem<&_roadstop_pool >::CanAllocateItem
static bool CanAllocateItem(size_t n=1)
Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()
Definition: pool_type.hpp:309
IsHouseCompleted
bool IsHouseCompleted(Tile t)
Get the completion of this house.
Definition: town_map.h:146
SLV_177
@ SLV_177
177 24619
Definition: saveload.h:255
GetTunnelBridgeTransportType
TransportType GetTunnelBridgeTransportType(Tile t)
Tunnel: Get the transport type of the tunnel (road or rail) Bridge: Get the transport type of the bri...
Definition: tunnelbridge_map.h:39
VehicleSettings::disable_elrails
bool disable_elrails
when true, the elrails are disabled
Definition: settings_type.h:498
TimerGameConst< struct Economy >::MIN_YEAR
static constexpr TimerGame< struct Economy >::Year MIN_YEAR
The absolute minimum year in OTTD.
Definition: timer_game_common.h:176
Sign
Definition: signs_base.h:21
GetFirstPlayableCompanyID
CompanyID GetFirstPlayableCompanyID()
Get the index of the first available company.
Definition: company_cmd.cpp:1337
MAX_UVALUE
#define MAX_UVALUE(type)
The largest value that can be entered in a variable.
Definition: stdafx.h:343
Gamelog::Oldver
void Oldver()
Logs loading from savegame without gamelog.
Definition: gamelog.cpp:399
SLV_62
@ SLV_62
62 9905
Definition: saveload.h:117
DIAGDIR_END
@ DIAGDIR_END
Used for iterations.
Definition: direction_type.h:79
TRACK_UPPER
@ TRACK_UPPER
Track in the upper corner of the tile (north)
Definition: track_type.h:23
Direction
Direction
Defines the 8 directions on the map.
Definition: direction_type.h:24
SLV_82
@ SLV_82
82 11410
Definition: saveload.h:141
Economy::old_max_loan_unround
Money old_max_loan_unround
Old: Unrounded max loan.
Definition: economy_type.h:55
RecomputePrices
void RecomputePrices()
Computes all prices, payments and maximum loan.
Definition: economy.cpp:762
RailVehicleInfo::railtype
RailType railtype
Railtype, mangled if elrail is disabled.
Definition: engine_type.h:46
GameCreationSettings::town_name
uint8_t town_name
the town name generator used for town names
Definition: settings_type.h:367
TRACK_BIT_Y
@ TRACK_BIT_Y
Y-axis track.
Definition: track_type.h:38
PathfinderSettings::reverse_at_signals
bool reverse_at_signals
whether to reverse at signals at all
Definition: settings_type.h:468
SLV_153
@ SLV_153
153 21263
Definition: saveload.h:226
GfxLoadSprites
void GfxLoadSprites()
Initialise and load all the sprites.
Definition: gfxinit.cpp:326
BaseStation
Base class for all station-ish types.
Definition: base_station_base.h:59
SLV_183
@ SLV_183
183 25363 Cargodist
Definition: saveload.h:262
SLV_AI_START_DATE
@ SLV_AI_START_DATE
309 PR#10653 Removal of individual AI start dates and added a generic one.
Definition: saveload.h:350
TileIndex
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.
Definition: tile_type.h:87
SetRoadOwner
void SetRoadOwner(Tile t, RoadTramType rtt, Owner o)
Set the owner of a specific road type.
Definition: road_map.h:251
SLV_147
@ SLV_147
147 20621
Definition: saveload.h:219
TRACK_LOWER
@ TRACK_LOWER
Track in the lower corner of the tile (south)
Definition: track_type.h:24
SpecializedVehicle< RoadVehicle, Type >::Iterate
static Pool::IterateWrapper< RoadVehicle > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
Definition: vehicle_base.h:1284
SetTownIndex
void SetTownIndex(Tile t, TownID index)
Set the town index for a road or house tile.
Definition: town_map.h:35
GetOtherTunnelBridgeEnd
TileIndex GetOtherTunnelBridgeEnd(Tile t)
Determines type of the wormhole and returns its other end.
Definition: tunnelbridge_map.h:78
Vehicle::y_pos
int32_t y_pos
y coordinate.
Definition: vehicle_base.h:305
ClosestDepot
Structure to return information about the closest depot location, and whether it could be found.
Definition: vehicle_base.h:230
UpdateLevelCrossing
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).
Definition: train_cmd.cpp:1773
SetClearGroundDensity
void SetClearGroundDensity(Tile t, ClearGround type, uint density)
Sets ground type and density in one go, also sets the counter to 0.
Definition: clear_map.h:158
OrthogonalTileArea::w
uint16_t w
The width of the area.
Definition: tilearea_type.h:20
SLV_121
@ SLV_121
121 16694
Definition: saveload.h:188
UpdateHousesAndTowns
void UpdateHousesAndTowns()
Check and update town and house values.
Definition: town_sl.cpp:64
PathfinderSettings::wait_twoway_signal
uint8_t wait_twoway_signal
waitingtime in days before a twoway signal
Definition: settings_type.h:470
_grfconfig
GRFConfig * _grfconfig
First item in list of current GRF set up.
Definition: newgrf_config.cpp:164
SetLiftPosition
void SetLiftPosition(Tile t, uint8_t pos)
Set the position of the lift on this animated house.
Definition: town_map.h:136
TimerGameEconomy::SetDate
static void SetDate(Date date, DateFract fract)
Set the date.
Definition: timer_game_economy.cpp:81
Gamelog::TestRevision
void TestRevision()
Finds out if current revision is different than last revision stored in the savegame.
Definition: gamelog.cpp:425
saveload_internal.h
SLV_104
@ SLV_104
104 14735
Definition: saveload.h:167
Gamelog::GRFCompatible
void GRFCompatible(const GRFIdentifier *newg)
Logs loading compatible GRF (the same ID, but different MD5 hash)
Definition: gamelog.cpp:542
IndustrySpec::behaviour
IndustryBehaviour behaviour
How this industry will behave, and how others entities can use it.
Definition: industrytype.h:121
SLV_145
@ SLV_145
145 20376
Definition: saveload.h:217
Depot
Definition: depot_base.h:20
SLV_127
@ SLV_127
127 17439
Definition: saveload.h:195
IsStationTileBlocked
bool IsStationTileBlocked(Tile t)
Is tile t a blocked tile?
Definition: station_map.h:424
FixVehicleInclination
static uint FixVehicleInclination(Vehicle *v, Direction dir)
Fixes inclination of a vehicle.
Definition: afterload.cpp:480
Town
Town data structure.
Definition: town.h:54
RVSB_WORMHOLE
@ RVSB_WORMHOLE
The vehicle is in a tunnel and/or bridge.
Definition: roadveh.h:39
SLV_ENDING_YEAR
@ SLV_ENDING_YEAR
218 PR#7747 v1.10 Configurable ending year.
Definition: saveload.h:305
SLV_9
@ SLV_9
9.0 1909
Definition: saveload.h:50
MarkWholeScreenDirty
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Definition: gfx.cpp:1529
TileXY
static debug_inline TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
Definition: map_func.h:385
VF_PATHFINDER_LOST
@ VF_PATHFINDER_LOST
Vehicle's pathfinder is lost.
Definition: vehicle_base.h:52
GetTileMaxPixelZ
int GetTileMaxPixelZ(TileIndex tile)
Get top height of the tile.
Definition: tile_map.h:312
GF_REPLACE_PROTECTION
@ GF_REPLACE_PROTECTION
If set to true, the global autoreplace has no effect on the group.
Definition: group.h:66
TileHeight
static debug_inline uint TileHeight(Tile tile)
Returns the height of a tile.
Definition: tile_map.h:29
SpecializedStation< Station, false >::GetIfValid
static Station * GetIfValid(size_t index)
Returns station if the index is a valid index for this station type.
Definition: base_station_base.h:263
GameSettings::locale
LocaleSettings locale
settings related to used currency/unit system in the current game
Definition: settings_type.h:606
_road_stop_stop_frame
const uint8_t _road_stop_stop_frame[]
Table of road stop stop frames, when to stop at a road stop.
TimerGameConst< struct Calendar >::ORIGINAL_BASE_YEAR
static constexpr TimerGame< struct Calendar >::Year ORIGINAL_BASE_YEAR
The minimum starting year/base year of the original TTD.
Definition: timer_game_common.h:163
TILE_HEIGHT
static const uint TILE_HEIGHT
Height of a height level in world coordinate AND in pixels in #ZOOM_BASE.
Definition: tile_type.h:18
SLV_15
@ SLV_15
15.0 2499
Definition: saveload.h:59
UpdateCompanyLiveries
void UpdateCompanyLiveries(Company *c)
Update liveries for a company.
Definition: company_cmd.cpp:1053
TAE_WATER
@ TAE_WATER
Cargo behaves water-like.
Definition: cargotype.h:27
LocaleSettings::currency
uint8_t currency
currency we currently use
Definition: settings_type.h:268
SLV_LINKGRAPH_SECONDS
@ SLV_LINKGRAPH_SECONDS
308 PR#10610 Store linkgraph update intervals in seconds instead of days.
Definition: saveload.h:349
SlError
void SlError(StringID string, const std::string &extra_msg)
Error handler.
Definition: saveload.cpp:321
TFP_NONE
@ TFP_NONE
Normal operation.
Definition: train.h:38
SLV_NEWGRF_LAST_SERVICE
@ SLV_NEWGRF_LAST_SERVICE
317 PR#11124 Added stable date_of_last_service to avoid NewGRF trouble.
Definition: saveload.h:360
CheckTrainsLengths
void CheckTrainsLengths()
Checks if lengths of all rail vehicles are valid.
Definition: train_cmd.cpp:76
TimerGameConst< struct Calendar >::SECONDS_PER_DAY
static constexpr int SECONDS_PER_DAY
approximate seconds per day, not for precise calculations
Definition: timer_game_common.h:153
LinkGraphSettings::recalc_time
uint16_t recalc_time
time (in days) for recalculating each link graph component.
Definition: settings_type.h:543
IsStationRoadStop
bool IsStationRoadStop(Tile t)
Is the station at t a road station?
Definition: station_map.h:223
SLV_95
@ SLV_95
95 12924
Definition: saveload.h:157
TileVirtXY
static debug_inline TileIndex TileVirtXY(uint x, uint y)
Get a tile from the virtual XY-coordinate.
Definition: map_func.h:416
IsValidCargoID
bool IsValidCargoID(CargoID t)
Test whether cargo type is not INVALID_CARGO.
Definition: cargo_type.h:107
SLV_161
@ SLV_161
161 22567
Definition: saveload.h:236
InitializeRailGUI
void InitializeRailGUI()
Resets the rail GUI - sets default railtype to build and resets the signal GUI.
Definition: rail_gui.cpp:1996
DIR_SE
@ DIR_SE
Southeast.
Definition: direction_type.h:29
SLV_MULTITRACK_LEVEL_CROSSINGS
@ SLV_MULTITRACK_LEVEL_CROSSINGS
302 PR#9931 v13.0 Multi-track level crossings.
Definition: saveload.h:342
GetIndustryType
IndustryType GetIndustryType(Tile tile)
Retrieve the type for this industry.
Definition: industry_cmd.cpp:106
SLV_17
@ SLV_17
17.0 3212 17.1 3218
Definition: saveload.h:62
IndustrySpec::accepts_cargo
std::array< CargoID, INDUSTRY_NUM_INPUTS > accepts_cargo
16 accepted cargoes.
Definition: industrytype.h:116
_industry_builder
IndustryBuildData _industry_builder
In-game manager of industries.
Definition: industry_cmd.cpp:70
Station::bus_stops
RoadStop * bus_stops
All the road stops.
Definition: station_base.h:448
RVS_IN_DT_ROAD_STOP
@ RVS_IN_DT_ROAD_STOP
The vehicle is in a drive-through road stop.
Definition: roadveh.h:46
ResetWindowSystem
void ResetWindowSystem()
Reset the windowing system, by means of shutting it down followed by re-initialization.
Definition: window.cpp:1818
SB
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.
Definition: bitmath_func.hpp:58
EF_ROAD_TRAM
@ EF_ROAD_TRAM
Road vehicle is a tram/light rail vehicle.
Definition: engine_type.h:169
Gamelog::GRFAddList
void GRFAddList(const GRFConfig *newg)
Logs adding of list of GRFs.
Definition: gamelog.cpp:578
TREE_GROUND_SNOW_DESERT
@ TREE_GROUND_SNOW_DESERT
a desert or snow tile, depend on landscape
Definition: tree_map.h:55
TFP_STUCK
@ TFP_STUCK
Proceed till next signal, but ignore being stuck till then. This includes force leaving depots.
Definition: train.h:39
TimerGameCalendar::date
static Date date
Current date in days (day counter).
Definition: timer_game_calendar.h:34
ClientSettings::company
CompanySettings company
default values for per-company settings
Definition: settings_type.h:613
SLV_156
@ SLV_156
156 21728
Definition: saveload.h:230
GameSettings::construction
ConstructionSettings construction
construction of things in-game
Definition: settings_type.h:595
CCF_TRACK
@ CCF_TRACK
Valid changes while vehicle is driving, and possibly changing tracks.
Definition: train.h:48
GameSettings::vehicle
VehicleSettings vehicle
options for vehicles
Definition: settings_type.h:602
SLV_SAVEGAME_ID
@ SLV_SAVEGAME_ID
313 PR#10719 Add an unique ID to every savegame (used to deduplicate surveys).
Definition: saveload.h:355
UpdateTownMaxPass
void UpdateTownMaxPass(Town *t)
Update the maximum amount of montly passengers and mail for a town, based on its population.
Definition: town_cmd.cpp:1964
SLV_76
@ SLV_76
76 11139
Definition: saveload.h:134
IsAirportTile
bool IsAirportTile(Tile t)
Is this tile a station tile and an airport tile?
Definition: station_map.h:167
GetIndustrySpec
const IndustrySpec * GetIndustrySpec(IndustryType thistype)
Accessor for array _industry_specs.
Definition: industry_cmd.cpp:123
Object::build_date
TimerGameCalendar::Date build_date
Date of construction.
Definition: object_base.h:27
SetWaterClassDependingOnSurroundings
void SetWaterClassDependingOnSurroundings(Tile t, bool include_invalid_water_class)
Makes a tile canal or water depending on the surroundings.
Definition: afterload.cpp:84
OrderBackup
Data for backing up an order of a vehicle so it can be restored after a vehicle is rebuilt in the sam...
Definition: order_backup.h:33
IsAnyRoadStop
bool IsAnyRoadStop(Tile t)
Is the station at t a road station?
Definition: station_map.h:245
Ticks::DAY_TICKS
static constexpr TimerGameTick::Ticks DAY_TICKS
1 day is 74 ticks; TimerGameCalendar::date_fract used to be uint16_t and incremented by 885.
Definition: timer_game_tick.h:75
MAX_COMPANIES
@ MAX_COMPANIES
Maximum number of companies.
Definition: company_type.h:23
IsTileType
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
Definition: tile_map.h:150
SLV_126
@ SLV_126
126 17433
Definition: saveload.h:194
Pool::PoolItem<&_company_pool >::IsValidID
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Definition: pool_type.hpp:328
ConstructionSettings::terraform_frame_burst
uint16_t terraform_frame_burst
how many tile heights may, over a short period, be terraformed?
Definition: settings_type.h:400
GetWaterTileType
WaterTileType GetWaterTileType(Tile t)
Get the water tile type at a tile.
Definition: water_map.h:86
SLV_TREES_WATER_CLASS
@ SLV_TREES_WATER_CLASS
213 PR#7405 WaterClass update for tree tiles.
Definition: saveload.h:299
LinkGraphSettings::distribution_armoured
DistributionType distribution_armoured
distribution type for armoured cargo class
Definition: settings_type.h:547
RoadStop
A Stop for a Road Vehicle.
Definition: roadstop_base.h:22
BaseVehicle::type
VehicleType type
Type of vehicle.
Definition: vehicle_type.h:51
TROPICZONE_NORMAL
@ TROPICZONE_NORMAL
Normal tropiczone.
Definition: tile_type.h:77
Clamp
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
Definition: math_func.hpp:79
SLV_SCRIPT_RANDOMIZER
@ SLV_SCRIPT_RANDOMIZER
333 PR#12063 v14.0-RC1 Save script randomizers.
Definition: saveload.h:379
TileX
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
Definition: map_func.h:427
SLV_61
@ SLV_61
61 9892
Definition: saveload.h:116
SetAnimationFrame
void SetAnimationFrame(Tile t, uint8_t frame)
Set a new animation frame.
Definition: tile_map.h:262
IsSavegameVersionBefore
bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor=0)
Checks whether the savegame is below major.
Definition: saveload.h:1234
GLC_ALL_GOOD
@ GLC_ALL_GOOD
All GRF needed by game are present.
Definition: newgrf_config.h:53
WATER_TILE_LOCK
@ WATER_TILE_LOCK
Water lock.
Definition: water_map.h:42
PM_UNPAUSED
@ PM_UNPAUSED
A normal unpaused game.
Definition: openttd.h:69
SLV_160
@ SLV_160
160 21974 1.1.x
Definition: saveload.h:235
SLV_190
@ SLV_190
190 26547 Separate order travel and wait times
Definition: saveload.h:271
AircraftVehicleInfo
Information about a aircraft vehicle.
Definition: engine_type.h:100
AXIS_Y
@ AXIS_Y
The y axis.
Definition: direction_type.h:118
WaterClass
WaterClass
classes of water (for WATER_TILE_CLEAR water tile type).
Definition: water_map.h:47
OBJECT_HQ
static const ObjectType OBJECT_HQ
HeadQuarter of a player.
Definition: object_type.h:20
ResetOldNames
void ResetOldNames()
Free the memory of the old names array.
Definition: strings_sl.cpp:102
SLV_112
@ SLV_112
112 15290
Definition: saveload.h:177
Company
Definition: company_base.h:133
CLEAR_FIELDS
@ CLEAR_FIELDS
3
Definition: clear_map.h:23
RVSB_IN_DEPOT
@ RVSB_IN_DEPOT
The vehicle is in a depot.
Definition: roadveh.h:38
VehicleSettings::roadveh_slope_steepness
uint8_t roadveh_slope_steepness
Steepness of hills for road vehicles when using realistic acceleration.
Definition: settings_type.h:496
CheckGroundVehiclesAtCorrectZ
static void CheckGroundVehiclesAtCorrectZ()
Check whether the ground vehicles are at the correct Z-coordinate.
Definition: afterload.cpp:515
Airport::type
uint8_t type
Type of this airport,.
Definition: station_base.h:294
OrderDepotActionFlags
OrderDepotActionFlags
Actions that can be performed when the vehicle enters the depot.
Definition: order_type.h:102
ClrBit
constexpr T ClrBit(T &x, const uint8_t y)
Clears a bit in a variable.
Definition: bitmath_func.hpp:151
IsTileOwner
bool IsTileOwner(Tile tile, Owner owner)
Checks if a tile belongs to the given owner.
Definition: tile_map.h:214
MAX_INFLATION
static const uint64_t MAX_INFLATION
Maximum inflation (including fractional part) without causing overflows in int64_t price computations...
Definition: economy_type.h:229
SLV_101
@ SLV_101
101 14233
Definition: saveload.h:164
INVALID_TRACK
@ INVALID_TRACK
Flag for an invalid track.
Definition: track_type.h:28
DiagDirToDiagTrackdir
Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal trackdir that runs in that direction.
Definition: track_func.h:537
UpdateAllStationVirtCoords
void UpdateAllStationVirtCoords()
Update the virtual coords needed to draw the station sign for all stations.
Definition: station_cmd.cpp:476
AddInflation
bool AddInflation(bool check_year)
Add monthly inflation.
Definition: economy.cpp:724
SLV_57
@ SLV_57
57 9691
Definition: saveload.h:111
SLV_100
@ SLV_100
100 13952
Definition: saveload.h:163
WATER_CLASS_RIVER
@ WATER_CLASS_RIVER
River.
Definition: water_map.h:50
PM_PAUSED_NORMAL
@ PM_PAUSED_NORMAL
A game normally paused.
Definition: openttd.h:70
TOWN_CUSTOM_GROWTH
@ TOWN_CUSTOM_GROWTH
Growth rate is controlled by GS.
Definition: town.h:199
ResetSignalHandlers
static void ResetSignalHandlers()
Resets signal handlers back to original handlers.
Definition: afterload.cpp:336
ReloadNewGRFData
void ReloadNewGRFData()
Reload all NewGRF files during a running game.
Definition: afterload.cpp:3337
SLV_COMPANY_INAUGURATED_PERIOD
@ SLV_COMPANY_INAUGURATED_PERIOD
339 PR#12798 Companies show the period inaugurated in wallclock mode.
Definition: saveload.h:386
EconomySettings::allow_town_roads
bool allow_town_roads
towns are allowed to build roads (always allowed when generating world / in SE)
Definition: settings_type.h:530
TileAddByDiagDir
TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir)
Adds a DiagDir to a tile.
Definition: map_func.h:606
SLV_88
@ SLV_88
88 12134
Definition: saveload.h:148
SLV_72
@ SLV_72
72 10601
Definition: saveload.h:129
ConvertOldMultiheadToNew
void ConvertOldMultiheadToNew()
Converts all trains to the new subtype format introduced in savegame 16.2 It also links multiheaded e...
Definition: vehicle_sl.cpp:112
GLC_NOT_FOUND
@ GLC_NOT_FOUND
At least one GRF couldn't be found (higher priority than GLC_COMPATIBLE)
Definition: newgrf_config.h:55
LocaleSettings::units_height
uint8_t units_height
unit system for height
Definition: settings_type.h:275
GetInclinedSlopeDirection
DiagDirection GetInclinedSlopeDirection(Slope s)
Returns the direction of an inclined slope.
Definition: slope_func.h:239
Order
Definition: order_base.h:36
IsShipDepot
bool IsShipDepot(Tile t)
Is it a water tile with a ship depot on it?
Definition: water_map.h:225
SetTropicZone
void SetTropicZone(Tile tile, TropicZone type)
Set the tropic zone.
Definition: tile_map.h:225
Object::town
Town * town
Town the object is built in.
Definition: object_base.h:25
SLV_DEPOT_UNBUNCHING
@ SLV_DEPOT_UNBUNCHING
331 PR#11945 Allow unbunching shared order vehicles at a depot.
Definition: saveload.h:377
GoodsEntry::GES_RATING
@ GES_RATING
This indicates whether a cargo has a rating at the station.
Definition: station_base.h:183
SLV_52
@ SLV_52
52 9066
Definition: saveload.h:105
TAE_GOODS
@ TAE_GOODS
Cargo behaves goods/candy-like.
Definition: cargotype.h:26
SLV_MAX_LOAN_FOR_COMPANY
@ SLV_MAX_LOAN_FOR_COMPANY
330 PR#11224 Separate max loan for each company.
Definition: saveload.h:376
SLV_141
@ SLV_141
141 19799
Definition: saveload.h:212
GRFListCompatibility
GRFListCompatibility
Status of post-gameload GRF compatibility check.
Definition: newgrf_config.h:52
IsRoadDepot
static debug_inline bool IsRoadDepot(Tile t)
Return whether a tile is a road depot.
Definition: road_map.h:106
RoadVehicle::state
uint8_t state
Definition: roadveh.h:108
ROAD_X
@ ROAD_X
Full road along the x-axis (south-west + north-east)
Definition: road_type.h:58
Station::ship_station
TileArea ship_station
Tile area the ship 'station' part covers.
Definition: station_base.h:454
Game::StartNew
static void StartNew()
Start up a new GameScript.
Definition: game_core.cpp:72
GetClearDensity
uint GetClearDensity(Tile t)
Get the density of a non-field clear tile.
Definition: clear_map.h:83
SLV_122
@ SLV_122
122 16855
Definition: saveload.h:189
LinkGraphSettings::distribution_pax
DistributionType distribution_pax
distribution type for passengers
Definition: settings_type.h:545
SourceType::Industry
@ Industry
Source/destination is an industry.
FLYING
@ FLYING
Vehicle is flying in the air.
Definition: airport.h:75
SLV_158
@ SLV_158
158 21933
Definition: saveload.h:232
VehicleSettings::train_slope_steepness
uint8_t train_slope_steepness
Steepness of hills for trains when using realistic acceleration.
Definition: settings_type.h:495
IsDriveThroughStopTile
bool IsDriveThroughStopTile(Tile t)
Is tile t a drive through road stop station or waypoint?
Definition: station_map.h:276
GoodsEntry::last_speed
uint8_t last_speed
Maximum speed (up to 255) of the last vehicle that tried to load this cargo.
Definition: station_base.h:237
_settings_newgame
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
Definition: settings.cpp:58
AT_OILRIG
@ AT_OILRIG
Oilrig airport.
Definition: airport.h:38
INVALID_STRING_ID
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
Definition: strings_type.h:17
ResetCompanyLivery
void ResetCompanyLivery(Company *c)
Reset the livery schemes to the company's primary colour.
Definition: company_cmd.cpp:561
XYNSToDiagDir
DiagDirection XYNSToDiagDir(Axis xy, uint ns)
Convert an axis and a flag for north/south into a DiagDirection.
Definition: direction_func.h:261
Map::SizeY
static uint SizeY()
Get the size of the map along the Y.
Definition: map_func.h:279
ZoomLevel
ZoomLevel
All zoom levels we know.
Definition: zoom_type.h:16
WL_CRITICAL
@ WL_CRITICAL
Critical errors, the MessageBox is shown in all cases.
Definition: error.h:27
AfterLoadCompanyStats
void AfterLoadCompanyStats()
Rebuilding of company statistics after loading a savegame.
Definition: company_sl.cpp:96
LocaleSettings::units_force
uint8_t units_force
unit system for force
Definition: settings_type.h:274
GroupStatistics::UpdateAfterLoad
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
Definition: group_cmd.cpp:101
GF_REPLACE_WAGON_REMOVAL
@ GF_REPLACE_WAGON_REMOVAL
If set, autoreplace will perform wagon removal on vehicles in this group.
Definition: group.h:67
SetupColoursAndInitialWindow
void SetupColoursAndInitialWindow()
Initialise the default colours (remaps and the likes), and load the main windows.
Definition: main_gui.cpp:546
TAE_FOOD
@ TAE_FOOD
Cargo behaves food/fizzy-drinks-like.
Definition: cargotype.h:28
OLFB_NO_LOAD
@ OLFB_NO_LOAD
Do not load anything.
Definition: order_type.h:66
LinkGraphSettings::distribution_default
DistributionType distribution_default
distribution type for all other goods
Definition: settings_type.h:548
SLV_117
@ SLV_117
117 16037
Definition: saveload.h:183
UpdateStationAcceptance
void UpdateStationAcceptance(Station *st, bool show_msg)
Update the acceptance for a station.
Definition: station_cmd.cpp:625
StationSettings::modified_catchment
bool modified_catchment
different-size catchment areas
Definition: settings_type.h:565
GetTunnelBridgeDirection
DiagDirection GetTunnelBridgeDirection(Tile t)
Get the direction pointing to the other end.
Definition: tunnelbridge_map.h:26
EconomySettings::feeder_payment_share
uint8_t feeder_payment_share
percentage of leg payment to virtually pay in feeder systems
Definition: settings_type.h:517
TimerGameCalendar::year
static Year year
Current year, starting at 0.
Definition: timer_game_calendar.h:32
FACIL_AIRPORT
@ FACIL_AIRPORT
Station with an airport.
Definition: station_type.h:57
TimerGameEconomy::date
static Date date
Current date in days (day counter).
Definition: timer_game_economy.h:37
DoStartupNewCompany
Company * DoStartupNewCompany(bool is_ai, CompanyID company=INVALID_COMPANY)
Create a new company and sets all company variables default values.
Definition: company_cmd.cpp:585
CargoSpec::town_acceptance_effect
TownAcceptanceEffect town_acceptance_effect
The effect that delivering this cargo type has on towns. Also affects destination of subsidies.
Definition: cargotype.h:83
SLV_186
@ SLV_186
186 25833 Objects storage
Definition: saveload.h:266
HasBit
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
Definition: bitmath_func.hpp:103