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