10 #include "../stdafx.h" 11 #include "../void_map.h" 12 #include "../signs_base.h" 13 #include "../depot_base.h" 15 #include "../gamelog_internal.h" 16 #include "../network/network.h" 17 #include "../network/network_func.h" 18 #include "../gfxinit.h" 19 #include "../viewport_func.h" 20 #include "../viewport_kdtree.h" 21 #include "../industry.h" 22 #include "../clear_map.h" 23 #include "../vehicle_func.h" 24 #include "../string_func.h" 25 #include "../date_func.h" 26 #include "../roadveh.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" 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" 56 #include "../disaster_vehicle.h" 65 #include "../safeguards.h" 84 if (include_invalid_water_class) {
101 bool has_water =
false;
102 bool has_canal =
false;
103 bool has_river =
false;
112 }
else if (!
IsLock(neighbour)) {
136 if (!has_water && !has_canal && !has_river && include_invalid_water_class) {
141 if (has_river && !has_canal) {
143 }
else if (has_canal || !has_water) {
150 static void ConvertTownOwner()
170 static void UpdateExclusiveRights()
186 static const byte convert_currency[] = {
195 static void UpdateCurrencies()
203 static void UpdateVoidTiles()
211 return rt >= min ? (
RailType)(rt + 1): rt;
222 RebuildViewportKdtree();
242 ResetViewportAfterLoadGame();
260 if (i->psa !=
nullptr) {
261 i->psa->feature = GSF_INDUSTRIES;
262 i->psa->tile = i->location.tile;
266 if (s->airport.psa !=
nullptr) {
267 s->airport.psa->feature = GSF_AIRPORTS;
268 s->airport.psa->tile = s->airport.tile;
272 for (std::list<PersistentStorage *>::iterator it = t->psa_list.begin(); it != t->psa_list.end(); ++it) {
278 if (rv->IsFrontEngine()) {
302 typedef void (CDECL *SignalHandlerPointer)(int);
303 static SignalHandlerPointer _prev_segfault =
nullptr;
304 static SignalHandlerPointer _prev_abort =
nullptr;
305 static SignalHandlerPointer _prev_fpe =
nullptr;
325 signal(SIGSEGV, _prev_segfault);
326 signal(SIGABRT, _prev_abort);
327 signal(SIGFPE, _prev_fpe);
373 p +=
seprintf(p,
lastof(buffer),
"Loading your savegame caused OpenTTD to crash.\n");
381 "This is most likely caused by a missing NewGRF or a NewGRF that\n" 382 "has been loaded as replacement for a missing NewGRF. OpenTTD\n" 383 "cannot easily determine whether a replacement NewGRF is of a newer\n" 384 "or older version.\n" 385 "It will load a NewGRF with the same GRF ID as the missing NewGRF.\n" 386 "This means that if the author makes incompatible NewGRFs with the\n" 387 "same GRF ID OpenTTD cannot magically do the right thing. In most\n" 388 "cases OpenTTD will load the savegame and not crash, but this is an\n" 390 "Please load the savegame with the appropriate NewGRFs installed.\n" 391 "The missing/compatible NewGRFs are:\n");
398 p +=
seprintf(p,
lastof(buffer),
"NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" with same GRF ID instead.\n",
BSWAP32(c->ident.grfid), buf, c->filename);
403 p +=
seprintf(p,
lastof(buffer),
"NewGRF %08X (%s) not found; checksum %s.\n",
BSWAP32(c->ident.grfid), c->filename, buf);
408 "This is probably caused by a corruption in the savegame.\n" 409 "Please file a bug report and attach this savegame.\n");
414 SignalHandlerPointer call =
nullptr;
416 case SIGSEGV: call = _prev_segfault;
break;
417 case SIGABRT: call = _prev_abort;
break;
418 case SIGFPE: call = _prev_fpe;
break;
419 default: NOT_REACHED();
421 if (call !=
nullptr) call(signum);
470 _m[t].
m3 = (hasroad ? bits : 0);
472 SB(
_me[t].m6, 2, 4, 0);
490 int entry_x = v->
x_pos;
491 int entry_y = v->
y_pos;
498 default: NOT_REACHED();
500 byte entry_z = GetSlopePixelZ(entry_x, entry_y);
505 byte middle_z = GetSlopePixelZ(middle_x, middle_y);
508 if (middle_z == entry_z)
return 0;
542 if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 1;
550 RebuildStationKdtree();
553 RebuildViewportKdtree();
560 DEBUG(net, 0,
"The loading savegame was paused due to an error state.");
561 DEBUG(net, 0,
" The savegame cannot be used for multiplayer!");
584 st->train_station.w = st->train_station.h = 0;
586 for (
TileIndex t = 0; t < map_size; t++) {
588 if (
_m[t].m5 > 7)
continue;
593 assert(dx >= 0 && dy >= 0);
603 for (
TileIndex t = 0; t < map_size; t++) {
605 SB(
_m[t].type, 0, 2,
GB(
_me[t].m6, 0, 2));
606 SB(
_me[t].m6, 0, 2, 0);
608 SB(
_m[t].type, 2, 2,
GB(
_me[t].m6, 6, 2));
609 SB(
_me[t].m6, 6, 2, 0);
611 SB(
_m[t].type, 2, 2, 0);
630 for (
TileIndex t = 0; t < map_size; t++) {
640 if (c->name !=
nullptr) c->name_1 = STR_SV_UNNAMED;
642 if (c->president_name !=
nullptr) c->president_name_1 = SPECSTR_PRESIDENT_NAME;
648 if (st->name !=
nullptr) st->string_id = STR_SV_STNAME_FALLBACK;
663 if (st->airport.tile == 0) st->airport.tile =
INVALID_TILE;
664 if (st->train_station.tile == 0) st->train_station.tile =
INVALID_TILE;
777 if (st->airport.tile !=
INVALID_TILE && st->airport.type == 15) {
789 if (c->is_ai && c->ai_instance ==
nullptr)
AI::StartNew(c->index);
819 cp->front->cargo_payment = cp;
820 cp->current_station = cp->front->last_station_visited;
841 st = STATION_AIRPORT;
849 }
else if (gfx == 75) {
855 }
else if (gfx == 82) {
859 st = STATION_AIRPORT;
872 SB(
_me[t].m6, 3, 3, st);
879 for (
TileIndex t = 0; t < map_size; t++) {
885 bst->
rect.BeforeAddTile(t, StationRect::ADD_FORCE);
914 case STATION_OILRIG: {
950 for (
TileIndex t = 0; t < map_size; t++) {
986 c->engine_renew_list =
nullptr;
987 c->settings.engine_renew =
false;
988 c->settings.engine_renew_months = 6;
989 c->settings.engine_renew_money = 100000;
1005 for (
TileIndex t = 0; t < map_size; t++) {
1011 uint tmp =
GB(
_m[t].m4, 0, 4);
1012 SB(
_m[t].m4, 0, 4,
GB(
_m[t].m2, 0, 4));
1013 SB(
_m[t].m2, 0, 4, tmp);
1035 for (
TileIndex t = 0; t < map_size; t++) {
1038 SB(
_m[t].m5, 6, 2,
GB(
_m[t].m5, 4, 2));
1042 SB(
_m[t].m4, 0, 4,
GB(
_m[t].m5, 0, 4));
1043 SB(
_m[t].m4, 4, 4, 0);
1044 SB(
_me[t].m6, 2, 4, 0);
1047 SB(
_m[t].m4, 5, 2,
GB(
_m[t].m5, 2, 2));
1051 SB(
_me[t].m7, 6, 2, 1);
1062 SB(
_me[t].m7, 6, 2, 1);
1075 for (
TileIndex t = 0; t < map_size; t++) {
1079 SB(
_me[t].m7, 5, 1,
GB(
_m[t].m3, 7, 1));
1083 SB(
_me[t].m7, 0, 4,
GB(
_m[t].m3, 0, 4));
1084 SB(
_me[t].m6, 3, 3,
GB(
_m[t].m3, 4, 3));
1085 SB(
_m[t].m3, 0, 4,
GB(
_m[t].m4, 4, 4));
1086 SB(
_m[t].m3, 4, 4,
GB(
_m[t].m5, 0, 4));
1087 SB(
_m[t].m5, 0, 4,
GB(
_m[t].m4, 0, 4));
1091 SB(
_me[t].m7, 0, 5,
GB(
_m[t].m4, 0, 5));
1092 SB(
_me[t].m6, 3, 3,
GB(
_m[t].m3, 4, 3));
1093 SB(
_m[t].m3, 4, 4,
GB(
_m[t].m5, 0, 4));
1094 SB(
_m[t].m5, 0, 1,
GB(
_m[t].m4, 6, 1));
1095 SB(
_m[t].m5, 5, 1,
GB(
_m[t].m4, 5, 1));
1113 SB(
_m[t].m3, 4, 4,
_m[t].m1);
1123 SB(
_me[t].m7, 0, 5, o);
1126 SB(
_me[t].m6, 2, 4,
GB(
_m[t].m2, 4, 4));
1127 SB(
_me[t].m7, 5, 1,
GB(
_m[t].m4, 7, 1));
1140 for (
TileIndex t = 0; t < map_size; t++) {
1171 for (
TileIndex t = 0; t < map_size; t++) {
1193 SB(
_me[t].m6, 2, 4, 0);
1198 if (
GB(
_m[t].m5, 3, 2) == 0) {
1215 uint north_south =
GB(
_m[t].m5, 5, 1);
1219 _m[t].
m5 = 1 << 7 | type << 2 | dir;
1225 if (!v->IsGroundVehicle())
continue;
1232 case DIAGDIR_NE:
if ((v->x_pos & 0xF) != 0)
continue;
break;
1235 case DIAGDIR_NW:
if ((v->y_pos & 0xF) != 0)
continue;
break;
1237 }
else if (v->z_pos > GetSlopePixelZ(v->x_pos, v->y_pos)) {
1252 for (
TileIndex t = 0; t < map_size; t++) {
1253 bool has_road =
false;
1274 SB(
_me[t].m7, 6, 2, 0);
1284 RailType rt = RailVehInfo(v->engine_type)->railtype;
1291 for (
TileIndex t = 0; t < map_size; t++) {
1321 if (v->IsFrontEngine() || v->IsFreeWagon()) v->ConsistChanged(
CCF_TRACK);
1343 for (
TileIndex t = 0; t < map_size; t++) {
1361 SB(
_m[t].m4, 4, 4, 0);
1378 rv->vehstatus &= ~0x40;
1423 for (
TileIndex t = 0; t < map_size; t++) {
1434 for (j = 0; j != 50; j++) PlantRandomFarmField(i);
1460 for (
TileIndex t = 0; t < map_size; t++) {
1465 SB(
_m[t].m5, 3, 2,
GB(
_m[t].m3, 6, 2));
1466 SB(
_m[t].m3, 6, 2, 0);
1497 for (
TileIndex t = 0; t < map_size; t++) {
1500 case GFX_POWERPLANT_SPARKS:
1504 case GFX_OILWELL_ANIMATED_1:
1505 case GFX_OILWELL_ANIMATED_2:
1506 case GFX_OILWELL_ANIMATED_3:
1510 case GFX_COAL_MINE_TOWER_ANIMATED:
1511 case GFX_COPPER_MINE_TOWER_ANIMATED:
1512 case GFX_GOLD_MINE_TOWER_ANIMATED:
1530 ClrBit(v->vehicle_flags, 2);
1547 v->cur_speed *= 128;
1549 v->acceleration = avi->acceleration;
1557 for (
TileIndex t = 0; t < map_size; t++) {
1570 t->larger_town =
true;
1580 v->current_order.IsType(OT_LOADING)) {
1581 Station::Get(v->last_station_visited)->loading_vehicles.push_back(v);
1592 std::list<Vehicle *>::iterator iter;
1593 for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end();) {
1615 for (
TileIndex t = 0; t < map_size; t++) {
1619 SB(
_m[t].m2, 4, 4, 0);
1621 SB(
_m[t].m2, 4, 3,
GB(
_m[t].m2, 0, 3));
1629 if (rv->state == 250 || rv->state == 251) {
1643 for (
TileIndex t = 0; t < map_size; t++) {
1660 for (
TileIndex t = 0; t < map_size; t++) {
1670 st->goods[c].last_speed = 0;
1680 for (j = 0; j <
lengthof(i->produced_cargo); j++) {
1681 i->produced_cargo[j] = indsp->produced_cargo[j];
1683 for (j = 0; j <
lengthof(i->accepts_cargo); j++) {
1694 for (
TileIndex t = 0; t < map_size; t++) {
1708 if (v->orders.list !=
nullptr && v->orders.list->GetFirstOrder() !=
nullptr && v->orders.list->GetFirstOrder()->IsType(OT_NOTHING)) {
1709 v->orders.list->FreeChain();
1710 v->orders.list =
nullptr;
1713 v->current_order.ConvertFromOldSavegame();
1714 if (v->type ==
VEH_ROAD && v->IsPrimaryVehicle() && v->FirstShared() == v) {
1744 for (uint i = 0; i < 4; i++) {
1754 for (
TileIndex t = 0; t < map_size; t++) {
1758 case STATION_OILRIG:
1762 SB(
_m[t].m3, 0, 2, 0);
1773 SB(
_m[t].m3, 0, 2, 0);
1788 for (
TileIndex t = 0; t < map_size; t++) {
1810 for (
TileIndex t = 0; t < map_size; t++) {
1819 for (
TileIndex t = 0; t < map_size; t++) {
1842 FOR_ALL_ROADTRAMTYPES(rtt) {
1878 v->profit_this_year <<= 8;
1879 v->profit_last_year <<= 8;
1880 v->running_ticks = 0;
1886 for (
TileIndex t = 0; t < map_size; t++) {
1889 SB(
_m[t].m3, 5, 1, 0);
1907 for (
TileIndex t = 0; t < map_size; t++) {
1931 for (
TileIndex t = 0; t < map_size; t++) {
1970 if (t->First() == t) t->ReserveTrackUnderConsist();
1975 for (
TileIndex t = 0; t < map_size; t++) {
1993 st->indtype = IT_INVALID;
2000 if (!a->IsNormalAircraft()) {
2001 a->engine_type = a->First()->engine_type;
2007 if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = 0xFFFF;
2011 if (e->company_avail == 0xFF) e->company_avail = 0xFFFF;
2015 if (t->have_ratings == 0xFF) t->have_ratings = 0xFFFF;
2021 for (
TileIndex t = 0; t < map_size; t++) {
2033 for (
TileIndex t = 0; t < map_size; t++) {
2049 for (
TileIndex t = 0; t < map_size; t++) {
2056 uint offset =
_m[t].
m3;
2060 SB(
_me[t].m6, 2, 4, 0);
2070 SlError(STR_ERROR_TOO_MANY_OBJECTS);
2113 case 5: layout = 1;
break;
2114 case 0: layout = 2;
break;
2116 t->layout =
static_cast<TownLayout>(layout - 1);
2146 if (v->subtype == 2 && v->current_order.GetDestination() != 0) {
2161 std::list<Vehicle *>::iterator iter;
2162 for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) {
2179 for (
auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); ) {
2184 for (
auto j = _animated_tiles.begin(); !
remove && j < tile; j++) {
2185 remove = *tile == *j;
2200 wp->train_station.tile = wp->xy;
2201 wp->train_station.w = 1;
2202 wp->train_station.h = 1;
2205 wp->train_station.w = 0;
2206 wp->train_station.h = 0;
2214 if (s->remaining < 12) {
2216 s->remaining = 12 - s->remaining;
2223 s->src_type = s->dst_type =
ST_TOWN;
2243 s->remaining = 24 - s->remaining;
2251 if (ss !=
nullptr && sd !=
nullptr && ss->
owner == sd->
owner &&
2253 s->src_type = s->dst_type =
ST_TOWN;
2256 s->awarded = ss->
owner;
2293 DEBUG(sl, 0,
"Removing invalid depot %d at %d, %d", d->index,
TileX(d->xy),
TileY(d->xy));
2298 _m[d->xy].
m2 = d->index;
2307 if (t->force_proceed !=
TFP_NONE) {
2316 for (
TileIndex t = 0; t < map_size; t++) {
2326 uint density =
GB(
_m[t].m2, 6, 2);
2327 uint ground =
GB(
_m[t].m2, 4, 2);
2328 uint counter =
GB(
_m[t].m2, 0, 4);
2329 _m[t].
m2 = ground << 6 | density << 4 | counter;
2337 a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks;
2341 t->wait_counter = t->current_order.IsType(OT_LOADING) ? 0 : t->load_unload_ticks;
2347 struct AirportTileConversion {
2351 static const AirportTileConversion atc[] = {
2362 for (
TileIndex t = 0; t < map_size; t++) {
2366 for (uint i = 0; i <
lengthof(atc); i++) {
2367 if (old_gfx < atc[i].old_start) {
2371 if (old_gfx < atc[i].old_start + atc[i].num_frames) {
2376 offset += atc[i].num_frames - 1;
2385 st->airport.w = st->airport.GetSpec()->size_x;
2386 st->airport.h = st->airport.GetSpec()->size_y;
2392 for (
TileIndex t = 0; t < map_size; t++) {
2416 if (!v->IsNormalAircraft())
continue;
2418 if (st ==
nullptr && v->state !=
FLYING) {
2433 for (
TileIndex t = 0; t < map_size; t++) {
2437 uint per_proc =
_me[t].
m7;
2439 SB(
_m[t].m3, 5, 1, 0);
2440 SB(
_me[t].m6, 2, 6,
min(per_proc, 63));
2445 uint rand =
_me[t].
m7;
2472 for (
TileIndex t = 0; t < map_size; t++) {
2484 if (wp->name !=
nullptr) wp->town_cn = UINT16_MAX;
2501 if (!v->IsGroundVehicle())
continue;
2511 if (GetSlopePixelZ(v->x_pos, v->y_pos) != v->z_pos)
continue;
2525 hidden = frame >= _tunnel_visibility_frame[dir];
2528 hidden = frame <
TILE_SIZE - _tunnel_visibility_frame[dir];
2546 default: NOT_REACHED();
2554 default: NOT_REACHED();
2564 bool loading = rv->current_order.IsType(OT_LOADING) || rv->current_order.IsType(OT_LEAVESTATION);
2569 SB(rv->state,
RVS_ENTERED_STOP, 1, loading || rv->frame > RVC_DRIVE_THROUGH_STOP_FRAME);
2577 if (!
HasBit(t->flags, 5))
continue;
2657 v->z_pos = GetSlopePixelZ(v->x_pos, v->y_pos);
2671 assert(v->tile !=
TileVirtXY(v->x_pos, v->y_pos) || v->z_pos == GetSlopePixelZ(v->x_pos, v->y_pos));
2676 if (!v->IsPrimaryVehicle())
continue;
2679 if (v->cur_implicit_order_index >= v->GetNumOrders()) v->cur_implicit_order_index = 0;
2681 v->cur_real_order_index = v->cur_implicit_order_index;
2682 v->UpdateRealOrderIndex();
2713 assert(ind->psa !=
nullptr);
2716 bool is_empty =
true;
2717 for (uint i = 0; i <
sizeof(ind->psa->storage); i++) {
2718 if (ind->psa->GetValue(i) != 0) {
2725 ind->psa->grfid = _industry_mngr.
GetGRFID(ind->type);
2736 assert(st->airport.psa !=
nullptr);
2739 bool is_empty =
true;
2740 for (uint i = 0; i <
sizeof(st->airport.psa->storage); i++) {
2741 if (st->airport.psa->GetValue(i) != 0) {
2748 st->airport.psa->grfid = _airport_mngr.
GetGRFID(st->airport.type);
2750 delete st->airport.psa;
2751 st->airport.psa =
nullptr;
2765 for (
TileIndex t = 0; t < map_size; t++) {
2768 uint fence =
GB(
_m[t].m4, 5, 3);
2772 fence =
GB(
_m[t].m4, 2, 3);
2776 SB(
_m[t].m4, 2, 3, 0);
2777 SB(
_m[t].m4, 5, 3, 0);
2802 _saved_scrollpos_zoom =
static_cast<ZoomLevel>(_saved_scrollpos_zoom + ZOOM_LVL_SHIFT);
2803 _saved_scrollpos_x *= ZOOM_LVL_BASE;
2804 _saved_scrollpos_y *= ZOOM_LVL_BASE;
2814 for (
TileIndex t = 0; t < map_size; t++) {
2826 for (
TileIndex t = 0; t < map_size; t++) {
2846 c->months_of_bankruptcy = 3 * c->months_of_bankruptcy;
2851 extern uint8 _old_diff_level;
2861 v->acceleration = avi->acceleration;
2867 for (
TileIndex t = 0; t < map_size; t++) {
2876 extern uint8 _old_units;
2887 for (
TileIndex t = 0; t < map_size; t++) {
2903 std::vector<uint> skip_frames;
2905 if (!v->IsFrontEngine())
continue;
2906 skip_frames.clear();
2908 uint prev_tile_skip = 0;
2911 if (u->tile != prev_tile) {
2912 prev_tile_skip = cur_skip;
2913 prev_tile = u->tile;
2915 cur_skip = prev_tile_skip;
2918 skip_frames.push_back(prev_tile_skip);
2919 uint &this_skip = skip_frames.back();
2925 if (u->frame <= (roadside ? 9 : 5)) this_skip = cur_skip;
2930 if (u->frame <= (roadside ? 5 : 9)) this_skip = cur_skip;
2935 if (u->frame <= (roadside ? 4 : 2)) this_skip = cur_skip;
2942 while (cur_skip > skip_frames[0]) {
2945 for (uint sf : skip_frames) {
2947 if (sf >= cur_skip) IndividualRoadVehicleController(u, prev);
2964 #ifndef DEBUG_DUMP_COMMANDS 2979 t->growth_rate = TownTicksToGameTicks(t->growth_rate & ~0x8000);
2982 t->grow_counter = TownTicksToGameTicks(t->grow_counter) + t->index %
TOWN_GROWTH_TICKS;
2989 for (
size_t ci = 2; ci <
lengthof(i->produced_cargo); ci++) {
2991 i->produced_cargo_waiting[ci] = 0;
2992 i->production_rate[ci] = 0;
2993 i->last_month_production[ci] = 0;
2994 i->last_month_transported[ci] = 0;
2995 i->last_month_pct_transported[ci] = 0;
2996 i->this_month_production[ci] = 0;
2997 i->this_month_transported[ci] = 0;
2999 for (
size_t ci = 3; ci <
lengthof(i->accepts_cargo); ci++) {
3001 i->incoming_cargo_waiting[ci] = 0;
3005 for (
size_t ci = 0; ci <
lengthof(i->accepts_cargo); ci++) {
3007 i->last_cargo_accepted_at[ci] = i->last_cargo_accepted_at[0];
3009 i->last_cargo_accepted_at[ci] = 0;
3022 int x = s->x_pos & 0xF;
3023 int y = s->y_pos & 0xF;
3024 if (x == 8 && y == 8)
continue;
3029 switch (shipdiagdir) {
3030 default: NOT_REACHED();
3040 if ((shipdiagdir == slopediagdir) == second_half) {
3042 s->z_pos =
GetTileMaxZ(s->tile) * (int)TILE_HEIGHT;
3045 s->z_pos =
GetTileZ(s->tile) * (int)TILE_HEIGHT;
3064 st->industry->neutral_station = st;
3074 for (
TileIndex t = 0; t < map_size; t++) {
3081 for (
TileIndex t = 0; t < map_size; t++) {
3095 if (st->ship_station.tile !=
INVALID_TILE) UpdateStationDockingTiles(st);
3109 AfterLoadLabelMaps();
3143 AfterLoadStations();
CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]
16 accepted cargoes.
bool disable_elrails
when true, the elrails are disabled
void SetupColoursAndInitialWindow()
Initialise the default colours (remaps and the likes), and load the main windows. ...
static TileType GetTileType(TileIndex tile)
Get the tiletype of a given tile.
Owner
Enum for all companies/owners.
static const uint TOWN_GROWTH_WINTER
The town only needs this cargo in the winter (any amount)
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
VehicleSettings vehicle
options for vehicles
void ChangeTileOwner(TileIndex tile, Owner old_owner, Owner new_owner)
Change the owner of a tile.
static void Swap(T &a, T &b)
Type safe swap operation.
byte type
Type of this airport,.
Source/destination is a town.
Vehicle is stopped by the player.
static const int TOWN_GROWTH_TICKS
cycle duration for towns trying to grow. (this originates from the size of the town array in TTD ...
uint8 max_heightlevel
maximum allowed heightlevel
static void ResetSignalHandlers()
Resets signal handlers back to original handlers.
static void ClearBridgeMiddle(TileIndex t)
Removes bridges from the given, that is bridges along the X and Y axis.
static uint MapSizeX()
Get the size of the map along the X.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
static void StartNew(CompanyID company, bool rerandomise_ai=true)
Start a new AI company.
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
void UpdateNearestTownForRoadTiles(bool invalidate)
Updates cached nearest town for all road tiles.
bool _networking
are we in networking mode?
Default settings for vehicles.
void CopyTempEngineData()
Copy data from temporary engine array into the real engine pool.
static TransportType GetTunnelBridgeTransportType(TileIndex t)
Tunnel: Get the transport type of the tunnel (road or rail) Bridge: Get the transport type of the bri...
void UpdateOldAircraft()
need to be called to load aircraft from old version
static void SetAnimationFrame(TileIndex t, byte frame)
Set a new animation frame.
static uint MapSizeY()
Get the size of the map along the Y.
static bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor=0)
Checks whether the savegame is below major.
Direction direction
facing
Non-existing type of vehicle.
void UpdateTownCargoes(Town *t)
Update cargo acceptance for the complete town.
static void SetTunnelBridgeReservation(TileIndex t, bool b)
Set the reservation state of the rail tunnel/bridge.
Money old_max_loan_unround
Old: Unrounded max loan.
static byte GetLockPart(TileIndex t)
Get the part of a lock.
static void SetTileOwner(TileIndex tile, Owner owner)
Sets the owner of a tile.
static const byte TOWN_HOUSE_COMPLETED
Simple value that indicates the house has reached the final stage of construction.
Flag for an invalid track.
static void FixOwnerOfRailTrack(TileIndex t)
Tries to change owner of this rail tile to a valid owner.
static void MakeVoid(TileIndex t)
Make a nice void tile ;)
GRFConfig * _grfconfig
First item in list of current GRF set up.
TileArea ship_station
Tile area the ship 'station' part covers.
static DiagDirection DirToDiagDir(Direction dir)
Convert a Direction to a DiagDirection.
byte landscape
the landscape we're currently in
IndustryBuildData _industry_builder
In-game manager of industries.
void BuildOwnerLegend()
Completes the array for the owned property legend.
static void CDECL HandleSavegameLoadCrash(int signum)
Signal handler used to give a user a more useful report for crashes during the savegame loading proce...
static bool IsAirportTile(TileIndex t)
Is this tile a station tile and an airport tile?
2.0 0.3.0 2.1 0.3.1, 0.3.2
All GRF needed by game are present.
Track in the lower corner of the tile (south)
EconomySettings economy
settings to change the economy
Vehicle has finished loading.
void AfterLoadCompanyStats()
Rebuilding of company statistics after loading a savegame.
#define DAYS_TILL_ORIGINAL_BASE_YEAR
The offset in days from the '_date == 0' till 'ConvertYMDToDate(ORIGINAL_BASE_YEAR, 0, 1)'.
Compatible (eg. the same ID, but different checksum) GRF found in at least one case.
static bool IsWater(TileIndex t)
Is it a plain water tile?
void NORETURN SlErrorCorrupt(const char *msg)
Error handler for corrupt savegames.
static Titem * Get(size_t index)
Returns Titem with given index.
static bool IsBridgeTile(TileIndex t)
checks if there is a bridge on this tile
static WaterClass GetWaterClass(TileIndex t)
Get the water class at a tile.
Town * town
Town the object is built in.
RoadTypes
The different roadtypes we support, but then a bitmask of them.
byte units_weight
unit system for weight
void SetWaterClassDependingOnSurroundings(TileIndex t, bool include_invalid_water_class)
Makes a tile canal or water depending on the surroundings.
int CDECL seprintf(char *str, const char *last, const char *format,...)
Safer implementation of snprintf; same as snprintf except:
The vehicle is in a drive-through road stop.
byte m7
Primarily used for newgrf support.
void CheckTrainsLengths()
Checks if lengths of all rail vehicles are valid.
uint16 m2
Primarily used for indices to towns, industries and stations.
static T SetBit(T &x, const uint8 y)
Set a bit in a variable.
uint16 old_max_loan_unround_fract
Old: Fraction of the unrounded max loan.
static void MakeShore(TileIndex t)
Helper function to make a coast tile.
A tile with road (or tram tracks)
bool road_use_yapf
use YAPF for road
uint32 GetGRFID(uint16 entity_id) const
Gives the GRFID of the file the entity belongs to.
static const ObjectType OBJECT_STATUE
Statue in towns.
static IndustryGfx GetIndustryGfx(TileIndex t)
Get the industry graphics ID for the given industry tile.
Maximal number of cargo types in a game.
Full road along the x-axis (south-west + north-east)
uint64 inflation_prices
Cumulated inflation of prices since game start; 16 bit fractional part.
210 PR#7234 Company stations can serve industries with attached neutral stations. ...
A town owns the tile, or a town is expanding.
Tile * _m
Tiles of the map.
void NORETURN SlError(StringID string, const char *extra_msg)
Error handler.
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
RoadTypes GetCompanyRoadTypes(CompanyID company, bool introduces)
Get the road types the given company can build.
Specification of a cargo type.
static TileIndex GetOtherShipDepotTile(TileIndex t)
Get the other tile of the ship depot.
static bool IsRoadStop(TileIndex t)
Is the station at t a road station?
char * CopyFromOldName(StringID id)
Copy and convert old custom names to UTF-8.
Proceed till next signal, but ignore being stuck till then. This includes force leaving depots...
static TrackBits DiagDirToDiagTrackBits(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal track bits incidating with that diagdir. ...
Aircraft, helicopters, rotors and their shadows belong to this class.
char * md5sumToString(char *buf, const char *last, const uint8 md5sum[16])
Convert the md5sum to a hexadecimal string representation.
Date build_date
Date of construction.
void ReloadNewGRFData()
Reload all NewGRF files during a running game.
188 26169 v1.4 FS#5831 Unify RV travel time
uint32 changes
Number of changes in this action.
static uint TileX(TileIndex tile)
Get the X component of a tile.
void AfterLoadStoryBook()
Called after load to trash broken pages.
PathfinderSettings pf
settings for all pathfinders
TileArea train_station
Tile area the train 'station' part covers.
Only used when retrieving move data.
static TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir)
Adds a DiagDir to a tile.
GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig)
Check if all GRFs in the GRF config from a savegame can be loaded.
void UpdateAllTownVirtCoords()
Update the virtual coords needed to draw the town sign for all towns.
static bool IsExpected(const BaseStation *st)
Helper for checking whether the given station is of this type.
static void AfterLoad()
Savegame conversion for cargopackets.
StationRect rect
NOSAVE: Station spread out rectangle maintained by StationRect::xxx() functions.
byte units_velocity
unit system for velocity
Defines the internal data of a functional industry.
DifficultySettings difficulty
settings related to the difficulty
Tindex index
Index of this pool item.
Vehicle is flying in the air.
flag for invalid roadtype
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.
Manual distribution. No link graph calculations are run.
static const int DAY_TICKS
1 day is 74 ticks; _date_fract used to be uint16 and incremented by 885.
bool forbid_90_deg
forbid trains to make 90 deg turns
Cargo behaves water-like.
DistributionType distribution_default
distribution type for all other goods
Representation of a waypoint.
TownLayout town_layout
select town layout,
static void SetRailStationReservation(TileIndex t, bool b)
Set the reservation state of the rail station.
#define lastof(x)
Get the last element of an fixed size array.
const byte _tunnel_visibility_frame[DIAGDIR_END]
Frame when a vehicle should be hidden in a tunnel with a certain direction.
void GamelogPrintDebug(int level)
Prints gamelog to debug output.
uint16 tree_frame_burst
how many trees may, over a short period, be planted?
GRF file was not found in the local cache.
static Pool::IterateWrapper< Station > Iterate(size_t from=0)
Returns an iterable ensemble of all valid stations of type T.
Cargo behaves goods/candy-like.
void AircraftNextAirportPos_and_Order(Aircraft *v)
set the right pos when heading to other airports after takeoff
void GamelogOldver()
Logs loading from savegame without gamelog.
Contains objects such as transmitters and owned land.
static uint FixVehicleInclination(Vehicle *v, Direction dir)
Fixes inclination of a vehicle.
static void InitializeWindowsAndCaches()
Initialization of the windows and several kinds of caches.
void ShowAIDebugWindowIfAIError()
Open the AI debug window if one of the AI scripts has crashed.
static bool IsStandardRoadStopTile(TileIndex t)
Is tile t a standard (non-drive through) road stop station?
GRFIdentifier ident
grfid and md5sum to uniquely identify newgrfs
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...
static bool IsLevelCrossing(TileIndex t)
Return whether a tile is a level crossing.
static void SetWaterClass(TileIndex t, WaterClass wc)
Set the water class at a tile.
RoadType
The different roadtypes we support.
byte units_force
unit system for force
static bool IsDriveThroughStopTile(TileIndex t)
Is tile t a drive through road stop station?
bool allow_town_roads
towns are allowed to build roads (always allowed when generating world / in SE)
Town * town
The town this station is associated with.
GRFIdentifier grfcompat
ID and new md5sum of changed GRF.
byte units_height
unit system for height
static bool IsClearGround(TileIndex t, ClearGround ct)
Set the type of clear tile.
uint32 max_loan
the maximum initial loan
Year _cur_year
Current year, starting at 0.
uint16 w
The width of the area.
bool infrastructure_maintenance
enable monthly maintenance fee for owner infrastructure
Basic data to distinguish a GRF.
static Train * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
bool IsTileFlat(TileIndex tile, int *h)
Check if a given tile is flat.
uint _gamelog_actions
number of actions
206 PR#7150 Ship/lock movement changes.
CompanySettings settings
settings specific for each company
static void SetRoadTypes(TileIndex t, RoadType road_rt, RoadType tram_rt)
Set the present road types of a tile.
bool AfterLoadGame()
Perform a (large) amount of savegame conversion magic in order to load older savegames and to fill th...
static StationType GetStationType(TileIndex t)
Get the station type of this tile.
StationSettings station
settings related to station management
static const uint TILE_SIZE
Tile size in world coordinates.
struct GRFConfig * next
NOSAVE: Next item in the linked list.
Do not refit cargo of a vehicle (used in vehicle orders and auto-replace/auto-new).
void UpdateStationAcceptance(Station *st, bool show_msg)
Update the acceptance for a station.
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.
TileIndex GetNorthernBridgeEnd(TileIndex t)
Finds the northern end of a bridge starting at a middle tile.
void YapfNotifyTrackLayoutChange(TileIndex tile, Track track)
Use this function to notify YAPF that track layout (or signal configuration) has change.
static Station * From(BaseStation *st)
Converts a BaseStation to SpecializedStation with type checking.
byte m1
Primarily used for ownership information.
static bool IsLock(TileIndex t)
Is there a lock on a given water tile?
bool _network_dedicated
are we a dedicated server?
Class to backup a specific variable and restore it later.
int GetTileZ(TileIndex tile)
Get bottom height of the tile.
static bool HasStationRail(TileIndex t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint...
std::vector< TileIndex > _animated_tiles
The table/list with animated tiles.
bool freeform_edges
allow terraforming the tiles at the map edges
static bool IsHouseCompleted(TileIndex t)
Get the completion of this house.
Stop at the far end of the platform.
Slope GetTileSlope(TileIndex tile, int *h)
Return the slope of a given tile inside the map.
static const size_t MAX_SIZE
Make template parameter accessible from outside.
static bool IsInsideMM(const T x, const size_t min, const size_t max)
Checks if a value is in an interval.
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...
bool reverse_at_signals
whether to reverse at signals at all
Buses, trucks and trams belong to this class.
Fake town GrfSpecFeature for NewGRF debugging (parent scope)
Critical errors, the MessageBox is shown in all cases.
RoadType roadtype
Roadtype of this vehicle.
static bool IsTileOwner(TileIndex tile, Owner owner)
Checks if a tile belongs to the given owner.
void UpdateAirportsNoise()
Recalculate the noise generated by the airports of each town.
Town * ClosestTownFromTile(TileIndex tile, uint threshold)
Return the town closest (in distance or ownership) to a given tile, within a given threshold...
static void SetCrossingReservation(TileIndex t, bool b)
Set the reservation state of the rail crossing.
void SetDate(Date date, DateFract fract)
Set the date.
static void MakeSea(TileIndex t)
Make a sea tile.
The tile has no ownership.
static TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
Convert a DiagDirection to a TileIndexDiff.
DistributionType distribution_mail
distribution type for mail
static bool IsBuoy(TileIndex t)
Is tile t a buoy tile?
static bool IsTileType(TileIndex tile, TileType type)
Checks if a tile is a given tiletype.
void MakeDefaultName(T *obj)
Set the default name for a depot/waypoint.
static bool _saveload_crash_with_missing_newgrfs
Was the saveload crash because of missing NewGRFs?
The vehicle is in a road stop.
void SetNonStopType(OrderNonStopFlags non_stop_type)
Set whether we must stop at stations or not.
static bool IsCoast(TileIndex t)
Is it a coast tile?
RoadStop * truck_stops
All the truck stops.
Contains information about one logged action that caused at least one logged change.
This indicates whether a cargo has a rating at the station.
void Add(TileIndex to_add)
Add a single tile to a tile area; enlarge if needed.
void ConvertOldMultiheadToNew()
Converts all trains to the new subtype format introduced in savegame 16.2 It also links multiheaded e...
DateFract _date_fract
Fractional part of the day.
bool serve_neutral_industries
company stations can serve industries with attached neutral stations
void UpdateAircraftCache(Aircraft *v, bool update_range=false)
Update cached values of an aircraft.
CompanySettings company
default values for per-company settings
Information about GRF, used in the game and (part of it) in savegames.
Original algorithm (quadratic cargo by population)
YAPFSettings yapf
pathfinder settings for the yet another pathfinder
static void SetStationGfx(TileIndex t, StationGfx gfx)
Set the station graphics of this tile.
byte road_side
the side of the road vehicles drive on
WaterClass
classes of water (for WATER_TILE_CLEAR water tile type).
static bool IsTruckStop(TileIndex t)
Is the station at t a truck stop?
void MoveBuoysToWaypoints()
Perform all steps to upgrade from the old station buoys to the new version that uses waypoints...
static bool HasTownOwnedRoad(TileIndex t)
Checks if given tile has town owned road.
byte units_volume
unit system for volume
static TownID GetTownIndex(TileIndex t)
Get the index of which town this house/street is attached to.
bool IsType(OrderType type) const
Check whether this order is of the given type.
The vehicle is in a tunnel and/or bridge.
static Owner GetTileOwner(TileIndex tile)
Returns the owner of a tile.
static DiagDirection ReverseDiagDir(DiagDirection d)
Returns the reverse direction of the given DiagDirection.
void UpdateAllVirtCoords()
Update the viewport coordinates of all signs.
T * Next() const
Get next vehicle in the chain.
ClientSettings _settings_client
The current settings for this game.
Standard non-electric rails.
byte snow_line_height
the configured snow line height
static bool HasStationTileRail(TileIndex t)
Has this station tile a rail? In other words, is this station tile a rail station or rail waypoint...
const IndustrySpec * GetIndustrySpec(IndustryType thistype)
Accessor for array _industry_specs.
void DeleteAnimatedTile(TileIndex tile)
Removes the given tile from the animated tile table.
void LoadStringWidthTable(bool monospace)
Initialize _stringwidth_table cache.
static const int GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET
The offset for the drive through parts.
#define TILE_ADDXY(tile, x, y)
Adds a given offset to a tile.
IndustryType GetIndustryType(TileIndex tile)
Retrieve the type for this industry.
202 PR#6867 Increase industry cargo slots to 16 in, 16 out
Direction
Defines the 8 directions on the map.
TileExtended * _me
Extended Tiles of the map.
static uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
bool dynamic_engines
enable dynamic allocation of engine data
Station * GetTargetAirportIfValid(const Aircraft *v)
Returns aircraft's target station if v->target_airport is a valid station with airport.
static void SetClearGroundDensity(TileIndex t, ClearGround type, uint density)
Sets ground type and density in one go, also sets the counter to 0.
RoadBits
Enumeration for the road parts on a tile.
An object, such as transmitter, on the map.
The vehicle is in a depot.
static const uint TILE_HEIGHT
Height of a height level in world coordinate AND in pixels in #ZOOM_LVL_BASE.
static bool IsBuoyTile(TileIndex t)
Is tile t a buoy tile?
TrackBits
Bitfield corresponding to Track.
const CargoSpec * FindFirstCargoWithTownEffect(TownEffect effect)
Determines the first cargo with a certain town effect.
Extended original algorithm (min. 2 distance between roads)
void GamelogGRFAddList(const GRFConfig *newg)
Logs adding of list of GRFs.
static void SetSignalStates(TileIndex tile, uint state)
Set the states of the signals (Along/AgainstTrackDir)
Company colour selection; Window numbers:
uint16 max_bridge_length
maximum length of bridges
bool IsFrontEngine() const
Check if the vehicle is a front engine.
static WaterTileType GetWaterTileType(TileIndex t)
Get the water tile type at a tile.
TileIndex tile
Current tile index.
Defines the data structure for constructing industry.
CompanyManagerFace ConvertFromOldCompanyManagerFace(uint32 face)
Converts an old company manager's face format to the new company manager's face format.
Grass with a fence and shore or water on the free halftile.
void SetSaveLoadError(StringID str)
Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friend...
static void SetHouseCompleted(TileIndex t, bool status)
Mark this house as been completed.
void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
Mark a tile given by its index dirty for repaint.
static Trackdir DiagDirToDiagTrackdir(DiagDirection diagdir)
Maps a (4-way) direction to the diagonal trackdir that runs in that direction.
const byte _road_stop_stop_frame[]
Table of road stop stop frames, when to stop at a road stop.
void UpdateAllSignVirtCoords()
Update the coordinates of all signs.
void GamelogGRFCompatible(const GRFIdentifier *newg)
Logs loading compatible GRF (the same ID, but different MD5 hash)
void AfterLoadLinkGraphs()
Spawn the threads for running link graph calculations.
Owner owner
Which company owns the vehicle?
uint16 clear_frame_burst
how many tiles may, over a short period, be cleared?
#define lengthof(x)
Return the length of an fixed size array.
Company * DoStartupNewCompany(bool is_ai, CompanyID company=INVALID_COMPANY)
Create a new company and sets all company variables default values.
IndustryBehaviour behaviour
How this industry will behave, and how others entities can use it.
static uint TileHash(uint x, uint y)
Calculate a hash value from a tile position.
void UpdateHousesAndTowns()
Check and update town and house values.
static T min(const T a, const T b)
Returns the minimum of two values.
void GamelogTestRevision()
Finds out if current revision is different than last revision stored in the savegame.
static bool IsShipDepotTile(TileIndex t)
Is it a ship depot tile?
Helper class to perform the cargo payment.
PauseMode _pause_mode
The current pause mode.
uint16 ObjectType
Types of objects.
uint8 plane_speed
divisor for speed of aircraft
static DiagDirection GetInclinedSlopeDirection(Slope s)
Returns the direction of an inclined slope.
static void SetBridgeMiddle(TileIndex t, Axis a)
Set that there is a bridge over the given axis.
static const Year ORIGINAL_BASE_YEAR
The minimum starting year/base year of the original TTD.
static DiagDirection GetTunnelBridgeDirection(TileIndex t)
Get the direction pointing to the other end.
static bool IsPlainRailTile(TileIndex t)
Checks whether the tile is a rail tile or rail tile with signals.
byte number_towns
the amount of towns
Vehicle is currently going uphill. (Cached track information for acceleration)
a desert or snow tile, depend on landscape
Vehicle's pathfinder is lost.
static void RecomputeCatchmentForAll()
Recomputes catchment of all stations.
static StationGfx GetStationGfx(TileIndex t)
Get the station graphics of this tile.
void UpdateLevelCrossing(TileIndex tile, bool sound=true)
Sets correct crossing state.
Bitflag for a wormhole (used for tunnels)
uint8 plane_crashes
number of plane crashes, 0 = none, 1 = reduced, 2 = normal
All ships have this type.
RoadStop * bus_stops
All the road stops.
Transfer all cargo onto the platform.
DistributionType distribution_armoured
distribution type for armoured cargo class
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
Returns information about trackdirs and signal states.
static void SetRoadOwner(TileIndex t, RoadTramType rtt, Owner o)
Set the owner of a specific road type.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
static bool HasSignals(TileIndex t)
Checks if a rail tile has signals.
Flag for an invalid direction.
ScriptSettings script
settings for scripts
void MoveWaypointsToBaseStations()
Perform all steps to upgrade from the old waypoints to the new version that uses station.
#define DEBUG(name, level,...)
Output a line of debugging information.
Struct about subsidies, offered and awarded.
'Train' is either a loco or a wagon.
LoggedAction * _gamelog_action
first logged action
byte units_power
unit system for power
static RoadBits GetCrossingRoadBits(TileIndex tile)
Get the road bits of a level crossing.
TileIndex tile
The base tile of the area.
static uint GetClearDensity(TileIndex t)
Get the density of a non-field clear tile.
void StartupEngines()
Start/initialise all our engines.
void ResetOldNames()
Free the memory of the old names array.
uint8 train_slope_steepness
Steepness of hills for trains when using realistic acceleration.
void ShowNewGRFError()
Show the first NewGRF error we can find.
void UpdateAllStationVirtCoords()
Update the virtual coords needed to draw the station sign for all stations.
static Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
Cargo behaves passenger-like.
Town * CalcClosestTownFromTile(TileIndex tile, uint threshold=UINT_MAX)
Return the town closest to the given tile within threshold.
static TileIndex GetOtherTunnelBridgeEnd(TileIndex t)
Determines type of the wormhole and returns its other end.
byte StationGfx
Copy from station_map.h.
Company infrastructure overview; Window numbers:
static BaseStation * GetByTile(TileIndex tile)
Get the base station belonging to a specific tile.
static const uint TOWN_GROWTH_DESERT
The town needs the cargo for growth when on desert (any amount)
The tile/execution is done by "water".
static const uint MIN_SNOWLINE_HEIGHT
Minimum snowline height.
void ConnectMultiheadedTrains()
Link front and rear multiheaded engines to each other This is done when loading a savegame...
static TileIndex TileVirtXY(uint x, uint y)
Get a tile from the virtual XY-coordinate.
Vehicle is currently going downhill. (Cached track information for acceleration)
static uint MapSize()
Get the size of the map.
TownEffect town_effect
The effect that delivering this cargo type has on towns. Also affects destination of subsidies...
StationType
Station types.
GamelogActionType at
Type of action.
static Owner GetRoadOwner(TileIndex t, RoadTramType rtt)
Get the owner of a specific road type.
void SetAircraftPosition(Aircraft *v, int x, int y, int z)
Set aircraft position.
static T ClrBit(T &x, const uint8 y)
Clears a bit in a variable.
RailType
Enumeration for all possible railtypes.
static RoadTileType GetRoadTileType(TileIndex t)
Get the type of the road tile.
static bool IsRailDepot(TileIndex t)
Is this rail tile a rail depot?
bool IsStationTileBlocked(TileIndex tile)
Check whether a rail station tile is NOT traversable.
Tunnel entry/exit and bridge heads.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
186 25833 Objects storage
is built on water (oil rig)
DistributionType distribution_pax
distribution type for passengers
static bool IsRailDepotTile(TileIndex t)
Is this tile rail tile and a rail depot?
Invisible tiles at the SW and SE border.
bool station_noise_level
build new airports when the town noise level is still within accepted limits
static DiagDirection XYNSToDiagDir(Axis xy, uint ns)
Convert an axis and a flag for north/south into a DiagDirection.
void RecomputePrices()
Computes all prices, payments and maximum loan.
int GetTileMaxZ(TileIndex t)
Get top height of the tile inside the map.
static void SetLiftPosition(TileIndex t, byte pos)
Set the position of the lift on this animated house.
static CargoSpec * Get(size_t index)
Retrieve cargo details for the given cargo ID.
static bool IsShipDepot(TileIndex t)
Is it a water tile with a ship depot on it?
uint32 TileIndex
The index/ID of a Tile.
void FixupTrainLengths()
Fixup old train spacing.
GRFListCompatibility
Status of post-gameload GRF compatibility check.
static size_t GetNumItems()
Returns number of valid items in the pool.
static const uint64 MAX_INFLATION
Maximum inflation (including fractional part) without causing overflows in int64 price computations...
static void IncTypeCount(ObjectType type)
Increment the count of objects for this type.
First company, same as owner.
bool ship_use_yapf
use YAPF for ships
Information about a aircraft vehicle.
static TreeGround GetTreeGround(TileIndex t)
Returns the groundtype for tree tiles.
bool modified_catchment
different-size catchment areas
At least one GRF couldn't be found (higher priority than GLC_COMPATIBLE)
CargoPayment * cargo_payment
The cargo payment we're currently in.
LoggedChange * change
First logged change in this action.
static HouseID GetHouseType(TileIndex t)
Get the type of this house, which is an index into the house spec array.
static bool IsLevelCrossingTile(TileIndex t)
Return whether a tile is a level crossing tile.
static uint TileY(TileIndex tile)
Get the Y component of a tile.
Only set when a vehicle has entered the stop.
static Direction AxisToDirection(Axis a)
Converts an Axis to a Direction.
void AfterLoadRoadStops()
(Re)building of road stop caches after loading a savegame.
static void MakeClear(TileIndex t, ClearGround g, uint density)
Make a clear tile.
Contains information about one logged change.
uint8 pathfinder_for_trains
the pathfinder to use for trains
uint16 terraform_frame_burst
how many tile heights may, over a short period, be terraformed?
Old-fashioned semaphore signal.
byte height
The height of the northern corner.
208 PR#6965 New algorithms for town building cargo generation.
TileArea location
Location of the object.
void RebuildSubsidisedSourceAndDestinationCache()
Perform a full rebuild of the subsidies cache.
TransportType
Available types of transport.
static uint GB(const T x, const uint8 s, const uint8 n)
Fetch n bits from x, started at bit s.
byte wait_twoway_signal
waitingtime in days before a twoway signal
static ClearGround GetRawClearGround(TileIndex t)
Get the type of clear tile but never return CLEAR_SNOW.
static bool IsOilRig(TileIndex t)
Is tile t part of an oilrig?
ObjectType type
Type of the object.
VehicleType type
Type of vehicle.
static void SetTileType(TileIndex tile, TileType type)
Set the type of a tile.
void AfterLoadVehicles(bool part_of_load)
Called after load to update coordinates.
Growth rate is controlled by GS.
const TileTypeProcs *const _tile_type_procs[16]
Tile callback functions for each type of tile.
VehicleDefaultSettings _old_vds
Used for loading default vehicles settings from old savegames.
uint8 larger_towns
the number of cities to build. These start off larger and grow twice as fast
static const HouseID NEW_HOUSE_OFFSET
Offset for new houses.
Maximum number of companies.
static uint MapMaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
static Station * GetByTile(TileIndex tile)
Get the station belonging to a specific tile.
static TrackBits TrackStatusToTrackBits(TrackStatus ts)
Returns the present-track-information of a TrackStatus.
static void MakeCanal(TileIndex t, Owner o, uint8 random_bits)
Make a canal tile.
uint64 inflation_payment
Cumulated inflation of cargo paypent since game start; 16 bit fractional part.
static bool CanAllocateItem(size_t n=1)
Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() ...
Transport by road vehicle.
static const uint16 TOWN_GROWTH_RATE_NONE
Special value for Town::growth_rate to disable town growth.
The vehicle will not stop at any stations it passes except the destination.
static const uint TILE_UNIT_MASK
For masking in/out the inner-tile world coordinate units.
LocaleSettings locale
settings related to used currency/unit system in the current game
The vehicle is in a road stop.
184 25508 Unit localisation split
byte town_name
the town name generator used for town names
198 PR#6763 Switch town growth rate and counter to actual game ticks
Pause mode bits when paused for network reasons.
bool _network_server
network-server is active
214 PR#6811 NewGRF road types.
A Stop for a Road Vehicle.
void GamelogGRFRemove(uint32 grfid)
Logs removal of a GRF.
CompanyID _current_company
Company currently doing an action.
Owner owner
The owner of this station.
void InitializeRailGUI()
Resets the rail GUI - sets default railtype to build and resets the signal GUI.
TownCargoGenMode town_cargogen_mode
algorithm for generating cargo from houses,
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
static uint TileHeight(TileIndex tile)
Returns the height of a tile.
AbstractFileType abstract_ftype
Abstract type of file (scenario, heightmap, etc).
uint8 train_acceleration_model
realistic acceleration for trains
Fields are planted around when built (all farms)
Cargo behaves food/fizzy-drinks-like.
ConstructionSettings construction
construction of things in-game
static const Year MIN_YEAR
The absolute minimum & maximum years in OTTD.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
static TileIndexDiff TileDiffXY(int x, int y)
Calculates an offset for the given coordinate(-offset).
static Pool::IterateWrapper< RoadVehicle > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
192 26700 FS#6066 Fix saving of order backups
uint32 grfid
GRF ID (defined by Action 0x08)
static bool IsTunnelTile(TileIndex t)
Is this a tunnel (entrance)?
Airport airport
Tile area the airport covers.
uint8 roadveh_acceleration_model
realistic acceleration for road vehicles
uint8 settings_profile
difficulty profile to set initial settings of scripts, esp. random AIs
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
void Restore()
Restore the variable.
DiagDirection
Enumeration for diagonal directions.
static const TileIndex INVALID_TILE
The very nice invalid tile marker.
ZoomLevel
All zoom levels we know.
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 ...
bool AddInflation(bool check_year)
Add monthly inflation.
static void SetFence(TileIndex t, DiagDirection side, uint h)
Sets the type of fence (and whether there is one) for the given border.
Northeast, upper right on your monitor.
GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches) ...
216 PR#7380 Multiple docks per station.
GameCreationSettings game_creation
settings used during the creation of a game (map)
static bool IsPlainRail(TileIndex t)
Returns whether this is plain rails, with or without signals.
A tile without any structures, i.e. grass, rocks, farm fields etc.
void GamelogTestMode()
Finds last stored game mode or landscape.
Full road along the y-axis (north-west + south-east)
byte CargoID
Cargo slots to indicate a cargo type within a game.
182 25115 FS#5492, r25259, r25296 Goal status
uint8 roadveh_slope_steepness
Steepness of hills for road vehicles when using realistic acceleration.
static uint MapMaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
TreeGround
Enumeration for ground types of tiles with trees.
static Industry * GetByTile(TileIndex tile)
Get the industry of the given tile.
Road vehicle is a tram/light rail vehicle.
byte wait_for_pbs_path
how long to wait for a path reservation.
RailTypes GetCompanyRailtypes(CompanyID company, bool introduces)
Get the rail types the given company can build.
static uint32 BSWAP32(uint32 x)
Perform a 32 bits endianness bitswap on x.
void ResetWindowSystem()
Reset the windowing system, by means of shutting it down followed by re-initialization.
static bool IsDepotTile(TileIndex tile)
Is the given tile a tile with a depot on it?
Station with train station.
bool SaveloadCrashWithMissingNewGRFs()
Did loading the savegame cause a crash? If so, were NewGRFs missing?
uint8 md5sum[16]
MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF) ...
void DeleteInvalidEngineNews()
Remove engine announcements for invalid engines.
Force unloading all cargo onto the platform, possibly not getting paid.
byte industry_density
The industry density.
uint8 pathfinder_for_ships
the pathfinder to use for ships
bool rail_use_yapf
use YAPF for rail
static void SetTrackReservation(TileIndex t, TrackBits b)
Sets the reserved track bits of the tile.
213 PR#7405 WaterClass update for tree tiles.
Data for backing up an order of a vehicle so it can be restored after a vehicle is rebuilt in the sam...
static void SetTownIndex(TileIndex t, TownID index)
Set the town index for a road or house tile.
static bool IsDock(TileIndex t)
Is tile t a dock tile?
static Station * Get(size_t index)
Gets station with given index.
Date _date
Current date in days (day counter)
void ResetCompanyLivery(Company *c)
Reset the livery schemes to the company's primary colour.
200 PR#6805 Extend railtypes to 64, adding uint16 to map array.
uint16 h
The height of the area.
static Direction ReverseDir(Direction d)
Return the reverse of a direction.
byte wait_oneway_signal
waitingtime in days before a oneway signal
static void SetDockingTile(TileIndex t, bool b)
Set the docking tile state of a tile.
bool allow_town_level_crossings
towns are allowed to build level crossings
Declaration of functions used in more save/load files.
uint8 feeder_payment_share
percentage of leg payment to virtually pay in feeder systems
Valid changes while vehicle is driving, and possibly changing tracks.
Base class for all station-ish types.
Axis
Allow incrementing of DiagDirDiff variables.
static const GRFIdentifier * GetOverriddenIdentifier(const GRFConfig *c)
Try to find the overridden GRF identifier of the given GRF.
static bool IsRoadDepot(TileIndex t)
Return whether a tile is a road depot.
static const ObjectType OBJECT_HQ
HeadQuarter of a player.
LinkGraphSettings linkgraph
settings for link graph calculations
Used for industry tiles on land (also for oilrig if newgrf says so).
A game paused because a (critical) error.
static TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
static RailType GetRailType(TileIndex t)
Gets the rail type of the given tile.
Order current_order
The current order (+ status, like: loading)
static bool IsBridge(TileIndex t)
Checks if this is a bridge, instead of a tunnel.
static Direction DiagDirToDir(DiagDirection dir)
Convert a DiagDirection to a Direction.
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-...
static void SetTropicZone(TileIndex tile, TropicZone type)
Set the tropic zone.
4.0 1 4.1 122 0.3.3, 0.3.4 4.2 1222 0.3.5 4.3 1417 4.4 1426
Track in the upper corner of the tile (north)
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Source/destination is an industry.
static void SetSignalHandlers()
Replaces signal handlers of SIGSEGV and SIGABRT and stores pointers to original handlers in memory...
static void SetRailType(TileIndex t, RailType r)
Sets the rail type of the given tile.
void GfxLoadSprites()
Initialise and load all the sprites.
uint16 max_tunnel_length
maximum length of tunnels
void Reset()
Completely reset the industry build data.
uint8 pathfinder_for_roadvehs
the pathfinder to use for roadvehicles
byte currency
currency we currently use
bool SettingsDisableElrail(int32 p1)
_settings_game.disable_elrail callback
uint8 max_train_length
maximum length for trains
static void SetDepotReservation(TileIndex t, bool b)
Set the reservation state of the depot.
static Station * GetIfValid(size_t index)
Returns station if the index is a valid index for this station type.