if your game is for 4 directions, up, down, left and right and jump (jump is separate from up) then this tutorial needs a little tweaking for your game since it has 2 more directions for movement (up and down) that weren't taken into account for this tutorial. But concept is still the same.

if your game is for 4 directions, up, down, left and right and jump (jump is separate from up) then this tutorial needs a little tweaking for your game since it has 2 more directions for movement (up and down) that weren't taken into account for this tutorial. But concept is still the same.

8 Directional movement, top down prospective, I wanna try to make him attack when he gets near the player, move to the player when player comes close or line of sight, low level stuff ya know?

@CurioJoeOk. It's a different kind of game altogether from what I was expecting, but I will try to give my initial thoughts on it.

Create sensor objects (which will be invisible) and place them in the intersections. You can make 4 different sensor objects for 4 directions.

For example:enemy IS overlapping sensor_upenemy IS overlapping sensor_downenemy NOT overlapping sensor_leftenemy NOT overlapping sensor_rightFor Each: enemy-> stop moving (use a variable to control AI)

and so on, this way, you can create different variations of movement directions (remember, you are using 8 directions, so there are lots of possible movements than just simple left and right in my tutorial). You will still follow the same general logic/idea I used in my tutorial (which is using an instance variable for AI). It would still do you good help to still give it a good read or study my file, it's pretty simple).

Use FOR EACH: enemy to make each enemy behave independently. This way, you have enemies moving in different directions (like patrolling the streets) when you are not in their sight. Then either use Line of Sight behavior or calculate the distance (there is an expression for distance) between you and each enemy to determine if they will chase you, attack you or keep patrolling.

Now for attacks, if you have contact (punches, kicks) and long-range (bullets), you have to further divide the AI, enemies shoot you when you are within a range, they punch you when you are directly beside them. Again, I used the same logic in my tutorial (even if it is for sideview platformer) although I haven't updated my tutorial yet with coding attacks.

To make the AI a little unpredictable, add SYSTEM: Random(1) <= 0.25 meaning it will be 25% chance of happening. It is also in my tutorial file.

sgn15 wrote:@CurioJoeOk. It's a different kind of game altogether from what I was expecting, but I will try to give my initial thoughts on it.

Create sensor objects (which will be invisible) and place them in the intersections. You can make 4 different sensor objects for 4 directions.

For example:enemy IS overlapping sensor_upenemy IS overlapping sensor_downenemy NOT overlapping sensor_leftenemy NOT overlapping sensor_rightFor Each: enemy-> stop moving (use a variable to control AI)

and so on, this way, you can create different variations of movement directions (remember, you are using 8 directions, so there are lots of possible movements than just simple left and right in my tutorial). You will still follow the same general logic/idea I used in my tutorial (which is using an instance variable for AI). It would still do you good help to still give it a good read or study my file, it's pretty simple).

Use FOR EACH: enemy to make each enemy behave independently. This way, you have enemies moving in different directions (like patrolling the streets) when you are not in their sight. Then either use Line of Sight behavior or calculate the distance (there is an expression for distance) between you and each enemy to determine if they will chase you, attack you or keep patrolling.

Now for attacks, if you have contact (punches, kicks) and long-range (bullets), you have to further divide the AI, enemies shoot you when you are within a range, they punch you when you are directly beside them. Again, I used the same logic in my tutorial (even if it is for sideview platformer) although I haven't updated my tutorial yet with coding attacks.

To make the AI a little unpredictable, add SYSTEM: Random(1) <= 0.25 meaning it will be 25% chance of happening. It is also in my tutorial file.

Good luck.

Thanks i'll try the best with what I can do. Also, what can I do to make them move faster in a direction, The enemy seems to just jerk in motion making rare progress getting anywhere. I used your numbered AI method, btw.

I am not that familiar with both 8 direction and Line of sight behaviors, so I can't really give you good tips that are specific to those behaviors.

Edit:just checked and tried 8 direction on a blank file. It seems it has same aspects as platform behavior. You can change the max speed, acceleration, vectors using events. So you can actually have walk and run (just code them with different moving speeds). I assumed your question was about moving speed? As for the "jerking motion', not sure what you meant. You also have to adjust the angle of the enemy if they are already being hindered by a solid object (not sure how 8 direction works against solid), but the logic is to adjust the angle they are facing so they can continue moving instead of keeping walking against a wall (like a real person walking against a real wall). If solids don't hinder 8 directions from moving, then no issues at all.

there are lots of combinations for moving for 8 directions.Imagine the gray areas are roadsred are sensors (can be 1 object or different objects per direction)arrows are all the possibilities for AI

You can also use timer (time how long it will keep walking in that direction) then when timer ends, set AI to 0 then randomize AI value (like in my tutorial, but base it on how many possible values for AI you use, or randomize just the 4 basic directions). If you don't want timer, alternative is use every x seconds and add 1 to an instance variable, then when said variable = value, set AI to 0. But really I would prefer timer since you wouldn't want to waste a variable when timer behavior is already there for that purpose.