OpenTTD Source: src/saveload/afterload.cpp Source File

OpenTTD Source 12.0-beta1

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