====== Penance Runner ====== #;; Penance Runners are a noncombat enemy faced in the [[minigames:barbarian_assault|Barbarian Assault]] minigame. They are a curious creature. Their mechanics are notoriously complicated. #;; #;; Penance Runners are passive creatures. They do not interact with players at all, other than standard NPC blocking rules. Only the defender role can interact with runners, and must do so indirectly via dropping bait for them. #;; ===== Waves ===== #;; Penance runners are identical throughout the waves. The only difference between the waves is how many runners spawn. The runners themselves are exactly identical. #;; ===== Cycle ===== #;; Penance runners respect the [[minigames:barbarian_assault:wave#cycle|wave cycle]]. This is a core aspect of runner mechanics. Runners perform a specific action on specific ticks of every cycle, as listed below. #;; ==== Tick 0 ==== * Runners spawn * Runners scan their surrounding area for bait, but only if they are already spawned * Runners begin movement, queueing a walk towards their chosen location (described below) ==== Tick 5(?) ==== * Runners re-scan for bait if they are already moving towards bait ===== Scanning ===== #;; Twice during each cycle, runners scan for bait. This means they look to find any bait that they can see. #;; #;; A runner can only see bait that is close enough to it - the exact distance depends on the role level of the defender that dropped the bait. #;; #;; A runner can only see bait that is within its line of sight. A runner cannot see bait if there is an obstacle blocking vision between the runner and the bait. #;; #;; The re-scanning process only occurs if the runner scanned bait on the first tick of the cycle. If re-scanning is successful, then the runner may change its preferred bait. If re-scanning fails, then the runner will simply continue to prefer its originally scanned bait. #;; ===== Movement ===== #;; Each cycle, runners make a movement decision, to determine where they will go. Their decisionmaking process is described here. #;; ---- ==== Free ==== #;; If a runner sees no bait upon scanning, or if it has just spawned, then it will randomly choose 1 of the following directions: East, West, South. It will then walk in that direction for the rest of the cycle. #;; ---- ==== Caught ==== #;; If a runner finds bait upon scanning, then it will run to the square that that bait is on. #;; #;; If a runner is running towards bait and it re-scans and finds new bait that it prefers, then it will run towards the square of its new preferred bait. #;; ---- ==== Bait Preference ==== #;; When a runner scans for bait, it will select a single bait that it prefers most and run towards that bait. Its preference decision is described here. #;; === Extant === #;; A runner can only prefer bait that is on the ground at the time of scanning. #;; #;; Thus, when a runner re-scans for bait during its cycle, if its old bait is gone, then it will have to prefer a different bait. #;; #;; If a runner re-scans and finds no bait at all, then it will not change preference, and thus continue to prefer the original, no-longer-extant bait, that it chose at the beginning of the cycle. #;; === Quadrant === #;; Runners have preference quadrants. The cave is divided into such quadrant, each one having a different priority level. A runner will always prefer bait in a higher priority quadrant over bait in a lower priority quadrant. #;; #;; Quadrants are square-shaped, approximately 8x8 game squares. #;; #;; Quadrants tile the cave in a perfect square grid aligned along the cardinal directions. #;; #;; The highest priority quadrant is the one southeast of the eastern trap. The lowest priority quadrant is the one southwest of the western trap. #;; #;; Quadrant priority decreases from east to west, and from north/south to center. #;; #;; A quadrant always has higher priority than quadrants to the west of it. A quadrant always has higher priority than quadrants that are on the same north-south axis but closer to the center of the cave. Described slightly differently: quadrant priority is lexically ordered by the quadrant's east-west coordinate followed by the quadrant's north-south offset from center. #;; === Proximity === #;; If a runner finds that there is more than 1 bait in the highest-priority quadrant that it sees bait in, then it will prefer the bait that is closest to it at the time of scanning. #;; ---- ==== Eating ==== #;; When a runner reaches the square that has the bait on it that it was walking towards, then it will attempt to eat the bait. If the bait is still present on the square when the runner gets there, then it will eat the bait. #;; #;; If the bait matches the correct bait for the call that it was placed during, then the runner will like the bait, and stay on the square it eats on. If the bait does not match the correct bait for the call that it was placed during, then the runner will dislike the bait, and run 5 squares north. #;; #;; If the bait was still present upon the runner's most recent scan, then it will still successfully "eat" the bait, but only if the bait is correct. This sometimes allows runners to appear as if they are eating nonexistent bait. #;;