diff --git a/src/Dodge/Data/Door.hs b/src/Dodge/Data/Door.hs index 62e25f3e3..71824377c 100644 --- a/src/Dodge/Data/Door.hs +++ b/src/Dodge/Data/Door.hs @@ -33,6 +33,7 @@ data Door = Door , _drZeroPos :: (Point2,Float) , _drOnePos :: (Point2,Float) , _drLerp :: Float + , _drOldLerp :: Float , _drFootPrint :: IM.IntMap (Point2,Point2) , _drHP :: Int , _drPushedBy :: PushSource diff --git a/src/Dodge/Data/Wall/Structure.hs b/src/Dodge/Data/Wall/Structure.hs index d3b595326..ba9877e5b 100644 --- a/src/Dodge/Data/Wall/Structure.hs +++ b/src/Dodge/Data/Wall/Structure.hs @@ -3,6 +3,7 @@ module Dodge.Data.Wall.Structure where +--import Geometry.Data import Control.Lens import Data.Aeson import Data.Aeson.TH diff --git a/src/Dodge/Default/Door.hs b/src/Dodge/Default/Door.hs index 007211723..12d8d8ece 100644 --- a/src/Dodge/Default/Door.hs +++ b/src/Dodge/Default/Door.hs @@ -11,6 +11,7 @@ defaultDoor = , _drZeroPos = (0, 0) , _drOnePos = (0, 0) , _drLerp = 0 + , _drOldLerp = 0 , _drFootPrint = mempty , _drHP = 10000 , _drPushedBy = PushesItself diff --git a/src/Dodge/Door.hs b/src/Dodge/Door.hs index e2df1e417..09a9f4e38 100644 --- a/src/Dodge/Door.hs +++ b/src/Dodge/Door.hs @@ -38,8 +38,9 @@ doDoorMount pa w = \case & _2 . each . vxPos . _xy %~ shiftPointBy pa ) +-- do the mounts need to be done if there is no lerping? doorLerp :: Float -> Door -> World -> (S.Set Int2, World) -doorLerp speed dr w = fromMaybe (mempty, domounts (dr ^. drLerp) w) $ do +doorLerp speed dr w = fromMaybe (mempty, domounts (dr ^. drLerp) $ setOldLerp w) $ do x <- newlerp let ps = wlposs x ps' = wlposs (dr ^. drLerp) @@ -52,8 +53,10 @@ doorLerp speed dr w = fromMaybe (mempty, domounts (dr ^. drLerp) w) $ do f x & playSound x & cWorld . lWorld . doors . ix drid . drLerp .~ x + & setOldLerp ) where + setOldLerp = cWorld . lWorld . doors . ix drid . drOldLerp .~ (dr ^. drLerp) domounts x w' = foldl' (doDoorMount (doDoorLerp dr x)) w' (dr ^. drMounts) f = ifoldl' (flip . moveWallID) w . wlposs wlposs x = (dr ^. drFootPrint) & each . each %~ shiftPointBy (doDoorLerp dr x) diff --git a/src/Dodge/Placement/Instance/LightSource.hs b/src/Dodge/Placement/Instance/LightSource.hs index e7b2db043..261a25f68 100644 --- a/src/Dodge/Placement/Instance/LightSource.hs +++ b/src/Dodge/Placement/Instance/LightSource.hs @@ -14,6 +14,7 @@ module Dodge.Placement.Instance.LightSource ( spanColLightBlackI, spanLightI, spanLightY, + spanLightL, mntLightLnkCond', spanLS, mntLightLnkShape, @@ -178,6 +179,15 @@ spanLightY l x y z = f p = putShape $ thinHighBar h p (l + normalize (l-p)) h = 95 +spanLightL :: Point2 -> Point2 -> Point2 -> Placement +spanLightL l x y = + ps0j (PutLS $ lsColPos 0.75 (addZ (h -5) l)) $ + ps0j (f x) $ + sps0 (f y) + where + f p = putShape $ thinHighBar h p (l + normalize (l-p)) + h = 95 + --extendAway :: Point2 -> Point2 -> Point2 --extendAway p x = p +.+ squashNormalizeV (p -.- x) diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 3f36cec46..db364b08f 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -30,7 +30,7 @@ plDoor dr wl gw = lerposa = doDoorLerp dr (dr ^. drLerp) addWalls = insertStructureWalls - (`DoorPart` isauto) + (\x -> DoorPart x isauto) wl (map fst pps & each %~ shiftPointBy lerposa) drid diff --git a/src/Dodge/Room/LongDoor.hs b/src/Dodge/Room/LongDoor.hs index 05d59ab5a..f88743b6a 100644 --- a/src/Dodge/Room/LongDoor.hs +++ b/src/Dodge/Room/LongDoor.hs @@ -148,18 +148,23 @@ slowCrushRoom = do & rmPmnts .~ [spanLightI (V2 0 60) (V2 35 100) , spanLightI (V2 220 60) (V2 185 100) ] + crs <- takeOne [[] + , [sPS (V2 200 10) (0.8* pi) randC1] + , [sPS (V2 200 10) (0.8* pi) randC1 , sPS (V2 210 20) (0.8* pi) randC1] + , [sPS (V2 200 80) pi randC1] + , [sPS (V2 200 80) pi randC1 , sPS (V2 210 90) pi randC1] + ] return $ rm' & rmBound .:~ rectNSWE 0 (-50) 0 220 & rmLinks %~ setOutLinks (\rl -> onside East $ rl ^. rlType) & rmLinks %~ setInLinks (\rl -> onside West $ rl ^. rlType) - & rmPmnts .:~ - (ps0 (PutTrigger False) $ \i -> Just $ + & rmPmnts <>~ + [ps0 (PutTrigger False) $ \i -> Just $ pContID (apos West) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ pContID (apos East) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ sps0 (PutDoor (dr & drTrigger .~ WdTrig i) defaultDoorWall) & plIDCont . mapped . mapped ?~ sps0 (PutDoor (dr1 & drTrigger .~ WdTrig i) defaultDoorWall) - ) - + ] <> crs where onside x s = (OnEdge x `S.member` s) || (OnEdge South `S.member` s && FromEdge x 0 `S.member` s) @@ -180,36 +185,50 @@ slowCrushRoom = do UnusedLink s -> onside edge s _ -> False -slowCrushRoom' :: RandomGen g => State g Room -slowCrushRoom' = do - rm <- shuffleLinks =<< roomRectAutoLights 200 100 +slowCrush90 :: RandomGen g => State g Room +slowCrush90 = do + rm <- shuffleLinks =<< roomRectAutoLights 170 100 + (ilinks, olinks) <- shufflePair (cornlinks,onside West) let rm' = removeLights rm & rmPmnts .~ [spanLightI (V2 0 60) (V2 35 100) - , spanLightI (V2 200 60) (V2 165 100) + , spanLightL (V2 120 39) (V2 170 39) (V2 120 0) ] + crs <- takeOne [[] ] return $ rm' - & rmLinks %~ setOutLinksByType (OnEdge East) - & rmLinks %~ setInLinksByType (OnEdge West) - & rmPmnts .:~ - (ps0 (PutTrigger False) $ \i -> Just $ - pContID (apos West 5) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ - pContID (apos East (-5)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ + & rmBound <>~ [rectNSWE 0 (-55) 0 110 + , rectNSWE 100 40 170 220 + ] + & rmLinks %~ setOutLinks (\rl -> olinks $ rl ^. rlType) + & rmLinks %~ setInLinks (\rl -> ilinks $ rl ^. rlType) + & rmPmnts <>~ + [ps0 (PutTrigger False) $ \i -> Just $ + pContID (spos ilinks) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ + pContID (spos olinks) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ sps0 (PutDoor (dr & drTrigger .~ WdTrig i) defaultDoorWall) & plIDCont . mapped . mapped ?~ sps0 (PutDoor (dr1 & drTrigger .~ WdTrig i) defaultDoorWall) - ) - + ] <> crs where + onside x s = (OnEdge x `S.member` s) + || (OnEdge South `S.member` s && FromEdge x 0 `S.member` s) + || (OnEdge North `S.member` s && FromEdge x 0 `S.member` s) + cornlinks s = + (OnEdge South `S.member` s && FromEdge East 0 `S.member` s) + || (OnEdge East `S.member` s && FromEdge South 0 `S.member` s) dr = defaultDoor & drUpdate .~ DoorLerp 0.01 - & drZeroPos .~ (V2 65 (-40), 0) - & drOnePos .~ (V2 65 50, 0) - & drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 35 50)) + & drZeroPos .~ (V2 75 (-5), 0) + & drOnePos .~ (V2 75 50, 0) + & drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 34 50)) dr1 = dr - & drOnePos .~ (V2 135 (-40), 0) - & drZeroPos .~ (V2 135 50, 0) - apos edge x = (rprBool (t edge) & psSelect . mapped . mapped . _Just . _1 %~ (psRot +~ pi) . (psPos +~ V2 x 0)) - t edge rp _ = case _rpType rp of - UnusedLink s -> OnEdge edge `S.member` s + & drOnePos .~ (V2 190 70, 0) + & drZeroPos .~ (V2 140 70, 0) + & drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 30 29)) + f ps = case ps of + PS _ r -> ps & psRot +~ pi & psPos +~ rotateV r (V2 0 (-5)) + _ -> ps + spos h = (rprBool (t' h) & psSelect . mapped . mapped . _Just . _1 %~ f) + t' h rp _ = case _rpType rp of + UnusedLink s -> h s _ -> False slowDoorRoom :: RandomGen g => State g Room diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 5646e5440..1504274a9 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -55,7 +55,7 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor - , tToBTree "slowCrush" . return . cleatOnward <$> slowCrushRoom + , tToBTree "slowCrush" . return . cleatOnward <$> slowCrush90 , corDoor , chasmSpitTerminal --a , return $ tToBTree "cor" $ return $ cleatOnward corridor diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 740886d79..ee653b4f7 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -34,8 +34,8 @@ import Data.Monoid import RandomHelp testStringInit :: Universe -> [String] -testStringInit u = - (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage . strideAmount) +testStringInit u = [fromMaybe "" $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crName] +-- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage . strideAmount) -- a <> fromMaybe [] (do -- a w1 <- u ^? uvWorld . cWorld . lWorld . walls . ix 18 -- a w2 <- u ^? uvWorld . cWorld . lWorld . walls . ix 61 diff --git a/src/Dodge/Wall/Move.hs b/src/Dodge/Wall/Move.hs index ea65b3ff1..225e093b5 100644 --- a/src/Dodge/Wall/Move.hs +++ b/src/Dodge/Wall/Move.hs @@ -21,9 +21,9 @@ moveWallID wlid wlline w = case w ^? cWorld . lWorld . walls . ix wlid of Just wl -> moveWall wlid wl wlline w moveWall :: Int -> Wall -> (Point2, Point2) -> World -> World -moveWall wlid wl wlline w = +moveWall wlid wl xy w = w & cWorld . lWorld . walls . ix wlid .~ newwl & deleteWallFromZones wl & insertWallInZones newwl where - newwl = wl{_wlLine = wlline} + newwl = wl & wlLine .~ xy diff --git a/src/Dodge/WallCreatureCollisions.hs b/src/Dodge/WallCreatureCollisions.hs index b701bb50f..513337d1d 100644 --- a/src/Dodge/WallCreatureCollisions.hs +++ b/src/Dodge/WallCreatureCollisions.hs @@ -1,8 +1,11 @@ -- | Deals with moving creature wall collisions. -module Dodge.WallCreatureCollisions (colCrsWalls, - wlWlCrush - ) where +module Dodge.WallCreatureCollisions (colCrsWalls) where +--import Control.Applicative +--import Data.Monoid +import Dodge.Door.DoorLerp +import Dodge.ShiftPoint +import Data.Maybe import qualified Data.IntMap.Strict as IM import Control.Lens import Data.Foldable @@ -26,7 +29,7 @@ colCrWall :: World -> Creature -> Creature colCrWall w c = cornpush . wallpush $ pushthrough c where cornpush = crPos . _xy %~ pushOutFromCorners r ls' - wallpush = pushCr wls + wallpush = pushCr (w ^. cWorld . lWorld) wls pushthrough = crPos . _xy %~ fst . flip (collidePoint p1) wls -- check push throughs r = crRad (c ^. crType) + wallBuffer p1 = c ^. crOldPos . _xy @@ -37,34 +40,60 @@ colCrWall w c = cornpush . wallpush $ pushthrough c notff x = x ^. wlMaterial /= ForceField -- might want to check angled crushing -pushCr :: IM.IntMap Wall -> Creature -> Creature -pushCr wls cr - | (dist ep sp > r && dist ep ap > r) - || wlsCrush twls - = +pushCr :: LWorld -> IM.IntMap Wall -> Creature -> Creature +pushCr w wls cr +-- | (dist ep sp > r && dist ep ap > r) +-- || wlsCrush' w (cr ^. crPos . _xy) twls = + | wlsCrush' w (cr ^. crPos . _xy) twls = ecr & crDamage <>~ [Crushing 1000 0] & crPos . _xy .~ ap +-- | Just s <- wlsCrush w (cr ^. crPos . _xy) twls = +-- ecr +-- & crDamage <>~ [Crushing 1000 0] +-- & crPos . _xy .~ ap +-- & crName .~ s | otherwise = ecr where -- stwls = IM.filter (\wl -> uncurry circOnSegNoEndpoints (wl ^. wlLine) sp r) wls twls = IM.elems $ IM.restrictKeys wls (ecr ^. crWallTouch) -- `IM.union` stwls - ep = ecr ^. crPos . _xy +-- ep = ecr ^. crPos . _xy ap = cr ^. crOldPos . _xy - sp = cr ^. crPos . _xy +-- sp = cr ^. crPos . _xy ecr = foldl' f (cr & crWallTouch .~ mempty) wls r = crRad (cr ^. crType) f acr wl = case pushOutFromWall r (acr ^. crPos . _xy) (wl ^. wlLine) of Just p -> acr & crPos . _xy .~ p & crWallTouch %~ IS.insert (wl ^. wlID) Nothing -> acr -wlsCrush :: [Wall] -> Bool -wlsCrush [] = False -wlsCrush (x:xs) = any (wlWlCrush x) xs || wlsCrush xs +wallMovement :: LWorld -> Point2 -> Wall -> Point2 +wallMovement w p wl = fromMaybe 0 $ do + drid <- w ^? walls . ix (wl ^. wlID) . wlStructure . wsDoor + dr <- w ^? doors . ix drid + let oldp = shiftPointBy (doDoorLerp dr (dr ^. drOldLerp)) + $ invShiftPointBy (doDoorLerp dr (dr ^. drLerp)) p + return $ p - oldp -wlWlCrush :: Wall -> Wall -> Bool -wlWlCrush w1 w2 = norm (f w1 + f w2) < 0.2 +--wlsCrush :: LWorld -> Point2 -> [Wall] -> Maybe String +--wlsCrush _ _ [] = Nothing +--wlsCrush w p (x:xs) = getFirst (foldMap (First . wlWlCrush w p x) xs) <|> wlsCrush w p xs + +wlsCrush' :: LWorld -> Point2 -> [Wall] -> Bool +wlsCrush' _ _ [] = False +wlsCrush' w p (x:xs) = any (wlWlCrush' w p x) xs || wlsCrush' w p xs + +--wlWlCrush :: LWorld -> Point2 -> Wall -> Wall -> Maybe String +--wlWlCrush w p w1 w2 +-- | wlWlCrush' w p w1 w2 = Just $ show (w1 ^. wlID) <> ":" <> show (w2 ^. wlID) +-- | otherwise = Nothing + +wlWlCrush' :: LWorld -> Point2 -> Wall -> Wall -> Bool +wlWlCrush' w p w1 w2 = (t w1 w2 || t w2 w1) -- test either wall is moving towards the other + && norm (f w1 + f w2) < 0.2 -- test walls are facing each other where +-- t wl = dotV (vNormal (normalizeV (uncurry (-) (wl ^. wlLine)))) (wallMovement w p wl) > 0 + t x y = dotV (vNormal (normalizeV (uncurry (-) (x ^. wlLine)))) + (wallMovement w p x - wallMovement w p y) > 0 f = normalizeV . uncurry (-) . (^. wlLine) -- the amount to push creatures out from walls, extra to their radius diff --git a/tags b/tags index f3c4fadb6..046605673 100644 --- a/tags +++ b/tags @@ -131,7 +131,7 @@ BlNegate src/Dodge/Data/BlBl.hs 10;" C Block src/Dodge/Data/Block.hs 20;" t BlockDebris src/Dodge/Data/Prop.hs 23;" C BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 31;" C -BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C +BlockPart src/Dodge/Data/Wall/Structure.hs 15;" C BlockStatus src/Dodge/Data/Universe.hs 98;" t BlockedLink src/Dodge/Data/Room.hs 54;" C BloomLayer src/Picture/Data.hs 21;" C @@ -279,7 +279,7 @@ CraftType src/Dodge/Data/Item/Combine.hs 49;" t CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C Creature src/Dodge/Data/Creature.hs 36;" t -CreaturePart src/Dodge/Data/Wall/Structure.hs 15;" C +CreaturePart src/Dodge/Data/Wall/Structure.hs 16;" C CreatureShape src/Dodge/Data/Creature/Misc.hs 74;" t CreatureType src/Dodge/Data/Creature/Misc.hs 58;" t Crushing src/Dodge/Data/Damage.hs 19;" C @@ -346,11 +346,11 @@ 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 29;" t -DoorDoNothing src/Dodge/Data/Door.hs 44;" C -DoorLerp src/Dodge/Data/Door.hs 45;" C -DoorLerpWithTimer src/Dodge/Data/Door.hs 46;" C -DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C -DoorUpdate src/Dodge/Data/Door.hs 43;" t +DoorDoNothing src/Dodge/Data/Door.hs 45;" C +DoorLerp src/Dodge/Data/Door.hs 46;" C +DoorLerpWithTimer src/Dodge/Data/Door.hs 47;" C +DoorPart src/Dodge/Data/Wall/Structure.hs 13;" C +DoorUpdate src/Dodge/Data/Door.hs 44;" t DoubleRes src/Dodge/Data/Config.hs 113;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 9;" t DrawForceField src/Dodge/Data/Wall.hs 37;" C @@ -706,7 +706,7 @@ MTree src/Dodge/Data/MetaTree.hs 12;" C Machine src/Dodge/Data/Machine.hs 30;" t MachineAltSound src/Dodge/Data/SoundOrigin.hs 23;" C MachineBackgroundSound src/Dodge/Data/SoundOrigin.hs 22;" C -MachinePart src/Dodge/Data/Wall/Structure.hs 13;" C +MachinePart src/Dodge/Data/Wall/Structure.hs 14;" C MachinePrimarySound src/Dodge/Data/SoundOrigin.hs 21;" C MachineType src/Dodge/Data/Machine.hs 42;" t MagBelow src/Dodge/Data/Muzzle.hs 22;" C @@ -1267,7 +1267,7 @@ SpreadGunAI src/Dodge/Data/Creature/Misc.hs 40;" C StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C Stance src/Dodge/Data/Creature/Stance.hs 15;" t -StandaloneWall src/Dodge/Data/Wall/Structure.hs 11;" C +StandaloneWall src/Dodge/Data/Wall/Structure.hs 12;" C StartSentinelPost src/Dodge/Data/ActionPlan.hs 117;" C StayInArea src/Dodge/Data/Scenario.hs 13;" C Stone src/Dodge/Data/Material.hs 13;" C @@ -1463,16 +1463,16 @@ WaitThen src/Dodge/Data/ActionPlan.hs 74;" C Walking src/Dodge/Data/Creature/Stance.hs 23;" C Wall src/Dodge/Data/Wall.hs 17;" t WallArcNode src/Dodge/Data/LWorld.hs 160;" C -WallBlockVisibility src/Dodge/Data/Wall/Structure.hs 19;" C +WallBlockVisibility src/Dodge/Data/Wall/Structure.hs 20;" C WallDraw src/Dodge/Data/Wall.hs 37;" 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 +WallFlag src/Dodge/Data/Wall/Structure.hs 19;" t +WallNotAutoOpen src/Dodge/Data/Wall/Structure.hs 21;" C +WallNotDestrucable src/Dodge/Data/Wall/Structure.hs 22;" C WallObstacle src/Dodge/Data/PathGraph.hs 50;" C WallP src/Dodge/LevelGen/StaticWalls.hs 23;" t WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t WallSound src/Dodge/Data/SoundOrigin.hs 25;" C -WallStructure src/Dodge/Data/Wall/Structure.hs 10;" t +WallStructure src/Dodge/Data/Wall/Structure.hs 11;" t WallWire src/Dodge/Data/Room.hs 59;" C Walls_info src/Dodge/Data/Config.hs 89;" C War src/Dodge/Data/Scenario.hs 28;" C @@ -1770,16 +1770,17 @@ _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 124;" f -_drFootPrint src/Dodge/Data/Door.hs 36;" f -_drHP src/Dodge/Data/Door.hs 37;" f +_drFootPrint src/Dodge/Data/Door.hs 37;" f +_drHP src/Dodge/Data/Door.hs 38;" f _drID src/Dodge/Data/Door.hs 30;" f _drLerp src/Dodge/Data/Door.hs 35;" f -_drLerpSpeed src/Dodge/Data/Door.hs 45;" f -_drLerpTimer src/Dodge/Data/Door.hs 46;" f -_drMounts src/Dodge/Data/Door.hs 40;" f +_drLerpSpeed src/Dodge/Data/Door.hs 46;" f +_drLerpTimer src/Dodge/Data/Door.hs 47;" f +_drMounts src/Dodge/Data/Door.hs 41;" f +_drOldLerp src/Dodge/Data/Door.hs 36;" f _drOnePos src/Dodge/Data/Door.hs 34;" f -_drPushedBy src/Dodge/Data/Door.hs 38;" f -_drPushes src/Dodge/Data/Door.hs 39;" f +_drPushedBy src/Dodge/Data/Door.hs 39;" f +_drPushes src/Dodge/Data/Door.hs 40;" f _drTrigger src/Dodge/Data/Door.hs 31;" f _drUpdate src/Dodge/Data/Door.hs 32;" f _drZeroPos src/Dodge/Data/Door.hs 33;" f @@ -2507,25 +2508,25 @@ _wlLine src/Dodge/Data/Wall.hs 18;" f _wlMaterial src/Dodge/Data/Wall.hs 26;" f _wlOpacity src/Dodge/Data/Wall.hs 20;" f _wlRotateTo src/Dodge/Data/Wall.hs 23;" f -_wlStCreature src/Dodge/Data/Wall/Structure.hs 15;" f +_wlStCreature src/Dodge/Data/Wall/Structure.hs 16;" f _wlStructure src/Dodge/Data/Wall.hs 24;" f _wlTouchThrough src/Dodge/Data/Wall.hs 21;" f _wlUnshadowed src/Dodge/Data/Wall.hs 22;" f _wlZoning src/Dodge/Data/World.hs 52;" f _worldEventFlags src/Dodge/Data/World.hs 47;" f _worldEvents src/Dodge/Data/LWorld.hs 133;" f -_wsBlock src/Dodge/Data/Wall/Structure.hs 14;" f -_wsDoor src/Dodge/Data/Wall/Structure.hs 12;" f -_wsIsAutoDoor src/Dodge/Data/Wall/Structure.hs 12;" f -_wsMachine src/Dodge/Data/Wall/Structure.hs 13;" f +_wsBlock src/Dodge/Data/Wall/Structure.hs 15;" f +_wsDoor src/Dodge/Data/Wall/Structure.hs 13;" f +_wsIsAutoDoor src/Dodge/Data/Wall/Structure.hs 13;" f +_wsMachine src/Dodge/Data/Wall/Structure.hs 14;" f _xNum src/Dodge/Data/Item/Combine.hs 141;" f _xNum src/Dodge/Data/Item/Combine.hs 151;" f _xNum src/Dodge/Data/Item/Combine.hs 171;" f -aBar src/Dodge/Placement/Instance/LightSource.hs 68;" f +aBar src/Dodge/Placement/Instance/LightSource.hs 69;" f aFlame src/Dodge/Gas.hs 20;" f aGasCloud src/Dodge/Gas.hs 15;" f aRadarPulse src/Dodge/RadarSweep.hs 20;" f -aShape src/Dodge/Placement/Instance/LightSource.hs 93;" f +aShape src/Dodge/Placement/Instance/LightSource.hs 94;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f accessTerminal src/Dodge/WorldEffect.hs 63;" f @@ -2882,8 +2883,8 @@ clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f clsNearRect src/Dodge/Zoning/Cloud.hs 18;" f clsNearSeg src/Dodge/Zoning/Cloud.hs 15;" f cogRaised src/Dodge/Creature/Perception.hs 101;" f -colCrWall src/Dodge/WallCreatureCollisions.hs 25;" f -colCrsWalls src/Dodge/WallCreatureCollisions.hs 17;" f +colCrWall src/Dodge/WallCreatureCollisions.hs 30;" f +colCrsWalls src/Dodge/WallCreatureCollisions.hs 22;" f collectDamageTypes src/Dodge/Damage.hs 53;" f collectInvItems src/Dodge/Inventory.hs 205;" f collide3 src/Dodge/Base/Collide.hs 129;" f @@ -3294,8 +3295,8 @@ doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 14;" f doorBetween src/Dodge/Placement/Instance/Door.hs 34;" f doorCor src/Dodge/Room/Room.hs 400;" f -doorLerp src/Dodge/Door.hs 41;" f -doorLerpWithTimer src/Dodge/Door.hs 72;" f +doorLerp src/Dodge/Door.hs 42;" f +doorLerpWithTimer src/Dodge/Door.hs 75;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 291;" f @@ -3772,7 +3773,7 @@ horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 82;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f -iShape src/Dodge/Placement/Instance/LightSource.hs 56;" f +iShape src/Dodge/Placement/Instance/LightSource.hs 57;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f inLink src/Dodge/RoomLink.hs 128;" f @@ -3946,7 +3947,7 @@ itmBaseInfo src/Dodge/Item/Info.hs 30;" f itmEquipSiteInfo src/Dodge/Item/Info.hs 250;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f -jShape src/Dodge/Placement/Instance/LightSource.hs 71;" f +jShape src/Dodge/Placement/Instance/LightSource.hs 72;" f joinItemsInList src/Dodge/Item/Grammar.hs 215;" f joystick src/Dodge/Item/Scope.hs 158;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f @@ -3969,7 +3970,7 @@ lChasm src/Dodge/Room/Tutorial.hs 145;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f -lShape src/Dodge/Placement/Instance/LightSource.hs 59;" f +lShape src/Dodge/Placement/Instance/LightSource.hs 60;" f lamp src/Dodge/Creature/Lamp.hs 18;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f lasCenRunClose' src/Dodge/Room/LasTurret.hs 309;" f @@ -4006,7 +4007,7 @@ leftRightCombine src/Dodge/Item/Grammar.hs 205;" f leftWristPQ src/Dodge/Creature/HandPos.hs 86;" f legsSPic src/Dodge/Item/Draw/SPic.hs 448;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -liShape src/Dodge/Placement/Instance/LightSource.hs 84;" f +liShape src/Dodge/Placement/Instance/LightSource.hs 85;" f light src/Color.hs 131;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f @@ -4233,12 +4234,12 @@ mkDustCloudLike src/Shader/Poke/Cloud.hs 27;" f mkGraphFromEdges src/GraphHelp.hs 4;" f mkNode src/Dodge/Graph.hs 29;" f mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f -mntLS src/Dodge/Placement/Instance/LightSource.hs 105;" f -mntLSCond src/Dodge/Placement/Instance/LightSource.hs 110;" f -mntLSOn src/Dodge/Placement/Instance/LightSource.hs 35;" f -mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 127;" f -mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 135;" f -mntLightLnkShape src/Dodge/Placement/Instance/LightSource.hs 132;" f +mntLS src/Dodge/Placement/Instance/LightSource.hs 106;" f +mntLSCond src/Dodge/Placement/Instance/LightSource.hs 111;" f +mntLSOn src/Dodge/Placement/Instance/LightSource.hs 36;" f +mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 128;" f +mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 136;" f +mntLightLnkShape src/Dodge/Placement/Instance/LightSource.hs 133;" f modTo src/Geometry/Zone.hs 18;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f @@ -4303,7 +4304,7 @@ nextInSectionSS src/Dodge/SelectionSections.hs 34;" f nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f -noclipCheck src/Dodge/WallCreatureCollisions.hs 20;" f +noclipCheck src/Dodge/WallCreatureCollisions.hs 25;" f nodesNear src/Dodge/Path.hs 75;" f nonConvexChasm src/Dodge/Room/Tutorial.hs 260;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f @@ -4554,10 +4555,10 @@ psposAddLabel src/Dodge/PlacementSpot.hs 71;" f pt0 src/Dodge/LevelGen/PlacementHelper.hs 55;" f ptCont src/Dodge/LevelGen/PlacementHelper.hs 21;" f pulseChecker src/Dodge/Item/Equipment.hs 84;" f -pushCr src/Dodge/WallCreatureCollisions.hs 40;" f +pushCr src/Dodge/WallCreatureCollisions.hs 45;" f pushL src/DoubleStack.hs 20;" f -pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 87;" f -pushOutFromWall src/Dodge/WallCreatureCollisions.hs 76;" f +pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 116;" f +pushOutFromWall src/Dodge/WallCreatureCollisions.hs 105;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f pushYouOutFromWalls src/Dodge/Update.hs 342;" f @@ -4570,7 +4571,7 @@ putDoor src/Dodge/Room/Airlock.hs 116;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 20;" f putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 60;" f -putLamp src/Dodge/Placement/Instance/LightSource.hs 187;" f +putLamp src/Dodge/Placement/Instance/LightSource.hs 197;" f putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f putLitButOnPos src/Dodge/Placement/Instance/Button.hs 64;" f putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f @@ -5011,9 +5012,10 @@ slapClean7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 747;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 667;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 629;" f slideWindow src/ListHelp.hs 81;" f +slowCrush90 src/Dodge/Room/LongDoor.hs 188;" f slowCrushRoom src/Dodge/Room/LongDoor.hs 144;" f -slowDoorRoom src/Dodge/Room/LongDoor.hs 176;" f -slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 193;" f +slowDoorRoom src/Dodge/Room/LongDoor.hs 234;" f +slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 251;" f smallBattery src/Dodge/Item/Ammo.hs 57;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f @@ -5050,11 +5052,12 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 86;" f spaceAction src/Dodge/Update/Input/InGame.hs 504;" f -spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 160;" f -spanColLightI src/Dodge/Placement/Instance/LightSource.hs 153;" f -spanLS src/Dodge/Placement/Instance/LightSource.hs 145;" f -spanLightI src/Dodge/Placement/Instance/LightSource.hs 167;" f -spanLightY src/Dodge/Placement/Instance/LightSource.hs 171;" f +spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 161;" f +spanColLightI src/Dodge/Placement/Instance/LightSource.hs 154;" f +spanLS src/Dodge/Placement/Instance/LightSource.hs 146;" f +spanLightI src/Dodge/Placement/Instance/LightSource.hs 168;" f +spanLightL src/Dodge/Placement/Instance/LightSource.hs 182;" f +spanLightY src/Dodge/Placement/Instance/LightSource.hs 172;" f sparkDam src/Dodge/Spark.hs 37;" f sparkRandDir src/Dodge/Spark.hs 117;" f sparkToDamage src/Dodge/Spark.hs 40;" f @@ -5081,7 +5084,7 @@ sqPlatformChasm src/Dodge/Room/Tutorial.hs 225;" f sqSpitChasm src/Dodge/Room/Tutorial.hs 240;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f -squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 90;" f +squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 119;" f squashNormalizeV src/Geometry/Vector.hs 158;" f ssLookupDown src/Dodge/SelectionSections.hs 96;" f ssLookupGE' src/Dodge/SelectionSections.hs 150;" f @@ -5550,7 +5553,7 @@ vCen3 src/Geometry/Vector3D.hs 115;" f vInverse src/Geometry/Vector.hs 154;" f vNormal src/Geometry/Vector.hs 149;" f vNormaly src/Geometry/Vector3D.hs 72;" f -vShape src/Dodge/Placement/Instance/LightSource.hs 98;" f +vShape src/Dodge/Placement/Instance/LightSource.hs 99;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f @@ -5578,8 +5581,9 @@ volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f walkNozzle src/Dodge/HeldUse.hs 826;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f -wallBuffer src/Dodge/WallCreatureCollisions.hs 71;" f +wallBuffer src/Dodge/WallCreatureCollisions.hs 100;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f +wallMovement src/Dodge/WallCreatureCollisions.hs 71;" f wallToSurface src/Dodge/Base/Collide.hs 182;" f wallsFromRooms src/Dodge/Layout.hs 141;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f @@ -5633,9 +5637,11 @@ wlIsOpaque src/Dodge/Base/Wall.hs 6;" f wlIsSeeThrough src/Dodge/Base/Wall.hs 11;" f wlOpaqueDraw src/Dodge/Render/Walls.hs 53;" f wlSeeThroughDraw src/Dodge/Render/Walls.hs 56;" f -wlWlCrush src/Dodge/WallCreatureCollisions.hs 65;" f +wlWlCrush src/Dodge/WallCreatureCollisions.hs 87;" f +wlWlCrush' src/Dodge/WallCreatureCollisions.hs 92;" f wlZoneSize src/Dodge/Zoning/Wall.hs 51;" f -wlsCrush src/Dodge/WallCreatureCollisions.hs 61;" f +wlsCrush src/Dodge/WallCreatureCollisions.hs 79;" f +wlsCrush' src/Dodge/WallCreatureCollisions.hs 83;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 34;" f wlsHit src/Dodge/WorldEvent/ThingsHit.hs 156;" f wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f