diff --git a/src/openttd.cpp b/src/openttd.cpp index 37b493a63c..12763a5fdf 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1636,8 +1636,9 @@ void CheckCaches(bool force_check, std::function log, CheckC print_gv_cache_diff("train", gro_cache[length], Train::From(u)->gcache); } if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { - CCLOGV("train cache mismatch: %c%c%c%c%c%c%c%c%c", + CCLOGV("train cache mismatch: %c%c%c%c%c%c%c%c%c%c", tra_cache[length].cached_override != Train::From(u)->tcache.cached_override ? 'o' : '-', + tra_cache[length].cached_curve_speed_mod != Train::From(u)->tcache.cached_curve_speed_mod ? 'C' : '-', tra_cache[length].cached_tflags != Train::From(u)->tcache.cached_tflags ? 'f' : '-', tra_cache[length].cached_num_engines != Train::From(u)->tcache.cached_num_engines ? 'e' : '-', tra_cache[length].cached_centre_mass != Train::From(u)->tcache.cached_centre_mass ? 'm' : '-', diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index fee44b8962..7da2831ee7 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -1132,6 +1132,7 @@ struct vehicle_venc { struct train_venc { VehicleID id; GroundVehicleCache gvcache; + int cached_curve_speed_mod; uint8 cached_tflags; uint8 cached_num_engines; uint16 cached_centre_mass; @@ -1200,6 +1201,7 @@ void Save_VENC() for (Train *t : Train::Iterate()) { SlWriteUint32(t->index); write_gv_cache(t->gcache); + SlWriteUint32(t->tcache.cached_curve_speed_mod); SlWriteByte(t->tcache.cached_tflags); SlWriteByte(t->tcache.cached_num_engines); SlWriteUint16(t->tcache.cached_centre_mass); @@ -1261,6 +1263,7 @@ void Load_VENC() for (train_venc &venc : _train_vencs) { venc.id = SlReadUint32(); read_gv_cache(venc.gvcache); + venc.cached_curve_speed_mod = SlReadUint32(); venc.cached_tflags = SlReadByte(); venc.cached_num_engines = SlReadByte(); venc.cached_centre_mass = SlReadUint16(); @@ -1348,6 +1351,7 @@ void SlProcessVENC() Train *t = Train::GetIfValid(venc.id); if (t == nullptr) continue; check_gv_cache(t->gcache, venc.gvcache, t); + CheckVehicleVENCProp(t->tcache.cached_curve_speed_mod, venc.cached_curve_speed_mod, t, "cached_curve_speed_mod"); CheckVehicleVENCProp(t->tcache.cached_tflags, (TrainCacheFlags)venc.cached_tflags, t, "cached_tflags"); CheckVehicleVENCProp(t->tcache.cached_num_engines, venc.cached_num_engines, t, "cached_num_engines"); CheckVehicleVENCProp(t->tcache.cached_centre_mass, venc.cached_centre_mass, t, "cached_centre_mass"); diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index e1cc7563a4..1aa94fa6f6 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -170,8 +170,8 @@ class NIHVehicle : public NIHelper { } if (v->type == VEH_TRAIN) { const Train *t = Train::From(v); - seprintf(buffer, lastof(buffer), " T cache: tilt: %d, engines: %u", - (t->tcache.cached_tflags & TCF_TILT) ? 1 : 0, t->tcache.cached_num_engines); + seprintf(buffer, lastof(buffer), " T cache: tilt: %d, curve speed mod: %d, engines: %u", + (t->tcache.cached_tflags & TCF_TILT) ? 1 : 0, t->tcache.cached_curve_speed_mod, t->tcache.cached_num_engines); print(buffer); seprintf(buffer, lastof(buffer), " T cache: RL braking: %d, decel: %u, uncapped decel: %u, centre mass: %u", (t->UsingRealisticBraking()) ? 1 : 0, t->tcache.cached_deceleration, t->tcache.cached_uncapped_decel, t->tcache.cached_centre_mass); diff --git a/src/train.h b/src/train.h index 34ff52c6b1..59b9583c0f 100644 --- a/src/train.h +++ b/src/train.h @@ -110,8 +110,8 @@ struct TrainCache { int cached_max_curve_speed; ///< max consist speed limited by curves /* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */ + int cached_curve_speed_mod; ///< curve speed modifier of the entire train TrainCacheFlags cached_tflags;///< train cached flags - int cached_curve_speed_mod; ///< curve speed modifier of the entire train uint8 cached_num_engines; ///< total number of engines, including rear ends of multiheaded engines uint16 cached_centre_mass; ///< Cached position of the centre of mass, from the front uint16 cached_veh_weight; ///< Cached individual vehicle weight diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 447e49c39e..5403d215a4 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -419,6 +419,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) u->tcache.cached_deceleration = 0; u->tcache.cached_uncapped_decel = 0; u->tcache.cached_tflags = TCF_NONE; + u->tcache.cached_curve_speed_mod = 0; u->tcache.cached_max_curve_speed = 0; } }