diff --git a/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs b/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs index e40ad3ad8..b9d7dffd7 100644 --- a/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs +++ b/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs @@ -10,12 +10,6 @@ import qualified Data.IntSet as IS import Control.Lens import Data.Aeson import Data.Aeson.TH ---import Sound.Data - ---data Manipulation -- should be ManipulatedObject? --- = Manipulator {_manObject :: ManipulatedObject } --- | Brute --- deriving (Eq, Ord, Show, Read) --Generic, Flat) data ManipulatedObject = HeldItem @@ -24,20 +18,6 @@ data ManipulatedObject , _hiAttachedItems :: IS.IntSet -- this should probably be NewIntSet InvInt also } | HandsFree --- = SortInventory --- | SelectedItem --- { _imRootSelectedItem :: NewInt InvInt --- , _imAimStance :: AimStance --- , _imAttachedItems :: IS.IntSet -- this should probably be NewIntSet InvInt also --- } --- | SelNothing --- | SortCloseItem --- | SelCloseItem {_ispCloseItem :: Int} --- | SortCloseButton --- | SelCloseButton {_ispCloseButton :: Int} --- deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''ManipulatedObject ---makeLenses ''Manipulation deriveJSON defaultOptions ''ManipulatedObject ---deriveJSON defaultOptions ''Manipulation diff --git a/src/Dodge/FloorItem.hs b/src/Dodge/FloorItem.hs index 64bdd9ab1..579c6c032 100644 --- a/src/Dodge/FloorItem.hs +++ b/src/Dodge/FloorItem.hs @@ -14,11 +14,12 @@ import System.Random copyItemToFloor :: Point2 -> Item -> World -> World copyItemToFloor p it w = w' - & cWorld . lWorld . floorItems . at (it ^. itID . unNInt) ?~ FlIt q r - & cWorld . lWorld . items . at (it ^. itID . unNInt) ?~ (it & itLocation .~ OnFloor) + & cWorld . lWorld . floorItems . at i ?~ FlIt q r + & cWorld . lWorld . items . at i ?~ (it & itLocation .~ OnFloor) & hud . closeItems .:~ _itID it -- puts item at top of close items - & cWorld . highlightItems . at (it ^. itID . unNInt) ?~ 20 + & cWorld . highlightItems . at i ?~ 20 where + i = it ^. itID . unNInt (q, w') = findWallFreeDropPoint (_dimRad $ itDim it) p w r = fst . randomR (- pi, pi) $ _randGen w diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 9cc8c6ab8..b43f74e2a 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -12,7 +12,6 @@ module Dodge.Inventory ( swapInvItems, scrollAugNextInSection, swapItemWith, - destroyItem, destroyAllInvItems, multiSelScroll, changeSwapSelSet, @@ -68,17 +67,6 @@ destroyAllInvItems cr w = . _unNIntMap $ cr ^. crInv -destroyItem :: Int -> World -> World -destroyItem itid w = case w ^? cWorld . lWorld . items . ix itid . itLocation of - Nothing -> error $ "Tried to destroy item that does not exist; item id: " ++ show itid - 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 - & cWorld . lWorld . floorItems . at itid .~ Nothing - Just InVoid -> w & cWorld . lWorld . items . at itid .~ Nothing - -- note rmInvItem does not fully destroy the item, other updates to the item -- location are required -- note if this gets called ssInvPosFromSS might be necessary elsewhere diff --git a/src/Dodge/Inventory/Add.hs b/src/Dodge/Inventory/Add.hs index b12683c97..ae650a738 100644 --- a/src/Dodge/Inventory/Add.hs +++ b/src/Dodge/Inventory/Add.hs @@ -29,14 +29,10 @@ tryPutItemInInv mcipos itid w = do let itloc = InInv { _ilCrID = 0 , _ilInvID = invid --- , _ilIsRoot = False --- , _ilIsSelected = False --- , _ilIsAttached = False , _ilEquipSite = Nothing } return $ (invid,) $ w - & crUpdateItemLocations -- not sure about the order of these... & cWorld . lWorld . creatures . ix 0 . crInv . at invid ?~ itid & cWorld . lWorld . items . ix itid . itLocation .~ itloc @@ -78,8 +74,8 @@ createItemYou itm w = maybe w' snd $ tryPutItemInInv Nothing itid w' w' = copyItemToFloor pos (itm & itID .~ NInt itid) w -- the duplication is annoying... -pickUpItem :: (Int,Int) -> World -> World -pickUpItem (i,itid) w = fromMaybe w $ do +pickUpItem :: Int -> Int -> World -> World +pickUpItem i itid w = fromMaybe w $ do p <- w ^? cWorld . lWorld . floorItems . ix itid . flItPos soundStart (CrSound 0) p pickUpS Nothing . snd <$> tryPutItemInInv (Just i) itid w diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index 1f0a22a61..1c1646e9f 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -219,9 +219,9 @@ hotkeyToChar = \case closeItemToSelectionItem :: World -> Int -> Maybe (SelectionItem ()) closeItemToSelectionItem w i = do - e <- w ^? cWorld . lWorld . items . ix i - let pics = itemDisplay w Nothing e - col = itemInvColor (baseCI e) + itm <- w ^? cWorld . lWorld . items . ix i + let pics = itemDisplay w Nothing itm + col = itemInvColor (baseCI itm) return SelItem { _siPictures = pics diff --git a/src/Dodge/SelectedClose.hs b/src/Dodge/SelectedClose.hs index 879d60f56..33bff5220 100644 --- a/src/Dodge/SelectedClose.hs +++ b/src/Dodge/SelectedClose.hs @@ -10,10 +10,12 @@ import Data.Maybe -- assumes that, for picking up, you are selecting the item interactWithCloseObj :: Either (NewInt ItmInt) Button -> World -> World interactWithCloseObj e w = worldEventFlags . at InventoryChange ?~ () $ case e of - (Left flit) -> fromMaybe w $ do - i <- w ^? hud . diSelection . _Just . slInt - return $ pickUpItem (i,_unNInt flit) w + (Left flit) -> pickUpItem i (_unNInt flit) w (Right but) -> doButtonEvent (but ^. btEvent) but w + where + i = fromMaybe 0 $ do + Sel 3 j <- w ^. hud . diSelection + return j getSelectedCloseObj :: World -> Maybe (Either (NewInt ItmInt) Button) getSelectedCloseObj w = do diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 2f44d392b..e88f30e11 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -49,18 +49,19 @@ import SDL updateUseInputInGame :: Universe -> Universe updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . subInventory of DisplayTerminal tmid -> updateKeysInTerminal tmid u - CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _))} -> u - & uvWorld . hud . subInventory %~ docombineregexinput sss msel - & uvWorld . worldEventFlags . at CombineInventoryChange ?~ () + CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _))} -> + u + & uvWorld . hud . subInventory %~ docombineregexinput sss msel + & uvWorld . worldEventFlags . at CombineInventoryChange ?~ () _ | Just (-1) <- disel -> f diInvFilter diInvFilter (-1) _ | Just 2 <- disel -> f diCloseFilter diCloseFilter 2 _ -> updateKeysInGame u where disel = u ^? uvWorld . hud . diSelection . _Just . slSec f x y i = u - & uvWorld . hud %~ dodisplayregexinput x y i - & uvWorld . worldEventFlags . at InventoryChange ?~ () - & uvWorld %~ setInvPosFromSS -- not sure if this is necessary + & uvWorld . hud %~ dodisplayregexinput x y i + & uvWorld . worldEventFlags . at InventoryChange ?~ () + & uvWorld %~ setInvPosFromSS -- not sure if this is necessary dodisplayregexinput filterprism filterlens x di = fromMaybe di $ do sss <- di ^? diSections msel <- di ^? diSelection @@ -96,30 +97,9 @@ 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 {} -> 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) --- -- 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 OverInvDrag k -> doDrag cfig 30 k w OverTerminalBar p -> w & tmLDP %~ setPixelOffsetBounded cfig (p + w ^. input . mousePos) _ -> w --- where --- sss = w ^. hud . diSections setPixelOffsetBounded :: Config -> Point2 -> LDParams -> LDParams setPixelOffsetBounded cfig (V2 x y) ldp = ldp & ldpPos . spPixelOff .~ V2 x' y' @@ -134,8 +114,6 @@ setPixelOffsetBounded cfig (V2 x y) ldp = ldp & ldpPos . spPixelOff .~ V2 x' y' max (1 + 20 * (ldp ^. ldpVerticalGap + ldp ^?! ldpSize . _Just . _y . to fromIntegral) - h * b) y V2 a b = ldp ^. ldpPos . spScreenOff ---doDrag :: Config -> Int -> Int -> Maybe (Int, Int) -> World -> World ---doDrag cfig n k mmouseover w = fromMaybe w $ do doDrag :: Config -> Int -> Int -> World -> World doDrag cfig n k w = fromMaybe w $ do guard (n /= 0) @@ -173,11 +151,6 @@ selectionSet w = do Just is | not $ IS.null is -> Just is _ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt --- selectionSet :: World -> Maybe IS.IntSet --- selectionSet w = case w ^? hud . diSelection . _Just . slSet of --- Just is' | not $ IS.null is' -> Just is' --- _ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt - tryPickupSelected :: Int -> Maybe (Int, Int) -> World -> Maybe World tryPickupSelected k mpos w = do guard $ k == 3 @@ -195,8 +168,7 @@ tryPickupSelected k mpos w = do guard $ nfreeslots >= slotsneeded return $ case mpos of Just (0, j) -> foldr (pickUpItemAt j) w (zip is ispickup) & newdisel j joff - _ -> foldl' (flip $ pickUpItem) w (zip is ispickup) & newdisel (length (cr ^. crInv)) joff --- _ -> foldr (pickUpItem 0) w (zip is ispickup) & newdisel (length (cr ^. crInv)) joff + _ -> foldl' (flip $ pickUpItem (head is)) w ispickup & newdisel (length (cr ^. crInv)) joff where newdisel j joff = hud . diSelection ?~ Sel 0 (j + joff) g i = do @@ -204,35 +176,37 @@ tryPickupSelected k mpos w = do w ^? cWorld . lWorld . items . ix j updateMouseReleaseInGame :: Config -> World -> World -updateMouseReleaseInGame cfig w = case w ^. input . mouseContext of - --OverInvDrag k mpos -> +updateMouseReleaseInGame cfig w = input . mouseContext .~ MouseInGame $ case w ^. input . mouseContext of OverInvDrag k -> - input . mouseContext .~ MouseInGame $ - fromMaybe w $ - tryDropSelected mpos w <|> tryPickupSelected k mpos w - OverInvDragSelect ssel - | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> - 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 + fromMaybe w $ + tryDropSelected mpos w <|> tryPickupSelected k mpos w + OverInvDragSelect ssel -> + w + & mresetssset + & doDragSelect cfig ssel _ -> w where + mresetssset + | ScancodeLShift `M.member` (w ^. input . pressedKeys) = id + | otherwise = hud . diSections . each . ssSet .~ mempty mpos = inverseSelNumPos cfig invDP mpos' disss ^? _Just . nonInf mpos' = w ^. input . mousePos disss = w ^. hud . diSections -doDragSelect :: Config -> XInfinity (Int,Int) -> World -> World +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 + 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)) + 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 @@ -241,16 +215,23 @@ symmetricDifference x y = (x `IS.union` y) IS.\\ (x `IS.intersection` y) updateMouseClickInGame :: Config -> World -> World updateMouseClickInGame cfig w = case w ^. input . mouseContext of - MouseInGame -> w & input . mouseContext .~ OverInvDragSelect - (inverseSelSecYint - (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) - (w ^. hud . diSections)) + MouseInGame -> + w + & input + . mouseContext + .~ OverInvDragSelect + ( inverseSelSecYint + (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) + (w ^. hud . diSections) + ) OverInvSelect (-1, _) - | selsec == Just (-1) -> w + | selsec == Just (-1) -> + w & hud . diSelection %~ endRegex (-1) w & hud . diInvFilter .~ Nothing OverInvSelect (2, _) - | selsec == Just 2 -> w + | selsec == Just 2 -> + w & hud . diSelection %~ endRegex 2 w & hud . diCloseFilter .~ Nothing OverInvSelect (5, j) -> fromMaybe w $ do @@ -258,25 +239,29 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of but <- w ^? cWorld . lWorld . buttons . ix k return $ doButtonEvent (but ^. btEvent) but w OverInvSelect x - | ScancodeLShift `M.member` (w ^. input . pressedKeys) - -> w & input . mouseContext .~ OverInvDragSelect (NonInf x) + | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> + w & input . mouseContext .~ OverInvDragSelect (NonInf x) OverInvSelect x -> startDrag x w OverTerminal tmid TerminalTextInput{} -> terminalReturnEffect tmid w OverTerminal tmid TerminalPressTo{} -> continueTerminal tmid w OutsideTerminal -> w & hud . subInventory .~ NoSubInventory - OverCombSelect x -> w + OverCombSelect x -> + w & hud . subInventory . ciSelection ?~ f x & worldEventFlags . at CombineInventoryChange ?~ () - OverCombFilter -> w + OverCombFilter -> + w & hud . subInventory . ciFilter .~ Nothing & worldEventFlags . at CombineInventoryChange ?~ () & hud . subInventory . ciSelection %~ endCombineRegex w - OverCombCombine x -> w + OverCombCombine x -> + w & tryCombine x & worldEventFlags . at CombineInventoryChange ?~ () & worldEventFlags . at InventoryChange ?~ () & maybeExitCombine - OverCombEscape -> w + OverCombEscape -> + w & worldEventFlags . at InventoryChange ?~ () & hud . subInventory .~ NoSubInventory OverCombFiltInv (0, j) -> fromMaybe w $ do @@ -313,23 +298,16 @@ endCombineRegex w = ssSetCursor (ssLookupDown 0 j) sss return (k - 1) startDrag :: (Int, Int) -> World -> World -startDrag (a, b) w = w - & input . mouseContext .~ OverInvDrag a - & invSetSelectionPos a b - & f +startDrag (a, b) w = + w + & input . mouseContext .~ OverInvDrag a + & invSetSelectionPos a b + & f where f = fromMaybe id $ do is <- w ^? hud . diSections . ix a . ssSet guard $ not $ b `IS.member` is return $ hud . diSections . ix a . ssSet .~ mempty --- setcontext $ fromMaybe (invSetSelection (Sel a b) w & hud.diSections.ix a.ssSet.~ mempty) $ do --- i <- w ^? hud . diSelection . _Just . slSec --- xs <- w ^? hud . diSections . ix a . ssSet --- guard $ i == a && b `IS.member` xs --- return w --- where --- --setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b)) --- setcontext = input . mouseContext .~ OverInvDrag a shiftInvItems :: Config -> @@ -356,12 +334,12 @@ shiftInvItems cfig n k x xs ss w = setSelWhileDragging cfig . fromMaybe w $ do _ | x < (k, mini) -> do guard $ not . null . fst $ IM.split mini ss guard $ Just (k, mini - 1) /= ab - --return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsUp k xs w + -- return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsUp k xs w return . doDrag cfig (n - 1) k $ shiftInvItemsUp k xs w _ | x > (k, maxi) -> do guard $ not . null . snd $ IM.split maxi ss guard $ Just (k, maxi + 1) /= bn - --return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsDown k xs w + -- return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsDown k xs w return . doDrag cfig (n - 1) k $ shiftInvItemsDown k xs w _ -> Nothing @@ -369,8 +347,8 @@ setSelWhileDragging :: Config -> World -> World setSelWhileDragging cfig w = fromMaybe w $ do Sel i _ <- w ^? hud . diSelection . _Just xs <- w ^? hud . diSections . ix i . ssSet - --(k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just - (k, j) <- inverseSelNumPos cfig invDP (w^.input.mousePos) (w^.hud.diSections) ^? _Just . nonInf + -- (k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just + (k, j) <- inverseSelNumPos cfig invDP (w ^. input . mousePos) (w ^. hud . diSections) ^? _Just . nonInf guard $ i == k && j `IS.member` xs return $ w & hud . diSelection . _Just . slInt .~ j @@ -511,17 +489,27 @@ updateBackspaceRegex w = case di ^? subInventory of Just NoSubInventory{} | secfocus (-1) 0 -> w - & hud %~ trybackspace (-1) diInvFilter diInvFilter diSelection - & worldEventFlags . at InventoryChange ?~ () + & hud + %~ trybackspace (-1) diInvFilter diInvFilter diSelection + & worldEventFlags + . at InventoryChange + ?~ () Just NoSubInventory{} | secfocus 2 3 -> w - & hud %~ trybackspace 2 diCloseFilter diCloseFilter diSelection - & worldEventFlags . at InventoryChange ?~ () + & hud + %~ trybackspace 2 diCloseFilter diCloseFilter diSelection + & worldEventFlags + . at InventoryChange + ?~ () Just CombineInventory{} -> w - & hud . subInventory %~ trybackspace (-1) ciFilter ciFilter ciSelection - & worldEventFlags . at InventoryChange ?~ () + & hud + . subInventory + %~ trybackspace (-1) ciFilter ciFilter ciSelection + & worldEventFlags + . at InventoryChange + ?~ () _ -> w where secfocus a b = fromMaybe False $ do @@ -557,8 +545,12 @@ updateEnterRegex w = case w ^? hud . subInventory of | secfocus [2, 3] -> -- w & hud . diSelection ?~ Sel 2 0 mempty w - & hud . diSelection ?~ Sel 2 0 - & hud . diCloseFilter %~ enterregex + & hud + . diSelection + ?~ Sel 2 0 + & hud + . diCloseFilter + %~ enterregex Just CombineInventory{} -> w & hud @@ -605,7 +597,11 @@ tryCombine (i, j) w = fromMaybe w $ do return $ createItemYou it (foldr (destroyInvItem 0 . NInt) w (sort is)) & soundStart InventorySound p wrench1S Nothing - & hud . diSections . ix 1 . ssSet .~ mempty + & hud + . diSections + . ix 1 + . ssSet + .~ mempty -- & hud . diSelection . _Just . slSet .~ mempty diff --git a/tags b/tags index cf3b3f637..c20b7dc28 100644 --- a/tags +++ b/tags @@ -528,11 +528,11 @@ HP src/Dodge/Data/Creature.hs 64;" C HUD src/Dodge/Data/HUD.hs 29;" t HalfRes src/Dodge/Data/Config.hs 115;" C HammerTrigger src/Dodge/Data/TriggerType.hs 10;" C -HandsFree src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 26;" C +HandsFree src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 20;" C HardQuit src/Dodge/Data/Universe.hs 68;" C HarvestFrom src/Dodge/Data/ActionPlan.hs 153;" C HeavySmokeFlare src/Dodge/Data/Muzzle.hs 33;" C -HeldItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 21;" C +HeldItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 15;" C HeldItemType src/Dodge/Data/Item/Combine.hs 141;" t HeldPlatformSF src/Dodge/Data/ComposedItem.hs 15;" C HiddenGoal src/Dodge/Data/Scenario.hs 14;" C @@ -731,7 +731,7 @@ MakeSound src/Dodge/Data/ActionPlan.hs 46;" C MakeStartCloudAt src/Dodge/Data/WorldEffect.hs 33;" C MakeTempLight src/Dodge/Data/WorldEffect.hs 36;" C MakeTempLightFade src/Dodge/Data/WorldEffect.hs 37;" C -ManipulatedObject src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 20;" t +ManipulatedObject src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 14;" t MapperInventory src/Dodge/Data/HUD.hs 17;" C MapperSF src/Dodge/Data/ComposedItem.hs 40;" C Material src/Dodge/Data/Material.hs 10;" t @@ -1912,9 +1912,9 @@ _gwWorld src/Dodge/Data/GenWorld.hs 25;" f _harvestTarget src/Dodge/Data/ActionPlan.hs 153;" f _heldPos src/Dodge/Data/Input.hs 45;" f _heldWorldPos src/Dodge/Data/Input.hs 47;" f -_hiAimStance src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 23;" f -_hiAttachedItems src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 24;" f -_hiRootSelectedItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 22;" f +_hiAimStance src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 17;" f +_hiAttachedItems src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 18;" f +_hiRootSelectedItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 16;" 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 @@ -2775,7 +2775,7 @@ beeCrit src/Dodge/Creature/ChaseCrit.hs 92;" f beeLifespanCheck src/Dodge/Creature/Update.hs 120;" f beep3QuickS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 710;" f beltMag src/Dodge/Item/Ammo.hs 38;" f -bgateCalc src/Dodge/Inventory/SelectionList.hs 131;" f +bgateCalc src/Dodge/Inventory/SelectionList.hs 130;" f bgunSound src/Dodge/HeldUse.hs 540;" f bingate src/Dodge/Item/Scope.hs 115;" f blColor src/Dodge/Block/Debris.hs 54;" f @@ -2865,7 +2865,7 @@ cardList src/Dodge/Base/CardinalPoint.hs 7;" f cardReverse src/Dodge/Base/CardinalPoint.hs 10;" f cardVec src/Dodge/Base/CardinalPoint.hs 17;" f cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 43;" f -cardinalVectors src/Dodge/FloorItem.hs 25;" f +cardinalVectors src/Dodge/FloorItem.hs 26;" f carvePoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f @@ -2876,10 +2876,10 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 271;" 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 233;" f -changeSwapSel src/Dodge/Inventory.hs 202;" f -changeSwapSelSet src/Dodge/Inventory.hs 137;" f -changeSwapWith src/Dodge/Inventory.hs 264;" f +changeSwapOther src/Dodge/Inventory.hs 221;" f +changeSwapSel src/Dodge/Inventory.hs 190;" f +changeSwapSelSet src/Dodge/Inventory.hs 125;" f +changeSwapWith src/Dodge/Inventory.hs 252;" f charToTuple src/Picture/Base.hs 312;" f charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f @@ -2945,9 +2945,8 @@ clipZoom src/Dodge/Update/Camera.hs 235;" f clipboardCr src/Dodge/Debug.hs 91;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 241;" f -closeItemDist src/Dodge/Inventory.hs 134;" f -closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f -closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 264;" f +closeItemDist src/Dodge/Inventory.hs 122;" f +closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 220;" f closeObjectInfo src/Dodge/Render/HUD.hs 221;" f closestCrToMouse src/Dodge/Debug.hs 308;" f closestPointOnLine src/Geometry/Intersect.hs 286;" f @@ -2963,7 +2962,7 @@ cognizantVoc src/Dodge/Creature/Perception.hs 68;" f colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 54;" f -collectInvItems src/Dodge/Inventory.hs 192;" f +collectInvItems src/Dodge/Inventory.hs 180;" f collide3 src/Dodge/Base/Collide.hs 142;" f collide3Chasm src/Dodge/Base/Collide.hs 126;" f collide3Chasms src/Dodge/Base/Collide.hs 118;" f @@ -3005,12 +3004,12 @@ compressionScale src/Dodge/Creature/State/WalkCycle.hs 69;" f compressor src/Dodge/Item/Ammo.hs 74;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 716;" f conEffects src/Dodge/Concurrent.hs 12;" f -concurrentIS src/Dodge/Inventory.hs 184;" f +concurrentIS src/Dodge/Inventory.hs 172;" f 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 425;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 426;" f convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -3096,7 +3095,7 @@ crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 642;" f createForceField src/Dodge/ForceField.hs 7;" f createGas src/Dodge/Gas.hs 10;" f createHeadLamp src/Dodge/Euse.hs 64;" f -createItemYou src/Dodge/Inventory/Add.hs 73;" f +createItemYou src/Dodge/Inventory/Add.hs 69;" f createLightMap src/Render.hs 26;" f createProjectile src/Dodge/HeldUse.hs 1305;" f createProjectileR src/Dodge/HeldUse.hs 1254;" f @@ -3278,12 +3277,11 @@ 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 62;" f +destroyAllInvItems src/Dodge/Inventory.hs 61;" f destroyBlock src/Dodge/Block.hs 17;" f destroyCreature src/Dodge/Data/Creature.hs 69;" f destroyDoor src/Dodge/Wall/Damage.hs 146;" f -destroyInvItem src/Dodge/Inventory.hs 49;" f -destroyItem src/Dodge/Inventory.hs 71;" f +destroyInvItem src/Dodge/Inventory.hs 48;" f destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 14;" f destroyMachine' src/Dodge/Wall/Damage.hs 112;" f @@ -3311,7 +3309,7 @@ displayControls src/Dodge/Menu.hs 239;" f displayFrameTicks src/Dodge/Render/Picture.hs 53;" f displayFreeSlots src/Dodge/DisplayInventory.hs 197;" f displayIndents src/Dodge/DisplayInventory.hs 111;" f -displayPulse src/Dodge/Inventory/SelectionList.hs 192;" f +displayPulse src/Dodge/Inventory/SelectionList.hs 191;" f displayTerminalLineString src/Dodge/Update.hs 588;" f dist src/Geometry/Vector.hs 193;" f dist3 src/Geometry/Vector3D.hs 102;" f @@ -3352,8 +3350,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 139;" f -doDragSelect src/Dodge/Update/Input/InGame.hs 227;" f +doDrag src/Dodge/Update/Input/InGame.hs 117;" f +doDragSelect src/Dodge/Update/Input/InGame.hs 196;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f @@ -3372,7 +3370,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 478;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 479;" f doRoomPlacements src/Dodge/Layout.hs 121;" f doRoomShift src/Dodge/Room/Link.hs 34;" f doScopeZoom src/Dodge/Update/Scroll.hs 90;" f @@ -3584,12 +3582,12 @@ 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 306;" f -endRegex src/Dodge/Update/Input/InGame.hs 300;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 312;" f +endRegex src/Dodge/Update/Input/InGame.hs 306;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f enterCombineInv src/Dodge/DisplayInventory.hs 322;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f -epText src/Dodge/Inventory/SelectionList.hs 74;" f +epText src/Dodge/Inventory/SelectionList.hs 73;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 5;" f eqTypeToSites src/Dodge/Inventory/RBList.hs 78;" f @@ -3643,7 +3641,7 @@ findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f findIndex src/IntMapHelp.hs 86;" f findReverseEdge src/Polyhedra.hs 47;" f findReverseEdgeList src/Polyhedra.hs 54;" f -findWallFreeDropPoint src/Dodge/FloorItem.hs 28;" f +findWallFreeDropPoint src/Dodge/FloorItem.hs 29;" f findWallsInPolygon src/Dodge/LevelGen/StaticWalls/Deprecated.hs 78;" f findWithIx src/ListHelp.hs 124;" f fireFadeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 916;" f @@ -3744,7 +3742,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 588;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 603;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f @@ -3755,7 +3753,7 @@ getDistortions src/Dodge/Render.hs 448;" f getEdgesCrossing src/Dodge/Path.hs 39;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1293;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f -getItemValue src/Dodge/Inventory/SelectionList.hs 160;" f +getItemValue src/Dodge/Inventory/SelectionList.hs 159;" f getLaserDamage src/Dodge/HeldUse.hs 728;" f getLaserPhaseV src/Dodge/HeldUse.hs 725;" f getLinksOfType src/Dodge/RoomLink.hs 40;" f @@ -3768,7 +3766,7 @@ getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f getRoomsFromInts src/Dodge/Room/Tutorial.hs 611;" f getRootItemBounds src/Dodge/Render/HUD.hs 98;" f -getSelectedCloseObj src/Dodge/SelectedClose.hs 18;" f +getSelectedCloseObj src/Dodge/SelectedClose.hs 20;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 129;" f getTiles src/Dodge/Layout.hs 224;" f @@ -3885,9 +3883,9 @@ holdForm src/Dodge/Creature/Boid.hs 139;" f holsterWeapon src/Dodge/Creature/Volition.hs 14;" f homingModule src/Dodge/Item/Scope.hs 50;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f -hotkeyToChar src/Dodge/Inventory/SelectionList.hs 201;" f +hotkeyToChar src/Dodge/Inventory/SelectionList.hs 200;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f -hotkeyToString src/Dodge/Inventory/SelectionList.hs 198;" f +hotkeyToString src/Dodge/Inventory/SelectionList.hs 197;" f hoverCrit src/Dodge/Creature/ChaseCrit.hs 83;" f hoverCritHoverSound src/Dodge/Creature/Update.hs 437;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 228;" f @@ -3956,7 +3954,7 @@ intersectSegsSeg src/Geometry/Intersect.hs 253;" f intervalList src/Geometry.hs 312;" f interweave src/Justify.hs 17;" f introScan src/Dodge/Item/Scope.hs 62;" f -introScanValue src/Dodge/Inventory/SelectionList.hs 78;" f +introScanValue src/Dodge/Inventory/SelectionList.hs 77;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f invAdj src/Dodge/Item/Grammar.hs 246;" f invCursorParams src/Dodge/ListDisplayParams.hs 35;" f @@ -3971,8 +3969,8 @@ invItemEffs src/Dodge/Creature/State.hs 92;" f invItemLocUpdate src/Dodge/Creature/State.hs 100;" f invRootMap src/Dodge/Item/Grammar.hs 237;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 33;" f -invSetSelection src/Dodge/Inventory.hs 269;" f -invSetSelectionPos src/Dodge/Inventory.hs 278;" f +invSetSelection src/Dodge/Inventory.hs 257;" f +invSetSelectionPos src/Dodge/Inventory.hs 266;" f invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 103;" f @@ -4033,7 +4031,7 @@ itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemDetectorEffect src/Dodge/HeldUse.hs 812;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 54;" f itemEquipPict src/Dodge/Item/Draw.hs 18;" f -itemExternalValue src/Dodge/Inventory/SelectionList.hs 83;" f +itemExternalValue src/Dodge/Inventory/SelectionList.hs 82;" f itemFromAmmoMag src/Dodge/Item.hs 43;" f itemFromAttachType src/Dodge/Item.hs 52;" f itemFromBase src/Dodge/Item.hs 18;" f @@ -4049,8 +4047,8 @@ 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 56;" f -itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 137;" f -itemScrollValue src/Dodge/Inventory/SelectionList.hs 164;" f +itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 136;" f +itemScrollValue src/Dodge/Inventory/SelectionList.hs 163;" f itemShapeMax src/Dodge/Item/Orientation.hs 68;" f itemShapeMaxX src/Dodge/Item/Orientation.hs 59;" f itemShapeMaxY src/Dodge/Item/Orientation.hs 62;" f @@ -4282,7 +4280,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 624;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 631;" f maybeOpenConsole src/Dodge/Update.hs 136;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f @@ -4401,8 +4399,8 @@ multGunCrit src/Dodge/Creature.hs 68;" 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 209;" f -multiSelScroll' src/Dodge/Inventory.hs 216;" f +multiSelScroll src/Dodge/Inventory.hs 197;" f +multiSelScroll' src/Dodge/Inventory.hs 204;" f muout src/Dodge/RoomLink.hs 144;" f muzFlareAt src/Dodge/HeldUse.hs 702;" f muzzlePos src/Dodge/HeldUse.hs 787;" f @@ -4524,7 +4522,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 580;" f +pauseGame src/Dodge/Update/Input/InGame.hs 595;" f pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f @@ -4542,8 +4540,8 @@ performAimAt src/Dodge/Creature/Action.hs 111;" f performPathTo src/Dodge/Creature/Action.hs 132;" f performTurnToA src/Dodge/Creature/Action.hs 152;" f perspectiveMatrixb src/MatrixHelper.hs 11;" f -pickUpItem src/Dodge/Inventory/Add.hs 81;" f -pickUpItemAt src/Dodge/Inventory/Add.hs 86;" f +pickUpItem src/Dodge/Inventory/Add.hs 77;" f +pickUpItemAt src/Dodge/Inventory/Add.hs 82;" f pickUpS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 830;" f pincerP src/Dodge/Creature/Boid.hs 63;" f pincerP' src/Dodge/Creature/Boid.hs 96;" f @@ -4747,7 +4745,7 @@ qz src/Quaternion.hs 81;" f 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 -radToCompass src/Dodge/Inventory/SelectionList.hs 111;" f +radToCompass src/Dodge/Inventory/SelectionList.hs 110;" f radToDeg src/Geometry/Vector.hs 131;" f radiusSpring src/Dodge/Update.hs 991;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f @@ -4880,7 +4878,7 @@ rightWristPQ src/Dodge/Creature/HandPos.hs 115;" f rlPosDir src/Dodge/RoomLink.hs 112;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 402;" f rmInLinks src/Dodge/RoomLink.hs 153;" f -rmInvItem src/Dodge/Inventory.hs 85;" f +rmInvItem src/Dodge/Inventory.hs 73;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f rmOutLinks src/Dodge/RoomLink.hs 153;" f roomC src/Dodge/Room/Room.hs 54;" f @@ -4972,8 +4970,8 @@ screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f screenPosAbs src/Dodge/ScreenPos.hs 16;" f screenToWorldPos src/Dodge/Base/Coordinate.hs 45;" f -scrollAugInvSel src/Dodge/Inventory.hs 281;" f -scrollAugNextInSection src/Dodge/Inventory.hs 296;" f +scrollAugInvSel src/Dodge/Inventory.hs 269;" f +scrollAugNextInSection src/Dodge/Inventory.hs 284;" f scrollRBOption src/Dodge/Update/Scroll.hs 140;" f scrollSelectionSections src/Dodge/SelectionSections.hs 30;" f scrollTimeBack src/Dodge/Update.hs 246;" f @@ -5002,7 +5000,7 @@ selSecSelCol src/Dodge/Render/HUD.hs 507;" f selSecSelSize src/Dodge/SelectionSections.hs 178;" f selSecYint src/Dodge/SelectionSections.hs 187;" f selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f -selectionSet src/Dodge/Update/Input/InGame.hs 169;" f +selectionSet src/Dodge/Update/Input/InGame.hs 147;" 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 @@ -5035,9 +5033,9 @@ setOldPos src/Dodge/Update.hs 604;" 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 124;" f +setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 104;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 326;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 368;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 369;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -5080,9 +5078,9 @@ 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 334;" f -shiftInvItemsDown src/Dodge/Inventory.hs 168;" f -shiftInvItemsUp src/Dodge/Inventory.hs 178;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 335;" f +shiftInvItemsDown src/Dodge/Inventory.hs 156;" f +shiftInvItemsUp src/Dodge/Inventory.hs 166;" f shiftLinkBy src/Dodge/Room/Link.hs 89;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f shiftPathBy src/Dodge/Room/Link.hs 94;" f @@ -5094,8 +5092,8 @@ shiftRelativeToPS src/Dodge/Placement/Shift.hs 18;" f shiftRoomBy src/Dodge/Room/Link.hs 38;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 83;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 74;" f -shiftSetDown src/Dodge/Inventory.hs 161;" f -shiftSetUp src/Dodge/Inventory.hs 155;" f +shiftSetDown src/Dodge/Inventory.hs 149;" f +shiftSetUp src/Dodge/Inventory.hs 143;" f shiftTile src/Dodge/Room/Link.hs 49;" f shineTargetLaser src/Dodge/Creature/State.hs 234;" f shineTorch src/Dodge/Creature/State.hs 271;" f @@ -5214,7 +5212,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 583;" f +spaceAction src/Dodge/Update/Input/InGame.hs 598;" 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 @@ -5278,7 +5276,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 315;" f +startDrag src/Dodge/Update/Input/InGame.hs 321;" f startInvList src/Dodge/Creature.hs 97;" f startInventory src/Dodge/Creature.hs 100;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5318,11 +5316,11 @@ 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 23;" f -swapItemWith src/Dodge/Inventory.hs 253;" f -swapSelSet src/Dodge/Inventory.hs 142;" f +swapItemWith src/Dodge/Inventory.hs 241;" f +swapSelSet src/Dodge/Inventory.hs 130;" f swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f swarmUsingCenter src/Dodge/Creature/Boid.hs 174;" f -symmetricDifference src/Dodge/Update/Input/InGame.hs 239;" f +symmetricDifference src/Dodge/Update/Input/InGame.hs 213;" f t src/ShortShow.hs 48;" f tEast src/Dodge/Room/Corridor.hs 96;" f tToBTree src/Dodge/Tree/Compose.hs 93;" f @@ -5426,7 +5424,7 @@ tmDistributeAmmo src/Dodge/WorldEffect.hs 118;" f tmDistributeLines src/Dodge/Room/Room.hs 474;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 55;" f tmScreenMousePos src/Dodge/Update.hs 470;" f -toBinary src/Dodge/Inventory/SelectionList.hs 154;" f +toBinary src/Dodge/Inventory/SelectionList.hs 153;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 158;" f @@ -5508,17 +5506,17 @@ 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 205;" f -tryCombine src/Dodge/Update/Input/InGame.hs 600;" f +tryCombine src/Dodge/Update/Input/InGame.hs 615;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 184;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 154;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 132;" f tryEvadeSideways src/Dodge/Creature/Action.hs 104;" f tryGetChannel src/Sound.hs 99;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 18;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 42;" f -tryPickupSelected src/Dodge/Update/Input/InGame.hs 181;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 154;" f tryPlay src/Sound.hs 85;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 25;" f -tryPutItemInInvAt src/Dodge/Inventory/Add.hs 65;" f +tryPutItemInInvAt src/Dodge/Inventory/Add.hs 61;" f trySeedFromClipboard src/Dodge/Menu.hs 94;" f trySpin src/Dodge/Projectile/Update.hs 120;" f trySynthBullet src/Dodge/Creature/State.hs 200;" f @@ -5546,7 +5544,7 @@ twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 558;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 612;" f twoStepSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 698;" f ubyteSize src/Shader/Parameters.hs 13;" f -ugateCalc src/Dodge/Inventory/SelectionList.hs 125;" f +ugateCalc src/Dodge/Inventory/SelectionList.hs 124;" f uncurryV src/Geometry/Data.hs 66;" f underBarrelSlot src/Dodge/Item/Scope.hs 176;" f unfoldrMID src/MonadHelp.hs 33;" f @@ -5568,7 +5566,7 @@ updateAggroBee src/Dodge/Creature/Update.hs 129;" f updateAimPos src/Dodge/Update.hs 401;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 44;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 509;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 510;" f updateBarrel src/Dodge/Barreloid.hs 43;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f @@ -5585,7 +5583,7 @@ updateCamera src/Dodge/Update/Camera.hs 34;" f updateCarriage src/Dodge/Creature/State/WalkCycle.hs 22;" f updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 27;" f updateChaseCrit src/Dodge/Creature/Update.hs 371;" f -updateCloseObjects src/Dodge/Inventory.hs 111;" f +updateCloseObjects src/Dodge/Inventory.hs 99;" f updateCloud src/Dodge/Update.hs 922;" f updateClouds src/Dodge/Update.hs 786;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 42;" f @@ -5612,14 +5610,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 777;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 544;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 555;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 774;" f updateFloatingCamera src/Dodge/Update/Camera.hs 39;" f updateFoodSearchChaseCrit src/Dodge/Creature/Update.hs 381;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 386;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 382;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 387;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 383;" f updateGas src/Dodge/Update.hs 944;" f updateGusts src/Dodge/Update.hs 906;" f updateHiveCrit src/Dodge/Creature/Update.hs 82;" f @@ -5627,30 +5625,30 @@ updateHoverCrit src/Dodge/Humanoid.hs 25;" f updateIMl src/Dodge/Update.hs 641;" f updateIMl' src/Dodge/Update.hs 644;" f updateInGameCamera src/Dodge/Update/Camera.hs 87;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 459;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 460;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 88;" f updateItemTargeting src/Dodge/Creature/State.hs 293;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 419;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 453;" f -updateKeysInGame src/Dodge/Update/Input/InGame.hs 81;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 405;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 428;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 420;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 454;" f +updateKeysInGame src/Dodge/Update/Input/InGame.hs 82;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 406;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 429;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 12;" f updateLasers src/Dodge/Update.hs 519;" 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 472;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 473;" f updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 409;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 242;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 216;" f updateMouseContext src/Dodge/Update.hs 422;" f updateMouseContextGame src/Dodge/Update.hs 427;" 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 206;" f +updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 95;" f +updateMouseInGame src/Dodge/Update/Input/InGame.hs 85;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 178;" f updateObjCatMaybes src/Dodge/Update.hs 659;" f updateObjMapMaybe src/Dodge/Update.hs 652;" f updatePastWorlds src/Dodge/Update.hs 508;" f