1 / 43

Basic Movement AI

Basic Movement AI. Chasing, Evading, Intercepting, Pattern Movements. Movement AI. Movement – Ubiquitous behavior found in many games Chasing and Evading – the most basic movement AI that can be implemented on NPCs. Chasing & Evading . 2 parts Decision to initiate a chase or evade

lynde
Download Presentation

Basic Movement AI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Basic Movement AI Chasing, Evading, Intercepting, Pattern Movements

  2. Movement AI • Movement – Ubiquitous behavior found in many games • Chasing and Evading – the most basic movement AI that can be implemented on NPCs

  3. Chasing & Evading • 2 parts • Decision to initiate a chase or evade • Effecting the chase or evade • Sometimes, a 3rd part, to avoid obstacles while chasing and evading is required, but that can be considered separately • 1st part – decision making • Focus on 2nd part – concerns the action itself, to chase and evade

  4. Basic method • Simplest method: Update NPC coordinates through each game loop to • Decrease the distance between NPC and player (chase) • Increase the distance between NPC and player (evade) • Pays no attention to NPC or player headings (direction of travel) or speeds

  5. More complex methods • Positions and velocities (direction of travel) of both NPC and player are considered so that NPC can be moved to intercept the player instead of relentless chasing • In short: Predicting where the player will likely to be at in the future, and moving towards that as target

  6. Basic Chasing • Pseudocode for Chasing if (npcX > playerX) npcX--; else if (npcX < playerX) npcX++; if (npcY > playerY) npcY--; else if (npcY < playerY) npcY++;

  7. Basic Evading • Moving farther, instead of moving closer • Pseudocode for Evading if (npcX > playerX) npcX++; else if (npcX < playerX) npcX--; if (npcY > playerY) npcY++; else if (npcY < playerY) npcY--;

  8. Tile-based environment – How? • 8-way movement

  9. Tile-based Chase movement • Updating difference • Continuous environment: x, y coordinates in Cartesian coordinate system (float) • Tile-based environment: x, y in tile coordinate system (int.) are columns and rows if (npcCol > playerCol) npcCol--; else if (npcCol < playerCol) npcCol++; if (npcRow > playerRow) npcRow--; else if (npcRow < playerRow) npcRow++;

  10. Tile-based Chase – Any problem?

  11. Line-of-sight Chasing • Make NPC take a direct straight-line path towards player • Stationary player – straight path • Moving player – path is not necessarily straight Note  may not look too bad if game loop constantly updates position, path should appear curved and natural • Movements in TBE will appear less smoother than CE due to coarse movement units

  12. L-o-S Chasing in TBE • Aesthetic disadvantage of using simple basic chase – although no. of steps are the same • Limitation of 8-way movement, no other possible angles • Will look really BAD if many NPCs are chasing this way

  13. L-o-S Chasing in TBE • Solution: To calculate an intermediate path (closest to a straight line) for the NPC to chase • Use a standard line-drawing algorithm – Bresenham’s algorithm • Nice thing: Does not draw two adjacent pixels along a line’s shortest axis • Path calculation function • Calculate and store a series of tiles to be moved to • Needs to be called every time player changes position

  14. L-o-S Path in TBE

  15. “Looking At” Rotation • Without “Looking At” Rotation • Only x and/or y are updated at each time (8-direction) • With “Looking At” Rotation • Additional rotation steers NPC to look at target and chase in that direction (x1, y1) (x1, y1) θ (x2, y2) (x2, y2)

  16. Thrust and Steering forces • Thrust force: pushes object to the front (velocity) • Steering force: pushes the nose of object to the right or left to rotate (angular velocity)

  17. L-o-S Chasing in CE • No need to determine path like in TBE, movement updates are in floating-point (rounding to nearest pixel integer gives good approximation) • Similarly, rotation angle (“looking at” direction) should be re-calculated every time player changes position

  18. L-o-S Chasing in CE • Curved path taken by predator when chasing prey • What happens if the speed of the predator is set too fast?

  19. Preventing overshooting • Implement speed control logic to allow predator to slow down as it gets closer to prey • Calculate distance between both, if distance < some predefined distance, reduce thrust velocity to slow down

  20. L-o-S Evading • Since we now understand L-o-S Chasing, L-o-S Evading is just doing everything the reverse • TBE • Update movement in opposite direction (good enough!) • CE • “Looking at” rotation should steer to opposite face • Update movement in opposite direction

  21. Further improvements? • Acceleration (and deceleration) for thrust force and steering force? • Any way to improve “intelligence” of chasing movement?

  22. Intercepting • Line-of-Sight Chase: NPC will always head directly towards player • In the case of a moving target, what happens? Player Line-of-sight Chase NPC

  23. Intercepting • Movement can be more “intelligent”, if it knows how to intercept the player somewhere along the player’s “trajectory”. • How do we work this out? What information do we need? Player Line-of-sight Chase NPC

  24. Intercepting – In Principle • Predict some “future” position of the player and move towards that position, so that it reaches the same time as player… Player Line-of-sight Chase A “future” position of player NPC Intercepting Chase

  25. Intercepting – A “Future” Position • “Future” can be safely predicted linearly • How to compute this position? Player Line-of-sight Chase A “future” position of player NPC Intercepting Chase

  26. Intercepting • Important to consider relative velocities (direction and magnitude) and distance instead of just their current positions • Let’s work out the math to determine what is the predicted future position…

  27. Intercepting - Code • Recall: You would have implemented the Enemy class already, and have it to chase the player. Target  Player position • For Intercept, Target  Player’s predicted future position • Easy to modify and adapt code from Chase to Intercept • Function to be called through the game loop to constantly update interception point

  28. Intercepting

  29. Intercepting • There are scenarios where intercepting may not be possible or unrealistic • NPC moving at much slower velocity • NPC ends up chasing from behind a player moving in straight line • NPC gets ahead of player and moving at a faster speed

  30. Pattern Movement • Simple way of giving the illusion of intelligent behavior • “Choreographed” movements of enemy NPCs making organized maneuvers, loops • Can be used effectively for • Enemy NPCs (patrol, attack) • Friendly NPCs (to exhibit or act intelligently to cooperate with player) • Secondary NPCs (doing all kinds of random patterned actions)

  31. Standard Pattern Movement • Uses lists or arrays of encoded instructions to tell NPC how and where to move each step • Easy to loop through again • Sample control data ControlData { double turnRight; double turnLeft; double stepForward; double stepBackward; };

  32. Standard Pattern Movement • Can include other kinds of actions: • Fire weapon, release chaff, drop bomb, do nothing, speed up, slow down, etc. • Pattern initialization • Hardcoded in game • Loaded from a data file (text, XML) • Process pattern • Maintain and increment an index to the pattern array through the game loop

  33. Standard Pattern Movement void GameLoop(void) { . . . Object.orientation += Pattern[CurrentIndex].turnRight; Object.orientation -= Pattern[CurrentIndex].turnLeft; Object.x += Pattern[CurrentIndex].stepForward; Object.x -= Pattern[CurrentIndex].stepBackward; CurrentIndex++; . . . }

  34. Pattern Movement in TBE • Bresenham’s line drawing algorithm used again to pre-calculate path steps • More complex paths can be created by joining up line segments • Each new segment will begin once a previous one ends • Line-of-sight function  End of segment now assigned as the target

  35. Pattern Movement in TBE • Instead of resetting L-o-S path array, new line segment is appended to previous path (Why do we do this?)

  36. Pattern Movement in TBE • High-level code for pattern initialization entityList[1].InitializePathArrays(); entityList[1].BuildPathSegment(10, 3, 18, 3); entityList[1].BuildPathSegment(18, 3, 18, 12); entityList[1].BuildPathSegment(18, 12, 10, 12); entityList[1].BuildPathSegment(10, 12, 10, 3); entityList[1].NormalizePattern(); entityList[1].patternRowOffset = 5; entityList[1].patternColOffset = 2;

  37. Patrolling: Cyclical & Ping Pong A A B B C C D ABCBABCBA ABCDABCD

  38. Pattern Movement in TBE • Ping Pong Patrolling entityList[1].InitializePathArrays(); entityList[1].BuildPathSegment(10, 3, 18, 3); entityList[1].BuildPathSegment(18, 3, 10, 3); entityList[1].NormalizePattern(); entityList[1].patternRowOffset = 5; entityList[1].patternColOffset = 2;

  39. Pattern Movement in TBE • To prevent repetition and predictability  Add a random factor for choosing alternative patrolling path How to implement?

  40. Pattern Movement in PSE • PSE – Physically Simulated Environments (or Continuous Environments with Physics) • You may specify positions for NPC to traverse, but that defeats the purpose of using CE. Bad realism! • Control structure needs to be designed to accommodate forces (thrust, steering)

  41. Pattern Movement in PSE structControlData { boolPThrusterActive; boolSThrusterActive; double dHeadingLimit; double dPositionLimit; boolLimitHeadingChange; boolLimitPositionChange; }; • Changes in heading and position are relative in patrolling • Based on this control data, how do you initialize a square pattern patrol?

  42. Pattern Movement in PSE • More implementation details can be found in textbook

  43. Other Useful Movements • Velocity Matching (for friendly NPCs, flocking) • Wander (roaming NPCs) (can be found in Millington’s book)

More Related