Is there an existing issue for this?
Describe the bug
When the AI decides to stop the ship, sometimes it can't. This happens due to an error in the new thrusting logic. Sometimes, the code will ignore dragAcceleration, which is the variable Ship::Move uses to implement Command::STOP when the ship is almost stopped. This prevents ships from boarding, landing, assisting, and a variety of other things, if they happen to be moving at just the right speed. That's why the integration tests are failing.
Steps to Reproduce
Run the integration tests a few times on Ubuntu 20 or 22 using GL. Watch Capture Uncapturable With Capturable Override
fail.
Expected Behavior
Ships can stop. All integration tests should pass.
Screenshots
No response
Link to save file
No response
Operating System
Ubuntu 22
Game Source
Built from source
Game Version
e1004d1
Additional Information
This is the fix:
diff --git a/source/Ship.cpp b/source/Ship.cpp
index 61d4b668c..47fa1f485 100644
--- a/source/Ship.cpp
+++ b/source/Ship.cpp
@@ -2249,7 +2249,7 @@ void Ship::Move(vector<Visual> &visuals, list<shared_ptr<Flotsam>> &flotsam)
if((aNormal > 0.) != (vNormal > 0.) && fabs(aNormal) > fabs(vNormal))
dragAcceleration = -vNormal * angle.Unit();
}
- if(velocity.Length() > MaxVelocity() || velocity.Length() < 0.1)
+ if(commands.Has(Command::STOP) || velocity.Length() > MaxVelocity() || velocity.Length() < 0.1)
velocity += dragAcceleration;
else
velocity += acceleration;
I don't want to do a PR until the conflicts between master and experimental are resolved.