diff --git a/src/Dodge/Block.hs b/src/Dodge/Block.hs index 0aa60b983..62fea7114 100644 --- a/src/Dodge/Block.hs +++ b/src/Dodge/Block.hs @@ -1,22 +1,25 @@ +{-# LANGUAGE LambdaCase #-} + module Dodge.Block ( splinterBlock, destroyBlock, ) where -import Dodge.Zoning.Wall -import Dodge.Base.Collide -import Control.Monad -import Dodge.Path +import qualified Data.Set as S import Control.Lens +import Control.Monad import Data.Foldable import qualified Data.IntSet as IS import Data.Maybe +import Dodge.Base.Collide import Dodge.Block.Debris import Dodge.Data.World import Dodge.Material.Sound +import Dodge.Path import Dodge.Wall.Delete import Dodge.Wall.Zone import Dodge.WorldEvent.Sound +import Dodge.Zoning.Wall import qualified IntMapHelp as IM splinterBlock :: Block -> World -> World @@ -53,29 +56,29 @@ destroyBlock bl w = & deleteWallIDs wlids & maybeClearPaths (_blObstructs bl) -- must happen after the walls are deleted & cWorld . lWorld . blocks %~ IM.delete (_blID bl) --- & muchWlDustAt awl (_blPos bl) --- & flip (foldl' $ flip (muchWlDustAt awl)) (map (pos +.+) ps) where + -- & muchWlDustAt awl (_blPos bl) + -- & flip (foldl' $ flip (muchWlDustAt awl)) (map (pos +.+) ps) + wlids = _blWallIDs bl + -- awl = w ^?! cWorld . lWorld . walls . ix (IS.findMin wlids) -- pos = fst . _wlLine $ awl -- ps = replicateM 25 (randInCirc 20) & evalState $ _randGen w -- this does not handle eg doors blocking the path as well -maybeClearPaths :: [(Int,Int)] -> World -> World +maybeClearPaths :: [(Int, Int)] -> World -> World maybeClearPaths ps w = foldl' maybeClearPath w ps -maybeClearPath :: World -> (Int,Int) -> World -maybeClearPath w (i,j) = fromMaybe w $ do +maybeClearPath :: World -> (Int, Int) -> World +maybeClearPath w (i, j) = fromMaybe w $ do x <- getNodePos i w y <- getNodePos j w guard $ null $ overlapSegWalls x y $ wlsNearSeg x y w - return $ w & cWorld . incGraph %~ updateEdge f (i,j) - where - f = at BlockObstacle .~ Nothing + return $ w & cWorld . incGraph %~ updateEdge (S.intersection (S.singleton ChasmObstacle)) (i, j) + ---- | not . null $ overlapSegWalls (_peStart pe) (_peEnd pe) $ wlsNearSeg (_peStart pe) (_peEnd pe) w = ---- w ---- | otherwise = ---- w ---- & cWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles .~ mempty) . FGL.delEdge (x, y) - diff --git a/src/Dodge/Data/GenWorld.hs b/src/Dodge/Data/GenWorld.hs index 706b2fe78..9ef7ef654 100644 --- a/src/Dodge/Data/GenWorld.hs +++ b/src/Dodge/Data/GenWorld.hs @@ -53,9 +53,9 @@ data PSType , _putEndPoint :: Point2 } | PutWall {_pwPoly :: [Point2], _pwWall :: Wall} - | PutSlideDr Door Wall EdgeObstacle Float Point2 Point2 + | PutSlideDr Door Wall (S.Set EdgeObstacle) Float Point2 Point2 -- | PutDoor Color EdgeObstacle WdBl [(Point2, Point2)] - | PutDoor Color EdgeObstacle WdBl Float Point2A Point2A -- [(Point2, Point2)] + | PutDoor Color (S.Set EdgeObstacle) WdBl Float Point2A Point2A -- [(Point2, Point2)] | RandPS (State StdGen PSType) | PutForeground ForegroundShape | PutWorldUpdate (Int -> PlacementSpot -> GenWorld -> GenWorld) diff --git a/src/Dodge/Data/PathGraph.hs b/src/Dodge/Data/PathGraph.hs index 4bfc1a362..55938770d 100644 --- a/src/Dodge/Data/PathGraph.hs +++ b/src/Dodge/Data/PathGraph.hs @@ -8,12 +8,13 @@ The warnings have been disabled. -} module Dodge.Data.PathGraph where +import Dodge.Data.Wall.Structure import Control.Lens import Data.Aeson import Data.Aeson.TH import Data.Graph.Inductive --import Data.Map.Strict (Map) -import qualified Data.Set as Set +import qualified Data.Set as S --import Geometry.Data --data PathGraph = PathGraph @@ -41,17 +42,17 @@ import qualified Data.Set as Set data SimpleEdge = SimpleEdge { _seDist :: Float - , _seObstacles :: Set.Set EdgeObstacle + , _seObstacles :: S.Set EdgeObstacle } deriving (Eq, Ord, Show, Read) --Generic, Flat) data EdgeObstacle - = BlockObstacle - | DoorObstacle - | AutoDoorObstacle - | WallObstacle + = WallObstacle WallFlag | ChasmObstacle - deriving (Eq, Ord, Show, Bounded, Enum, Read) --Generic, Flat) + deriving (Eq, Ord, Show, Read) --Generic, Flat) + +switchWallObs :: S.Set EdgeObstacle +switchWallObs = S.fromList $ WallObstacle <$> [WallBlockVisibility,WallNotAutoOpen] --instance (ToJSON a, ToJSON b) => ToJSON (Gr a b) where -- toEncoding = genericToEncoding defaultOptions diff --git a/src/Dodge/Data/Wall.hs b/src/Dodge/Data/Wall.hs index 27578f051..b866812af 100644 --- a/src/Dodge/Data/Wall.hs +++ b/src/Dodge/Data/Wall.hs @@ -14,12 +14,14 @@ import Data.Aeson.TH import Dodge.Data.Material import Dodge.Data.Wall.Structure import Geometry +import qualified Data.Set as S data Wall = Wall { _wlLine :: (Point2, Point2) , _wlID :: Int , _wlColor :: Color , _wlOpacity :: Opacity + , _wlPathFlag :: S.Set WallFlag , _wlPathable :: Bool , _wlPenetrable :: Bool , _wlBouncy :: Bool diff --git a/src/Dodge/Data/Wall/Structure.hs b/src/Dodge/Data/Wall/Structure.hs index 1a14a60ec..3dc367c1a 100644 --- a/src/Dodge/Data/Wall/Structure.hs +++ b/src/Dodge/Data/Wall/Structure.hs @@ -1,8 +1,8 @@ {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} -module Dodge.Data.Wall.Structure - where +module Dodge.Data.Wall.Structure where + import Control.Lens import Data.Aeson import Data.Aeson.TH @@ -12,8 +12,15 @@ data WallStructure | DoorPart {_wsDoor :: Int} | MachinePart {_wsMachine :: Int} | BlockPart {_wsBlock :: Int} - | CreaturePart { _wlStCreature :: Int } + | CreaturePart {_wlStCreature :: Int} deriving (Eq, Ord, Show, Read) --Generic, Flat) +data WallFlag + = WallBlockVisibility + | WallNotAutoOpen + | WallNotDestrucable + deriving (Eq, Ord, Show, Read, Enum, Bounded) --Generic, Flat) + makeLenses ''WallStructure deriveJSON defaultOptions ''WallStructure +deriveJSON defaultOptions ''WallFlag diff --git a/src/Dodge/Debug/Picture.hs b/src/Dodge/Debug/Picture.hs index 703aea359..8b6d96efc 100644 --- a/src/Dodge/Debug/Picture.hs +++ b/src/Dodge/Debug/Picture.hs @@ -268,10 +268,9 @@ drawPathEdge x y pe = setLayer DebugLayer $ multiArrow x y green (S.map obstacle obstacleColor :: EdgeObstacle -> Color obstacleColor eo = case eo of - WallObstacle -> red - DoorObstacle -> orange - AutoDoorObstacle -> yellow - BlockObstacle -> blue + WallObstacle WallNotAutoOpen -> red + WallObstacle WallBlockVisibility -> orange + WallObstacle WallNotDestrucable -> yellow ChasmObstacle -> cyan drawFarWallDetect :: World -> Picture @@ -402,8 +401,7 @@ drawWlIDs w = setLayer FixedCoordLayer $ foldMap f (w ^. cWorld . lWorld . walls p = worldPosToScreen (w ^. wCam) $ 0.5 *.* uncurry (+.+) (_wlLine wl) drawPathing :: Config -> World -> Picture -drawPathing cfig w = - setLayer DebugLayer $ ifoldMap f $ w ^. cWorld . incGraph +drawPathing cfig w = setLayer DebugLayer $ ifoldMap f $ w ^. cWorld . incGraph where inodes = w ^. cWorld . incNode f i = foldMap (g i) diff --git a/src/Dodge/Default/Wall.hs b/src/Dodge/Default/Wall.hs index 18fb7c255..2198e0e51 100644 --- a/src/Dodge/Default/Wall.hs +++ b/src/Dodge/Default/Wall.hs @@ -8,6 +8,7 @@ module Dodge.Default.Wall ( defaultDirtWall, ) where +import qualified Data.Set as S import Control.Lens import Dodge.Data.Wall import Geometry.Data @@ -20,6 +21,8 @@ defaultWall = { _wlLine = (V2 0 0, V2 50 0) , _wlID = 0 , _wlColor = greyN 0.6 + , _wlPathFlag = S.fromList [WallBlockVisibility + , WallNotAutoOpen, WallNotDestrucable] , --, _wlOpacity = Opaque 11 _wlOpacity = Opaque 11 , _wlPathable = False @@ -38,6 +41,7 @@ defaultWall = defaultDoorWall :: Wall defaultDoorWall = defaultWall { _wlMaterial = Metal } + & wlPathFlag . at WallNotDestrucable .~ Nothing {- Indestructible see-through wall. -} defaultCrystalWall :: Wall diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index 57f9d9dbe..92e478de9 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -15,6 +15,7 @@ module Dodge.Path ( getEdgesCrossing, ) where +import qualified Data.Set as S import qualified Algorithm.Search as AS import Control.Lens --import Data.Bifunctor @@ -82,7 +83,7 @@ makePathBetween :: Point2 -> Point2 -> World -> Maybe [Int] makePathBetween = makePathUsing $ not . pathEdgeObstructed pathEdgeObstructed :: Set.Set EdgeObstacle -> Bool -pathEdgeObstructed pe = any (`Set.member` pe) [DoorObstacle, BlockObstacle, ChasmObstacle] +pathEdgeObstructed pe = any (`Set.member` pe) [WallObstacle WallNotAutoOpen, ChasmObstacle] walkableNodeNear :: World -> Point2 -> Maybe Int {-# INLINE walkableNodeNear #-} @@ -129,17 +130,17 @@ pairsToIncGraph pairs = ps = Set.toList $ Set.map fst pairs <> Set.map snd pairs obstructPathsCrossing :: - EdgeObstacle -> + S.Set EdgeObstacle -> Point2 -> Point2 -> World -> (World, [(Int,Int)]) -obstructPathsCrossing obstacletype s e w = +obstructPathsCrossing obs s e w = ( w & cWorld . incGraph %~ updateincedges , inces ) where - updateincedge = flip $ updateEdge (at obstacletype ?~ ()) + updateincedge = flip $ updateEdge (S.union obs) updateincedges gr = foldl' updateincedge gr inces inces = filter inedgecrosses $ nearSeg peZoneSize _incEdgeZoning s e w inedgecrosses (i, j) = isJust $ intersectSegSeg s e (f i) (f j) diff --git a/src/Dodge/Placement/Instance/Door.hs b/src/Dodge/Placement/Instance/Door.hs index 076cd79a0..098d36457 100644 --- a/src/Dodge/Placement/Instance/Door.hs +++ b/src/Dodge/Placement/Instance/Door.hs @@ -5,6 +5,7 @@ module Dodge.Placement.Instance.Door ( switchDoor, -- not used 9/3/22 ) where +import qualified Data.Set as S import Color import Control.Lens import Dodge.Data.CreatureEffect @@ -14,12 +15,13 @@ import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.Switch import Geometry -putDoubleDoor :: EdgeObstacle -> Wall -> WdBl -> Point2 -> Point2 -> Float -> Placement +putDoubleDoor :: S.Set EdgeObstacle + -> Wall -> WdBl -> Point2 -> Point2 -> Float -> Placement putDoubleDoor eo wl cond a b speed = putDoubleDoorThen eo wl cond 1 a b speed (const $ const Nothing) putDoubleDoorThen :: - EdgeObstacle -> + S.Set EdgeObstacle -> Wall -> WdBl -> Float -> @@ -37,7 +39,7 @@ putDoubleDoorThen eo wl cond soff a b speed cont = half = 0.5 *.* (a +.+ b) doorBetween :: - EdgeObstacle -> + S.Set EdgeObstacle -> Wall -> WdBl -> Float -> @@ -70,7 +72,7 @@ divideDoorPane mid wl cond soff speed ppairs g = case ppairs of (p : ps) -> ptCont (adoor p) $ \pl -> Just $ divideDoorPane (_plMID pl) wl cond soff speed ps g _ -> undefined where - adoor (x, y) = PutSlideDr thedoor wl DoorObstacle soff x y + adoor (x, y) = PutSlideDr thedoor wl mempty soff x y thedoor = defaultDoor & drSpeed .~ speed & drTrigger .~ cond & drPushedBy .~ maybe PushesItself PushedBy mid @@ -81,7 +83,7 @@ putAutoDoor a b = Placement (PS 0 0) (PutCoord a) Nothing Nothing $ \_ apl -> let x = w ^?! gwWorld . coordinates . ix (apl ^?! plMID . _Just) y = w ^?! gwWorld . coordinates . ix (bpl ^?! plMID . _Just) in Just $ putDoubleDoor - AutoDoorObstacle + (S.fromList [WallObstacle WallBlockVisibility]) defaultAutoWall (WdBlCrFilterNearPoint 40 (0.5 *.* (x + y)) CrIsAnimate) a @@ -109,7 +111,8 @@ switchDoor btpos btrot dra drb col = pContID jsps0J (doorbetween btid dra drc) $ sps0 (doorbetween btid drb drc) where - doorbetween btid a b = PutSlideDr thedoor (switchWallCol col) DoorObstacle 1 a b + doorbetween btid a b = PutSlideDr thedoor (switchWallCol col) + (S.fromList (WallObstacle <$> [WallNotAutoOpen,WallBlockVisibility])) 1 a b where thedoor = defaultDoor diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index d4f83861a..14fca9fe3 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -6,6 +6,7 @@ -} module Dodge.Placement.PlaceSpot (placeSpot) where +import qualified Data.Set as S import Color import Control.Monad.State import Data.Bifunctor @@ -165,7 +166,7 @@ placeChasm gw rid ps shiftps = & gwWorld %~ f where f w = foldl' g w (loopPairs shiftps) - g w (x,y) = fst $ obstructPathsCrossing ChasmObstacle x y w + g w (x,y) = fst $ obstructPathsCrossing (S.singleton ChasmObstacle) x y w --evaluateRandPS -- :: Int -> State StdGen PSType -> PlacementSpot -> GenWorld -> (Int, GenWorld) @@ -185,7 +186,7 @@ placeWallPoly qs wl w = foldl' (addPane wl) w pairs addPane :: Wall -> World -> (Point2, Point2) -> World addPane wl w l = w & plNew (cWorld . lWorld . walls) wlID (wl & wlLine .~ l) - & fst . uncurry (obstructPathsCrossing WallObstacle) l + & fst . uncurry (obstructPathsCrossing (S.fromList [WallObstacle WallNotAutoOpen])) l mvProp :: Point2 -> Float -> Prop -> Prop mvProp p a = (prRot +~ a) . (prPos %~ ((p +.+) . rotateV a)) diff --git a/src/Dodge/Placement/PlaceSpot/Block.hs b/src/Dodge/Placement/PlaceSpot/Block.hs index fd9625c46..e8871e660 100644 --- a/src/Dodge/Placement/PlaceSpot/Block.hs +++ b/src/Dodge/Placement/PlaceSpot/Block.hs @@ -4,6 +4,7 @@ module Dodge.Placement.PlaceSpot.Block ( plLineBlock, ) where +import qualified Data.Set as S import Control.Lens import qualified Data.IntSet as IS import Data.List @@ -119,5 +120,6 @@ insertWalls blid wls w = w' & cWorld . lWorld . blocks . ix blid . blObstructs . insertWall :: Wall -> World -> (World, [(Int,Int)]) insertWall wl = - uncurry (obstructPathsCrossing BlockObstacle) (_wlLine wl) + uncurry (obstructPathsCrossing (S.fromList [WallObstacle WallNotAutoOpen, WallObstacle WallBlockVisibility])) + (_wlLine wl) . (cWorld . lWorld . walls . at (_wlID wl) ?~ wl) diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 35888e03e..4fadfcd6d 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -4,6 +4,7 @@ module Dodge.Placement.PlaceSpot.TriggerDoor ( updateDoorEdges, ) where +import qualified Data.Set as S import Dodge.ShiftPoint import Linear import Dodge.Data.GenWorld @@ -18,7 +19,7 @@ import Picture plDoor :: Color -> - EdgeObstacle -> + S.Set EdgeObstacle -> -- | Opening condition WdBl -> -- | Door positions, closed to open. @@ -51,7 +52,8 @@ plDoor col eo cond l p1 p2 gw = (drid, over gwWorld addWalls $ gw & gwWorld . cW addWalls w' = foldl' (addDoorWall eo drid $ switchWallCol col) w' $ zip wlids $ wlps' & each . each %~ shiftPointBy p1 -addDoorWall :: EdgeObstacle -> Int -> Wall -> World -> (Int, (Point2, Point2)) -> World +addDoorWall :: S.Set EdgeObstacle + -> Int -> Wall -> World -> (Int, (Point2, Point2)) -> World addDoorWall eo drid wl w (wlid, wlps) = w' & cWorld . lWorld . walls @@ -80,7 +82,7 @@ updateDoorEdge _ w _ = w plSlideDoor :: Door -> Wall -> - EdgeObstacle -> + S.Set EdgeObstacle -> Float -> Point2 -> Point2 -> diff --git a/src/Dodge/Room/Airlock.hs b/src/Dodge/Room/Airlock.hs index cfcf2c2a5..b172f0591 100644 --- a/src/Dodge/Room/Airlock.hs +++ b/src/Dodge/Room/Airlock.hs @@ -35,8 +35,8 @@ decontamRoom i = & rmPmnts .~ [ pContID (PS (V2 (-35) 50) (negate $ pi / 2)) (PutButton $ makeSwitch col red NoWorldEffect NoWorldEffect) $ \btid -> Just $ - putDoubleDoorThen DoorObstacle thewall (WdBlNegate $ WdBlBtOn btid) 1 (V2 0 20) (V2 40 20) 2 $ - \_ _ -> Just $ putDoubleDoor DoorObstacle thewall (WdBlBtOn btid) (V2 0 80) (V2 40 80) 2 + putDoubleDoorThen switchWallObs thewall (WdBlNegate $ WdBlBtOn btid) 1 (V2 0 20) (V2 40 20) 2 $ + \_ _ -> Just $ putDoubleDoor switchWallObs thewall (WdBlBtOn btid) (V2 0 80) (V2 40 80) 2 , invisibleWall $ rectNSWE 60 40 (-40) (-30) , spanLightI (V2 (-20) 30) (V2 (-20) 70) , analyser (NoItemZone ps) (PS 50 0) (PS mcpos 0) & plExternalID ?~ i @@ -50,7 +50,7 @@ decontamRoom i = pmnt <- gw ^? genPmnt . ix i return $ putDoubleDoor - DoorObstacle + switchWallObs (switchWallCol red) (cond pmnt) (V2 (-10) 35) @@ -78,8 +78,8 @@ airlock0 = , _rmPmnts = [ pContID (PS (V2 (-35) 50) (negate $ pi / 2)) (PutButton $ makeSwitch col red NoWorldEffect NoWorldEffect) $ \btid -> Just $ - putDoubleDoorThen DoorObstacle thewall (WdBlNegate $ WdBlBtOn btid) 1 (V2 0 20) (V2 40 20) 2 $ - \_ _ -> Just $ putDoubleDoor DoorObstacle thewall (WdBlBtOn btid) (V2 0 80) (V2 40 80) 2 + putDoubleDoorThen switchWallObs thewall (WdBlNegate $ WdBlBtOn btid) 1 (V2 0 20) (V2 40 20) 2 $ + \_ _ -> Just $ putDoubleDoor switchWallObs thewall (WdBlBtOn btid) (V2 0 80) (V2 40 80) 2 , invisibleWall $ rectNSWE 60 40 (-40) (-30) , spanLightI (V2 (-2) 30) (V2 (-2) 70) , sps0 $ putShape $ thinHighBar 75 (V2 40 50) (V2 (-1) 50) @@ -97,7 +97,7 @@ airlock0 = --airlockDoor :: Color -> WdBl -> [(Point2, Point2)] -> PSType airlockDoor :: Color -> WdBl -> Float -> Point2A -> Point2A -> PSType -airlockDoor col = PutDoor col DoorObstacle +airlockDoor col = PutDoor col switchWallObs airlockDoubleDoor :: Point2 -> diff --git a/src/Dodge/Room/Door.hs b/src/Dodge/Room/Door.hs index 2b01cde94..6a4182115 100644 --- a/src/Dodge/Room/Door.hs +++ b/src/Dodge/Room/Door.hs @@ -43,5 +43,5 @@ triggerDoorRoom i = f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do pmnt <- gw ^? genPmnt . ix i return $ putDoubleDoor - DoorObstacle (switchWallCol red) (cond pmnt) (V2 0 20) (V2 40 20) 2 + switchWallObs (switchWallCol red) (cond pmnt) (V2 0 20) (V2 40 20) 2 cond pmnt = WdTrig $ fromJust (_plMID pmnt) diff --git a/src/Dodge/Room/LongDoor.hs b/src/Dodge/Room/LongDoor.hs index b103635e2..316e71fc5 100644 --- a/src/Dodge/Room/LongDoor.hs +++ b/src/Dodge/Room/LongDoor.hs @@ -47,8 +47,8 @@ twinSlowDoorRoom w h x = , _rmPath = mempty , _rmPmnts = [ pContID (PS (V2 0 (h -5)) pi) (PutButton $ makeButton col NoWorldEffect) $ - \btid -> jsps0J (PutSlideDr (thedoor btid) thewall DoorObstacle 1 (V2 x 1) (V2 x h)) $ - ps0 (PutSlideDr (thedoor btid) thewall DoorObstacle 1 (V2 (- x) 1) (V2 (- x) h)) $ + \btid -> jsps0J (PutSlideDr (thedoor btid) thewall switchWallObs 1 (V2 x 1) (V2 x h)) $ + ps0 (PutSlideDr (thedoor btid) thewall switchWallObs 1 (V2 (- x) 1) (V2 (- x) h)) $ \did -> jps0' (PutLS (lsColPos (V3 0.75 0 0) (V3 0 (h -1) lampheight))) $ \lspl -> jsps0 $ PutProp $ addColorChange (fromJust $ _plMID lspl) did $ lampCoverWhen (WdBlDoorMoving did) (V2 0 (h -1)) lampheight ] @@ -135,7 +135,7 @@ addButtonSlowDoor x h rm = do (rprBool (isUnusedLnkType InLink)) $ \btplmnt -> Just $ putDoubleDoorThen - DoorObstacle + switchWallObs thewall (WdBlBtOn $ fromJust $ _plMID btplmnt) 30 diff --git a/src/Dodge/Room/Procedural.hs b/src/Dodge/Room/Procedural.hs index 3c7fd2881..0f2f3a250 100644 --- a/src/Dodge/Room/Procedural.hs +++ b/src/Dodge/Room/Procedural.hs @@ -327,8 +327,8 @@ centerVaultRoom w h d = theDoor = [ pContID (PS (V2 35 (d + 4)) 0) (PutButton $ makeSwitch col red NoWorldEffect NoWorldEffect) $ \btid -> - jspsJ (V2 0 (d -10)) 0 (PutSlideDr (thedoor btid) thewall DoorObstacle 1 (V2 (-21) 0) (V2 0 0)) $ - sPS (V2 0 (d -10)) 0 (PutSlideDr (thedoor btid) thewall DoorObstacle 1 (V2 21 0) (V2 0 0)) + jspsJ (V2 0 (d -10)) 0 (PutSlideDr (thedoor btid) thewall switchWallObs 1 (V2 (-21) 0) (V2 0 0)) $ + sPS (V2 0 (d -10)) 0 (PutSlideDr (thedoor btid) thewall switchWallObs 1 (V2 21 0) (V2 0 0)) ] thewall = switchWallCol col thedoor btid = diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 9210c74eb..8d62eef31 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -318,12 +318,10 @@ updateEdgeWallObs :: World -> (Int,Int) -> World updateEdgeWallObs w (i,j) = fromMaybe w $ do s <- getNodePos i w e <- getNodePos j w - let wls = snd <$> wlsHitUnsorted s e w - return $ w & cWorld . incGraph %~ updateEdge (f wls) (i,j) + let wlflags = foldMap (^. _2 . wlPathFlag) $ wlsHitUnsorted s e w + return $ w & cWorld . incGraph %~ updateEdge (f wlflags) (i,j) where - f wls - | all _wlPathable wls = (at BlockObstacle .~ Nothing) . (at DoorObstacle .~ Nothing) - | otherwise = at DoorObstacle ?~ () + f x _ = S.map WallObstacle x updateDoors :: World -> World updateDoors w = let (is,w') = foldrM updateDoor w (w ^. cWorld . lWorld . doors) diff --git a/tags b/tags index 1773b32bc..2024c4d80 100644 --- a/tags +++ b/tags @@ -75,7 +75,6 @@ AttentiveTo src/Dodge/Data/Creature/Perception.hs 59;" C Audition src/Dodge/Data/Creature/Perception.hs 45;" t AutoAI src/Dodge/Data/Creature/Misc.hs 45;" C AutoCrit src/Dodge/Data/Creature/Misc.hs 70;" C -AutoDoorObstacle src/Dodge/Data/PathGraph.hs 51;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C Avatar src/Dodge/Data/Creature/Misc.hs 59;" C AvatarDead src/Dodge/Data/Creature/Misc.hs 67;" C @@ -138,7 +137,6 @@ BlockDrawBlSh src/Dodge/Data/Block.hs 37;" C BlockDrawColHeightPoss src/Dodge/Data/Block.hs 39;" C BlockDrawMempty src/Dodge/Data/Block.hs 36;" C BlockDraws src/Dodge/Data/Block.hs 38;" C -BlockObstacle src/Dodge/Data/PathGraph.hs 49;" C BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C BlockedLink src/Dodge/Data/Room.hs 50;" C BloomLayer src/Picture/Data.hs 23;" C @@ -212,7 +210,7 @@ ChangeStrategy src/Dodge/Data/ActionPlan.hs 43;" C ChaseAI src/Dodge/Data/Creature/Misc.hs 38;" C ChaseCrit src/Dodge/Data/Creature/Misc.hs 68;" C ChaseCritters src/Dodge/Data/Creature/State.hs 16;" C -ChasmObstacle src/Dodge/Data/PathGraph.hs 53;" C +ChasmObstacle src/Dodge/Data/PathGraph.hs 50;" C ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 14;" C ChooseMovementLtAuto src/Dodge/Data/CreatureEffect.hs 29;" C ChooseMovementSpreadGun src/Dodge/Data/CreatureEffect.hs 28;" C @@ -349,16 +347,15 @@ DoNotMoveEquipment src/Dodge/Data/RightButtonOptions.hs 18;" C DoReplicate src/Dodge/Data/ActionPlan.hs 106;" C DoReplicatePartial src/Dodge/Data/ActionPlan.hs 110;" C DockingBaySS src/Dodge/Data/Scenario.hs 92;" C -Door src/Dodge/Data/Door.hs 30;" t +Door src/Dodge/Data/Door.hs 29;" t DoorLerp src/Dodge/Data/WorldEffect.hs 63;" C -DoorObstacle src/Dodge/Data/PathGraph.hs 50;" C DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C DoubleRes src/Dodge/Data/Config.hs 98;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t DrWdId src/Dodge/Data/WorldEffect.hs 63;" C DrWdWd src/Dodge/Data/WorldEffect.hs 63;" t -DrawForceField src/Dodge/Data/Wall.hs 45;" C -DrawnWall src/Dodge/Data/Wall.hs 41;" C +DrawForceField src/Dodge/Data/Wall.hs 47;" C +DrawnWall src/Dodge/Data/Wall.hs 43;" C DroneAmmo src/Dodge/Data/AmmoType.hs 10;" C DropItem src/Dodge/Data/ActionPlan.hs 38;" C DudPayload src/Dodge/Data/Payload.hs 11;" C @@ -858,7 +855,7 @@ NorthEast8 src/Dodge/Data/CardinalPoint.hs 21;" C NorthWest src/Dodge/Data/CardinalPoint.hs 16;" C NorthWest8 src/Dodge/Data/CardinalPoint.hs 27;" C NotLink src/Dodge/Data/Room.hs 69;" C -NotPushed src/Dodge/Data/Door.hs 27;" C +NotPushed src/Dodge/Data/Door.hs 26;" C Nothing' src/MaybeHelp.hs 11;" C NothingID src/Dodge/Data/CrWlID.hs 10;" C NozzleAngle src/Dodge/Data/Item/Params.hs 16;" C @@ -918,8 +915,8 @@ OnTurret src/Dodge/Data/Item/Location.hs 37;" C OnceSound src/Dodge/Data/SoundOrigin.hs 14;" C OneHand src/Dodge/Data/AimStance.hs 14;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 13;" C -Opacity src/Dodge/Data/Wall.hs 38;" t -Opaque src/Dodge/Data/Wall.hs 42;" C +Opacity src/Dodge/Data/Wall.hs 40;" t +Opaque src/Dodge/Data/Wall.hs 44;" C OpticScope src/Dodge/Data/Item/Scope.hs 12;" C OptionScreen src/Dodge/Data/Universe.hs 80;" C OptionScreenFlag src/Dodge/Data/Universe.hs 70;" t @@ -1034,9 +1031,9 @@ PulseBallSF src/Dodge/Data/ComposedItem.hs 44;" C PulseLaser src/Dodge/Data/PulseLaser.hs 11;" t PulseLaserSF src/Dodge/Data/ComposedItem.hs 41;" C PulseStatus src/Dodge/Data/Creature/Misc.hs 52;" C -PushSource src/Dodge/Data/Door.hs 24;" t -PushedBy src/Dodge/Data/Door.hs 26;" C -PushesItself src/Dodge/Data/Door.hs 25;" C +PushSource src/Dodge/Data/Door.hs 23;" t +PushedBy src/Dodge/Data/Door.hs 25;" C +PushesItself src/Dodge/Data/Door.hs 24;" C PutBlock src/Dodge/Data/GenWorld.hs 45;" C PutButton src/Dodge/Data/GenWorld.hs 41;" C PutChasm src/Dodge/Data/GenWorld.hs 64;" C @@ -1157,8 +1154,8 @@ ScreenPos src/Dodge/Data/ScreenPos.hs 12;" t Search src/Dodge/Data/ActionPlan.hs 145;" C SecretCabal src/Dodge/Data/Scenario.hs 44;" C SectionCursor src/Dodge/Data/SelectionList.hs 23;" t -SeeAbove src/Dodge/Data/Wall.hs 40;" C -SeeThrough src/Dodge/Data/Wall.hs 39;" C +SeeAbove src/Dodge/Data/Wall.hs 42;" C +SeeThrough src/Dodge/Data/Wall.hs 41;" C Sel src/Dodge/Data/HUD.hs 39;" C SelCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 31;" C SelCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 29;" C @@ -1439,10 +1436,14 @@ WRISTARMOUR src/Dodge/Data/Item/Combine.hs 123;" C WRIST_ECG src/Dodge/Data/Item/Combine.hs 135;" C WaitThen src/Dodge/Data/ActionPlan.hs 74;" C Walking src/Dodge/Data/Creature/Stance.hs 23;" C -Wall src/Dodge/Data/Wall.hs 18;" t +Wall src/Dodge/Data/Wall.hs 19;" t WallArcNode src/Dodge/Data/LWorld.hs 154;" C -WallDraw src/Dodge/Data/Wall.hs 45;" t -WallObstacle src/Dodge/Data/PathGraph.hs 52;" C +WallBlockVisibility src/Dodge/Data/Wall/Structure.hs 19;" C +WallDraw src/Dodge/Data/Wall.hs 47;" t +WallFlag src/Dodge/Data/Wall/Structure.hs 18;" t +WallNotAutoOpen src/Dodge/Data/Wall/Structure.hs 20;" C +WallNotDestrucable src/Dodge/Data/Wall/Structure.hs 21;" C +WallObstacle src/Dodge/Data/PathGraph.hs 49;" C WallP src/Dodge/LevelGen/StaticWalls.hs 23;" t WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t WallSound src/Dodge/Data/SoundOrigin.hs 24;" C @@ -1754,20 +1755,18 @@ _doReplicateAction src/Dodge/Data/ActionPlan.hs 113;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 107;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 112;" f _doors src/Dodge/Data/LWorld.hs 118;" f -_drFootPrint src/Dodge/Data/Door.hs 38;" f -_drHP src/Dodge/Data/Door.hs 39;" f -_drID src/Dodge/Data/Door.hs 31;" f -_drLerp src/Dodge/Data/Door.hs 37;" f -_drMech src/Dodge/Data/Door.hs 34;" f -_drMounts src/Dodge/Data/Door.hs 43;" f -_drObstacleType src/Dodge/Data/Door.hs 45;" f -_drOnePos src/Dodge/Data/Door.hs 36;" f -_drPushedBy src/Dodge/Data/Door.hs 41;" f -_drPushes src/Dodge/Data/Door.hs 42;" f -_drSpeed src/Dodge/Data/Door.hs 40;" f -_drTrigger src/Dodge/Data/Door.hs 33;" f -_drWallIDs src/Dodge/Data/Door.hs 32;" f -_drZeroPos src/Dodge/Data/Door.hs 35;" f +_drFootPrint src/Dodge/Data/Door.hs 36;" f +_drHP src/Dodge/Data/Door.hs 37;" f +_drID src/Dodge/Data/Door.hs 30;" f +_drLerp src/Dodge/Data/Door.hs 35;" f +_drMech src/Dodge/Data/Door.hs 32;" f +_drMounts src/Dodge/Data/Door.hs 41;" f +_drOnePos src/Dodge/Data/Door.hs 34;" f +_drPushedBy src/Dodge/Data/Door.hs 39;" f +_drPushes src/Dodge/Data/Door.hs 40;" f +_drSpeed src/Dodge/Data/Door.hs 38;" f +_drTrigger src/Dodge/Data/Door.hs 31;" f +_drZeroPos src/Dodge/Data/Door.hs 33;" f _dsPos src/Dodge/Data/Cloud.hs 28;" f _dsTimer src/Dodge/Data/Cloud.hs 30;" f _dsType src/Dodge/Data/Cloud.hs 31;" f @@ -2054,9 +2053,9 @@ _nzWalkSpeed src/Dodge/Data/Muzzle.hs 50;" f _offGridFromEdges src/Dodge/Data/Room.hs 82;" f _oldMagnets src/Dodge/Data/LWorld.hs 121;" f _onGridFromEdges src/Dodge/Data/Room.hs 81;" f -_opDraw src/Dodge/Data/Wall.hs 41;" f +_opDraw src/Dodge/Data/Wall.hs 43;" f _opSel src/Dodge/Data/RightButtonOptions.hs 15;" f -_opTexture src/Dodge/Data/Wall.hs 42;" f +_opTexture src/Dodge/Data/Wall.hs 44;" f _opticDefaultZoom src/Dodge/Data/Item/Scope.hs 18;" f _opticPos src/Dodge/Data/Item/Scope.hs 14;" f _opticZoom src/Dodge/Data/Item/Scope.hs 17;" f @@ -2454,23 +2453,24 @@ _windowPosY src/Dodge/Data/Config.hs 54;" f _windowShader src/Data/Preload/Render.hs 19;" f _windowX src/Dodge/Data/Config.hs 51;" f _windowY src/Dodge/Data/Config.hs 52;" f -_wlBouncy src/Dodge/Data/Wall.hs 25;" f -_wlColor src/Dodge/Data/Wall.hs 21;" f -_wlFireThrough src/Dodge/Data/Wall.hs 28;" f -_wlHeight src/Dodge/Data/Wall.hs 33;" f -_wlID src/Dodge/Data/Wall.hs 20;" f -_wlLine src/Dodge/Data/Wall.hs 19;" f -_wlMaterial src/Dodge/Data/Wall.hs 34;" f -_wlOpacity src/Dodge/Data/Wall.hs 22;" f -_wlPathable src/Dodge/Data/Wall.hs 23;" f -_wlPenetrable src/Dodge/Data/Wall.hs 24;" f -_wlReflect src/Dodge/Data/Wall.hs 29;" f -_wlRotateTo src/Dodge/Data/Wall.hs 31;" f +_wlBouncy src/Dodge/Data/Wall.hs 27;" f +_wlColor src/Dodge/Data/Wall.hs 22;" f +_wlFireThrough src/Dodge/Data/Wall.hs 30;" f +_wlHeight src/Dodge/Data/Wall.hs 35;" f +_wlID src/Dodge/Data/Wall.hs 21;" f +_wlLine src/Dodge/Data/Wall.hs 20;" f +_wlMaterial src/Dodge/Data/Wall.hs 36;" f +_wlOpacity src/Dodge/Data/Wall.hs 23;" f +_wlPathFlag src/Dodge/Data/Wall.hs 24;" f +_wlPathable src/Dodge/Data/Wall.hs 25;" f +_wlPenetrable src/Dodge/Data/Wall.hs 26;" f +_wlReflect src/Dodge/Data/Wall.hs 31;" f +_wlRotateTo src/Dodge/Data/Wall.hs 33;" f _wlStCreature src/Dodge/Data/Wall/Structure.hs 15;" f -_wlStructure src/Dodge/Data/Wall.hs 32;" f -_wlTouchThrough src/Dodge/Data/Wall.hs 27;" f -_wlUnshadowed src/Dodge/Data/Wall.hs 30;" f -_wlWalkable src/Dodge/Data/Wall.hs 26;" f +_wlStructure src/Dodge/Data/Wall.hs 34;" f +_wlTouchThrough src/Dodge/Data/Wall.hs 29;" f +_wlUnshadowed src/Dodge/Data/Wall.hs 32;" f +_wlWalkable src/Dodge/Data/Wall.hs 28;" f _wlZoning src/Dodge/Data/World.hs 49;" f _worldEventFlags src/Dodge/Data/World.hs 45;" f _worldEvents src/Dodge/Data/LWorld.hs 127;" f @@ -2496,7 +2496,7 @@ addCrGibs src/Dodge/Prop/Gib.hs 17;" f 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 56;" f +addDoorWall src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 54;" 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 @@ -2990,7 +2990,7 @@ crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f crsNearRect src/Dodge/Zoning/Creature.hs 39;" f crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 55;" f -cubeShape src/Dodge/Block/Debris.hs 105;" f +cubeShape src/Dodge/Block/Debris.hs 106;" f cullPoint src/Dodge/Render/ShapePicture.hs 94;" f cullPretty src/AesonHelp.hs 14;" f cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f @@ -3045,7 +3045,7 @@ deadScalp src/Dodge/Creature/Picture.hs 81;" f 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 79;" f +debrisSize src/Dodge/Block/Debris.hs 80;" f debugEvent src/Dodge/Debug.hs 36;" f debugEvents src/Dodge/Debug.hs 21;" f debugItem src/Dodge/Debug.hs 39;" f @@ -3125,7 +3125,7 @@ deleteWallID src/Dodge/Wall/Delete.hs 13;" f deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f denormalEdges src/Polyhedra.hs 136;" f destroyAllInvItems src/Dodge/Inventory.hs 53;" f -destroyBlock src/Dodge/Block.hs 48;" f +destroyBlock src/Dodge/Block.hs 51;" f destroyDoor src/Dodge/DrWdWd.hs 56;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyItem src/Dodge/Inventory.hs 62;" f @@ -3194,6 +3194,7 @@ doDebugTestF12 src/Dodge/Update/Input/DebugTest.hs 84;" f doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 41;" f doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f +doDoorLerp src/Dodge/DrWdWd.hs 53;" f doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f doDrawing' src/Dodge/Render.hs 45;" f @@ -3258,7 +3259,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 355;" f +drawBoundingBox src/Dodge/Debug/Picture.hs 354;" 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 @@ -3269,7 +3270,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 383;" f +drawCoord src/Dodge/Debug/Picture.hs 382;" f drawCrInfo src/Dodge/Debug.hs 135;" f drawCrInfo' src/Dodge/Debug.hs 130;" f drawCreature src/Dodge/Render/ShapePicture.hs 69;" f @@ -3278,7 +3279,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 310;" f +drawDDATest src/Dodge/Debug/Picture.hs 309;" f drawDamSensor src/Dodge/Machine/Draw.hs 27;" f drawDebug src/Dodge/Debug.hs 173;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 95;" f @@ -3293,7 +3294,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 277;" f +drawFarWallDetect src/Dodge/Debug/Picture.hs 276;" 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 @@ -3326,11 +3327,11 @@ 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 373;" f +drawMousePosition src/Dodge/Debug/Picture.hs 372;" 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 404;" f +drawPathing src/Dodge/Debug/Picture.hs 403;" 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 @@ -3371,15 +3372,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 319;" f +drawWallSearchRays src/Dodge/Debug/Picture.hs 318;" 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 391;" f -drawZoneCirc src/Dodge/Debug/Picture.hs 299;" f +drawWlIDs src/Dodge/Debug/Picture.hs 390;" f +drawZoneCirc src/Dodge/Debug/Picture.hs 298;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f -drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 292;" f +drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 291;" f dropAll src/Dodge/Creature/Update.hs 129;" f dropInventoryPath src/Dodge/HeldUse.hs 1351;" f dropItem src/Dodge/Creature/Action.hs 154;" f @@ -3410,7 +3411,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 129;" f -edgeToPic src/Dodge/Debug/Picture.hs 413;" f +edgeToPic src/Dodge/Debug/Picture.hs 412;" f effectOnEquip src/Dodge/Equipment.hs 32;" f effectOnRemove src/Dodge/Equipment.hs 19;" f eitType src/Dodge/Data/EquipType.hs 15;" f @@ -3956,7 +3957,6 @@ leftRightCombine src/Dodge/Item/Grammar.hs 197;" f leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f legsSPic src/Dodge/Item/Draw/SPic.hs 468;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -lerpdr src/Dodge/DrWdWd.hs 53;" f liShape src/Dodge/Placement/Instance/LightSource.hs 111;" f light src/Color.hs 104;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 51;" f @@ -4053,7 +4053,7 @@ main test/Spec.hs 12;" f makeArc src/Picture/Base.hs 157;" f makeAttach src/Dodge/Item/Attach.hs 10;" f makeBlip src/Dodge/RadarSweep.hs 70;" f -makeBlockDebris src/Dodge/Block/Debris.hs 36;" f +makeBlockDebris src/Dodge/Block/Debris.hs 37;" f makeBoolOption src/Dodge/Menu/OptionType.hs 8;" f makeBullet src/Dodge/HeldUse.hs 979;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f @@ -4062,9 +4062,9 @@ makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 111;" f makeColorTermPara src/Dodge/Terminal.hs 108;" f makeCorpse src/Dodge/Corpse/Make.hs 13;" f -makeDebris src/Dodge/Block/Debris.hs 47;" f -makeDebrisDirected src/Dodge/Block/Debris.hs 50;" f -makeDoorDebris src/Dodge/Block/Debris.hs 25;" f +makeDebris src/Dodge/Block/Debris.hs 48;" f +makeDebrisDirected src/Dodge/Block/Debris.hs 51;" f +makeDoorDebris src/Dodge/Block/Debris.hs 26;" f makeDustAt src/Dodge/WorldEvent/Cloud.hs 17;" f makeEnumOption src/Dodge/Menu/OptionType.hs 13;" f makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 73;" f @@ -4111,8 +4111,8 @@ maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" 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 68;" f -maybeClearPaths src/Dodge/Block.hs 65;" f +maybeClearPath src/Dodge/Block.hs 73;" f +maybeClearPaths src/Dodge/Block.hs 70;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 32;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 562;" f maybeOpenConsole src/Dodge/Update.hs 129;" f @@ -4370,7 +4370,7 @@ pistol src/Dodge/Item/Held/Stick.hs 40;" f pistolerRoom src/Dodge/Room/Room.hs 330;" f pjRemoteSetDirection src/Dodge/Projectile/Update.hs 172;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 16;" f -plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 20;" f +plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 19;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 48;" f plMachine src/Dodge/Placement/PlaceSpot.hs 206;" f plMachine' src/Dodge/Placement/PlaceSpot.hs 250;" f @@ -4379,7 +4379,7 @@ plNewID src/Dodge/Base/NewID.hs 7;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f -plSlideDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 82;" f +plSlideDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 80;" f plTurret src/Dodge/Placement/PlaceSpot.hs 219;" f placeChasm src/Dodge/Placement/PlaceSpot.hs 161;" f placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 264;" f @@ -5006,7 +5006,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 360;" f +soundPic src/Dodge/Debug/Picture.hs 359;" f soundStart src/Dodge/SoundLogic.hs 118;" f soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 150;" f soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f @@ -5029,7 +5029,7 @@ speedLegs src/Dodge/Item/Equipment.hs 90;" f splashMenu src/Dodge/Menu.hs 33;" f splashMenuOptions src/Dodge/Menu.hs 38;" f splashScreen src/Dodge/Initialisation.hs 10;" f -splinterBlock src/Dodge/Block.hs 22;" f +splinterBlock src/Dodge/Block.hs 25;" f splitBezierquad src/Geometry/Bezier.hs 15;" f splitExtra src/Justify.hs 21;" f splitLookupTrie src/SimpleTrie.hs 39;" f @@ -5330,7 +5330,7 @@ unpause src/Dodge/Menu.hs 212;" f unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 57;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 75;" f -unshadowBlock src/Dodge/Block.hs 35;" f +unshadowBlock src/Dodge/Block.hs 38;" f untilJust src/MonadHelp.hs 7;" f untilJustCount src/MonadHelp.hs 14;" f unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 131;" f @@ -5366,8 +5366,8 @@ updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 5;" f updateDistortions src/Dodge/Update.hs 577;" f updateDoor src/Dodge/DrWdWd.hs 20;" f -updateDoorEdge src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 74;" f -updateDoorEdges src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 71;" f +updateDoorEdge src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 72;" f +updateDoorEdges src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 69;" f updateDoors src/Dodge/Update.hs 328;" f updateDust src/Dodge/Update.hs 841;" f updateDusts src/Dodge/Update.hs 691;" f @@ -5516,8 +5516,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 328;" f -viewClipBounds src/Dodge/Debug/Picture.hs 337;" f +viewBoundaries src/Dodge/Debug/Picture.hs 327;" f +viewClipBounds src/Dodge/Debug/Picture.hs 336;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 194;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 154;" f violet src/Color.hs 21;" f