diff --git a/src/Dodge/Data/Input.hs b/src/Dodge/Data/Input.hs index c5921bcfc..b5c341175 100644 --- a/src/Dodge/Data/Input.hs +++ b/src/Dodge/Data/Input.hs @@ -3,6 +3,7 @@ module Dodge.Data.Input where +import Dodge.Data.CardinalPoint import Dodge.Data.Config import Dodge.Data.Terminal.Status import Control.Lens @@ -16,7 +17,7 @@ data MouseContext | MouseInGame | MouseMenu {_mcoMenuClick :: Maybe Int} | OverInvDrag {_mcoDragSection :: Int , _mcoMaybeSelect :: Maybe (Int,Int) } - | OverInvDragSelect { _mcoSecSelStart :: Maybe (Int,Int), _mcoSelEnd :: Maybe Int } + | OverInvDragSelect { _mcoSecSelStart :: XInfinity (Int,Int) } --, _mcoSelEnd :: Maybe (XInfinity (Int,Int)) } | OverInvSelect { _mcoInvSelect :: (Int,Int)} | OverCombFiltInv { _mcoInvFilt :: (Int,Int)} | OverCombSelect { _mcoCombSelect :: (Int,Int)} diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index a84c69ddb..2840e8652 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -176,14 +176,35 @@ drawDragSelected cfig w = do drawDragSelecting :: Config -> World -> Maybe Picture drawDragSelecting cfig w = do - OverInvDragSelect (Just (i, j)) (Just b) <- w ^? input . mouseContext + x <- w ^? input . mouseContext . mcoSecSelStart sss <- w ^? hud . diSections - let f x = selSecDrawCursor invDP BackdropCurs sss (Sel i x) + y <- inverseSelNumPos cfig invDP (w^.input.mousePos) sss + let f i ss + | i ==0 || i == 3 = IM.foldMapWithKey (\j _ -> selSecDrawCursor invDP BackdropCurs sss (Sel i j)) + (ss ^. ssItems) + | otherwise = mempty return . translateScreenPos cfig (invDP ^. ldpPos) . color (0.2 *^ white) - . foldMap f - $ [min j b .. max j b] + . IM.foldMapWithKey f + $ sssSelectionSlice sss x y +-- OverInvDragSelect (Just (i, j)) (Just b) <- w ^? input . mouseContext +-- sss <- w ^? hud . diSections +-- let f x = selSecDrawCursor invDP BackdropCurs sss (Sel i x) +-- return +-- . translateScreenPos cfig (invDP ^. ldpPos) +-- . color (0.2 *^ white) +-- . foldMap f +-- $ [min j b .. max j b] + + +-- +-- return $ IM.foldMapWithKey f s +-- where +-- f i ss = IM.foldMapWithKey (g i) (ss ^. ssItems) +-- g i j si +-- | si ^. siIsSelectable = [(i,j)] +-- | otherwise = mempty drawSubInventory :: SubInventory -> Config -> World -> Picture drawSubInventory subinv cfig w = case subinv of diff --git a/src/Dodge/SelectionSections.hs b/src/Dodge/SelectionSections.hs index 3380d0216..38b35cf17 100644 --- a/src/Dodge/SelectionSections.hs +++ b/src/Dodge/SelectionSections.hs @@ -8,6 +8,9 @@ module Dodge.SelectionSections ( inverseSelSecYint, posSelSecYint, inverseSelNumPos, + ssLookupGE, + ssLookupLE, + sssSelectionSlice, ) where import Control.Applicative @@ -149,6 +152,22 @@ ssLookupGT' i sss = do Just (j', si) -> return (i', j', si) Nothing -> ssLookupGT' i' sss +ssLookupGE :: XInfinity (Int,Int) -> IMSS a -> Maybe (Int,Int,SelectionItem a) +ssLookupGE x sss = case x of + NegInf -> ssLookupMin sss + PosInf -> Nothing + NonInf (i,j) -> case sss ^? ix i . ssItems . ix j of + Nothing -> ssLookupGT i j sss + Just s -> Just (i,j,s) + +ssLookupLE :: XInfinity (Int,Int) -> IMSS a -> Maybe (Int,Int,SelectionItem a) +ssLookupLE x sss = case x of + NegInf -> Nothing + PosInf -> ssLookupMax sss + NonInf (i,j) -> case sss ^? ix i . ssItems . ix j of + Nothing -> ssLookupLT i j sss + Just s -> Just (i,j,s) + ssLookupGE' :: Int -> IMSS a -> Maybe (Int, Int, SelectionItem a) ssLookupGE' i sss = do (i', ss) <- IM.lookupGE i sss @@ -213,3 +232,14 @@ inverseSelSecYintXPosCheck cfig ldp x yint sss = do inverseSelNumPos :: Config -> LDParams -> Point2 -> IMSS a -> Maybe (XInfinity (Int, Int)) inverseSelNumPos cfig ldp (V2 x y) = inverseSelSecYintXPosCheck cfig ldp x (posSelSecYint cfig ldp y) + +sssSelectionSlice :: IMSS a -> XInfinity (Int,Int) -> XInfinity (Int,Int) -> IMSS a +sssSelectionSlice sss x1 x2 = fromMaybe mempty $ do + let (xmin,xmax) | x1 < x2 = (x1,x2) + | otherwise = (x2,x1) + (mini,minj,_) <- ssLookupGE xmin sss + (maxi,maxj,_) <- ssLookupLE xmax sss + return $ fst (IM.split (maxi+1) . snd $ IM.split (mini-1) sss) + & ix mini . ssItems %~ snd . IM.split (minj-1) + & ix maxi . ssItems %~ fst . IM.split (maxj+1) + diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 027ab942f..376405414 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -85,7 +85,7 @@ updateMouseInGame :: Config -> World -> World updateMouseInGame cfig w | Just 0 <- lbpress = updateMouseClickInGame cfig w | Just _ <- lbpress = updateMouseHeldInGame cfig w - | Just 0 <- lbrelease = updateMouseReleaseInGame w + | Just 0 <- lbrelease = updateMouseReleaseInGame cfig w | otherwise = w where lbpress = w ^? input . mouseButtons . ix ButtonLeft @@ -96,36 +96,29 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of OverInvDragSelect{} | ButtonRight `M.member` (w ^. input . mouseButtons) -> w & input . mouseContext .~ MouseGameRotate (dist (mouseWorldPosW w) (w ^. wCam . camCenter)) - OverInvDragSelect (Just sstart) _ -> - case inverseSelNumPos cfig invDP (w ^. input . mousePos) sss of - Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing - Just m - | fmap fst m == NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ (m ^?! nonInf . _2) - | fmap fst m < NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ 0 - | otherwise -> w & input . mouseContext . mcoSelEnd .~ - fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) --- Just (NonInf (i, j)) --- | i == fst sstart -> w & input . mouseContext . mcoSelEnd ?~ j --- | i < fst sstart -> w & input . mouseContext . mcoSelEnd ?~ 0 +-- OverInvDragSelect {} -> w +-- OverInvDragSelect (Just sstart) _ -> +-- case inverseSelNumPos cfig invDP (w ^. input . mousePos) sss of +-- Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing +-- Just m +-- | fmap fst m == NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ (m ^?! nonInf . _2) +-- | fmap fst m < NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ 0 -- | otherwise -> w & input . mouseContext . mcoSelEnd .~ -- fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) --- Just NegInf -> w & input . mouseContext . mcoSelEnd ?~ 0 --- Just PosInf -> w & input . mouseContext . mcoSelEnd .~ --- fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) - -- not sure how the above performs when filtering... - OverInvDragSelect Nothing _ -> fromMaybe w $ do - ysel <- - inverseSelSecYint - (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) - sss - ^? nonInf - guard (isGroupSelectableSection $ fst ysel) - return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing +-- -- not sure how the above performs when filtering... +-- OverInvDragSelect Nothing _ -> fromMaybe w $ do +-- ysel <- +-- inverseSelSecYint +-- (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) +-- sss +-- ^? nonInf +-- guard (isGroupSelectableSection $ fst ysel) +-- return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing OverInvDrag k mmouseover -> doDrag cfig 30 k mmouseover w OverTerminalBar p -> w & tmLDP %~ setPixelOffsetBounded cfig (p + w ^. input . mousePos) _ -> w - where - sss = w ^. hud . diSections +-- where +-- sss = w ^. hud . diSections setPixelOffsetBounded :: Config -> Point2 -> LDParams -> LDParams setPixelOffsetBounded cfig (V2 x y) ldp = ldp & ldpPos . spPixelOff .~ V2 x' y' @@ -204,76 +197,77 @@ tryPickupSelected k mpos w = do NInt j <- w ^? hud . closeItems . ix i w ^? cWorld . lWorld . items . ix j -updateMouseReleaseInGame :: World -> World -updateMouseReleaseInGame w = case w ^. input . mouseContext of +updateMouseReleaseInGame :: Config -> World -> World +updateMouseReleaseInGame cfig w = case w ^. input . mouseContext of OverInvDrag k mpos -> input . mouseContext .~ MouseInGame $ fromMaybe w $ tryDropSelected mpos w <|> tryPickupSelected k mpos w - OverInvDragSelect (Just ssel) mesel + OverInvDragSelect ssel | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> - w - & input - . mouseContext - .~ MouseInGame - & ( fromMaybe id $ do - j <- w ^? hud . diSelection . _Just . slSec - return $ - hud - . diSections - . ix j - . ssSet - %~ getuniques - ( maybe - mempty - mempty - -- (h ssel) - (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) - ) - ) - & hud - . diSections - . ix (fst ssel) - . ssSet - %~ getuniques - ( maybe - mempty - (h ssel) - (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) - ) - -- & hud . diSelection . _Just . slSet - -- %~ getuniques - -- ( maybe - -- mempty - -- (h ssel) - -- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) - -- ) - OverInvDragSelect (Just ssel) (Just esel) -> - w - & input - . mouseContext - .~ MouseInGame - -- & invSetSelection (f (fst ssel, esel) (h ssel esel)) - & hud - . diSections - . ix (fst ssel) - . ssSet - .~ h ssel esel - & invSetSelection (f (fst ssel, esel)) - OverInvDragSelect{} -> - w - & input - . mouseContext - .~ MouseInGame - -- & hud . diSelection . _Just . slSet %~ const mempty - & hud - . diSections - . each - . ssSet - %~ const mempty + w & input . mouseContext .~ MouseInGame + & doDragSelect cfig ssel + OverInvDragSelect ssel -> w & input . mouseContext .~ MouseInGame + & hud . diSections . ix 0 . ssSet .~ mempty + & hud . diSections . ix 3 . ssSet .~ mempty + & doDragSelect cfig ssel + +-- OverInvDragSelect (Just ssel) mesel +-- | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> +-- w +-- & input +-- . mouseContext +-- .~ MouseInGame +-- & ( fromMaybe id $ do +-- j <- w ^? hud . diSelection . _Just . slSec +-- return $ +-- hud +-- . diSections +-- . ix j +-- . ssSet +-- %~ getuniques +-- ( maybe +-- mempty +-- mempty +-- -- (h ssel) +-- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) +-- ) +-- ) +-- & hud +-- . diSections +-- . ix (fst ssel) +-- . ssSet +-- %~ getuniques +-- ( maybe +-- mempty +-- (h ssel) +-- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) +-- ) +-- OverInvDragSelect (Just ssel) (Just esel) -> +-- w +-- & input +-- . mouseContext +-- .~ MouseInGame +-- -- & invSetSelection (f (fst ssel, esel) (h ssel esel)) +-- & hud +-- . diSections +-- . ix (fst ssel) +-- . ssSet +-- .~ h ssel esel +-- & invSetSelection (f (fst ssel, esel)) +-- OverInvDragSelect{} -> +-- w +-- & input +-- . mouseContext +-- .~ MouseInGame +-- -- & hud . diSelection . _Just . slSet %~ const mempty +-- & hud +-- . diSections +-- . each +-- . ssSet +-- %~ const mempty _ -> w where - getuniques x y = IS.union x y IS.\\ IS.intersection x y f (x, y) = Sel x y -- need to set this in OverInvDragSelect (twice)? h (k, i) j = fold $ do @@ -282,6 +276,21 @@ updateMouseReleaseInGame w = case w ^. input . mouseContext of (yss, _) = IM.split (max i j + 1) xss return . IM.keysSet $ yss +doDragSelect :: Config -> XInfinity (Int,Int) -> World -> World +doDragSelect cfig x w = fromMaybe w $ do + sss <- w ^? hud . diSections + y <- inverseSelNumPos cfig invDP (w^.input.mousePos) sss + return $ IM.foldlWithKey' f w $ sssSelectionSlice sss x y + where + f w' i ss + | i == 0 || i == 3 = w' + & hud . diSections . ix i . ssSet %~ symmetricDifference (IM.keysSet (ss ^. ssItems)) + | otherwise = w' + +-- this is in Data.IntSet 0.8 +symmetricDifference :: IS.IntSet -> IS.IntSet -> IS.IntSet +symmetricDifference x y = (x `IS.union` y) IS.\\ (x `IS.intersection` y) + isGroupSelectableSection :: Int -> Bool isGroupSelectableSection = \case 0 -> True @@ -290,15 +299,19 @@ isGroupSelectableSection = \case updateMouseClickInGame :: Config -> World -> World updateMouseClickInGame cfig w = case w ^. input . mouseContext of - MouseInGame -> fromMaybe (w & input . mouseContext .~ OverInvDragSelect Nothing Nothing) $ do - let sss = w ^. hud . diSections - ysel <- - inverseSelSecYint + MouseInGame -> w & input . mouseContext .~ OverInvDragSelect + (inverseSelSecYint (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) - sss - ^? nonInf - guard (isGroupSelectableSection $ fst ysel) - return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing + (w ^. hud . diSections)) +-- fromMaybe (w & input . mouseContext .~ OverInvDragSelect Nothing Nothing) $ do +-- let sss = w ^. hud . diSections +-- ysel <- +-- inverseSelSecYint +-- (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) +-- sss +-- ^? nonInf +-- guard (isGroupSelectableSection $ fst ysel) +-- return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing OverInvSelect (-1, _) | selsec == Just (-1) -> w @@ -323,8 +336,9 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of return $ doButtonEvent (but ^. btEvent) but w OverInvSelect x | ScancodeLShift `M.member` (w ^. input . pressedKeys) - && isGroupSelectableSection (fst x) -> - w & input . mouseContext .~ OverInvDragSelect (Just x) (Just $ snd x) + -> w & input . mouseContext .~ OverInvDragSelect (NonInf x) +-- && isGroupSelectableSection (fst x) -> +-- w & input . mouseContext .~ OverInvDragSelect (Just x) (Just $ snd x) OverInvSelect x -> startDrag x w OverTerminal tmid TerminalTextInput{} -> terminalReturnEffect tmid w OverTerminal tmid TerminalPressTo{} -> continueTerminal tmid w diff --git a/tags b/tags index 1762156a3..8a1bc1901 100644 --- a/tags +++ b/tags @@ -587,8 +587,8 @@ Inanimate src/Dodge/Data/ActionPlan.hs 15;" C IncendiaryBall src/Dodge/Data/EnergyBall/Type.hs 11;" C Inertial src/Dodge/Data/Damage.hs 28;" C InheritFloor src/Data/Tile.hs 12;" C -Input src/Dodge/Data/Input.hs 33;" t -InputMemory src/Dodge/Data/Input.hs 52;" t +Input src/Dodge/Data/Input.hs 34;" t +InputMemory src/Dodge/Data/Input.hs 53;" 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 @@ -777,11 +777,11 @@ Mounted src/Dodge/Data/Creature/Stance.hs 32;" C MountedLight src/Dodge/Data/MountedObject.hs 14;" C MountedObject src/Dodge/Data/MountedObject.hs 13;" t MountedSPic src/Dodge/Data/MountedObject.hs 15;" C -MouseAiming src/Dodge/Data/Input.hs 15;" C -MouseContext src/Dodge/Data/Input.hs 13;" t -MouseGameRotate src/Dodge/Data/Input.hs 29;" C -MouseInGame src/Dodge/Data/Input.hs 16;" C -MouseMenu src/Dodge/Data/Input.hs 17;" C +MouseAiming src/Dodge/Data/Input.hs 16;" C +MouseContext src/Dodge/Data/Input.hs 14;" t +MouseGameRotate src/Dodge/Data/Input.hs 30;" C +MouseInGame src/Dodge/Data/Input.hs 17;" C +MouseMenu src/Dodge/Data/Input.hs 18;" C Mouse_position src/Dodge/Data/Config.hs 86;" C Move src/Dodge/Data/ActionPlan.hs 27;" C MoveEquipment src/Dodge/Data/RightButtonOptions.hs 20;" C @@ -844,7 +844,7 @@ NoItemScroll src/Dodge/Data/Item.hs 39;" C NoItemZone src/Dodge/Data/Machine/Sensor.hs 31;" C NoLightFlare src/Dodge/Data/Muzzle.hs 31;" C NoLighting src/Dodge/Data/Config.hs 122;" C -NoMouseContext src/Dodge/Data/Input.hs 14;" C +NoMouseContext src/Dodge/Data/Input.hs 15;" C NoMvType src/Dodge/Data/Creature/Misc.hs 22;" C NoObjShads src/Dodge/Data/Config.hs 120;" C NoParams src/Dodge/Data/Item/Params.hs 13;" C @@ -949,19 +949,19 @@ OpticScope src/Dodge/Data/Item/Scope.hs 12;" C OptionScreen src/Dodge/Data/Universe.hs 82;" C OptionScreenFlag src/Dodge/Data/Universe.hs 70;" t OutLink src/Dodge/Data/Room.hs 48;" C -OutsideTerminal src/Dodge/Data/Input.hs 28;" C +OutsideTerminal src/Dodge/Data/Input.hs 29;" C OutwardShockwave src/Dodge/Data/Shockwave.hs 13;" C -OverCombCombine src/Dodge/Data/Input.hs 23;" C -OverCombEscape src/Dodge/Data/Input.hs 25;" C -OverCombFiltInv src/Dodge/Data/Input.hs 21;" C -OverCombFilter src/Dodge/Data/Input.hs 24;" C -OverCombSelect src/Dodge/Data/Input.hs 22;" C -OverDebug src/Dodge/Data/Input.hs 30;" C -OverInvDrag src/Dodge/Data/Input.hs 18;" C -OverInvDragSelect src/Dodge/Data/Input.hs 19;" C -OverInvSelect src/Dodge/Data/Input.hs 20;" C -OverTerminal src/Dodge/Data/Input.hs 26;" C -OverTerminalBar src/Dodge/Data/Input.hs 27;" C +OverCombCombine src/Dodge/Data/Input.hs 24;" C +OverCombEscape src/Dodge/Data/Input.hs 26;" C +OverCombFiltInv src/Dodge/Data/Input.hs 22;" C +OverCombFilter src/Dodge/Data/Input.hs 25;" C +OverCombSelect src/Dodge/Data/Input.hs 23;" C +OverDebug src/Dodge/Data/Input.hs 31;" C +OverInvDrag src/Dodge/Data/Input.hs 19;" C +OverInvDragSelect src/Dodge/Data/Input.hs 20;" C +OverInvSelect src/Dodge/Data/Input.hs 21;" C +OverTerminal src/Dodge/Data/Input.hs 27;" C +OverTerminalBar src/Dodge/Data/Input.hs 28;" C OverreachingAI src/Dodge/Data/Scenario.hs 31;" C Overstrung src/Dodge/Data/Creature/Perception.hs 55;" C PBSound src/Dodge/Data/SoundOrigin.hs 43;" C @@ -1317,15 +1317,15 @@ TO src/Shader/Data.hs 59;" t TRACTORGUN src/Dodge/Data/Item/Combine.hs 170;" C TRANSFORMER src/Dodge/Data/Item/Combine.hs 65;" C TRANSMITTER src/Dodge/Data/Item/Combine.hs 72;" 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 +TSbackspace src/Dodge/Data/Input.hs 60;" C +TSdelete src/Dodge/Data/Input.hs 61;" C +TSdown src/Dodge/Data/Input.hs 66;" C +TSescape src/Dodge/Data/Input.hs 58;" C +TSleft src/Dodge/Data/Input.hs 63;" C +TSreturn src/Dodge/Data/Input.hs 59;" C +TSright src/Dodge/Data/Input.hs 64;" C +TStab src/Dodge/Data/Input.hs 62;" C +TSup src/Dodge/Data/Input.hs 65;" C TUBE src/Dodge/Data/Item/Combine.hs 52;" C TabComplete src/Dodge/Terminal.hs 160;" C TabCompletion src/Dodge/Terminal.hs 158;" t @@ -1339,7 +1339,7 @@ TargetRBPress src/Dodge/Data/Item/Targeting.hs 10;" C TargetingLaser src/Dodge/Data/Laser.hs 17;" C TargetingType src/Dodge/Data/Item/Targeting.hs 9;" t TeleSound src/Dodge/Data/SoundOrigin.hs 37;" C -TermSignal src/Dodge/Data/Input.hs 56;" t +TermSignal src/Dodge/Data/Input.hs 57;" 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 @@ -1498,8 +1498,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 145;" C -WasMouseGameRotating src/Dodge/Data/Input.hs 53;" C -WasNotMouseGameRotating src/Dodge/Data/Input.hs 54;" C +WasMouseGameRotating src/Dodge/Data/Input.hs 54;" C +WasNotMouseGameRotating src/Dodge/Data/Input.hs 55;" C WatchAndWait src/Dodge/Data/ActionPlan.hs 143;" C WdBl src/Dodge/Data/WorldEffect.hs 56;" t WdBlBtOn src/Dodge/Data/WorldEffect.hs 62;" C @@ -1684,8 +1684,8 @@ _clTimer src/Dodge/Data/Cloud.hs 16;" f _clType src/Dodge/Data/Cloud.hs 17;" f _clVel src/Dodge/Data/Cloud.hs 15;" f _clZoning src/Dodge/Data/World.hs 50;" f -_clickPos src/Dodge/Data/Input.hs 42;" f -_clickWorldPos src/Dodge/Data/Input.hs 44;" f +_clickPos src/Dodge/Data/Input.hs 43;" f +_clickWorldPos src/Dodge/Data/Input.hs 45;" f _cliffs src/Dodge/Data/CWorld.hs 34;" f _closeButtons src/Dodge/Data/HUD.hs 35;" f _closeItems src/Dodge/Data/HUD.hs 34;" f @@ -1919,8 +1919,8 @@ _guVel src/Dodge/Data/Gust.hs 14;" f _gusts src/Dodge/Data/LWorld.hs 102;" f _gwWorld src/Dodge/Data/GenWorld.hs 25;" f _harvestTarget src/Dodge/Data/ActionPlan.hs 153;" f -_heldPos src/Dodge/Data/Input.hs 43;" f -_heldWorldPos src/Dodge/Data/Input.hs 45;" f +_heldPos src/Dodge/Data/Input.hs 44;" f +_heldWorldPos src/Dodge/Data/Input.hs 46;" f _highlightItems src/Dodge/Data/CWorld.hs 36;" f _hiveChildren src/Dodge/Data/Creature/Misc.hs 96;" f _hiveGestation src/Dodge/Data/Creature/Misc.hs 97;" f @@ -1959,7 +1959,7 @@ _incGraph src/Dodge/Data/CWorld.hs 29;" f _incNode src/Dodge/Data/CWorld.hs 30;" f _incNodeZoning src/Dodge/Data/World.hs 56;" f _input src/Dodge/Data/World.hs 44;" f -_inputMemory src/Dodge/Data/Input.hs 49;" f +_inputMemory src/Dodge/Data/Input.hs 50;" f _isWarming src/Dodge/Data/Item/Params.hs 21;" f _ispCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 32;" f _ispCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 30;" f @@ -2051,21 +2051,20 @@ _mcSkin src/Dodge/Data/Machine.hs 34;" f _mcTriggerID src/Dodge/Data/Machine.hs 51;" f _mcType src/Dodge/Data/Machine.hs 40;" f _mcdStorageMachine src/Dodge/Data/Machine.hs 50;" f -_mcoBarOffset src/Dodge/Data/Input.hs 27;" f -_mcoCombCombine src/Dodge/Data/Input.hs 23;" f -_mcoCombSelect src/Dodge/Data/Input.hs 22;" f -_mcoDBBool src/Dodge/Data/Input.hs 30;" f -_mcoDBInt src/Dodge/Data/Input.hs 30;" f -_mcoDragSection src/Dodge/Data/Input.hs 18;" f -_mcoInvFilt src/Dodge/Data/Input.hs 21;" f -_mcoInvSelect src/Dodge/Data/Input.hs 20;" f -_mcoMaybeSelect src/Dodge/Data/Input.hs 18;" f -_mcoMenuClick src/Dodge/Data/Input.hs 17;" f -_mcoRotateDist src/Dodge/Data/Input.hs 29;" f -_mcoSecSelStart src/Dodge/Data/Input.hs 19;" f -_mcoSelEnd src/Dodge/Data/Input.hs 19;" f -_mcoTermID src/Dodge/Data/Input.hs 26;" f -_mcoTermStatus src/Dodge/Data/Input.hs 26;" f +_mcoBarOffset src/Dodge/Data/Input.hs 28;" f +_mcoCombCombine src/Dodge/Data/Input.hs 24;" f +_mcoCombSelect src/Dodge/Data/Input.hs 23;" f +_mcoDBBool src/Dodge/Data/Input.hs 31;" f +_mcoDBInt src/Dodge/Data/Input.hs 31;" f +_mcoDragSection src/Dodge/Data/Input.hs 19;" f +_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 18;" f +_mcoRotateDist src/Dodge/Data/Input.hs 30;" f +_mcoSecSelStart src/Dodge/Data/Input.hs 20;" f +_mcoTermID src/Dodge/Data/Input.hs 27;" f +_mcoTermStatus src/Dodge/Data/Input.hs 27;" f _mcsAmount src/Dodge/Data/Machine.hs 49;" f _mcsType src/Dodge/Data/Machine.hs 49;" f _mctTurret src/Dodge/Data/Machine.hs 48;" f @@ -2098,11 +2097,11 @@ _modString src/Dodge/Data/Universe.hs 105;" f _modifications src/Dodge/Data/LWorld.hs 133;" f _mountID src/Dodge/Data/Creature/Stance.hs 32;" f _mountPos src/Dodge/Data/Creature/Stance.hs 32;" f -_mouseButtons src/Dodge/Data/Input.hs 38;" f -_mouseButtonsReleased src/Dodge/Data/Input.hs 39;" f -_mouseContext src/Dodge/Data/Input.hs 35;" f -_mouseMoving src/Dodge/Data/Input.hs 36;" f -_mousePos src/Dodge/Data/Input.hs 34;" f +_mouseButtons src/Dodge/Data/Input.hs 39;" f +_mouseButtonsReleased src/Dodge/Data/Input.hs 40;" f +_mouseContext src/Dodge/Data/Input.hs 36;" f +_mouseMoving src/Dodge/Data/Input.hs 37;" f +_mousePos src/Dodge/Data/Input.hs 35;" f _mtBranches src/Dodge/Data/MetaTree.hs 13;" f _mtLabel src/Dodge/Data/MetaTree.hs 13;" f _mtTree src/Dodge/Data/MetaTree.hs 13;" f @@ -2190,7 +2189,7 @@ _prPos src/Dodge/Data/Prop.hs 15;" f _prRooms src/Dodge/Tree/Shift.hs 31;" f _prRot src/Dodge/Data/Prop.hs 18;" f _preloadData src/Dodge/Data/Universe.hs 30;" f -_pressedKeys src/Dodge/Data/Input.hs 37;" f +_pressedKeys src/Dodge/Data/Input.hs 38;" f _projectiles src/Dodge/Data/LWorld.hs 105;" f _props src/Dodge/Data/LWorld.hs 103;" f _proxReqDead src/Dodge/Data/Machine/Sensor.hs 36;" f @@ -2327,14 +2326,14 @@ _scPara src/Dodge/Data/Universe.hs 94;" f _scPositionedMenuOption src/Dodge/Data/Universe.hs 86;" f _scSelectionList src/Dodge/Data/Universe.hs 88;" f _scTitle src/Dodge/Data/Universe.hs 83;" f -_scrollAmount src/Dodge/Data/Input.hs 40;" f +_scrollAmount src/Dodge/Data/Input.hs 41;" f _scrollItemID src/Dodge/Data/World.hs 73;" f _scrollItemID src/Dodge/Data/World.hs 82;" f _scrollItemID src/Dodge/Data/World.hs 86;" f _scrollSmoothing src/Dodge/Data/World.hs 70;" f _scrollSmoothing src/Dodge/Data/World.hs 76;" f -_scrollTestFloat src/Dodge/Data/Input.hs 47;" f -_scrollTestInt src/Dodge/Data/Input.hs 48;" f +_scrollTestFloat src/Dodge/Data/Input.hs 48;" f +_scrollTestInt src/Dodge/Data/Input.hs 49;" f _scurColor src/Dodge/Data/SelectionList.hs 29;" f _scurPos src/Dodge/Data/SelectionList.hs 27;" f _scurSize src/Dodge/Data/SelectionList.hs 28;" f @@ -2389,7 +2388,7 @@ _slimeSlimeChange src/Dodge/Data/Creature/Misc.hs 78;" f _slimeSplitTimer src/Dodge/Data/Creature/Misc.hs 81;" f _slinkHeadPos src/Dodge/Data/Creature/Misc.hs 74;" f _slinkSpine src/Dodge/Data/Creature/Misc.hs 73;" f -_smoothScrollAmount src/Dodge/Data/Input.hs 41;" f +_smoothScrollAmount src/Dodge/Data/Input.hs 42;" f _soundAngDist src/Sound/Data.hs 47;" f _soundChannel src/Sound/Data.hs 46;" f _soundChunkID src/Sound/Data.hs 51;" f @@ -2450,7 +2449,7 @@ _termID src/Dodge/Data/HUD.hs 26;" f _terminals src/Dodge/Data/LWorld.hs 127;" f _teslaArcs src/Dodge/Data/LWorld.hs 115;" f _testFloat src/Dodge/Data/World.hs 45;" f -_textInput src/Dodge/Data/Input.hs 46;" f +_textInput src/Dodge/Data/Input.hs 47;" f _textureAntiaShader src/Data/Preload/Render.hs 24;" f _textureObject src/Shader/Data.hs 103;" f _tiText src/Dodge/Data/Terminal/Status.hs 14;" f @@ -2964,7 +2963,7 @@ closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 237;" f closeItemDist src/Dodge/Inventory.hs 152;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 260;" f -closeObjectInfo src/Dodge/Render/HUD.hs 243;" f +closeObjectInfo src/Dodge/Render/HUD.hs 273;" f closestCrToMouse src/Dodge/Debug.hs 308;" f closestPointOnLine src/Geometry/Intersect.hs 286;" f closestPointOnLineParam src/Geometry/Intersect.hs 302;" f @@ -2999,7 +2998,7 @@ combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 44;" f combineAwareness src/Dodge/Creature/Perception.hs 119;" f combineFloors src/Dodge/Room/Procedural.hs 154;" f -combineInventoryExtra src/Dodge/Render/HUD.hs 355;" f +combineInventoryExtra src/Dodge/Render/HUD.hs 385;" f combineItemListYouX src/Dodge/Combine.hs 36;" f combineList src/Dodge/Combine.hs 21;" f combineRooms src/Dodge/Room/Procedural.hs 134;" f @@ -3026,7 +3025,7 @@ connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 802;" 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 523;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 514;" f convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -3368,7 +3367,8 @@ 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 32;" f -doDrag src/Dodge/Update/Input/InGame.hs 158;" f +doDrag src/Dodge/Update/Input/InGame.hs 136;" f +doDragSelect src/Dodge/Update/Input/InGame.hs 277;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f @@ -3387,7 +3387,7 @@ doPreload appDodge/Main.hs 133;" 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 576;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 567;" f doRoomPlacements src/Dodge/Layout.hs 121;" f doRoomShift src/Dodge/Room/Link.hs 34;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f @@ -3438,7 +3438,7 @@ drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f drawCliff src/Dodge/Render/ShapePicture.hs 87;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f drawCombFilter src/Dodge/Render/Picture.hs 273;" f -drawCombineInventory src/Dodge/Render/HUD.hs 205;" f +drawCombineInventory src/Dodge/Render/HUD.hs 235;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 72;" f drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f @@ -3465,7 +3465,7 @@ drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f drawEmptySet src/Dodge/Render/Picture.hs 153;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f drawEquipment src/Dodge/Creature/Picture.hs 426;" f -drawExamineInventory src/Dodge/Render/HUD.hs 214;" f +drawExamineInventory src/Dodge/Render/HUD.hs 244;" f drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 271;" f drawFlame src/Dodge/Flame/Draw.hs 8;" f @@ -3480,8 +3480,8 @@ drawInputMenu src/Dodge/Render/MenuScreen.hs 33;" f drawInspectWall src/Dodge/Debug/Picture.hs 256;" f drawInspectWalls src/Dodge/Debug/Picture.hs 244;" f drawInventory src/Dodge/Render/HUD.hs 61;" f -drawItemChildrenConnect src/Dodge/Render/HUD.hs 347;" f -drawItemConnections src/Dodge/Render/HUD.hs 340;" f +drawItemChildrenConnect src/Dodge/Render/HUD.hs 377;" f +drawItemConnections src/Dodge/Render/HUD.hs 370;" f drawJumpDown src/Dodge/Render/Picture.hs 192;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLabelledList src/Dodge/Render/List.hs 198;" f @@ -3495,7 +3495,7 @@ drawListYoff src/Dodge/Render/List.hs 89;" f drawLoadingScreen src/Dodge/Render/MenuScreen.hs 24;" f drawMachine src/Dodge/Machine/Draw.hs 18;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f -drawMapperInventory src/Dodge/Render/HUD.hs 196;" f +drawMapperInventory src/Dodge/Render/HUD.hs 226;" f drawMenuClick src/Dodge/Render/Picture.hs 168;" f drawMenuCursor src/Dodge/Render/Picture.hs 180;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 67;" f @@ -3514,7 +3514,7 @@ drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawPulseBall src/Dodge/Render/ShapePicture.hs 95;" f drawPulseLaser src/Dodge/Laser/Update.hs 42;" f drawQuitTerminal src/Dodge/Render/Picture.hs 147;" f -drawRBOptions src/Dodge/Render/HUD.hs 268;" f +drawRBOptions src/Dodge/Render/HUD.hs 298;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 14;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 38;" f drawReturn src/Dodge/Render/Picture.hs 156;" f @@ -3532,12 +3532,12 @@ drawSlimeCrit src/Dodge/Creature/Picture.hs 57;" f drawSlinkCrit src/Dodge/Creature/Picture.hs 86;" f drawSpark src/Dodge/Spark/Draw.hs 7;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 28;" f -drawSubInventory src/Dodge/Render/HUD.hs 188;" f +drawSubInventory src/Dodge/Render/HUD.hs 218;" f drawSwitch src/Dodge/Button/Draw.hs 18;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 24;" f drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f -drawTerminalCursorLink src/Dodge/Render/HUD.hs 411;" f -drawTerminalDisplay src/Dodge/Render/HUD.hs 372;" f +drawTerminalCursorLink src/Dodge/Render/HUD.hs 441;" f +drawTerminalDisplay src/Dodge/Render/HUD.hs 402;" f drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f drawText src/Picture/Base.hs 224;" f drawTitle src/Dodge/Render/MenuScreen.hs 49;" f @@ -3599,8 +3599,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 87;" f -endCombineRegex src/Dodge/Update/Input/InGame.hs 411;" f -endRegex src/Dodge/Update/Input/InGame.hs 405;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 402;" f +endRegex src/Dodge/Update/Input/InGame.hs 396;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f enterCombineInv src/Dodge/DisplayInventory.hs 321;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f @@ -3608,7 +3608,7 @@ epText src/Dodge/Inventory/SelectionList.hs 74;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 5;" f eqTypeToSites src/Dodge/Inventory/RBList.hs 77;" f -equipAllocString src/Dodge/Render/HUD.hs 331;" f +equipAllocString src/Dodge/Render/HUD.hs 361;" f equipAttachPos src/Dodge/Item/Draw.hs 30;" f equipBackgroundEffect src/Dodge/Euse.hs 22;" f equipInfo src/Dodge/Item/Info.hs 140;" f @@ -3691,7 +3691,7 @@ flockACC src/Dodge/Creature/ReaderUpdate.hs 97;" f flockArmourChaseCrit src/Dodge/Creature/ArmourChase.hs 14;" f flockChaseTarget src/Dodge/Creature/Boid.hs 188;" f flockPointTarget src/Dodge/Creature/Boid.hs 204;" f -floorItemPickupInfo src/Dodge/Render/HUD.hs 248;" f +floorItemPickupInfo src/Dodge/Render/HUD.hs 278;" f floorItemSPic src/Dodge/Render/ShapePicture.hs 143;" f floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f @@ -3759,7 +3759,7 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 90;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 175;" f getBulletType src/Dodge/HeldUse.hs 945;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 700;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 691;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f @@ -3980,7 +3980,7 @@ invDP src/Dodge/ListDisplayParams.hs 32;" f invDT src/Dodge/Item/Grammar.hs 227;" f invDT' src/Dodge/Item/Grammar.hs 232;" f invDimColor src/Dodge/DisplayInventory.hs 190;" f -invHead src/Dodge/Render/HUD.hs 441;" f +invHead src/Dodge/Render/HUD.hs 471;" f invIMDT src/Dodge/Item/Grammar.hs 256;" f invIndents src/Dodge/Item/Grammar.hs 263;" f invItemEffs src/Dodge/Creature/State.hs 91;" f @@ -3992,9 +3992,9 @@ invSetSelectionPos src/Dodge/Inventory.hs 304;" f invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 103;" f -inverseSelNumPos src/Dodge/SelectionSections.hs 213;" f -inverseSelSecYint src/Dodge/SelectionSections.hs 181;" f -inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 194;" f +inverseSelNumPos src/Dodge/SelectionSections.hs 231;" f +inverseSelSecYint src/Dodge/SelectionSections.hs 199;" f +inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 212;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 44;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 16;" f invertIntMap src/IntMapHelp.hs 100;" f @@ -4010,7 +4010,7 @@ isCognizant src/Dodge/Creature/Perception.hs 115;" f isConnected src/Dodge/Inventory/Swap.hs 86;" f isCornerLink src/Dodge/RoomLink.hs 66;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 232;" f -isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 300;" f +isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 286;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f isLHS src/Geometry/LHS.hs 12;" f @@ -4172,7 +4172,7 @@ listGuard src/Dodge/Creature/ReaderUpdate.hs 287;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f -lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 430;" f +lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 460;" f loadAmmoTut src/Dodge/Room/Tutorial.hs 475;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f @@ -4299,7 +4299,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 736;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 727;" f maybeOpenConsole src/Dodge/Update.hs 135;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f @@ -4453,7 +4453,7 @@ newSounds src/Dodge/Creature/Perception.hs 175;" f newSoundsToPlay src/Dodge/SoundSelection.hs 8;" f newTextureFramebuffer src/Framebuffer/Setup.hs 16;" f nextArc src/Dodge/Tesla.hs 61;" f -nextInSectionSS src/Dodge/SelectionSections.hs 33;" f +nextInSectionSS src/Dodge/SelectionSections.hs 35;" f nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f @@ -4541,7 +4541,7 @@ passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 693;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 692;" f +pauseGame src/Dodge/Update/Input/InGame.hs 683;" f pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f @@ -4671,7 +4671,7 @@ pop3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 838;" f popS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 590;" f popScreen src/Dodge/Menu/PushPop.hs 6;" f posRms src/Dodge/Tree/Shift.hs 46;" f -posSelSecYint src/Dodge/SelectionSections.hs 163;" f +posSelSecYint src/Dodge/SelectionSections.hs 181;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 36;" f postGenerationProcessing src/Dodge/LevelGen.hs 31;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 14;" f @@ -4992,7 +4992,7 @@ screenToWorldPos src/Dodge/Base/Coordinate.hs 45;" f scrollAugInvSel src/Dodge/Inventory.hs 307;" f scrollAugNextInSection src/Dodge/Inventory.hs 321;" f scrollRBOption src/Dodge/Update/Scroll.hs 139;" f -scrollSelectionSections src/Dodge/SelectionSections.hs 27;" f +scrollSelectionSections src/Dodge/SelectionSections.hs 29;" f scrollTimeBack src/Dodge/Update.hs 245;" f scrollTimeForward src/Dodge/Update.hs 262;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 624;" f @@ -5012,14 +5012,14 @@ seedStartMenu src/Dodge/Menu.hs 85;" f seedStartOptions src/Dodge/Menu.hs 88;" f segOnCirc src/Geometry.hs 113;" f segmentArea src/Dodge/Creature/Update.hs 355;" f -selNumPos src/Dodge/Render/HUD.hs 490;" f -selNumPosCardinal src/Dodge/Render/HUD.hs 507;" f +selNumPos src/Dodge/Render/HUD.hs 520;" f +selNumPosCardinal src/Dodge/Render/HUD.hs 537;" f selSecDrawCursor src/Dodge/Render/List.hs 101;" f -selSecSelCol src/Dodge/Render/HUD.hs 527;" f -selSecSelSize src/Dodge/SelectionSections.hs 159;" f -selSecYint src/Dodge/SelectionSections.hs 168;" f +selSecSelCol src/Dodge/Render/HUD.hs 557;" f +selSecSelSize src/Dodge/SelectionSections.hs 177;" f +selSecYint src/Dodge/SelectionSections.hs 186;" f selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f -selectionSet src/Dodge/Update/Input/InGame.hs 184;" f +selectionSet src/Dodge/Update/Input/InGame.hs 162;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 846;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 68;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 77;" f @@ -5052,9 +5052,9 @@ setOldPos src/Dodge/Update.hs 602;" f setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f -setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 145;" f +setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 123;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 318;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 467;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 458;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -5097,7 +5097,7 @@ shiftByV2 src/Dodge/PlacementSpot.hs 257;" f shiftChildren src/Dodge/Tree/Compose.hs 45;" f shiftDraw src/Dodge/Render/ShapePicture.hs 111;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f -shiftInvItems src/Dodge/Update/Input/InGame.hs 435;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 426;" f shiftInvItemsDown src/Dodge/Inventory.hs 186;" f shiftInvItemsUp src/Dodge/Inventory.hs 196;" f shiftLinkBy src/Dodge/Room/Link.hs 89;" f @@ -5231,7 +5231,7 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 89;" f spPos src/ShapePicture/Data.hs 11;" f -spaceAction src/Dodge/Update/Input/InGame.hs 695;" f +spaceAction src/Dodge/Update/Input/InGame.hs 686;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 162;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 155;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 147;" f @@ -5269,22 +5269,25 @@ square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 127;" f squashNormalizeV src/Geometry/Vector.hs 166;" f -ssLookupDown src/Dodge/SelectionSections.hs 98;" f -ssLookupGE' src/Dodge/SelectionSections.hs 152;" f -ssLookupGT src/Dodge/SelectionSections.hs 139;" f -ssLookupGT' src/Dodge/SelectionSections.hs 145;" f -ssLookupLE' src/Dodge/SelectionSections.hs 127;" f -ssLookupLT src/Dodge/SelectionSections.hs 114;" f -ssLookupLT' src/Dodge/SelectionSections.hs 120;" f -ssLookupMax src/Dodge/SelectionSections.hs 88;" f -ssLookupMaxInSection src/Dodge/SelectionSections.hs 108;" f -ssLookupMin src/Dodge/SelectionSections.hs 134;" f -ssLookupNextMax src/Dodge/SelectionSections.hs 103;" f -ssLookupUp src/Dodge/SelectionSections.hs 93;" f -ssScrollMinOnFail src/Dodge/SelectionSections.hs 44;" f -ssScrollUsing src/Dodge/SelectionSections.hs 36;" f -ssSetCursor src/Dodge/SelectionSections.hs 72;" f +ssLookupDown src/Dodge/SelectionSections.hs 100;" f +ssLookupGE src/Dodge/SelectionSections.hs 154;" f +ssLookupGE' src/Dodge/SelectionSections.hs 170;" f +ssLookupGT src/Dodge/SelectionSections.hs 141;" f +ssLookupGT' src/Dodge/SelectionSections.hs 147;" f +ssLookupLE src/Dodge/SelectionSections.hs 162;" f +ssLookupLE' src/Dodge/SelectionSections.hs 129;" f +ssLookupLT src/Dodge/SelectionSections.hs 116;" f +ssLookupLT' src/Dodge/SelectionSections.hs 122;" f +ssLookupMax src/Dodge/SelectionSections.hs 90;" f +ssLookupMaxInSection src/Dodge/SelectionSections.hs 110;" f +ssLookupMin src/Dodge/SelectionSections.hs 136;" f +ssLookupNextMax src/Dodge/SelectionSections.hs 105;" f +ssLookupUp src/Dodge/SelectionSections.hs 95;" f +ssScrollMinOnFail src/Dodge/SelectionSections.hs 46;" f +ssScrollUsing src/Dodge/SelectionSections.hs 38;" f +ssSetCursor src/Dodge/SelectionSections.hs 74;" f ssfold src/FoldableHelp.hs 105;" f +sssSelectionSlice src/Dodge/Render/HUD.hs 200;" f stackPicturesAt src/Dodge/Render/List.hs 95;" f stackPicturesAtOff src/Dodge/Render/List.hs 98;" f stackText src/Picture/Base.hs 180;" f @@ -5292,7 +5295,7 @@ stackedInventory src/Dodge/Creature.hs 318;" f startCr src/Dodge/Creature.hs 83;" f startCrafts src/Dodge/Room/Start.hs 94;" f startDeathTimer src/Dodge/Creature/Update.hs 495;" f -startDrag src/Dodge/Update/Input/InGame.hs 420;" f +startDrag src/Dodge/Update/Input/InGame.hs 411;" f startInvList src/Dodge/Creature.hs 97;" f startInventory src/Dodge/Creature.hs 100;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5521,14 +5524,14 @@ truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 164;" f tryAttachItems src/Dodge/Item/Grammar.hs 35;" f tryClickUse src/Dodge/Creature/YourControl.hs 207;" f -tryCombine src/Dodge/Update/Input/InGame.hs 712;" f +tryCombine src/Dodge/Update/Input/InGame.hs 703;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 179;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 169;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 147;" f tryEvadeSideways src/Dodge/Creature/Action.hs 101;" f tryGetChannel src/Sound.hs 99;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 23;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 42;" f -tryPickupSelected src/Dodge/Update/Input/InGame.hs 196;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 174;" f tryPlay src/Sound.hs 85;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 25;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 56;" f @@ -5581,7 +5584,7 @@ updateAggroBee src/Dodge/Creature/Update.hs 129;" f updateAimPos src/Dodge/Update.hs 400;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 44;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 607;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 598;" f updateBarrel src/Dodge/Barreloid.hs 43;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f @@ -5625,14 +5628,14 @@ updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 32;" f updateEnergyBalls src/Dodge/Update.hs 775;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 652;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 643;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 772;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFoodSearchChaseCrit src/Dodge/Creature/Update.hs 381;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 484;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 480;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 475;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 471;" f updateGas src/Dodge/Update.hs 942;" f updateGusts src/Dodge/Update.hs 904;" f updateHiveCrit src/Dodge/Creature/Update.hs 82;" f @@ -5640,30 +5643,30 @@ updateHoverCrit src/Dodge/Humanoid.hs 25;" f updateIMl src/Dodge/Update.hs 639;" f updateIMl' src/Dodge/Update.hs 642;" f updateInGameCamera src/Dodge/Update/Camera.hs 86;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 557;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 548;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateItemTargeting src/Dodge/Creature/State.hs 288;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 517;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 551;" f -updateKeysInGame src/Dodge/Update/Input/InGame.hs 89;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 503;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 526;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 508;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 542;" f +updateKeysInGame src/Dodge/Update/Input/InGame.hs 81;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 494;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 517;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 12;" f updateLasers src/Dodge/Update.hs 517;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 179;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLivingCreature src/Dodge/Creature/Update.hs 61;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 570;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 561;" f updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 408;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 306;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 292;" f updateMouseContext src/Dodge/Update.hs 421;" f updateMouseContextGame src/Dodge/Update.hs 426;" f -updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 102;" f -updateMouseInGame src/Dodge/Update/Input/InGame.hs 92;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 222;" f +updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 94;" f +updateMouseInGame src/Dodge/Update/Input/InGame.hs 84;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 200;" f updateObjCatMaybes src/Dodge/Update.hs 657;" f updateObjMapMaybe src/Dodge/Update.hs 650;" f updatePastWorlds src/Dodge/Update.hs 506;" f @@ -5877,7 +5880,7 @@ yV2 src/Geometry/Vector.hs 213;" f yellow src/Color.hs 44;" f you src/Dodge/Base/You.hs 17;" f youDropItem src/Dodge/Creature/Action.hs 195;" f -yourAugmentedItem src/Dodge/Render/HUD.hs 255;" f +yourAugmentedItem src/Dodge/Render/HUD.hs 285;" f yourControl src/Dodge/Creature/YourControl.hs 26;" f yourDefaultStrideLength src/Dodge/Default/Creature.hs 109;" f yourInfo src/Dodge/Creature/Info.hs 10;" f