diff --git a/src/tbtr_template_vehicle.cpp b/src/tbtr_template_vehicle.cpp index c0ec2f2ab3..ea5f06ee22 100644 --- a/src/tbtr_template_vehicle.cpp +++ b/src/tbtr_template_vehicle.cpp @@ -61,6 +61,11 @@ void TemplateVehicleImageDimensions::SetFromTrain(const Train *t) this->reference_width = e->GetGRF()->traininfo_vehicle_width; this->vehicle_pitch = e->GetGRF()->traininfo_vehicle_pitch; } + if (t->gcache.cached_veh_length != 8 && HasBit(t->flags, VRF_REVERSE_DIRECTION) && !HasBit(EngInfo(t->engine_type)->misc_flags, EF_RAIL_FLIPS)) { + this->vehicle_flip_length = t->gcache.cached_veh_length; + } else { + this->vehicle_flip_length = -1; + } } TemplateVehicle::TemplateVehicle(VehicleType ty, EngineID eid, byte subtypeflag, Owner current_owner) diff --git a/src/tbtr_template_vehicle.h b/src/tbtr_template_vehicle.h index 944f28ad2b..673a408491 100644 --- a/src/tbtr_template_vehicle.h +++ b/src/tbtr_template_vehicle.h @@ -53,6 +53,7 @@ struct TemplateVehicleImageDimensions { int reference_width; int vehicle_pitch; int cached_veh_length; + int vehicle_flip_length; void SetFromTrain(const Train *t); @@ -63,6 +64,9 @@ struct TemplateVehicleImageDimensions { int GetOffsetX() const { + if (this->vehicle_flip_length >= 0) { + return ScaleSpriteTrad((this->vehicle_flip_length - VEHICLE_LENGTH / 2) * this->reference_width / VEHICLE_LENGTH); + } return ScaleSpriteTrad(this->reference_width) / 2; }