diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 1b23949ec..4ecdb51bc 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -39,6 +39,7 @@ chaseCrit = defaultCreature , chaseCritMv , chaseCritPerceptionUpdate [0] , targetYouWhenCognizant + , const turnIfDamaged , const (crMeleeCooldown %~ max 0 . subtract 1) ] , _crName = "chaseCrit" diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index 8a473f43c..69c837c43 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -7,6 +7,7 @@ module Dodge.Creature.ReaderUpdate , watchUpdateStrat , reloadOverride , overrideInternal + , turnIfDamaged , goToTarget , flockACC , chaseCritMv @@ -162,3 +163,11 @@ targetYouWhenCognizant w cr = case cr ^? crPerception . crAwarenessLevel . ix 0 -- consider changing targeted creature to be just an index Just (Cognizant _) -> _creatures w IM.! 0 `seq` cr & crIntention . targetCr ?~ _creatures w IM.! 0 _ -> cr & crIntention . targetCr .~ Nothing + +turnIfDamaged :: Creature -> Creature +turnIfDamaged cr + | _crPastDamage cr > 0 = case _crStrategy (_crActionPlan cr) of + WatchAndWait -> cr & crPerception . crAwakeLevel .~ Vigilant + & crActionPlan . crStrategy .~ StrategyActions LookAround [TurnToA (_crPos cr -.- unitVectorAtAngle (_crDir cr))] + _ -> cr + | otherwise = cr diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index dbea03377..8f0c0653c 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -1171,6 +1171,7 @@ data Strategy | FollowImpulses | WatchAndWait | WarningCry + | LookAround | CloseToMelee Int | StrategyActions Strategy [Action] | GetTo Point2