diff --git a/ghcidOutput b/ghcidOutput index 65eefab12..cc0e7d04f 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1 @@ -All good (594 modules, at 23:43:04) +All good (594 modules, at 16:13:14) diff --git a/src/Dodge/Data/HUD.hs b/src/Dodge/Data/HUD.hs index 26c5ece6b..bf58dda1e 100644 --- a/src/Dodge/Data/HUD.hs +++ b/src/Dodge/Data/HUD.hs @@ -5,6 +5,7 @@ module Dodge.Data.HUD where +import Data.IntSet (IntSet) import Data.IntMap import Control.Lens import Dodge.Data.Button @@ -20,7 +21,7 @@ data HUDElement , _diSelection :: Maybe (Int, Int) , _diInvFilter :: Maybe String , _diCloseFilter :: Maybe String - , _diSelectionExtra :: Int + , _diSelectionExtra :: IntSet } | DisplayCarte diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index 35a532785..50b6778e1 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -167,7 +167,7 @@ defaultDisplayInventory = -- } , _diSections = defaultInvSections , _diSelection = Just (1,0) - , _diSelectionExtra = 0 + , _diSelectionExtra = mempty , _diInvFilter = mempty , _diCloseFilter = mempty } diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index e83fbab33..13872c55c 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -17,6 +17,7 @@ module Dodge.Inventory ( isFilteringInv, ) where +import qualified Data.IntSet as IS import Control.Monad import Dodge.Item.Grammar import Dodge.Data.DoubleTree @@ -88,7 +89,7 @@ rmInvItem cid invid w = -- & updateCreatureItemLocations cid pointcid = cWorld . lWorld . creatures . ix cid - updateselectionextra | cid == 0 = hud . hudElement . diSelectionExtra .~ 0 + updateselectionextra | cid == 0 = hud . hudElement . diSelectionExtra .~ mempty | otherwise = id updateselection | cid == 0 && cr ^? crManipulation . manObject . imSelectedItem == Just invid = @@ -194,7 +195,7 @@ swapInvItems f i w = fromMaybe w $ do _ -> id return $ w - -- & checkconnect k InventorySound disconnectItemS + & swapAnyExtraSelection i k & checkConnection InventorySound disconnectItemS i k & cWorld . lWorld . creatures . ix 0 %~ updatecreature k & updateselection @@ -230,6 +231,14 @@ swapInvItems f i w = fromMaybe w $ do Just epos -> crHotkeys . ix epos .~ b Nothing -> id +swapAnyExtraSelection :: Int -> Int -> World -> World +swapAnyExtraSelection i k w = fromMaybe w $ do + is <- w ^? hud . hudElement . diSelectionExtra + let f = if i `IS.member` is then IS.insert k else id + g = if k `IS.member` is then IS.insert i else id + return $ w & hud . hudElement . diSelectionExtra + %~ (f . g . IS.delete i . IS.delete k) + checkConnection :: SoundOrigin -> SoundID -> Int -> Int -> World -> World checkConnection so s i j w = fromMaybe w $ do inv <- w ^? cWorld . lWorld . creatures . ix 0 . crInv diff --git a/src/Dodge/Inventory/Add.hs b/src/Dodge/Inventory/Add.hs index 03b004bd5..ba50799b4 100644 --- a/src/Dodge/Inventory/Add.hs +++ b/src/Dodge/Inventory/Add.hs @@ -46,7 +46,7 @@ tryPutItemInInv cid flit w = case maybeInvSlot of & cWorld . lWorld %~ crUpdateItemLocations cid ) where - updateselectionextra | cid == 0 = hud . hudElement . diSelectionExtra .~ 0 + updateselectionextra | cid == 0 = hud . hudElement . diSelectionExtra .~ mempty | otherwise = id it = _flIt flit maybeInvSlot = checkInvSlotsYou it w diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index ba94f4e31..a8da215ab 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -4,6 +4,7 @@ module Dodge.Render.HUD ( drawHUD, ) where +import qualified Data.IntSet as IS import Control.Applicative import Control.Lens import Control.Monad @@ -146,15 +147,15 @@ drawMouseOver cfig w = concat (invsel <|> combinvsel drawDragSelected :: Configuration -> World -> Maybe Picture drawDragSelected cfig w = do - y <- w ^? hud . hudElement . diSelectionExtra - guard $ y > 0 + ys <- w ^? hud . hudElement . diSelectionExtra + guard $ not (IS.null ys) (i,j) <- w ^? hud . hudElement . diSelection . _Just guard $ i == 0 sss <- w ^? hud . hudElement . diSections let idp = invDisplayParams w - let f x = selSecDrawCursorAt 15 idp BackdropCursor sss (0, x) + let f x = (selSecDrawCursorAt 15 idp BackdropCursor sss (0, x) <>) return . translateScreenPos cfig (invDisplayParams w ^. ldpPos) - . color (withAlpha 0.2 white) . foldMap f $ [j .. j + y] + . color (withAlpha 0.2 white) . IS.foldr f mempty $ IS.insert j ys drawDragSelect :: Configuration -> World -> Maybe Picture drawDragSelect cfig w = do diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 282154a42..c287f41f8 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -3,7 +3,7 @@ module Dodge.Update.Input.InGame ( updateMouseInGame, ) where -import Data.Foldable +import qualified Data.IntSet as IS import Dodge.ListDisplayParams import Control.Applicative import Control.Monad @@ -102,9 +102,9 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of OverInvDrag {} -> fromMaybe w $ do sss <- w ^? hud . hudElement . diSections let mpos = w ^. input . mousePos - sel <- w ^? hud . hudElement . diSelection . _Just + (0,i) <- w ^? hud . hudElement . diSelection . _Just x <- w ^? hud . hudElement . diSelectionExtra - return $ w & shiftInvItems sel x cfig mpos ldp sss + return $ w & dragInvItems (IS.insert i x) cfig mpos ldp sss _ -> w where ldp = invDisplayParams w @@ -113,8 +113,8 @@ dropSelected :: World -> World dropSelected w = fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 (0,j) <- w ^? hud . hudElement . diSelection . _Just - x <- w ^? hud . hudElement . diSelectionExtra - return $ foldl' (flip $ dropItem cr) w (reverse [j .. j+x]) + xs <- w ^? hud . hudElement . diSelectionExtra + return $ IS.foldr (dropItem cr) w (IS.insert j xs) updateMouseReleaseInGame :: World -> World updateMouseReleaseInGame w = case w ^. input . mouseContext of @@ -126,7 +126,7 @@ updateMouseReleaseInGame w = case w ^. input . mouseContext of OverInvDragSelect ssel (Just esel) -> w & input . mouseContext .~ MouseInGame & hud . hudElement . diSelectionExtra - .~ (max (snd ssel) (snd esel) - min (snd ssel) (snd esel)) + .~ IS.fromAscList [min (snd ssel) (snd esel) + 1 .. max (snd ssel) (snd esel)] & augInvDirectSelect (min ssel esel) _ -> w @@ -177,44 +177,76 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of startDrag :: (Int, Int) -> World -> World startDrag (a, b) w = case w ^? hud . hudElement . diInvFilter . _Just of Just {} -> w & input . mouseContext .~ OverInvFiltDrag - _ -> fromMaybe (augInvDirectSelect (a, b) $ setmichosen 0 w) $ do + _ -> fromMaybe (augInvDirectSelect (a, b) $ setmichosen mempty w) $ do (i, j) <- w ^? hud . hudElement . diSelection . _Just - x <- w ^? hud . hudElement . diSelectionExtra - guard $ i == a && b >= j && b <= j + x - return $ setmichosen x w + xs <- w ^? hud . hudElement . diSelectionExtra + guard $ i == a && b `IS.member` (IS.insert j xs) + return $ setmichosen xs w where setmichosen x = (input . mouseContext .~ OverInvDrag (Just b)) . (hud . hudElement . diSelectionExtra .~ x) -shiftInvItems :: - (Int, Int) -> - Int -> +dragInvItems :: + IS.IntSet -> Configuration -> Point2 -> ListDisplayParams -> IM.IntMap (SelectionSection a) -> World -> World -shiftInvItems topsel x cfig mpos ldp sss w = case inverseSelBoundaryUp cfig ldp sss mpos of - Just p | p < topsel -> shiftInvItemsUp topsel x w +dragInvItems is cfig mpos ldp sss w + | nonconcurrent = collectInvItems is w + | otherwise = shiftInvItems is cfig mpos ldp sss w + where + nonconcurrent = not $ concurrentIS is + +concurrentIS :: IS.IntSet -> Bool +concurrentIS = go . IS.minView + where + go Nothing = True + go (Just (i,is)) = fromMaybe True $ do + (j,js) <- IS.minView is + return $ i + 1 == j && go (Just (j,js)) + +collectInvItems :: IS.IntSet -> World -> World +collectInvItems is w = fromMaybe w $ do + (j,js) <- IS.minView is + return $ h j js w + where + h j js w' = fromMaybe w' $ do + (k,ks) <- IS.minView js + return . h (j+1) ks $ swapInvItems (\_ _ -> Just (j+1)) k w' + + +shiftInvItems :: + IS.IntSet -> + Configuration -> + Point2 -> + ListDisplayParams -> + IM.IntMap (SelectionSection a) -> + World -> + World +shiftInvItems xs cfig mpos ldp sss w = case inverseSelBoundaryUp cfig ldp sss mpos of + Just p | p < (0,IS.findMin xs) -> shiftInvItemsUp xs w _ -> case inverseSelBoundaryDown cfig ldp sss mpos of - Just p | p > (topsel & _2 +~ x) -> shiftInvItemsDown topsel x w + Just p | p > (0,IS.findMax xs) -> shiftInvItemsDown xs w _ -> w -shiftInvItemsUp :: (Int, Int) -> Int -> World -> World -shiftInvItemsUp (_, i) x w = foldl' f w [i .. i + x] +shiftInvItemsUp :: IS.IntSet -> World -> World +shiftInvItemsUp is w = IS.foldl' f w is where f w' i' = swapInvItems g i' w' g i' m = fst <$> IM.lookupLT i' m -shiftInvItemsDown :: (Int, Int) -> Int -> World -> World -shiftInvItemsDown (_, i) x w = fromMaybe w $ do +shiftInvItemsDown :: IS.IntSet -> World -> World +shiftInvItemsDown is w = fromMaybe w $ do + let i = IS.findMax is guard . isJust $ - w ^? hud . hudElement . diSections . ix 0 . ssItems . ix (i + x + 1) - return $ foldl' f w $ reverse [i .. i + x] + w ^? hud . hudElement . diSections . ix 0 . ssItems . ix i + return $ IS.foldr f w $ is where - f w' i' = swapInvItems g i' w' + f i' w' = swapInvItems g i' w' g i' m = fst <$> IM.lookupGT i' m @@ -430,9 +462,8 @@ toggleMap u = case u ^. uvWorld . hud . hudElement of { _subInventory = NoSubInventory --MouseInvNothing , _diSections = defaultInvSections , _diSelection = Nothing - , _diSelectionExtra = 0 - , -- , _diFilters = IM.fromList [(-1, mempty), (2, mempty)] - _diInvFilter = mempty + , _diSelectionExtra = mempty + , _diInvFilter = mempty , _diCloseFilter = mempty } _ -> u & uvWorld . hud . hudElement .~ DisplayCarte diff --git a/src/Dodge/Update/Scroll.hs b/src/Dodge/Update/Scroll.hs index 68279e172..a624ef1c2 100644 --- a/src/Dodge/Update/Scroll.hs +++ b/src/Dodge/Update/Scroll.hs @@ -33,8 +33,8 @@ updateWheelEvent yi w = case w ^. hud . hudElement of EquipOptions{} -> w & rbOptions . opSel %~ scrollRBOption yi rbscrollmax NoRightButtonOptions -> w | bdown ButtonLeft -> w & wCam . camZoom +~ y - | invKeyDown -> changeSwapSel yi $ w & hud . hudElement . diSelectionExtra .~ 0 - | otherwise -> scrollAugInvSel yi $ w & hud . hudElement . diSelectionExtra .~ 0 + | invKeyDown -> changeSwapSel yi $ w & hud . hudElement . diSelectionExtra .~ mempty + | otherwise -> scrollAugInvSel yi $ w & hud . hudElement . diSelectionExtra .~ mempty DisplayInventory{_subInventory = ExamineInventory} | invKeyDown -> scrollAugInvSel yi w | otherwise -> w diff --git a/tags b/tags index 8702762e3..f24deea6b 100644 --- a/tags +++ b/tags @@ -336,7 +336,7 @@ Combinations src/Dodge/Combine/Combinations.hs 3;" m Combine src/Dodge/Combine.hs 2;" m Combine src/Dodge/Data/Combine.hs 2;" m Combine src/Dodge/Data/Item/Combine.hs 6;" m -CombineInventory src/Dodge/Data/HUD.hs 38;" C +CombineInventory src/Dodge/Data/HUD.hs 39;" C CombineInventoryChange src/Dodge/Data/World.hs 34;" C Common src/Dodge/Zoning/Common.hs 1;" m Compile src/Shader/Compile.hs 1;" m @@ -514,10 +514,10 @@ Detector src/Dodge/Data/Item/Combine.hs 168;" t Dirt src/Dodge/Data/Material.hs 11;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t Display src/Dodge/Item/Display.hs 1;" m -DisplayCarte src/Dodge/Data/HUD.hs 25;" C -DisplayInventory src/Dodge/Data/HUD.hs 17;" C +DisplayCarte src/Dodge/Data/HUD.hs 26;" C +DisplayInventory src/Dodge/Data/HUD.hs 18;" C DisplayInventory src/Dodge/DisplayInventory.hs 2;" m -DisplayTerminal src/Dodge/Data/HUD.hs 44;" C +DisplayTerminal src/Dodge/Data/HUD.hs 45;" C Distortion src/Dodge/Data/Distortion.hs 12;" t Distortion src/Dodge/Data/Distortion.hs 6;" m Distortion src/Dodge/Distortion.hs 1;" m @@ -663,7 +663,7 @@ Euse src/Dodge/Data/Item/HeldUse.hs 20;" t Euse src/Dodge/Euse.hs 1;" m Event src/Dodge/Button/Event.hs 1;" m Event src/Dodge/Event.hs 14;" m -ExamineInventory src/Dodge/Data/HUD.hs 37;" C +ExamineInventory src/Dodge/Data/HUD.hs 38;" C Explore src/Dodge/Data/Scenario.hs 4;" C Explosion src/Dodge/Data/SoundOrigin.hs 37;" C Explosion src/Dodge/WorldEvent/Explosion.hs 4;" m @@ -821,10 +821,10 @@ HELD src/Dodge/Data/Item/Combine.hs 16;" C HELDDETECTOR src/Dodge/Data/Item/Combine.hs 162;" C HOMINGMODULE src/Dodge/Data/Item/Combine.hs 82;" C HOSE src/Dodge/Data/Item/Combine.hs 32;" C -HUD src/Dodge/Data/HUD.hs 46;" t +HUD src/Dodge/Data/HUD.hs 47;" t HUD src/Dodge/Data/HUD.hs 6;" m HUD src/Dodge/Render/HUD.hs 3;" m -HUDElement src/Dodge/Data/HUD.hs 16;" t +HUDElement src/Dodge/Data/HUD.hs 17;" t HalfRes src/Dodge/Data/Config.hs 95;" C Hammer src/Dodge/Data/Hammer.hs 6;" m Hammer src/Dodge/Hammer.hs 1;" m @@ -1080,7 +1080,7 @@ Location src/Dodge/Item/Location.hs 1;" m LocationLDT src/Dodge/Data/DoubleTree.hs 62;" t Lock src/Dodge/Inventory/Lock.hs 1;" m LockAndKey src/Dodge/LockAndKey.hs 1;" m -LockedInventory src/Dodge/Data/HUD.hs 43;" C +LockedInventory src/Dodge/Data/HUD.hs 44;" C LoneWolf src/Dodge/Data/Creature/State.hs 46;" C LongAI src/Dodge/Data/Creature/Misc.hs 60;" C LongDoor src/Dodge/Room/LongDoor.hs 2;" m @@ -1273,7 +1273,7 @@ NoRightButtonOptions src/Dodge/Data/RightButtonOptions.hs 14;" C NoRoomClipBoundaries src/Dodge/Data/Config.hs 105;" C NoShadowFidelity src/Shape/Data.hs 25;" C NoShadows src/Dodge/Data/Config.hs 101;" C -NoSubInventory src/Dodge/Data/HUD.hs 34;" C +NoSubInventory src/Dodge/Data/HUD.hs 35;" C NoWorldEffect src/Dodge/Data/WorldEffect.hs 24;" C Noclip src/Dodge/Data/Config.hs 70;" C NodeMTree src/Dodge/Tree/Compose/Data.hs 9;" C @@ -1826,7 +1826,7 @@ Strategy src/Dodge/Creature/Strategy.hs 1;" m StrategyActions src/Dodge/Data/ActionPlan.hs 188;" C StrictHelp src/StrictHelp.hs 1;" m StringHelp src/StringHelp.hs 1;" m -SubInventory src/Dodge/Data/HUD.hs 33;" t +SubInventory src/Dodge/Data/HUD.hs 34;" t Superfluous src/Shape/Data.hs 38;" C Surface src/Shape/Data.hs 41;" t Survive src/Dodge/Data/Scenario.hs 5;" C @@ -2293,17 +2293,17 @@ _camViewDistance src/Dodge/Data/Camera.hs 30;" f _camViewFrom src/Dodge/Data/Camera.hs 29;" f _camZoom src/Dodge/Data/Camera.hs 26;" f _carriage src/Dodge/Data/Creature/Stance.hs 14;" f -_carteCenter src/Dodge/Data/HUD.hs 48;" f -_carteRot src/Dodge/Data/HUD.hs 50;" f -_carteZoom src/Dodge/Data/HUD.hs 49;" f +_carteCenter src/Dodge/Data/HUD.hs 49;" f +_carteRot src/Dodge/Data/HUD.hs 51;" f +_carteZoom src/Dodge/Data/HUD.hs 50;" f _ceSideEffect src/Dodge/Data/Universe.hs 62;" f _ceString src/Dodge/Data/Universe.hs 63;" f -_ciFilter src/Dodge/Data/HUD.hs 41;" f +_ciFilter src/Dodge/Data/HUD.hs 42;" f _ciInfo src/Dodge/Data/Combine.hs 8;" f _ciInvIDs src/Dodge/Data/Combine.hs 6;" f _ciItem src/Dodge/Data/Combine.hs 7;" f -_ciSections src/Dodge/Data/HUD.hs 39;" f -_ciSelection src/Dodge/Data/HUD.hs 40;" f +_ciSections src/Dodge/Data/HUD.hs 40;" f +_ciSelection src/Dodge/Data/HUD.hs 41;" f _cigType src/Dodge/Data/Camera.hs 19;" f _clAlt src/Dodge/Data/Cloud.hs 23;" f _clPict src/Dodge/Data/Cloud.hs 21;" f @@ -2327,7 +2327,7 @@ _cldtUp src/Dodge/Data/DoubleTree.hs 46;" f _cldtUp src/Dodge/Data/DoubleTree.hs 54;" f _clickPos src/Dodge/Data/Input.hs 48;" f _clickWorldPos src/Dodge/Data/Input.hs 50;" f -_closeObjects src/Dodge/Data/HUD.hs 51;" f +_closeObjects src/Dodge/Data/HUD.hs 52;" f _cloudEBO src/Data/Preload/Render.hs 49;" f _cloudShader src/Data/Preload/Render.hs 48;" f _cloudVBO src/Data/Preload/Render.hs 47;" f @@ -2437,11 +2437,11 @@ _debug_booleans src/Dodge/Data/Config.hs 57;" f _debug_view_clip_bounds src/Dodge/Data/Config.hs 56;" f _delayedEvents src/Dodge/Data/LWorld.hs 131;" f _dexterity src/Dodge/Data/Creature/Misc.hs 22;" f -_diCloseFilter src/Dodge/Data/HUD.hs 22;" f -_diInvFilter src/Dodge/Data/HUD.hs 21;" f -_diSections src/Dodge/Data/HUD.hs 19;" f -_diSelection src/Dodge/Data/HUD.hs 20;" f -_diSelectionExtra src/Dodge/Data/HUD.hs 23;" f +_diCloseFilter src/Dodge/Data/HUD.hs 23;" f +_diInvFilter src/Dodge/Data/HUD.hs 22;" f +_diSections src/Dodge/Data/HUD.hs 20;" f +_diSelection src/Dodge/Data/HUD.hs 21;" f +_diSelectionExtra src/Dodge/Data/HUD.hs 24;" f _dimAttachPos src/Dodge/Data/Item/Misc.hs 16;" f _dimCenter src/Dodge/Data/Item/Misc.hs 15;" f _dimRad src/Dodge/Data/Item/Misc.hs 14;" f @@ -2610,7 +2610,7 @@ _heldPos src/Dodge/Data/Input.hs 49;" f _heldTriggerType src/Dodge/Data/Item/Use.hs 42;" f _heldWorldPos src/Dodge/Data/Input.hs 51;" f _hud src/Dodge/Data/World.hs 47;" f -_hudElement src/Dodge/Data/HUD.hs 47;" f +_hudElement src/Dodge/Data/HUD.hs 48;" f _humanoidAI src/Dodge/Data/Creature/Misc.hs 69;" f _iaLoaded src/Dodge/Data/Item/Use/Consumption.hs 22;" f _iaMax src/Dodge/Data/Item/Use/Consumption.hs 21;" f @@ -3095,7 +3095,7 @@ _ssShownItems src/Dodge/Data/SelectionList.hs 34;" f _strength src/Dodge/Data/Creature/Misc.hs 21;" f _strideAmount src/Dodge/Data/Creature/Stance.hs 22;" f _strideLength src/Dodge/Data/Creature/Stance.hs 16;" f -_subInventory src/Dodge/Data/HUD.hs 18;" f +_subInventory src/Dodge/Data/HUD.hs 19;" f _swColor src/Dodge/Data/Shockwave.hs 18;" f _swDam src/Dodge/Data/Shockwave.hs 23;" f _swDirection src/Dodge/Data/Shockwave.hs 19;" f @@ -3122,7 +3122,7 @@ _tcEffect src/Dodge/Data/Terminal.hs 120;" f _tcHelp src/Dodge/Data/Terminal.hs 119;" f _tcString src/Dodge/Data/Terminal.hs 117;" f _tempLightSources src/Dodge/Data/LWorld.hs 137;" f -_termID src/Dodge/Data/HUD.hs 44;" f +_termID src/Dodge/Data/HUD.hs 45;" f _terminals src/Dodge/Data/LWorld.hs 123;" f _teslaArcs src/Dodge/Data/LWorld.hs 113;" f _testFloat src/Dodge/Data/World.hs 45;" f @@ -3348,7 +3348,7 @@ adjustIMZone src/Dodge/Base.hs 77;" f advanceScrollAmount src/Dodge/Update.hs 399;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -aimDelaySweep src/Dodge/Render/Picture.hs 228;" f +aimDelaySweep src/Dodge/Render/Picture.hs 231;" f aimStanceInfo src/Dodge/Item/Info.hs 210;" f aimTurn src/Dodge/Creature/YourControl.hs 143;" f aimingMuzzleLength src/Dodge/Creature/HandPos.hs 46;" f @@ -3636,7 +3636,7 @@ clipZoom src/Dodge/Update/Camera.hs 215;" f clockCycle src/Dodge/Clock.hs 9;" f closeObjEq src/Dodge/Inventory/CloseObject.hs 15;" f closeObjPos src/Dodge/Inventory/CloseObject.hs 10;" f -closeObjectInfo src/Dodge/Render/HUD.hs 225;" f +closeObjectInfo src/Dodge/Render/HUD.hs 226;" f closeObjectToSelectionItem src/Dodge/Inventory/SelectionList.hs 54;" f closeObjectToTextPictures src/Dodge/Inventory/SelectionList.hs 68;" f closestCreatureID src/Dodge/Debug.hs 92;" f @@ -3657,6 +3657,7 @@ colCrsWalls src/Dodge/WallCreatureCollisions.hs 17;" f colSpark src/Dodge/Spark.hs 47;" f colSparkRandDir src/Dodge/Spark.hs 101;" f collectDamageTypes src/Dodge/Damage.hs 32;" f +collectInvItems src/Dodge/Update/Input/InGame.hs 214;" f collideCircWalls src/Dodge/Base/Collide.hs 149;" f collidePoint src/Dodge/Base/Collide.hs 48;" f collidePointTestFilter src/Dodge/Base/Collide.hs 93;" f @@ -3671,7 +3672,7 @@ combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 41;" f combineAwareness src/Dodge/Creature/Perception.hs 109;" f combineFloors src/Dodge/Room/Procedural.hs 172;" f -combineInventoryExtra src/Dodge/Render/HUD.hs 335;" f +combineInventoryExtra src/Dodge/Render/HUD.hs 336;" f combineItemListYouX src/Dodge/Combine.hs 33;" f combineList src/Dodge/Combine.hs 20;" f combineRooms src/Dodge/Room/Procedural.hs 152;" f @@ -3690,6 +3691,7 @@ composeTree src/Dodge/Tree/Compose.hs 46;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f conEffects src/Dodge/Concurrent.hs 13;" f concBall src/Dodge/WorldEvent/SpawnParticle.hs 27;" f +concurrentIS src/Dodge/Update/Input/InGame.hs 206;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 532;" f connectionBlurb src/Dodge/Terminal.hs 102;" f connectionBlurbLines src/Dodge/Terminal.hs 47;" f @@ -4042,7 +4044,7 @@ doPropUpdates src/Dodge/Prop/Update.hs 36;" f doQuickload src/Dodge/Save.hs 82;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 301;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 328;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f @@ -4095,9 +4097,9 @@ drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f drawCarte src/Dodge/Render/HUD/Carte.hs 14;" f drawCircFlare src/Dodge/Flare.hs 25;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f -drawCombFilter src/Dodge/Render/Picture.hs 209;" f +drawCombFilter src/Dodge/Render/Picture.hs 212;" f drawCombFilterJump src/Dodge/Render/Picture.hs 153;" f -drawCombineInventory src/Dodge/Render/HUD.hs 185;" f +drawCombineInventory src/Dodge/Render/HUD.hs 186;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 62;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f drawCrInfo src/Dodge/Debug/Picture.hs 342;" f @@ -4111,29 +4113,29 @@ drawDoorPaths src/Dodge/Debug/Picture.hs 217;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 81;" f drawDrag src/Dodge/Render/Picture.hs 160;" f drawDragDrop src/Dodge/Render/Picture.hs 171;" f -drawDragSelect src/Dodge/Render/HUD.hs 159;" f +drawDragSelect src/Dodge/Render/HUD.hs 160;" f drawDragSelect src/Dodge/Render/Picture.hs 157;" f -drawDragSelected src/Dodge/Render/HUD.hs 147;" f +drawDragSelected src/Dodge/Render/HUD.hs 148;" f drawEmptySet src/Dodge/Render/Picture.hs 108;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 8;" f drawEquipment src/Dodge/Creature/Picture.hs 140;" f -drawExamineInventory src/Dodge/Render/HUD.hs 199;" f +drawExamineInventory src/Dodge/Render/HUD.hs 200;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 234;" f -drawFiltDrag src/Dodge/Render/Picture.hs 177;" f -drawFiltDragDrop src/Dodge/Render/Picture.hs 187;" f +drawFiltDrag src/Dodge/Render/Picture.hs 180;" f +drawFiltDragDrop src/Dodge/Render/Picture.hs 190;" f drawFlame src/Dodge/Flame/Draw.hs 7;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 23;" f drawFlare src/Dodge/Flare.hs 12;" f drawFooterText src/Dodge/Render/MenuScreen.hs 74;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f -drawGapPlus src/Dodge/Render/Picture.hs 219;" f +drawGapPlus src/Dodge/Render/Picture.hs 222;" f drawGib src/Dodge/Prop/Draw.hs 28;" f -drawHP src/Dodge/Render/HUD.hs 53;" f -drawHUD src/Dodge/Render/HUD.hs 45;" f +drawHP src/Dodge/Render/HUD.hs 54;" f +drawHUD src/Dodge/Render/HUD.hs 46;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 21;" f drawInspectWall src/Dodge/Debug/Picture.hs 209;" f drawInspectWalls src/Dodge/Debug/Picture.hs 197;" f -drawInventory src/Dodge/Render/HUD.hs 62;" f +drawInventory src/Dodge/Render/HUD.hs 63;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLampCover src/Dodge/Prop/Draw.hs 44;" f drawLaser src/Dodge/Laser/Draw.hs 6;" f @@ -4150,7 +4152,7 @@ drawMenuCursor src/Dodge/Render/Picture.hs 141;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 57;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 15;" f drawMouseCursor src/Dodge/Render/Picture.hs 73;" f -drawMouseOver src/Dodge/Render/HUD.hs 110;" f +drawMouseOver src/Dodge/Render/HUD.hs 111;" f drawMousePosition src/Dodge/Debug/Picture.hs 319;" f drawMovingShape src/Dodge/Prop/Draw.hs 67;" f drawMovingShapeCol src/Dodge/Prop/Draw.hs 73;" f @@ -4164,14 +4166,14 @@ drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawProp src/Dodge/Prop/Draw.hs 15;" f drawProp' src/Dodge/Prop/Draw.hs 12;" f -drawRBOptions src/Dodge/Render/HUD.hs 243;" f +drawRBOptions src/Dodge/Render/HUD.hs 244;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 7;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 30;" f drawReturn src/Dodge/Render/Picture.hs 114;" f -drawRootCursor src/Dodge/Render/HUD.hs 77;" f +drawRootCursor src/Dodge/Render/HUD.hs 78;" f drawSSCursor src/Dodge/SelectionSections/Draw.hs 30;" f drawSSMultiCursor src/Dodge/SelectionSections/Draw.hs 41;" f -drawSelect src/Dodge/Render/Picture.hs 198;" f +drawSelect src/Dodge/Render/Picture.hs 201;" f drawSelectionList src/Dodge/Render/List.hs 35;" f drawSelectionListBackground src/Dodge/Render/List.hs 51;" f drawSelectionSections src/Dodge/SelectionSections/Draw.hs 17;" f @@ -4183,13 +4185,13 @@ drawShell src/Dodge/Projectile/Draw.hs 20;" f drawShockwave src/Dodge/Shockwave/Draw.hs 7;" f drawSpark src/Dodge/Spark/Draw.hs 6;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 14;" f -drawSubInventory src/Dodge/Render/HUD.hs 177;" f -drawSweep src/Dodge/Render/Picture.hs 235;" f +drawSubInventory src/Dodge/Render/HUD.hs 178;" f +drawSweep src/Dodge/Render/Picture.hs 238;" f drawSwitch src/Dodge/Button/Draw.hs 15;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f drawTargetLaser src/Dodge/Particle/Draw.hs 6;" f drawTargeting src/Dodge/Targeting/Draw.hs 13;" f -drawTerminalDisplay src/Dodge/Render/HUD.hs 372;" f +drawTerminalDisplay src/Dodge/Render/HUD.hs 373;" f drawTeslaArc src/Dodge/Tesla/Arc/Draw.hs 7;" f drawText src/Picture/Base.hs 220;" f drawTitle src/Dodge/Render/MenuScreen.hs 57;" f @@ -4238,7 +4240,7 @@ encircleP src/Dodge/Creature/Boid.hs 27;" f enterCombineInv src/Dodge/DisplayInventory.hs 281;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f -equipAllocString src/Dodge/Render/HUD.hs 301;" f +equipAllocString src/Dodge/Render/HUD.hs 302;" f equipInfo src/Dodge/Item/Info.hs 103;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 65;" f equipPosition src/Dodge/Item/Draw.hs 30;" f @@ -4331,7 +4333,7 @@ flockPointTarget src/Dodge/Creature/Boid.hs 199;" f flockPointTargetR src/Dodge/Creature/Boid.hs 266;" f flockToPointUsing src/Dodge/Creature/Boid.hs 214;" f flockToPointUsing' src/Dodge/Creature/Boid.hs 227;" f -floorItemPickupInfo src/Dodge/Render/HUD.hs 230;" f +floorItemPickupInfo src/Dodge/Render/HUD.hs 231;" f floorItemSPic src/Dodge/Render/ShapePicture.hs 119;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 412;" f @@ -4414,7 +4416,7 @@ getNodePos src/Dodge/Path.hs 31;" f getPretty src/AesonHelp.hs 7;" f getPrettyShort src/AesonHelp.hs 10;" f getPromptTM src/Dodge/Terminal/Type.hs 8;" f -getRootItemBounds src/Dodge/Render/HUD.hs 100;" f +getRootItemBounds src/Dodge/Render/HUD.hs 101;" f getSensor src/Dodge/Terminal.hs 189;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 17;" f getSplitString src/Dodge/Debug/Terminal.hs 123;" f @@ -4599,7 +4601,7 @@ invAdj src/Dodge/Item/Grammar.hs 188;" f invCursorParams src/Dodge/ListDisplayParams.hs 38;" f invDimColor src/Dodge/DisplayInventory.hs 191;" f invDisplayParams src/Dodge/ListDisplayParams.hs 32;" f -invHead src/Dodge/Render/HUD.hs 409;" f +invHead src/Dodge/Render/HUD.hs 410;" f invLDT src/Dodge/Item/Grammar.hs 171;" f invRootMap src/Dodge/Item/Grammar.hs 180;" f invRootTrees src/Dodge/Item/Grammar.hs 210;" f @@ -4610,8 +4612,8 @@ invSideEff src/Dodge/Creature/State.hs 162;" f invSize src/Dodge/Inventory/CheckSlots.hs 41;" f invTrees src/Dodge/Item/Grammar.hs 198;" f invTrees' src/Dodge/Item/Grammar.hs 202;" f -inventoryExtra src/Dodge/Render/HUD.hs 310;" f -inventoryExtraH src/Dodge/Render/HUD.hs 321;" f +inventoryExtra src/Dodge/Render/HUD.hs 311;" f +inventoryExtraH src/Dodge/Render/HUD.hs 322;" f inventoryX src/Dodge/Creature.hs 115;" f inverseSelBoundaryDown src/Dodge/SelectionSections.hs 256;" f inverseSelBoundaryUp src/Dodge/SelectionSections.hs 243;" f @@ -4778,7 +4780,7 @@ llleft src/Dodge/Item/Grammar.hs 107;" f llright src/Dodge/Item/Grammar.hs 114;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f -lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 398;" f +lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 399;" f lnkPosDir src/Dodge/RoomLink.hs 97;" f loadDodgeConfig src/Dodge/Config/Load.hs 9;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 21;" f @@ -4909,7 +4911,7 @@ maybeClearPath src/Dodge/Block.hs 77;" f maybeClearPaths src/Dodge/Block.hs 74;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 463;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 489;" f maybeOpenTerminal src/Dodge/Update.hs 123;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 111;" f @@ -5134,7 +5136,7 @@ parseNum src/Dodge/Debug/Terminal.hs 73;" f pathConnected src/Dodge/Room/CheckConsistency.hs 14;" f pathEdgeObstructed src/Dodge/Path.hs 43;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 398;" f +pauseGame src/Dodge/Update/Input/InGame.hs 425;" f pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f @@ -5595,11 +5597,11 @@ secondColumnParams src/Dodge/ListDisplayParams.hs 45;" f seedStartMenu src/Dodge/Menu.hs 79;" f seedStartOptions src/Dodge/Menu.hs 82;" f segOnCirc src/Geometry.hs 116;" f -selNumPos src/Dodge/Render/HUD.hs 469;" f -selNumPosCardinal src/Dodge/Render/HUD.hs 492;" f +selNumPos src/Dodge/Render/HUD.hs 470;" f +selNumPosCardinal src/Dodge/Render/HUD.hs 493;" f selSecDrawCursor src/Dodge/Render/List.hs 129;" f selSecDrawCursorAt src/Dodge/Render/List.hs 107;" f -selSecSelCol src/Dodge/Render/HUD.hs 515;" f +selSecSelCol src/Dodge/Render/HUD.hs 516;" f selSecSelSize src/Dodge/SelectionSections.hs 182;" f selSecYint src/Dodge/SelectionSections.hs 191;" f selectCreatureDebugItem src/Dodge/Debug.hs 39;" f @@ -5691,8 +5693,9 @@ shiftDraw src/Dodge/Render/ShapePicture.hs 66;" f shiftDraw' src/Dodge/Render/ShapePicture.hs 72;" f shiftInBy src/Dodge/PlacementSpot.hs 236;" f shiftInvItems src/Dodge/Update/Input/InGame.hs 190;" f -shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 211;" f -shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 205;" f +shiftInvItems' src/Dodge/Update/Input/InGame.hs 217;" f +shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 237;" f +shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 231;" f shiftLinkBy src/Dodge/Room/Link.hs 87;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f shiftPathBy src/Dodge/Room/Link.hs 92;" f @@ -5791,7 +5794,7 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 98;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 48;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f -spaceAction src/Dodge/Update/Input/InGame.hs 401;" f +spaceAction src/Dodge/Update/Input/InGame.hs 428;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 186;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 179;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 171;" f @@ -5987,8 +5990,8 @@ toggleCombineInv src/Dodge/DisplayInventory.hs 31;" f toggleCommand src/Dodge/Terminal.hs 196;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 79;" f toggleJust src/MaybeHelp.hs 41;" f -toggleMap src/Dodge/Update/Input/InGame.hs 425;" f -toggleTweakInv src/Dodge/Update/Input/InGame.hs 440;" f +toggleMap src/Dodge/Update/Input/InGame.hs 452;" f +toggleTweakInv src/Dodge/Update/Input/InGame.hs 466;" f togglesToEffects src/Dodge/Terminal.hs 248;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -6059,7 +6062,7 @@ trunkDepth src/TreeHelp.hs 161;" f tryAssignHotkey src/Dodge/Creature/YourControl.hs 85;" f tryAttachBulletBelt src/Dodge/Euse.hs 40;" f tryChargeBattery src/Dodge/Euse.hs 43;" f -tryCombine src/Dodge/Update/Input/InGame.hs 449;" f +tryCombine src/Dodge/Update/Input/InGame.hs 475;" f tryGetChannel src/Sound.hs 96;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 20;" f tryGetRootItemInvID src/Dodge/Inventory/Location.hs 29;" f @@ -6105,7 +6108,7 @@ updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla/Arc.hs 86;" f updateAttachedItems src/Dodge/Creature/State.hs 173;" f updateAutoRecharge src/Dodge/Creature/State.hs 324;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 336;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 363;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBounds src/Dodge/Update/Camera.hs 245;" f @@ -6128,7 +6131,7 @@ updateDistortion src/Dodge/Distortion.hs 5;" f updateDistortions src/Dodge/Update.hs 519;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f updateEnergyBalls src/Dodge/Update.hs 546;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 377;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 404;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f @@ -6136,28 +6139,28 @@ updateFlame src/Dodge/Flame.hs 71;" f updateFlames src/Dodge/Update.hs 543;" f updateFlare src/Dodge/Flare.hs 7;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 228;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 221;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 255;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 248;" f updateGusts src/Dodge/Update.hs 697;" f updateHeldRootItem src/Dodge/Creature/State.hs 167;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f updateIMl src/Dodge/Update.hs 488;" f updateIMl' src/Dodge/Update.hs 493;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 280;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 307;" f updateInstantBullets src/Dodge/Update.hs 635;" f updateInv src/Dodge/Creature/State.hs 152;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 85;" f updateItemTargeting src/Dodge/Creature/State.hs 268;" f updateItemWithOrientation src/Dodge/Creature/State.hs 194;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 274;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 263;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 301;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 290;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f updateLasers src/Dodge/Update.hs 417;" f updateLightSources src/Dodge/Update.hs 522;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 295;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 322;" f updateMIM src/Dodge/Update.hs 648;" f updateMachine src/Dodge/Machine/Update.hs 19;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 133;" f @@ -6172,8 +6175,8 @@ updatePastWorlds src/Dodge/Update.hs 405;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f updatePosEvents src/Dodge/Update.hs 555;" f updatePreload src/Preload/Update.hs 20;" f -updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 238;" f -updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 241;" f +updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 265;" f +updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 268;" f updateProjectile src/Dodge/Projectile/Update.hs 23;" f updateProp src/Dodge/Prop/Update.hs 11;" f updateRBList src/Dodge/Inventory/RBList.hs 16;" f @@ -6366,7 +6369,7 @@ yV2 src/Geometry/Vector.hs 203;" f yellow src/Color.hs 17;" f you src/Dodge/Base/You.hs 18;" f youDropItem src/Dodge/Creature/Action.hs 187;" f -yourAugmentedItem src/Dodge/Render/HUD.hs 237;" f +yourAugmentedItem src/Dodge/Render/HUD.hs 238;" f yourControl src/Dodge/Creature/YourControl.hs 22;" f yourDefaultSpeed src/Dodge/Default/Creature.hs 134;" f yourDefaultStrideLength src/Dodge/Default/Creature.hs 137;" f