How can I make actually good movement AI?

Hello, y’all!
I am making a top-down PvE game. To manage my enemie’s movement, I am simply getting the closest target & doing Humanoid:Move() towards it.
Obviously, this makes the movement super predictable, incapable of aviding obstacles, and each NPC will often overlap with each other, and I want to improve upon these.
Here is some footage for reference (the visual bugs are something I kinda fixed but I can not get footage of the gameplay at the moment):

To avoid obstacles I will need to use pathfinding, but which pathfinding will fit my needs better? What are the pros and cons of the A* pathfinding algorythm and Roblox’s?

With the pathfinding working, what can I do to make them harder to overlap with each other?

Thank you for any help!

Making your own A* pathfinding allows for more customization. I’m not sure if you want that, but if you’re using the regular pathfindingservice then you should definitely look into PathfindingModifiers.

What sort of extra customization does A* provide that Roblox does not? Also they have perforance differences that you are aware of?

A* is extra customizable because you literally make it yourself.

In terms of performance for A*, depends on how many nodes you have. For the regular pathfindingservice, it’s fine.

Can you recall an example of a customization A* allows me to do in particular?

For the regular pathfindingservice, you cannot provide nodes. It will calculate nodes on its own.

For A* pathfinding, you can provide it nodes to work with. This is useful for AIs driving cars who need to follow the roads for example.

Oh, I see! That makes sense. I am not sure of how much of a use I would get out of A* in my situation. Thanks!

Now all I need is to figure out how to make them not as linear with each other…