# HG changeset patch # User rubidium # Date 2011-01-26 17:37:12 # Node ID 68f47a8db1b5391492d113fb3ba840f61b119934 # Parent c2f53ab3046a2d6f9813810c5f5a6fa4155d67bd (svn r21916) -Fix [FS#4442]: the minimum speed needed for (realistic) acceleration to work properly can sometimes be more than the (temporary) maximum speed causing Clamp to "fail". Make sure that the minimum speed always overrules the maximum speed diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -404,7 +404,12 @@ protected: tempmax = max(this->cur_speed - (this->cur_speed / 10) - 1, max_speed); } - this->cur_speed = spd = Clamp(this->cur_speed + ((int)spd >> 8), min_speed, tempmax); + /* Enforce a maximum and minimum speed. Normally we would use something like + * Clamp for this, but in this case min_speed might be below the maximum speed + * threshold for some reason. That makes acceleration fail and assertions + * happen in Clamp. So make it explicit that min_speed overrules the maximum + * speed by explicit ordering of min and max. */ + this->cur_speed = spd = max(min(this->cur_speed + ((int)spd >> 8), tempmax), min_speed); int scaled_spd = this->GetAdvanceSpeed(spd);