From f0e568e6945fbd25019dec85a66a5eb63fab4dc8 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 7 Apr 2026 15:29:02 +0100 Subject: [PATCH] Add crab crit, rethink Action datatype slightly --- src/Dodge/Base/Collide.hs | 1 + src/Dodge/Creature/Action.hs | 73 +-- src/Dodge/Creature/ArmourChase.hs | 2 +- src/Dodge/Creature/ChaseCrit.hs | 8 + src/Dodge/Creature/Mass.hs | 1 + src/Dodge/Creature/Material.hs | 1 + src/Dodge/Creature/MaxHP.hs | 1 + src/Dodge/Creature/MoveType.hs | 1 + src/Dodge/Creature/Perception.hs | 15 +- src/Dodge/Creature/Picture.hs | 33 ++ src/Dodge/Creature/Radius.hs | 1 + src/Dodge/Creature/ReaderUpdate.hs | 110 +++-- src/Dodge/Creature/Shape.hs | 1 + src/Dodge/Creature/Statistics.hs | 3 + src/Dodge/Creature/Update.hs | 3 + src/Dodge/Creature/Vocalization.hs | 2 + src/Dodge/Creature/Volition.hs | 2 +- src/Dodge/Data/ActionPlan.hs | 11 +- src/Dodge/Data/Creature/Misc.hs | 5 + src/Dodge/Default/Creature.hs | 2 +- src/Dodge/Humanoid.hs | 19 +- src/Dodge/Render/ShapePicture.hs | 1 + src/Dodge/Room/Tutorial.hs | 23 +- src/Dodge/TestString.hs | 11 +- tags | 741 +++++++++++++++-------------- 25 files changed, 606 insertions(+), 465 deletions(-) diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 85db1a5e9..dbefdc932 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -179,6 +179,7 @@ crHeight cr = case cr ^. crHP of HoverCrit {} -> 10 ChaseCrit {} -> 25 Avatar {} -> 25 + CrabCrit {} -> 25 _ -> error "Need to define crHeight for this crType" CrIsCorpse{} -> Just 5 CrDestroyed{} -> Nothing diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index 99d42e231..f457b4360 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -45,9 +45,9 @@ performActions cid w = iss where cr = w ^?! cWorld . lWorld . creatures . ix cid - (iss, mayas) = foldMap (performAction cr w) $ cr ^. crActionPlan . apAction + (iss, mayas) = fromMaybe ([],NoAction) $ performAction cr w <$> cr ^? crActionPlan . apAction -type ActionUpdate = ([Impulse], [Action]) +type ActionUpdate = ([Impulse], Action) {- | Performing an action on a frame creates an ActionUpdate: gives impulses and updates/deletes the action itself. @@ -55,54 +55,61 @@ type ActionUpdate = ([Impulse], [Action]) performAction :: Creature -> World -> Action -> ActionUpdate performAction cr w ac = case ac of AimAt tcid p -> performAimAt cr w tcid p - WaitThen 0 newAc -> ([], [newAc]) - WaitThen t newAc -> ([], [WaitThen (t -1) newAc]) - ImpulsesList (xs : xss) -> (xs, [ImpulsesList xss]) - ImpulsesList _ -> ([], mempty) - DoImpulses imps -> (imps, mempty) - DoActionThen fsta afta -> case performAction cr w fsta of -- NOTE this only does ONE continuation action - (imps, nxta : _) -> (imps, [DoActionThen nxta afta]) - (imps, []) -> (imps, [afta]) + WaitThen 0 newAc -> ([], newAc) + WaitThen t newAc -> ([], WaitThen (t -1) newAc) + ImpulsesList (xs : xss) a -> performAction cr w a & _1 <>~ xs + & _2 %~ ImpulsesList xss + ImpulsesList _ a -> performAction cr w a + DoImpulses imps -> (imps, NoAction) + DoActionThen fsta afta -> case performAction cr w fsta of + (imps, NoAction) -> (imps, afta) + (imps, nxta) -> (imps, DoActionThen nxta afta) DoActionWhile f act -> performAction cr w $ DoActionWhilePartial act f act DoActionWhilePartial partAc f resetAc | doWdCrBl f w cr -> case performAction cr w partAc of - (imps, nxta : _) -> (imps, [DoActionWhilePartial nxta f resetAc]) - (imps, []) -> (imps, [DoActionWhilePartial resetAc f resetAc]) + (imps, NoAction) -> (imps, DoActionWhilePartial resetAc f resetAc) + (imps, nxta ) -> (imps, DoActionWhilePartial nxta f resetAc) | otherwise -> performAction cr w partAc DoActionIf f ifa | doWdCrBl f w cr -> performAction cr w ifa - | otherwise -> ([], mempty) + | otherwise -> ([], NoAction) DoActionIfElse ifa f elsea | doWdCrBl f w cr -> performAction cr w ifa | otherwise -> performAction cr w elsea DoActionWhileInterrupt repa f afta - | doWdCrBl f w cr -> (fst $ performAction cr w repa, [DoActionWhileInterrupt repa f afta]) + | doWdCrBl f w cr -> (fst $ performAction cr w repa, DoActionWhileInterrupt repa f afta) | otherwise -> performAction cr w afta - DoActions [] -> ([], mempty) - DoActions acs -> - let (imps, newAcs) = foldMap (performAction cr w) acs - in (imps, newAcs) - StartSentinelPost -> ([AddGoal $ SentinelAt (cr ^. crPos . _xy) (_crDir cr)], mempty) +-- DoActions [] -> ([], NoAction) +-- DoActions acs -> +-- let (imps, newAcs) = foldMap (performAction cr w) acs +-- in (imps, newAcs) + StartSentinelPost -> ([AddGoal $ SentinelAt (cr ^. crPos . _xy) (_crDir cr)], NoAction) PathTo p a -> performPathTo a cr w p + EvadeAim _ _ 0 -> (mempty,NoAction) + EvadeAim p a i -> tryEvadeSideways cr w p a i TurnToPoint p -> performTurnToA cr p - LeadTarget p -> fromMaybe ([], mempty) $ do + LeadTarget p -> fromMaybe ([], NoAction) $ do i <- cr ^? crIntention . targetCr . _Just tcr <- w ^? cWorld . lWorld . creatures . ix i - return ([TurnTo (tcr ^. crPos . _xy +.+ rotateV (_crDir tcr) p)], mempty) + return ([TurnTo (tcr ^. crPos . _xy +.+ rotateV (_crDir tcr) p)], NoAction) UseSelf f -> performAction cr w $ doCrAc f cr ArbitraryAction f -> performAction cr w (doCrWdAc f cr w) - DoImpulsesAlongside sideImp mainAc -> case performAction cr w mainAc of - (imp, [nxtac]) -> (sideImp ++ imp, [DoImpulsesAlongside sideImp nxtac]) - (imp, _) -> (sideImp ++ imp, mempty) + DoImpulsesAlongside sideImp mainAc -> performAction cr w mainAc & _1 <>~ sideImp DoReplicate t nxtac -> performAction cr w $ DoReplicatePartial nxtac t nxtac DoReplicatePartial _ 0 pac -> performAction cr w pac DoReplicatePartial startac t partac -> case performAction cr w partac of - (imps, [nextac]) -> (imps, [DoReplicatePartial startac t nextac]) - (imps, _) -> (imps, [DoReplicatePartial startac (t -1) startac]) - NoAction -> ([], mempty) + (imps, NoAction) -> (imps, DoReplicatePartial startac (t -1) startac) + (imps, nextac) -> (imps, DoReplicatePartial startac t nextac) + NoAction -> ([], NoAction) + +tryEvadeSideways :: Creature -> World -> Point2 -> Float -> Int -> ActionUpdate +tryEvadeSideways _ _ p a i = jumpleft -- (mv,mempty) + where + jumpleft = (mv,EvadeAim p a (i-1)) + mv = [Move (V2 0 3)] performAimAt :: Creature -> World -> Int -> Point2 -> ActionUpdate -performAimAt cr w tcid p = ([TurnToward tpos aimSp], [AimAt tcid tpos]) +performAimAt cr w tcid p = ([TurnToward tpos aimSp], AimAt tcid tpos) where cdir = _crDir cr cpos = cr ^. crPos . _xy @@ -121,20 +128,20 @@ crPathing cr = case cr ^. crStance . carriage of performPathTo :: Action -> Creature -> World -> Point2 -> ActionUpdate performPathTo a cr w p - | dist cpos p <= crRad (cr ^. crType) = mempty + | dist cpos p <= crRad (cr ^. crType) = (mempty,NoAction) | fst (crPathing cr) cpos p w = gotowards p | otherwise = case uncurry pointTowardsImpulse' (crPathing cr) cpos p w of Just q -> gotowards q - _ -> ([], [a]) + _ -> ([], a) where - gotowards q = ( [MvTurnToward q, MvForward, RandomTurn jit] , [PathTo p a]) + gotowards q = ( [MvTurnToward q, MvForward, RandomTurn jit] , PathTo p a) cpos = cr ^. crPos . _xy jit = _mvTurnJit $ crMvType cr performTurnToA :: Creature -> Point2 -> ActionUpdate performTurnToA cr p - | angleVV cdirv dirv < 0.1 = mempty - | otherwise = ([MvTurnToward p, RandomTurn jit], [TurnToPoint p]) + | angleVV cdirv dirv < 0.1 = (mempty,NoAction) + | otherwise = ([MvTurnToward p, RandomTurn jit], TurnToPoint p) where cpos = cr ^. crPos . _xy cdirv = unitVectorAtAngle (_crDir cr) diff --git a/src/Dodge/Creature/ArmourChase.hs b/src/Dodge/Creature/ArmourChase.hs index 41041d971..aa6d72889 100644 --- a/src/Dodge/Creature/ArmourChase.hs +++ b/src/Dodge/Creature/ArmourChase.hs @@ -22,7 +22,7 @@ flockArmourChaseCrit = -- ] , _crActionPlan = ActionPlan - { _apAction = [] + { _apAction = NoAction , _apStrategy = FollowImpulses , _apGoal = [Kill 0] } diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index ecf45d709..a99b00c97 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -1,6 +1,7 @@ module Dodge.Creature.ChaseCrit ( smallChaseCrit, invisibleChaseCrit, + crabCrit, chaseCrit, hoverCrit, ) where @@ -32,6 +33,13 @@ chaseCrit = & crHP .~ HP 150 & crFaction .~ ColorFaction green +crabCrit :: Creature +crabCrit = defaultCreature + & crName .~ "chaseCrit" + & crHP .~ HP 350 + & crType .~ CrabCrit 0 LeftForward 0 0 + & crFaction .~ ColorFaction red + hoverCrit :: Creature hoverCrit = defaultCreature diff --git a/src/Dodge/Creature/Mass.hs b/src/Dodge/Creature/Mass.hs index 930730372..4a9ba73e8 100644 --- a/src/Dodge/Creature/Mass.hs +++ b/src/Dodge/Creature/Mass.hs @@ -6,6 +6,7 @@ crMass :: CreatureType -> Float crMass = \case Avatar {} -> 10 ChaseCrit {} -> 10 + CrabCrit {} -> 10 HoverCrit {} -> 5 SwarmCrit -> 2 AutoCrit -> 10 diff --git a/src/Dodge/Creature/Material.hs b/src/Dodge/Creature/Material.hs index d43498233..990a5efe5 100644 --- a/src/Dodge/Creature/Material.hs +++ b/src/Dodge/Creature/Material.hs @@ -9,6 +9,7 @@ crMaterial :: CreatureType -> Material crMaterial = \case Avatar{_avatarMaterial = mt} -> mt ChaseCrit {} -> Flesh + CrabCrit {} -> Flesh HoverCrit {} -> Metal SwarmCrit -> Flesh AutoCrit -> Flesh diff --git a/src/Dodge/Creature/MaxHP.hs b/src/Dodge/Creature/MaxHP.hs index a9b95a2f7..a2304beed 100644 --- a/src/Dodge/Creature/MaxHP.hs +++ b/src/Dodge/Creature/MaxHP.hs @@ -7,6 +7,7 @@ crMaxHP :: CreatureType -> Int crMaxHP = \case Avatar {} -> 15000 ChaseCrit {} -> 150 + CrabCrit {} -> 350 HoverCrit {} -> 100 SwarmCrit -> 50 AutoCrit -> 100 diff --git a/src/Dodge/Creature/MoveType.hs b/src/Dodge/Creature/MoveType.hs index ec4892361..66478f0fe 100644 --- a/src/Dodge/Creature/MoveType.hs +++ b/src/Dodge/Creature/MoveType.hs @@ -8,6 +8,7 @@ crMvType :: Creature -> CrMvType crMvType cr = case _crType cr of Avatar {} -> MvWalking 1.5 ChaseCrit {} -> defaultChaseMvType & mvSpeed .~ 1.8 + CrabCrit {} -> defaultChaseMvType & mvSpeed .~ 1 HoverCrit {} -> defaultChaseMvType & mvSpeed .~ 0.16 SwarmCrit -> defaultChaseMvType AutoCrit -> defaultAimMvType diff --git a/src/Dodge/Creature/Perception.hs b/src/Dodge/Creature/Perception.hs index 5d5732041..d795147c0 100644 --- a/src/Dodge/Creature/Perception.hs +++ b/src/Dodge/Creature/Perception.hs @@ -21,12 +21,8 @@ import Linear import RandomHelp import Sound.Data -perceptionUpdate :: - -- | List of creature ids that may direct attention and awareness - [Int] -> - World -> - Creature -> - Creature +-- | The [Int] is a list of creature ids that may direct attention and awareness +perceptionUpdate :: [Int] -> World -> Creature -> Creature perceptionUpdate is w = rememberSounds w . basicAwarenessUpdate w . basicAttentionUpdate is w {- | Update a creatures awareness based upon the creatures' current direction @@ -55,9 +51,9 @@ basicAwarenessUpdate w cr = case _cpAttention $ _crPerception cr of return $ (crActionPlan . apStrategy .~ WarningCry) . (crActionPlan . apAction - .~ [ImpulsesList (crImpulsesOnCognizant w cr) - , AimAt 0 (w ^?! cWorld . lWorld . creatures . ix 0 . crPos . _xy) - ]) + .~ ImpulsesList (crImpulsesOnCognizant w cr) + (AimAt 0 (w ^?! cWorld . lWorld . creatures . ix 0 . crPos . _xy)) + ) crImpulsesOnCognizant :: World -> Creature -> [[Impulse]] crImpulsesOnCognizant w cr = case cr ^. crType of @@ -65,6 +61,7 @@ crImpulsesOnCognizant w cr = case cr ^. crType of <> [[ChangeStrategy $ CloseToMelee 0]] HoverCrit {} | Just sid <- cognizantVoc w cr -> [Bark sid]: [[ChangeStrategy $ CloseToMelee 0]] + CrabCrit {} -> [[ChangeStrategy $ CloseToMelee 0]] _ | Just sid <- cognizantVoc w cr -> [Bark sid]: replicate 5 [RandomImpulse $ RandImpulseCircMove 1] _ -> replicate 5 [RandomImpulse $ RandImpulseCircMove 3] diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index a4dfc4f84..caf3be60d 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -9,6 +9,7 @@ module Dodge.Creature.Picture ( deadFeet, drawChaseCrit, drawHoverCrit, + drawCrabCrit, ) where import Dodge.Base.Collide @@ -65,6 +66,14 @@ drawHoverCrit cr = colorSH (_skinHead cskin) f a = tpq `Q.comp` (1 & _xy .~ rotateV a 5, Q.qid) tpq = (V3 0 0 0, Q.qid) +drawCrabCrit :: World -> Creature -> Shape +drawCrabCrit w cr = mconcat + [ crabUpperBody w cr + , colorSH (_skinLower cskin) $ crabFeet cr + ] + where + cskin = crShape $ _crType cr + drawChaseCrit :: World -> Creature -> Shape drawChaseCrit w cr = mconcat [ chaseUpperBody w cr @@ -74,6 +83,16 @@ drawChaseCrit w cr = mconcat cskin = crShape $ _crType cr rotmdir = rotateSH (_crMvDir cr - _crDir cr) +crabUpperBody :: World -> Creature -> Shape +crabUpperBody _ cr = colorSH (_skinUpper cskin) + (overPosSH (Q.apply torsoq) (upperPrismPolyHalfMI 5 $ polyCirc 4 12 + & each . _x *~ 0.6) + ) + where + torsoq = (V3 0 0 10,Q.qid) + cskin = crShape $ _crType cr + + chaseUpperBody :: World -> Creature -> Shape chaseUpperBody w cr = colorSH (_skinUpper cskin) (overPosSH (Q.apply torsoq) (upperPrismPolyHalfMI tz $ polyCirc 3 12 @@ -126,6 +145,20 @@ feet cr = case (cr ^? crType . strideAmount,cr ^? crType . footForward) of -- f i = 8 * (sLen - 2*i) / sLen f i = 8 * oneSmooth ((sLen - 2*i) / sLen) +crabFeet :: Creature -> Shape +{-# INLINE crabFeet #-} +crabFeet cr = case (cr ^? crType . strideAmount,cr ^? crType . footForward) of + (Just sa,Just LeftForward) -> sh (f sa) + (Just sa,Just RightForward) -> sh (-f sa) + _ -> sh 0 + where + sh x = translateSHxy x off aFoot <> translateSHxy (- x) (- off) aFoot + aFoot = upperPrismPolyST 10 $ polyCirc 3 2 + off = 10 + sLen = strideLength cr +-- f i = 8 * (sLen - 2*i) / sLen + f i = 8 * oneSmooth ((sLen - 2*i) / sLen) + deadFeet :: Creature -> Shape {-# INLINE deadFeet #-} deadFeet = feet diff --git a/src/Dodge/Creature/Radius.hs b/src/Dodge/Creature/Radius.hs index 1c0b4b79a..7d2bdd9af 100644 --- a/src/Dodge/Creature/Radius.hs +++ b/src/Dodge/Creature/Radius.hs @@ -9,6 +9,7 @@ crRad :: CreatureType -> Float crRad = \case Avatar {} -> 10 ChaseCrit {} -> 10 + CrabCrit {} -> 10 HoverCrit {} -> 8 SwarmCrit -> 2 AutoCrit -> 10 diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index e9dd0da3b..fd28eacaa 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -1,6 +1,6 @@ +{-# LANGUAGE LambdaCase #-} module Dodge.Creature.ReaderUpdate ( doStrategyActions, - setTargetMv, targetYouWhenCognizant, overrideMeleeCloseTarget, watchUpdateStrat, @@ -9,7 +9,8 @@ module Dodge.Creature.ReaderUpdate ( -- goToTarget, flockACC, chaseCritMv, - setMvPos, + crabCritMv, + setMvPosToTargetCr, setViewPos, hoverCritMv, ) where @@ -45,19 +46,18 @@ tryMeleeAttack cr tcr && dist tpos cpos < crRad (cr ^. crType) + crRad (tcr ^. crType) + 5 && abs (_crDir cr - argV (tpos -.- cpos)) < pi / 4 = cr & crActionPlan . apAction - .~ [ DoImpulses [Melee $ _crID tcr] `DoActionThen` + .~ DoImpulses [Melee $ _crID tcr] `DoActionThen` DoReplicate 10 NoAction - `DoActionThen` DoImpulses - [ChangeStrategy (CloseToMelee $ _crID tcr)] - ] - & crActionPlan . apStrategy .~ MeleeStrike +-- `DoActionThen` DoImpulses +-- [ChangeStrategy (CloseToMelee $ _crID tcr)] +-- & crActionPlan . apStrategy .~ MeleeStrike | otherwise = cr where cpos = cr ^. crPos . _xy tpos = tcr ^. crPos . _xy -setMvPos :: World -> Creature -> Creature -setMvPos w cr = cr & crIntention . mvToPoint .~ mpos +setMvPosToTargetCr :: World -> Creature -> Creature +setMvPosToTargetCr w cr = cr & crIntention . mvToPoint .~ mpos where int = _crIntention cr mtpos = do @@ -81,17 +81,17 @@ attentionViewPoint w cr = do guard $ visionCheck cr (tcr ^. crPos . _xy) > 0 tcr ^? crPos . _xy -setTargetMv :: - -- | Function for determining target - (World -> Creature -> Maybe Creature) -> - World -> - Creature -> - Creature -setTargetMv targFunc w cr = - maybe - cr - (\ctarg -> cr & crIntention . mvToPoint ?~ (ctarg ^. crPos . _xy)) - (targFunc w cr) +--setTargetMv :: +-- -- | Function for determining target +-- (World -> Creature -> Maybe Creature) -> +-- World -> +-- Creature -> +-- Creature +--setTargetMv targFunc w cr = +-- maybe +-- cr +-- (\ctarg -> cr & crIntention . mvToPoint ?~ (ctarg ^. crPos . _xy)) +-- (targFunc w cr) -- ugly flockACC :: World -> Creature -> Creature @@ -120,48 +120,88 @@ flockACC w cr = fromMaybe cr $ do else negate r *.* horDir in cr & crIntention . mvToPoint ?~ tpos +.+ horShift +crabCritMv :: World -> Creature -> Creature +crabCritMv w cr = case _apStrategy (_crActionPlan cr) of + WarningCry -> cr + CloseToMelee tid | Just (p,a) <- aimi tid -> cr & crActionPlan . apAction .~ EvadeAim p a 3 + & crType . dodgeCooldown .~ 20 + CloseToMelee _ | ma <- cr ^? crActionPlan . apAction , notpath ma -> cr + _ -> case cr ^? crIntention . mvToPoint . _Just of + Just p + | dist (cr ^. crPos . _xy) p > crRad (cr ^. crType) -> + cr & crActionPlan . apAction .~ PathTo p (DoImpulses [ChangeStrategy Wander]) + | otherwise -> + cr & crActionPlan . apAction .~ bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait] + & crActionPlan . apStrategy .~ Search + & crIntention . mvToPoint .~ Nothing + _ -> viewTarget w cr + where + notpath = \case + Just NoAction -> False + Just PathTo {} -> False + _ -> True + aimi tid = do + tcr <- w ^? cWorld . lWorld . creatures . ix tid + Aiming <- tcr ^? crStance . posture + let txy = tcr ^. crPos . _xy + cxy = cr ^. crPos . _xy + 0 <- cr ^? crType . dodgeCooldown + guard $ hasLOS cxy txy w + && abs (nearZeroAngle (tcr^.crDir - argV (cxy - txy))) < 0.3 + return (txy, tcr ^. crDir) + chaseCritMv :: World -> Creature -> Creature chaseCritMv w cr = case _apStrategy (_crActionPlan cr) of WarningCry -> cr - MeleeStrike -> cr CloseToMelee cid | VocReady == (cr ^. crVocalization) -> cr & crActionPlan . apAction - .:~ ImpulsesList + .~ ImpulsesList ( [Bark soundid] : replicate numjits [RandomImpulse thejitter] ++ [[ChangeStrategy (CloseToMelee cid)]] - ) + ) NoAction & resetCrVocCoolDown w & crActionPlan . apStrategy .~ WarningCry where thejitter = RandImpulseCircMove 3 soundid = evalState (takeOne (crWarningSounds cr)) (_randGen w) numjits = fst $ randomR (15, 25) (_randGen w) + CloseToMelee _ | ma <- cr ^? crActionPlan . apAction , notpath ma -> cr _ -> case cr ^? crIntention . mvToPoint . _Just of Just p | dist (cr ^. crPos . _xy) p > crRad (cr ^. crType) -> - cr & crActionPlan . apAction .~ [PathTo p (DoImpulses [ChangeStrategy Wander])] + cr & crActionPlan . apAction .~ PathTo p (DoImpulses [ChangeStrategy Wander]) | otherwise -> - cr & crActionPlan . apAction .~ [bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]] + cr & crActionPlan . apAction .~ bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait] & crActionPlan . apStrategy .~ WatchAndWait & crIntention . mvToPoint .~ Nothing _ -> viewTarget w cr + where + notpath = \case + Just NoAction -> False + Just PathTo {} -> False + _ -> True hoverCritMv :: World -> Creature -> Creature hoverCritMv w cr = case _apStrategy (_crActionPlan cr) of WarningCry -> cr - MeleeStrike -> cr + CloseToMelee _ | ma <- cr ^? crActionPlan . apAction , notpath ma -> cr _ -> case cr ^? crIntention . mvToPoint . _Just of Just p | dist (cr ^. crPos . _xy) p > crRad (cr ^. crType) -> - cr & crActionPlan . apAction .~ [PathTo p (DoImpulses [ChangeStrategy Wander])] + cr & crActionPlan . apAction .~ PathTo p (DoImpulses [ChangeStrategy Wander]) | otherwise -> - cr & crActionPlan . apAction .~ [bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]] + cr & crActionPlan . apAction .~ bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait] & crActionPlan . apStrategy .~ WatchAndWait & crIntention . mvToPoint .~ Nothing _ -> viewTarget w cr + where + notpath = \case + Just NoAction -> False + Just PathTo {} -> False + _ -> True --goToTarget :: World -> Creature -> Creature --goToTarget w cr = case cr ^? crIntention . mvToPoint . _Just of @@ -173,23 +213,25 @@ viewTarget w cr = case cr ^? crIntention . viewPoint . _Just of Just p | hasLOSIndirect p (cr ^. crPos . _xy) w -> cr - & crActionPlan . apAction .~ [TurnToPoint p] + & crActionPlan . apAction .~ TurnToPoint p & crIntention . viewPoint .~ Nothing & crActionPlan . apStrategy .~ Investigate | otherwise -> - cr & crActionPlan . apAction %~ replaceNullWith (PathTo p (DoImpulses [ChangeStrategy Wander])) +-- cr & crActionPlan . apAction %~ replaceNullWith (PathTo p (DoImpulses [ChangeStrategy Wander])) + cr & crActionPlan . apAction .~ PathTo p (DoImpulses [ChangeStrategy Wander]) & crActionPlan . apStrategy .~ Investigate Nothing -> cr -replaceNullWith :: a -> [a] -> [a] -replaceNullWith x [] = [x] -replaceNullWith _ xs = xs +--replaceNullWith :: a -> [a] -> [a] +--replaceNullWith x [] = [x] +--replaceNullWith _ xs = xs doStrategyActions :: Creature -> Creature doStrategyActions cr = case cr ^? crActionPlan . apStrategy of Just (StrategyActions strat acs) -> cr - & crActionPlan . apAction .~ acs +-- & crActionPlan . apAction .~ acs + & crActionPlan . apAction .~ head acs & crActionPlan . apStrategy .~ strat _ -> cr diff --git a/src/Dodge/Creature/Shape.hs b/src/Dodge/Creature/Shape.hs index b1baad42b..d430c3587 100644 --- a/src/Dodge/Creature/Shape.hs +++ b/src/Dodge/Creature/Shape.hs @@ -9,6 +9,7 @@ crShape :: CreatureType -> CreatureShape crShape = \case Avatar{} -> Humanoid (greyN 0.9) (lightx4 black) (greyN 0.3) ChaseCrit {} -> Humanoid (greyN 0.9) (lightx4 green) (greyN 0.3) + CrabCrit {} -> Humanoid (greyN 0.9) (lightx4 red) (greyN 0.3) HoverCrit {} -> Humanoid (greyN 0.9) (light blue) (greyN 0.3) SwarmCrit -> Humanoid (greyN 0.9) (lightx4 yellow) (greyN 0.3) AutoCrit -> Humanoid (greyN 0.9) (lightx4 red) (greyN 0.3) diff --git a/src/Dodge/Creature/Statistics.hs b/src/Dodge/Creature/Statistics.hs index ea7af9121..55faf5f42 100644 --- a/src/Dodge/Creature/Statistics.hs +++ b/src/Dodge/Creature/Statistics.hs @@ -25,6 +25,7 @@ crDexterity cr = case cr ^. crType of AutoCrit -> 46 BarrelCrit {} -> 0 LampCrit {} -> 0 + _ -> 46 crStrength :: Creature -> Int crStrength cr = case cr ^. crType of @@ -35,11 +36,13 @@ crStrength cr = case cr ^. crType of AutoCrit -> 46 BarrelCrit {} -> 0 LampCrit {} -> 0 + _ -> 46 crIntelligence :: Creature -> Int crIntelligence cr = case cr ^. crType of Avatar { _avIntelligence = x } -> x ChaseCrit {} -> 20 + CrabCrit {} -> 20 HoverCrit {} -> 20 SwarmCrit -> 20 AutoCrit -> 20 diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 4363d775a..629c2b44f 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -54,6 +54,9 @@ updateLivingCreature cr = ChaseCrit{} -> \w -> crUpdate cid . performActions cid $ over (cWorld . lWorld . creatures . ix cid) (chaseCritInternal w) w + CrabCrit{} -> \w -> + crUpdate cid . performActions cid $ + over (cWorld . lWorld . creatures . ix cid) (crabCritInternal w) w AutoCrit {} -> crUpdate cid SwarmCrit {} -> crUpdate cid HoverCrit {} -> \w -> diff --git a/src/Dodge/Creature/Vocalization.hs b/src/Dodge/Creature/Vocalization.hs index 081ae9bff..44d220cf0 100644 --- a/src/Dodge/Creature/Vocalization.hs +++ b/src/Dodge/Creature/Vocalization.hs @@ -26,6 +26,7 @@ crWarningSounds cr = case cr ^. crType of , seagullCry1S , seagullCry2S ] + CrabCrit {} -> mempty HoverCrit {} -> mempty SwarmCrit -> mempty AutoCrit -> mempty @@ -36,6 +37,7 @@ crDeathSounds :: Creature -> DeathType -> [SoundID] crDeathSounds cr dt = case cr ^. crType of Avatar{} -> mempty ChaseCrit{} -> defaultDeathSounds dt + CrabCrit{} -> defaultDeathSounds dt HoverCrit{} -> hoverDeathSounds dt SwarmCrit -> mempty AutoCrit -> mempty diff --git a/src/Dodge/Creature/Volition.hs b/src/Dodge/Creature/Volition.hs index 302b6df9a..463335277 100644 --- a/src/Dodge/Creature/Volition.hs +++ b/src/Dodge/Creature/Volition.hs @@ -34,5 +34,5 @@ shootFirstMiss :: Action shootFirstMiss = LeadTarget (V2 30 50) `DoActionThen` DoImpulses [UseItem] - `DoActionThen` (WdCrBlfromCrBl CrCanShoot `DoActionWhile` DoActions [LeadTarget (V2 0 0), DoImpulses [UseItem]]) +-- `DoActionThen` (WdCrBlfromCrBl CrCanShoot `DoActionWhile` DoActions [LeadTarget (V2 0 0), DoImpulses [UseItem]]) `DoActionThen` 20 `WaitThen` holsterWeapon diff --git a/src/Dodge/Data/ActionPlan.hs b/src/Dodge/Data/ActionPlan.hs index 58b65fd49..dac56379f 100644 --- a/src/Dodge/Data/ActionPlan.hs +++ b/src/Dodge/Data/ActionPlan.hs @@ -15,7 +15,7 @@ data ActionPlan = Inanimate | ActionPlan { -- _apImpulse :: [Impulse] -- done per frame - _apAction :: [Action] -- updated per frame, likely persist across frames + _apAction :: Action -- updated per frame, likely persist across frames , _apStrategy :: Strategy -- current strategy , _apGoal :: [Goal] -- particular ordered goals } @@ -68,8 +68,9 @@ data Action , _targetSeenAt :: Point2 } | PathTo { _pathToPoint :: Point2, _pathFailAction :: Action } + | EvadeAim {_enemyPos :: Point2, _enemyDir :: Float, _acTimer :: Int} | TurnToPoint { _turnToPoint :: Point2 } - | ImpulsesList { _impulsesListList :: [[Impulse]] } + | ImpulsesList { _impulsesListList :: [[Impulse]], _acAction :: Action } | DoImpulses { _doImpulsesList :: [Impulse] } | WaitThen { _waitThenTimer :: Int @@ -98,7 +99,7 @@ data Action , _doActionWhileThenCondition :: WdCrBl , _doActionWhileThenThen :: Action } - | DoActions { _doActionsList :: [Action] } +-- | DoActions { _doActionsList :: [Action] } | DoActionThen { _doActionThenFirst :: Action , _doActionThenSecond :: Action @@ -140,9 +141,9 @@ data Strategy | CloseToMelee {_meleeTarget :: Int} | StrategyActions Strategy [Action] | GetTo Point2 - | Reload +-- | Reload | Flee - | MeleeStrike +-- | MeleeStrike | Search deriving (Eq, Ord, Show) --Generic, Flat) --deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index 20d8f0dc0..6456f115a 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -58,6 +58,11 @@ data CreatureType , _footForward :: FootForward , _strideAmount :: Float } + | CrabCrit {_meleeCooldown :: Int + , _footForward :: FootForward + , _strideAmount :: Float + , _dodgeCooldown :: Int + } | HoverCrit {_meleeCooldown :: Int} | SwarmCrit | AutoCrit diff --git a/src/Dodge/Default/Creature.hs b/src/Dodge/Default/Creature.hs index f970034a5..5cbd96dde 100644 --- a/src/Dodge/Default/Creature.hs +++ b/src/Dodge/Default/Creature.hs @@ -43,7 +43,7 @@ defaultCreature = , _posture = AtEase } , _crVocalization = VocReady - , _crActionPlan = ActionPlan [] (StrategyActions WatchAndWait [StartSentinelPost]) [LiveLongAndProsper] + , _crActionPlan = ActionPlan NoAction (StrategyActions WatchAndWait [StartSentinelPost]) [LiveLongAndProsper] , _crPerception = defaultPerceptionState , _crMemory = defaultCreatureMemory , _crFaction = NoFaction diff --git a/src/Dodge/Humanoid.hs b/src/Dodge/Humanoid.hs index 32f483e33..4785812a0 100644 --- a/src/Dodge/Humanoid.hs +++ b/src/Dodge/Humanoid.hs @@ -1,5 +1,6 @@ module Dodge.Humanoid ( chaseCritInternal, + crabCritInternal, hoverCritInternal, ) where @@ -16,7 +17,7 @@ chaseCritInternal w cr = [ const doStrategyActions , overrideMeleeCloseTarget , setViewPos - , setMvPos + , setMvPosToTargetCr , chaseCritMv , perceptionUpdate [0] , targetYouWhenCognizant @@ -25,6 +26,20 @@ chaseCritInternal w cr = , const (crVocalization %~ updateVocTimer) ] +crabCritInternal :: World -> Creature -> Creature +crabCritInternal w = + (crVocalization %~ updateVocTimer) + . (crType . meleeCooldown %~ max 0 . subtract 1) + . (crType . dodgeCooldown %~ max 0 . subtract 1) + . searchIfDamaged + . targetYouWhenCognizant w + . perceptionUpdate [0] w + . crabCritMv w + . setMvPosToTargetCr w + . setViewPos w + . overrideMeleeCloseTarget w + . doStrategyActions + hoverCritInternal :: World -> Creature -> Creature hoverCritInternal w cr = foldl' @@ -33,7 +48,7 @@ hoverCritInternal w cr = [ const doStrategyActions , overrideMeleeCloseTarget , setViewPos - , setMvPos + , setMvPosToTargetCr , hoverCritMv , perceptionUpdate [0] , targetYouWhenCognizant diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index d8f9c65b6..4d4ec2ce5 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -119,6 +119,7 @@ drawCreature w m cr = translateSP (_crPos cr) . rotateSP (_crDir cr) $ Avatar {} -> basicCrPict m cr SwarmCrit -> basicCrPict m cr AutoCrit -> basicCrPict m cr + CrabCrit {} -> noPic $ drawCrabCrit w cr HoverCrit{} -> noPic $ drawHoverCrit cr barrelShape :: SPic diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 4304cba4c..4a9b6ca8a 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -2,6 +2,7 @@ module Dodge.Room.Tutorial where +import Dodge.Item.Held.Stick import Dodge.Creature.ChaseCrit import Control.Monad import Data.Foldable @@ -427,6 +428,10 @@ tutLight = do ) _ -> Nothing +crabRoom :: State LayoutVars Room +crabRoom = (putSingleLight =<< roomNgon 6 150) + <&> rmPmnts .:~ psPtPl (PS 100 0) (PutCrit crabCrit) + loadAmmoTut :: State LayoutVars (MetaTree Room String) loadAmmoTut = do i <- nextLayoutInt @@ -445,14 +450,16 @@ loadAmmoTut = do =<< join (takeOne [roomNgon 6 80, roomRectAutoLights 100 100]) -- =<< join (takeOne [roomNgon 6 80]) droom <- distributerRoom BulletAmmo (10 ^ (4::Int)) - ncrits <- takeOne [1,1,2,2,2,3] - croom <- roomCCrits ncrits + croom <- crabRoom + wep <- takeOne [burstRifle,smg] return $ tToBTree "loadAmmoTest" $ treePost - [ amrm & rmPmnts .:~ sps (PS 50 0) (PutFlIt (drumMag & itConsumables ?~ 90)) + [ croom + , door + , amrm & rmPmnts .:~ sps (PS 50 0) (PutFlIt (drumMag & itConsumables ?~ 90)) , triggerDoorRoom i - , wprm & rmPmnts .:~ sps (PS 50 0) (PutFlIt burstRifle) + , wprm & rmPmnts .:~ sps (PS 50 0) (PutFlIt wep) , triggerDoorRoom j , droom , door @@ -478,11 +485,13 @@ putSingleLight rm = do , (V2 0 y', V2 x y') ] return $ rmPmnts .:~ uncurry spanLightI ps - RoomNgon{_rmngonSize = x} -> do - y <- takeOne [21, -21] - return $ rmPmnts .:~ spanLightI (V2 (-x) y) (V2 x y) + RoomNgon{} -> do + let p = rm ^?! rmPolys . ix 0 . ix 0 + return $ rmPmnts .:~ spanLightI p (-p) return . f $ removeLights rm + + tutHub :: State LayoutVars (MetaTree Room String) tutHub = do (is, wbp) <- setTreeInts =<< critsRoom 1 diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 26dba9a89..7471c6b68 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -41,15 +41,8 @@ tocrs :: (IM.IntMap Creature tocrs = uvWorld . cWorld . lWorld . creatures testStringInit :: Universe -> [String] -testStringInit u = - [ show $ inverseSelNumPos (u ^. uvConfig) invDP - (u ^. uvWorld . input . mousePos) (u ^. uvWorld . hud . diSections) - , show $ do - (i',xs) <- IM.lookupMax (u ^. uvWorld . hud . diSections) - (j',_) <- xs ^. ssItems . to IM.lookupMax - return (i',j') - ] - +testStringInit u = u ^.. tocrs . ix 1 . crActionPlan . apStrategy . to show + <> u ^.. tocrs . ix 1 . crActionPlan . apAction . to show -- where -- tocr = uvWorld . cWorld . lWorld . creatures . ix 0 -- f = fromMaybe 0 diff --git a/tags b/tags index cf2e4a6d1..d338406d0 100644 --- a/tags +++ b/tags @@ -12,7 +12,7 @@ .++~ src/LensHelp.hs 33;" o .+.+~ src/LensHelp.hs 23;" o .:~ src/LensHelp.hs 14;" o -<$> src/Dodge/Data/ActionPlan.hs 157;" o +<$> src/Dodge/Data/ActionPlan.hs 158;" o <$> src/Dodge/Data/CWorld.hs 52;" o <$> src/Dodge/Data/Camera.hs 38;" o <$> src/Dodge/Data/Creature.hs 93;" o @@ -47,7 +47,7 @@ AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C AlienContact src/Dodge/Data/Scenario.hs 30;" C AllRoomClipBoundaries src/Dodge/Data/Config.hs 123;" C AlteRifleSwitch src/Dodge/Data/Item/Params.hs 18;" C -Ambush src/Dodge/Data/ActionPlan.hs 130;" C +Ambush src/Dodge/Data/ActionPlan.hs 131;" C AmmoEffectSF src/Dodge/Data/ComposedItem.hs 33;" C AmmoExtractPosition src/Dodge/Data/Muzzle.hs 21;" t AmmoMagSF src/Dodge/Data/ComposedItem.hs 24;" C @@ -58,7 +58,7 @@ AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 32;" C AmmoPerShot src/Dodge/Data/Muzzle.hs 62;" t AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 31;" C AmmoType src/Dodge/Data/AmmoType.hs 8;" t -ArbitraryAction src/Dodge/Data/ActionPlan.hs 119;" C +ArbitraryAction src/Dodge/Data/ActionPlan.hs 120;" C ArcNodeType src/Dodge/Data/LWorld.hs 159;" t ArcShad src/Picture/Data.hs 33;" C ArcStep src/Dodge/Data/ArcStep.hs 12;" t @@ -73,11 +73,11 @@ AttachType src/Dodge/Data/Item/Combine.hs 91;" t Attention src/Dodge/Data/Creature/Perception.hs 58;" t AttentiveTo src/Dodge/Data/Creature/Perception.hs 59;" C Audition src/Dodge/Data/Creature/Perception.hs 45;" t -AutoCrit src/Dodge/Data/Creature/Misc.hs 63;" C +AutoCrit src/Dodge/Data/Creature/Misc.hs 68;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C -AvPosture src/Dodge/Data/Creature/Misc.hs 67;" C +AvPosture src/Dodge/Data/Creature/Misc.hs 72;" C Avatar src/Dodge/Data/Creature/Misc.hs 47;" C -AvatarPosture src/Dodge/Data/Creature/Misc.hs 67;" t +AvatarPosture src/Dodge/Data/Creature/Misc.hs 72;" t Awareness src/Dodge/Data/Creature/Perception.hs 63;" t BANGCONE src/Dodge/Data/Item/Combine.hs 149;" C BANGROD src/Dodge/Data/Item/Combine.hs 158;" C @@ -103,10 +103,10 @@ BURSTRIFLE src/Dodge/Data/Item/Combine.hs 157;" C BackdropCurs src/Dodge/Data/SelectionList.hs 23;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 13;" C Bark src/Dodge/Data/ActionPlan.hs 39;" C -BarrelCrit src/Dodge/Data/Creature/Misc.hs 64;" C +BarrelCrit src/Dodge/Data/Creature/Misc.hs 69;" C BarrelHiss src/Dodge/Data/SoundOrigin.hs 33;" C -BarrelType src/Dodge/Data/Creature/Misc.hs 79;" t -Barreloid src/Dodge/Data/Creature/Misc.hs 75;" C +BarrelType src/Dodge/Data/Creature/Misc.hs 84;" t +Barreloid src/Dodge/Data/Creature/Misc.hs 80;" C BasicBeamDraw src/Dodge/Data/Beam.hs 32;" C BasicBulletTrajectory src/Dodge/Data/Bullet.hs 41;" C BasicBulletTrajectoryType src/Dodge/Data/Bullet.hs 48;" C @@ -210,7 +210,7 @@ ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 14;" C ChooseMovementLtAuto src/Dodge/Data/CreatureEffect.hs 30;" C Circ_collision_test src/Dodge/Data/Config.hs 99;" C Climate src/Dodge/Data/Scenario.hs 32;" C -CloseToMelee src/Dodge/Data/ActionPlan.hs 140;" C +CloseToMelee src/Dodge/Data/ActionPlan.hs 141;" C Close_shape_culling src/Dodge/Data/Config.hs 93;" C Cloud src/Dodge/Data/Cloud.hs 12;" t CloudType src/Dodge/Data/Cloud.hs 20;" t @@ -273,12 +273,13 @@ CrWeaponSound src/Dodge/Data/SoundOrigin.hs 18;" C CrWlID src/Dodge/Data/CrWlID.hs 10;" t Cr_awareness src/Dodge/Data/Config.hs 85;" C Cr_status src/Dodge/Data/Config.hs 84;" C +CrabCrit src/Dodge/Data/Creature/Misc.hs 61;" C CraftType src/Dodge/Data/Item/Combine.hs 49;" t CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C Creature src/Dodge/Data/Creature.hs 35;" t CreaturePart src/Dodge/Data/Wall/Structure.hs 16;" C -CreatureShape src/Dodge/Data/Creature/Misc.hs 69;" t +CreatureShape src/Dodge/Data/Creature/Misc.hs 74;" t CreatureType src/Dodge/Data/Creature/Misc.hs 46;" t Crushing src/Dodge/Data/Damage.hs 19;" C CryoReleaseCloud src/Dodge/Data/Cloud.hs 23;" C @@ -330,18 +331,17 @@ DisplayTerminal src/Dodge/Data/HUD.hs 27;" C Display_debug src/Dodge/Data/Config.hs 79;" C Distortion src/Dodge/Data/Distortion.hs 11;" t DivineRetribution src/Dodge/Data/Scenario.hs 35;" C -DoActionIf src/Dodge/Data/ActionPlan.hs 87;" C -DoActionIfElse src/Dodge/Data/ActionPlan.hs 91;" C -DoActionThen src/Dodge/Data/ActionPlan.hs 102;" C -DoActionWhile src/Dodge/Data/ActionPlan.hs 78;" C -DoActionWhileInterrupt src/Dodge/Data/ActionPlan.hs 96;" C -DoActionWhilePartial src/Dodge/Data/ActionPlan.hs 82;" C -DoActions src/Dodge/Data/ActionPlan.hs 101;" C -DoImpulses src/Dodge/Data/ActionPlan.hs 73;" C -DoImpulsesAlongside src/Dodge/Data/ActionPlan.hs 121;" C +DoActionIf src/Dodge/Data/ActionPlan.hs 88;" C +DoActionIfElse src/Dodge/Data/ActionPlan.hs 92;" C +DoActionThen src/Dodge/Data/ActionPlan.hs 103;" C +DoActionWhile src/Dodge/Data/ActionPlan.hs 79;" C +DoActionWhileInterrupt src/Dodge/Data/ActionPlan.hs 97;" C +DoActionWhilePartial src/Dodge/Data/ActionPlan.hs 83;" C +DoImpulses src/Dodge/Data/ActionPlan.hs 74;" C +DoImpulsesAlongside src/Dodge/Data/ActionPlan.hs 122;" C DoNotMoveEquipment src/Dodge/Data/RightButtonOptions.hs 18;" C -DoReplicate src/Dodge/Data/ActionPlan.hs 106;" C -DoReplicatePartial src/Dodge/Data/ActionPlan.hs 110;" C +DoReplicate src/Dodge/Data/ActionPlan.hs 107;" C +DoReplicatePartial src/Dodge/Data/ActionPlan.hs 111;" C DockingBaySS src/Dodge/Data/Scenario.hs 92;" C Door src/Dodge/Data/Door.hs 29;" t DoorDoNothing src/Dodge/Data/Door.hs 45;" C @@ -391,13 +391,14 @@ EquipmentAllocation src/Dodge/Data/RightButtonOptions.hs 17;" t EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 17;" C Escape src/Dodge/Data/Scenario.hs 10;" C Essential src/Shape/Data.hs 29;" C +EvadeAim src/Dodge/Data/ActionPlan.hs 71;" C ExamineInventory src/Dodge/Data/HUD.hs 16;" C Explore src/Dodge/Data/Scenario.hs 4;" C Explosion src/Dodge/Data/SoundOrigin.hs 38;" C ExplosionPayload src/Dodge/Data/Payload.hs 9;" C Explosive src/Dodge/Data/Damage.hs 25;" C ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 14;" C -ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 81;" C +ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 86;" C ExplosivePutty src/Dodge/Data/AmmoType.hs 16;" C ExtraMenuOption src/Dodge/Data/Universe.hs 76;" t Eyes src/Dodge/Data/Creature/Perception.hs 39;" C @@ -429,7 +430,7 @@ FlameSound src/Dodge/Data/SoundOrigin.hs 28;" C FlameletBall src/Dodge/Data/EnergyBall/Type.hs 12;" C Flamer src/Dodge/Data/SoundOrigin.hs 26;" C Flaming src/Dodge/Data/Damage.hs 21;" C -Flank src/Dodge/Data/ActionPlan.hs 129;" C +Flank src/Dodge/Data/ActionPlan.hs 130;" C FlareType src/Dodge/Data/Muzzle.hs 28;" t FlashBall src/Dodge/Data/EnergyBall/Type.hs 15;" C Flashing src/Dodge/Data/Damage.hs 23;" C @@ -437,7 +438,7 @@ FlatFaces src/Shape/Data.hs 12;" C FlatShieldParams src/Dodge/Data/Item/Params.hs 14;" C FlechetteTrajectory src/Dodge/Data/Bullet.hs 43;" C FlechetteTrajectoryType src/Dodge/Data/Bullet.hs 50;" C -Flee src/Dodge/Data/ActionPlan.hs 144;" C +Flee src/Dodge/Data/ActionPlan.hs 145;" C Flesh src/Dodge/Data/Material.hs 17;" C FloatAbsCheckGreaterLess src/Dodge/Data/FloatFunction.hs 14;" C FloatBO src/Shader/Data.hs 85;" t @@ -451,7 +452,7 @@ Floating src/Dodge/Data/Creature/Stance.hs 23;" C Floor src/Data/Tile.hs 11;" t FloorItem src/Dodge/Data/FloorItem.hs 11;" t Flying src/Dodge/Data/Creature/Stance.hs 24;" C -FollowImpulses src/Dodge/Data/ActionPlan.hs 134;" C +FollowImpulses src/Dodge/Data/ActionPlan.hs 135;" C FootForward src/Dodge/Data/Creature/Stance.hs 30;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 30;" C ForceField src/Dodge/Data/Material.hs 19;" C @@ -488,7 +489,7 @@ GenParams src/Dodge/Data/GenParams.hs 13;" t GenWorld src/Dodge/Data/GenWorld.hs 24;" t GenericFaction src/Dodge/Data/Creature/State.hs 13;" C GeoObjShads src/Dodge/Data/Config.hs 117;" C -GetTo src/Dodge/Data/ActionPlan.hs 142;" C +GetTo src/Dodge/Data/ActionPlan.hs 143;" C GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 22;" C Gibbed src/Dodge/Data/Creature.hs 68;" C @@ -496,7 +497,7 @@ GibsDeath src/Dodge/Data/Creature.hs 70;" C Glass src/Dodge/Data/Material.hs 14;" C GlassBreakSound src/Dodge/Data/SoundOrigin.hs 34;" C GlassDebris src/Dodge/Data/Prop.hs 25;" C -Goal src/Dodge/Data/ActionPlan.hs 150;" t +Goal src/Dodge/Data/ActionPlan.hs 151;" t GoesOnBack src/Dodge/Data/Equipment/Misc.hs 12;" C GoesOnChest src/Dodge/Data/Equipment/Misc.hs 11;" C GoesOnHead src/Dodge/Data/Equipment/Misc.hs 10;" C @@ -549,9 +550,9 @@ HotkeyR src/Dodge/Data/Equipment/Misc.hs 34;" C HotkeyV src/Dodge/Data/Equipment/Misc.hs 38;" C HotkeyX src/Dodge/Data/Equipment/Misc.hs 36;" C HotkeyZ src/Dodge/Data/Equipment/Misc.hs 35;" C -HoverCrit src/Dodge/Data/Creature/Misc.hs 61;" C +HoverCrit src/Dodge/Data/Creature/Misc.hs 66;" C Huge src/Shape/Data.hs 23;" C -Humanoid src/Dodge/Data/Creature/Misc.hs 70;" C +Humanoid src/Dodge/Data/Creature/Misc.hs 75;" C IMSI src/Dodge/Data/SelectionList.hs 41;" t IMSS src/Dodge/Data/SelectionList.hs 39;" t INTROSCAN src/Dodge/Data/Item/Combine.hs 32;" C @@ -565,7 +566,7 @@ Important src/Shape/Data.hs 30;" C Impulse src/Dodge/Data/ActionPlan.hs 25;" t ImpulseNothing src/Dodge/Data/ActionPlan.hs 46;" C ImpulseUseTarget src/Dodge/Data/ActionPlan.hs 45;" C -ImpulsesList src/Dodge/Data/ActionPlan.hs 72;" C +ImpulsesList src/Dodge/Data/ActionPlan.hs 73;" C InDivineZone src/Dodge/Data/Scenario.hs 22;" C InDream src/Dodge/Data/Scenario.hs 19;" C InInv src/Dodge/Data/Item/Location.hs 29;" C @@ -596,7 +597,7 @@ InventoryHeadFilterSI src/Dodge/Data/SelectionList.hs 61;" C InventoryHeadSI src/Dodge/Data/SelectionList.hs 60;" C InventoryPathing src/Dodge/Data/Item/Combine.hs 38;" t InventorySound src/Dodge/Data/SoundOrigin.hs 11;" C -Investigate src/Dodge/Data/ActionPlan.hs 136;" C +Investigate src/Dodge/Data/ActionPlan.hs 137;" C Invisible src/Dodge/Data/CamouflageStatus.hs 7;" C InwardShockwave src/Dodge/Data/Shockwave.hs 12;" C IsolationUnitSS src/Dodge/Data/Scenario.hs 101;" C @@ -625,7 +626,7 @@ JoystickSF src/Dodge/Data/ComposedItem.hs 26;" C Just' src/MaybeHelp.hs 11;" C JustStartedPlaying src/Sound/Data.hs 22;" C KEYCARD src/Dodge/Data/Item/Combine.hs 177;" C -Kill src/Dodge/Data/ActionPlan.hs 152;" C +Kill src/Dodge/Data/ActionPlan.hs 153;" C LASER src/Dodge/Data/Item/Combine.hs 35;" C LDP src/Dodge/Data/SelectionList.hs 14;" C LDParams src/Dodge/Data/SelectionList.hs 14;" t @@ -639,7 +640,7 @@ LabLink src/Dodge/Data/Room.hs 50;" C LabSS src/Dodge/Data/Scenario.hs 97;" C LabelCluster src/Dodge/Data/RoomCluster.hs 13;" C Laboratory src/Dodge/Data/Scenario.hs 61;" C -LampCrit src/Dodge/Data/Creature/Misc.hs 65;" C +LampCrit src/Dodge/Data/Creature/Misc.hs 70;" C Large src/Shape/Data.hs 24;" C LasBeamCombine src/Dodge/Data/Beam.hs 38;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C @@ -654,7 +655,7 @@ LaundrySS src/Dodge/Data/Scenario.hs 115;" C LayVars src/Dodge/Data/MetaTree.hs 30;" C Layer src/Picture/Data.hs 20;" t LayoutVars src/Dodge/Data/MetaTree.hs 30;" t -LeadTarget src/Dodge/Data/ActionPlan.hs 115;" C +LeadTarget src/Dodge/Data/ActionPlan.hs 116;" C LeftForward src/Dodge/Data/Creature/Stance.hs 30;" C LeftwardDT src/Dodge/Data/DoubleTree.hs 27;" C Lethargic src/Dodge/Data/Creature/Perception.hs 53;" C @@ -668,7 +669,7 @@ LimitedBreathableAtmosphere src/Dodge/Data/Scenario.hs 38;" C LimitedFood src/Dodge/Data/Scenario.hs 39;" C LimitedWater src/Dodge/Data/Scenario.hs 40;" C LinearShockwave src/Dodge/Data/LinearShockwave.hs 11;" t -LiveLongAndProsper src/Dodge/Data/ActionPlan.hs 151;" C +LiveLongAndProsper src/Dodge/Data/ActionPlan.hs 152;" C LivingComplex src/Dodge/Data/Scenario.hs 68;" C LoadReady src/Dodge/Data/Universe.hs 101;" C LoadWaiting src/Dodge/Data/Universe.hs 100;" C @@ -678,8 +679,8 @@ LoadingScreen src/Dodge/Data/Universe.hs 93;" C LocDT src/Dodge/Data/DoubleTree.hs 42;" C LocationDT src/Dodge/Data/DoubleTree.hs 42;" t LoneWolf src/Dodge/Data/Creature/State.hs 24;" C -LookAround src/Dodge/Data/ActionPlan.hs 138;" C -Lure src/Dodge/Data/ActionPlan.hs 131;" C +LookAround src/Dodge/Data/ActionPlan.hs 139;" C +Lure src/Dodge/Data/ActionPlan.hs 132;" C MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 146;" C MAGENTA src/Color/Data.hs 17;" C MAGNET src/Dodge/Data/Item/Combine.hs 68;" C @@ -744,7 +745,7 @@ MdWdWd src/Dodge/Data/WorldEffect.hs 49;" t MedBaySS src/Dodge/Data/Scenario.hs 100;" C Medium src/Shape/Data.hs 25;" C Melee src/Dodge/Data/ActionPlan.hs 40;" C -MeleeStrike src/Dodge/Data/ActionPlan.hs 145;" C +MeleeStrike src/Dodge/Data/ActionPlan.hs 146;" C Memory src/Dodge/Data/Creature.hs 79;" t MenuOption src/Dodge/Data/Universe.hs 109;" t MenuOptionDisplay src/Dodge/Data/Universe.hs 104;" t @@ -815,7 +816,7 @@ NewInt src/NewInt.hs 16;" t NewIntMap src/NewInt.hs 22;" t NewIntSet src/NewInt.hs 19;" t NewSideEffect src/Dodge/Data/Universe.hs 63;" C -NoAction src/Dodge/Data/ActionPlan.hs 116;" C +NoAction src/Dodge/Data/ActionPlan.hs 117;" C NoAmmoRequired src/Dodge/Data/Muzzle.hs 25;" C NoBeamCombine src/Dodge/Data/Beam.hs 41;" C NoConcurrentEffect src/Loop/Data.hs 7;" C @@ -846,7 +847,7 @@ NoWorldEffect src/Dodge/Data/WorldEffect.hs 26;" C Noclip src/Dodge/Data/Config.hs 83;" C NodeMTree src/Dodge/Data/MetaTree.hs 17;" C NodeTree src/Dodge/Data/MetaTree.hs 16;" C -NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 76;" C +NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 81;" C NonInf src/Dodge/Data/CardinalPoint.hs 44;" C NormalOptions src/Dodge/Data/Universe.hs 71;" C NormalSpark src/Dodge/Data/Spark.hs 19;" C @@ -975,7 +976,7 @@ PathFromEdge src/Dodge/Data/Room.hs 81;" t PathShowType src/Dodge/Data/Universe.hs 52;" t PathTo src/Dodge/Data/ActionPlan.hs 70;" C Pathing src/Dodge/Data/Config.hs 90;" C -Patrol src/Dodge/Data/ActionPlan.hs 132;" C +Patrol src/Dodge/Data/ActionPlan.hs 133;" C PauseTimeMessage src/Dodge/Data/World.hs 88;" C PausedTimeFlow src/Dodge/Data/World.hs 84;" C Payload src/Dodge/Data/Payload.hs 9;" t @@ -990,7 +991,7 @@ Piezoelectric src/Dodge/Data/Material.hs 23;" C Pitted src/Dodge/Data/Creature.hs 68;" C Placement src/Dodge/Data/GenWorld.hs 113;" t PlacementSpot src/Dodge/Data/GenWorld.hs 97;" t -PlainBarrel src/Dodge/Data/Creature/Misc.hs 80;" C +PlainBarrel src/Dodge/Data/Creature/Misc.hs 85;" C PlainDeath src/Dodge/Data/Creature.hs 70;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C PlasmaBall src/Dodge/Data/PlasmaBall.hs 13;" t @@ -1094,7 +1095,6 @@ RectRoomType src/Dodge/Data/Room.hs 33;" C ReducedRocketSmoke src/Dodge/Data/Projectile.hs 52;" C ReigonalGovernment src/Dodge/Data/Scenario.hs 50;" C Religion src/Dodge/Data/Scenario.hs 47;" C -Reload src/Dodge/Data/ActionPlan.hs 143;" C RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 27;" C RemoteScreenSF src/Dodge/Data/ComposedItem.hs 25;" C RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 33;" C @@ -1159,7 +1159,7 @@ SaveSlotNum src/Dodge/Data/SaveSlot.hs 10;" C Scope src/Dodge/Data/Item/Scope.hs 11;" t ScreenLayer src/Dodge/Data/Universe.hs 81;" t ScreenPos src/Dodge/Data/ScreenPos.hs 12;" t -Search src/Dodge/Data/ActionPlan.hs 146;" C +Search src/Dodge/Data/ActionPlan.hs 147;" C SecretCabal src/Dodge/Data/Scenario.hs 44;" C SectionCursor src/Dodge/Data/SelectionList.hs 25;" t SeeAbove src/Dodge/Data/Wall.hs 32;" C @@ -1178,7 +1178,7 @@ SelfTree src/Dodge/Data/MetaTree.hs 21;" t SemiAutoTrigger src/Dodge/Data/TriggerType.hs 9;" C SensorType src/Dodge/Data/Machine/Sensor.hs 12;" t SensorWithRequirement src/Dodge/Data/Machine/Sensor.hs 30;" C -SentinelAt src/Dodge/Data/ActionPlan.hs 153;" C +SentinelAt src/Dodge/Data/ActionPlan.hs 154;" C SetLSCol src/Dodge/Data/WorldEffect.hs 28;" C SetTrigger src/Dodge/Data/WorldEffect.hs 27;" C SetTriggerAndSetLSCol src/Dodge/Data/WorldEffect.hs 29;" C @@ -1196,7 +1196,7 @@ ShellSound src/Dodge/Data/SoundOrigin.hs 27;" C ShieldGroup src/Dodge/Data/Creature/State.hs 30;" C Shockwave src/Dodge/Data/Shockwave.hs 15;" t ShockwaveDirection src/Dodge/Data/Shockwave.hs 12;" t -ShootAt src/Dodge/Data/ActionPlan.hs 133;" C +ShootAt src/Dodge/Data/ActionPlan.hs 134;" C ShortShow src/ShortShow.hs 6;" c ShortString src/ShortShow.hs 16;" t Show_bound_box src/Dodge/Data/Config.hs 94;" C @@ -1261,12 +1261,12 @@ StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C Stance src/Dodge/Data/Creature/Stance.hs 15;" t StandaloneWall src/Dodge/Data/Wall/Structure.hs 12;" C -StartSentinelPost src/Dodge/Data/ActionPlan.hs 117;" C +StartSentinelPost src/Dodge/Data/ActionPlan.hs 118;" C StayInArea src/Dodge/Data/Scenario.hs 13;" C Stone src/Dodge/Data/Material.hs 13;" C StorageSS src/Dodge/Data/Scenario.hs 94;" C -Strategy src/Dodge/Data/ActionPlan.hs 128;" t -StrategyActions src/Dodge/Data/ActionPlan.hs 141;" C +Strategy src/Dodge/Data/ActionPlan.hs 129;" t +StrategyActions src/Dodge/Data/ActionPlan.hs 142;" C SubInventory src/Dodge/Data/HUD.hs 14;" t Superfluous src/Shape/Data.hs 33;" C Surface src/Shape/Data.hs 37;" t @@ -1274,7 +1274,7 @@ Survive src/Dodge/Data/Scenario.hs 5;" C Suspicious src/Dodge/Data/Creature/Perception.hs 64;" C SwapEquipment src/Dodge/Data/RightButtonOptions.hs 24;" C Swarm src/Dodge/Data/Creature/State.hs 25;" C -SwarmCrit src/Dodge/Data/Creature/Misc.hs 62;" C +SwarmCrit src/Dodge/Data/Creature/Misc.hs 67;" C TAPE src/Dodge/Data/Item/Combine.hs 55;" C TARGETING src/Dodge/Data/Item/Combine.hs 21;" C TCBase src/Dodge/Data/Terminal.hs 49;" C @@ -1374,7 +1374,7 @@ TriggerType src/Dodge/Data/TriggerType.hs 7;" t TurbineBaySS src/Dodge/Data/Scenario.hs 110;" C Turn src/Dodge/Data/ActionPlan.hs 29;" C TurnTo src/Dodge/Data/ActionPlan.hs 35;" C -TurnToPoint src/Dodge/Data/ActionPlan.hs 71;" C +TurnToPoint src/Dodge/Data/ActionPlan.hs 72;" C TurnToward src/Dodge/Data/ActionPlan.hs 32;" C TurnTowardCr src/Dodge/Data/CreatureEffect.hs 9;" C Turret src/Dodge/Data/Machine.hs 64;" t @@ -1413,7 +1413,7 @@ UseItemWidth src/Dodge/Data/SelectionList.hs 43;" C UseMapper src/Dodge/Data/Item/Use.hs 37;" C UseNothing src/Dodge/Data/Item/Use.hs 32;" C UseScope src/Dodge/Data/Item/Use.hs 34;" C -UseSelf src/Dodge/Data/ActionPlan.hs 118;" C +UseSelf src/Dodge/Data/ActionPlan.hs 119;" C UseToggle src/Dodge/Data/Item/Use.hs 36;" C UseUpTo src/Dodge/Data/Muzzle.hs 64;" C UseValue src/Dodge/Data/Item/Use.hs 33;" C @@ -1451,7 +1451,7 @@ WHITE src/Color/Data.hs 24;" C WIRE src/Dodge/Data/Item/Combine.hs 86;" C WRISTARMOUR src/Dodge/Data/Item/Combine.hs 125;" C WRIST_ECG src/Dodge/Data/Item/Combine.hs 137;" C -WaitThen src/Dodge/Data/ActionPlan.hs 74;" C +WaitThen src/Dodge/Data/ActionPlan.hs 75;" C Walking src/Dodge/Data/Creature/Stance.hs 22;" C Wall src/Dodge/Data/Wall.hs 17;" t WallArcNode src/Dodge/Data/LWorld.hs 160;" C @@ -1467,15 +1467,15 @@ WallSound src/Dodge/Data/SoundOrigin.hs 25;" C WallStructure src/Dodge/Data/Wall/Structure.hs 11;" t WallWire src/Dodge/Data/Room.hs 59;" C Walls_info src/Dodge/Data/Config.hs 89;" C -Wander src/Dodge/Data/ActionPlan.hs 139;" C +Wander src/Dodge/Data/ActionPlan.hs 140;" C War src/Dodge/Data/Scenario.hs 28;" C WarmTime src/Dodge/Data/Item/Params.hs 19;" C WarmUpCoolDown src/Dodge/Data/TriggerType.hs 14;" C WarmUpNoDelay src/Dodge/Data/TriggerType.hs 19;" C -WarningCry src/Dodge/Data/ActionPlan.hs 137;" C +WarningCry src/Dodge/Data/ActionPlan.hs 138;" C WasMouseGameRotating src/Dodge/Data/Input.hs 53;" C WasNotMouseGameRotating src/Dodge/Data/Input.hs 54;" C -WatchAndWait src/Dodge/Data/ActionPlan.hs 135;" C +WatchAndWait src/Dodge/Data/ActionPlan.hs 136;" C WdBl src/Dodge/Data/WorldEffect.hs 56;" t WdBlBtOn src/Dodge/Data/WorldEffect.hs 62;" C WdBlConst src/Dodge/Data/WorldEffect.hs 59;" C @@ -1513,6 +1513,8 @@ YELLOW src/Color/Data.hs 15;" C ZOOMSCOPE src/Dodge/Data/Item/Combine.hs 92;" C ZombieFaction src/Dodge/Data/Creature/State.hs 14;" C __Just' src/MaybeHelp.hs 11;" f +_acAction src/Dodge/Data/ActionPlan.hs 73;" f +_acTimer src/Dodge/Data/ActionPlan.hs 71;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 19;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 25;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 30;" f @@ -1523,7 +1525,7 @@ _allocRemoveID src/Dodge/Data/RightButtonOptions.hs 31;" f _allocSwapID src/Dodge/Data/RightButtonOptions.hs 27;" f _alphaDivideShader src/Data/Preload/Render.hs 20;" f _alteRifleSwitch src/Dodge/Data/Item/Params.hs 18;" f -_ambushTarget src/Dodge/Data/ActionPlan.hs 130;" f +_ambushTarget src/Dodge/Data/ActionPlan.hs 131;" f _ampBullet src/Dodge/Data/Item/Use.hs 50;" f _ampCreateGas src/Dodge/Data/Item/Use.hs 52;" f _ampPayload src/Dodge/Data/Item/Use.hs 51;" f @@ -1535,7 +1537,7 @@ _apInt src/Dodge/Data/Item/Use.hs 45;" f _apProjectiles src/Dodge/Data/Item/Use.hs 44;" f _apStrategy src/Dodge/Data/ActionPlan.hs 19;" f _aps src/Dodge/Data/Muzzle.hs 22;" f -_arbitraryAction src/Dodge/Data/ActionPlan.hs 119;" f +_arbitraryAction src/Dodge/Data/ActionPlan.hs 120;" f _arcNode src/Dodge/Data/LWorld.hs 115;" f _asDir src/Dodge/Data/ArcStep.hs 14;" f _asObject src/Dodge/Data/ArcStep.hs 15;" f @@ -1548,7 +1550,7 @@ _avStrength src/Dodge/Data/Creature/Misc.hs 50;" f _avatarMaterial src/Dodge/Data/Creature/Misc.hs 49;" f _avatarPulse src/Dodge/Data/Creature/Misc.hs 48;" f _barrelShader src/Data/Preload/Render.hs 27;" f -_barrelType src/Dodge/Data/Creature/Misc.hs 64;" f +_barrelType src/Dodge/Data/Creature/Misc.hs 69;" f _bdColor src/Dodge/Data/Prop.hs 23;" f _bdMaxX src/Dodge/Data/Bounds.hs 12;" f _bdMaxY src/Dodge/Data/Bounds.hs 14;" f @@ -1741,27 +1743,27 @@ _dmVector src/Dodge/Data/Damage.hs 16;" f _dmVector src/Dodge/Data/Damage.hs 19;" f _dmVector src/Dodge/Data/Damage.hs 22;" f _dmVector src/Dodge/Data/Damage.hs 28;" f -_doActionIfAction src/Dodge/Data/ActionPlan.hs 89;" f -_doActionIfCondition src/Dodge/Data/ActionPlan.hs 88;" f -_doActionIfElseCondition src/Dodge/Data/ActionPlan.hs 93;" f -_doActionIfElseElseAction src/Dodge/Data/ActionPlan.hs 94;" f -_doActionIfElseIfAction src/Dodge/Data/ActionPlan.hs 92;" f -_doActionThenFirst src/Dodge/Data/ActionPlan.hs 103;" f -_doActionThenSecond src/Dodge/Data/ActionPlan.hs 104;" f -_doActionWhileAction src/Dodge/Data/ActionPlan.hs 80;" f -_doActionWhileAction src/Dodge/Data/ActionPlan.hs 85;" f -_doActionWhileCondition src/Dodge/Data/ActionPlan.hs 79;" f -_doActionWhileCondition src/Dodge/Data/ActionPlan.hs 84;" f -_doActionWhilePartial src/Dodge/Data/ActionPlan.hs 83;" f -_doActionWhileThenCondition src/Dodge/Data/ActionPlan.hs 98;" f -_doActionWhileThenDo src/Dodge/Data/ActionPlan.hs 97;" f -_doActionWhileThenThen src/Dodge/Data/ActionPlan.hs 99;" f -_doActionsList src/Dodge/Data/ActionPlan.hs 101;" f -_doImpulsesList src/Dodge/Data/ActionPlan.hs 73;" f -_doReplicateAction src/Dodge/Data/ActionPlan.hs 108;" f -_doReplicateAction src/Dodge/Data/ActionPlan.hs 113;" f -_doReplicateTimes src/Dodge/Data/ActionPlan.hs 107;" f -_doReplicateTimes src/Dodge/Data/ActionPlan.hs 112;" f +_doActionIfAction src/Dodge/Data/ActionPlan.hs 90;" f +_doActionIfCondition src/Dodge/Data/ActionPlan.hs 89;" f +_doActionIfElseCondition src/Dodge/Data/ActionPlan.hs 94;" f +_doActionIfElseElseAction src/Dodge/Data/ActionPlan.hs 95;" f +_doActionIfElseIfAction src/Dodge/Data/ActionPlan.hs 93;" f +_doActionThenFirst src/Dodge/Data/ActionPlan.hs 104;" f +_doActionThenSecond src/Dodge/Data/ActionPlan.hs 105;" f +_doActionWhileAction src/Dodge/Data/ActionPlan.hs 81;" f +_doActionWhileAction src/Dodge/Data/ActionPlan.hs 86;" f +_doActionWhileCondition src/Dodge/Data/ActionPlan.hs 80;" f +_doActionWhileCondition src/Dodge/Data/ActionPlan.hs 85;" f +_doActionWhilePartial src/Dodge/Data/ActionPlan.hs 84;" f +_doActionWhileThenCondition src/Dodge/Data/ActionPlan.hs 99;" f +_doActionWhileThenDo src/Dodge/Data/ActionPlan.hs 98;" f +_doActionWhileThenThen src/Dodge/Data/ActionPlan.hs 100;" f +_doImpulsesList src/Dodge/Data/ActionPlan.hs 74;" f +_doReplicateAction src/Dodge/Data/ActionPlan.hs 109;" f +_doReplicateAction src/Dodge/Data/ActionPlan.hs 114;" f +_doReplicateTimes src/Dodge/Data/ActionPlan.hs 108;" f +_doReplicateTimes src/Dodge/Data/ActionPlan.hs 113;" f +_dodgeCooldown src/Dodge/Data/Creature/Misc.hs 64;" f _doors src/Dodge/Data/LWorld.hs 124;" f _drFootPrint src/Dodge/Data/Door.hs 37;" f _drHP src/Dodge/Data/Door.hs 38;" f @@ -1792,6 +1794,8 @@ _ebTimer src/Dodge/Data/EnergyBall.hs 18;" f _ebType src/Dodge/Data/EnergyBall.hs 19;" f _ebVel src/Dodge/Data/EnergyBall.hs 16;" f _emoMenuOption src/Dodge/Data/Universe.hs 77;" f +_enemyDir src/Dodge/Data/ActionPlan.hs 71;" f +_enemyPos src/Dodge/Data/ActionPlan.hs 71;" f _energyBalls src/Dodge/Data/LWorld.hs 108;" f _fbSize src/Dodge/Data/EnergyBall/Type.hs 12;" f _fboBase src/Data/Preload/Render.hs 35;" f @@ -1809,7 +1813,7 @@ _flPos src/Dodge/Data/Flame.hs 13;" f _flTimer src/Dodge/Data/Flame.hs 12;" f _flVel src/Dodge/Data/Flame.hs 14;" f _flames src/Dodge/Data/LWorld.hs 109;" f -_flankTarget src/Dodge/Data/ActionPlan.hs 129;" f +_flankTarget src/Dodge/Data/ActionPlan.hs 130;" f _flares src/Dodge/Data/LWorld.hs 112;" f _flatShieldWlMIX src/Dodge/Data/Item/Params.hs 14;" f _flboName src/Shader/Data.hs 86;" f @@ -1821,6 +1825,7 @@ _floorVBO src/Data/Preload/Render.hs 45;" f _flyInertia src/Dodge/Data/Creature/Stance.hs 24;" f _footForward src/Dodge/Data/Creature/Misc.hs 54;" f _footForward src/Dodge/Data/Creature/Misc.hs 58;" f +_footForward src/Dodge/Data/Creature/Misc.hs 62;" f _foreShapes src/Dodge/Data/LWorld.hs 136;" f _fsDir src/Dodge/Data/ForegroundShape.hs 14;" f _fsPos src/Dodge/Data/ForegroundShape.hs 13;" f @@ -1901,7 +1906,7 @@ _imSelectedItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 23;" f _immediateEffect src/Loop/Data.hs 9;" f _immediateUpdate src/Loop/Data.hs 12;" f _impulseUseTarget src/Dodge/Data/ActionPlan.hs 45;" f -_impulsesListList src/Dodge/Data/ActionPlan.hs 72;" f +_impulsesListList src/Dodge/Data/ActionPlan.hs 73;" f _incEdgeZoning src/Dodge/Data/World.hs 57;" f _incEdges src/Dodge/Data/CWorld.hs 31;" f _incGraph src/Dodge/Data/CWorld.hs 29;" f @@ -1929,16 +1934,16 @@ _items src/Dodge/Data/LWorld.hs 97;" f _itsInt src/Dodge/Data/Item.hs 40;" f _itsMax src/Dodge/Data/Item.hs 41;" f _itsRangeInt src/Dodge/Data/Item.hs 41;" f -_killTarget src/Dodge/Data/ActionPlan.hs 152;" f +_killTarget src/Dodge/Data/ActionPlan.hs 153;" f _lAimPos src/Dodge/Data/LWorld.hs 147;" f _lClock src/Dodge/Data/LWorld.hs 142;" f _lInvLock src/Dodge/Data/LWorld.hs 148;" f _lTestInt src/Dodge/Data/LWorld.hs 144;" f _lTestString src/Dodge/Data/LWorld.hs 143;" f _lWorld src/Dodge/Data/CWorld.hs 24;" f -_lampColor src/Dodge/Data/Creature/Misc.hs 65;" f -_lampHeight src/Dodge/Data/Creature/Misc.hs 65;" f -_lampLSID src/Dodge/Data/Creature/Misc.hs 65;" f +_lampColor src/Dodge/Data/Creature/Misc.hs 70;" f +_lampHeight src/Dodge/Data/Creature/Misc.hs 70;" f +_lampLSID src/Dodge/Data/Creature/Misc.hs 70;" f _lasWepXSF src/Dodge/Data/ComposedItem.hs 41;" f _laserEmmiter src/Dodge/Data/Laser.hs 16;" f _laserTypeDamage src/Dodge/Data/Laser.hs 15;" f @@ -1947,7 +1952,7 @@ _ldpPos src/Dodge/Data/SelectionList.hs 15;" f _ldpScale src/Dodge/Data/SelectionList.hs 16;" f _ldpSize src/Dodge/Data/SelectionList.hs 18;" f _ldpVerticalGap src/Dodge/Data/SelectionList.hs 17;" f -_leadTargetBy src/Dodge/Data/ActionPlan.hs 115;" f +_leadTargetBy src/Dodge/Data/ActionPlan.hs 116;" f _lightSources src/Dodge/Data/LWorld.hs 137;" f _lightUBO src/Data/Preload/Render.hs 43;" f _lightingCapShader src/Data/Preload/Render.hs 16;" f @@ -1978,7 +1983,7 @@ _lyGen src/Dodge/Data/MetaTree.hs 31;" f _machines src/Dodge/Data/LWorld.hs 125;" f _magBelowID src/Dodge/Data/Muzzle.hs 22;" f _magnets src/Dodge/Data/LWorld.hs 128;" f -_mainAction src/Dodge/Data/ActionPlan.hs 123;" f +_mainAction src/Dodge/Data/ActionPlan.hs 124;" f _manObject src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 16;" f _mapInvItmID src/Dodge/Data/HUD.hs 20;" f _mapInvOffset src/Dodge/Data/HUD.hs 18;" f @@ -2029,7 +2034,8 @@ _mdUpdate src/Dodge/Data/Modification.hs 16;" f _mdUpdate src/Dodge/Data/Modification.hs 25;" f _meleeCooldown src/Dodge/Data/Creature/Misc.hs 57;" f _meleeCooldown src/Dodge/Data/Creature/Misc.hs 61;" f -_meleeTarget src/Dodge/Data/ActionPlan.hs 140;" f +_meleeCooldown src/Dodge/Data/Creature/Misc.hs 66;" f +_meleeTarget src/Dodge/Data/ActionPlan.hs 141;" f _mgField src/Dodge/Data/Magnet.hs 23;" f _mgPos src/Dodge/Data/Magnet.hs 22;" f _moEff src/Dodge/Data/Universe.hs 111;" f @@ -2083,7 +2089,7 @@ _opTexture src/Dodge/Data/Wall.hs 34;" f _opticDefaultZoom src/Dodge/Data/Item/Scope.hs 18;" f _opticPos src/Dodge/Data/Item/Scope.hs 14;" f _opticZoom src/Dodge/Data/Item/Scope.hs 17;" f -_partialAction src/Dodge/Data/ActionPlan.hs 111;" f +_partialAction src/Dodge/Data/ActionPlan.hs 112;" f _pastWorlds src/Dodge/Data/World.hs 38;" f _pathFailAction src/Dodge/Data/ActionPlan.hs 70;" f _pathToPoint src/Dodge/Data/ActionPlan.hs 70;" f @@ -2097,7 +2103,7 @@ _phTargetingID src/Dodge/Data/Projectile.hs 42;" f _pickUpLevel src/Dodge/Layout/Generate.hs 15;" f _pickUps src/Dodge/Layout/Generate.hs 16;" f _pictureShaders src/Data/Preload/Render.hs 31;" f -_piercedPoints src/Dodge/Data/Creature/Misc.hs 81;" f +_piercedPoints src/Dodge/Data/Creature/Misc.hs 86;" f _pjBarrelSpin src/Dodge/Data/Projectile.hs 23;" f _pjDetonatorID src/Dodge/Data/Projectile.hs 25;" f _pjDir src/Dodge/Data/Projectile.hs 18;" f @@ -2277,8 +2283,8 @@ _selLocation src/Dodge/Data/LWorld.hs 140;" f _sensAmount src/Dodge/Data/Machine/Sensor.hs 20;" f _sensType src/Dodge/Data/Machine/Sensor.hs 21;" f _sensorCoding src/Dodge/Data/GenParams.hs 14;" f -_sentinelDir src/Dodge/Data/ActionPlan.hs 153;" f -_sentinelPos src/Dodge/Data/ActionPlan.hs 153;" f +_sentinelDir src/Dodge/Data/ActionPlan.hs 154;" f +_sentinelPos src/Dodge/Data/ActionPlan.hs 154;" f _sfColor src/Shape/Data.hs 40;" f _sfShadowImportance src/Shape/Data.hs 41;" f _sfSize src/Shape/Data.hs 42;" f @@ -2301,15 +2307,15 @@ _siPayload src/Dodge/Data/SelectionList.hs 52;" f _siPictures src/Dodge/Data/SelectionList.hs 46;" f _siWidth src/Dodge/Data/SelectionList.hs 48;" f _sideEffect src/Loop/Data.hs 13;" f -_sideImpulses src/Dodge/Data/ActionPlan.hs 122;" f +_sideImpulses src/Dodge/Data/ActionPlan.hs 123;" f _silhouetteEBO src/Data/Preload/Render.hs 30;" f _skOldPos src/Dodge/Data/Spark.hs 14;" f _skPos src/Dodge/Data/Spark.hs 13;" f _skType src/Dodge/Data/Spark.hs 15;" f _skVel src/Dodge/Data/Spark.hs 12;" f -_skinHead src/Dodge/Data/Creature/Misc.hs 71;" f -_skinLower src/Dodge/Data/Creature/Misc.hs 73;" f -_skinUpper src/Dodge/Data/Creature/Misc.hs 72;" f +_skinHead src/Dodge/Data/Creature/Misc.hs 76;" f +_skinLower src/Dodge/Data/Creature/Misc.hs 78;" f +_skinUpper src/Dodge/Data/Creature/Misc.hs 77;" f _slInt src/Dodge/Data/HUD.hs 39;" f _slSec src/Dodge/Data/HUD.hs 39;" f _slSet src/Dodge/Data/HUD.hs 39;" f @@ -2338,6 +2344,7 @@ _ssboName src/Shader/Data.hs 97;" f _ssboPtr src/Shader/Data.hs 98;" f _strideAmount src/Dodge/Data/Creature/Misc.hs 55;" f _strideAmount src/Dodge/Data/Creature/Misc.hs 59;" f +_strideAmount src/Dodge/Data/Creature/Misc.hs 63;" f _stuckCrID src/Dodge/Data/Projectile.hs 48;" f _stuckCrOffset src/Dodge/Data/Projectile.hs 48;" f _stuckCrRot src/Dodge/Data/Projectile.hs 48;" f @@ -2415,7 +2422,7 @@ _tuDir src/Dodge/Data/Machine.hs 68;" f _tuFireTime src/Dodge/Data/Machine.hs 67;" f _tuTurnSpeed src/Dodge/Data/Machine.hs 66;" f _tuWeapon src/Dodge/Data/Machine.hs 65;" f -_turnToPoint src/Dodge/Data/ActionPlan.hs 71;" f +_turnToPoint src/Dodge/Data/ActionPlan.hs 72;" f _uInt src/Dodge/Data/Item/Use.hs 31;" f _uScope src/Dodge/Data/Item/Use.hs 34;" f _uValue src/Dodge/Data/Item/Use.hs 33;" f @@ -2438,7 +2445,7 @@ _upscaleCloudShader src/Data/Preload/Render.hs 25;" f _useExactly src/Dodge/Data/Muzzle.hs 63;" f _useMapperLines src/Dodge/Data/Item/Use.hs 38;" f _useMapperPoints src/Dodge/Data/Item/Use.hs 39;" f -_useSelf src/Dodge/Data/ActionPlan.hs 118;" f +_useSelf src/Dodge/Data/ActionPlan.hs 119;" f _useToggle src/Dodge/Data/Item/Use.hs 36;" f _useUpTo src/Dodge/Data/Muzzle.hs 64;" f _uvCanContinue src/Dodge/Data/Universe.hs 36;" f @@ -2488,8 +2495,8 @@ _vxShadNum src/Picture/Data.hs 16;" f _wCam src/Dodge/Data/World.hs 59;" f _wSoundFilter src/Dodge/Data/World.hs 43;" f _wTime src/Dodge/Data/Item/Params.hs 20;" f -_waitThenAction src/Dodge/Data/ActionPlan.hs 76;" f -_waitThenTimer src/Dodge/Data/ActionPlan.hs 75;" f +_waitThenAction src/Dodge/Data/ActionPlan.hs 77;" f +_waitThenTimer src/Dodge/Data/ActionPlan.hs 76;" f _wallDamages src/Dodge/Data/LWorld.hs 123;" f _wallVBO src/Data/Preload/Render.hs 50;" f _walls src/Dodge/Data/LWorld.hs 122;" f @@ -2571,7 +2578,7 @@ addToTrunk src/TreeHelp.hs 159;" f addWarningTerminal src/Dodge/Room/Warning.hs 98;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 484;" f +advanceScrollAmount src/Dodge/Update.hs 485;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f aimDelaySweep src/Dodge/Render/Picture.hs 291;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f @@ -2583,7 +2590,7 @@ airlockCrystal src/Dodge/Room/Airlock.hs 251;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 104;" f airlockSimple src/Dodge/Room/Airlock.hs 129;" f airlockZ src/Dodge/Room/Airlock.hs 166;" f -allVisibleWalls src/Dodge/Base/Collide.hs 231;" f +allVisibleWalls src/Dodge/Base/Collide.hs 232;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f @@ -2600,7 +2607,7 @@ angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 122;" f angleVVTests test/Spec.hs 67;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f -anythingHitCirc src/Dodge/Base/Collide.hs 339;" f +anythingHitCirc src/Dodge/Base/Collide.hs 340;" f apply src/Quaternion.hs 78;" f applyCME src/Dodge/HeldUse.hs 397;" f applyClip src/Dodge/Debug.hs 176;" f @@ -2641,7 +2648,7 @@ argV src/Geometry/Vector.hs 83;" f armourChaseCrit src/Dodge/Creature/ArmourChase.hs 34;" f armouredChasers src/Dodge/Room/Boss.hs 58;" f armouredCorridor src/Dodge/Room/RoadBlock.hs 20;" f -arms src/Dodge/Creature/Picture.hs 133;" f +arms src/Dodge/Creature/Picture.hs 166;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2658,7 +2665,7 @@ attachList src/Dodge/Tree/Compose.hs 81;" f attachOnward src/Dodge/Tree/Compose.hs 96;" f attachOnward' src/Dodge/Tree/Compose.hs 99;" f attachTree src/Dodge/Tree/Compose.hs 39;" f -attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 76;" f +attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 75;" f attribSize src/Shader/Compile.hs 139;" f autoAmr src/Dodge/Item/Held/Rod.hs 39;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 747;" f @@ -2666,7 +2673,7 @@ autoCrit src/Dodge/Creature/AutoCrit.hs 10;" f autoGunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 557;" f autoPistol src/Dodge/Item/Held/Stick.hs 21;" f autoRifle src/Dodge/Item/Held/Cane.hs 27;" f -awakeLevelPerception src/Dodge/Creature/Perception.hs 174;" f +awakeLevelPerception src/Dodge/Creature/Perception.hs 171;" f axisInt src/Geometry/Intersect.hs 246;" f azure src/Color.hs 49;" f bQuadToF src/Geometry/Bezier.hs 37;" f @@ -2684,7 +2691,7 @@ bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 835;" f bangStick src/Dodge/Item/Held/Stick.hs 15;" f barPP src/Dodge/Room/Foreground.hs 231;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f -barrelShape src/Dodge/Render/ShapePicture.hs 124;" f +barrelShape src/Dodge/Render/ShapePicture.hs 125;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 410;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 76;" f baseCI src/Dodge/Item/Grammar.hs 165;" f @@ -2693,14 +2700,14 @@ baseItemTriggerType src/Dodge/BaseTriggerType.hs 21;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 324;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 407;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 395;" f -baseShoulder src/Dodge/Creature/Picture.hs 171;" f +baseShoulder src/Dodge/Creature/Picture.hs 204;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 301;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 293;" f baseStickSpread src/Dodge/HeldUse.hs 346;" f -basicAttentionUpdate src/Dodge/Creature/Perception.hs 140;" f -basicAwarenessUpdate src/Dodge/Creature/Perception.hs 35;" f -basicCrPict src/Dodge/Creature/Picture.hs 37;" f -basicCrShape src/Dodge/Creature/Picture.hs 43;" f +basicAttentionUpdate src/Dodge/Creature/Perception.hs 137;" f +basicAwarenessUpdate src/Dodge/Creature/Perception.hs 31;" f +basicCrPict src/Dodge/Creature/Picture.hs 38;" f +basicCrShape src/Dodge/Creature/Picture.hs 44;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f @@ -2708,7 +2715,7 @@ battery src/Dodge/Item/Ammo.hs 60;" f batteryPack src/Dodge/Item/Equipment.hs 38;" f beep3QuickS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 667;" f beltMag src/Dodge/Item/Ammo.hs 38;" f -bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 242;" f +bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 269;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 115;" f bgunSound src/Dodge/HeldUse.hs 540;" f bingate src/Dodge/Item/Scope.hs 115;" f @@ -2766,7 +2773,7 @@ branchRectWith src/Dodge/Room/Branch.hs 16;" f branchWith src/Dodge/Room/Room.hs 83;" f bright src/Color.hs 147;" f brightX src/Color.hs 143;" f -btSPic src/Dodge/Render/ShapePicture.hs 173;" f +btSPic src/Dodge/Render/ShapePicture.hs 174;" f btText src/Dodge/Inventory/SelectionList.hs 236;" f bufferEBO src/Shader/Bind.hs 28;" f bufferPerspectiveMatrixUBO src/Dodge/Render.hs 431;" f @@ -2783,14 +2790,14 @@ buttonFlip src/Dodge/Button/Event.hs 18;" f buzz1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 837;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 599;" f byNthLink src/Dodge/Room/Warning.hs 44;" f -cChasm src/Dodge/Room/Tutorial.hs 138;" f +cChasm src/Dodge/Room/Tutorial.hs 139;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 325;" f -canSeeIndirect src/Dodge/Base/Collide.hs 332;" f -canSpring src/Dodge/Update.hs 976;" f +canSee src/Dodge/Base/Collide.hs 326;" f +canSeeIndirect src/Dodge/Base/Collide.hs 333;" f +canSpring src/Dodge/Update.hs 977;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f card8Vec src/Dodge/Base/CardinalPoint.hs 24;" f @@ -2816,26 +2823,26 @@ charToTuple src/Picture/Base.hs 312;" f charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f chaseCorpse src/Dodge/Corpse/Make.hs 32;" f -chaseCrit src/Dodge/Creature/ChaseCrit.hs 28;" f -chaseCritInternal src/Dodge/Humanoid.hs 11;" f -chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 77;" f +chaseCrit src/Dodge/Creature/ChaseCrit.hs 29;" f +chaseCritInternal src/Dodge/Humanoid.hs 12;" f +chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 148;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 96;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 116;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 376;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 308;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 377;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 309;" f chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 101;" f chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f -checkDeath src/Dodge/Creature/Update.hs 95;" f -checkDeath' src/Dodge/Creature/Update.hs 98;" f -checkEndGame src/Dodge/Update.hs 862;" f +checkDeath src/Dodge/Creature/Update.hs 98;" f +checkDeath' src/Dodge/Creature/Update.hs 101;" f +checkEndGame src/Dodge/Update.hs 863;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 93;" f -checkTermDist src/Dodge/Update.hs 397;" f +checkTermDist src/Dodge/Update.hs 398;" f checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f @@ -2846,12 +2853,12 @@ chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 145;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f -circHitWall src/Dodge/Base/Collide.hs 244;" f +circHitWall src/Dodge/Base/Collide.hs 245;" f circInPolygon src/Geometry/Polygon.hs 110;" f -circOnAnyCr src/Dodge/Base/Collide.hs 289;" f +circOnAnyCr src/Dodge/Base/Collide.hs 290;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f -circOnSomeWall src/Dodge/Base/Collide.hs 283;" f +circOnSomeWall src/Dodge/Base/Collide.hs 284;" f circSegsInside src/Dodge/Creature/State/WalkCycle.hs 87;" f circSegsInside' src/Dodge/Creature/State/WalkCycle.hs 76;" f circle src/Picture/Base.hs 172;" f @@ -2889,8 +2896,8 @@ clsNearCirc src/Dodge/Zoning/Cloud.hs 21;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f clsNearRect src/Dodge/Zoning/Cloud.hs 18;" f clsNearSeg src/Dodge/Zoning/Cloud.hs 15;" f -cogRaised src/Dodge/Creature/Perception.hs 114;" f -cognizantVoc src/Dodge/Creature/Perception.hs 71;" f +cogRaised src/Dodge/Creature/Perception.hs 111;" f +cognizantVoc src/Dodge/Creature/Perception.hs 68;" f colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 54;" f @@ -2903,16 +2910,16 @@ collide3Floors src/Dodge/Base/Collide.hs 144;" f collide3Wall src/Dodge/Base/Collide.hs 158;" f collide3Walls src/Dodge/Base/Collide.hs 139;" f collide3WallsFloor src/Dodge/Base/Collide.hs 100;" f -collideCircWalls src/Dodge/Base/Collide.hs 256;" f +collideCircWalls src/Dodge/Base/Collide.hs 257;" f collidePoint src/Dodge/Base/Collide.hs 54;" f -collidePointTestFilter src/Dodge/Base/Collide.hs 194;" f -collidePointWallsFilter src/Dodge/Base/Collide.hs 208;" f +collidePointTestFilter src/Dodge/Base/Collide.hs 195;" f +collidePointWallsFilter src/Dodge/Base/Collide.hs 209;" f color src/Picture/Base.hs 100;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 234;" f combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 44;" f -combineAwareness src/Dodge/Creature/Perception.hs 122;" f +combineAwareness src/Dodge/Creature/Perception.hs 119;" f combineFloors src/Dodge/Room/Procedural.hs 154;" f combineInventoryExtra src/Dodge/Render/HUD.hs 340;" f combineItemListYouX src/Dodge/Combine.hs 36;" f @@ -2939,7 +2946,7 @@ connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 753;" f constructEdges src/Polyhedra.hs 31;" f constructEdgesList src/Polyhedra.hs 40;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f -continueTerminal src/Dodge/Update/Input/InGame.hs 390;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 411;" f convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -2951,7 +2958,7 @@ copierItemUpdate src/Dodge/Creature/State.hs 136;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f corDoor src/Dodge/Room/Room.hs 411;" f cornerList src/Preload/Render.hs 236;" f -corpseOrGib src/Dodge/Creature/Update.hs 132;" f +corpseOrGib src/Dodge/Creature/Update.hs 135;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -2959,11 +2966,11 @@ corridorWallN src/Dodge/Room/Corridor.hs 77;" f crAdd src/Dodge/Room/RezBox.hs 116;" f crAwayFromPost src/Dodge/Creature/Test.hs 83;" f crBlips src/Dodge/RadarSweep.hs 88;" f -crCamouflage src/Dodge/Creature/Picture.hs 40;" f +crCamouflage src/Dodge/Creature/Picture.hs 41;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f -crCrSpring src/Dodge/Update.hs 984;" f -crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f -crDeathSounds src/Dodge/Creature/Vocalization.hs 35;" f +crCrSpring src/Dodge/Update.hs 985;" f +crCurrentEquipment src/Dodge/Creature/Statistics.hs 65;" f +crDeathSounds src/Dodge/Creature/Vocalization.hs 36;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f @@ -2973,9 +2980,9 @@ crHeight src/Dodge/Base/Collide.hs 176;" f crHit src/Dodge/WorldEvent/ThingsHit.hs 138;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f -crImpulsesOnCognizant src/Dodge/Creature/Perception.hs 62;" f +crImpulsesOnCognizant src/Dodge/Creature/Perception.hs 58;" f crInAimStance src/Dodge/Creature/Test.hs 91;" f -crIntelligence src/Dodge/Creature/Statistics.hs 39;" f +crIntelligence src/Dodge/Creature/Statistics.hs 41;" f crIsAiming src/Dodge/Creature/Test.hs 58;" f crIsArmouredFrom src/Dodge/Creature/Test.hs 107;" f crLeftHandWall src/Dodge/Creature/HandPos.hs 94;" f @@ -2991,23 +2998,29 @@ crMvType src/Dodge/Creature/MoveType.hs 7;" f crNearPoint src/Dodge/Creature/Test.hs 129;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crOnSeg src/Dodge/WorldEvent/ThingsHit.hs 206;" f -crPathing src/Dodge/Creature/Action.hs 117;" f +crPathing src/Dodge/Creature/Action.hs 124;" f crRad src/Dodge/Creature/Radius.hs 7;" f crRightHandWall src/Dodge/Creature/HandPos.hs 76;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 72;" f crSetRoots src/Dodge/Inventory/Location.hs 56;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 971;" f +crSpring src/Dodge/Update.hs 972;" f crStratConMatches src/Dodge/Creature/Test.hs 78;" f -crStrength src/Dodge/Creature/Statistics.hs 29;" f -crUpdate src/Dodge/Creature/Update.hs 88;" f +crStrength src/Dodge/Creature/Statistics.hs 30;" f +crUpdate src/Dodge/Creature/Update.hs 91;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f -crVocalResetTime src/Dodge/Creature/Vocalization.hs 59;" f +crVocalResetTime src/Dodge/Creature/Vocalization.hs 61;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 16;" f crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 62;" f crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 72;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f +crabCrit src/Dodge/Creature/ChaseCrit.hs 36;" f +crabCritInternal src/Dodge/Humanoid.hs 29;" f +crabCritMv src/Dodge/Creature/ReaderUpdate.hs 122;" f +crabFeet src/Dodge/Creature/Picture.hs 148;" f +crabRoom src/Dodge/Room/Tutorial.hs 431;" f +crabUpperBody src/Dodge/Creature/Picture.hs 86;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 603;" f @@ -3045,7 +3058,7 @@ crsNearRect src/Dodge/Zoning/Creature.hs 40;" f crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 58;" f cubeShape src/Dodge/Block/Debris.hs 162;" f -cullPoint src/Dodge/Render/ShapePicture.hs 140;" f +cullPoint src/Dodge/Render/ShapePicture.hs 141;" f cullPretty src/AesonHelp.hs 14;" f cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cutWall src/Dodge/LevelGen/StaticWalls.hs 124;" f @@ -3104,10 +3117,10 @@ deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 69;" f deadEndPSType src/Dodge/Room/Room.hs 264;" f deadEndRoom src/Dodge/Room/Room.hs 267;" f -deadFeet src/Dodge/Creature/Picture.hs 129;" f -deadRot src/Dodge/Creature/Picture.hs 147;" f -deadScalp src/Dodge/Creature/Picture.hs 142;" f -deadUpperBody src/Dodge/Creature/Picture.hs 168;" f +deadFeet src/Dodge/Creature/Picture.hs 162;" f +deadRot src/Dodge/Creature/Picture.hs 180;" f +deadScalp src/Dodge/Creature/Picture.hs 175;" f +deadUpperBody src/Dodge/Creature/Picture.hs 201;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 733;" f debrisSPic src/Dodge/Prop/Draw.hs 17;" f debrisSize src/Dodge/Block/Debris.hs 131;" f @@ -3131,7 +3144,7 @@ decomposeTree src/Dodge/Tree/Compose.hs 59;" f decontamRoom src/Dodge/Room/Airlock.hs 37;" f decoratedBlock src/Dodge/Placement/Instance/Block.hs 14;" f decorationToShape src/Dodge/Placement/TopDecoration.hs 16;" f -decreaseAwareness src/Dodge/Creature/Perception.hs 131;" f +decreaseAwareness src/Dodge/Creature/Perception.hs 128;" f decrementTimer src/Sound.hs 104;" f dedaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 563;" f dededaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 685;" f @@ -3143,7 +3156,7 @@ defEquipment src/Dodge/Default.hs 24;" f defHeldItem src/Dodge/Default/Item.hs 9;" f defLSPic src/Dodge/LightSource/Draw.hs 10;" f defSPic src/Dodge/Item/Draw/SPic.hs 310;" f -defaultAimMvType src/Dodge/Creature/MoveType.hs 17;" f +defaultAimMvType src/Dodge/Creature/MoveType.hs 18;" f defaultAimingCrit src/Dodge/Default/Creature.hs 108;" f defaultAudition src/Dodge/Default/Creature.hs 93;" f defaultAutoWall src/Dodge/Default/Wall.hs 32;" f @@ -3154,13 +3167,13 @@ defaultButton src/Dodge/Default.hs 45;" f defaultCWCam src/Dodge/Default/World.hs 75;" f defaultCWGen src/Dodge/Default/World.hs 65;" f defaultCWorld src/Dodge/Default/World.hs 90;" f -defaultChaseMvType src/Dodge/Creature/MoveType.hs 26;" f +defaultChaseMvType src/Dodge/Creature/MoveType.hs 27;" f defaultClusterStatus src/Dodge/Default/Room.hs 37;" f defaultConfig src/Dodge/Data/Config.hs 152;" f defaultCreature src/Dodge/Default/Creature.hs 12;" f defaultCreatureMemory src/Dodge/Default/Creature.hs 66;" f defaultCrystalWall src/Dodge/Default/Wall.hs 35;" f -defaultDeathSounds src/Dodge/Creature/Vocalization.hs 45;" f +defaultDeathSounds src/Dodge/Creature/Vocalization.hs 47;" f defaultDirtBlock src/Dodge/Default/Block.hs 17;" f defaultDirtWall src/Dodge/Default/Wall.hs 47;" f defaultDoor src/Dodge/Default/Door.hs 5;" f @@ -3224,7 +3237,7 @@ displayFrameTicks src/Dodge/Render/Picture.hs 50;" f displayFreeSlots src/Dodge/DisplayInventory.hs 196;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f -displayTerminalLineString src/Dodge/Update.hs 569;" f +displayTerminalLineString src/Dodge/Update.hs 570;" f dist src/Geometry/Vector.hs 187;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 150;" f @@ -3266,7 +3279,7 @@ doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f doDoorMount src/Dodge/Door.hs 32;" f -doDrag src/Dodge/Update/Input/InGame.hs 142;" f +doDrag src/Dodge/Update/Input/InGame.hs 148;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f @@ -3276,35 +3289,35 @@ doHeldUseEffect src/Dodge/HeldUse.hs 379;" f doInPlacements src/Dodge/Layout.hs 101;" f doIndividualPlacements src/Dodge/Layout.hs 113;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f -doItemTimeScroll src/Dodge/Update.hs 229;" f +doItemTimeScroll src/Dodge/Update.hs 230;" f doLoop src/Loop.hs 60;" f doMagnetBuBu src/Dodge/Bullet.hs 35;" f doModificationEffect src/Dodge/ModificationEffect.hs 7;" f -doMouseWarping src/Dodge/Update.hs 164;" f +doMouseWarping src/Dodge/Update.hs 165;" f doPreload appDodge/Main.hs 132;" f doQuickload src/Dodge/Save.hs 83;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 8;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 436;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 457;" f doRoomPlacements src/Dodge/Layout.hs 116;" f doRoomShift src/Dodge/Room/Link.hs 34;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f doSectionSize src/Dodge/DisplayInventory.hs 215;" f doSideEffects appDodge/Main.hs 117;" f -doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 188;" f +doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 214;" f doTabComplete src/Dodge/Terminal.hs 241;" f doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 132;" f -doTimeScroll src/Dodge/Update.hs 234;" f +doTimeScroll src/Dodge/Update.hs 235;" f doTmWdWd src/Dodge/WorldEffect.hs 102;" f doWallRotate src/Dodge/Update/Camera.hs 231;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f doWdWd src/Dodge/WorldEffect.hs 35;" f -doWorldEvents src/Dodge/Update.hs 493;" f +doWorldEvents src/Dodge/Update.hs 494;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 14;" f doorBetween src/Dodge/Placement/Instance/Door.hs 34;" f @@ -3327,10 +3340,10 @@ drawBaseMachine src/Dodge/Machine/Draw.hs 74;" f drawBlip src/Dodge/RadarBlip.hs 16;" f drawBlock src/Dodge/Render/ShapePicture.hs 81;" f drawBoundingBox src/Dodge/Debug/Picture.hs 368;" f -drawBullet src/Dodge/Render/ShapePicture.hs 179;" f +drawBullet src/Dodge/Render/ShapePicture.hs 180;" f drawButton src/Dodge/Button/Draw.hs 11;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f -drawChaseCrit src/Dodge/Creature/Picture.hs 68;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 77;" f drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f drawCliff src/Dodge/Render/ShapePicture.hs 87;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f @@ -3341,6 +3354,7 @@ drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f drawCrInfo src/Dodge/Debug.hs 215;" f drawCrInfo' src/Dodge/Debug.hs 210;" f +drawCrabCrit src/Dodge/Creature/Picture.hs 69;" f drawCreature src/Dodge/Render/ShapePicture.hs 111;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f drawCross src/Dodge/Render/Label.hs 25;" f @@ -3359,7 +3373,7 @@ drawDragSelecting src/Dodge/Render/HUD.hs 162;" f drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f drawEmptySet src/Dodge/Render/Picture.hs 153;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f -drawEquipment src/Dodge/Creature/Picture.hs 180;" f +drawEquipment src/Dodge/Creature/Picture.hs 213;" f drawExamineInventory src/Dodge/Render/HUD.hs 199;" f drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 271;" f @@ -3369,7 +3383,7 @@ drawForceField src/Dodge/Wall/Draw.hs 15;" f drawGapPlus src/Dodge/Render/Picture.hs 284;" f drawGib src/Dodge/Prop/Draw.hs 31;" f drawHUD src/Dodge/Render/HUD.hs 53;" f -drawHoverCrit src/Dodge/Creature/Picture.hs 58;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 59;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 33;" f drawInspectWall src/Dodge/Debug/Picture.hs 256;" f drawInspectWalls src/Dodge/Debug/Picture.hs 244;" f @@ -3449,9 +3463,9 @@ drawZone src/Dodge/Debug/Picture.hs 152;" f drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f -dropAll src/Dodge/Creature/Update.hs 168;" f +dropAll src/Dodge/Creature/Update.hs 171;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f -dropItem src/Dodge/Creature/Action.hs 161;" f +dropItem src/Dodge/Creature/Action.hs 168;" f dropper src/Dodge/Item/Scope.hs 82;" f drumMag src/Dodge/Item/Ammo.hs 31;" f dsZoneSize src/Dodge/Zoning/Cloud.hs 51;" f @@ -3491,8 +3505,8 @@ encircleCloseP src/Dodge/Creature/Boid.hs 38;" f encircleDistP src/Dodge/Creature/Boid.hs 24;" f encircleP src/Dodge/Creature/Boid.hs 30;" f endArcPos src/Dodge/Tesla.hs 86;" f -endCombineRegex src/Dodge/Update/Input/InGame.hs 290;" f -endRegex src/Dodge/Update/Input/InGame.hs 284;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 310;" f +endRegex src/Dodge/Update/Input/InGame.hs 304;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 697;" f enterCombineInv src/Dodge/DisplayInventory.hs 321;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f @@ -3510,7 +3524,7 @@ equipSiteInfo src/Dodge/Item/Info.hs 252;" f equipSitePQ src/Dodge/Creature/HandPos.hs 33;" f equipType src/Dodge/Data/EquipType.hs 10;" f equipmentDesignation src/Dodge/Inventory/RBList.hs 52;" f -equipmentStrValue src/Dodge/Creature/Statistics.hs 56;" f +equipmentStrValue src/Dodge/Creature/Statistics.hs 59;" f errorAngleVV src/Geometry.hs 59;" f errorClosestPointOnLine src/Geometry.hs 71;" f errorClosestPointOnLineParam src/Geometry.hs 77;" f @@ -3531,7 +3545,7 @@ explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 701;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 79;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f -extraPics src/Dodge/Render/ShapePicture.hs 145;" f +extraPics src/Dodge/Render/ShapePicture.hs 146;" f extraWeaponLinks src/Dodge/Item/Grammar.hs 94;" f extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 103;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f @@ -3539,7 +3553,7 @@ faceEdges src/Polyhedra.hs 62;" f facesToVF src/Polyhedra/Geodesic.hs 70;" f farWallDistDirection src/Dodge/Update/Camera.hs 245;" f fdiv src/ShortShow.hs 41;" f -feet src/Dodge/Creature/Picture.hs 115;" f +feet src/Dodge/Creature/Picture.hs 134;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3577,17 +3591,17 @@ flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 422;" f flickerMod src/Dodge/Placement/Instance/LightSource/Flicker.hs 10;" f flickerUpdate src/Dodge/Placement/Instance/LightSource/Flicker.hs 24;" f floatSize src/Shader/Parameters.hs 17;" f -flockACC src/Dodge/Creature/ReaderUpdate.hs 97;" f +flockACC src/Dodge/Creature/ReaderUpdate.hs 96;" f flockArmourChaseCrit src/Dodge/Creature/ArmourChase.hs 14;" f flockChaseTarget src/Dodge/Creature/Boid.hs 188;" f flockPointTarget src/Dodge/Creature/Boid.hs 204;" f floorItemPickupInfo src/Dodge/Render/HUD.hs 233;" f -floorItemSPic src/Dodge/Render/ShapePicture.hs 166;" f +floorItemSPic src/Dodge/Render/ShapePicture.hs 167;" f floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 831;" f -foldMTRS src/Dodge/Room/Tutorial.hs 92;" f +foldMTRS src/Dodge/Room/Tutorial.hs 93;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3611,7 +3625,7 @@ fromV3 src/Geometry/Data.hs 63;" f frontArmour src/Dodge/Item/Equipment.hs 32;" f fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 44;" f -functionalUpdate src/Dodge/Update.hs 277;" f +functionalUpdate src/Dodge/Update.hs 278;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f fuseWall src/Dodge/LevelGen/StaticWalls.hs 165;" f fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f @@ -3625,7 +3639,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 165;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f -gasEffect src/Dodge/Update.hs 887;" f +gasEffect src/Dodge/Update.hs 888;" f gasType src/Dodge/HeldUse.hs 1135;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f @@ -3645,13 +3659,13 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 89;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 173;" f getBulletType src/Dodge/HeldUse.hs 937;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 522;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 543;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f -getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 579;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 566;" f -getDebugMouseOver src/Dodge/Update.hs 459;" f +getCrMoveSpeed src/Dodge/Creature/Statistics.hs 53;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 588;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 575;" f +getDebugMouseOver src/Dodge/Update.hs 460;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 39;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1284;" f @@ -3661,13 +3675,13 @@ getLaserDamage src/Dodge/HeldUse.hs 728;" f getLaserPhaseV src/Dodge/HeldUse.hs 725;" f getLinksOfType src/Dodge/RoomLink.hs 40;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 471;" f +getMenuMouseContext src/Dodge/Update.hs 472;" f getNodePos src/Dodge/Path.hs 36;" f getPJStabiliser src/Dodge/HeldUse.hs 1271;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 562;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 571;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3743,10 +3757,10 @@ handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f hasAutoDoorBody src/Dodge/Creature/Test.hs 138;" f -hasButtonLOS src/Dodge/Base/Collide.hs 308;" f +hasButtonLOS src/Dodge/Base/Collide.hs 309;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f -hasLOS src/Dodge/Base/Collide.hs 301;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 317;" f +hasLOS src/Dodge/Base/Collide.hs 302;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 318;" f hat src/Dodge/Item/Equipment.hs 65;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f @@ -3770,7 +3784,7 @@ heldItemMuzVel src/Dodge/HeldUse.hs 1022;" f heldItemMuzzles src/Dodge/HeldUse.hs 198;" f heldItemRifling src/Dodge/HeldUse.hs 1064;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 235;" f -heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f +heldItemWeight src/Dodge/Creature/Statistics.hs 83;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f heldTorqueAmount src/Dodge/HeldUse.hs 611;" f heldTriggerType src/Dodge/BaseTriggerType.hs 28;" f @@ -3789,11 +3803,11 @@ horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f -hoverCrit src/Dodge/Creature/ChaseCrit.hs 35;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 65;" f -hoverCritInternal src/Dodge/Humanoid.hs 28;" f -hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 152;" f -hoverDeathSounds src/Dodge/Creature/Vocalization.hs 52;" f +hoverCrit src/Dodge/Creature/ChaseCrit.hs 43;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 68;" f +hoverCritInternal src/Dodge/Humanoid.hs 43;" f +hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 177;" f +hoverDeathSounds src/Dodge/Creature/Vocalization.hs 54;" f iShape src/Dodge/Placement/Instance/LightSource.hs 58;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f @@ -3875,7 +3889,7 @@ invSetSelectionPos src/Dodge/Inventory.hs 296;" f invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 111;" f -inverseSelNumPos src/Dodge/SelectionSections.hs 203;" f +inverseSelNumPos src/Dodge/SelectionSections.hs 211;" f inverseSelSecYint src/Dodge/SelectionSections.hs 179;" f inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 192;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 42;" f @@ -3884,15 +3898,15 @@ invertIntMap src/IntMapHelp.hs 100;" f invertIntMap src/Multiset.hs 67;" f invertIntMapUnique src/IntMapHelp.hs 103;" f invertInventoryToMap src/Dodge/Combine.hs 57;" f -invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 22;" f +invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 23;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 27;" f isAmmoIntLink src/Dodge/HeldUse.hs 738;" f isAnimate src/Dodge/Creature/Test.hs 132;" f -isCognizant src/Dodge/Creature/Perception.hs 118;" f +isCognizant src/Dodge/Creature/Perception.hs 115;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 66;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 193;" f -isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 212;" f +isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 232;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f isLHS src/Geometry/LHS.hs 12;" f @@ -3960,7 +3974,7 @@ itemString src/Dodge/Item/Display.hs 56;" f itemToFunction src/Dodge/Item/Grammar.hs 111;" f itemTreeSPic src/Dodge/Item/Draw/SPicTree.hs 13;" f itemTriggerType src/Dodge/BaseTriggerType.hs 16;" f -itemWeight src/Dodge/Creature/Statistics.hs 74;" f +itemWeight src/Dodge/Creature/Statistics.hs 77;" f iterateUntil src/MonadHelp.hs 23;" f iterateWhile src/MonadHelp.hs 30;" f itmBaseInfo src/Dodge/Item/Info.hs 30;" f @@ -3986,13 +4000,13 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 441;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 749;" f -lChasm src/Dodge/Room/Tutorial.hs 150;" f +lChasm src/Dodge/Room/Tutorial.hs 151;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f lShape src/Dodge/Placement/Instance/LightSource.hs 61;" f lamp src/Dodge/Creature/Lamp.hs 18;" f -lampCrSPic src/Dodge/Render/ShapePicture.hs 129;" f +lampCrSPic src/Dodge/Render/ShapePicture.hs 130;" f lasCenRunClose' src/Dodge/Room/LasTurret.hs 308;" f lasCenRunClose1 src/Dodge/Room/LasTurret.hs 397;" f lasCenRunClose2 src/Dodge/Room/LasTurret.hs 470;" f @@ -4049,12 +4063,12 @@ linksOnPath src/Dodge/Room/CheckConsistency.hs 6;" f listConfig src/Dodge/Menu.hs 232;" f listControls src/Dodge/Menu.hs 244;" f listCursor src/Dodge/Render/List.hs 120;" f -listGuard src/Dodge/Creature/ReaderUpdate.hs 212;" f +listGuard src/Dodge/Creature/ReaderUpdate.hs 239;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 415;" f -loadAmmoTut src/Dodge/Room/Tutorial.hs 430;" f +loadAmmoTut src/Dodge/Room/Tutorial.hs 435;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 654;" f @@ -4181,8 +4195,8 @@ maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 551;" f -maybeOpenConsole src/Dodge/Update.hs 134;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 572;" f +maybeOpenConsole src/Dodge/Update.hs 135;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f maybeTakeStep src/Dodge/Creature/State/WalkCycle.hs 123;" f @@ -4200,7 +4214,7 @@ mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 122;" f mcProxSensorUpdate src/Dodge/Machine/Update.hs 165;" f mcProxTest src/Dodge/Machine/Update.hs 246;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 207;" f -mcSPic src/Dodge/Render/ShapePicture.hs 176;" f +mcSPic src/Dodge/Render/ShapePicture.hs 177;" f mcShootAuto src/Dodge/HeldUse.hs 1189;" f mcShootLaser src/Dodge/HeldUse.hs 1181;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f @@ -4234,9 +4248,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 179;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 201;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 269;" f +midChasm src/Dodge/Room/Tutorial.hs 180;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 202;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 270;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4304,11 +4318,11 @@ muout src/Dodge/RoomLink.hs 144;" f muzFlareAt src/Dodge/HeldUse.hs 702;" f muzzlePos src/Dodge/HeldUse.hs 786;" f muzzleRandPos src/Dodge/HeldUse.hs 795;" f -muzzleWallCheck src/Dodge/Update.hs 347;" f +muzzleWallCheck src/Dodge/Update.hs 348;" f mvButton src/Dodge/Placement/PlaceSpot.hs 170;" f mvCr src/Dodge/Placement/PlaceSpot.hs 173;" f mvFS src/Dodge/Placement/PlaceSpot.hs 176;" f -mvGust src/Dodge/Update.hs 878;" f +mvGust src/Dodge/Update.hs 879;" f mvLS src/Dodge/Placement/PlaceSpot.hs 215;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4326,9 +4340,9 @@ nearRect src/Dodge/Zoning/Common.hs 16;" f nearSeg src/Dodge/Zoning/Common.hs 12;" f nearZeroAngle src/Geometry/Vector.hs 140;" f nearestAngleRep src/Geometry.hs 148;" f -newExtraAwareness src/Dodge/Creature/Perception.hs 150;" f +newExtraAwareness src/Dodge/Creature/Perception.hs 147;" f newKey src/IntMapHelp.hs 61;" f -newSounds src/Dodge/Creature/Perception.hs 182;" f +newSounds src/Dodge/Creature/Perception.hs 179;" f newSoundsToPlay src/Dodge/SoundSelection.hs 8;" f newTextureFramebuffer src/Framebuffer/Setup.hs 16;" f nextArc src/Dodge/Tesla.hs 60;" f @@ -4339,7 +4353,7 @@ noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodeNear src/Dodge/Path.hs 94;" f nodesNear src/Dodge/Path.hs 100;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 266;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 267;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 140;" f normalTo8 src/Shader/Poke.hs 466;" f @@ -4366,8 +4380,8 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 641;" f onEquipWristShield src/Dodge/Euse.hs 89;" f onRemoveWristShield src/Dodge/Euse.hs 79;" f oneH src/Dodge/Creature/Test.hs 95;" f -oneSmooth src/Dodge/Creature/Picture.hs 112;" f -openConsole src/Dodge/Update.hs 139;" f +oneSmooth src/Dodge/Creature/Picture.hs 131;" f +openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 53;" f @@ -4398,11 +4412,11 @@ overPos src/Picture/Base.hs 298;" f overPosObj src/Shape.hs 274;" f overPosSH src/Shape.hs 258;" f overPosSP src/ShapePicture.hs 41;" f -overlapCircWalls src/Dodge/Base/Collide.hs 237;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 276;" f +overlapCircWalls src/Dodge/Base/Collide.hs 238;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 277;" f overlapSegCrs src/Dodge/Base/Collide.hs 61;" f -overlapSegWalls src/Dodge/Base/Collide.hs 217;" f -overrideInternal src/Dodge/Creature/ReaderUpdate.hs 196;" f +overlapSegWalls src/Dodge/Base/Collide.hs 218;" f +overrideInternal src/Dodge/Creature/ReaderUpdate.hs 223;" f overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 36;" f overwriteLabel src/Dodge/Tree/Compose.hs 32;" f p src/ShortShow.hs 48;" f @@ -4415,27 +4429,27 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 644;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 653;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 514;" f +pauseGame src/Dodge/Update/Input/InGame.hs 535;" f pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f -pauseTime src/Dodge/Update.hs 218;" f -pbFlicker src/Dodge/Update.hs 554;" f +pauseTime src/Dodge/Update.hs 219;" f +pbFlicker src/Dodge/Update.hs 555;" f pbsHit src/Dodge/WorldEvent/ThingsHit.hs 114;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f penThing src/Dodge/Bullet.hs 215;" f perMat src/MatrixHelper.hs 60;" f -perceptionUpdate src/Dodge/Creature/Perception.hs 24;" f +perceptionUpdate src/Dodge/Creature/Perception.hs 25;" f performAction src/Dodge/Creature/Action.hs 55;" f performActions src/Dodge/Creature/Action.hs 40;" f -performAimAt src/Dodge/Creature/Action.hs 104;" f -performPathTo src/Dodge/Creature/Action.hs 122;" f -performTurnToA src/Dodge/Creature/Action.hs 134;" f +performAimAt src/Dodge/Creature/Action.hs 111;" f +performPathTo src/Dodge/Creature/Action.hs 129;" f +performTurnToA src/Dodge/Creature/Action.hs 141;" f perspectiveMatrixb src/MatrixHelper.hs 11;" f pickUpItem src/Dodge/Inventory/Add.hs 70;" f pickUpItemAt src/Dodge/Inventory/Add.hs 75;" f @@ -4486,7 +4500,7 @@ pointerToItemID src/Dodge/Item/Location.hs 42;" f pointerYourRootItem src/Dodge/Item/Location.hs 33;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f pointsToPoly src/Geometry/ConvexPoly.hs 37;" f -poisonSPic src/Dodge/Creature/Update.hs 164;" f +poisonSPic src/Dodge/Creature/Update.hs 167;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 509;" f pokeArrayOff src/Shader/Poke.hs 521;" f @@ -4520,8 +4534,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 354;" f -polyChasmC src/Dodge/Room/Tutorial.hs 366;" f +polyChasm src/Dodge/Room/Tutorial.hs 355;" f +polyChasmC src/Dodge/Room/Tutorial.hs 367;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4596,7 +4610,7 @@ pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 126;" f pushOutFromWall' src/Dodge/WallCreatureCollisions.hs 115;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f -pushYouOutFromWalls src/Dodge/Update.hs 343;" f +pushYouOutFromWalls src/Dodge/Update.hs 344;" f putAutoDoor src/Dodge/Placement/Instance/Door.hs 64;" f putBlockN src/Dodge/Placement/Instance/Wall.hs 120;" f putBlockRect src/Dodge/Placement/Instance/Wall.hs 111;" f @@ -4613,7 +4627,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putSingleLight src/Dodge/Room/Tutorial.hs 462;" f +putSingleLight src/Dodge/Room/Tutorial.hs 469;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f @@ -4636,7 +4650,7 @@ rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f radToDeg src/Geometry/Vector.hs 125;" f -radiusSpring src/Dodge/Update.hs 960;" f +radiusSpring src/Dodge/Update.hs 961;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 58;" f @@ -4658,7 +4672,7 @@ randPeakedParam src/RandomHelp.hs 149;" f randProb src/RandomHelp.hs 87;" f randSpark src/Dodge/Spark.hs 70;" f randSparkExtraVel src/Dodge/Spark.hs 93;" f -randWallReflect src/Dodge/Update.hs 734;" f +randWallReflect src/Dodge/Update.hs 735;" f randomChallenges src/Dodge/Room/Start.hs 64;" f randomCompass src/Dodge/Layout.hs 61;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 248;" f @@ -4707,7 +4721,7 @@ reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 709;" f reloadFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 807;" f reloadLevelStart src/Dodge/Save.hs 71;" f reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 537;" f -rememberSounds src/Dodge/Creature/Perception.hs 189;" f +rememberSounds src/Dodge/Creature/Perception.hs 186;" f remoteDetonator src/Dodge/Item/Scope.hs 152;" f remoteScreen src/Dodge/Item/Scope.hs 146;" f removeAmmoFromMag src/Dodge/HeldUse.hs 933;" f @@ -4724,9 +4738,9 @@ renderLayer src/Render.hs 206;" f renderLightingNoShadows src/Render.hs 49;" f renderListAt src/Dodge/Render/List.hs 177;" f renderShadows src/Render.hs 116;" f -replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 184;" f +replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 210;" f replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f -resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 63;" f +resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 65;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 135;" f resetTerminal src/Dodge/WorldEffect.hs 158;" f @@ -4851,10 +4865,10 @@ scale3 src/Picture/Base.hs 137;" f scaleMat src/MatrixHelper.hs 71;" f scaleMatrix src/MatrixHelper.hs 68;" f scaleSH src/Shape.hs 266;" f -scalp src/Dodge/Creature/Picture.hs 156;" f +scalp src/Dodge/Creature/Picture.hs 189;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 161;" f +scorchSPic src/Dodge/Creature/Update.hs 164;" f screenBox src/Dodge/Base/Window.hs 54;" f screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f @@ -4864,8 +4878,8 @@ scrollAugInvSel src/Dodge/Inventory.hs 299;" f scrollAugNextInSection src/Dodge/Inventory.hs 313;" f scrollRBOption src/Dodge/Update/Scroll.hs 139;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f -scrollTimeBack src/Dodge/Update.hs 244;" f -scrollTimeForward src/Dodge/Update.hs 261;" f +scrollTimeBack src/Dodge/Update.hs 245;" f +scrollTimeForward src/Dodge/Update.hs 262;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 585;" f seagullBarkTransformedS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 539;" f seagullChatter1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 605;" f @@ -4875,7 +4889,7 @@ seagullCry2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 679;" f seagullCryS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 689;" f seagullWhistle1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 757;" f seagullWhistleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f -searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 229;" f +searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 256;" f secondColumnLDP src/Dodge/ListDisplayParams.hs 45;" f sectionsDesiredLines src/Dodge/DisplayInventory.hs 202;" f sectionsSizes src/Dodge/DisplayInventory.hs 205;" f @@ -4889,6 +4903,7 @@ selSecSelCol src/Dodge/Render/HUD.hs 512;" f selSecSelSize src/Dodge/SelectionSections.hs 157;" f selSecYint src/Dodge/SelectionSections.hs 166;" f selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f +selectionSet src/Dodge/Update/Input/InGame.hs 171;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 793;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 68;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 77;" f @@ -4898,14 +4913,14 @@ sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 97;" f -sensorTut src/Dodge/Room/Tutorial.hs 588;" f +sensorTut src/Dodge/Room/Tutorial.hs 597;" f sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 49;" f setChannelPos src/Sound.hs 152;" f -setClickWorldPos src/Dodge/Update.hs 109;" f +setClickWorldPos src/Dodge/Update.hs 110;" f setClip src/Dodge/Debug.hs 239;" f setDepth src/Picture/Base.hs 120;" f setDirPS src/Dodge/PlacementSpot.hs 51;" f @@ -4918,24 +4933,23 @@ setLayer src/Picture/Base.hs 131;" f setLinkType src/Dodge/RoomLink.hs 79;" f setLinkTypePD src/Dodge/RoomLink.hs 86;" f setMusicVolume src/Sound.hs 164;" f -setMvPos src/Dodge/Creature/ReaderUpdate.hs 59;" f -setOldPos src/Dodge/Update.hs 585;" f +setMvPosToTargetCr src/Dodge/Creature/ReaderUpdate.hs 58;" f +setOldPos src/Dodge/Update.hs 586;" f setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f -setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 131;" f +setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 137;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 294;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 339;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 360;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 159;" f -setTargetMv src/Dodge/Creature/ReaderUpdate.hs 84;" f setTile src/Dodge/Layout.hs 75;" f setTiles src/Dodge/Layout.hs 68;" f -setTreeInts src/Dodge/Room/Tutorial.hs 99;" f +setTreeInts src/Dodge/Room/Tutorial.hs 100;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f -setViewPos src/Dodge/Creature/ReaderUpdate.hs 70;" f +setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f setWindowColor src/Dodge/Render/Walls.hs 32;" f @@ -4966,9 +4980,9 @@ shellShape src/Dodge/Projectile/Draw.hs 35;" f shieldWall src/Dodge/Item/BackgroundEffect.hs 91;" f shiftByV2 src/Dodge/PlacementSpot.hs 257;" f shiftChildren src/Dodge/Tree/Compose.hs 45;" f -shiftDraw src/Dodge/Render/ShapePicture.hs 134;" f +shiftDraw src/Dodge/Render/ShapePicture.hs 135;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f -shiftInvItems src/Dodge/Update/Input/InGame.hs 307;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 328;" f shiftInvItemsDown src/Dodge/Inventory.hs 181;" f shiftInvItemsUp src/Dodge/Inventory.hs 191;" f shiftLinkBy src/Dodge/Room/Link.hs 89;" f @@ -5011,10 +5025,10 @@ showEquipItem src/Dodge/Item/Display.hs 108;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 130;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f -showManObj src/Dodge/TestString.hs 101;" f +showManObj src/Dodge/TestString.hs 100;" f showMuzzlePositions src/Dodge/Debug.hs 292;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 118;" f +showTimeFlow src/Dodge/TestString.hs 117;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f shrinkVert src/Geometry/Polygon.hs 202;" f shuffle src/RandomHelp.hs 68;" f @@ -5023,7 +5037,7 @@ shufflePair src/RandomHelp.hs 166;" f shuffleRoomPos src/Dodge/Layout.hs 98;" f shuffleTail src/RandomHelp.hs 78;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 965;" f +simpleCrSprings src/Dodge/Update.hs 966;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 765;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 801;" f @@ -5056,7 +5070,7 @@ slowDoorRoom src/Dodge/Room/LongDoor.hs 309;" f slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 326;" f smallBattery src/Dodge/Item/Ammo.hs 57;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f -smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 15;" f +smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 16;" f smallDrawTree src/Dodge/LevelGen.hs 93;" f smallGlass1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 833;" f smallGlass2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 541;" f @@ -5075,7 +5089,7 @@ someCrits src/Dodge/LockAndKey.hs 122;" f soundAngle src/Dodge/SoundLogic.hs 163;" f soundContinue src/Dodge/SoundLogic.hs 131;" f soundContinueVol src/Dodge/SoundLogic.hs 145;" f -soundIsClose src/Dodge/Creature/Perception.hs 195;" f +soundIsClose src/Dodge/Creature/Perception.hs 192;" f soundMenu src/Dodge/Menu.hs 158;" f soundMenuOptions src/Dodge/Menu.hs 161;" f soundMultiFrom src/Dodge/SoundLogic.hs 187;" f @@ -5090,7 +5104,7 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 89;" f spPos src/ShapePicture/Data.hs 11;" f -spaceAction src/Dodge/Update/Input/InGame.hs 517;" f +spaceAction src/Dodge/Update/Input/InGame.hs 538;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 162;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 155;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 147;" f @@ -5119,8 +5133,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 230;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 245;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 231;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 246;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 129;" f @@ -5147,8 +5161,8 @@ stackText src/Picture/Base.hs 180;" f stackedInventory src/Dodge/Creature.hs 326;" f startCr src/Dodge/Creature.hs 90;" f startCrafts src/Dodge/Room/Start.hs 94;" f -startDeathTimer src/Dodge/Creature/Update.hs 119;" f -startDrag src/Dodge/Update/Input/InGame.hs 299;" f +startDeathTimer src/Dodge/Creature/Update.hs 122;" f +startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5170,8 +5184,8 @@ stopPushing src/Dodge/Wall/Damage.hs 172;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f storageShape src/Dodge/Machine/Draw.hs 30;" f storeRoomID src/Dodge/Room/Modify.hs 23;" f -strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f -strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f +strFromEquipment src/Dodge/Creature/Statistics.hs 56;" f +strFromHeldItem src/Dodge/Creature/Statistics.hs 70;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f strictify src/MaybeHelp.hs 35;" f strideLength src/Dodge/Creature/HandPos.hs 46;" f @@ -5219,7 +5233,7 @@ targCorner src/Dodge/Targeting/Draw.hs 35;" f targetCursorPic src/Dodge/Targeting/Draw.hs 41;" f targetYouCognizant src/Dodge/Creature/ChooseTarget.hs 14;" f targetYouLOS src/Dodge/Creature/ChooseTarget.hs 8;" f -targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 218;" f +targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 245;" f targetYouWhenCognizant src/Dodge/Creature/SetTarget.hs 9;" f targetingScope src/Dodge/Item/Scope.hs 38;" f tbComplete src/Dodge/Terminal.hs 217;" f @@ -5271,11 +5285,11 @@ thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 55;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 67;" f throb1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 809;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 769;" f -throwItem src/Dodge/Creature/Action.hs 197;" f +throwItem src/Dodge/Creature/Action.hs 204;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 216;" f tilesToLine src/Shader/AuxAddition.hs 66;" f -timeFlowUpdate src/Dodge/Update.hs 204;" f +timeFlowUpdate src/Dodge/Update.hs 205;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f timeStopper src/Dodge/Item/Held/Utility.hs 39;" f tinMag src/Dodge/Item/Ammo.hs 24;" f @@ -5293,12 +5307,12 @@ tlSetStatus src/Dodge/Terminal.hs 112;" f tmDistributeAmmo src/Dodge/WorldEffect.hs 118;" f tmDistributeLines src/Dodge/Room/Room.hs 474;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 55;" f -tmScreenMousePos src/Dodge/Update.hs 451;" f +tmScreenMousePos src/Dodge/Update.hs 452;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 158;" f -toDeathCarriage src/Dodge/Creature/Update.hs 125;" f +toDeathCarriage src/Dodge/Creature/Update.hs 128;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5322,11 +5336,11 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 671;" f topInvW src/Dodge/ListDisplayParams.hs 56;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 96;" f +topTestPart src/Dodge/TestString.hs 95;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torqueAmount src/Dodge/HeldUse.hs 606;" f torqueCr src/Dodge/WorldEffect.hs 85;" f -torso src/Dodge/Creature/Picture.hs 161;" f +torso src/Dodge/Creature/Picture.hs 194;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 850;" f @@ -5376,13 +5390,14 @@ truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 164;" f tryAttachItems src/Dodge/Item/Grammar.hs 34;" f tryClickUse src/Dodge/Creature/YourControl.hs 207;" f -tryCombine src/Dodge/Update/Input/InGame.hs 534;" f +tryCombine src/Dodge/Update/Input/InGame.hs 555;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 156;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 153;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 159;" f +tryEvadeSideways src/Dodge/Creature/Action.hs 105;" f tryGetChannel src/Sound.hs 99;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 23;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 41;" f -tryPickupSelected src/Dodge/Update/Input/InGame.hs 160;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 177;" f tryPlay src/Sound.hs 85;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 24;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 54;" f @@ -5393,13 +5408,13 @@ tryThrust src/Dodge/Projectile/Update.hs 126;" f tryUseParent src/Dodge/Creature/State.hs 150;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f -tutAnoTree src/Dodge/Room/Tutorial.hs 54;" f -tutDrop src/Dodge/Room/Tutorial.hs 104;" f -tutHub src/Dodge/Room/Tutorial.hs 486;" f -tutLight src/Dodge/Room/Tutorial.hs 398;" f -tutRezBox src/Dodge/Room/Tutorial.hs 599;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 55;" f +tutDrop src/Dodge/Room/Tutorial.hs 105;" f +tutHub src/Dodge/Room/Tutorial.hs 495;" f +tutLight src/Dodge/Room/Tutorial.hs 399;" f +tutRezBox src/Dodge/Room/Tutorial.hs 608;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 624;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 633;" f tweenAngles src/Geometry/Vector.hs 192;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f @@ -5431,100 +5446,100 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 121;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 203;" f -updateAimPos src/Dodge/Update.hs 384;" f +updateAimPos src/Dodge/Update.hs 385;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 43;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 467;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 488;" f updateBarrel src/Dodge/Barreloid.hs 44;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f updateBounds src/Dodge/Update/Camera.hs 262;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f -updateBullets src/Dodge/Update.hs 649;" f +updateBullets src/Dodge/Update.hs 650;" f updateCamera src/Dodge/Update/Camera.hs 33;" f updateCarriage src/Dodge/Creature/State/WalkCycle.hs 18;" f updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 23;" f updateCloseObjects src/Dodge/Inventory.hs 126;" f -updateCloud src/Dodge/Update.hs 891;" f -updateClouds src/Dodge/Update.hs 760;" f +updateCloud src/Dodge/Update.hs 892;" f +updateClouds src/Dodge/Update.hs 761;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 36;" f -updateCreatureGroups src/Dodge/Update.hs 621;" f -updateCreatureSoundPositions src/Dodge/Update.hs 600;" f -updateCreatureStride src/Dodge/Update.hs 375;" f -updateCreatureStrides src/Dodge/Update.hs 372;" f -updateDebris src/Dodge/Update.hs 663;" f +updateCreatureGroups src/Dodge/Update.hs 622;" f +updateCreatureSoundPositions src/Dodge/Update.hs 601;" f +updateCreatureStride src/Dodge/Update.hs 376;" f +updateCreatureStrides src/Dodge/Update.hs 373;" f +updateDebris src/Dodge/Update.hs 664;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f -updateDebugMessageOffset src/Dodge/Update.hs 103;" f -updateDelayedEvents src/Dodge/Update.hs 1008;" f +updateDebugMessageOffset src/Dodge/Update.hs 104;" f +updateDelayedEvents src/Dodge/Update.hs 1009;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f -updateDistortions src/Dodge/Update.hs 642;" f +updateDistortions src/Dodge/Update.hs 643;" f updateDoor src/Dodge/Door.hs 22;" f -updateDoors src/Dodge/Update.hs 389;" f -updateDust src/Dodge/Update.hs 939;" f -updateDusts src/Dodge/Update.hs 766;" f +updateDoors src/Dodge/Update.hs 390;" f +updateDust src/Dodge/Update.hs 940;" f +updateDusts src/Dodge/Update.hs 767;" f updateEdge src/Dodge/Path.hs 45;" f updateEdgeWallObs src/Dodge/Update/WallDamage.hs 39;" f updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f -updateEnergyBalls src/Dodge/Update.hs 751;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 494;" f +updateEnergyBalls src/Dodge/Update.hs 752;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 515;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 748;" f +updateFlames src/Dodge/Update.hs 749;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 351;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 347;" f -updateGas src/Dodge/Update.hs 913;" f -updateGasses src/Dodge/Update.hs 763;" f -updateGusts src/Dodge/Update.hs 875;" f -updateIMl src/Dodge/Update.hs 615;" f -updateIMl' src/Dodge/Update.hs 618;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 372;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 368;" f +updateGas src/Dodge/Update.hs 914;" f +updateGasses src/Dodge/Update.hs 764;" f +updateGusts src/Dodge/Update.hs 876;" f +updateIMl src/Dodge/Update.hs 616;" f +updateIMl' src/Dodge/Update.hs 619;" f updateInGameCamera src/Dodge/Update/Camera.hs 86;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 417;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 438;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f updateItemTargeting src/Dodge/Creature/State.hs 264;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 384;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 411;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 405;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 432;" f updateKeysInGame src/Dodge/Update/Input/InGame.hs 87;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 370;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 393;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 391;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 414;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 12;" f -updateLasers src/Dodge/Update.hs 500;" f +updateLasers src/Dodge/Update.hs 501;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 177;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLivingCreature src/Dodge/Creature/Update.hs 45;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 430;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 451;" f updateMachine src/Dodge/Machine/Update.hs 24;" f -updateMagnets src/Dodge/Update.hs 392;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 218;" f -updateMouseContext src/Dodge/Update.hs 405;" f -updateMouseContextGame src/Dodge/Update.hs 410;" f +updateMagnets src/Dodge/Update.hs 393;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 238;" f +updateMouseContext src/Dodge/Update.hs 406;" f +updateMouseContextGame src/Dodge/Update.hs 411;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 100;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 90;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 181;" f -updateObjCatMaybes src/Dodge/Update.hs 633;" f -updateObjMapMaybe src/Dodge/Update.hs 626;" f -updatePastWorlds src/Dodge/Update.hs 489;" f -updatePlasmaBall src/Dodge/Update.hs 514;" f -updatePlasmaBalls src/Dodge/Update.hs 656;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 201;" f +updateObjCatMaybes src/Dodge/Update.hs 634;" f +updateObjMapMaybe src/Dodge/Update.hs 627;" f +updatePastWorlds src/Dodge/Update.hs 490;" f +updatePlasmaBall src/Dodge/Update.hs 515;" f +updatePlasmaBalls src/Dodge/Update.hs 657;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 176;" f -updatePulseBall src/Dodge/Update.hs 534;" f -updatePulseLaser src/Dodge/Update.hs 703;" f -updatePulseLasers src/Dodge/Update.hs 509;" f +updatePulse src/Dodge/Creature/Update.hs 179;" f +updatePulseBall src/Dodge/Update.hs 535;" f +updatePulseLaser src/Dodge/Update.hs 704;" f +updatePulseLasers src/Dodge/Update.hs 510;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 645;" f +updateRadarBlips src/Dodge/Update.hs 646;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 754;" f +updateRadarSweeps src/Dodge/Update.hs 755;" f updateRandNode src/TreeHelp.hs 111;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 188;" f @@ -5534,31 +5549,31 @@ updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 262;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 745;" f +updateShockwaves src/Dodge/Update.hs 746;" f updateSingleNodes src/TreeHelp.hs 100;" f updateSound src/Sound.hs 73;" f updateSounds src/Sound.hs 68;" f updateSpark src/Dodge/Spark.hs 20;" f -updateSparks src/Dodge/Update.hs 757;" f -updateTerminal src/Dodge/Update.hs 572;" f -updateTeslaArc src/Dodge/Update.hs 673;" f -updateTeslaArcs src/Dodge/Update.hs 670;" f +updateSparks src/Dodge/Update.hs 758;" f +updateTerminal src/Dodge/Update.hs 573;" f +updateTeslaArc src/Dodge/Update.hs 674;" f +updateTeslaArcs src/Dodge/Update.hs 671;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 742;" f +updateTractorBeams src/Dodge/Update.hs 743;" f updateTurret src/Dodge/Machine/Update.hs 55;" f -updateUniverse src/Dodge/Update.hs 82;" f -updateUniverseFirst src/Dodge/Update.hs 93;" f -updateUniverseLast src/Dodge/Update.hs 144;" f -updateUniverseMid src/Dodge/Update.hs 186;" f +updateUniverse src/Dodge/Update.hs 83;" f +updateUniverseFirst src/Dodge/Update.hs 94;" f +updateUniverseLast src/Dodge/Update.hs 145;" f +updateUniverseMid src/Dodge/Update.hs 187;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 49;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 24;" f -updateVocTimer src/Dodge/Humanoid.hs 45;" f +updateVocTimer src/Dodge/Humanoid.hs 60;" f updateWallDamages src/Dodge/Update/WallDamage.hs 15;" f updateWheelEvent src/Dodge/Update/Scroll.hs 21;" f -updateWheelEvents src/Dodge/Update.hs 479;" f -updateWorldEventFlag src/Dodge/Update.hs 128;" f -updateWorldEventFlags src/Dodge/Update.hs 116;" f -upperBody src/Dodge/Creature/Picture.hs 176;" f +updateWheelEvents src/Dodge/Update.hs 480;" f +updateWorldEventFlag src/Dodge/Update.hs 129;" f +updateWorldEventFlags src/Dodge/Update.hs 117;" f +upperBody src/Dodge/Creature/Picture.hs 209;" f upperBox src/Shape.hs 153;" f upperBoxHalf src/Shape.hs 219;" f upperBoxMT src/Shape.hs 144;" f @@ -5618,10 +5633,10 @@ viewClipBounds src/Dodge/Debug/Picture.hs 350;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 202;" f viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f -viewTarget src/Dodge/Creature/ReaderUpdate.hs 171;" f +viewTarget src/Dodge/Creature/ReaderUpdate.hs 196;" f violet src/Color.hs 48;" f -visibleWalls src/Dodge/Base/Collide.hs 222;" f -visionCheck src/Dodge/Creature/Perception.hs 165;" f +visibleWalls src/Dodge/Base/Collide.hs 223;" f +visionCheck src/Dodge/Creature/Perception.hs 162;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f walkCliffPush src/Dodge/Creature/State/WalkCycle.hs 62;" f @@ -5631,7 +5646,7 @@ wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallMovement src/Dodge/WallCreatureCollisions.hs 68;" f -wallToSurface src/Dodge/Base/Collide.hs 186;" f +wallToSurface src/Dodge/Base/Collide.hs 187;" f wallsFromRooms src/Dodge/Layout.hs 153;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f warmupSound src/Dodge/HeldUse.hs 1396;" f @@ -5643,7 +5658,7 @@ wasdM src/Dodge/WASD.hs 9;" f wasdMovement src/Dodge/Creature/YourControl.hs 140;" f wasdWithAiming src/Dodge/Creature/YourControl.hs 106;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f -watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 201;" f +watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 228;" f weaponBehindPillar src/Dodge/Room/Room.hs 200;" f weaponBetweenPillars src/Dodge/Room/Room.hs 216;" f weaponEmptyRoom src/Dodge/Room/Room.hs 161;" f @@ -5717,7 +5732,7 @@ yIntercepts src/Dodge/Zoning/Base.hs 78;" f yV2 src/Geometry/Vector.hs 207;" f yellow src/Color.hs 44;" f you src/Dodge/Base/You.hs 17;" f -youDropItem src/Dodge/Creature/Action.hs 183;" f +youDropItem src/Dodge/Creature/Action.hs 190;" f yourAugmentedItem src/Dodge/Render/HUD.hs 240;" f yourControl src/Dodge/Creature/YourControl.hs 26;" f yourDefaultStrideLength src/Dodge/Default/Creature.hs 111;" f @@ -5727,7 +5742,7 @@ yourRootItem src/Dodge/Base/You.hs 26;" f yourRootItemDT src/Dodge/Base/You.hs 32;" f yourSelectedItem src/Dodge/Base/You.hs 20;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 163;" f +zChasm src/Dodge/Room/Tutorial.hs 164;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f @@ -5736,11 +5751,11 @@ zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 51;" f zipCount src/Dodge/Tree/Shift.hs 142;" f zoneCloud src/Dodge/Zoning/Cloud.hs 33;" f -zoneClouds src/Dodge/Update.hs 561;" f +zoneClouds src/Dodge/Update.hs 562;" f zoneCreature src/Dodge/Zoning/Creature.hs 56;" f -zoneCreatures src/Dodge/Update.hs 596;" f +zoneCreatures src/Dodge/Update.hs 597;" f zoneDust src/Dodge/Zoning/Cloud.hs 57;" f -zoneDusts src/Dodge/Update.hs 566;" f +zoneDusts src/Dodge/Update.hs 567;" f zoneExtract src/Dodge/Zoning/Base.hs 58;" f zoneGas src/Dodge/Zoning/Cloud.hs 36;" f zoneIncPe src/Dodge/Zoning/Pathing.hs 66;" f