Core: Refactor PathFind#10334
Open
zach2good wants to merge 1 commit into
Open
Conversation
1d67af7 to
1641654
Compare
Contributor
Author
Contributor
Author
|
Added hold tag until test corpus is completed |
1641654 to
1af1511
Compare
This commit does _many_ things. - Remove "Wallhack" was a PathFind flag. Replace it with some stall-checking and teleport logic, and some force-despawn logic to curtail abusers. This will be sufficient for now until we really lock down exactly how retail handles this. - Retool PathFind to actually use the points given to it by NavMesh. It was using a "good enough" approach when travelling between points, which would lead to the entity dropping down holes, etc. - Add chunked pathing as an implementation detail of PathFind, allowing cheap and reliable long-distance pathing while only specifying two points. - Add LOS caching in MobController, so we're not constantly hammering ximesh with requests if nothing has changed. - Some other caching bits and bobs. - General refactoring and cleanup of PathFind, NavMesh, XiMesh. - Removing stray ligatures. - Add NO_STUCK_TELEPORT mobmod, to control the "I think I'm stuck, I'm just going to teleport straight to you now so you can't cheese" logic - Removed calls and bindings for "setCarefulPathing". We'll still use it for drawIn since that's based on rough math. We'll eventually (maybe) replace this sort of thing with navmesh::moveAlongSurface() - This will probably all work fine with the current navmeshes, but everything would be improved if you updated your navmeshes using the rebuild commands I added recently (Will soon update submodule)
1af1511 to
9328947
Compare
Contributor
|
Faust around the teleporter might be a good check |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

I affirm:
What does this pull request do?
Replaces: #6117
From commit:
This commit does many things.
Notes:
Adversarial chunking test case:
Garliage pathing before:
NOTE: We're getting close to all the pathing points, but we never actually hit them, leading to us (visually) dropping down holes, etc.

Garliage after:
NOTE: We actually hit the points we're given from the navmesh, and pathing LOOKS good, and is correct:

More Old:
More New:
NOTE: It's intended that we stop a little before our goal: model/combat radii, etc.

Degenerate cases/cheaters/cheesers:
In the interest of keeping mobs on-mesh at all times (because the mesh is correct!), we have some try-again and backoff logic. If these steps fail, the mob is going to teleport into melee range of you and try to beat your ass. In this case, I ran

!up 20, waited a moment, then the pot came to get me. If you die/disappear etc. the mob will go back to roam, see it's off-mesh, and despawn.Difficult pathing video:
2026-06-10.21-38-51.mp4