From ff903bfb3b3d9723b84b7d41fe898d101b503351 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 2 Apr 2026 19:30:44 +0100 Subject: [PATCH] Generalise pathing, usable with flying creatures --- src/Dodge/Creature/Action.hs | 11 +- src/Dodge/Creature/ChaseCrit.hs | 3 +- src/Dodge/Creature/HandPos.hs | 2 +- src/Dodge/Creature/Picture.hs | 9 + src/Dodge/Creature/ReaderUpdate.hs | 15 + src/Dodge/Creature/Shape.hs | 2 +- src/Dodge/Creature/Update.hs | 7 +- src/Dodge/Data/Creature/Misc.hs | 2 +- src/Dodge/Data/Creature/Stance.hs | 2 +- src/Dodge/Humanoid.hs | 40 ++- src/Dodge/Path.hs | 33 ++ src/Dodge/Placement/Instance/Creature.hs | 2 +- src/Dodge/Placement/PlaceSpot.hs | 6 +- src/Dodge/Render/ShapePicture.hs | 5 +- src/Dodge/Room/Room.hs | 4 + src/Dodge/Room/Tutorial.hs | 5 +- src/Dodge/TestString.hs | 3 +- src/Dodge/WorldEvent/ThingsHit.hs | 1 + tags | 385 ++++++++++++----------- 19 files changed, 322 insertions(+), 215 deletions(-) diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index e9d4f4ca9..9647f20a7 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -33,6 +33,7 @@ import qualified IntMapHelp as IM import LensHelp import Linear import NewInt +import qualified Data.Set as S -- it is desirable to be able to determine when an action is finished, -- so that DoActionThen and the like are easy to define @@ -113,11 +114,17 @@ performAimAt cr w tcid p = ([TurnToward tpos aimSp], [AimAt tcid tpos]) | canSee' = w ^?! cWorld . lWorld . creatures . ix tcid . crPos . _xy | otherwise = p +crPathing :: Creature -> (Point2 -> Point2 -> World -> Bool,S.Set EdgeObstacle -> Bool) +crPathing cr = case cr ^. crStance . carriage of + Flying {} -> (isFlyable, not . S.member (WallObstacle WallNotAutoOpen)) + _ -> (isWalkable, not . pathEdgeObstructed) + performPathTo :: Creature -> World -> Point2 -> ActionUpdate performPathTo cr w p | dist cpos p <= crRad (cr ^. crType) = mempty - | isWalkable cpos p w = gotowards p - | otherwise = case pointTowardsImpulse cpos p w of +-- | isWalkable cpos p w = gotowards p + | fst (crPathing cr) cpos p w = gotowards p + | otherwise = case uncurry pointTowardsImpulse' (crPathing cr) cpos p w of Just q -> gotowards q _ -> ([ChangeStrategy Flee], []) where diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 055b449bc..7a8952f57 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -37,5 +37,6 @@ hoverCrit = defaultCreature & crName .~ "hoverCrit" & crHP .~ HP 100 + & crType .~ HoverCrit 0 & crFaction .~ ColorFaction blue - & crStance . carriage .~ Flying + & crStance . carriage .~ Flying 15 diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index c2a24f733..36a66c4b9 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -63,7 +63,7 @@ handWalkingPos b off cr = case cr ^. crStance . carriage of | otherwise = 8 * zeroOneSmooth (i / slen) in V3 (f sa) off 20 Floating -> V3 0 off 12 - Flying -> V3 0 off 12 + Flying {} -> V3 0 off 12 Boosting _ -> V3 0 off 12 zeroOneSmooth :: Float -> Float diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index ef0be1139..e931431cf 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -8,6 +8,7 @@ module Dodge.Creature.Picture ( deadUpperBody, deadFeet, drawChaseCrit, + drawHoverCrit, ) where import Linear @@ -50,6 +51,14 @@ basicCrShape cr crsize = 0.1 * crRad (cr ^. crType) rotmdir = rotateSH (_crMvDir cr - _crDir cr) +drawHoverCrit :: Creature -> Shape +drawHoverCrit cr = colorSH (_skinUpper cskin) + (overPosSH (Q.apply tpq) $ upperBoxHalf Medium Typical 2 $ square 5) + where + cskin = crShape $ _crType cr + z = cr ^?! crStance . carriage . flyHeight + tpq = (V3 0 0 z, Q.qid) + drawChaseCrit :: Creature -> Shape drawChaseCrit cr = mconcat [ chaseUpperBody cr diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index 33dbd9005..c07814d3f 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -11,6 +11,7 @@ module Dodge.Creature.ReaderUpdate ( chaseCritMv, setMvPos, setViewPos, + hoverCritMv, ) where import Control.Applicative @@ -148,6 +149,20 @@ chaseCritMv w cr = case _apStrategy (_crActionPlan cr) of & crIntention . mvToPoint .~ Nothing _ -> viewTarget w cr +hoverCritMv :: World -> Creature -> Creature +hoverCritMv w cr = case _apStrategy (_crActionPlan cr) of + WarningCry -> cr + MeleeStrike -> cr + _ -> case cr ^? crIntention . mvToPoint . _Just of + Just p + | dist (cr ^. crPos . _xy) p > crRad (cr ^. crType) -> + cr & crActionPlan . apAction .~ [PathTo p] + | otherwise -> + cr & crActionPlan . apAction .~ [bfsThenReturn 500 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]] + & crActionPlan . apStrategy .~ WatchAndWait + & crIntention . mvToPoint .~ Nothing + _ -> viewTarget w cr + goToTarget :: World -> Creature -> Creature goToTarget w cr = case cr ^? crIntention . mvToPoint . _Just of Just p -> cr & crActionPlan . apAction .~ [PathTo p] diff --git a/src/Dodge/Creature/Shape.hs b/src/Dodge/Creature/Shape.hs index dcd358b49..b1baad42b 100644 --- a/src/Dodge/Creature/Shape.hs +++ b/src/Dodge/Creature/Shape.hs @@ -9,7 +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) - HoverCrit {} -> Humanoid (greyN 0.9) (lightx4 blue) (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) BarrelCrit {} -> Barreloid diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index ecfeb3f8d..d1084faab 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -56,7 +56,11 @@ updateLivingCreature cr = ChaseCrit{} -> \w -> crUpdate cid . performActions cid $ over (cWorld . lWorld . creatures . ix cid) (chaseCritInternal w) w - _ -> crUpdate cid + AutoCrit {} -> crUpdate cid + SwarmCrit {} -> crUpdate cid + HoverCrit {} -> \w -> + crUpdate cid . performActions cid $ + over (cWorld . lWorld . creatures . ix cid) (hoverCritInternal w) w where cid = cr ^. crID @@ -135,6 +139,7 @@ dropAll cr w = foldl' (flip (dropItem cr)) w . reverse . IM.keys . _unNIntMap $ chasmTestLiving :: Creature -> World -> World chasmTestLiving cr w + | Flying {} <- cr ^. crStance . carriage = w | Falling {} <- cr ^. crStance . carriage = w & tocr . crZVel -~ 0.5 diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index 1cea40b60..d4ef069c5 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -48,7 +48,7 @@ data CreatureType , _avPosture :: AvatarPosture } | ChaseCrit {_meleeCooldown :: Int} - | HoverCrit + | HoverCrit {_meleeCooldown :: Int} | SwarmCrit | AutoCrit | BarrelCrit {_barrelType :: BarrelType} diff --git a/src/Dodge/Data/Creature/Stance.hs b/src/Dodge/Data/Creature/Stance.hs index 1cf03e6b1..44e378219 100644 --- a/src/Dodge/Data/Creature/Stance.hs +++ b/src/Dodge/Data/Creature/Stance.hs @@ -21,7 +21,7 @@ data Stance = Stance data Carriage = Walking {_strideAmount :: Float, _footForward :: FootForward} | Floating - | Flying + | Flying {_flyHeight :: Float} | Boosting Point2 | Falling {_fallFlail :: Float, _fallFoot :: FootForward} deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Humanoid.hs b/src/Dodge/Humanoid.hs index 25312a8a8..a097e33ba 100644 --- a/src/Dodge/Humanoid.hs +++ b/src/Dodge/Humanoid.hs @@ -1,4 +1,7 @@ -module Dodge.Humanoid (chaseCritInternal) where +module Dodge.Humanoid ( + chaseCritInternal, + hoverCritInternal, +) where import Data.Foldable import Dodge.Creature @@ -22,8 +25,25 @@ chaseCritInternal w cr = , const (crVocalization %~ updateVocTimer) ] +hoverCritInternal :: World -> Creature -> Creature +hoverCritInternal w cr = + foldl' + (\c f -> f w c) + cr + [ const doStrategyActions + , overrideMeleeCloseTarget + , setViewPos + , setMvPos + , hoverCritMv + , perceptionUpdate [0] + , targetYouWhenCognizant + , const searchIfDamaged + , const (crType . meleeCooldown %~ max 0 . subtract 1) + , const (crVocalization %~ updateVocTimer) + ] + updateVocTimer :: Vocalization -> Vocalization -updateVocTimer VocTimer {_vcTime=x,_vcMaxTime=y} | x < y = VocTimer (x+1) y +updateVocTimer VocTimer{_vcTime = x, _vcMaxTime = y} | x < y = VocTimer (x + 1) y updateVocTimer _ = VocReady -- SpreadGunAI -> @@ -177,13 +197,13 @@ updateVocTimer _ = VocReady -- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait]) -- ] ---chooseMovementPistol :: Creature -> World -> Action ---chooseMovementPistol cr w = +-- chooseMovementPistol :: Creature -> World -> Action +-- chooseMovementPistol cr w = -- chooseMovementPistol' cr w -- `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait] -- ---chooseMovementPistol' :: Creature -> World -> Action ---chooseMovementPistol' cr w = +-- chooseMovementPistol' :: Creature -> World -> Action +-- chooseMovementPistol' cr w = -- takeOneWeighted -- [chargeProb, retreatProb, strafeProb, strafeProb] -- [ chargeActions @@ -223,8 +243,8 @@ updateVocTimer _ = VocReady -- yposl = ypos -.- 100 *.* vNormal (normalizeV $ ypos -.- cpos) -- yposr = ypos +.+ 100 *.* vNormal (normalizeV $ ypos -.- cpos) -- ---retreatActionsPistol :: Creature -> Creature -> Action ---retreatActionsPistol tcr cr = +-- retreatActionsPistol :: Creature -> Creature -> Action +-- retreatActionsPistol tcr cr = -- [TurnToward retreatOffset 0.2] -- `DoImpulsesAlongside` 3 -- `DoReplicate` ImpulsesList (replicate 9 [Move (V2 (-3) 0)] ++ [[UseItem]]) @@ -244,8 +264,8 @@ updateVocTimer _ = VocReady -- tpos -- (tpos +.+ vNormal (cpos -.- tpos)) -- ---retreatFireLauncher :: Action ---retreatFireLauncher = +-- retreatFireLauncher :: Action +-- retreatFireLauncher = -- ImpulsesList ([UseItem] : replicate 20 [Turn 0.16]) -- `DoActionThen` holsterWeapon -- `DoActionThen` ImpulsesList (replicate 30 [MoveForward 3]) diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index 73304553d..b36ae6ae3 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -2,6 +2,7 @@ module Dodge.Path ( nodesNear, pointTowardsImpulse, + pointTowardsImpulse', makePathBetween, makePathBetweenPs, obstructPathsCrossing, @@ -10,6 +11,7 @@ module Dodge.Path ( snapToGrid, pairsToIncGraph, getEdgesCrossing, + pathEdgeObstructed, ) where import Dodge.WorldEvent.ThingsHit @@ -60,15 +62,38 @@ makePathUsing t s e w = do . IM.filter (^. seObstacles . to t) $ w ^?! cWorld . incGraph . ix i getn i = w ^?! cWorld . incNode . ix i +makePathUsing' :: (Point2 -> Point2 -> World -> Bool) + -> (Set.Set EdgeObstacle -> Bool) -> Point2 -> Point2 -> World -> Maybe [Int] +makePathUsing' t1 t2 s e w = do + na <- nodeNear t1 w s + nb <- nodeNear t1 w e + let h i = distance (getn nb) (getn i) + (na :) . snd <$> AS.aStarAssoc getes h (== nb) na + where + getes i = IM.toList + . IM.map (^. seDist) + . IM.filter (^. seObstacles . to t2) $ w ^?! cWorld . incGraph . ix i + getn i = w ^?! cWorld . incNode . ix i + + + makePathBetween :: Point2 -> Point2 -> World -> Maybe [Int] makePathBetween = makePathUsing $ not . pathEdgeObstructed +makePathBetween' :: (Point2 -> Point2 -> World -> Bool) -> (Set.Set EdgeObstacle -> Bool) + -> Point2 -> Point2 -> World -> Maybe [Int] +makePathBetween' t1 t2 = makePathUsing' t1 $ t2 + pathEdgeObstructed :: Set.Set EdgeObstacle -> Bool pathEdgeObstructed pe = any (`Set.member` pe) [WallObstacle WallNotAutoOpen, ChasmObstacle] walkableNodeNear :: World -> Point2 -> Maybe Int {-# INLINE walkableNodeNear #-} walkableNodeNear w p = fmap fst . find (flip (isWalkable p) w . snd) $ nodesNear w p + +nodeNear :: (Point2 -> Point2 -> World -> Bool) -> World -> Point2 -> Maybe Int +{-# INLINE nodeNear #-} +nodeNear t w p = fmap fst . find (flip (t p) w . snd) $ nodesNear w p -- where -- nodesNear = zonesExtract (w ^. incNodeZoning) . snailAround $ zoneOfPoint pnZoneSize p @@ -87,10 +112,18 @@ smallSnailInt2 = makePathBetweenPs :: Point2 -> Point2 -> World -> Maybe [Point2] makePathBetweenPs a b w = fmap (`getNodePos` w) <$> makePathBetween a b w +makePathBetweenPs' :: (Point2 -> Point2 -> World -> Bool) -> (Set.Set EdgeObstacle -> Bool) + ->Point2 -> Point2 -> World -> Maybe [Point2] +makePathBetweenPs' t1 t2 a b w = fmap (`getNodePos` w) <$> makePathBetween' t1 t2 a b w + -- assumes that pathfinding is symmetric pointTowardsImpulse :: Point2 -> Point2 -> World -> Maybe Point2 pointTowardsImpulse a b w = find (flip (isWalkable a) w) =<< makePathBetweenPs b a w +pointTowardsImpulse' :: (Point2 -> Point2 -> World -> Bool) -> (Set.Set EdgeObstacle -> Bool) + -> Point2 -> Point2 -> World -> Maybe Point2 +pointTowardsImpulse' t1 t2 a b w = find (flip (t1 a) w) =<< makePathBetweenPs' t1 t2 b a w + pairsToIncGraph :: Set.Set (Point2, Point2) -> ( UV.Vector Point2 diff --git a/src/Dodge/Placement/Instance/Creature.hs b/src/Dodge/Placement/Instance/Creature.hs index 60d2d4a43..287a277df 100644 --- a/src/Dodge/Placement/Instance/Creature.hs +++ b/src/Dodge/Placement/Instance/Creature.hs @@ -6,5 +6,5 @@ import Dodge.Data.GenWorld import RandomHelp randC1 :: PSType -randC1 = RandPS $ takeOne $ map PutCrit $ armourChaseCrit : replicate 50 chaseCrit +randC1 = RandPS $ takeOne $ map PutCrit $ armourChaseCrit : replicate 50 hoverCrit --randC1 = RandPS $ takeOne $ map PutCrit [hoverCrit] diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index 26d9d2c79..9ba0607ba 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -176,11 +176,7 @@ mvCr p rot = (crPos . _xy .~ p) . (crOldPos . _xy .~ p) . (crDir .~ rot) mvFS :: Point2 -> Float -> ForegroundShape -> ForegroundShape mvFS p a = (fsDir +~ a) . (fsPos %~ ((p +) . rotateV a)) -plMachine :: - Machine -> - Maybe Item -> - GenWorld -> - (Int, GenWorld) +plMachine :: Machine -> Maybe Item -> GenWorld -> (Int, GenWorld) plMachine mc mitm gw = ( mcid , gw diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index 272a9d120..b1e5ef912 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -116,7 +116,10 @@ drawCreature m cr = translateSP (_crPos cr) . rotateSP (_crDir cr) $ BarrelCrit{} -> barrelShape LampCrit{_lampHeight = h} -> lampCrSPic h ChaseCrit {} -> noPic $ drawChaseCrit cr - _ -> basicCrPict m cr + Avatar {} -> basicCrPict m cr + SwarmCrit -> basicCrPict m cr + AutoCrit -> basicCrPict m cr + HoverCrit{} -> noPic $ drawHoverCrit cr barrelShape :: SPic barrelShape = noPic $ cylinderPoly Medium Important (map (addZ 20) ps) (map (addZ 0) ps) diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index 52a55f9a5..5a3ae6889 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -13,6 +13,7 @@ module Dodge.Room.Room ( critsRoom, distributerRoom, critDeadEnd, + deadEndPSType, ) where import qualified Data.IntMap.Strict as IM @@ -259,6 +260,9 @@ critInDeadEnd = deadEndRoom & rmPmnts .~ [sPS (V2 0 0) 0 randC1] critDeadEnd :: Room critDeadEnd = deadEndRoom & rmPmnts .~ [sPS (V2 0 0) (pi/2) randC1] +deadEndPSType :: PSType -> Room +deadEndPSType x = deadEndRoom & rmPmnts .~ [sPS (V2 0 0) (pi/2) x] + deadEndRoom :: Room deadEndRoom = defaultRoom diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 5cfa8cf07..b08997b60 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -2,6 +2,7 @@ module Dodge.Room.Tutorial where +import Dodge.Creature.ChaseCrit import Control.Monad import Data.Foldable import qualified Data.IntMap.Strict as IM @@ -338,8 +339,8 @@ chasmSpitTerminal = do tToBTree "chasmTerm" $ Node (addDoorToggleTerminal' i1 (PS 150 0) y') - [ treePost [triggerDoorRoom i1, critDeadEnd] - , treePost [triggerDoorRoom i1, critDeadEnd] + [ treePost [triggerDoorRoom i1, deadEndPSType (PutCrit chaseCrit)] + , treePost [triggerDoorRoom i1, deadEndPSType (PutCrit hoverCrit)] , return $ cleatOnward $ triggerDoorRoom i1 ] where diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index f43d0e6b2..316fe3aec 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -35,7 +35,8 @@ import Data.Monoid import RandomHelp testStringInit :: Universe -> [String] -testStringInit _ = mempty -- fmap show (u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crWallTouch . each) +testStringInit u = u ^.. uvWorld . cWorld . lWorld . creatures . each . crActionPlan . apAction . to show +-- fmap show (u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crWallTouch . each) -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage) -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage . strideAmount) -- a <> fromMaybe [] (do diff --git a/src/Dodge/WorldEvent/ThingsHit.hs b/src/Dodge/WorldEvent/ThingsHit.hs index 20998f813..f4fd7fba7 100644 --- a/src/Dodge/WorldEvent/ThingsHit.hs +++ b/src/Dodge/WorldEvent/ThingsHit.hs @@ -17,6 +17,7 @@ module Dodge.WorldEvent.ThingsHit ( crWlPbHitZ, wlsHitUnsorted, isWalkable, + isFlyable, ) where import ListHelp diff --git a/tags b/tags index 7a176ff37..1178e47ee 100644 --- a/tags +++ b/tags @@ -38,7 +38,7 @@ AZURE src/Color/Data.hs 20;" C AccessTerminal src/Dodge/Data/WorldEffect.hs 30;" C Action src/Dodge/Data/ActionPlan.hs 65;" t ActionPlan src/Dodge/Data/ActionPlan.hs 14;" t -ActionUpdate src/Dodge/Creature/Action.hs 49;" t +ActionUpdate src/Dodge/Creature/Action.hs 50;" t AddGoal src/Dodge/Data/ActionPlan.hs 44;" C AimAt src/Dodge/Data/ActionPlan.hs 66;" C AimStance src/Dodge/Data/AimStance.hs 10;" t @@ -1815,6 +1815,7 @@ _flboStride src/Shader/Data.hs 88;" f _floorItems src/Dodge/Data/LWorld.hs 131;" f _floorShader src/Data/Preload/Render.hs 46;" f _floorVBO src/Data/Preload/Render.hs 45;" f +_flyHeight src/Dodge/Data/Creature/Stance.hs 24;" f _footForward src/Dodge/Data/Creature/Stance.hs 22;" f _foreShapes src/Dodge/Data/LWorld.hs 136;" f _fsDir src/Dodge/Data/ForegroundShape.hs 14;" f @@ -2631,7 +2632,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 112;" f +arms src/Dodge/Creature/Picture.hs 121;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2648,7 +2649,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 75;" f +attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 76;" f attribSize src/Shader/Compile.hs 139;" f autoAmr src/Dodge/Item/Held/Rod.hs 39;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 739;" f @@ -2661,7 +2662,7 @@ axisInt src/Geometry/Intersect.hs 246;" f azure src/Color.hs 49;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f -backPQ src/Dodge/Creature/HandPos.hs 198;" f +backPQ src/Dodge/Creature/HandPos.hs 199;" f backgroundSpaceS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 729;" f backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f backpackShape src/Dodge/Item/Draw/SPic.hs 188;" f @@ -2674,7 +2675,7 @@ bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 827;" 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 121;" f +barrelShape src/Dodge/Render/ShapePicture.hs 124;" 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 @@ -2683,21 +2684,21 @@ 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 150;" f +baseShoulder src/Dodge/Creature/Picture.hs 159;" 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 127;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 39;" f -basicCrPict src/Dodge/Creature/Picture.hs 32;" f -basicCrShape src/Dodge/Creature/Picture.hs 38;" f +basicCrPict src/Dodge/Creature/Picture.hs 33;" f +basicCrShape src/Dodge/Creature/Picture.hs 39;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f battery src/Dodge/Item/Ammo.hs 60;" f batteryPack src/Dodge/Item/Equipment.hs 38;" f beltMag src/Dodge/Item/Ammo.hs 38;" f -bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 227;" f +bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 242;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 115;" f bgunSound src/Dodge/HeldUse.hs 540;" f bingate src/Dodge/Item/Scope.hs 115;" f @@ -2752,10 +2753,10 @@ boxXYZ src/Polyhedra.hs 91;" f boxXYZnobase src/Polyhedra.hs 77;" f brainHat src/Dodge/Item/Equipment.hs 62;" f branchRectWith src/Dodge/Room/Branch.hs 16;" f -branchWith src/Dodge/Room/Room.hs 81;" f +branchWith src/Dodge/Room/Room.hs 82;" f bright src/Color.hs 147;" f brightX src/Color.hs 143;" f -btSPic src/Dodge/Render/ShapePicture.hs 170;" f +btSPic src/Dodge/Render/ShapePicture.hs 173;" f btText src/Dodge/Inventory/SelectionList.hs 236;" f bufferEBO src/Shader/Bind.hs 28;" f bufferPerspectiveMatrixUBO src/Dodge/Render.hs 431;" f @@ -2771,7 +2772,7 @@ burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 18;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f byNthLink src/Dodge/Room/Warning.hs 44;" f -cChasm src/Dodge/Room/Tutorial.hs 136;" f +cChasm src/Dodge/Room/Tutorial.hs 137;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2805,20 +2806,20 @@ charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 28;" f chaseCritAwarenessUpdate src/Dodge/Creature/Perception.hs 65;" f -chaseCritInternal src/Dodge/Humanoid.hs 8;" f -chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 122;" f +chaseCritInternal src/Dodge/Humanoid.hs 11;" f +chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 62;" f -chasmRotate src/Dodge/Creature/Update.hs 177;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 372;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 306;" f -chasmTestCorpse src/Dodge/Creature/Update.hs 160;" f -chasmTestLiving src/Dodge/Creature/Update.hs 136;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 71;" f +chasmRotate src/Dodge/Creature/Update.hs 182;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 373;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 307;" f +chasmTestCorpse src/Dodge/Creature/Update.hs 165;" f +chasmTestLiving src/Dodge/Creature/Update.hs 140;" f chasmWallToSurface src/Dodge/Base/Collide.hs 120;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f -checkDeath src/Dodge/Creature/Update.hs 77;" f -checkDeath' src/Dodge/Creature/Update.hs 80;" f +checkDeath src/Dodge/Creature/Update.hs 81;" f +checkDeath' src/Dodge/Creature/Update.hs 84;" f checkEndGame src/Dodge/Update.hs 856;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2830,10 +2831,10 @@ 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 chemFuelPouch src/Dodge/Item/Ammo.hs 81;" f -chestPQ src/Dodge/Creature/HandPos.hs 195;" f +chestPQ src/Dodge/Creature/HandPos.hs 196;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f -chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 35;" f +chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 36;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 61;" f @@ -2937,9 +2938,9 @@ coolMinigun src/Dodge/Creature/State.hs 95;" f copier src/Dodge/Item/Scope.hs 94;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f -corDoor src/Dodge/Room/Room.hs 406;" f +corDoor src/Dodge/Room/Room.hs 410;" f cornerList src/Preload/Render.hs 236;" f -corpseOrGib src/Dodge/Creature/Update.hs 97;" f +corpseOrGib src/Dodge/Creature/Update.hs 101;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -2947,7 +2948,7 @@ 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 35;" f +crCamouflage src/Dodge/Creature/Picture.hs 36;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f crCrSpring src/Dodge/Update.hs 978;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f @@ -2958,14 +2959,14 @@ crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f crHasTarget src/Dodge/Creature/Test.hs 63;" f crHasTargetLOS src/Dodge/Creature/Test.hs 66;" f crHeight src/Dodge/Base/Collide.hs 175;" f -crHit src/Dodge/WorldEvent/ThingsHit.hs 136;" f +crHit src/Dodge/WorldEvent/ThingsHit.hs 137;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f crInAimStance src/Dodge/Creature/Test.hs 91;" f crIntelligence src/Dodge/Creature/Statistics.hs 39;" f crIsAiming src/Dodge/Creature/Test.hs 58;" f crIsArmouredFrom src/Dodge/Creature/Test.hs 107;" f -crLeftHandWall src/Dodge/Creature/HandPos.hs 101;" f +crLeftHandWall src/Dodge/Creature/HandPos.hs 102;" f crMass src/Dodge/Creature/Mass.hs 5;" f crMaterial src/Dodge/Creature/Material.hs 8;" f crMaxHP src/Dodge/Creature/MaxHP.hs 6;" f @@ -2977,22 +2978,23 @@ crMvForward src/Dodge/Creature/Impulse/Movement.hs 57;" f crMvType src/Dodge/Creature/MoveType.hs 6;" f crNearPoint src/Dodge/Creature/Test.hs 129;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f +crPathing src/Dodge/Creature/Action.hs 117;" f crRad src/Dodge/Creature/Radius.hs 7;" f -crRightHandWall src/Dodge/Creature/HandPos.hs 83;" f +crRightHandWall src/Dodge/Creature/HandPos.hs 84;" 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 965;" f crStratConMatches src/Dodge/Creature/Test.hs 78;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f -crUpdate src/Dodge/Creature/Update.hs 70;" f +crUpdate src/Dodge/Creature/Update.hs 74;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f crVocalResetTime src/Dodge/Creature/Vocalization.hs 62;" f crVocalizationSound src/Dodge/Creature/Vocalization.hs 16;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 26;" f -crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 60;" f -crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 70;" f +crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 61;" f +crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 71;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f @@ -3014,16 +3016,16 @@ creatureShootPulseLaser src/Dodge/HeldUse.hs 887;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 60;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 81;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 70;" f -critDeadEnd src/Dodge/Room/Room.hs 259;" f -critInDeadEnd src/Dodge/Room/Room.hs 255;" f -critsPillarRoom src/Dodge/Room/Room.hs 412;" f -critsRoom src/Dodge/Room/Room.hs 420;" f +critDeadEnd src/Dodge/Room/Room.hs 260;" f +critInDeadEnd src/Dodge/Room/Room.hs 256;" f +critsPillarRoom src/Dodge/Room/Room.hs 416;" f +critsRoom src/Dodge/Room/Room.hs 424;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 28;" f crossProd src/Geometry/Vector3D.hs 41;" f -crsHit src/Dodge/WorldEvent/ThingsHit.hs 84;" f -crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 183;" f -crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 95;" f +crsHit src/Dodge/WorldEvent/ThingsHit.hs 85;" f +crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 184;" f +crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 96;" f crsItmsUnused src/Dodge/Room/Containing.hs 45;" f crsNearCirc src/Dodge/Zoning/Creature.hs 36;" f crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f @@ -3031,7 +3033,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 137;" f +cullPoint src/Dodge/Render/ShapePicture.hs 140;" f cullPretty src/AesonHelp.hs 14;" f cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cutWall src/Dodge/LevelGen/StaticWalls.hs 124;" f @@ -3088,11 +3090,12 @@ dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 349;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 69;" f -deadEndRoom src/Dodge/Room/Room.hs 262;" f -deadFeet src/Dodge/Creature/Picture.hs 108;" f -deadRot src/Dodge/Creature/Picture.hs 126;" f -deadScalp src/Dodge/Creature/Picture.hs 121;" f -deadUpperBody src/Dodge/Creature/Picture.hs 147;" f +deadEndPSType src/Dodge/Room/Room.hs 263;" f +deadEndRoom src/Dodge/Room/Room.hs 266;" f +deadFeet src/Dodge/Creature/Picture.hs 117;" f +deadRot src/Dodge/Creature/Picture.hs 135;" f +deadScalp src/Dodge/Creature/Picture.hs 130;" f +deadUpperBody src/Dodge/Creature/Picture.hs 156;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 725;" f debrisSPic src/Dodge/Prop/Draw.hs 17;" f debrisSize src/Dodge/Block/Debris.hs 131;" f @@ -3214,7 +3217,7 @@ dist src/Geometry/Vector.hs 187;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 150;" f distributeAmmoToYou src/Dodge/WorldEffect.hs 138;" f -distributerRoom src/Dodge/Room/Room.hs 429;" f +distributerRoom src/Dodge/Room/Room.hs 433;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f divideDoorPane src/Dodge/Placement/Instance/Door.hs 47;" f @@ -3276,7 +3279,7 @@ 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 173;" f +doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 188;" f doTabComplete src/Dodge/Terminal.hs 241;" f doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -3293,12 +3296,12 @@ doWorldEvents src/Dodge/Update.hs 488;" 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 -doorCor src/Dodge/Room/Room.hs 401;" f +doorCor src/Dodge/Room/Room.hs 405;" f doorLerp src/Dodge/Door.hs 43;" f doorLerpWithTimer src/Dodge/Door.hs 76;" f dotV src/Geometry/Vector.hs 78;" f dotV3 src/Geometry/Vector3D.hs 119;" f -doubleCorridorBarrels src/Dodge/Room/Room.hs 292;" f +doubleCorridorBarrels src/Dodge/Room/Room.hs 296;" f doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 28;" f @@ -3312,10 +3315,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 176;" f +drawBullet src/Dodge/Render/ShapePicture.hs 179;" f drawButton src/Dodge/Button/Draw.hs 11;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f -drawChaseCrit src/Dodge/Creature/Picture.hs 53;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 62;" 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 @@ -3344,7 +3347,7 @@ drawDragSelecting src/Dodge/Render/HUD.hs 162;" f drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f drawEmptySet src/Dodge/Render/Picture.hs 151;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f -drawEquipment src/Dodge/Creature/Picture.hs 159;" f +drawEquipment src/Dodge/Creature/Picture.hs 168;" 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 @@ -3354,6 +3357,7 @@ drawForceField src/Dodge/Wall/Draw.hs 15;" f drawGapPlus src/Dodge/Render/Picture.hs 278;" f drawGib src/Dodge/Prop/Draw.hs 31;" f drawHUD src/Dodge/Render/HUD.hs 53;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 54;" 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 @@ -3433,9 +3437,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 133;" f +dropAll src/Dodge/Creature/Update.hs 137;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f -dropItem src/Dodge/Creature/Action.hs 155;" f +dropItem src/Dodge/Creature/Action.hs 161;" 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,7 +3495,7 @@ equipInfo src/Dodge/Item/Info.hs 140;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 159;" f equipPosition src/Dodge/Item/Draw.hs 38;" f equipSiteInfo src/Dodge/Item/Info.hs 252;" f -equipSitePQ src/Dodge/Creature/HandPos.hs 32;" 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 @@ -3515,7 +3519,7 @@ explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 693;" 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 142;" f +extraPics src/Dodge/Render/ShapePicture.hs 145;" f extraWeaponLinks src/Dodge/Item/Grammar.hs 94;" f extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 103;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f @@ -3523,7 +3527,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 94;" f +feet src/Dodge/Creature/Picture.hs 103;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3562,17 +3566,17 @@ fleeFrom src/Dodge/CreatureEffect.hs 93;" 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 96;" f +flockACC src/Dodge/Creature/ReaderUpdate.hs 97;" 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 163;" f +floorItemSPic src/Dodge/Render/ShapePicture.hs 166;" f floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 777;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 823;" f -foldMTRS src/Dodge/Room/Tutorial.hs 90;" f +foldMTRS src/Dodge/Room/Tutorial.hs 91;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3634,11 +3638,11 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 509;" 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 577;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 564;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 578;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 565;" f getDebugMouseOver src/Dodge/Update.hs 449;" f getDistortions src/Dodge/Render.hs 443;" f -getEdgesCrossing src/Dodge/Path.hs 37;" f +getEdgesCrossing src/Dodge/Path.hs 39;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1284;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 144;" f @@ -3647,12 +3651,12 @@ 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 461;" f -getNodePos src/Dodge/Path.hs 34;" 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 560;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 561;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3676,12 +3680,12 @@ glassShat1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 697;" f glassShat2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 707;" f glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 711;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 687;" f -glassSwitchBack src/Dodge/Room/Room.hs 84;" f -glassSwitchBackCrits src/Dodge/Room/Room.hs 118;" f +glassSwitchBack src/Dodge/Room/Room.hs 85;" f +glassSwitchBackCrits src/Dodge/Room/Room.hs 119;" f glauncherPic src/Dodge/Item/Draw/SPic.hs 404;" f gluintSize src/Shader/Parameters.hs 25;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f -goToTarget src/Dodge/Creature/ReaderUpdate.hs 151;" f +goToTarget src/Dodge/Creature/ReaderUpdate.hs 166;" f grahamEliminate src/Geometry/Polygon.hs 186;" f grahamScan src/Geometry/Polygon.hs 177;" f grapeCannon src/Dodge/Item/Held/Cone.hs 17;" f @@ -3714,7 +3718,7 @@ haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 67;" f handHandleOrient src/Dodge/Item/HeldOffset.hs 71;" f handOrient src/Dodge/Item/HeldOffset.hs 52;" f -handWalkingPos src/Dodge/Creature/HandPos.hs 50;" f +handWalkingPos src/Dodge/Creature/HandPos.hs 51;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 37;" f handleKeyboardEvent src/Dodge/Event/Input.hs 23;" f @@ -3737,7 +3741,7 @@ head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f headLampShape src/Dodge/Item/Draw/SPic.hs 425;" f headMap src/Dodge/DoubleTree.hs 118;" f -headPQ src/Dodge/Creature/HandPos.hs 189;" f +headPQ src/Dodge/Creature/HandPos.hs 190;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 109;" f healthTest src/Dodge/Room/LasTurret.hs 129;" f @@ -3775,6 +3779,8 @@ 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 +hoverCritInternal src/Dodge/Humanoid.hs 28;" f +hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 152;" f iShape src/Dodge/Placement/Instance/LightSource.hs 58;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f @@ -3872,7 +3878,7 @@ isAnimate src/Dodge/Creature/Test.hs 132;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 66;" f -isFlyable src/Dodge/WorldEvent/ThingsHit.hs 191;" f +isFlyable src/Dodge/WorldEvent/ThingsHit.hs 192;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 199;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f @@ -3894,7 +3900,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 197;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 181;" f isValidCommand src/Dodge/Debug/Terminal.hs 134;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/WorldEvent/ThingsHit.hs 198;" f +isWalkable src/Dodge/WorldEvent/ThingsHit.hs 199;" f isoMatrix src/MatrixHelper.hs 35;" f isotriBWH src/Geometry/Polygon.hs 30;" f itDim src/Dodge/Item/InvSize.hs 21;" f @@ -3968,13 +3974,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 741;" f -lChasm src/Dodge/Room/Tutorial.hs 148;" f +lChasm src/Dodge/Room/Tutorial.hs 149;" 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 126;" f +lampCrSPic src/Dodge/Render/ShapePicture.hs 129;" 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 @@ -4001,13 +4007,13 @@ leaveResetQuitTerminal src/Dodge/WorldEffect.hs 164;" f led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 193;" f -leftHandPQ src/Dodge/Creature/HandPos.hs 125;" f +leftHandPQ src/Dodge/Creature/HandPos.hs 126;" f leftIsParentCombine src/Dodge/Item/Grammar.hs 170;" f leftPad src/Padding.hs 15;" f leftRightCombine src/Dodge/Item/Grammar.hs 205;" f -leftWristPQ src/Dodge/Creature/HandPos.hs 159;" f -legPQ src/Dodge/Creature/HandPos.hs 165;" f -legPQ' src/Dodge/Creature/HandPos.hs 170;" f +leftWristPQ src/Dodge/Creature/HandPos.hs 160;" f +legPQ src/Dodge/Creature/HandPos.hs 166;" f +legPQ' src/Dodge/Creature/HandPos.hs 171;" f legsSPic src/Dodge/Item/Draw/SPic.hs 450;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 86;" f @@ -4031,12 +4037,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 197;" f +listGuard src/Dodge/Creature/ReaderUpdate.hs 212;" 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 410;" f -loadAmmoTut src/Dodge/Room/Tutorial.hs 426;" f +loadAmmoTut src/Dodge/Room/Tutorial.hs 427;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 654;" f @@ -4122,9 +4128,12 @@ makeMachineDebris src/Dodge/Block/Debris.hs 29;" f makeMovingEB src/Dodge/EnergyBall.hs 60;" f makeMuzzleFlare src/Dodge/HeldUse.hs 680;" f makeParagraph src/Justify.hs 6;" f -makePathBetween src/Dodge/Path.hs 63;" f -makePathBetweenPs src/Dodge/Path.hs 87;" f -makePathUsing src/Dodge/Path.hs 51;" f +makePathBetween src/Dodge/Path.hs 80;" f +makePathBetween' src/Dodge/Path.hs 83;" f +makePathBetweenPs src/Dodge/Path.hs 112;" f +makePathBetweenPs' src/Dodge/Path.hs 115;" f +makePathUsing src/Dodge/Path.hs 53;" f +makePathUsing' src/Dodge/Path.hs 65;" f makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 25;" f makeSelectionListPictures src/Dodge/Render/List.hs 67;" f makeShaderProgram src/Shader/Compile.hs 74;" f @@ -4176,7 +4185,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 173;" f +mcSPic src/Dodge/Render/ShapePicture.hs 176;" f mcShootAuto src/Dodge/HeldUse.hs 1189;" f mcShootLaser src/Dodge/HeldUse.hs 1181;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f @@ -4210,9 +4219,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 177;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 199;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 267;" f +midChasm src/Dodge/Room/Tutorial.hs 178;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 200;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 268;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4226,7 +4235,7 @@ miniGunX src/Dodge/Item/Held/Cane.hs 33;" f miniGunXPict src/Dodge/Item/Draw/SPic.hs 375;" f miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 367;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 653;" f -miniTree2 src/Dodge/Room/Room.hs 125;" f +miniTree2 src/Dodge/Room/Room.hs 126;" f minimumOn src/FoldlHelp.hs 14;" f mirrorXAxis src/Geometry/Polygon.hs 76;" f mirrorxz src/Picture/Base.hs 330;" f @@ -4285,7 +4294,7 @@ 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 872;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 219;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 215;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f @@ -4313,10 +4322,11 @@ nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f -nodesNear src/Dodge/Path.hs 75;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 264;" f +nodeNear src/Dodge/Path.hs 94;" f +nodesNear src/Dodge/Path.hs 100;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 265;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f -normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f +normalGait src/Dodge/Creature/State/WalkCycle.hs 31;" f normalTo8 src/Shader/Poke.hs 466;" f normalizeAngle src/Geometry/Vector.hs 130;" f normalizeAnglePi src/Dodge/Base.hs 154;" f @@ -4336,12 +4346,12 @@ numShads src/Picture/Data.hs 37;" f numSubElements src/Shader/Parameters.hs 39;" f numTraversable src/TreeHelp.hs 186;" f obstacleColor src/Dodge/Debug/Picture.hs 264;" f -obstructPathsCrossing src/Dodge/Path.hs 120;" f +obstructPathsCrossing src/Dodge/Path.hs 153;" f oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 635;" 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 91;" f +oneSmooth src/Dodge/Creature/Picture.hs 100;" f openConsole src/Dodge/Update.hs 138;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4377,22 +4387,22 @@ overlapCircWalls src/Dodge/Base/Collide.hs 233;" f overlapCircWallsClosest src/Dodge/Base/Collide.hs 272;" f overlapSegCrs src/Dodge/Base/Collide.hs 60;" f overlapSegWalls src/Dodge/Base/Collide.hs 213;" f -overrideInternal src/Dodge/Creature/ReaderUpdate.hs 181;" f -overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 35;" f +overrideInternal src/Dodge/Creature/ReaderUpdate.hs 196;" f +overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 36;" f overwriteLabel src/Dodge/Tree/Compose.hs 32;" f p src/ShortShow.hs 48;" f pContID src/Dodge/LevelGen/PlacementHelper.hs 15;" f pairPolyPointsIntersect src/Geometry/ConvexPoly.hs 93;" f pairPolyPointsIntersectWitness src/Geometry/ConvexPoly.hs 101;" f -pairsToIncGraph src/Dodge/Path.hs 94;" f +pairsToIncGraph src/Dodge/Path.hs 127;" f pairsToIncidence src/Dodge/Graph.hs 20;" f 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 642;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 643;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f -pathEdgeObstructed src/Dodge/Path.hs 66;" f +pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseGame src/Dodge/Update/Input/InGame.hs 501;" f pauseMenu src/Dodge/Menu.hs 57;" f @@ -4400,17 +4410,17 @@ pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 217;" f pbFlicker src/Dodge/Update.hs 549;" f -pbsHit src/Dodge/WorldEvent/ThingsHit.hs 112;" f +pbsHit src/Dodge/WorldEvent/ThingsHit.hs 113;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f penThing src/Dodge/Bullet.hs 214;" f perMat src/MatrixHelper.hs 60;" f perceptionUpdate src/Dodge/Creature/Perception.hs 24;" f -performAction src/Dodge/Creature/Action.hs 54;" f -performActions src/Dodge/Creature/Action.hs 39;" f -performAimAt src/Dodge/Creature/Action.hs 103;" f -performPathTo src/Dodge/Creature/Action.hs 116;" f -performTurnToA src/Dodge/Creature/Action.hs 128;" 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 perspectiveMatrixb src/MatrixHelper.hs 11;" f pickUpItem src/Dodge/Inventory/Add.hs 70;" f pickUpItemAt src/Dodge/Inventory/Add.hs 75;" f @@ -4421,7 +4431,7 @@ pincerP'' src/Dodge/Creature/Boid.hs 106;" f pincerP''' src/Dodge/Creature/Boid.hs 77;" f pipe src/Dodge/Item/Craftable.hs 29;" f pistol src/Dodge/Item/Held/Stick.hs 18;" f -pistolerRoom src/Dodge/Room/Room.hs 346;" f +pistolerRoom src/Dodge/Room/Room.hs 350;" f pjRemoteSetDirection src/Dodge/Projectile/Update.hs 196;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f @@ -4454,13 +4464,14 @@ pointInOrOnPolygon src/Geometry/Polygon.hs 86;" f pointInPoly src/Geometry/Polygon.hs 94;" f pointIsInCone src/Geometry.hs 375;" f pointIsOnScreen src/Dodge/Base/Window.hs 60;" f -pointTowardsImpulse src/Dodge/Path.hs 91;" f +pointTowardsImpulse src/Dodge/Path.hs 120;" f +pointTowardsImpulse' src/Dodge/Path.hs 123;" f pointerToItem src/Dodge/Item/Location.hs 39;" f 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 129;" f +poisonSPic src/Dodge/Creature/Update.hs 133;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 509;" f pokeArrayOff src/Shader/Poke.hs 521;" f @@ -4494,8 +4505,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 350;" f -polyChasmC src/Dodge/Room/Tutorial.hs 362;" f +polyChasm src/Dodge/Room/Tutorial.hs 351;" f +polyChasmC src/Dodge/Room/Tutorial.hs 363;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4586,7 +4597,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 460;" f +putSingleLight src/Dodge/Room/Tutorial.hs 461;" 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 @@ -4698,11 +4709,11 @@ 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 169;" f +replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 184;" f replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 66;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f -resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f +resetStride src/Dodge/Creature/State/WalkCycle.hs 26;" f resetTerminal src/Dodge/WorldEffect.hs 158;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f @@ -4734,26 +4745,26 @@ rhombus src/Polyhedra.hs 69;" f rifle src/Dodge/Item/Held/Cane.hs 19;" f right src/DoubleStack.hs 16;" f rightChildList src/Dodge/Item/Grammar.hs 199;" f -rightHandPQ src/Dodge/Creature/HandPos.hs 71;" f +rightHandPQ src/Dodge/Creature/HandPos.hs 72;" f rightIsParentCombine src/Dodge/Item/Grammar.hs 181;" f rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f -rightWristPQ src/Dodge/Creature/HandPos.hs 122;" f +rightWristPQ src/Dodge/Creature/HandPos.hs 123;" f rlPosDir src/Dodge/RoomLink.hs 112;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 401;" f rmInLinks src/Dodge/RoomLink.hs 153;" f rmInvItem src/Dodge/Inventory.hs 84;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f rmOutLinks src/Dodge/RoomLink.hs 153;" f -roomC src/Dodge/Room/Room.hs 52;" f -roomCCrits src/Dodge/Room/Room.hs 287;" f -roomCenterPillar src/Dodge/Room/Room.hs 138;" f +roomC src/Dodge/Room/Room.hs 53;" f +roomCCrits src/Dodge/Room/Room.hs 291;" f +roomCenterPillar src/Dodge/Room/Room.hs 139;" f roomCritLS src/Dodge/Room/RunPast.hs 24;" f roomCross src/Dodge/Room/Boss.hs 79;" f roomGlassOctogon src/Dodge/Room/Boss.hs 22;" f -roomMiniIntro src/Dodge/Room/Room.hs 133;" f +roomMiniIntro src/Dodge/Room/Room.hs 134;" f roomNgon src/Dodge/Room/Ngon.hs 16;" f -roomPadCut src/Dodge/Room/Room.hs 73;" f +roomPadCut src/Dodge/Room/Room.hs 74;" f roomPillars src/Dodge/Room/Pillar.hs 107;" f roomPillarsContaining src/Dodge/Room/Containing.hs 39;" f roomPillarsPassage src/Dodge/Room/Pillar.hs 94;" f @@ -4825,10 +4836,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 135;" f +scalp src/Dodge/Creature/Picture.hs 144;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 126;" f +scorchSPic src/Dodge/Creature/Update.hs 130;" 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 @@ -4849,7 +4860,7 @@ seagullCry2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 671;" f seagullCryS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 681;" f seagullWhistle1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 749;" f seagullWhistleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 621;" f -searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 214;" f +searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 229;" f secondColumnLDP src/Dodge/ListDisplayParams.hs 45;" f sectionsDesiredLines src/Dodge/DisplayInventory.hs 202;" f sectionsSizes src/Dodge/DisplayInventory.hs 205;" f @@ -4872,7 +4883,7 @@ 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 586;" f +sensorTut src/Dodge/Room/Tutorial.hs 587;" 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 @@ -4893,7 +4904,7 @@ 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 58;" f +setMvPos src/Dodge/Creature/ReaderUpdate.hs 59;" f setOldPos src/Dodge/Update.hs 580;" f setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f @@ -4904,12 +4915,12 @@ setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" 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 83;" 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 97;" f +setTreeInts src/Dodge/Room/Tutorial.hs 98;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f -setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f +setViewPos src/Dodge/Creature/ReaderUpdate.hs 70;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f setWindowColor src/Dodge/Render/Walls.hs 32;" f @@ -4940,7 +4951,7 @@ 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 131;" f +shiftDraw src/Dodge/Render/ShapePicture.hs 134;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f shiftInvItems src/Dodge/Update/Input/InGame.hs 294;" f shiftInvItemsDown src/Dodge/Inventory.hs 181;" f @@ -4972,10 +4983,10 @@ shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootTeslaArc src/Dodge/HeldUse.hs 1206;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f shootTractorBeam src/Dodge/HeldUse.hs 838;" f -shootersRoom src/Dodge/Room/Room.hs 340;" f -shootersRoom' src/Dodge/Room/Room.hs 307;" f -shootersRoom1 src/Dodge/Room/Room.hs 330;" f -shootingRange src/Dodge/Room/Room.hs 357;" f +shootersRoom src/Dodge/Room/Room.hs 344;" f +shootersRoom' src/Dodge/Room/Room.hs 311;" f +shootersRoom1 src/Dodge/Room/Room.hs 334;" f +shootingRange src/Dodge/Room/Room.hs 361;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 527;" f @@ -5038,11 +5049,11 @@ smallGlass3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 805;" f smallGlass4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 607;" f smallPillar src/Dodge/Room/Pillar.hs 38;" f smallRoom src/Dodge/Room/RunPast.hs 31;" f -smallSnailInt2 src/Dodge/Path.hs 81;" f +smallSnailInt2 src/Dodge/Path.hs 106;" f smg src/Dodge/Item/Held/Stick.hs 30;" f smokeReducer src/Dodge/Item/Scope.hs 182;" f -snailAround src/Dodge/Path.hs 78;" f -snapToGrid src/Dodge/Path.hs 129;" f +snailAround src/Dodge/Path.hs 103;" f +snapToGrid src/Dodge/Path.hs 162;" f sndV2 src/Geometry/Data.hs 73;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f someCrits src/Dodge/LockAndKey.hs 122;" f @@ -5076,7 +5087,7 @@ sparkRandDir src/Dodge/Spark.hs 117;" f sparkToDamage src/Dodge/Spark.hs 40;" f spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 54;" f -spawnerRoom src/Dodge/Room/Room.hs 385;" f +spawnerRoom src/Dodge/Room/Room.hs 389;" f speedLegs src/Dodge/Item/Equipment.hs 74;" f splashMenu src/Dodge/Menu.hs 31;" f splashMenuOptions src/Dodge/Menu.hs 36;" f @@ -5093,8 +5104,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 228;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 243;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 229;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 244;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 129;" f @@ -5122,7 +5133,7 @@ stackedInventory src/Dodge/Creature.hs 326;" f startCr src/Dodge/Creature.hs 90;" f startCrafts src/Dodge/Room/Start.hs 94;" f startDrag src/Dodge/Update/Input/InGame.hs 286;" f -startFalling src/Dodge/Creature/Update.hs 154;" f +startFalling src/Dodge/Creature/Update.hs 159;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5148,7 +5159,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f strictify src/MaybeHelp.hs 35;" f -strideLength src/Dodge/Creature/HandPos.hs 45;" f +strideLength src/Dodge/Creature/HandPos.hs 46;" f strideRot src/Dodge/Item/HeldOffset.hs 80;" f stringToList src/Picture/Base.hs 308;" f stringToListGrad src/Picture/Text.hs 12;" f @@ -5193,7 +5204,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 203;" f +targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 218;" f targetYouWhenCognizant src/Dodge/Creature/SetTarget.hs 9;" f targetingScope src/Dodge/Item/Scope.hs 38;" f tbComplete src/Dodge/Terminal.hs 217;" f @@ -5237,15 +5248,15 @@ thickCircle src/Picture/Base.hs 267;" f thickLine src/Picture/Base.hs 238;" f thickLineCol src/Picture/Base.hs 250;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f -thingHit src/Dodge/WorldEvent/ThingsHit.hs 133;" f -thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 121;" f -thingsHit src/Dodge/WorldEvent/ThingsHit.hs 45;" f -thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 142;" f -thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 53;" f +thingHit src/Dodge/WorldEvent/ThingsHit.hs 134;" f +thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 122;" f +thingsHit src/Dodge/WorldEvent/ThingsHit.hs 46;" f +thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 143;" f +thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 54;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 67;" f throb1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 801;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 761;" f -throwItem src/Dodge/Creature/Action.hs 191;" f +throwItem src/Dodge/Creature/Action.hs 197;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 216;" f tilesToLine src/Shader/AuxAddition.hs 66;" f @@ -5265,7 +5276,7 @@ titleOptionsNoWrite src/Dodge/Menu.hs 107;" f tlDoEffect src/Dodge/Terminal.hs 115;" f tlSetStatus src/Dodge/Terminal.hs 112;" f tmDistributeAmmo src/Dodge/WorldEffect.hs 118;" f -tmDistributeLines src/Dodge/Room/Room.hs 469;" f +tmDistributeLines src/Dodge/Room/Room.hs 473;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 55;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 136;" f @@ -5297,7 +5308,7 @@ topTestPart src/Dodge/TestString.hs 73;" 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 140;" f +torso src/Dodge/Creature/Picture.hs 149;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 850;" f @@ -5313,8 +5324,8 @@ translate3 src/Picture/Base.hs 112;" f translateFloatingCamera src/Dodge/Update/Camera.hs 50;" f translateFloatingCameraKeys src/Dodge/Update/Camera.hs 68;" f translateH src/Picture/Base.hs 104;" f -translatePointToLeftHand src/Dodge/Creature/HandPos.hs 153;" f -translatePointToRightHand src/Dodge/Creature/HandPos.hs 42;" f +translatePointToLeftHand src/Dodge/Creature/HandPos.hs 154;" f +translatePointToRightHand src/Dodge/Creature/HandPos.hs 43;" f translateSH src/Shape.hs 242;" f translateSHxy src/Shape.hs 246;" f translateSHz src/Shape.hs 250;" f @@ -5322,11 +5333,11 @@ translateSP src/ShapePicture.hs 53;" f translateSPxy src/ShapePicture.hs 45;" f translateSPz src/ShapePicture.hs 49;" f translateScreenPos src/Dodge/ScreenPos.hs 12;" f -translateToES src/Dodge/Creature/HandPos.hs 29;" f -translateToLeftHand src/Dodge/Creature/HandPos.hs 156;" f -translateToLeftLeg src/Dodge/Creature/HandPos.hs 162;" f -translateToRightHand src/Dodge/Creature/HandPos.hs 119;" f -translateToRightLeg src/Dodge/Creature/HandPos.hs 186;" f +translateToES src/Dodge/Creature/HandPos.hs 30;" f +translateToLeftHand src/Dodge/Creature/HandPos.hs 157;" f +translateToLeftLeg src/Dodge/Creature/HandPos.hs 163;" f +translateToRightHand src/Dodge/Creature/HandPos.hs 120;" f +translateToRightLeg src/Dodge/Creature/HandPos.hs 187;" f translateXY src/Polyhedra.hs 23;" f trapTBH src/Geometry/Polygon.hs 22;" f trapezionBWHW src/Geometry/Polygon.hs 34;" f @@ -5352,7 +5363,7 @@ tryDrawToCapacitor src/Dodge/Creature/State.hs 151;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 140;" f tryGetChannel src/Sound.hs 99;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 23;" f -tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 40;" f +tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 41;" f tryPickupSelected src/Dodge/Update/Input/InGame.hs 147;" f tryPlay src/Sound.hs 85;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 24;" f @@ -5364,20 +5375,20 @@ tryThrust src/Dodge/Projectile/Update.hs 126;" f tryUseParent src/Dodge/Creature/State.hs 145;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f -tutAnoTree src/Dodge/Room/Tutorial.hs 53;" f -tutDrop src/Dodge/Room/Tutorial.hs 102;" f -tutHub src/Dodge/Room/Tutorial.hs 484;" f -tutLight src/Dodge/Room/Tutorial.hs 394;" f -tutRezBox src/Dodge/Room/Tutorial.hs 597;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 54;" f +tutDrop src/Dodge/Room/Tutorial.hs 103;" f +tutHub src/Dodge/Room/Tutorial.hs 485;" f +tutLight src/Dodge/Room/Tutorial.hs 395;" f +tutRezBox src/Dodge/Room/Tutorial.hs 598;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 622;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 623;" f tweenAngles src/Geometry/Vector.hs 192;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f twists src/Dodge/Creature/Test.hs 101;" f twoFlat src/Dodge/Creature/Test.hs 98;" f twoFlatHRot src/Dodge/Item/HeldOffset.hs 91;" f -twoHandOffY src/Dodge/Creature/HandPos.hs 137;" f +twoHandOffY src/Dodge/Creature/HandPos.hs 138;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 142;" f twoRoomPoss src/Dodge/PlacementSpot.hs 148;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 519;" f @@ -5435,7 +5446,7 @@ updateDoor src/Dodge/Door.hs 22;" f updateDoors src/Dodge/Update.hs 386;" f updateDust src/Dodge/Update.hs 933;" f updateDusts src/Dodge/Update.hs 760;" f -updateEdge src/Dodge/Path.hs 43;" 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 @@ -5485,7 +5496,7 @@ updatePlasmaBall src/Dodge/Update.hs 509;" f updatePlasmaBalls src/Dodge/Update.hs 650;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 184;" f +updatePulse src/Dodge/Creature/Update.hs 189;" f updatePulseBall src/Dodge/Update.hs 529;" f updatePulseLaser src/Dodge/Update.hs 697;" f updatePulseLasers src/Dodge/Update.hs 504;" f @@ -5521,14 +5532,14 @@ updateUniverseLast src/Dodge/Update.hs 143;" f updateUniverseMid src/Dodge/Update.hs 185;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 47;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 24;" f -updateVocTimer src/Dodge/Humanoid.hs 25;" f -updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 11;" f +updateVocTimer src/Dodge/Humanoid.hs 45;" f +updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f updateWallDamages src/Dodge/Update/WallDamage.hs 15;" f updateWheelEvent src/Dodge/Update/Scroll.hs 21;" f updateWheelEvents src/Dodge/Update.hs 474;" f updateWorldEventFlag src/Dodge/Update.hs 127;" f updateWorldEventFlags src/Dodge/Update.hs 115;" f -upperBody src/Dodge/Creature/Picture.hs 155;" f +upperBody src/Dodge/Creature/Picture.hs 164;" f upperBox src/Shape.hs 153;" f upperBoxHalf src/Shape.hs 219;" f upperBoxMT src/Shape.hs 144;" f @@ -5588,14 +5599,14 @@ 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 156;" f +viewTarget src/Dodge/Creature/ReaderUpdate.hs 171;" f violet src/Color.hs 48;" f visibleWalls src/Dodge/Base/Collide.hs 218;" f visionCheck src/Dodge/Creature/Perception.hs 152;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f walkNozzle src/Dodge/HeldUse.hs 826;" f -walkableNodeNear src/Dodge/Path.hs 69;" f +walkableNodeNear src/Dodge/Path.hs 90;" f wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f @@ -5612,13 +5623,13 @@ wasdM src/Dodge/WASD.hs 9;" f wasdMovement src/Dodge/Creature/YourControl.hs 145;" f wasdWithAiming src/Dodge/Creature/YourControl.hs 106;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f -watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 186;" f -weaponBehindPillar src/Dodge/Room/Room.hs 198;" f -weaponBetweenPillars src/Dodge/Room/Room.hs 214;" f -weaponEmptyRoom src/Dodge/Room/Room.hs 159;" f -weaponLongCorridor src/Dodge/Room/Room.hs 239;" f -weaponRoom src/Dodge/Room/Room.hs 276;" f -weaponUnderCrits src/Dodge/Room/Room.hs 177;" f +watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 201;" f +weaponBehindPillar src/Dodge/Room/Room.hs 199;" f +weaponBetweenPillars src/Dodge/Room/Room.hs 215;" f +weaponEmptyRoom src/Dodge/Room/Room.hs 160;" f +weaponLongCorridor src/Dodge/Room/Room.hs 240;" f +weaponRoom src/Dodge/Room/Room.hs 280;" f +weaponUnderCrits src/Dodge/Room/Room.hs 178;" f wedgeGeom src/Dodge/Base.hs 42;" f wedgeOfThickness src/Dodge/Picture.hs 9;" f whirS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 639;" f @@ -5644,7 +5655,7 @@ windowXFloat src/Dodge/Data/Config.hs 72;" f windowYFloat src/Dodge/Data/Config.hs 74;" f withAlpha src/Color.hs 37;" f withByteString src/Shader/Compile.hs 157;" f -wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 160;" f +wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 161;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 31;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 21;" f wlIXsNearRect src/Dodge/Zoning/Wall.hs 28;" f @@ -5657,9 +5668,9 @@ wlWlCrush' src/Dodge/WallCreatureCollisions.hs 89;" f wlZoneSize src/Dodge/Zoning/Wall.hs 51;" f wlsCrush' src/Dodge/WallCreatureCollisions.hs 80;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 34;" f -wlsHit src/Dodge/WorldEvent/ThingsHit.hs 156;" f -wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f -wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 163;" f +wlsHit src/Dodge/WorldEvent/ThingsHit.hs 157;" f +wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 169;" f +wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 164;" f wlsNearCirc src/Dodge/Zoning/Wall.hs 48;" f wlsNearPoint src/Dodge/Zoning/Wall.hs 38;" f wlsNearRect src/Dodge/Zoning/Wall.hs 45;" f @@ -5686,7 +5697,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 177;" f +youDropItem src/Dodge/Creature/Action.hs 183;" 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 @@ -5696,11 +5707,11 @@ 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 161;" f +zChasm src/Dodge/Room/Tutorial.hs 162;" 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 -zeroOneSmooth src/Dodge/Creature/HandPos.hs 68;" f +zeroOneSmooth src/Dodge/Creature/HandPos.hs 69;" f zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 51;" f zipCount src/Dodge/Tree/Shift.hs 142;" f