Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect logic in Ship::Move breaks Command::STOP #29

Open
1 task done
UnorderedSigh opened this issue Jun 28, 2023 · 3 comments · May be fixed by #32
Open
1 task done

Incorrect logic in Ship::Move breaks Command::STOP #29

UnorderedSigh opened this issue Jun 28, 2023 · 3 comments · May be fixed by #32
Labels
bug Something isn't working

Comments

@UnorderedSigh
Copy link

Is there an existing issue for this?

  • I have searched the existing issues

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.

@UnorderedSigh
Copy link
Author

I have retested experimental with this fix, and it doesn't fix the problem. I'm still investigating.

@UnorderedSigh UnorderedSigh linked a pull request Jul 6, 2023 that will close this issue
@UnorderedSigh
Copy link
Author

I have a fix for this, but a later test fails now.

@Zitchas
Copy link
Member

Zitchas commented Mar 24, 2024

It's been a while and I'm just getting back up to speed. Is this bug still a thing?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants
@Zitchas @UnorderedSigh and others