From 2f3a00a971f8815e90e61b4245831579c5a8876c Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 21 Oct 2025 19:56:48 +0100 Subject: [PATCH] Commit before potential Door refactor --- src/Dodge/CreatureEffect.hs | 2 +- src/Dodge/Data/Block.hs | 1 - src/Dodge/Data/CWorld.hs | 1 - src/Dodge/Layout.hs | 4 - src/Dodge/Path.hs | 125 +++----------------------- src/Dodge/Save.hs | 63 ++++++------- src/IntMapHelp.hs | 9 +- tags | 171 +++++++++++++++--------------------- 8 files changed, 118 insertions(+), 258 deletions(-) diff --git a/src/Dodge/CreatureEffect.hs b/src/Dodge/CreatureEffect.hs index d9e7be9f5..015b94ca8 100644 --- a/src/Dodge/CreatureEffect.hs +++ b/src/Dodge/CreatureEffect.hs @@ -46,7 +46,7 @@ doCrAc ca = case ca of doCrWdAc :: CrWdAc -> Creature -> World -> Action doCrWdAc cw = case cw of - CrWdBFSThenReturn _ -> undefined + CrWdBFSThenReturn _ -> const $ const NoAction -- CrWdBFSThenReturn t -> \cr w -> fromMaybe NoAction $ do -- n <- walkableNodeNear w (cr ^. crPos . _xy) -- let as = take 20 $ map PathTo $ bfsNodePoints n w diff --git a/src/Dodge/Data/Block.hs b/src/Dodge/Data/Block.hs index 5bc66058d..eacf88665 100644 --- a/src/Dodge/Data/Block.hs +++ b/src/Dodge/Data/Block.hs @@ -28,7 +28,6 @@ data Block = Block , _blHeight :: Float , _blMaterial :: Material , _blDraw :: BlockDraw --Block -> SPic --- , _blObstructs :: Set PathEdgeNodes , _blObstructs :: [(Int,Int)] } deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Data/CWorld.hs b/src/Dodge/Data/CWorld.hs index 8d81d92e3..8dac5e983 100644 --- a/src/Dodge/Data/CWorld.hs +++ b/src/Dodge/Data/CWorld.hs @@ -25,7 +25,6 @@ data CWorld = CWorld , _cwGen :: CWGen , _cClock :: Int , _cwTiles :: [Tile] --- , _pathGraph :: Gr Point2 PathEdge , _incGraph :: V.Vector [(Int,SimpleEdge)] , _incNode :: UV.Vector Point2 , _incEdges :: [(Int,Int)] diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index 904c980b3..4500d1aae 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -45,17 +45,13 @@ generateLevelFromRoomList gr' w = . worldToGenWorld rs' $ w & cWorld . lWorld . walls .~ wallsFromRooms rs & cWorld . cwGen . cwgGameRooms .~ gameRoomsFromRooms (IM.elems rs') --- & cWorld . pathGraph .~ path & cWorld . incNode .~ inodes & cWorld . incGraph .~ igraph & cWorld . incEdges .~ ipairs --- & pnZoning .~ foldl' (flip zonePn) mempty (labNodes path) --- & peZoning .~ foldl' (flip zonePe) mempty (map fromEdgeTuple $ labEdges path) & incNodeZoning .~ UV.ifoldl' (\m i p -> zonePn (i,p) m) mempty inodes & incEdgeZoning .~ foldl' (flip (zoneIncPe inodes)) mempty ipairs where pairs = snapToGrid $ foldMap _rmPath rs --- (_, path) = pairsToGraph pairs (inodes,igraph,ipairs) = pairsToIncGraph pairs rs = map doRoomShift $ IM.elems rs' rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index 6610591dd..85634bdbf 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -61,9 +61,8 @@ makePathUsing :: (Set.Set EdgeObstacle -> Bool) -> Point2 -> Point2 -> World -> makePathUsing t s e w = do na <- walkableNodeNear w s nb <- walkableNodeNear w e - let f i = getes i - h i = distance (getn nb) (getn i) - (na :) . snd <$> AS.aStarAssoc f h (== nb) na + let h i = distance (getn nb) (getn i) + (na :) . snd <$> AS.aStarAssoc getes h (== nb) na where g (i, SimpleEdge c o) | t o = Just (i, c) @@ -71,22 +70,11 @@ makePathUsing t s e w = do getes i = mapMaybe g $ w ^?! cWorld . incGraph . ix i getn i = w ^?! cWorld . incNode . ix i --- sp na nb . second _peDist . efilter (^. _3 . to t) $ w ^. cWorld . pathGraph - makePathBetween :: Point2 -> Point2 -> World -> Maybe [Int] makePathBetween = makePathUsing $ not . pathEdgeObstructed ---pathEdgeObstructed' :: PathEdge -> Bool ---pathEdgeObstructed' pe = --- any --- (`Set.member` _peObstacles pe) --- [DoorObstacle, BlockObstacle, ChasmObstacle] - pathEdgeObstructed :: Set.Set EdgeObstacle -> Bool -pathEdgeObstructed pe = - any - (`Set.member` pe) - [DoorObstacle, BlockObstacle, ChasmObstacle] +pathEdgeObstructed pe = any (`Set.member` pe) [DoorObstacle, BlockObstacle, ChasmObstacle] walkableNodeNear :: World -> Point2 -> Maybe Int {-# INLINE walkableNodeNear #-} @@ -94,12 +82,6 @@ walkableNodeNear w p = fmap fst . find (flip (isWalkable p) w . snd) $ nodesNear where nodesNear = zonesExtract (w ^. incNodeZoning) . snailAround $ zoneOfPoint pnZoneSize p ---walkableNodeNear' :: World -> Point2 -> Maybe Int ---{-# INLINE walkableNodeNear' #-} ---walkableNodeNear' w p = fmap fst . find (flip (isWalkable p) w . snd) $ nodesNear --- where --- nodesNear = zonesExtract (w ^. pnZoning) . snailAround $ zoneOfPoint pnZoneSize p - snailAround :: Int2 -> [Int2] snailAround x = (x +) <$> smallSnailInt2 @@ -110,64 +92,11 @@ smallSnailInt2 = [V2 x y | x <- [-2 .. 2], y <- [-2 .. 2]] makePathBetweenPs :: Point2 -> Point2 -> World -> Maybe [Point2] ---makePathBetweenPs a b w = mapMaybe (lab $ w ^. cWorld . pathGraph) <$> makePathBetween a b w -makePathBetweenPs a b w = mapMaybe (flip getNodePos w) <$> makePathBetween a b w - ---bfsNodePoints :: Int -> World -> [Point2] ---bfsNodePoints n w = mapMaybe (lab g) $ bfs n g --- where --- g = w ^. cWorld . pathGraph +makePathBetweenPs a b w = traverse (flip getNodePos w) =<< makePathBetween a b w +-- assumes that pathfinding is symmetric pointTowardsImpulse :: Point2 -> Point2 -> World -> Maybe Point2 -pointTowardsImpulse a b w = - -- (find (flip (isWalkable a) w) . reverse) - -- =<< (makePathBetweenPs a b w <&> (<> [b])) - (find (flip (isWalkable a) w) . reverse) - =<< makePathBetweenPs a b w -- <&> (<> [b])) - ------- continues a walk from a list of points, without repetitions ------- supposes that the list is non-empty ---randomGraphWalk :: RandomGen g => [Int] -> Gr a b -> State g [Int] ---randomGraphWalk (n:ns) g = do --- next' <- randomGraphStepRestricted n ns g --- case next' of --- Nothing -> return (n:ns) --- Just n' -> randomGraphWalk (n':n:ns) g ---randomGraphWalk _ _ = error "Trying to walk in an empty list" --- ---randomPointXStepsFrom :: Int -> Point2 -> World -> Point2 ---randomPointXStepsFrom i p w = --- let g = _pathGraph w --- ns = labNodes g --- mp = listToMaybe $ sortBy (compare `on` dist p . snd) $ filter (flip (isWalkable p) w . snd) ns --- in case mp of --- Nothing -> p --- Just (n,_) -> fromJust --- $ lab g (last $ take i $ randomGraphWalk [n] g Data.Function.& evalState $ _randGen w) --- ---randomPointsXStepsFrom :: Int -> Point2 -> World -> [Point2] ---randomPointsXStepsFrom i p w = --- let g = _pathGraph w --- ns = labNodes g --- mp = listToMaybe $ sortBy (compare `on` dist p . snd) $ filter (flip (isWalkable p) w . snd) ns --- in case mp of --- Nothing -> [p] --- Just (n,_) -> mapMaybe (lab g) (take i $ randomGraphWalk [n] g Data.Function.& evalState $ _randGen w) --- ---randomGraphStep :: RandomGen g => Int -> Gr a b -> State g (Maybe Int) ---randomGraphStep n g = --- do let ns = neighbors g n --- i <- state $ randomR (0,length ns - 1) --- case ns of [] -> return Nothing --- _ -> return $ Just $ ns !! i ---randomGraphStepRestricted :: RandomGen g => Int -> [Int] -> Gr a b -> State g (Maybe Int) ---randomGraphStepRestricted n notns g = do --- let ns = neighbors g n \\ notns --- i <- state $ randomR (0,length ns - 1) --- case ns of --- [] -> return Nothing --- _ -> return $ Just $ ns !! i --- +pointTowardsImpulse a b w = (find $ flip (isWalkable a) w) =<< makePathBetweenPs b a w pairsToIncGraph :: Set.Set (Point2, Point2) -> @@ -178,49 +107,19 @@ pairsToIncGraph :: pairsToIncGraph pairs = ( inodes , incgraph - , Set.toList pairs & each . each %~ (\i -> pstons ^?! ix i . _head) + , Set.toList pairs & each . each %~ (\i -> pToNode ^?! ix i) ) where - incgraph = V.generate (length im) (\i -> im ^?! ix i) - im = IM.fromListWith (<>) . fmap toedge $ Set.toList pairs + incgraph = V.generate (length im) (im IM.!) + im = IM.fromListWith (++) . fmap toedge $ Set.toList pairs toedge (x, y) = - ( pstons ^?! ix x . _head - , [(pstons ^?! ix y . _head, SimpleEdge (distance x y) mempty)] + ( pToNode ^?! ix x + , [(pToNode ^?! ix y, SimpleEdge (distance x y) mempty)] ) - pstons = IM.invertIntMap . IM.fromList $ zip [0 ..] ps + pToNode = IM.invertIntMapUnique . IM.fromDistinctAscList $ zip [0 ..] ps inodes = UV.generate (length ps) (ps !!) ps = Set.toList $ Set.map fst pairs <> Set.map snd pairs ---pairsToGraph :: --- Set.Set (Point2, Point2) -> --- (Map (V2 Point2) PathEdgeNodes, Gr Point2 PathEdge) ---pairsToGraph pairs = addEdges nodemap gr pairs --- where --- (nodemap, _, gr) = addNodes $ Set.toList $ Set.map fst pairs <> Set.map snd pairs - ---addNodes :: [Point2] -> (Map Point2 Int, Int, Gr Point2 PathEdge) ---addNodes = foldl' f (mempty, 0, Data.Graph.Inductive.empty) --- where --- f (nodemap, i, gr) p = case nodemap M.!? p of --- Just _ -> (nodemap, i, gr) --- Nothing -> (nodemap & at p ?~ i, i + 1, insNode (i, p) gr) - ---addEdges :: --- Map Point2 Int -> --- Gr Point2 PathEdge -> --- Set.Set (Point2, Point2) -> --- (Map (V2 Point2) PathEdgeNodes, Gr Point2 PathEdge) ---addEdges nodemap gr = foldl' f (mempty, gr) --- where --- f (edgemap, gr') (a, b) = --- ( M.insert (V2 a b) theedgedata edgemap --- , insEdge theedgetup gr' --- ) --- where --- theedgetup = (g a, g b, PathEdge a b (dist a b) mempty) --- theedgedata = PathEdgeNodes (g a) (g b) (PathEdge a b (dist a b) mempty) --- g a = nodemap M.! a - obstructPathsCrossing :: EdgeObstacle -> Point2 -> diff --git a/src/Dodge/Save.hs b/src/Dodge/Save.hs index f06ce421d..e90f9adcf 100644 --- a/src/Dodge/Save.hs +++ b/src/Dodge/Save.hs @@ -3,44 +3,42 @@ module Dodge.Save ( loadSaveSlot, doQuicksave, doQuickload, --- saveLevelStartSlot, + -- saveLevelStartSlot, writeSaveSlot, readSaveSlot, reloadLevelStart, ) where -import Dodge.Zoning.Pathing -import qualified Data.Vector.Unboxed as UV -import Control.Monad -import Data.Maybe -import Dodge.WorldLoad --import Dodge.Path.Translate --import Data.Graph.Inductive (labEdges, labNodes) --import Dodge.Zoning.Pathing -import Data.Foldable -import Dodge.Wall.Zone -import Dodge.Concurrent + import Control.Lens -import Dodge.Data.SaveSlot +import Control.Monad import Data.Aeson --import qualified Data.Aeson.Encode.Pretty as AEP import qualified Data.ByteString.Lazy as BS +import Data.Foldable +import Data.Maybe +import qualified Data.Vector.Unboxed as UV +import Dodge.Concurrent +import Dodge.Data.SaveSlot --import qualified Data.ByteString as BSS import Dodge.Data.Universe +import Dodge.Wall.Zone +import Dodge.WorldLoad +import Dodge.Zoning.Pathing --import qualified Data.Set as S import System.Directory ---import Data.Sequence ((|>)) +--import Data.Sequence ((|>)) writeSaveSlot :: SaveSlot -> Universe -> IO (Universe -> Maybe Universe) writeSaveSlot ss u = do putStrLn $ "Saving " ++ saveSlotPath ss createDirectoryIfMissing True "generated/saves" - BS.writeFile (saveSlotPath ss) $ - --AEP.encodePretty' - -- (AEP.Config (AEP.Spaces 2) compare AEP.Generic False) - encode - (u ^. uvWorld . cWorld) + BS.writeFile (saveSlotPath ss) $ encode (u ^. uvWorld . cWorld) + --AEP.encodePretty' (AEP.Config (AEP.Spaces 2) compare AEP.Generic False) return Just readSaveSlot :: SaveSlot -> IO (Universe -> Maybe Universe) @@ -49,23 +47,17 @@ readSaveSlot ss = do unless fExists $ error "Tried to read non-existant save file" mcw <- decodeFileStrict $ saveSlotPath ss flip (maybe (error "Tried to read incorrectly encoded save file")) mcw $ \cw -> do - let inodes = cw ^. incNode - return $ \uv -> Just - $ uv & uvWorld . cWorld .~ cw + let inodes = cw ^. incNode + return $ \uv -> + Just $ + uv & uvWorld . cWorld .~ cw & uvWorld %~ initWallZoning - & uvWorld . incNodeZoning - .~ UV.ifoldl' (\m i p -> zonePn (i,p) m) mempty inodes - & uvWorld . incEdgeZoning - .~ foldl' (flip (zoneIncPe inodes)) mempty - (cw ^. incEdges) --- & uvWorld . pnZoning .~ foldl' (flip zonePn) mempty --- (labNodes $ path uv) --- & uvWorld . peZoning .~ foldl' (flip zonePe) mempty --- (map fromEdgeTuple $ labEdges $ path uv) + & uvWorld . incNodeZoning + .~ UV.ifoldl' (\m i p -> zonePn (i, p) m) mempty inodes + & uvWorld . incEdgeZoning + .~ foldl' (flip (zoneIncPe inodes)) mempty (cw ^. incEdges) & uvScreenLayers .~ [] & postUniverseLoadSideEffect --- where --- path uv = uv ^. uvWorld . cWorld . pathGraph saveSlotPath :: SaveSlot -> String saveSlotPath (SaveSlotNum i) = "generated/saves/" ++ show i @@ -74,17 +66,18 @@ saveSlotPath (LevelStartSlot i) = "generated/saves/LevelStart" ++ show i saveWorldInSlot :: SaveSlot -> Universe -> Universe saveWorldInSlot slot u = u & addSideEffect (writeSaveSlot slot u) "SAVING" - + reloadLevelStart :: Universe -> Universe reloadLevelStart = loadSaveSlot (LevelStartSlot 0) loadSaveSlot :: SaveSlot -> Universe -> Universe -loadSaveSlot slot = blockingLoad ("DESERIALISING "++ show slot) $ readSaveSlot slot +loadSaveSlot slot = blockingLoad ("DESERIALISING " ++ show slot) $ readSaveSlot slot doQuicksave :: Universe -> Universe -doQuicksave u = u - & uvRAMSave ?~ _uvWorld u - & saveWorldInSlot QuicksaveSlot +doQuicksave u = + u + & uvRAMSave ?~ _uvWorld u + & saveWorldInSlot QuicksaveSlot doQuickload :: Universe -> Universe doQuickload u = fromMaybe (loadSaveSlot QuicksaveSlot u) $ do diff --git a/src/IntMapHelp.hs b/src/IntMapHelp.hs index 5f360a279..c8f797c0b 100644 --- a/src/IntMapHelp.hs +++ b/src/IntMapHelp.hs @@ -18,6 +18,7 @@ module IntMapHelp cycleGT, cycleLT, invertIntMap, + invertIntMapUnique, ) where import Control.Applicative @@ -97,7 +98,7 @@ cycleLT :: Int -> IntMap a -> Maybe (Int, a) cycleLT i m = lookupLT i m <|> lookupMax m invertIntMap :: Ord a => IntMap a -> M.Map a [Int] -invertIntMap = - foldrWithKey - (\k xs -> M.insertWith (++) xs [k]) - mempty +invertIntMap = foldrWithKey (\k x -> M.insertWith (++) x [k]) mempty + +invertIntMapUnique :: Ord a => IntMap a -> M.Map a Int +invertIntMapUnique = foldlWithKey' (\m k x -> M.insert x k m) mempty diff --git a/tags b/tags index f41b8d496..98724a79d 100644 --- a/tags +++ b/tags @@ -231,10 +231,10 @@ Color8 src/Color/Data.hs 32;" t ColorFaction src/Dodge/Data/Creature/State.hs 19;" C Comatose src/Dodge/Data/Creature/Perception.hs 51;" C CombAmount src/Dodge/Data/CombAmount.hs 10;" t -CombClust src/Dodge/Combine/Graph.hs 19;" t -CombEdge src/Dodge/Combine/Graph.hs 32;" t +CombClust src/Dodge/Combine/Graph.hs 17;" t +CombEdge src/Dodge/Combine/Graph.hs 30;" t CombItem src/Dodge/Data/Combine.hs 8;" t -CombNode src/Dodge/Combine/Graph.hs 25;" t +CombNode src/Dodge/Combine/Graph.hs 23;" t CombineInventory src/Dodge/Data/HUD.hs 22;" C CombineInventoryChange src/Dodge/Data/World.hs 31;" C ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -282,7 +282,7 @@ CrWeaponSound src/Dodge/Data/SoundOrigin.hs 18;" C CrWlID src/Dodge/Data/CrWlID.hs 10;" t Cr_awareness src/Dodge/Data/Config.hs 72;" C Cr_status src/Dodge/Data/Config.hs 71;" C -CraftClust src/Dodge/Combine/Graph.hs 20;" C +CraftClust src/Dodge/Combine/Graph.hs 18;" 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 @@ -607,7 +607,7 @@ ItCrWdItemHeldEffectNoHammer src/Dodge/Data/WorldEffect.hs 17;" C ItCrWdWd src/Dodge/Data/WorldEffect.hs 16;" t ItTargeting src/Dodge/Data/Item.hs 45;" C Item src/Dodge/Data/Item.hs 26;" t -ItemClust src/Dodge/Combine/Graph.hs 21;" C +ItemClust src/Dodge/Combine/Graph.hs 19;" C ItemDimension src/Dodge/Data/Item/Misc.hs 11;" t ItemLocation src/Dodge/Data/Item/Location.hs 28;" t ItemParamID src/Dodge/Data/Item/Params.hs 24;" C @@ -624,7 +624,7 @@ ItemUse src/Dodge/Data/Item/Use.hs 28;" t ItmInt src/Dodge/Data/Item/Location.hs 25;" t JOYSTICK src/Dodge/Data/Item/Combine.hs 94;" C JUMPLEGS src/Dodge/Data/Item/Combine.hs 130;" C -JoinClust src/Dodge/Combine/Graph.hs 22;" C +JoinClust src/Dodge/Combine/Graph.hs 20;" C JoystickSF src/Dodge/Data/ComposedItem.hs 26;" C Just' src/MaybeHelp.hs 11;" C JustStartedPlaying src/Sound/Data.hs 22;" C @@ -966,8 +966,6 @@ PUMP src/Dodge/Data/Item/Combine.hs 62;" C PaletteColor src/Color/Data.hs 11;" t PathBetweenDebugV2s src/Dodge/Data/Universe.hs 54;" C PathBetweenLeftRightClick src/Dodge/Data/Universe.hs 53;" C -PathEdge src/Dodge/Data/PathGraph.hs 34;" t -PathEdgeNodes src/Dodge/Data/PathGraph.hs 27;" t PathFromEdge src/Dodge/Data/Room.hs 77;" t PathShowType src/Dodge/Data/Universe.hs 52;" t PathTo src/Dodge/Data/ActionPlan.hs 70;" C @@ -1898,8 +1896,9 @@ _immediateUpdate src/Loop/Data.hs 12;" f _impulseUseTarget src/Dodge/Data/ActionPlan.hs 45;" f _impulsesListList src/Dodge/Data/ActionPlan.hs 72;" f _incEdgeZoning src/Dodge/Data/World.hs 53;" f -_incGraph src/Dodge/Data/CWorld.hs 29;" f -_incNode src/Dodge/Data/CWorld.hs 30;" f +_incEdges src/Dodge/Data/CWorld.hs 30;" f +_incGraph src/Dodge/Data/CWorld.hs 28;" f +_incNode src/Dodge/Data/CWorld.hs 29;" f _incNodeZoning src/Dodge/Data/World.hs 52;" f _input src/Dodge/Data/World.hs 41;" f _isWarming src/Dodge/Data/Item/Params.hs 21;" f @@ -2074,20 +2073,11 @@ _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 _pastWorlds src/Dodge/Data/World.hs 36;" f -_pathGraph src/Dodge/Data/CWorld.hs 28;" f _pathToPoint src/Dodge/Data/ActionPlan.hs 70;" f _pbID src/Dodge/Data/PulseLaser.hs 24;" f _pbPos src/Dodge/Data/PulseLaser.hs 22;" f _pbTimer src/Dodge/Data/PulseLaser.hs 23;" f _pbVel src/Dodge/Data/PulseLaser.hs 21;" f -_peDist src/Dodge/Data/PathGraph.hs 37;" f -_peEnd src/Dodge/Data/PathGraph.hs 36;" f -_peObstacles src/Dodge/Data/PathGraph.hs 38;" f -_peStart src/Dodge/Data/PathGraph.hs 35;" f -_peZoning src/Dodge/Data/World.hs 51;" f -_penEnd src/Dodge/Data/PathGraph.hs 29;" f -_penPathEdge src/Dodge/Data/PathGraph.hs 30;" f -_penStart src/Dodge/Data/PathGraph.hs 28;" f _phRemoteID src/Dodge/Data/Projectile.hs 41;" f _phTargetingID src/Dodge/Data/Projectile.hs 42;" f _pickUpLevel src/Dodge/Layout/Generate.hs 14;" f @@ -2112,7 +2102,6 @@ _plSpot src/Dodge/Data/GenWorld.hs 109;" f _plType src/Dodge/Data/GenWorld.hs 110;" f _playStatus src/Sound/Data.hs 15;" f _playingSounds src/Dodge/Data/World.hs 40;" f -_pnZoning src/Dodge/Data/World.hs 50;" f _posture src/Dodge/Data/Creature/Stance.hs 17;" f _prBounds src/Dodge/Tree/Shift.hs 29;" f _prColor src/Dodge/Data/Prop.hs 28;" f @@ -2406,8 +2395,8 @@ _uScope src/Dodge/Data/Item/Use.hs 34;" f _uValue src/Dodge/Data/Item/Use.hs 33;" f _uaParams src/Dodge/Data/Item/Use.hs 30;" f _ubMod src/Dodge/Data/Item/Use.hs 35;" f -_unCombEdge src/Dodge/Combine/Graph.hs 32;" f -_unCombNode src/Dodge/Combine/Graph.hs 25;" f +_unCombEdge src/Dodge/Combine/Graph.hs 30;" f +_unCombNode src/Dodge/Combine/Graph.hs 23;" f _unFBO src/Shader/Data.hs 57;" f _unNInt src/NewInt.hs 16;" f _unNIntMap src/NewInt.hs 22;" f @@ -2530,7 +2519,6 @@ addDepth src/Picture/Base.hs 133;" f addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 40;" f addDoorToggleTerminal src/Dodge/Room/Warning.hs 37;" f addDoorWall src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 49;" f -addEdges src/Dodge/Path.hs 207;" f addGib4 src/Dodge/Prop/Gib.hs 52;" f addGibAt src/Dodge/Prop/Gib.hs 63;" f addGibAtDir src/Dodge/Prop/Gib.hs 69;" f @@ -2545,7 +2533,6 @@ addGirderNS' src/Dodge/Room/Modify/Girder.hs 55;" f addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f addIndefiniteArticle src/StringHelp.hs 17;" f -addNodes src/Dodge/Path.hs 200;" f addPane src/Dodge/Placement/PlaceSpot.hs 183;" f addPlmnt src/Dodge/LevelGen/PlacementHelper.hs 87;" f addPointPolygon src/Geometry/Polygon.hs 134;" f @@ -2699,9 +2686,8 @@ basicMachineUpdate src/Dodge/Machine.hs 14;" f basicMuzFlare src/Dodge/HeldUse.hs 710;" f battery src/Dodge/Item/Ammo.hs 63;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f -belowNumX src/Dodge/Combine/Graph.hs 86;" f +belowNumX src/Dodge/Combine/Graph.hs 84;" f beltMag src/Dodge/Item/Ammo.hs 39;" f -bfsNodePoints src/Dodge/Path.hs 115;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 225;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 118;" f bgunSound src/Dodge/HeldUse.hs 514;" f @@ -2830,8 +2816,8 @@ chooseCursorBorders src/Dodge/Render/List.hs 156;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 35;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f -chooseMovementLtAuto src/Dodge/CreatureEffect.hs 76;" f -chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 59;" f +chooseMovementLtAuto src/Dodge/CreatureEffect.hs 77;" f +chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 60;" f circHitWall src/Dodge/Base/Collide.hs 242;" f circInPolygon src/Geometry/Polygon.hs 102;" f circOnAnyCr src/Dodge/Base/Collide.hs 293;" f @@ -2876,8 +2862,8 @@ clsNearCirc src/Dodge/Zoning/Cloud.hs 18;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f clsNearRect src/Dodge/Zoning/Cloud.hs 15;" f clsNearSeg src/Dodge/Zoning/Cloud.hs 12;" f -clusterFormatting src/Dodge/Combine/Graph.hs 125;" f -clusterFunc src/Dodge/Combine/Graph.hs 119;" f +clusterFormatting src/Dodge/Combine/Graph.hs 123;" f +clusterFunc src/Dodge/Combine/Graph.hs 117;" f cogRaised src/Dodge/Creature/Perception.hs 101;" f colCrWall src/Dodge/WallCreatureCollisions.hs 29;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f @@ -2898,8 +2884,8 @@ collidePointWallsFilter src/Dodge/Base/Collide.hs 204;" f color src/Picture/Base.hs 108;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 237;" f -combinationsDotGraph src/Dodge/Combine/Graph.hs 95;" f -combinationsGraph src/Dodge/Combine/Graph.hs 74;" f +combinationsDotGraph src/Dodge/Combine/Graph.hs 93;" f +combinationsGraph src/Dodge/Combine/Graph.hs 72;" f combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 43;" f combineAwareness src/Dodge/Creature/Perception.hs 109;" f @@ -3131,13 +3117,13 @@ defaultDrawButton src/Dodge/Button/Draw.hs 29;" f defaultEquipment src/Dodge/Default.hs 24;" f defaultFlIt src/Dodge/Default.hs 27;" f defaultForeground src/Dodge/Default/ForegroundShape.hs 5;" f -defaultHUD src/Dodge/Default/World.hs 162;" f +defaultHUD src/Dodge/Default/World.hs 163;" f defaultHeldItem src/Dodge/Default/Item.hs 9;" f defaultInanimate src/Dodge/Default/Creature.hs 62;" f defaultInput src/Dodge/Default/World.hs 11;" f defaultIntention src/Dodge/Default/Creature.hs 98;" f defaultInvSize src/Dodge/Default/Creature.hs 72;" f -defaultLWorld src/Dodge/Default/World.hs 99;" f +defaultLWorld src/Dodge/Default/World.hs 100;" f defaultListDisplayParams src/Dodge/ListDisplayParams.hs 18;" f defaultMachine src/Dodge/Default.hs 30;" f defaultMachineWall src/Dodge/Default/Wall.hs 55;" f @@ -3237,8 +3223,8 @@ doFloatFloat src/Dodge/FloatFunction.hs 5;" f doGenFloat src/Dodge/HeldUse.hs 1158;" f doGravityPU src/Dodge/Projectile/Update.hs 34;" f doHeldUseEffect src/Dodge/HeldUse.hs 351;" f -doInPlacements src/Dodge/Layout.hs 90;" f -doIndividualPlacements src/Dodge/Layout.hs 104;" f +doInPlacements src/Dodge/Layout.hs 87;" f +doIndividualPlacements src/Dodge/Layout.hs 101;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f doItemTimeScroll src/Dodge/Update.hs 193;" f doLoop src/Loop.hs 60;" f @@ -3248,10 +3234,10 @@ doPrWdLsLs src/Dodge/PrWdLsLs.hs 8;" f doPreload appDodge/Main.hs 139;" f doPropUpdates src/Dodge/Prop/Update.hs 34;" f doQuickload src/Dodge/Save.hs 82;" f -doQuicksave src/Dodge/Save.hs 77;" f +doQuicksave src/Dodge/Save.hs 76;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f doRegexInput src/Dodge/Update/Input/InGame.hs 447;" f -doRoomPlacements src/Dodge/Layout.hs 107;" f +doRoomPlacements src/Dodge/Layout.hs 104;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 91;" f doSectionSize src/Dodge/DisplayInventory.hs 211;" f @@ -3295,7 +3281,7 @@ drawBaseMachine src/Dodge/Machine/Draw.hs 68;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 16;" f drawBlock src/Dodge/Block/Draw.hs 7;" f -drawBoundingBox src/Dodge/Debug/Picture.hs 357;" f +drawBoundingBox src/Dodge/Debug/Picture.hs 355;" f drawBullet src/Dodge/Render/ShapePicture.hs 133;" f drawButton src/Dodge/Button/Draw.hs 10;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f @@ -3306,7 +3292,7 @@ drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f drawCombFilter src/Dodge/Render/Picture.hs 269;" f drawCombineInventory src/Dodge/Render/HUD.hs 182;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 74;" f -drawCoord src/Dodge/Debug/Picture.hs 385;" f +drawCoord src/Dodge/Debug/Picture.hs 383;" f drawCrInfo src/Dodge/Debug.hs 135;" f drawCrInfo' src/Dodge/Debug.hs 130;" f drawCreature src/Dodge/Render/ShapePicture.hs 69;" f @@ -3315,7 +3301,7 @@ drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 72;" f drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 139;" f -drawDDATest src/Dodge/Debug/Picture.hs 312;" f +drawDDATest src/Dodge/Debug/Picture.hs 310;" f drawDamSensor src/Dodge/Machine/Draw.hs 27;" f drawDebug src/Dodge/Debug.hs 173;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 95;" f @@ -3330,7 +3316,7 @@ drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f drawEquipment src/Dodge/Creature/Picture.hs 127;" f drawExamineInventory src/Dodge/Render/HUD.hs 198;" f drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f -drawFarWallDetect src/Dodge/Debug/Picture.hs 279;" f +drawFarWallDetect src/Dodge/Debug/Picture.hs 277;" f drawFlame src/Dodge/Flame/Draw.hs 8;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 37;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f @@ -3363,14 +3349,13 @@ drawMenuOrHUD src/Dodge/Render/Picture.hs 69;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 14;" f drawMouseCursor src/Dodge/Render/Picture.hs 85;" f drawMouseOver src/Dodge/Render/HUD.hs 109;" f -drawMousePosition src/Dodge/Debug/Picture.hs 375;" f +drawMousePosition src/Dodge/Debug/Picture.hs 373;" f drawMovingShape src/Dodge/Prop/Draw.hs 81;" f drawMovingShapeCol src/Dodge/Prop/Draw.hs 87;" f drawOptions src/Dodge/Render/MenuScreen.hs 22;" f drawPathBetween src/Dodge/Debug/Picture.hs 201;" f drawPathEdge src/Dodge/Debug/Picture.hs 266;" f -drawPathing src/Dodge/Debug/Picture.hs 416;" f -drawPathing' src/Dodge/Debug/Picture.hs 407;" f +drawPathing src/Dodge/Debug/Picture.hs 404;" f drawPlus src/Dodge/Render/Picture.hs 165;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f @@ -3411,15 +3396,15 @@ drawVerticalDoubleArrow src/Dodge/Render/Picture.hs 212;" f drawVerticalLampCover src/Dodge/Prop/Draw.hs 71;" f drawWall src/Dodge/Wall/Draw.hs 7;" f drawWallFace src/Dodge/Debug/Picture.hs 73;" f -drawWallSearchRays src/Dodge/Debug/Picture.hs 321;" f +drawWallSearchRays src/Dodge/Debug/Picture.hs 319;" f drawWallsNearCursor src/Dodge/Debug/Picture.hs 230;" f drawWallsNearSegment src/Dodge/Debug/Picture.hs 130;" f drawWallsNearYou src/Dodge/Debug/Picture.hs 221;" f drawWeapon src/Dodge/Creature/Volition.hs 15;" f -drawWlIDs src/Dodge/Debug/Picture.hs 393;" f -drawZoneCirc src/Dodge/Debug/Picture.hs 301;" f +drawWlIDs src/Dodge/Debug/Picture.hs 391;" f +drawZoneCirc src/Dodge/Debug/Picture.hs 299;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f -drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 294;" f +drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 292;" f dropAll src/Dodge/Creature/Update.hs 129;" f dropInventoryPath src/Dodge/HeldUse.hs 1351;" f dropItem src/Dodge/Creature/Action.hs 154;" f @@ -3449,8 +3434,8 @@ ebDamage src/Dodge/EnergyBall.hs 85;" f ebEffect src/Dodge/EnergyBall.hs 45;" f ebFlicker src/Dodge/EnergyBall.hs 70;" f ebtToDamage src/Dodge/EnergyBall.hs 93;" f -edgeFormatting src/Dodge/Combine/Graph.hs 131;" f -edgeToPic src/Dodge/Debug/Picture.hs 425;" f +edgeFormatting src/Dodge/Combine/Graph.hs 129;" f +edgeToPic src/Dodge/Debug/Picture.hs 413;" f effectOnEquip src/Dodge/Equipment.hs 32;" f effectOnRemove src/Dodge/Equipment.hs 19;" f eitType src/Dodge/Data/EquipType.hs 15;" f @@ -3547,7 +3532,7 @@ flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 38;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 440;" f -fleeFrom src/Dodge/CreatureEffect.hs 91;" f +fleeFrom src/Dodge/CreatureEffect.hs 92;" 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 @@ -3578,7 +3563,6 @@ fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 145;" f frag src/Shader/Data.hs 102;" f freeShaderPointers' src/Shader.hs 37;" f fridgeHumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 500;" f -fromEdgeTuple src/Dodge/Path/Translate.hs 5;" f fromJust' src/MaybeHelp.hs 22;" f fromListL src/DoubleStack.hs 7;" f fromTopLeft src/Dodge/ScreenPos.hs 9;" f @@ -3595,9 +3579,9 @@ gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f gadgetEffect src/Dodge/HeldUse.hs 47;" f gameOverMenu src/Dodge/Menu.hs 207;" f -gameRoomFromRoom src/Dodge/Layout.hs 155;" f +gameRoomFromRoom src/Dodge/Layout.hs 152;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f -gameRoomsFromRooms src/Dodge/Layout.hs 152;" f +gameRoomsFromRooms src/Dodge/Layout.hs 149;" f gameplayMenu src/Dodge/Menu.hs 154;" f gameplayMenuOptions src/Dodge/Menu.hs 157;" f gasType src/Dodge/HeldUse.hs 1115;" f @@ -3646,7 +3630,7 @@ getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 129;" f -getTiles src/Dodge/Layout.hs 202;" f +getTiles src/Dodge/Layout.hs 199;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f getVolleyBurst src/Dodge/HeldUse.hs 126;" f getWallSPic src/Dodge/Render/Walls.hs 51;" f @@ -3894,7 +3878,7 @@ itemBelowAttachables src/Dodge/Item/Grammar.hs 50;" f itemBlips src/Dodge/RadarSweep.hs 94;" f itemBulkiness src/Dodge/Creature/YourControl.hs 188;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f -itemCombinationsEdges src/Dodge/Combine/Graph.hs 61;" f +itemCombinationsEdges src/Dodge/Combine/Graph.hs 59;" f itemDetectorEffect src/Dodge/HeldUse.hs 794;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 50;" f itemEquipPict src/Dodge/Item/Draw.hs 18;" f @@ -4026,7 +4010,7 @@ lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 387;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 630;" f -loadSaveSlot src/Dodge/Save.hs 74;" f +loadSaveSlot src/Dodge/Save.hs 73;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f @@ -4116,8 +4100,8 @@ makeIntInterval src/Dodge/Zoning/Base.hs 35;" f makeMovingEB src/Dodge/EnergyBall.hs 60;" f makeMuzzleFlare src/Dodge/HeldUse.hs 656;" f makeParagraph src/Justify.hs 6;" f -makePathBetween src/Dodge/Path.hs 76;" f -makePathBetweenPs src/Dodge/Path.hs 112;" f +makePathBetween src/Dodge/Path.hs 73;" f +makePathBetweenPs src/Dodge/Path.hs 94;" f makePathUsing src/Dodge/Path.hs 60;" f makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 25;" f makeRect src/Grid.hs 82;" f @@ -4145,7 +4129,7 @@ materialColor src/Dodge/Material/Color.hs 8;" f maxAmmo src/Dodge/Item/MaxAmmo.hs 6;" f maxDamageType src/Dodge/Damage.hs 58;" f maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" f -maxShowX src/Dodge/Combine/Graph.hs 50;" f +maxShowX src/Dodge/Combine/Graph.hs 48;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearPath src/Dodge/Block.hs 72;" f @@ -4279,7 +4263,7 @@ mvProp src/Dodge/Placement/PlaceSpot.hs 188;" f mvPs src/Dodge/Wall/Move.hs 58;" f myIntersectLineLine src/Geometry/Intersect.hs 198;" f myIntersectSegSeg src/Geometry/Intersect.hs 176;" f -myParams src/Dodge/Combine/Graph.hs 103;" f +myParams src/Dodge/Combine/Graph.hs 101;" f nRays src/Geometry.hs 182;" f nRaysRad src/Geometry.hs 186;" f nearCollinear src/Dodge/LevelGen/StaticWalls/Deprecated.hs 19;" f @@ -4299,7 +4283,7 @@ nextLayoutInt src/Dodge/Data/MetaTree.hs 43;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 23;" f -nodeFormatting src/Dodge/Combine/Graph.hs 147;" f +nodeFormatting src/Dodge/Combine/Graph.hs 145;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f normalizeAngle src/Geometry/Vector.hs 128;" f normalizeAnglePi src/Dodge/Base.hs 154;" f @@ -4319,8 +4303,8 @@ numSelfTree' src/Dodge/Tree/Compose.hs 110;" f numShads src/Picture/Data.hs 40;" f numSubElements src/Shader/Parameters.hs 39;" f numTraversable src/TreeHelp.hs 184;" f -obstacleColor src/Dodge/Debug/Picture.hs 271;" f -obstructPathsCrossing src/Dodge/Path.hs 223;" f +obstacleColor src/Dodge/Debug/Picture.hs 269;" f +obstructPathsCrossing src/Dodge/Path.hs 200;" f oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 698;" f onEquipWristShield src/Dodge/Equipment.hs 37;" f onRemoveWristShield src/Dodge/Equipment.hs 24;" f @@ -4368,8 +4352,7 @@ p src/ShortShow.hs 48;" f pContID src/Dodge/LevelGen/PlacementHelper.hs 15;" f pairInPolys src/Dodge/Room/Path.hs 45;" f pairPolyPointsIntersect src/Geometry/ConvexPoly.hs 68;" f -pairsToGraph src/Dodge/Path.hs 193;" f -pairsToIncGraph src/Dodge/Path.hs 171;" f +pairsToIncGraph src/Dodge/Path.hs 148;" f pairsToIncidence src/Dodge/Graph.hs 20;" f pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 58;" f @@ -4377,7 +4360,7 @@ parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f passthroughLockKeyLists src/Dodge/Floor.hs 120;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f -pathEdgeObstructed src/Dodge/Path.hs 85;" f +pathEdgeObstructed src/Dodge/Path.hs 76;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseGame src/Dodge/Update/Input/InGame.hs 525;" f pauseMenu src/Dodge/Menu.hs 59;" f @@ -4397,10 +4380,6 @@ performAimAt src/Dodge/Creature/Action.hs 102;" f performPathTo src/Dodge/Creature/Action.hs 115;" f performTurnToA src/Dodge/Creature/Action.hs 127;" f perspectiveMatrixb src/MatrixHelper.hs 11;" f -pesNearCirc src/Dodge/Zoning/Pathing.hs 46;" f -pesNearPoint src/Dodge/Zoning/Pathing.hs 35;" f -pesNearRect src/Dodge/Zoning/Pathing.hs 43;" f -pesNearSeg src/Dodge/Zoning/Pathing.hs 40;" f picFormat src/Polyhedra.hs 23;" f picMap src/Picture/Base.hs 67;" f pickUpItem src/Dodge/Inventory/Add.hs 69;" f @@ -4453,17 +4432,13 @@ pmTriangleFan src/Shader/Data.hs 107;" f pmTriangleStrip src/Shader/Data.hs 107;" f pmTriangles src/Shader/Data.hs 107;" f pnZoneSize src/Dodge/Zoning/Pathing.hs 26;" f -pnsNearCirc src/Dodge/Zoning/Pathing.hs 23;" f -pnsNearPoint src/Dodge/Zoning/Pathing.hs 14;" f -pnsNearRect src/Dodge/Zoning/Pathing.hs 20;" f -pnsNearSeg src/Dodge/Zoning/Pathing.hs 17;" f pointIfNotClose src/Dodge/LevelGen/StaticWalls/Deprecated.hs 68;" f pointInCircle src/Geometry.hs 209;" f pointInOrOnPolygon src/Geometry/Polygon.hs 78;" f pointInPoly src/Geometry/Polygon.hs 86;" f pointIsInCone src/Geometry.hs 375;" f pointIsOnScreen src/Dodge/Base/Window.hs 59;" f -pointTowardsImpulse src/Dodge/Path.hs 120;" f +pointTowardsImpulse src/Dodge/Path.hs 97;" 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 @@ -4649,7 +4624,7 @@ randSpark src/Dodge/Spark.hs 69;" f randSparkExtraVel src/Dodge/Spark.hs 92;" f randWallReflect src/Dodge/Update.hs 643;" f randomChallenges src/Dodge/Room/Start.hs 63;" f -randomCompass src/Dodge/Layout.hs 63;" f +randomCompass src/Dodge/Layout.hs 60;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 268;" f randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 280;" f randomLightPositions src/Dodge/Room/Modify/Girder.hs 152;" f @@ -4663,7 +4638,7 @@ randomTreeStructure src/Dodge/Layout/Generate.hs 18;" f randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 216;" f -readSaveSlot src/Dodge/Save.hs 45;" f +readSaveSlot src/Dodge/Save.hs 44;" f recoilAmount src/Dodge/HeldUse.hs 467;" f rectNSWE src/Geometry/Polygon.hs 15;" f rectVV src/Geometry/Polygon.hs 40;" f @@ -4688,7 +4663,7 @@ refreshOptionsSelectionList src/Dodge/Menu/Option.hs 35;" f regexCombs src/Dodge/DisplayInventory.hs 71;" f regexList src/Dodge/DisplayInventory.hs 308;" f reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 602;" f -reloadLevelStart src/Dodge/Save.hs 71;" f +reloadLevelStart src/Dodge/Save.hs 70;" f reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 600;" f rememberSounds src/Dodge/Creature/Perception.hs 176;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f @@ -4821,8 +4796,8 @@ safeUpdateSingleNode src/TreeHelp.hs 116;" f saveConfig src/Dodge/Config.hs 23;" f saveQuit src/Dodge/Menu.hs 79;" f saveQuitConc src/Dodge/Menu.hs 82;" f -saveSlotPath src/Dodge/Save.hs 63;" f -saveWorldInSlot src/Dodge/Save.hs 68;" f +saveSlotPath src/Dodge/Save.hs 62;" f +saveWorldInSlot src/Dodge/Save.hs 67;" f sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 714;" f scToTS src/Dodge/Event/Input.hs 34;" f scale src/Picture/Base.hs 149;" f @@ -4885,7 +4860,7 @@ setAimPosture src/Dodge/Creature/YourControl.hs 145;" f setChannelPos src/Sound.hs 150;" f setClickWorldPos src/Dodge/Update.hs 101;" f setClip src/Dodge/Debug.hs 159;" f -setClusterID src/Dodge/Combine/Graph.hs 116;" f +setClusterID src/Dodge/Combine/Graph.hs 114;" f setDepth src/Picture/Base.hs 128;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f setFallback src/Dodge/PlacementSpot.hs 125;" f @@ -4910,8 +4885,8 @@ setShaderSource src/Shader/Compile.hs 290;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 157;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 82;" f -setTile src/Dodge/Layout.hs 73;" f -setTiles src/Dodge/Layout.hs 70;" f +setTile src/Dodge/Layout.hs 70;" f +setTiles src/Dodge/Layout.hs 67;" f setToggle src/Dodge/Prop/Update.hs 44;" f setTreeInts src/Dodge/Room/Tutorial.hs 72;" f setViewDistance src/Dodge/Update/Camera.hs 236;" f @@ -4935,7 +4910,7 @@ setupVBOStatic src/Shader/Compile.hs 116;" f setupVBOVAO src/Shader/Compile.hs 200;" f setupVertexAttribPointer src/Shader/Compile.hs 224;" f setupVertexAttribs src/Shader/Compile.hs 218;" f -setupWorldBounds src/Dodge/Layout.hs 119;" f +setupWorldBounds src/Dodge/Layout.hs 116;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f shadVBOptr src/Shader.hs 40;" f shaderTypeExt src/Shader/Compile.hs 172;" f @@ -5006,7 +4981,7 @@ shrinkPolyOnEdges src/Geometry/Polygon.hs 174;" f shrinkVert src/Geometry/Polygon.hs 178;" f shuffle src/RandomHelp.hs 49;" f shuffleLinks src/Dodge/Room/Link.hs 30;" f -shuffleRoomPos src/Dodge/Layout.hs 85;" f +shuffleRoomPos src/Dodge/Layout.hs 82;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 861;" f @@ -5038,11 +5013,11 @@ smallGlass3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 518;" f smallGlass4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 466;" f smallPillar src/Dodge/Room/Pillar.hs 37;" f smallRoom src/Dodge/Room/RunPast.hs 31;" f -smallSnailInt2 src/Dodge/Path.hs 106;" f +smallSnailInt2 src/Dodge/Path.hs 88;" f smg src/Dodge/Item/Held/Stick.hs 58;" f smokeReducer src/Dodge/Item/Scope.hs 162;" f -snailAround src/Dodge/Path.hs 103;" f -snapToGrid src/Dodge/Path.hs 246;" f +snailAround src/Dodge/Path.hs 85;" f +snapToGrid src/Dodge/Path.hs 223;" f sndV2 src/Geometry/Data.hs 73;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f someCrits src/Dodge/LockAndKey.hs 120;" f @@ -5056,7 +5031,7 @@ soundMultiFrom src/Dodge/SoundLogic.hs 187;" f soundOriginIDsAt src/Dodge/WorldEvent/Sound.hs 18;" f soundOriginsIDsAt src/Dodge/WorldEvent/Sound.hs 13;" f soundPathList src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 296;" f -soundPic src/Dodge/Debug/Picture.hs 362;" f +soundPic src/Dodge/Debug/Picture.hs 360;" f soundStart src/Dodge/SoundLogic.hs 118;" f soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 150;" f soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f @@ -5234,7 +5209,7 @@ thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 44;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f throwItem src/Dodge/Creature/Action.hs 190;" f tileTexCoords src/Tile.hs 11;" f -tilesFromRooms src/Dodge/Layout.hs 199;" f +tilesFromRooms src/Dodge/Layout.hs 196;" f tilesToLine src/Shader/AuxAddition.hs 66;" f timeFlowUpdate src/Dodge/Update.hs 169;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f @@ -5564,8 +5539,8 @@ verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 24;" f vgunMuzzles src/Dodge/HeldUse.hs 341;" f -viewBoundaries src/Dodge/Debug/Picture.hs 330;" f -viewClipBounds src/Dodge/Debug/Picture.hs 339;" f +viewBoundaries src/Dodge/Debug/Picture.hs 328;" f +viewClipBounds src/Dodge/Debug/Picture.hs 337;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 194;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 154;" f violet src/Color.hs 21;" f @@ -5575,13 +5550,13 @@ vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 357;" f walkNozzle src/Dodge/HeldUse.hs 809;" f -walkableNodeNear src/Dodge/Path.hs 91;" f +walkableNodeNear src/Dodge/Path.hs 79;" f wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 53;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f wallToSurface src/Dodge/Base/Collide.hs 182;" f -wallsFromRooms src/Dodge/Layout.hs 140;" f +wallsFromRooms src/Dodge/Layout.hs 137;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f warmupSound src/Dodge/HeldUse.hs 1376;" f warningRooms src/Dodge/Room/Warning.hs 30;" f @@ -5650,7 +5625,7 @@ wrench1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 546;" f wristArmour src/Dodge/Item/Equipment.hs 43;" f wristInvisibility src/Dodge/Item/Equipment.hs 96;" f writeConfig src/Dodge/Menu.hs 182;" f -writeSaveSlot src/Dodge/Save.hs 34;" f +writeSaveSlot src/Dodge/Save.hs 36;" f xCylinder src/Shape.hs 137;" f xCylinderST src/Shape.hs 134;" f xIntercepts src/Dodge/Zoning/Base.hs 60;" f @@ -5692,14 +5667,12 @@ zoneOfCl src/Dodge/Zoning/Cloud.hs 24;" f zoneOfCr src/Dodge/Zoning/Creature.hs 45;" f zoneOfDs src/Dodge/Zoning/Cloud.hs 45;" f zoneOfIncPe src/Dodge/Zoning/Pathing.hs 52;" f -zoneOfPe src/Dodge/Zoning/Pathing.hs 55;" f zoneOfPn src/Dodge/Zoning/Pathing.hs 29;" f zoneOfPoint src/Dodge/Zoning/Base.hs 44;" f zoneOfRect src/Dodge/Zoning/Base.hs 28;" f zoneOfSeg src/Dodge/Zoning/Base.hs 47;" f zoneOfSight src/Dodge/Zoning/World.hs 9;" f zoneOfWl src/Dodge/Zoning/Wall.hs 55;" f -zonePe src/Dodge/Zoning/Pathing.hs 58;" f zonePn src/Dodge/Zoning/Pathing.hs 32;" f zoneWall src/Dodge/Zoning/Wall.hs 65;" f zonesAroundPoint src/Dodge/Zoning/Base.hs 96;" f