diff options
-rw-r--r-- | src/train_cmd.cpp | 10 | ||||
-rw-r--r-- | src/vehicle_base.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 6c6a905c7..02fd41069 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -164,12 +164,16 @@ void TrainConsistChanged(Vehicle* v) v->u.rail.cached_total_length = 0; v->u.rail.compatible_railtypes = 0; + bool train_can_tilt = true; + for (Vehicle *u = v; u != NULL; u = u->Next()) { const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type); /* Check the v->first cache. */ assert(u->First() == v); + if (!HasBit(EngInfo(u->engine_type)->misc_flags, EF_RAIL_TILTS)) train_can_tilt = false; + /* update the 'first engine' */ u->u.rail.first_engine = v == u ? INVALID_ENGINE : first_engine; u->u.rail.railtype = rvi_u->railtype; @@ -253,6 +257,7 @@ void TrainConsistChanged(Vehicle* v) /* store consist weight/max speed in cache */ v->u.rail.cached_max_speed = max_speed; + v->u.rail.cached_tilt = train_can_tilt; /* recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added) */ TrainCargoChanged(v); @@ -338,6 +343,11 @@ static int GetTrainAcceleration(Vehicle *v, bool mode) /* Apply the engine's rail type curve speed advantage, if it slowed by curves */ const RailtypeInfo *rti = GetRailTypeInfo(v->u.rail.railtype); max_speed += (max_speed / 2) * rti->curve_speed; + + if (v->u.rail.cached_tilt) { + /* Apply max_speed bonus of 20% for a tilting train */ + max_speed += max_speed / 5; + } } if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) { diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 2f28bc4fe..ad8bffd4b 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -81,6 +81,7 @@ struct VehicleRail { /* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */ uint16 cached_max_speed; // max speed of the consist. (minimum of the max speed of all vehicles in the consist) uint32 cached_power; // total power of the consist. + bool cached_tilt; // train can tilt; feature provides a bonus in curves uint8 cached_veh_length; // length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback uint16 cached_total_length; ///< Length of the whole train, valid only for first engine. |