How do I randomize pathfind for each sprite in family

Get help using Construct 2

Post » Sat Oct 01, 2016 6:57 am

Hello all.

So I can't figure out how to make a sprite w/ pathfinding choose different targets to follow in a family.

I have this setup:
(Family)- PlayerUnits
--->Sprite1
(Family)- EnemyUnits
--->Sprite2

Afterwards I copied both Sprite1 & 2 multiple times, but when I run the game all the Enemy Sprites(Sprite2) only finds a path to the main/original Sprite1. They only move to the next copy of Sprite1 when the original is destroyed.

I am basically trying to make AI that resembles those from games like starcraft, where the enemy units just follow the nearest target.

Any help is much appreciated.
Thanks
B
4
Posts: 2
Reputation: 204

Post » Sat Oct 01, 2016 10:34 am

For nearest target add a pick nearest condition something like PlayerUnits > Sprite1 pick nearest > Set destination Sprite1. Without a condition it will just pick the lowest UID Sprite1 as it is doing at the moment, you need to specify which Sprite1 it should go to.
B
46
S
15
G
73
Posts: 2,029
Reputation: 43,465

Post » Sat Oct 01, 2016 6:22 pm

Thanks for the help, I got it to work but now I have another issue.

They seem to be moving(aiming) as a whole instead of individually. What I mean by this is when they chase a sprite down they all end up going to the same pixel(creating the stacked effect). This is problematic because I want them to be surround the unit thus limiting the amount of enemies that can attack a single playerunit. Although when I add the "Solid" behavior only one of the enemysprite moves to the location. I believe this is because they are all aiming for the same specific pixel.

Is there a way I can work around this? Like have them "react" to if a spot they are trying to move to is occupied then take the next available space?

EDIT: Basically I want to implement this type of syntax per instance of "enemysprite":
For each UID of enemysprite; Find path to nearest playerunit
B
4
Posts: 2
Reputation: 204

Post » Sat Oct 01, 2016 7:57 pm

Yeah plus you'll want it to be nearest playerunit that isn't already being overlapped right?

It would normally be - for each enemy sprite > find path to nearest player unit - but since you want it to do checks for if the player has been targeted...

In its basic form, when an enemy unit overlaps a player, or 'has reached destination' in the pathfinding you could toggle a player instance boolean 'isTargeted'.
Then when you run -for each enemy sprite > find path to nearest player unit - add a condition under for each enemy sprite that player is not targeted (isTargeted set false).

Of course this is getting out of simple mode now as you will have enemies moving to a player as its destination before it is set to isTargeted so you will need to be either running this check every so often to find a new destination or use the 'destination failed' event on pathfinding.

If you want a specific number of enemies to reach that destination instead of just one, you could have the isTargeted as a number and add 1 every time an enemy gets there and when it hits 6 or whatever the total is then it doesnt become a destination anymore. You'll just have to build it a bit at a time to get what you eventually want.
B
46
S
15
G
73
Posts: 2,029
Reputation: 43,465


Return to How do I....?

Who is online

Users browsing this forum: 99Instances2Go, DuqueKarl, Vinterstille and 3 guests