From 8ff2f37af5d0d83e7d93ccab0e5b7d58ff4010a2 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 24 Mar 2026 19:21:04 +0000 Subject: [PATCH] Improve scroll selection/inventory modification --- src/Dodge/Base/Coordinate.hs | 9 +- src/Dodge/Data/Input.hs | 2 +- src/Dodge/Event/Input.hs | 4 +- src/Dodge/Inventory.hs | 138 ++++- src/Dodge/Placement/Instance/Button.hs | 94 ++-- src/Dodge/Placement/Instance/LightSource.hs | 29 +- src/Dodge/Placement/PlaceSpot.hs | 37 +- src/Dodge/Render/Picture.hs | 2 +- src/Dodge/Room/Tutorial.hs | 6 +- src/Dodge/TestString.hs | 2 +- src/Dodge/Update.hs | 37 +- src/Dodge/Update/Camera.hs | 2 +- src/Dodge/Update/Input/InGame.hs | 34 +- src/Dodge/Update/Scroll.hs | 3 + src/Dodge/WallCreatureCollisions.hs | 1 - tags | 564 ++++++++++---------- 16 files changed, 532 insertions(+), 432 deletions(-) diff --git a/src/Dodge/Base/Coordinate.hs b/src/Dodge/Base/Coordinate.hs index 3d75c4fbe..3f1655217 100644 --- a/src/Dodge/Base/Coordinate.hs +++ b/src/Dodge/Base/Coordinate.hs @@ -2,13 +2,15 @@ module Dodge.Base.Coordinate ( worldPosToScreen, screenToWorldPos, mouseWorldPos, + mouseWorldPosW, worldPosToResOffset, ) where +import Dodge.Data.World import Control.Lens -import Dodge.Data.Camera +--import Dodge.Data.Camera import Dodge.Data.Config -import Dodge.Data.Input +--import Dodge.Data.Input import Dodge.WindowSize import Geometry import Linear @@ -37,6 +39,9 @@ worldPosToResOffset cfig cam p = mouseWorldPos :: Input -> Camera -> Point2 mouseWorldPos inp cam = screenToWorldPos cam (inp ^. mousePos) +mouseWorldPosW :: World -> Point2 +mouseWorldPosW w = mouseWorldPos (w ^. input) (w ^. wCam) + screenToWorldPos :: Camera -> Point2 -> Point2 screenToWorldPos cam p = (cam ^. camCenter) + (1 / (cam ^. camZoom)) *.* rotateV (cam ^. camRot) p diff --git a/src/Dodge/Data/Input.hs b/src/Dodge/Data/Input.hs index fc5ea6294..72ae6a076 100644 --- a/src/Dodge/Data/Input.hs +++ b/src/Dodge/Data/Input.hs @@ -26,7 +26,7 @@ data MouseContext | OverCombEscape | OverTerminal {_mcoTermID :: Int, _mcoTermStatus :: TerminalStatus} | OutsideTerminal - | MouseGameRotate + | MouseGameRotate {_mcoRotateDist :: Float} -- TODO warp mouse to this distance | OverDebug {_mcoDBBool :: DebugBool, _mcoDBInt :: Int} deriving (Show) diff --git a/src/Dodge/Event/Input.hs b/src/Dodge/Event/Input.hs index 5f5f064f6..becbbe5ad 100644 --- a/src/Dodge/Event/Input.hs +++ b/src/Dodge/Event/Input.hs @@ -49,9 +49,7 @@ handleMouseMotionEvent mmev cfig = set mousePos themousepos . set mouseMoving Tr where P (V2 x y) = mouseMotionEventPos mmev themousepos = - V2 - (fromIntegral x - 0.5 * windowXFloat cfig) - (0.5 * windowYFloat cfig - fromIntegral y) + V2 (fromIntegral x - 0.5 * windowXFloat cfig) (0.5 * windowYFloat cfig - fromIntegral y) handleMouseWheelEvent :: MouseWheelEventData -> Input -> Input handleMouseWheelEvent mwev = scrollAmount +~ fromIntegral y diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 0c528ffb4..6440094eb 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -1,4 +1,4 @@ ---{-# LANGUAGE TupleSections #-} +-- {-# LANGUAGE TupleSections #-} module Dodge.Inventory ( rmInvItem, destroyInvItem, @@ -14,15 +14,22 @@ module Dodge.Inventory ( swapItemWith, destroyItem, destroyAllInvItems, + multiSelScroll, + changeSwapSelSet, + concurrentIS, + collectInvItems, + shiftInvItemsUp, + shiftInvItemsDown, ) where -import Dodge.Euse -import Linear +import Control.Monad import Data.Function +import qualified Data.IntSet as IS import Data.Maybe import Dodge.Base import Dodge.Data.SelectionList import Dodge.Data.World +import Dodge.Euse import Dodge.Inventory.Location import Dodge.Inventory.RBList import Dodge.Inventory.Swap @@ -30,6 +37,7 @@ import Dodge.SelectionSections import Geometry import qualified IntMapHelp as IM import LensHelp +import Linear import ListHelp import NewInt @@ -65,7 +73,8 @@ destroyItem itid w = case w ^? cWorld . lWorld . items . ix itid . itLocation of Just InInv{_ilCrID = cid, _ilInvID = invid} -> destroyInvItem cid invid w Just OnTurret{} -> error "need to write code for destroying items on turrets" Just OnFloor -> - w & cWorld . lWorld . items . at itid .~ Nothing + w + & cWorld . lWorld . items . at itid .~ Nothing & cWorld . lWorld . floorItems . at itid .~ Nothing Just InVoid -> w & cWorld . lWorld . items . at itid .~ Nothing @@ -74,7 +83,7 @@ destroyItem itid w = case w ^? cWorld . lWorld . items . ix itid . itLocation of rmInvItem :: Int -> NewInt InvInt -> World -> World rmInvItem cid invid w = w - & dounequipfunction --the ordering of these is + & dounequipfunction -- the ordering of these is & pointcid . crInv %~ f -- important & removeAnySlotEquipment & cWorld . lWorld . items . ix itid . itLocation . ilEquipSite .~ Nothing @@ -97,12 +106,13 @@ rmInvItem cid invid w = itm = w ^?! cWorld . lWorld . items . ix itid dounequipfunction = effectOnRemove itm cr removeAnySlotEquipment = fromMaybe id $ do - epos <- itm ^? - itLocation - . ilEquipSite - . _Just + epos <- + itm + ^? itLocation + . ilEquipSite + . _Just return $ pointcid . crEquipment . at epos .~ Nothing --- return $ pointcid . crEquipment .~ mempty + -- return $ pointcid . crEquipment .~ mempty maxk = fmap fst $ IM.lookupMax $ _unNIntMap $ cr ^. crInv f inv = let (xs, ys) = IM.split (_unNInt invid) $ _unNIntMap inv @@ -114,14 +124,18 @@ rmInvItem cid invid w = updateCloseObjects :: World -> World updateCloseObjects w = - w & hud . closeItems %~ h citems + w + & hud . closeItems %~ h citems & hud . closeButtons %~ h cbts where h a b = intersect b a `union` a lw = w ^. cWorld . lWorld - citems = map NInt $ IM.keys $ IM.intersection (lw ^. items) - $ IM.filter (isclose . _flItPos) (lw^.floorItems) - cbts = lw^..buttons . each . filtered canpress . filtered (isclose . _btPos) . to _btID + citems = + map NInt $ + IM.keys $ + IM.intersection (lw ^. items) $ + IM.filter (isclose . _flItPos) (lw ^. floorItems) + cbts = lw ^.. buttons . each . filtered canpress . filtered (isclose . _btPos) . to _btID canpress bt = case bt ^. btEvent of ButtonPress{_btOn = t} -> not t ButtonAccessTerminal tid -> fromMaybe False $ do @@ -131,6 +145,66 @@ updateCloseObjects w = isclose x = dist y x < 40 && hasButtonLOS y x w y = you w ^. crPos . _xy +changeSwapSelSet :: Int -> World -> World +changeSwapSelSet yi w + | yi >= 0 = foldl' (&) w $ replicate yi (swapSelSet shiftSetUp) + | otherwise = foldl' (&) w $ replicate (negate yi) (swapSelSet shiftSetDown) + +swapSelSet :: (Int -> IS.IntSet -> World -> World) -> World -> World +swapSelSet f w = fromMaybe w $ do + Sel j _ is <- w ^. hud . diSelection + return $ + if concurrentIS is + then f j is w + else collectInvItems j is w + +shiftSetUp :: Int -> IS.IntSet -> World -> World +shiftSetUp j is w = fromMaybe w $ do + (mini, _) <- IS.minView is + guard (mini > 0) + return $ shiftInvItemsUp j is w + +shiftSetDown :: Int -> IS.IntSet -> World -> World +shiftSetDown j is w = fromMaybe w $ do + (maxi, _) <- IS.maxView is + (maxinv, _) <- IM.lookupMax =<< (w ^? hud . diSections . ix j . ssItems) + guard (maxi < maxinv) + return $ shiftInvItemsDown j is w + +shiftInvItemsDown :: Int -> IS.IntSet -> World -> World +shiftInvItemsDown j is w = fromMaybe w $ do + let i = IS.findMax is + guard . isJust $ w ^? hud . diSections . ix j . ssItems . ix i + return $ IS.foldr f w is + where + f i' = swapItemWith g (j, i') + g i' m = fst <$> IM.lookupGT i' m + + +shiftInvItemsUp :: Int -> IS.IntSet -> World -> World +shiftInvItemsUp j is w = IS.foldl' f w is + where + f w' i' = swapItemWith g (j, i') w' + g i' m = fst <$> IM.lookupLT i' m + +concurrentIS :: IS.IntSet -> Bool +concurrentIS = go . IS.minView + where + go x = fromMaybe True $ do + (i, is) <- x + (j, js) <- IS.minView is + return $ i + 1 == j && go (Just (j, js)) + +collectInvItems :: Int -> IS.IntSet -> World -> World +collectInvItems secid is w = fromMaybe w $ do + guard $ secid == 0 + (j, js) <- IS.minView is + return $ h j js w + where + h j js w' = fromMaybe w' $ do + (k, ks) <- IS.minView js + return . h (j + 1) ks $ swapInvItems (\_ _ -> Just (j + 1)) k w' + changeSwapSel :: Int -> World -> World changeSwapSel yi w | yi >= 0 = foldl' (&) w $ replicate yi (changeSwapWith $ f IM.cycleLT) @@ -138,6 +212,24 @@ changeSwapSel yi w where f g i m = fst <$> g i m +multiSelScroll :: Int -> World -> World +multiSelScroll yi w + | yi >= 0 = foldl' (&) w $ replicate yi (multiSelScroll' $ f IM.lookupLT) + | otherwise = foldl' (&) w $ replicate (negate yi) (multiSelScroll' $ f IM.lookupGT) + where + f g i m = fst <$> g i m + +multiSelScroll' :: (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> World -> World +multiSelScroll' f w = fromMaybe w $ do + Sel j i is <- w ^. hud . diSelection + ss <- w ^? hud . diSections . ix j . ssItems + k <- f i ss + let insertordelete = if k `IS.member` is then IS.delete i else IS.insert i . IS.insert k + return $ + w + & hud . diSelection . _Just . slSet %~ insertordelete + & hud . diSelection . _Just . slInt .~ k + changeSwapOther :: ((Int -> Identity Int) -> ManipulatedObject -> Identity ManipulatedObject) -> Int -> @@ -155,7 +247,13 @@ changeSwapOther manlens n f i w = fromMaybe w $ do return $ w & swapAnyExtraSelection i k - & cWorld . lWorld . creatures . ix 0 . crManipulation . manObject . manlens + & cWorld + . lWorld + . creatures + . ix 0 + . crManipulation + . manObject + . manlens %~ doswap & hud . closeItems %~ swapIndices i k & hud . diSelection . _Just . slInt %~ doswap @@ -173,8 +271,8 @@ swapItemWith f (j, i) = case j of _ -> id changeSwapWith :: (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> World -> World -changeSwapWith f w - | Just (Sel j i _) <- w ^. hud . diSelection = swapItemWith f (j,i) w +changeSwapWith f w + | Just (Sel j i _) <- w ^. hud . diSelection = swapItemWith f (j, i) w | otherwise = w invSetSelection :: Selection -> World -> World @@ -192,7 +290,8 @@ scrollAugInvSel :: Int -> World -> World scrollAugInvSel yi w | yi == 0 = w | otherwise = - w & hud %~ doscroll + w + & hud %~ doscroll & worldEventFlags . at InventoryChange ?~ () & setInvPosFromSS & cWorld . lWorld %~ crUpdateItemLocations 0 @@ -203,7 +302,8 @@ scrollAugInvSel yi w scrollAugNextInSection :: World -> World scrollAugNextInSection w = - w & hud %~ doscroll + w + & hud %~ doscroll & worldEventFlags . at InventoryChange ?~ () & setInvPosFromSS & cWorld . lWorld %~ crUpdateItemLocations 0 diff --git a/src/Dodge/Placement/Instance/Button.hs b/src/Dodge/Placement/Instance/Button.hs index 292e7cb00..4a2a4c9b2 100644 --- a/src/Dodge/Placement/Instance/Button.hs +++ b/src/Dodge/Placement/Instance/Button.hs @@ -1,4 +1,8 @@ -module Dodge.Placement.Instance.Button where +module Dodge.Placement.Instance.Button ( + putLitButOnPos, + extTrigLitPos, + putLitButOnPosExtTrig, +) where import Color import Control.Lens @@ -8,54 +12,54 @@ import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.Switch import Dodge.LightSource import Dodge.Placement.Instance.LightSource -import Dodge.PlacementSpot +--import Dodge.PlacementSpot import Geometry import Shape -triggerSwitchSPic :: Color -> Color -> PlacementSpot -> Placement -triggerSwitchSPic c1 c2 ps = psPtCont ps (PutTrigger False) $ - \tp -> - Just $ - pContID - ps - ( PutButton - ( makeSwitch - c1 - c2 - (SetTrigger True $ trigid tp) - (SetTrigger False $ trigid tp) - ) - ) - (const Nothing) - where - trigid tp = fromJust $ _plMID tp +--triggerSwitchSPic :: Color -> Color -> PlacementSpot -> Placement +--triggerSwitchSPic c1 c2 ps = psPtCont ps (PutTrigger False) $ +-- \tp -> +-- Just $ +-- pContID +-- ps +-- ( PutButton +-- ( makeSwitch +-- c1 +-- c2 +-- (SetTrigger True $ trigid tp) +-- (SetTrigger False $ trigid tp) +-- ) +-- ) +-- (const Nothing) +-- where +-- trigid tp = fromJust $ _plMID tp +-- +--triggerSwitchSPicLight :: Color -> Color -> PlacementSpot -> Placement +--triggerSwitchSPicLight c1 c2 ps = psPtCont ps (PutTrigger False) $ +-- \tp -> Just $ +-- pContID atFstLnkOut (PutLS thels) $ +-- \lsid -> +-- Just $ +-- pContID +-- ps +-- (PutButton (makeSwitch c1 c2 (oneff lsid $ trigid tp) (offeff lsid $ trigid tp))) +-- (const Nothing) +-- where +-- thels = lsColPosRad (V3 0.5 0 0) (V3 0 0 78) 75 +-- trigid tp = fromJust $ _plMID tp +-- oneff lsid tid = WorldEffects [SetLSCol (V3 0 0.5 0) lsid, SetTrigger True tid] +-- offeff lsid tid = WorldEffects [SetLSCol (V3 0.5 0 0) lsid, SetTrigger False tid] -triggerSwitchSPicLight :: Color -> Color -> PlacementSpot -> Placement -triggerSwitchSPicLight c1 c2 ps = psPtCont ps (PutTrigger False) $ - \tp -> Just $ - pContID atFstLnkOut (PutLS thels) $ - \lsid -> - Just $ - pContID - ps - (PutButton (makeSwitch c1 c2 (oneff lsid $ trigid tp) (offeff lsid $ trigid tp))) - (const Nothing) - where - thels = lsColPosRad (V3 0.5 0 0) (V3 0 0 78) 75 - trigid tp = fromJust $ _plMID tp - oneff lsid tid = WorldEffects [SetLSCol (V3 0 0.5 0) lsid, SetTrigger True tid] - offeff lsid tid = WorldEffects [SetLSCol (V3 0.5 0 0) lsid, SetTrigger False tid] - -triggerSwitch :: Color -> PlacementSpot -> Placement -triggerSwitch col ps = psPtCont ps (PutTrigger False) $ - \tp -> - Just $ - pContID - ps - (PutButton (makeSwitch col col (SetTrigger True $ trigid tp) (SetTrigger False $ trigid tp))) - (const Nothing) - where - trigid tp = fromJust $ _plMID tp +--triggerSwitch :: Color -> PlacementSpot -> Placement +--triggerSwitch col ps = psPtCont ps (PutTrigger False) $ +-- \tp -> +-- Just $ +-- pContID +-- ps +-- (PutButton (makeSwitch col col (SetTrigger True $ trigid tp) (SetTrigger False $ trigid tp))) +-- (const Nothing) +-- where +-- trigid tp = fromJust $ _plMID tp putLitButOnPos :: Color -> PlacementSpot -> (Placement -> Maybe Placement) -> Placement putLitButOnPos col theps subpl = diff --git a/src/Dodge/Placement/Instance/LightSource.hs b/src/Dodge/Placement/Instance/LightSource.hs index ead6339d4..e7b2db043 100644 --- a/src/Dodge/Placement/Instance/LightSource.hs +++ b/src/Dodge/Placement/Instance/LightSource.hs @@ -45,7 +45,7 @@ mntLSOn shapeF ls wallp lsp@(V3 lx ly _) = ps0jPushPS (PutLabel "light") . ps0jPushPS (putShape $ shapeF wallp lsp) --ps0j (PutLabel "light") . - --ps0j (putShape . setCol $ shapeF wallp lsp) + --ps0j (putShape $ shapeF wallp lsp) . pt0 (PutLS $ ls & lsParam . lsPos .~ lsp') where lsp' = lsp -.-.- V3 x y 1 @@ -96,38 +96,17 @@ aShape wallpos (V3 x y z) = girder (z + 2) 20 10 pout wallpos pout = V2 x y -.- 2 *.* squashNormalizeV (V2 x y -.- wallpos) vShape :: Point2 -> Point3 -> Shape -vShape wallpos (V3 x y z) = - thinHighBar z wallposUp lxy - <> thinHighBar z wallposDown lxy +vShape p (V3 x y z) = abar n <> abar (-n) where + abar a = thinHighBar z (p + a) lxy lxy = V2 x y - n = vNormal (wallpos -.- lxy) - wallposUp = wallpos +.+ n - wallposDown = wallpos -.- n + n = vNormal (p - lxy) mntLS :: (Point2 -> Point3 -> Shape) -> Point2 -> Point3 -> Placement mntLS shp wallp lampp = mntLSOn shp defaultLS wallp lampp (const Nothing) where defaultLS = LS 0 $ LSParam 0 300 0.6 ---mntLSCol :: (Point2 -> Point3 -> Shape) -> Color -> Point2 -> Point3 -> Placement ---mntLSCol shp col wallp lampp = mntLSOn shp (Just col) defaultLS wallp lampp (const Nothing) --- where --- defaultLS = LS 0 $ LSParam 0 200 0.6 - ---mntLSLampCol :: (Point2 -> Point3 -> Shape) -> Color -> Point2 -> Point3 -> Placement ---mntLSLampCol shp (V4 x y z _) wallp lampp = --- mntLSOn --- shp --- Nothing --- (defaultLS & lsParam . lsCol .~ col) --- wallp --- lampp --- (const Nothing) --- where --- col = V3 x y z --- defaultLS = LS 0 $ LSParam 0 200 0.6 - mntLSCond :: (Point2 -> Point3 -> Shape) -> -- -> (RoomPos -> Room -> Maybe (PlacementSpot,RoomPos)) diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index edd5f0e43..6a8da64af 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -92,7 +92,6 @@ placeSpotRoomRand :: placeSpotRoomRand rid i f plmnt w = let (ps, g) = runState - -- (_rmRandPSs (w ^?! genRooms . ix rid) !! i) (w ^?! genRooms . ix rid . rmRandPSs . ix i) $ w ^. gwWorld . randGen in placeSpot rid (w & gwWorld . randGen .~ g) (plmnt & plSpot .~ f ps) @@ -143,11 +142,11 @@ placeSpotID rid ps pt w = case pt of PutChasm ps' qs -> ( 0 , placeChasm - w rid ps' (map (map doShift) ps') (foldMap (loopPairs . map doShift) qs) + w ) PutLabel{} -> (0, w) where @@ -156,13 +155,12 @@ placeSpotID rid ps pt w = case pt of doShift = shiftPointBy (p, rot) pashift = compP2A (p, rot) -placeChasm :: GenWorld -> Int -> [[Point2]] -> [[Point2]] -> [(Point2, Point2)] -> GenWorld -placeChasm gw rid ps shiftps cfs = - gw - & gwWorld . cWorld . chasms <>~ shiftps - & gwWorld . cWorld . cliffs <>~ cfs - & genRooms . ix rid . rmPos %~ filter (\rp -> not $ any (pointInPoly (_rpPos rp)) ps) - & gwWorld %~ f +placeChasm :: Int -> [[Point2]] -> [[Point2]] -> [(Point2, Point2)] -> GenWorld -> GenWorld +placeChasm rid ps shiftps cfs = + (gwWorld . cWorld . chasms <>~ shiftps) + . (gwWorld . cWorld . cliffs <>~ cfs) + . (genRooms . ix rid . rmPos %~ filter (\rp -> not $ any (pointInPoly (_rpPos rp)) ps)) + . (gwWorld %~ f) where -- f w = foldl' g w (loopPairs shiftps) f w = foldl' g w cfs @@ -201,9 +199,14 @@ plMachine :: plMachine wallpoly mc mitm p rot gw = ( mcid , gw - & tolw . machines . at mcid ?~ themc - & gwWorld %~ placeMachineWalls (_mcMaterial mc) wallpoly mcid wlid - & tolw %~ maybe id placeturretitm mitm + & tolw + . machines + . at mcid + ?~ themc + & gwWorld + %~ placeMachineWalls (_mcMaterial mc) wallpoly mcid wlid + & tolw + %~ maybe id placeturretitm mitm ) where tolw = gwWorld . cWorld . lWorld @@ -221,9 +224,13 @@ plMachine wallpoly mc mitm p rot gw = placeMachineWalls :: Material -> [Point2] -> Int -> Int -> World -> World placeMachineWalls mat poly mcid = insertStructureWalls MachinePart baseWall poly mcid where - baseWall = defaultMachineWall - & wlStructure . wsMachine .~ mcid - & wlMaterial .~ mat + baseWall = + defaultMachineWall + & wlStructure + . wsMachine + .~ mcid + & wlMaterial + .~ mat mvLS :: Point2 -> Float -> LightSource -> LightSource mvLS x rot = lsParam . lsPos . _xy %~ ((+ x) . rotateV rot) diff --git a/src/Dodge/Render/Picture.hs b/src/Dodge/Render/Picture.hs index 96acd225c..ef2a4f476 100644 --- a/src/Dodge/Render/Picture.hs +++ b/src/Dodge/Render/Picture.hs @@ -115,7 +115,7 @@ mouseCursorType u = case u ^. uvWorld . input . mouseContext of OverCombEscape -> rotate (pi / 4) $ drawPlus 5 OverTerminal _ ts -> drawCursorByTerminalStatus ts OutsideTerminal -> rotate (pi / 4) $ drawPlus 5 - MouseGameRotate -> rotate a (drawVerticalDoubleArrow 5) + MouseGameRotate {} -> rotate a (drawVerticalDoubleArrow 5) OverDebug {} -> drawPlus 5 <> rotate (pi/4) (drawPlus 5) --OverDebug db i -> scale 0.1 0.1 $ text (show db ++ show i) where diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index d4da314e6..11c11eed4 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -303,9 +303,9 @@ chasmSpitTerminal = do l3 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> f rp East North l4 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> f rp East South ls <- takeOne [[l1,l2],[l3,l4] - ,[spanLightI (V2 120 0) (V2 120 300)] - , [spanLightI (V2 0 128) (V2 300 128)] - , [spanLightI (V2 300 0) (V2 0 300), sps0 $ putShape $ thinHighBar 95 0 300] +-- ,[spanLightI (V2 120 0) (V2 120 300)] +-- , [spanLightI (V2 0 128) (V2 300 128)] +-- , [spanLightI (V2 300 0) (V2 0 300), sps0 $ putShape $ thinHighBar 95 0 300] ] gh <- takeOne [55,75,97] gird <- takeOne [girderZ gh 30 10,girder gh 30 10,girderV gh 30 10] diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index d4bb933fd..dbc7d3536 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -33,7 +33,7 @@ import Data.Monoid import RandomHelp testStringInit :: Universe -> [String] -testStringInit u = fmap show $ u ^.. uvWorld . cWorld . lWorld . doors . each . drUpdate . drLerpTimer +testStringInit u = [show $ u ^? uvWorld . input . mouseContext . mcoRotateDist] -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcType . _McDamSensor . sensAmount) -- <> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial) --testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir) diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index a37c7ca8d..42dba246b 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -155,10 +155,32 @@ updateUniverseLast u = %~ M.union (fmap (const mp) (u ^. uvWorld . input . mouseButtons)) & uvWorld . input . heldWorldPos %~ M.union (fmap (const mwp) (u ^. uvWorld . input . mouseButtons)) + & uvIOEffects %~ doMouseWarping u where mp = u ^. uvWorld . input . mousePos mwp = screenToWorldPos (u ^. uvWorld . wCam) mp +doMouseWarping :: p -> a -> a +doMouseWarping _ = id + +--doMouseWarping :: Universe -> (Universe -> IO Universe) -> (Universe -> IO Universe) +--doMouseWarping u f u' +-- | Just x <- u ^? uvWorld . input . mouseContext . mcoRotateDist +-- = SDL.warpMouse WarpCurrentFocus (P p) >> f (u' & uvWorld . input . mousePos .~ nmp) +-- | otherwise = f u' +-- where +-- cfig = u' ^. uvConfig +-- nmp = V2 +-- (fromIntegral x - 0.5 * windowXFloat cfig) +-- (0.5 * windowYFloat cfig - fromIntegral y) +-- p@(V2 x y) = (cwin + (msp & each %~ round)) & each %~ fromIntegral +-- cwin :: V2 Int +-- cwin = ((getWindowSize _gr_world_res (u' ^. uvConfig))) +-- mwp = mouseWorldPosW (u' ^. uvWorld) +-- msp = u' ^. uvWorld . input . mousePos & _y %~ negate +-- cc = u' ^. uvWorld . wCam . camCenter +-- d = dist mwp cc + {- For most menus the only way to change the world is using event handling. -} updateUniverseMid :: Universe -> Universe updateUniverseMid u = case _uvScreenLayers u of @@ -380,14 +402,17 @@ updateMouseContextGame :: Config -> Universe -> MouseContext -> MouseContext updateMouseContextGame cfig u = \case OverInvDrag i _ -> OverInvDrag i (inverseSelNumPos cfig invDP mpos disss) x@OverInvDragSelect{} -> x - _ -> fromMaybe aimcontext (isrotatedrag <|> overterm <|> overinv <|> overcomb) + MouseGameRotate x + | ButtonRight `M.member` (w ^. input . mouseButtons) -> MouseGameRotate x + --_ -> fromMaybe aimcontext (isrotatedrag <|> overterm <|> overinv <|> overcomb) + _ -> fromMaybe aimcontext (overterm <|> overinv <|> overcomb) where w = u ^. uvWorld - isrotatedrag = do - t1 <- w ^. input . mouseButtons . at ButtonLeft - t2 <- w ^. input . mouseButtons . at ButtonRight - guard $ t1 > t2 - return MouseGameRotate +-- isrotatedrag = do +-- t1 <- w ^. input . mouseButtons . at ButtonLeft +-- t2 <- w ^. input . mouseButtons . at ButtonRight +-- guard $ t1 > t2 +-- return $ MouseGameRotate (dist (mouseWorldPosW w) (w ^. wCam . camCenter)) aimcontext | ButtonRight `M.member` (w ^. input . mouseButtons) = MouseAiming | Display_debug `S.member` (cfig ^. debug_booleans) = getDebugMouseOver u diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index 371fdc2a4..c571c153b 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -203,7 +203,7 @@ viewDistanceFromItems _ = 1 rotateCamera :: Config -> World -> World rotateCamera cfig w - | MouseGameRotate <- w ^. input . mouseContext + | MouseGameRotate {} <- w ^. input . mouseContext , Just rotation <- angleBetween (w ^. input . mousePos) <$> (w ^. input . heldPos . at SDL.ButtonRight) = diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index b88b8a924..16f2ac814 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -5,6 +5,7 @@ module Dodge.Update.Input.InGame ( updateMouseInGame, ) where +import Dodge.Base.Coordinate import Dodge.Button.Event import Control.Applicative import Control.Monad @@ -98,7 +99,7 @@ updateMouseHeldInGame :: Config -> World -> World updateMouseHeldInGame cfig w = case w ^. input . mouseContext of OverInvDragSelect{} | ButtonRight `M.member` (w ^. input . mouseButtons) -> - w & input . mouseContext .~ MouseGameRotate + w & input . mouseContext .~ MouseGameRotate (dist (mouseWorldPosW w) (w ^. wCam . camCenter)) OverInvDragSelect (Just sstart) _ -> let sss = w ^. hud . diSections msel = inverseSelNumPos cfig invDP (w ^. input . mousePos) sss @@ -289,23 +290,6 @@ startDrag (a, b) w = setcontext $ case w ^? hud . diSelection . _Just of where setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b)) -concurrentIS :: IS.IntSet -> Bool -concurrentIS = go . IS.minView - where - go x = fromMaybe True $ do - (i, is) <- x - (j, js) <- IS.minView is - return $ i + 1 == j && go (Just (j, js)) - -collectInvItems :: Int -> IS.IntSet -> World -> World -collectInvItems secid is w = fromMaybe w $ do - guard $ secid == 0 - (j, js) <- IS.minView is - return $ h j js w - where - h j js w' = fromMaybe w' $ do - (k, ks) <- IS.minView js - return . h (j + 1) ks $ swapInvItems (\_ _ -> Just (j + 1)) k w' shiftInvItems :: Config -> @@ -346,20 +330,6 @@ setSelWhileDragging w = fromMaybe w $ do guard $ i == k && j `IS.member` xs return $ w & hud . diSelection . _Just . slInt .~ j -shiftInvItemsUp :: Int -> IS.IntSet -> World -> World -shiftInvItemsUp j is w = IS.foldl' f w is - where - f w' i' = swapItemWith g (j, i') w' - g i' m = fst <$> IM.lookupLT i' m - -shiftInvItemsDown :: Int -> IS.IntSet -> World -> World -shiftInvItemsDown j is w = fromMaybe w $ do - let i = IS.findMax is - guard . isJust $ w ^? hud . diSections . ix j . ssItems . ix i - return $ IS.foldr f w is - where - f i' = swapItemWith g (j, i') - g i' m = fst <$> IM.lookupGT i' m updateFunctionKeys :: Universe -> Universe updateFunctionKeys u = diff --git a/src/Dodge/Update/Scroll.hs b/src/Dodge/Update/Scroll.hs index 22b21a7d4..7ffbfb7dc 100644 --- a/src/Dodge/Update/Scroll.hs +++ b/src/Dodge/Update/Scroll.hs @@ -35,7 +35,10 @@ updateBaseWheelEvent yi w EquipOptions{} -> w & rbState . opSel %~ scrollRBOption yi rbscrollmax NoRightButtonState -> fromMaybe w (selectedItemScroll yi w) | bdown ButtonLeft = w & wCam . camZoom +~ fromIntegral yi + | ScancodeCapsLock `M.member` _pressedKeys (_input w) + , ScancodeLShift `M.member` (w ^. input . pressedKeys) = changeSwapSelSet yi w | ScancodeCapsLock `M.member` _pressedKeys (_input w) = changeSwapSel yi w + | ScancodeLShift `M.member` (w ^. input . pressedKeys) = multiSelScroll yi w | otherwise = scrollAugInvSel yi w where bdown b = w & has (input . mouseButtons . ix b) diff --git a/src/Dodge/WallCreatureCollisions.hs b/src/Dodge/WallCreatureCollisions.hs index 31af60c1b..5dc55169b 100644 --- a/src/Dodge/WallCreatureCollisions.hs +++ b/src/Dodge/WallCreatureCollisions.hs @@ -17,7 +17,6 @@ import Dodge.Zoning.Wall import Geometry colCrsWalls :: Universe -> Universe ---colCrsWalls uv = uv colCrsWalls uv = uv & uvWorld . cWorld . lWorld . creatures %~ fmap (noclipCheck (_uvConfig uv) (_uvWorld uv)) noclipCheck :: Config -> World -> Creature -> Creature diff --git a/tags b/tags index 453a62a87..c385b8425 100644 --- a/tags +++ b/tags @@ -576,6 +576,7 @@ InanimateAI src/Dodge/Data/Creature/Misc.hs 39;" C IncendiaryBall src/Dodge/Data/EnergyBall/Type.hs 11;" C InheritFloor src/Data/Tile.hs 12;" C Input src/Dodge/Data/Input.hs 33;" t +InputMemory src/Dodge/Data/Input.hs 52;" t InputScreen src/Dodge/Data/Universe.hs 92;" C Inspect_wall src/Dodge/Data/Config.hs 106;" C Institution src/Dodge/Data/Scenario.hs 42;" t @@ -695,7 +696,7 @@ MODBlockedString src/Dodge/Data/Universe.hs 106;" C MODString src/Dodge/Data/Universe.hs 105;" C MODStringOption src/Dodge/Data/Universe.hs 107;" C MOTOR src/Dodge/Data/Item/Combine.hs 63;" C -MPO src/Dodge/Base/Collide.hs 96;" t +MPO src/Dodge/Base/Collide.hs 95;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 12;" C Machine src/Dodge/Data/Machine.hs 30;" t @@ -1297,15 +1298,15 @@ TO src/Shader/Data.hs 59;" t TRACTORGUN src/Dodge/Data/Item/Combine.hs 168;" C TRANSFORMER src/Dodge/Data/Item/Combine.hs 64;" C TRANSMITTER src/Dodge/Data/Item/Combine.hs 70;" C -TSbackspace src/Dodge/Data/Input.hs 54;" C -TSdelete src/Dodge/Data/Input.hs 55;" C -TSdown src/Dodge/Data/Input.hs 60;" C -TSescape src/Dodge/Data/Input.hs 52;" C -TSleft src/Dodge/Data/Input.hs 57;" C -TSreturn src/Dodge/Data/Input.hs 53;" C -TSright src/Dodge/Data/Input.hs 58;" C -TStab src/Dodge/Data/Input.hs 56;" C -TSup src/Dodge/Data/Input.hs 59;" C +TSbackspace src/Dodge/Data/Input.hs 59;" C +TSdelete src/Dodge/Data/Input.hs 60;" C +TSdown src/Dodge/Data/Input.hs 65;" C +TSescape src/Dodge/Data/Input.hs 57;" C +TSleft src/Dodge/Data/Input.hs 62;" C +TSreturn src/Dodge/Data/Input.hs 58;" C +TSright src/Dodge/Data/Input.hs 63;" C +TStab src/Dodge/Data/Input.hs 61;" C +TSup src/Dodge/Data/Input.hs 64;" C TUBE src/Dodge/Data/Item/Combine.hs 51;" C TabComplete src/Dodge/Terminal.hs 160;" C TabCompletion src/Dodge/Terminal.hs 158;" t @@ -1319,7 +1320,7 @@ TargetRBPress src/Dodge/Data/Item/Targeting.hs 10;" C TargetingLaser src/Dodge/Data/Laser.hs 16;" C TargetingType src/Dodge/Data/Item/Targeting.hs 9;" t TeleSound src/Dodge/Data/SoundOrigin.hs 36;" C -TermSignal src/Dodge/Data/Input.hs 51;" t +TermSignal src/Dodge/Data/Input.hs 56;" t Terminal src/Dodge/Data/Terminal.hs 19;" t TerminalDeactivated src/Dodge/Data/Terminal/Status.hs 12;" C TerminalLine src/Dodge/Data/Terminal.hs 36;" t @@ -1474,6 +1475,8 @@ WarmTime src/Dodge/Data/Item/Params.hs 19;" C WarmUpCoolDown src/Dodge/Data/TriggerType.hs 14;" C WarmUpNoDelay src/Dodge/Data/TriggerType.hs 19;" C WarningCry src/Dodge/Data/ActionPlan.hs 137;" C +WasMouseGameRotating src/Dodge/Data/Input.hs 53;" C +WasNotMouseGameRotating src/Dodge/Data/Input.hs 54;" C WatchAndWait src/Dodge/Data/ActionPlan.hs 135;" C WdBl src/Dodge/Data/WorldEffect.hs 57;" t WdBlBtOn src/Dodge/Data/WorldEffect.hs 63;" C @@ -1902,6 +1905,7 @@ _incGraph src/Dodge/Data/CWorld.hs 29;" f _incNode src/Dodge/Data/CWorld.hs 30;" f _incNodeZoning src/Dodge/Data/World.hs 55;" f _input src/Dodge/Data/World.hs 43;" f +_inputMemory src/Dodge/Data/Input.hs 49;" f _isWarming src/Dodge/Data/Item/Params.hs 21;" f _ispCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 30;" f _ispCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 28;" f @@ -1999,6 +2003,7 @@ _mcoInvFilt src/Dodge/Data/Input.hs 22;" f _mcoInvSelect src/Dodge/Data/Input.hs 21;" f _mcoMaybeSelect src/Dodge/Data/Input.hs 19;" f _mcoMenuClick src/Dodge/Data/Input.hs 17;" f +_mcoRotateDist src/Dodge/Data/Input.hs 29;" f _mcoSecSelStart src/Dodge/Data/Input.hs 20;" f _mcoSelEnd src/Dodge/Data/Input.hs 20;" f _mcoTermID src/Dodge/Data/Input.hs 27;" f @@ -2508,11 +2513,11 @@ _wsMachine src/Dodge/Data/Wall/Structure.hs 13;" f _xNum src/Dodge/Data/Item/Combine.hs 140;" f _xNum src/Dodge/Data/Item/Combine.hs 150;" f _xNum src/Dodge/Data/Item/Combine.hs 170;" f -aBar src/Dodge/Placement/Instance/LightSource.hs 69;" f +aBar src/Dodge/Placement/Instance/LightSource.hs 68;" 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 94;" f +aShape src/Dodge/Placement/Instance/LightSource.hs 93;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f accessTerminal src/Dodge/WorldEffect.hs 65;" f @@ -2544,7 +2549,7 @@ addIndefiniteArticle src/StringHelp.hs 17;" f addLightsNGon src/Dodge/Room/Modify.hs 41;" f addNodesCrossing src/Dodge/Room/Path.hs 28;" f addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" f -addPane src/Dodge/Placement/PlaceSpot.hs 176;" f +addPane src/Dodge/Placement/PlaceSpot.hs 174;" f addPointPolygon src/Geometry/Polygon.hs 142;" f addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f @@ -2557,7 +2562,7 @@ addToTrunk src/TreeHelp.hs 157;" f addWarningTerminal src/Dodge/Room/Warning.hs 94;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 454;" f +advanceScrollAmount src/Dodge/Update.hs 479;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f aimDelaySweep src/Dodge/Render/Picture.hs 285;" f aimStanceInfo src/Dodge/Item/Info.hs 242;" f @@ -2569,7 +2574,7 @@ airlockCrystal src/Dodge/Room/Airlock.hs 252;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 105;" f airlockSimple src/Dodge/Room/Airlock.hs 130;" f airlockZ src/Dodge/Room/Airlock.hs 167;" f -allVisibleWalls src/Dodge/Base/Collide.hs 225;" f +allVisibleWalls src/Dodge/Base/Collide.hs 224;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f @@ -2585,7 +2590,7 @@ angleBetween src/Geometry.hs 158;" f angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 122;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f -anythingHitCirc src/Dodge/Base/Collide.hs 343;" f +anythingHitCirc src/Dodge/Base/Collide.hs 331;" f applyCME src/Dodge/HeldUse.hs 387;" f applyClip src/Dodge/Debug.hs 138;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f @@ -2731,7 +2736,7 @@ boolOption src/Dodge/Menu/OptionType.hs 12;" f bossKeyItems src/Dodge/LockAndKey.hs 13;" f bossRoom src/Dodge/Room/Boss.hs 55;" f bounceDir src/Dodge/Bullet.hs 111;" f -bouncePoint src/Dodge/Base/Collide.hs 86;" f +bouncePoint src/Dodge/Base/Collide.hs 85;" f bounceSound src/Dodge/Projectile/Update.hs 74;" f boundPoints src/Bound.hs 9;" f boundPointsRect src/Bound.hs 23;" f @@ -2762,13 +2767,13 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 17;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f -cChasm src/Dodge/Room/Tutorial.hs 132;" f +cChasm src/Dodge/Room/Tutorial.hs 131;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 329;" f -canSeeIndirect src/Dodge/Base/Collide.hs 336;" f +canSee src/Dodge/Base/Collide.hs 317;" f +canSeeIndirect src/Dodge/Base/Collide.hs 324;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f card8Vec src/Dodge/Base/CardinalPoint.hs 17;" f @@ -2785,9 +2790,10 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 270;" f centroid src/Geometry/Polygon.hs 192;" f centroidNum src/Geometry/Polygon.hs 195;" f chainPairs src/Geometry.hs 360;" f -changeSwapOther src/Dodge/Inventory.hs 141;" f -changeSwapSel src/Dodge/Inventory.hs 134;" f -changeSwapWith src/Dodge/Inventory.hs 175;" f +changeSwapOther src/Dodge/Inventory.hs 233;" f +changeSwapSel src/Dodge/Inventory.hs 208;" f +changeSwapSelSet src/Dodge/Inventory.hs 147;" f +changeSwapWith src/Dodge/Inventory.hs 273;" f charToTuple src/Picture/Base.hs 312;" f charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f @@ -2799,21 +2805,21 @@ chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f chasmRotate src/Dodge/Creature/Update.hs 175;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 356;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 297;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 296;" f chasmTestCorpse src/Dodge/Creature/Update.hs 156;" f chasmTestLiving src/Dodge/Creature/Update.hs 137;" f -chasmWallToSurface src/Dodge/Base/Collide.hs 119;" f +chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 78;" f checkDeath' src/Dodge/Creature/Update.hs 81;" f -checkEndGame src/Dodge/Update.hs 830;" f +checkEndGame src/Dodge/Update.hs 855;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 93;" f -checkTermDist src/Dodge/Update.hs 366;" f +checkTermDist src/Dodge/Update.hs 388;" f checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f @@ -2825,12 +2831,12 @@ chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 35;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 61;" f -circHitWall src/Dodge/Base/Collide.hs 242;" f +circHitWall src/Dodge/Base/Collide.hs 237;" f circInPolygon src/Geometry/Polygon.hs 110;" f -circOnAnyCr src/Dodge/Base/Collide.hs 293;" f +circOnAnyCr src/Dodge/Base/Collide.hs 282;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f -circOnSomeWall src/Dodge/Base/Collide.hs 287;" f +circOnSomeWall src/Dodge/Base/Collide.hs 276;" f circle src/Picture/Base.hs 172;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 62;" f circleSolid src/Picture/Base.hs 156;" f @@ -2851,7 +2857,7 @@ cleatSide src/Dodge/Cleat.hs 27;" f click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 783;" f clicker src/Dodge/Item/Scope.hs 88;" f clipV src/Geometry/Vector.hs 48;" f -clipZoom src/Dodge/Update/Camera.hs 239;" f +clipZoom src/Dodge/Update/Camera.hs 233;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 205;" f @@ -2866,22 +2872,22 @@ 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 29;" f +colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 53;" f -collectInvItems src/Dodge/Update/Input/InGame.hs 300;" f -collide3 src/Dodge/Base/Collide.hs 128;" f -collide3Chasm src/Dodge/Base/Collide.hs 112;" f -collide3Chasms src/Dodge/Base/Collide.hs 104;" f -collide3Creature src/Dodge/Base/Collide.hs 161;" f -collide3Floors src/Dodge/Base/Collide.hs 142;" f -collide3Wall src/Dodge/Base/Collide.hs 156;" f -collide3Walls src/Dodge/Base/Collide.hs 137;" f -collide3WallsFloor src/Dodge/Base/Collide.hs 98;" f -collideCircWalls src/Dodge/Base/Collide.hs 254;" f -collidePoint src/Dodge/Base/Collide.hs 52;" f -collidePointTestFilter src/Dodge/Base/Collide.hs 189;" f -collidePointWallsFilter src/Dodge/Base/Collide.hs 203;" f +collectInvItems src/Dodge/Inventory.hs 198;" f +collide3 src/Dodge/Base/Collide.hs 127;" f +collide3Chasm src/Dodge/Base/Collide.hs 111;" f +collide3Chasms src/Dodge/Base/Collide.hs 103;" f +collide3Creature src/Dodge/Base/Collide.hs 160;" f +collide3Floors src/Dodge/Base/Collide.hs 141;" f +collide3Wall src/Dodge/Base/Collide.hs 155;" f +collide3Walls src/Dodge/Base/Collide.hs 136;" f +collide3WallsFloor src/Dodge/Base/Collide.hs 97;" f +collideCircWalls src/Dodge/Base/Collide.hs 249;" f +collidePoint src/Dodge/Base/Collide.hs 51;" f +collidePointTestFilter src/Dodge/Base/Collide.hs 188;" f +collidePointWallsFilter src/Dodge/Base/Collide.hs 202;" f color src/Picture/Base.hs 100;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 234;" f @@ -2909,12 +2915,12 @@ composeTree src/Dodge/Tree/Compose.hs 48;" f compressor src/Dodge/Item/Ammo.hs 74;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 665;" f conEffects src/Dodge/Concurrent.hs 12;" f -concurrentIS src/Dodge/Update/Input/InGame.hs 292;" f +concurrentIS src/Dodge/Inventory.hs 190;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 745;" f constructEdges src/Polyhedra.hs 31;" f constructEdgesList src/Polyhedra.hs 40;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f -continueTerminal src/Dodge/Update/Input/InGame.hs 407;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 377;" f convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -2936,7 +2942,7 @@ crAwayFromPost src/Dodge/Creature/Test.hs 86;" f crBlips src/Dodge/RadarSweep.hs 88;" f crCamouflage src/Dodge/Creature/Picture.hs 33;" f crCanSeeCr src/Dodge/Creature/Test.hs 53;" f -crCrSpring src/Dodge/Update.hs 942;" f +crCrSpring src/Dodge/Update.hs 967;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f crDeathSounds src/Dodge/Creature/Vocalization.hs 45;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f @@ -2944,7 +2950,7 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f crHasTarget src/Dodge/Creature/Test.hs 66;" f crHasTargetLOS src/Dodge/Creature/Test.hs 69;" f -crHeight src/Dodge/Base/Collide.hs 174;" f +crHeight src/Dodge/Base/Collide.hs 173;" f crHit src/Dodge/WorldEvent/ThingsHit.hs 121;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f @@ -2963,12 +2969,12 @@ crMvForward src/Dodge/Creature/Impulse/Movement.hs 57;" f crMvType src/Dodge/Creature/MoveType.hs 6;" f crNearPoint src/Dodge/Creature/Test.hs 132;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f -crOnWall src/Dodge/WallCreatureCollisions.hs 89;" f +crOnWall src/Dodge/WallCreatureCollisions.hs 88;" f crRad src/Dodge/Creature/Radius.hs 7;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 75;" f crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 937;" f +crSpring src/Dodge/Update.hs 962;" f crStratConMatches src/Dodge/Creature/Test.hs 81;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f crUpdate src/Dodge/Creature/Update.hs 71;" f @@ -2986,8 +2992,8 @@ createGas src/Dodge/Gas.hs 10;" f createHeadLamp src/Dodge/Euse.hs 64;" f createItemYou src/Dodge/Inventory/Add.hs 62;" f createLightMap src/Render.hs 26;" f -createProjectile src/Dodge/HeldUse.hs 1293;" f -createProjectileR src/Dodge/HeldUse.hs 1242;" f +createProjectile src/Dodge/HeldUse.hs 1292;" f +createProjectileR src/Dodge/HeldUse.hs 1241;" f createShell src/Dodge/Projectile/Create.hs 21;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 53;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 129;" f @@ -3119,9 +3125,9 @@ defaultBlock src/Dodge/Default/Block.hs 5;" f defaultBounds src/Dodge/Data/Bounds.hs 18;" f defaultBullet src/Dodge/Item/Weapon/Bullet.hs 10;" f defaultButton src/Dodge/Default.hs 44;" f -defaultCWCam src/Dodge/Default/World.hs 72;" f -defaultCWGen src/Dodge/Default/World.hs 62;" f -defaultCWorld src/Dodge/Default/World.hs 87;" f +defaultCWCam src/Dodge/Default/World.hs 73;" f +defaultCWGen src/Dodge/Default/World.hs 63;" f +defaultCWorld src/Dodge/Default/World.hs 88;" f defaultChaseMvType src/Dodge/Creature/MoveType.hs 25;" f defaultClusterStatus src/Dodge/Default/Room.hs 37;" f defaultConfig src/Dodge/Data/Config.hs 152;" f @@ -3136,13 +3142,13 @@ defaultDoorWall src/Dodge/Default/Wall.hs 29;" f defaultDrawButton src/Dodge/Button/Draw.hs 29;" f defaultFlIt src/Dodge/Default.hs 27;" f defaultForeground src/Dodge/Default/ForegroundShape.hs 5;" f -defaultHUD src/Dodge/Default/World.hs 171;" f +defaultHUD src/Dodge/Default/World.hs 172;" f defaultInanimate src/Dodge/Default/Creature.hs 63;" f defaultInput src/Dodge/Default/World.hs 12;" f defaultIntention src/Dodge/Default/Creature.hs 99;" f defaultInvSize src/Dodge/Default/Creature.hs 73;" f defaultLDP src/Dodge/ListDisplayParams.hs 19;" f -defaultLWorld src/Dodge/Default/World.hs 105;" f +defaultLWorld src/Dodge/Default/World.hs 106;" f defaultMachine src/Dodge/Default.hs 30;" f defaultMachineWall src/Dodge/Default/Wall.hs 38;" f defaultPerceptionState src/Dodge/Default/Creature.hs 76;" f @@ -3152,18 +3158,18 @@ defaultTerminal src/Dodge/Default/Terminal.hs 8;" f defaultVision src/Dodge/Default/Creature.hs 86;" f defaultWall src/Dodge/Default/Wall.hs 15;" f defaultWindow src/Dodge/Default/Wall.hs 54;" f -defaultWorld src/Dodge/Default/World.hs 32;" f +defaultWorld src/Dodge/Default/World.hs 33;" f degToRad src/Geometry/Vector.hs 118;" f deleteIMInZone src/Dodge/Base.hs 70;" f deleteWallFromZones src/Dodge/Wall/Zone.hs 23;" f deleteWallID src/Dodge/Wall/Delete.hs 13;" f deleteWallIDs src/Dodge/Wall/Delete.hs 27;" f denormalEdges src/Polyhedra.hs 128;" f -destroyAllInvItems src/Dodge/Inventory.hs 53;" f +destroyAllInvItems src/Dodge/Inventory.hs 60;" f destroyBlock src/Dodge/Block.hs 17;" f destroyDoor src/Dodge/Wall/Damage.hs 146;" f -destroyInvItem src/Dodge/Inventory.hs 40;" f -destroyItem src/Dodge/Inventory.hs 62;" f +destroyInvItem src/Dodge/Inventory.hs 47;" f +destroyItem src/Dodge/Inventory.hs 69;" f destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 13;" f destroyMachine' src/Dodge/Wall/Damage.hs 112;" f @@ -3176,7 +3182,7 @@ detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 432;" f detectorInfo src/Dodge/Item/Info.hs 223;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1213;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1212;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 205;" f @@ -3192,7 +3198,7 @@ displayFrameTicks src/Dodge/Render/Picture.hs 50;" f displayFreeSlots src/Dodge/DisplayInventory.hs 196;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f -displayTerminalLineString src/Dodge/Update.hs 535;" f +displayTerminalLineString src/Dodge/Update.hs 560;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 151;" f @@ -3210,7 +3216,7 @@ doAnyEquipmentEffect src/Dodge/Creature/State.hs 141;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBarrelSpin src/Dodge/Projectile/Update.hs 168;" f doBlBl src/Dodge/BlBl.hs 5;" f -doBounce src/Dodge/Base/Collide.hs 67;" f +doBounce src/Dodge/Base/Collide.hs 66;" f doButtonEvent src/Dodge/Button/Event.hs 9;" f doConLoop src/Loop.hs 138;" f doConLoop' src/Loop.hs 230;" f @@ -3234,28 +3240,29 @@ doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f doDoorMount src/Dodge/Door.hs 31;" f -doDrag src/Dodge/Update/Input/InGame.hs 128;" f +doDrag src/Dodge/Update/Input/InGame.hs 129;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 1174;" f +doGenFloat src/Dodge/HeldUse.hs 1173;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f doHeldUseEffect src/Dodge/HeldUse.hs 369;" f doInPlacements src/Dodge/Layout.hs 89;" f doIndividualPlacements src/Dodge/Layout.hs 101;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f -doItemTimeScroll src/Dodge/Update.hs 206;" f +doItemTimeScroll src/Dodge/Update.hs 228;" f doLoop src/Loop.hs 60;" f doMagnetBuBu src/Dodge/Bullet.hs 35;" f doModificationEffect src/Dodge/ModificationEffect.hs 7;" f +doMouseWarping src/Dodge/Update.hs 163;" f doPreload appDodge/Main.hs 132;" f doQuickload src/Dodge/Save.hs 83;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 8;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 453;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 423;" f doRoomPlacements src/Dodge/Layout.hs 104;" f doRoomShift src/Dodge/Room/Link.hs 33;" f -doScopeZoom src/Dodge/Update/Scroll.hs 87;" f +doScopeZoom src/Dodge/Update/Scroll.hs 90;" f doSectionSize src/Dodge/DisplayInventory.hs 215;" f doSideEffects appDodge/Main.hs 117;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 172;" f @@ -3264,14 +3271,14 @@ doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 132;" f -doTimeScroll src/Dodge/Update.hs 211;" f +doTimeScroll src/Dodge/Update.hs 233;" f doTmWdWd src/Dodge/WorldEffect.hs 103;" f -doWallRotate src/Dodge/Update/Camera.hs 228;" f +doWallRotate src/Dodge/Update/Camera.hs 230;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f doWdWd src/Dodge/WorldEffect.hs 34;" f -doWorldEvents src/Dodge/Update.hs 463;" f +doWorldEvents src/Dodge/Update.hs 488;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 14;" f doorBetween src/Dodge/Placement/Instance/Door.hs 35;" f @@ -3413,7 +3420,7 @@ drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f dropAll src/Dodge/Creature/Update.hs 134;" f -dropInventoryPath src/Dodge/HeldUse.hs 1368;" f +dropInventoryPath src/Dodge/HeldUse.hs 1367;" f dropItem src/Dodge/Creature/Action.hs 155;" f dropper src/Dodge/Item/Scope.hs 82;" f drumMag src/Dodge/Item/Ammo.hs 31;" f @@ -3454,8 +3461,8 @@ encircleCloseP src/Dodge/Creature/Boid.hs 38;" f encircleDistP src/Dodge/Creature/Boid.hs 24;" f encircleP src/Dodge/Creature/Boid.hs 30;" f endArcPos src/Dodge/Tesla.hs 86;" f -endCombineRegex src/Dodge/Update/Input/InGame.hs 276;" f -endRegex src/Dodge/Update/Input/InGame.hs 270;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 277;" f +endRegex src/Dodge/Update/Input/InGame.hs 271;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 689;" f enterCombineInv src/Dodge/DisplayInventory.hs 321;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f @@ -3492,7 +3499,7 @@ expireAndDamage src/Dodge/Bullet.hs 188;" f explodeShell src/Dodge/Projectile/Update.hs 274;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 693;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f -extTrigLitPos src/Dodge/Placement/Instance/Button.hs 82;" f +extTrigLitPos src/Dodge/Placement/Instance/Button.hs 79;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f extraPics src/Dodge/Render/ShapePicture.hs 141;" f extraWeaponLinks src/Dodge/Item/Grammar.hs 93;" f @@ -3500,13 +3507,13 @@ extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 102;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 62;" f facesToVF src/Polyhedra/Geodesic.hs 70;" f -farWallDistDirection src/Dodge/Update/Camera.hs 250;" f +farWallDistDirection src/Dodge/Update/Camera.hs 244;" f fdiv src/ShortShow.hs 41;" f feet src/Dodge/Creature/Picture.hs 51;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f -findBoundDists src/Dodge/Update/Camera.hs 257;" f +findBoundDists src/Dodge/Update/Camera.hs 251;" f findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f findIndex src/IntMapHelp.hs 86;" f @@ -3551,7 +3558,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 777;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 823;" f -foldMTRS src/Dodge/Room/Tutorial.hs 86;" f +foldMTRS src/Dodge/Room/Tutorial.hs 85;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3575,7 +3582,7 @@ fromV3 src/Geometry/Data.hs 63;" f frontArmour src/Dodge/Item/Equipment.hs 32;" f fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 44;" f -functionalUpdate src/Dodge/Update.hs 254;" f +functionalUpdate src/Dodge/Update.hs 276;" 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 @@ -3589,8 +3596,8 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 153;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f -gasEffect src/Dodge/Update.hs 855;" f -gasType src/Dodge/HeldUse.hs 1132;" f +gasEffect src/Dodge/Update.hs 880;" f +gasType src/Dodge/HeldUse.hs 1131;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 147;" f @@ -3609,16 +3616,16 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 88;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 173;" f getBulletType src/Dodge/HeldUse.hs 933;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 539;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 509;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 503;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 490;" f -getDebugMouseOver src/Dodge/Update.hs 424;" f +getDebugMouseOver src/Dodge/Update.hs 449;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1281;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1280;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 144;" f getLaserColor src/Dodge/HeldUse.hs 721;" f @@ -3626,9 +3633,9 @@ getLaserDamage src/Dodge/HeldUse.hs 718;" f getLaserPhaseV src/Dodge/HeldUse.hs 715;" f getLinksOfType src/Dodge/RoomLink.hs 40;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 436;" f +getMenuMouseContext src/Dodge/Update.hs 461;" f getNodePos src/Dodge/Path.hs 34;" f -getPJStabiliser src/Dodge/HeldUse.hs 1268;" f +getPJStabiliser src/Dodge/HeldUse.hs 1267;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f @@ -3697,9 +3704,9 @@ handOrient src/Dodge/Item/HeldOffset.hs 40;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 46;" f handleKeyboardEvent src/Dodge/Event/Input.hs 23;" f -handleMouseButtonEvent src/Dodge/Event/Input.hs 61;" f +handleMouseButtonEvent src/Dodge/Event/Input.hs 59;" f handleMouseMotionEvent src/Dodge/Event/Input.hs 47;" f -handleMouseWheelEvent src/Dodge/Event/Input.hs 56;" f +handleMouseWheelEvent src/Dodge/Event/Input.hs 54;" f handleOrient src/Dodge/Item/HeldOffset.hs 33;" f handlePos src/Dodge/Item/HeldOffset.hs 79;" f handleResizeEvent src/Dodge/Event.hs 53;" f @@ -3707,10 +3714,10 @@ handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f hasAutoDoorBody src/Dodge/Creature/Test.hs 141;" f -hasButtonLOS src/Dodge/Base/Collide.hs 312;" f +hasButtonLOS src/Dodge/Base/Collide.hs 301;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f -hasLOS src/Dodge/Base/Collide.hs 305;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 321;" f +hasLOS src/Dodge/Base/Collide.hs 294;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 310;" f hat src/Dodge/Item/Equipment.hs 65;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f @@ -3730,9 +3737,9 @@ heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 20;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 194;" f heldItemInvLock src/Dodge/HeldUse.hs 459;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1019;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1018;" f heldItemMuzzles src/Dodge/HeldUse.hs 188;" f -heldItemRifling src/Dodge/HeldUse.hs 1061;" f +heldItemRifling src/Dodge/HeldUse.hs 1060;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 234;" f heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f heldPositionInfo src/Dodge/Item/Info.hs 239;" f @@ -3753,7 +3760,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 57;" f +iShape src/Dodge/Placement/Instance/LightSource.hs 56;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f inLink src/Dodge/RoomLink.hs 128;" f @@ -3829,8 +3836,8 @@ invItemEffs src/Dodge/Creature/State.hs 63;" f invItemLocUpdate src/Dodge/Creature/State.hs 71;" f invRootMap src/Dodge/Item/Grammar.hs 231;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f -invSetSelection src/Dodge/Inventory.hs 180;" f -invSetSelectionPos src/Dodge/Inventory.hs 188;" f +invSetSelection src/Dodge/Inventory.hs 278;" f +invSetSelectionPos src/Dodge/Inventory.hs 286;" f invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 111;" f @@ -3851,7 +3858,7 @@ isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 66;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 176;" f -isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 198;" f +isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 199;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f isLHS src/Geometry/LHS.hs 12;" f @@ -3863,7 +3870,7 @@ isNothing' src/MaybeHelp.hs 31;" f isOnSeg src/Geometry.hs 237;" f isOutLnk src/Dodge/PlacementSpot.hs 168;" f isOutLnkNum src/Dodge/PlacementSpot.hs 173;" f -isOverTerminalScreen src/Dodge/Update.hs 444;" f +isOverTerminalScreen src/Dodge/Update.hs 469;" f isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f isPutID src/Dodge/Placement/Instance/Wall.hs 108;" f isRHS src/Geometry/LHS.hs 44;" f @@ -3907,7 +3914,7 @@ itemRooms src/Dodge/LockAndKey.hs 40;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f itemSPic src/Dodge/Item/Draw/SPic.hs 17;" f itemScan src/Dodge/Item/Scope.hs 68;" f -itemScroll src/Dodge/Update/Scroll.hs 53;" f +itemScroll src/Dodge/Update/Scroll.hs 56;" f itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 121;" f itemScrollValue src/Dodge/Inventory/SelectionList.hs 148;" f itemShapeMax src/Dodge/Item/Orientation.hs 68;" f @@ -3927,7 +3934,7 @@ itmBaseInfo src/Dodge/Item/Info.hs 30;" f itmEquipSiteInfo src/Dodge/Item/Info.hs 249;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 229;" f -jShape src/Dodge/Placement/Instance/LightSource.hs 72;" f +jShape src/Dodge/Placement/Instance/LightSource.hs 71;" f joinItemsInList src/Dodge/Item/Grammar.hs 211;" f joystick src/Dodge/Item/Scope.hs 158;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f @@ -3946,11 +3953,11 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f -lChasm src/Dodge/Room/Tutorial.hs 144;" f +lChasm src/Dodge/Room/Tutorial.hs 143;" 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 60;" f +lShape src/Dodge/Placement/Instance/LightSource.hs 59;" 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 @@ -3987,7 +3994,7 @@ leftRightCombine src/Dodge/Item/Grammar.hs 201;" f leftWristPQ src/Dodge/Creature/HandPos.hs 82;" f legsSPic src/Dodge/Item/Draw/SPic.hs 447;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -liShape src/Dodge/Placement/Instance/LightSource.hs 85;" f +liShape src/Dodge/Placement/Instance/LightSource.hs 84;" f light src/Color.hs 131;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f @@ -4059,7 +4066,7 @@ ltAutoCrit src/Dodge/Creature/LtAutoCrit.hs 12;" f m src/ShortShow.hs 48;" f mAT src/Dodge/Item/MagAmmoType.hs 20;" f machinePistol src/Dodge/Item/Held/Stick.hs 24;" f -magAmmoParams src/Dodge/HeldUse.hs 954;" f +magAmmoParams src/Dodge/HeldUse.hs 953;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 12;" f magMax src/Dodge/Item/MagAmmoType.hs 29;" f magShield src/Dodge/Item/Equipment.hs 26;" f @@ -4073,7 +4080,7 @@ main test/Spec.hs 12;" f makeArc src/Picture/Base.hs 149;" f makeBlip src/Dodge/RadarSweep.hs 70;" f makeBlockDebris src/Dodge/Block/Debris.hs 36;" f -makeBullet src/Dodge/HeldUse.hs 998;" f +makeBullet src/Dodge/HeldUse.hs 997;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f @@ -4129,7 +4136,7 @@ maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 568;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 538;" f maybeOpenConsole src/Dodge/Update.hs 133;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f @@ -4148,10 +4155,10 @@ mcProxSensorUpdate src/Dodge/Machine/Update.hs 167;" f mcProxTest src/Dodge/Machine/Update.hs 248;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 209;" f mcSPic src/Dodge/Render/ShapePicture.hs 172;" f -mcShootAuto src/Dodge/HeldUse.hs 1186;" f -mcShootLaser src/Dodge/HeldUse.hs 1178;" f +mcShootAuto src/Dodge/HeldUse.hs 1185;" f +mcShootLaser src/Dodge/HeldUse.hs 1177;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f -mcUseHeld src/Dodge/HeldUse.hs 1103;" f +mcUseHeld src/Dodge/HeldUse.hs 1102;" f mcUseItem src/Dodge/Machine/Update.hs 108;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f @@ -4181,9 +4188,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 173;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 195;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 262;" f +midChasm src/Dodge/Room/Tutorial.hs 172;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 194;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 261;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4212,18 +4219,19 @@ 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 109;" f -mntLSCond src/Dodge/Placement/Instance/LightSource.hs 132;" 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 149;" f -mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 157;" f -mntLightLnkShape src/Dodge/Placement/Instance/LightSource.hs 154;" 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 modTo src/Geometry/Zone.hs 18;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f -mouseWorldPos src/Dodge/Base/Coordinate.hs 37;" f +mouseWorldPos src/Dodge/Base/Coordinate.hs 39;" f +mouseWorldPosW src/Dodge/Base/Coordinate.hs 42;" f moveBullet src/Dodge/Bullet.hs 197;" f -moveCombineSel src/Dodge/Update/Scroll.hs 117;" f +moveCombineSel src/Dodge/Update/Scroll.hs 120;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 31;" f movePenBullet src/Dodge/Bullet.hs 203;" f moveProjectile src/Dodge/Projectile/Update.hs 249;" f @@ -4243,21 +4251,23 @@ multGunCrit src/Dodge/Creature.hs 75;" f multiArrow src/Picture/Composite.hs 11;" f multiLookupTrie src/SimpleTrie.hs 57;" f multiLookupTrieI src/SimpleTrie.hs 66;" f +multiSelScroll src/Dodge/Inventory.hs 215;" f +multiSelScroll' src/Dodge/Inventory.hs 222;" f muout src/Dodge/RoomLink.hs 144;" f muzFlareAt src/Dodge/HeldUse.hs 692;" f muzzlePos src/Dodge/HeldUse.hs 779;" f muzzleRandPos src/Dodge/HeldUse.hs 788;" f -muzzleWallCheck src/Dodge/Update.hs 323;" f -mvButton src/Dodge/Placement/PlaceSpot.hs 184;" f -mvCr src/Dodge/Placement/PlaceSpot.hs 187;" f -mvFS src/Dodge/Placement/PlaceSpot.hs 190;" f -mvGust src/Dodge/Update.hs 846;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 228;" f +muzzleWallCheck src/Dodge/Update.hs 345;" f +mvButton src/Dodge/Placement/PlaceSpot.hs 182;" f +mvCr src/Dodge/Placement/PlaceSpot.hs 185;" f +mvFS src/Dodge/Placement/PlaceSpot.hs 188;" f +mvGust src/Dodge/Update.hs 871;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 235;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f -mvProp src/Dodge/Placement/PlaceSpot.hs 181;" f +mvProp src/Dodge/Placement/PlaceSpot.hs 179;" f myIntersectLineLine src/Geometry/Intersect.hs 196;" f myIntersectSegSeg src/Geometry/Intersect.hs 174;" f nRays src/Geometry.hs 182;" f @@ -4279,9 +4289,9 @@ 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 23;" f +noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodesNear src/Dodge/Path.hs 75;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 259;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 258;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 55;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f normalTo8 src/Shader/Poke.hs 466;" f @@ -4339,10 +4349,10 @@ overPos src/Picture/Base.hs 298;" f overPosObj src/Shape.hs 274;" f overPosSH src/Shape.hs 258;" f overPosSP src/ShapePicture.hs 41;" f -overlapCircWalls src/Dodge/Base/Collide.hs 231;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 273;" f -overlapSegCrs src/Dodge/Base/Collide.hs 59;" f -overlapSegWalls src/Dodge/Base/Collide.hs 212;" f +overlapCircWalls src/Dodge/Base/Collide.hs 230;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 269;" f +overlapSegCrs src/Dodge/Base/Collide.hs 58;" f +overlapSegWalls src/Dodge/Base/Collide.hs 211;" f overrideInternal src/Dodge/Creature/ReaderUpdate.hs 180;" f overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 35;" f overwriteLabel src/Dodge/Tree/Compose.hs 32;" f @@ -4360,12 +4370,12 @@ passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 568;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 531;" f +pauseGame src/Dodge/Update/Input/InGame.hs 501;" f pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f -pauseTime src/Dodge/Update.hs 195;" f -pbFlicker src/Dodge/Update.hs 520;" f +pauseTime src/Dodge/Update.hs 217;" f +pbFlicker src/Dodge/Update.hs 545;" f pbsHit src/Dodge/WorldEvent/ThingsHit.hs 97;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f @@ -4392,21 +4402,21 @@ pjRemoteSetDirection src/Dodge/Projectile/Update.hs 196;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 57;" f -plMachine src/Dodge/Placement/PlaceSpot.hs 193;" f +plMachine src/Dodge/Placement/PlaceSpot.hs 191;" f plNew src/Dodge/Base/NewID.hs 19;" f plNewID src/Dodge/Base/NewID.hs 7;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f plPriority src/Dodge/Layout.hs 112;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f -placeChasm src/Dodge/Placement/PlaceSpot.hs 159;" f -placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 221;" f +placeChasm src/Dodge/Placement/PlaceSpot.hs 158;" f +placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 224;" f placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 41;" f placeSpot src/Dodge/Placement/PlaceSpot.hs 33;" f -placeSpotID src/Dodge/Placement/PlaceSpot.hs 101;" f +placeSpotID src/Dodge/Placement/PlaceSpot.hs 100;" f placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 85;" f placeSpotUsingRoomPos src/Dodge/Placement/PlaceSpot.hs 63;" f -placeWallPoly src/Dodge/Placement/PlaceSpot.hs 171;" f +placeWallPoly src/Dodge/Placement/PlaceSpot.hs 169;" f plainRegex src/Dodge/DisplayInventory.hs 193;" f playIfFree src/Sound.hs 139;" f playPositionalSoundQueue src/Sound.hs 147;" f @@ -4530,15 +4540,15 @@ 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 -pushCreatureOutFromWalls src/Dodge/WallCreatureCollisions.hs 57;" f +pushCreatureOutFromWalls src/Dodge/WallCreatureCollisions.hs 56;" f pushL src/DoubleStack.hs 20;" f -pushOrCrush src/Dodge/WallCreatureCollisions.hs 77;" f -pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 112;" f -pushOutFromWall src/Dodge/WallCreatureCollisions.hs 101;" f -pushOutFromWalls src/Dodge/WallCreatureCollisions.hs 64;" f +pushOrCrush src/Dodge/WallCreatureCollisions.hs 76;" f +pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 111;" f +pushOutFromWall src/Dodge/WallCreatureCollisions.hs 100;" f +pushOutFromWalls src/Dodge/WallCreatureCollisions.hs 63;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f -pushYouOutFromWalls src/Dodge/Update.hs 320;" f +pushYouOutFromWalls src/Dodge/Update.hs 342;" f putAutoDoor src/Dodge/Placement/Instance/Door.hs 65;" f putBlockN src/Dodge/Placement/Instance/Wall.hs 120;" f putBlockRect src/Dodge/Placement/Instance/Wall.hs 111;" f @@ -4548,11 +4558,11 @@ putDoor src/Dodge/Room/Airlock.hs 117;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 60;" f -putLamp src/Dodge/Placement/Instance/LightSource.hs 209;" f +putLamp src/Dodge/Placement/Instance/LightSource.hs 187;" f putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f -putLitButOnPos src/Dodge/Placement/Instance/Button.hs 66;" f -putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 100;" f -putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 103;" f +putLitButOnPos src/Dodge/Placement/Instance/Button.hs 64;" f +putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f +putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 57;" f putShape src/Dodge/Room/Foreground.hs 134;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f @@ -4574,7 +4584,7 @@ rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f radToDeg src/Geometry/Vector.hs 123;" f -radiusSpring src/Dodge/Update.hs 926;" f +radiusSpring src/Dodge/Update.hs 951;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 58;" f @@ -4596,7 +4606,7 @@ randPeakedParam src/RandomHelp.hs 149;" f randProb src/RandomHelp.hs 87;" f randSpark src/Dodge/Spark.hs 70;" f randSparkExtraVel src/Dodge/Spark.hs 93;" f -randWallReflect src/Dodge/Update.hs 702;" f +randWallReflect src/Dodge/Update.hs 727;" f randomChallenges src/Dodge/Room/Start.hs 64;" f randomCompass src/Dodge/Layout.hs 60;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 247;" f @@ -4708,7 +4718,7 @@ rightWristPQ src/Dodge/Creature/HandPos.hs 58;" f rlPosDir src/Dodge/RoomLink.hs 112;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 398;" f rmInLinks src/Dodge/RoomLink.hs 153;" f -rmInvItem src/Dodge/Inventory.hs 74;" f +rmInvItem src/Dodge/Inventory.hs 82;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f rmOutLinks src/Dodge/RoomLink.hs 153;" f roomC src/Dodge/Room/Room.hs 51;" f @@ -4748,7 +4758,7 @@ rotateSHx src/Shape.hs 262;" f rotateSP src/ShapePicture.hs 57;" f rotateTo src/Polyhedra/Geodesic.hs 65;" f rotateTo8 src/Dodge/Update/Camera/Rotate.hs 6;" f -rotateToOverlappingWall src/Dodge/Update/Camera.hs 216;" f +rotateToOverlappingWall src/Dodge/Update/Camera.hs 218;" f rotateToZ src/Quaternion.hs 35;" f rotateV src/Geometry/Vector.hs 106;" f rotateVAround src/Geometry/Vector.hs 113;" f @@ -4798,13 +4808,13 @@ screenBox src/Dodge/Base/Window.hs 54;" f screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f screenPosAbs src/Dodge/ScreenPos.hs 15;" f -screenToWorldPos src/Dodge/Base/Coordinate.hs 40;" f -scrollAugInvSel src/Dodge/Inventory.hs 191;" f -scrollAugNextInSection src/Dodge/Inventory.hs 204;" f -scrollRBOption src/Dodge/Update/Scroll.hs 137;" f +screenToWorldPos src/Dodge/Base/Coordinate.hs 45;" f +scrollAugInvSel src/Dodge/Inventory.hs 289;" f +scrollAugNextInSection src/Dodge/Inventory.hs 303;" f +scrollRBOption src/Dodge/Update/Scroll.hs 140;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f -scrollTimeBack src/Dodge/Update.hs 221;" f -scrollTimeForward src/Dodge/Update.hs 238;" f +scrollTimeBack src/Dodge/Update.hs 243;" f +scrollTimeForward src/Dodge/Update.hs 260;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 579;" f seagullBarkTransformedS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 533;" f seagullChatter1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 599;" f @@ -4827,7 +4837,7 @@ selSecDrawCursor src/Dodge/Render/List.hs 101;" f selSecSelCol src/Dodge/Render/HUD.hs 507;" f selSecSelSize src/Dodge/SelectionSections.hs 143;" f selSecYint src/Dodge/SelectionSections.hs 152;" f -selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f +selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 70;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 79;" f @@ -4859,12 +4869,12 @@ setLinkType src/Dodge/RoomLink.hs 79;" f setLinkTypePD src/Dodge/RoomLink.hs 86;" f setMusicVolume src/Sound.hs 164;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 58;" f -setOldPos src/Dodge/Update.hs 554;" f +setOldPos src/Dodge/Update.hs 579;" f setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 342;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 326;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -4872,8 +4882,8 @@ setSoundVolume src/Sound.hs 159;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f -setTreeInts src/Dodge/Room/Tutorial.hs 93;" f -setViewDistance src/Dodge/Update/Camera.hs 245;" f +setTreeInts src/Dodge/Room/Tutorial.hs 92;" f +setViewDistance src/Dodge/Update/Camera.hs 239;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f @@ -4907,9 +4917,9 @@ shiftByV2 src/Dodge/PlacementSpot.hs 257;" f shiftChildren src/Dodge/Tree/Compose.hs 45;" f shiftDraw src/Dodge/Render/ShapePicture.hs 130;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f -shiftInvItems src/Dodge/Update/Input/InGame.hs 310;" f -shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 355;" f -shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 349;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 294;" f +shiftInvItemsDown src/Dodge/Inventory.hs 174;" f +shiftInvItemsUp src/Dodge/Inventory.hs 184;" f shiftLinkBy src/Dodge/Room/Link.hs 87;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f shiftPathBy src/Dodge/Room/Link.hs 92;" f @@ -4921,17 +4931,19 @@ shiftRelativeToPS src/Dodge/Placement/Shift.hs 18;" f shiftRoomBy src/Dodge/Room/Link.hs 37;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f +shiftSetDown src/Dodge/Inventory.hs 167;" f +shiftSetUp src/Dodge/Inventory.hs 161;" f shineTargetLaser src/Dodge/Creature/State.hs 201;" f shineTorch src/Dodge/Creature/State.hs 238;" f -shootBullet src/Dodge/HeldUse.hs 992;" f -shootBullets src/Dodge/HeldUse.hs 986;" f +shootBullet src/Dodge/HeldUse.hs 991;" f +shootBullets src/Dodge/HeldUse.hs 985;" f shootFirstMiss src/Dodge/Creature/Volition.hs 34;" f shootLaser src/Dodge/HeldUse.hs 862;" f shootPlasmaBall src/Dodge/HeldUse.hs 903;" f shootPulseBall src/Dodge/HeldUse.hs 915;" f shootPulseLaser src/Dodge/HeldUse.hs 890;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 1203;" f +shootTeslaArc src/Dodge/HeldUse.hs 1202;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f shootTractorBeam src/Dodge/HeldUse.hs 831;" f shootersRoom src/Dodge/Room/Room.hs 339;" f @@ -4960,7 +4972,7 @@ shufflePair src/RandomHelp.hs 166;" f shuffleRoomPos src/Dodge/Layout.hs 86;" f shuffleTail src/RandomHelp.hs 78;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 931;" f +simpleCrSprings src/Dodge/Update.hs 956;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 757;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 793;" f @@ -5024,12 +5036,12 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 84;" f -spaceAction src/Dodge/Update/Input/InGame.hs 534;" f -spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 182;" f -spanColLightI src/Dodge/Placement/Instance/LightSource.hs 175;" f -spanLS src/Dodge/Placement/Instance/LightSource.hs 167;" f -spanLightI src/Dodge/Placement/Instance/LightSource.hs 189;" f -spanLightY src/Dodge/Placement/Instance/LightSource.hs 193;" 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 sparkDam src/Dodge/Spark.hs 37;" f sparkRandDir src/Dodge/Spark.hs 117;" f sparkToDamage src/Dodge/Spark.hs 40;" f @@ -5052,11 +5064,11 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 224;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 239;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 223;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 238;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f -squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f +squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 115;" f squashNormalizeV src/Geometry/Vector.hs 158;" f ssLookupDown src/Dodge/SelectionSections.hs 82;" f ssLookupGE' src/Dodge/SelectionSections.hs 136;" f @@ -5080,7 +5092,7 @@ stackText src/Picture/Base.hs 180;" f stackedInventory src/Dodge/Creature.hs 324;" f startCr src/Dodge/Creature.hs 90;" f startCrafts src/Dodge/Room/Start.hs 94;" f -startDrag src/Dodge/Update/Input/InGame.hs 285;" f +startDrag src/Dodge/Update/Input/InGame.hs 286;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5118,7 +5130,8 @@ swapAnyExtraSelection src/Dodge/Inventory/Swap.hs 57;" f swapInOutLinks src/Dodge/RoomLink.hs 99;" f swapIndices src/ListHelp.hs 50;" f swapInvItems src/Dodge/Inventory/Swap.hs 22;" f -swapItemWith src/Dodge/Inventory.hs 164;" f +swapItemWith src/Dodge/Inventory.hs 262;" f +swapSelSet src/Dodge/Inventory.hs 154;" f swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f swarmUsingCenter src/Dodge/Creature/Boid.hs 174;" f t src/ShortShow.hs 48;" f @@ -5162,7 +5175,7 @@ terminalReturnLocal src/Dodge/Terminal.hs 283;" f terminalSPic src/Dodge/Machine/Draw.hs 47;" f terminalScreenGlow src/Dodge/Machine/Update.hs 43;" f terminalShape src/Dodge/Machine/Draw.hs 50;" f -terminalWheelEvent src/Dodge/Update/Scroll.hs 127;" f +terminalWheelEvent src/Dodge/Update/Scroll.hs 130;" f teslaCoil src/Dodge/Item/Held/BatteryGuns.hs 12;" f teslaGunPic src/Dodge/Item/Draw/SPic.hs 410;" f teslaParams src/Dodge/Item/Held/BatteryGuns.hs 18;" f @@ -5204,7 +5217,7 @@ throwItem src/Dodge/Creature/Action.hs 191;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 204;" f tilesToLine src/Shader/AuxAddition.hs 66;" f -timeFlowUpdate src/Dodge/Update.hs 181;" f +timeFlowUpdate src/Dodge/Update.hs 203;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f timeStopper src/Dodge/Item/Held/Utility.hs 39;" f tinMag src/Dodge/Item/Ammo.hs 24;" f @@ -5297,21 +5310,18 @@ treeToPotentialFunction src/Dodge/Item/Grammar.hs 147;" f triLootRoom src/Dodge/Room/Treasure.hs 23;" f triangulateEarClip src/Geometry/Polygon.hs 162;" f triggerDoorRoom src/Dodge/Room/Door.hs 32;" f -triggerSwitch src/Dodge/Placement/Instance/Button.hs 48;" f -triggerSwitchSPic src/Dodge/Placement/Instance/Button.hs 15;" f -triggerSwitchSPicLight src/Dodge/Placement/Instance/Button.hs 32;" f truncFaces src/Polyhedra/Geodesic.hs 54;" f truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 162;" f tryAttachItems src/Dodge/Item/Grammar.hs 34;" f tryClickUse src/Dodge/Creature/YourControl.hs 236;" f -tryCombine src/Dodge/Update/Input/InGame.hs 551;" f +tryCombine src/Dodge/Update/Input/InGame.hs 521;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 151;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 139;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 140;" f tryGetChannel src/Sound.hs 99;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 22;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 40;" f -tryPickupSelected src/Dodge/Update/Input/InGame.hs 146;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 147;" f tryPlay src/Sound.hs 85;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 24;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 54;" f @@ -5322,8 +5332,8 @@ tryThrust src/Dodge/Projectile/Update.hs 126;" f tryUseParent src/Dodge/Creature/State.hs 145;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f -tutAnoTree src/Dodge/Room/Tutorial.hs 54;" f -tutDrop src/Dodge/Room/Tutorial.hs 98;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 53;" f +tutDrop src/Dodge/Room/Tutorial.hs 97;" f tutHub src/Dodge/Room/Tutorial.hs 410;" f tutLight src/Dodge/Room/Tutorial.hs 378;" f tutRezBox src/Dodge/Room/Tutorial.hs 523;" f @@ -5359,129 +5369,129 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 121;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 203;" f -updateAimPos src/Dodge/Update.hs 353;" f +updateAimPos src/Dodge/Update.hs 375;" f updateAllNodes src/TreeHelp.hs 86;" f updateArc src/Dodge/Tesla.hs 43;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 484;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 454;" f updateBarrel src/Dodge/Barreloid.hs 44;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f -updateBounds src/Dodge/Update/Camera.hs 267;" f +updateBounds src/Dodge/Update/Camera.hs 261;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f -updateBullets src/Dodge/Update.hs 617;" f +updateBullets src/Dodge/Update.hs 642;" f updateCamera src/Dodge/Update/Camera.hs 32;" f -updateCloseObjects src/Dodge/Inventory.hs 115;" f -updateCloud src/Dodge/Update.hs 859;" f -updateClouds src/Dodge/Update.hs 728;" f +updateCloseObjects src/Dodge/Inventory.hs 124;" f +updateCloud src/Dodge/Update.hs 884;" f +updateClouds src/Dodge/Update.hs 753;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 37;" f -updateCreatureGroups src/Dodge/Update.hs 589;" f -updateCreatureSoundPositions src/Dodge/Update.hs 568;" f -updateCreatureStride src/Dodge/Update.hs 347;" f -updateCreatureStrides src/Dodge/Update.hs 344;" f -updateDebris src/Dodge/Update.hs 631;" f +updateCreatureGroups src/Dodge/Update.hs 614;" f +updateCreatureSoundPositions src/Dodge/Update.hs 593;" f +updateCreatureStride src/Dodge/Update.hs 369;" f +updateCreatureStrides src/Dodge/Update.hs 366;" f +updateDebris src/Dodge/Update.hs 656;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 102;" f -updateDelayedEvents src/Dodge/Update.hs 962;" f +updateDelayedEvents src/Dodge/Update.hs 987;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f -updateDistortions src/Dodge/Update.hs 610;" f +updateDistortions src/Dodge/Update.hs 635;" f updateDoor src/Dodge/Door.hs 22;" f -updateDoors src/Dodge/Update.hs 358;" f -updateDust src/Dodge/Update.hs 906;" f -updateDusts src/Dodge/Update.hs 734;" f +updateDoors src/Dodge/Update.hs 380;" f +updateDust src/Dodge/Update.hs 931;" f +updateDusts src/Dodge/Update.hs 759;" f updateEdge src/Dodge/Path.hs 43;" f updateEdgeWallObs src/Dodge/Update/WallDamage.hs 39;" f updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f -updateEnergyBalls src/Dodge/Update.hs 719;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 511;" f +updateEnergyBalls src/Dodge/Update.hs 744;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 481;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 716;" f +updateFlames src/Dodge/Update.hs 741;" f updateFloatingCamera src/Dodge/Update/Camera.hs 37;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 368;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 364;" f -updateGas src/Dodge/Update.hs 881;" f -updateGasses src/Dodge/Update.hs 731;" f -updateGusts src/Dodge/Update.hs 843;" f -updateIMl src/Dodge/Update.hs 583;" f -updateIMl' src/Dodge/Update.hs 586;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 338;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 334;" f +updateGas src/Dodge/Update.hs 906;" f +updateGasses src/Dodge/Update.hs 756;" f +updateGusts src/Dodge/Update.hs 868;" f +updateIMl src/Dodge/Update.hs 608;" f +updateIMl' src/Dodge/Update.hs 611;" f updateInGameCamera src/Dodge/Update/Camera.hs 85;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 434;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 404;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f updateItemTargeting src/Dodge/Creature/State.hs 260;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 401;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 428;" f -updateKeysInGame src/Dodge/Update/Input/InGame.hs 84;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 387;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 410;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 371;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 398;" f +updateKeysInGame src/Dodge/Update/Input/InGame.hs 85;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 357;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 380;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 11;" f -updateLasers src/Dodge/Update.hs 470;" f +updateLasers src/Dodge/Update.hs 495;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 174;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLivingCreature src/Dodge/Creature/Update.hs 47;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 447;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 417;" f updateMachine src/Dodge/Machine/Update.hs 24;" f -updateMagnets src/Dodge/Update.hs 361;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 204;" f -updateMouseContext src/Dodge/Update.hs 374;" f -updateMouseContextGame src/Dodge/Update.hs 379;" f -updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 97;" f -updateMouseInGame src/Dodge/Update/Input/InGame.hs 87;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 167;" f -updateObjCatMaybes src/Dodge/Update.hs 601;" f -updateObjMapMaybe src/Dodge/Update.hs 594;" f -updatePastWorlds src/Dodge/Update.hs 459;" f -updatePlasmaBall src/Dodge/Update.hs 484;" f -updatePlasmaBalls src/Dodge/Update.hs 624;" f +updateMagnets src/Dodge/Update.hs 383;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 205;" f +updateMouseContext src/Dodge/Update.hs 396;" f +updateMouseContextGame src/Dodge/Update.hs 401;" f +updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 98;" f +updateMouseInGame src/Dodge/Update/Input/InGame.hs 88;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 168;" f +updateObjCatMaybes src/Dodge/Update.hs 626;" f +updateObjMapMaybe src/Dodge/Update.hs 619;" f +updatePastWorlds src/Dodge/Update.hs 484;" f +updatePlasmaBall src/Dodge/Update.hs 509;" f +updatePlasmaBalls src/Dodge/Update.hs 649;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f updatePulse src/Dodge/Creature/Update.hs 182;" f -updatePulseBall src/Dodge/Update.hs 500;" f -updatePulseLaser src/Dodge/Update.hs 671;" f -updatePulseLasers src/Dodge/Update.hs 479;" f +updatePulseBall src/Dodge/Update.hs 525;" f +updatePulseLaser src/Dodge/Update.hs 696;" f +updatePulseLasers src/Dodge/Update.hs 504;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 613;" f +updateRadarBlips src/Dodge/Update.hs 638;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 722;" f +updateRadarSweeps src/Dodge/Update.hs 747;" f updateRandNode src/TreeHelp.hs 109;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 185;" f updateRootItemID src/Dodge/Inventory/Location.hs 41;" f -updateScopeZoom src/Dodge/Update/Scroll.hs 75;" f +updateScopeZoom src/Dodge/Update/Scroll.hs 78;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 262;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 713;" f +updateShockwaves src/Dodge/Update.hs 738;" f updateSingleNodes src/TreeHelp.hs 98;" f updateSound src/Sound.hs 73;" f updateSounds src/Sound.hs 68;" f updateSpark src/Dodge/Spark.hs 20;" f -updateSparks src/Dodge/Update.hs 725;" f -updateTerminal src/Dodge/Update.hs 538;" f -updateTeslaArc src/Dodge/Update.hs 641;" f -updateTeslaArcs src/Dodge/Update.hs 638;" f +updateSparks src/Dodge/Update.hs 750;" f +updateTerminal src/Dodge/Update.hs 563;" f +updateTeslaArc src/Dodge/Update.hs 666;" f +updateTeslaArcs src/Dodge/Update.hs 663;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 710;" f +updateTractorBeams src/Dodge/Update.hs 735;" f updateTurret src/Dodge/Machine/Update.hs 56;" f updateUniverse src/Dodge/Update.hs 81;" f updateUniverseFirst src/Dodge/Update.hs 92;" f updateUniverseLast src/Dodge/Update.hs 143;" f -updateUniverseMid src/Dodge/Update.hs 163;" f -updateUseInputInGame src/Dodge/Update/Input/InGame.hs 46;" f +updateUniverseMid src/Dodge/Update.hs 185;" f +updateUseInputInGame src/Dodge/Update/Input/InGame.hs 47;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 24;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 11;" f updateWallDamages src/Dodge/Update/WallDamage.hs 15;" f updateWheelEvent src/Dodge/Update/Scroll.hs 21;" f -updateWheelEvents src/Dodge/Update.hs 449;" f +updateWheelEvents src/Dodge/Update.hs 474;" f updateWorldEventFlag src/Dodge/Update.hs 127;" f updateWorldEventFlags src/Dodge/Update.hs 115;" f upperBody src/Dodge/Creature/Picture.hs 118;" f @@ -5503,9 +5513,9 @@ upperPrismPolySU src/Shape.hs 110;" f upperPrismPolyTS src/Shape.hs 116;" f upperRounded src/Shape.hs 182;" f useBulletPayload src/Dodge/Bullet.hs 117;" f -useGasParams src/Dodge/HeldUse.hs 1108;" f +useGasParams src/Dodge/HeldUse.hs 1107;" f useHotkey src/Dodge/Creature/YourControl.hs 77;" f -useInventoryPath src/Dodge/HeldUse.hs 1399;" f +useInventoryPath src/Dodge/HeldUse.hs 1398;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 262;" f @@ -5513,11 +5523,11 @@ useLoadedAmmo src/Dodge/HeldUse.hs 734;" f useMagShield src/Dodge/Euse.hs 33;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1359;" f +useRewindGun src/Dodge/HeldUse.hs 1358;" f useRoomPosCond src/Dodge/PlacementSpot.hs 187;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 190;" f -useStopWatch src/Dodge/HeldUse.hs 1340;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1348;" f +useStopWatch src/Dodge/HeldUse.hs 1339;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1347;" f useUnusedLnk src/Dodge/PlacementSpot.hs 178;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 209;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 216;" f @@ -5526,7 +5536,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 99;" f +vShape src/Dodge/Placement/Instance/LightSource.hs 98;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f @@ -5546,7 +5556,7 @@ viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 155;" f violet src/Color.hs 48;" f -visibleWalls src/Dodge/Base/Collide.hs 217;" f +visibleWalls src/Dodge/Base/Collide.hs 216;" f visionCheck src/Dodge/Creature/Perception.hs 152;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 62;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f @@ -5554,12 +5564,12 @@ volleyGunShape src/Dodge/Item/Draw/SPic.hs 354;" f walkNozzle src/Dodge/HeldUse.hs 819;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f -wallBuffer src/Dodge/WallCreatureCollisions.hs 54;" f +wallBuffer src/Dodge/WallCreatureCollisions.hs 53;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f -wallToSurface src/Dodge/Base/Collide.hs 181;" f +wallToSurface src/Dodge/Base/Collide.hs 180;" f wallsFromRooms src/Dodge/Layout.hs 141;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f -warmupSound src/Dodge/HeldUse.hs 1393;" f +warmupSound src/Dodge/HeldUse.hs 1392;" f warningRooms src/Dodge/Room/Warning.hs 33;" f warp1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 845;" f wasdAim src/Dodge/Creature/YourControl.hs 133;" f @@ -5619,8 +5629,8 @@ wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f wlsNearSeg src/Dodge/Zoning/Wall.hs 42;" f wordsBy src/ListHelp.hs 117;" f -worldPosToResOffset src/Dodge/Base/Coordinate.hs 29;" f -worldPosToScreen src/Dodge/Base/Coordinate.hs 22;" f +worldPosToResOffset src/Dodge/Base/Coordinate.hs 31;" f +worldPosToScreen src/Dodge/Base/Coordinate.hs 24;" f worldSPic src/Dodge/Render/ShapePicture.hs 22;" f worldToGenWorld src/Dodge/LevelGen/LevelStructure.hs 14;" f wpAdd src/Dodge/Room/RezBox.hs 148;" f @@ -5649,7 +5659,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 157;" f +zChasm src/Dodge/Room/Tutorial.hs 156;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f @@ -5657,11 +5667,11 @@ zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 51;" f zipCount src/Dodge/Tree/Shift.hs 141;" f zoneCloud src/Dodge/Zoning/Cloud.hs 33;" f -zoneClouds src/Dodge/Update.hs 527;" f +zoneClouds src/Dodge/Update.hs 552;" f zoneCreature src/Dodge/Zoning/Creature.hs 56;" f -zoneCreatures src/Dodge/Update.hs 564;" f +zoneCreatures src/Dodge/Update.hs 589;" f zoneDust src/Dodge/Zoning/Cloud.hs 57;" f -zoneDusts src/Dodge/Update.hs 532;" f +zoneDusts src/Dodge/Update.hs 557;" f zoneExtract src/Dodge/Zoning/Base.hs 58;" f zoneGas src/Dodge/Zoning/Cloud.hs 36;" f zoneIncPe src/Dodge/Zoning/Pathing.hs 66;" f @@ -5684,7 +5694,7 @@ zoneWall src/Dodge/Zoning/Wall.hs 65;" f zonesAroundPoint src/Dodge/Zoning/Base.hs 98;" f zonesExtract src/Dodge/Zoning/Base.hs 62;" f zoomFloatingCamera src/Dodge/Update/Camera.hs 77;" f -zoomInLongGun src/Dodge/Update/Scroll.hs 101;" f -zoomOutLongGun src/Dodge/Update/Scroll.hs 109;" f +zoomInLongGun src/Dodge/Update/Scroll.hs 104;" f +zoomOutLongGun src/Dodge/Update/Scroll.hs 112;" f zoomScope src/Dodge/Item/Scope.hs 32;" f -zoomSpeed src/Dodge/Update/Scroll.hs 98;" f +zoomSpeed src/Dodge/Update/Scroll.hs 101;" f