diff --git a/src/Dodge/CreatureEffect.hs b/src/Dodge/CreatureEffect.hs index 6828795ec..be2ce93f4 100644 --- a/src/Dodge/CreatureEffect.hs +++ b/src/Dodge/CreatureEffect.hs @@ -81,7 +81,8 @@ doCrWdAc cw = case cw of CrWdBFSThenReturn t -> \cr w -> fromMaybe NoAction $ do n <- walkableNodeNear w (cr ^. crPos . _xy) let as = take 20 $ map PathTo $ bfsNodePoints n w - return $ + return $ DoActionThen (DoImpulses [ChangeStrategy Search]) + $ DoReplicate t $ foldr DoActionThen NoAction as ChooseMovementSpreadGun -> chooseMovementSpreadGun diff --git a/src/Dodge/Data/ActionPlan.hs b/src/Dodge/Data/ActionPlan.hs index 5f06b87ec..d3a0ff532 100644 --- a/src/Dodge/Data/ActionPlan.hs +++ b/src/Dodge/Data/ActionPlan.hs @@ -190,6 +190,7 @@ data Strategy | Reload | Flee | MeleeStrike + | Search deriving (Eq, Ord, Show) --Generic, Flat) --deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Debug.hs b/src/Dodge/Debug.hs index 29c8227b3..5d578c13b 100644 --- a/src/Dodge/Debug.hs +++ b/src/Dodge/Debug.hs @@ -1,6 +1,14 @@ {-# LANGUAGE LambdaCase #-} module Dodge.Debug (debugEvents) where +import Padding +import Dodge.Base.Window +import ShortShow +import Linear +import Dodge.Render.InfoBox +import Picture.Base +import Geometry.Data +import qualified Data.IntMap.Strict as IM import Data.Aeson.Types import AesonHelp import Control.Lens @@ -15,7 +23,7 @@ import Dodge.WorldEvent.ThingsHit import Geometry.Vector import qualified SDL import Data.Ord -import Data.Foldable (fold) +--import Data.Foldable (fold) debugEvents :: Universe -> Universe debugEvents u = case dbools ^. at Enable_debug of @@ -62,6 +70,75 @@ debugItem = \case constDPic :: (Universe -> Picture) -> Universe -> Maybe DebugItem constDPic p u = Just $ DebugItem (p u) mempty NoDebugInfo +drawCrInfo' :: Universe -> Maybe DebugItem +drawCrInfo' u = do + undefined +-- +-- setLayer FixedCoordLayer $ +-- renderInfoListsAt (2 * hw - 400) 0 cfig cam $ +-- mapMaybe crDisplayInfo $ IM.elems $ w ^. cWorld . lWorld . creatures +-- where +-- w = u ^. uvWorld +-- cfig = u ^. uvConfig +-- cam = w ^. wCam +-- crDisplayInfo :: Creature -> Maybe (Point2, [String]) +-- crDisplayInfo cr +-- | _crID cr == 0 = Nothing +-- | crOnScreen = +-- Just +-- ( cr ^. crPos . _xy +-- , catMaybes +-- -- [fmap show $ ap ^? crGoal +-- [ fpreShow "crHP" $ cr ^? crHP . _HP +-- , fpreShow "crStrategy" $ ap ^? apStrategy +-- , fmap (("crPos....." ++) . shortShow) $ cr ^? crPos . _xy +-- , fpreShow "cpVigilance" $ cr ^? crPerception . cpVigilance +-- , fpreShow "crAction" $ ap ^? apAction +-- , fpreShow "crImpulse" $ ap ^? apImpulse +-- ] +-- ) +-- | otherwise = Nothing +-- where +-- ap = _crActionPlan cr +-- crOnScreen = pointIsOnScreen cfig cam $ cr ^. crPos . _xy +-- +-- fpreShow :: (Show a, Functor f) => String -> f a -> f String +-- fpreShow str = fmap (((rightPad 7 '.' str ++ "...") ++) . show) +-- hw = halfWidth cfig + +drawCrInfo :: Config -> World -> Picture +drawCrInfo cfig w = + setLayer FixedCoordLayer $ + renderInfoListsAt (2 * hw - 400) 0 cfig cam $ + mapMaybe crDisplayInfo $ IM.elems $ w ^. cWorld . lWorld . creatures + where + cam = w ^. wCam + crDisplayInfo :: Creature -> Maybe (Point2, [String]) + crDisplayInfo cr + | _crID cr == 0 = Nothing + | crOnScreen = + Just + ( cr ^. crPos . _xy + , catMaybes + -- [fmap show $ ap ^? crGoal + [ fpreShow "crHP" $ cr ^? crHP . _HP + , fpreShow "crStrategy" $ ap ^? apStrategy + , fmap (("crPos....." ++) . shortShow) $ cr ^? crPos . _xy + , fpreShow "cpVigilance" $ cr ^? crPerception . cpVigilance + , fpreShow "crAction" $ ap ^? apAction + , fpreShow "crImpulse" $ ap ^? apImpulse + ] + ) + | otherwise = Nothing + where + ap = _crActionPlan cr + crOnScreen = pointIsOnScreen cfig cam $ cr ^. crPos . _xy + + fpreShow :: (Show a, Functor f) => String -> f a -> f String + fpreShow str = fmap (((rightPad 7 '.' str ++ "...") ++) . show) + hw = halfWidth cfig + + selectCreatureDebugItem :: Universe -> DebugItem selectCreatureDebugItem u = DebugItem diff --git a/src/Dodge/Debug/Picture.hs b/src/Dodge/Debug/Picture.hs index b938a8389..3f6a4397d 100644 --- a/src/Dodge/Debug/Picture.hs +++ b/src/Dodge/Debug/Picture.hs @@ -14,7 +14,7 @@ import Dodge.GameRoom import Dodge.Graph import Dodge.Path import Dodge.Picture.SizeInvariant -import Dodge.Render.InfoBox +--import Dodge.Render.InfoBox import Dodge.Render.Label import Dodge.Render.List import Dodge.ShortShow @@ -26,10 +26,10 @@ import Dodge.Zoning.Base import Geometry import Geometry.ConvexPoly import qualified IntMapHelp as IM -import Padding +--import Padding import Picture import SDL (MouseButton (..)) -import ShortShow +--import ShortShow import Sound.Data printPoint :: Point2 -> Picture @@ -394,47 +394,6 @@ drawWlIDs w = setLayer FixedCoordLayer $ foldMap f (w ^. cWorld . lWorld . walls where p = worldPosToScreen (w ^. wCam) $ 0.5 *.* uncurry (+.+) (_wlLine wl) -drawCrInfo :: Config -> World -> Picture -drawCrInfo cfig w = - setLayer FixedCoordLayer $ - renderInfoListsAt (2 * hw - 400) 0 cfig cam $ - mapMaybe crDisplayInfo $ IM.elems $ w ^. cWorld . lWorld . creatures - where - cam = w ^. wCam - -- drawPathing :: Config -> World -> Picture - -- drawPathing cfig w = - -- setLayer DebugLayer $ - -- foldMap (edgeToPic (screenPolygon cfig (w ^. wCam)) . (^?! _3)) (FGL.labEdges gr) - -- <> foldMap dispInc (graphToIncidence gr) - -- where - -- dispInc (p, n) = setDepth 2 . uncurryV translate p . scale 0.1 0.1 $ text $ show n - -- gr = w ^. cWorld . pathGraph - - crDisplayInfo :: Creature -> Maybe (Point2, [String]) - crDisplayInfo cr - | _crID cr == 0 = Nothing - | crOnScreen = - Just - ( cr ^. crPos . _xy - , catMaybes - -- [fmap show $ ap ^? crGoal - [ fpreShow "crHP" $ cr ^? crHP . _HP - , fpreShow "crStrategy" $ ap ^? apStrategy - , fmap (("crPos....." ++) . shortShow) $ cr ^? crPos . _xy - , fpreShow "cpVigilance" $ cr ^? crPerception . cpVigilance - , -- , fmap show $ cr ^? crOldPos - fpreShow "crAction" $ ap ^? apAction - , fpreShow "crImpulse" $ ap ^? apImpulse - ] - ) - | otherwise = Nothing - where - ap = _crActionPlan cr - crOnScreen = pointIsOnScreen cfig cam $ cr ^. crPos . _xy - - fpreShow :: (Show a, Functor f) => String -> f a -> f String - fpreShow str = fmap (((rightPad 7 '.' str ++ "...") ++) . show) - hw = halfWidth cfig drawPathing :: Config -> World -> Picture drawPathing cfig w = diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index e04dd17af..296a5da70 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -48,15 +48,14 @@ generateLevelFromRoomList gr' w = & pnZoning .~ foldl' (flip zonePn) mempty (labNodes path) & peZoning .~ foldl' (flip zonePe) mempty (map fromEdgeTuple $ labEdges path) where - (_, path) = pairsToGraph pairPath' - pairPath = foldMap _rmPath rs - pairPath' = snapToGrid pairPath + (_, path) = pairsToGraph . snapToGrid $ foldMap _rmPath rs rs = map doRoomShift $ IM.elems rs' rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w randomCompass :: World -> World -randomCompass w = w & wCam . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w) +randomCompass w = w + & wCam . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w) -- note the order of traversal of the rooms is important -- hence the reverse @@ -67,12 +66,14 @@ setTiles gw = foldr setTile gw . reverse . IM.elems $ _genRooms gw setTile :: Room -> GenWorld -> GenWorld setTile r gw = case _rmFloor r of Tiled{} -> gw - InheritFloor -> gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly] + InheritFloor -> gw + & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly] where t = case _rmMParent r of Nothing -> Tile poly (V2 0 0) (V2 1 0) 16 Just pid -> head $ _tiles $ _rmFloor $ _genRooms gw IM.! pid - poly = orderPolygon . convexHullSafe . nubBy ((==) `on` roundPoint2) $ concat $ _rmPolys r + poly = orderPolygon . convexHullSafe + . nubBy ((==) `on` roundPoint2) $ concat $ _rmPolys r shuffleRoomPos :: RandomGen g => Room -> State g Room shuffleRoomPos rm = do diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index d904397bf..c2ced7ef8 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -30,13 +30,15 @@ import Data.Bifunctor getNodePos :: Int -> World -> Maybe Point2 getNodePos i w = (w ^. cWorld . pathGraph) `lab` i +makePathUsing :: (PathEdge -> Bool) -> Point2 -> Point2 -> World -> Maybe [Int] +makePathUsing t s e w = do + na <- walkableNodeNear w s + nb <- walkableNodeNear w e + sp na nb . second _peDist + . efilter (t . (^. _3)) $ w ^. cWorld . pathGraph + makePathBetween :: Point2 -> Point2 -> World -> Maybe [Int] -makePathBetween a b w = do - -- join $ sp <$> a' <*> b' <*> return (_pathGraph w) - na <- walkableNodeNear w a - nb <- walkableNodeNear w b - sp na nb (second _peDist (efilter (not . pathEdgeObstructed . (^. _3)) $ w ^. cWorld . pathGraph)) - --_pathGraph (_cWorld w))) +makePathBetween = makePathUsing $ not . pathEdgeObstructed pathEdgeObstructed :: PathEdge -> Bool pathEdgeObstructed pe = DoorObstacle `Set.member` obs || BlockObstacle `Set.member` obs diff --git a/tags b/tags index 226ee263c..ae1501981 100644 --- a/tags +++ b/tags @@ -12,7 +12,7 @@ .++~ src/LensHelp.hs 33;" o .+.+~ src/LensHelp.hs 23;" o .:~ src/LensHelp.hs 14;" o -<$> src/Dodge/Data/ActionPlan.hs 203;" o +<$> src/Dodge/Data/ActionPlan.hs 204;" o <$> src/Dodge/Data/CWorld.hs 47;" o <$> src/Dodge/Data/Camera.hs 39;" o <$> src/Dodge/Data/Creature.hs 89;" o @@ -514,7 +514,7 @@ GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 43;" C Glass src/Dodge/Data/Material.hs 11;" C GlassBreakSound src/Dodge/Data/SoundOrigin.hs 35;" C -Goal src/Dodge/Data/ActionPlan.hs 196;" t +Goal src/Dodge/Data/ActionPlan.hs 197;" t GoesOnBack src/Dodge/Data/Equipment/Misc.hs 14;" C GoesOnChest src/Dodge/Data/Equipment/Misc.hs 13;" C GoesOnHead src/Dodge/Data/Equipment/Misc.hs 12;" C @@ -643,7 +643,7 @@ JoystickSF src/Dodge/Data/ComposedItem.hs 26;" C Just' src/MaybeHelp.hs 13;" C JustStartedPlaying src/Sound/Data.hs 24;" C KEYCARD src/Dodge/Data/Item/Combine.hs 177;" C -Kill src/Dodge/Data/ActionPlan.hs 198;" C +Kill src/Dodge/Data/ActionPlan.hs 199;" C LASER src/Dodge/Data/Item/Combine.hs 36;" C LDT src/Dodge/Data/DoubleTree.hs 34;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 29;" C @@ -695,7 +695,7 @@ LimitedFood src/Dodge/Data/Scenario.hs 39;" C LimitedWater src/Dodge/Data/Scenario.hs 40;" C LinearShockwave src/Dodge/Data/LinearShockwave.hs 13;" t ListDisplayParams src/Dodge/Data/SelectionList.hs 13;" t -LiveLongAndProsper src/Dodge/Data/ActionPlan.hs 197;" C +LiveLongAndProsper src/Dodge/Data/ActionPlan.hs 198;" C LivingComplex src/Dodge/Data/Scenario.hs 68;" C LoadingBaySS src/Dodge/Data/Scenario.hs 93;" C LoadingScreen src/Dodge/Data/Universe.hs 73;" C @@ -1189,6 +1189,7 @@ SaveSlotNum src/Dodge/Data/SaveSlot.hs 12;" C Scope src/Dodge/Data/Item/Scope.hs 13;" t ScreenLayer src/Dodge/Data/Universe.hs 81;" t ScreenPos src/Dodge/Data/ScreenPos.hs 12;" t +Search src/Dodge/Data/ActionPlan.hs 193;" C SecretCabal src/Dodge/Data/Scenario.hs 44;" C SectionCursor src/Dodge/Data/SelectionList.hs 23;" t SeeAbove src/Dodge/Data/Wall.hs 42;" C @@ -1208,7 +1209,7 @@ SelfTree src/Dodge/Data/MetaTree.hs 20;" t SemiAutoTrigger src/Dodge/Data/TriggerType.hs 9;" C SensorType src/Dodge/Data/Machine/Sensor.hs 14;" t SensorWithRequirement src/Dodge/Data/Machine/Sensor.hs 33;" C -SentinelAt src/Dodge/Data/ActionPlan.hs 199;" C +SentinelAt src/Dodge/Data/ActionPlan.hs 200;" C SetLSCol src/Dodge/Data/WorldEffect.hs 26;" C SetTrigger src/Dodge/Data/WorldEffect.hs 24;" C ShadNum src/Picture/Data.hs 35;" t @@ -1953,7 +1954,7 @@ _items src/Dodge/Data/LWorld.hs 98;" f _itsInt src/Dodge/Data/Item.hs 40;" f _itsMax src/Dodge/Data/Item.hs 41;" f _itsRangeInt src/Dodge/Data/Item.hs 41;" f -_killTarget src/Dodge/Data/ActionPlan.hs 198;" f +_killTarget src/Dodge/Data/ActionPlan.hs 199;" f _lAimPos src/Dodge/Data/LWorld.hs 145;" f _lClock src/Dodge/Data/LWorld.hs 140;" f _lInvLock src/Dodge/Data/LWorld.hs 146;" f @@ -2296,8 +2297,8 @@ _sensAmount src/Dodge/Data/Machine/Sensor.hs 22;" f _sensThreshold src/Dodge/Data/Machine/Sensor.hs 24;" f _sensType src/Dodge/Data/Machine/Sensor.hs 23;" f _sensorCoding src/Dodge/Data/GenParams.hs 16;" f -_sentinelDir src/Dodge/Data/ActionPlan.hs 199;" f -_sentinelPos src/Dodge/Data/ActionPlan.hs 199;" f +_sentinelDir src/Dodge/Data/ActionPlan.hs 200;" f +_sentinelPos src/Dodge/Data/ActionPlan.hs 200;" f _sfColor src/Shape/Data.hs 44;" f _sfShadowImportance src/Shape/Data.hs 45;" f _sfSize src/Shape/Data.hs 46;" f @@ -2727,7 +2728,7 @@ battery src/Dodge/Item/Ammo.hs 63;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f belowNumX src/Dodge/Combine/Graph.hs 86;" f beltMag src/Dodge/Item/Ammo.hs 39;" f -bfsNodePoints src/Dodge/Path.hs 58;" f +bfsNodePoints src/Dodge/Path.hs 57;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 219;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 118;" f bgunSound src/Dodge/HeldUse.hs 514;" f @@ -2855,10 +2856,10 @@ chooseCursorBorders src/Dodge/Render/List.hs 155;" 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 107;" f +chooseMovementLtAuto src/Dodge/CreatureEffect.hs 108;" f chooseMovementPistol src/Dodge/Humanoid.hs 204;" f chooseMovementPistol' src/Dodge/Humanoid.hs 209;" f -chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 90;" f +chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 91;" f circHitWall src/Dodge/Base/Collide.hs 242;" f circInPolygon src/Geometry/Polygon.hs 102;" f circOnAnyCr src/Dodge/Base/Collide.hs 297;" f @@ -2886,7 +2887,7 @@ cleatLabel src/Dodge/Cleat.hs 30;" f cleatOnward src/Dodge/Cleat.hs 24;" f cleatSide src/Dodge/Cleat.hs 27;" f click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 582;" f -clickGetCreature src/Dodge/Debug.hs 109;" f +clickGetCreature src/Dodge/Debug.hs 150;" f clicker src/Dodge/Item/Scope.hs 82;" f clipV src/Geometry/Vector.hs 48;" f clipZoom src/Dodge/Update/Camera.hs 230;" f @@ -2895,7 +2896,7 @@ closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 223;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 208;" f closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 243;" f closeObjectInfo src/Dodge/Render/HUD.hs 226;" f -closestCreatureID src/Dodge/Debug.hs 118;" f +closestCreatureID src/Dodge/Debug.hs 159;" f closestPointOnLine src/Geometry/Intersect.hs 272;" f closestPointOnLineParam src/Geometry/Intersect.hs 288;" f closestPointOnSeg src/Geometry/Intersect.hs 303;" f @@ -2953,7 +2954,7 @@ conEffects src/Dodge/Concurrent.hs 12;" f conLDTToConDT src/Dodge/DoubleTree.hs 22;" f concurrentIS src/Dodge/Update/Input/InGame.hs 287;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f -constDPic src/Dodge/Debug.hs 62;" f +constDPic src/Dodge/Debug.hs 70;" f constructEdges src/Polyhedra.hs 34;" f constructEdgesList src/Polyhedra.hs 43;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f @@ -3109,15 +3110,15 @@ deadUpperBody src/Dodge/Creature/Picture.hs 113;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 684;" f debrisSPic src/Dodge/Prop/Draw.hs 20;" f debrisSize src/Dodge/Block/Debris.hs 77;" f -debugEvent src/Dodge/Debug.hs 27;" f -debugEvents src/Dodge/Debug.hs 20;" f -debugItem src/Dodge/Debug.hs 30;" f -debugList src/Dodge/Debug.hs 105;" f +debugEvent src/Dodge/Debug.hs 35;" f +debugEvents src/Dodge/Debug.hs 28;" f +debugItem src/Dodge/Debug.hs 38;" f +debugList src/Dodge/Debug.hs 146;" f debugMenu src/Dodge/Menu.hs 125;" f debugMenuOptions src/Dodge/Menu.hs 131;" f debugOn src/Dodge/Data/Config.hs 151;" f -debugSelectCreatureList src/Dodge/Debug.hs 88;" f -debugSelectCreatureMessage src/Dodge/Debug.hs 79;" f +debugSelectCreatureList src/Dodge/Debug.hs 129;" f +debugSelectCreatureMessage src/Dodge/Debug.hs 120;" f decodeSensorType src/Dodge/Terminal.hs 72;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 61;" f decomposeTree src/Dodge/Tree/Compose.hs 58;" f @@ -3267,8 +3268,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 82;" f -doIndividualPlacements src/Dodge/Layout.hs 96;" f +doInPlacements src/Dodge/Layout.hs 83;" f +doIndividualPlacements src/Dodge/Layout.hs 97;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f doIntImp src/Dodge/CreatureEffect.hs 25;" f doItemTimeScroll src/Dodge/Update.hs 191;" f @@ -3286,7 +3287,7 @@ doQuickload src/Dodge/Save.hs 82;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f doRegexInput src/Dodge/Update/Input/InGame.hs 447;" f -doRoomPlacements src/Dodge/Layout.hs 99;" f +doRoomPlacements src/Dodge/Layout.hs 100;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 91;" f doSectionSize src/Dodge/DisplayInventory.hs 211;" f @@ -3342,7 +3343,7 @@ drawCombFilter src/Dodge/Render/Picture.hs 255;" f drawCombineInventory src/Dodge/Render/HUD.hs 182;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 69;" f drawCoord src/Dodge/Debug/Picture.hs 376;" f -drawCrInfo src/Dodge/Debug/Picture.hs 397;" f +drawCrInfo src/Dodge/Debug.hs 73;" f drawCreature src/Dodge/Render/ShapePicture.hs 67;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 198;" f drawCross src/Dodge/Render/Label.hs 24;" f @@ -3402,7 +3403,7 @@ 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 258;" f -drawPathing src/Dodge/Debug/Picture.hs 439;" f +drawPathing src/Dodge/Debug/Picture.hs 398;" f drawPlus src/Dodge/Render/Picture.hs 151;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f @@ -3483,7 +3484,7 @@ 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 448;" f +edgeToPic src/Dodge/Debug/Picture.hs 407;" f effectOnEquip src/Dodge/Equipment.hs 32;" f effectOnRemove src/Dodge/Equipment.hs 19;" f eitType src/Dodge/Data/EquipType.hs 15;" f @@ -3580,7 +3581,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 122;" f +fleeFrom src/Dodge/CreatureEffect.hs 123;" f fleeFromTarget src/Dodge/CreatureEffect.hs 68;" f flickerMod src/Dodge/Placement/Instance/LightSource/Flicker.hs 10;" f flickerUpdate src/Dodge/Placement/Instance/LightSource/Flicker.hs 24;" f @@ -3627,8 +3628,6 @@ frontArmour src/Dodge/Item/Equipment.hs 38;" f fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 53;" f functionalUpdate src/Dodge/Update.hs 239;" f -fuseFunc src/Dodge/Path.hs 150;" f -fusePairs src/Dodge/Path.hs 153;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f fuseWall src/Dodge/LevelGen/StaticWalls.hs 165;" f fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f @@ -3637,9 +3636,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 208;" f -gameRoomFromRoom src/Dodge/Layout.hs 147;" f +gameRoomFromRoom src/Dodge/Layout.hs 148;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f -gameRoomsFromRooms src/Dodge/Layout.hs 144;" f +gameRoomsFromRooms src/Dodge/Layout.hs 145;" f gameplayMenu src/Dodge/Menu.hs 155;" f gameplayMenuOptions src/Dodge/Menu.hs 158;" f gasType src/Dodge/HeldUse.hs 1115;" f @@ -3676,7 +3675,7 @@ getLaserPhaseV src/Dodge/HeldUse.hs 701;" f getLinksOfType src/Dodge/RoomLink.hs 41;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f getMenuMouseContext src/Dodge/Update.hs 373;" f -getNodePos src/Dodge/Path.hs 31;" f +getNodePos src/Dodge/Path.hs 30;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f @@ -3686,7 +3685,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 194;" f +getTiles src/Dodge/Layout.hs 195;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f getVolleyBurst src/Dodge/HeldUse.hs 126;" f getWallSPic src/Dodge/Render/Walls.hs 51;" f @@ -4157,8 +4156,9 @@ 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 35;" f +makePathBetween src/Dodge/Path.hs 40;" f makePathBetweenPs src/Dodge/Path.hs 54;" f +makePathUsing src/Dodge/Path.hs 33;" f makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 25;" f makeRect src/Grid.hs 82;" f makeSelectionListPictures src/Dodge/Render/List.hs 65;" f @@ -4502,7 +4502,7 @@ 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 63;" f +pointTowardsImpulse src/Dodge/Path.hs 62;" 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 @@ -4688,7 +4688,7 @@ randSpark src/Dodge/Spark.hs 69;" f randSparkExtraVel src/Dodge/Spark.hs 92;" f randWallReflect src/Dodge/Update.hs 628;" f randomChallenges src/Dodge/Room/Start.hs 63;" f -randomCompass src/Dodge/Layout.hs 58;" f +randomCompass src/Dodge/Layout.hs 56;" 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 @@ -4882,7 +4882,7 @@ screenPosAbs src/Dodge/ScreenPos.hs 15;" f screenToWorldPos src/Dodge/Base/Coordinate.hs 28;" f scrollAugInvSel src/Dodge/Inventory.hs 191;" f scrollAugNextInSection src/Dodge/Inventory.hs 204;" f -scrollDebugInfoInt src/Dodge/Debug.hs 73;" f +scrollDebugInfoInt src/Dodge/Debug.hs 114;" f scrollRBOption src/Dodge/Update/Scroll.hs 202;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f scrollTimeBack src/Dodge/Update.hs 206;" f @@ -4910,7 +4910,7 @@ selSecDrawCursorAt src/Dodge/Render/List.hs 104;" f selSecSelCol src/Dodge/Render/HUD.hs 501;" f selSecSelSize src/Dodge/SelectionSections.hs 143;" f selSecYint src/Dodge/SelectionSections.hs 152;" f -selectCreatureDebugItem src/Dodge/Debug.hs 65;" f +selectCreatureDebugItem src/Dodge/Debug.hs 106;" f selectedItemScroll src/Dodge/Update/Scroll.hs 51;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f @@ -4952,8 +4952,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 77;" f -setTile src/Dodge/Layout.hs 67;" f -setTiles src/Dodge/Layout.hs 64;" f +setTile src/Dodge/Layout.hs 66;" f +setTiles src/Dodge/Layout.hs 63;" f setToggle src/Dodge/Prop/Update.hs 44;" f setTreeInts src/Dodge/Room/Tutorial.hs 67;" f setViewDistance src/Dodge/Update/Camera.hs 236;" f @@ -4977,7 +4977,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 111;" f +setupWorldBounds src/Dodge/Layout.hs 112;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f shadVBOptr src/Shader.hs 40;" f shaderTypeExt src/Shader/Compile.hs 172;" f @@ -5049,7 +5049,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 77;" f +shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 846;" f @@ -5083,6 +5083,7 @@ smallPillar src/Dodge/Room/Pillar.hs 37;" f smallRoom src/Dodge/Room/RunPast.hs 31;" f smg src/Dodge/Item/Held/Stick.hs 58;" f smokeReducer src/Dodge/Item/Scope.hs 162;" f +snapToGrid src/Dodge/Path.hs 150;" f sndV2 src/Geometry/Data.hs 73;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f someCrits src/Dodge/LockAndKey.hs 120;" f @@ -5273,7 +5274,7 @@ thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 44;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f throwItem src/Dodge/Creature/Action.hs 212;" f tileTexCoords src/Tile.hs 11;" f -tilesFromRooms src/Dodge/Layout.hs 191;" f +tilesFromRooms src/Dodge/Layout.hs 192;" f tilesToLine src/Shader/AuxAddition.hs 66;" f timeFlowUpdate src/Dodge/Update.hs 167;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f @@ -5618,7 +5619,7 @@ 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 132;" f +wallsFromRooms src/Dodge/Layout.hs 133;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f warmupSound src/Dodge/HeldUse.hs 1376;" f warningRooms src/Dodge/Room/Warning.hs 30;" f