diff --git a/ghcidOutput b/ghcidOutput index 31b6711cd..f762ff240 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1,15 +1,30 @@ -/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:123:1-15: warning: [-Wunused-top-binds] +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:124:1-15: warning: [-Wunused-top-binds] Defined but not used: ‘tryDropSelected’ | -123 | tryDropSelected w = do +124 | tryDropSelected w = do | ^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:130:1-17: warning: [-Wunused-top-binds] +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:131:1-17: warning: [-Wunused-top-binds] Defined but not used: ‘tryPickupSelected’ | -130 | tryPickupSelected w = do +131 | tryPickupSelected w = do | ^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:134:19: warning: [-Wunused-matches] +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:135:19: warning: [-Wunused-matches] Defined but not used: ‘x’ | -134 | OverInvDrag 3 x <- w ^? input . mouseContext +135 | OverInvDrag 3 x <- w ^? input . mouseContext | ^ +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:209:9: warning: [-Wunused-matches] + Defined but not used: ‘j’ + | +209 | (i, j) <- w ^? hud . hudElement . diSelection . _Just + | ^ +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:227:1-12: warning: [-Wunused-top-binds] + Defined but not used: ‘dragInvItems’ + | +227 | dragInvItems j is cfig mpos ldp sss w + | ^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:297:1-13: warning: [-Wunused-top-binds] + Defined but not used: ‘shiftInvItems’ + | +297 | shiftInvItems j xs cfig mpos ldp sss w = case inverseSelBoundaryUp cfig ldp sss mpos of + | ^^^^^^^^^^^^^ diff --git a/src/Dodge/Data/HUD.hs b/src/Dodge/Data/HUD.hs index bf58dda1e..a4d929064 100644 --- a/src/Dodge/Data/HUD.hs +++ b/src/Dodge/Data/HUD.hs @@ -5,9 +5,9 @@ module Dodge.Data.HUD where -import Data.IntSet (IntSet) -import Data.IntMap import Control.Lens +import Data.IntMap +import Data.IntSet (IntSet) import Dodge.Data.Button import Dodge.Data.Combine import Dodge.Data.FloorItem @@ -21,7 +21,8 @@ data HUDElement , _diSelection :: Maybe (Int, Int) , _diInvFilter :: Maybe String , _diCloseFilter :: Maybe String - , _diSelectionExtra :: IntSet + , _diSelectionExtra :: IntSet -- this should probably be placed within _diSelection + -- would lead to inconsistency with _ciSelection } | DisplayCarte @@ -33,9 +34,9 @@ data HUDElement data SubInventory = NoSubInventory --- { _nsSelected :: MouseInventorySelection --- } - | ExamineInventory + | -- { _nsSelected :: MouseInventorySelection + -- } + ExamineInventory | CombineInventory { _ciSections :: IntMap (SelectionSection CombinableItem) , _ciSelection :: Maybe (Int, Int) @@ -55,4 +56,5 @@ data HUD = HUD makeLenses ''HUD makeLenses ''HUDElement makeLenses ''SubInventory + --makeLenses ''MouseInventorySelection diff --git a/src/Dodge/Inventory/CheckSlots.hs b/src/Dodge/Inventory/CheckSlots.hs index 12e03d9d6..e7af293ae 100644 --- a/src/Dodge/Inventory/CheckSlots.hs +++ b/src/Dodge/Inventory/CheckSlots.hs @@ -16,22 +16,11 @@ import qualified IntMapHelp as IM checkInvSlotsYou :: Item -> World -> Maybe Int checkInvSlotsYou it w | crNumFreeSlots ycr >= _itInvSize it = - Just $ findItemSlot (_crInv ycr) + Just . IM.newKey $ _crInv ycr | otherwise = Nothing where ycr = you w --- Assumes that the item is singular. --- Do not want to stack floor items for now -findItemSlot :: IM.IntMap Item -> Int -findItemSlot = maybe 0 ((+ 1) . fst) . IM.lookupMax ---findItemSlot it inv = case it ^? itUse . useAmount of --- Just _ -> --- fromMaybe newslot $ IM.findIndex (\it' -> _itType it == _itType it') inv --- _ -> newslot --- where --- newslot = maybe 0 ((+ 1) . fst) $ IM.lookupMax inv - crNumFreeSlots :: Creature -> Int crNumFreeSlots cr = _crInvCapacity cr - invSize (_crInv cr) diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index ae18beedd..5fa6eae42 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -135,12 +135,12 @@ drawDragSelected :: Configuration -> World -> Maybe Picture drawDragSelected cfig w = do ys <- w ^? hud . hudElement . diSelectionExtra guard $ not (IS.null ys) - (i,j) <- w ^? hud . hudElement . diSelection . _Just + (i,_) <- w ^? hud . hudElement . diSelection . _Just sss <- w ^? hud . hudElement . diSections let idp = invDisplayParams w let f x = (selSecDrawCursorAt 15 idp BackdropCursor sss (i, x) <>) return . translateScreenPos cfig (invDisplayParams w ^. ldpPos) - . color (withAlpha 0.2 white) . IS.foldr f mempty $ IS.insert j ys + . color (withAlpha 0.2 white) . IS.foldr f mempty $ 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 c333a2371..f9a7713c4 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -101,13 +101,14 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of guard $ Just (fst sstart) == fmap fst msel || isNothing msel return $ w & input . mouseContext . mcoSelEnd .~ msel OverInvDrag k mmouseover -> fromMaybe w $ do - sss <- w ^? hud . hudElement . diSections - _ <- mmouseover - let mpos = w ^. input . mousePos - (j, i) <- w ^? hud . hudElement . diSelection . _Just - guard $ j == k -- this should always be the case? - x <- w ^? hud . hudElement . diSelectionExtra - return $ w & dragInvItems k (IS.insert i x) cfig mpos ldp sss + ss <- w ^? hud . hudElement . diSections . ix k . ssItems + x <- mmouseover + is <- w ^? hud . hudElement . diSelectionExtra + return $ if concurrentIS is + then shiftInvItems' k x is ss w + else collectInvItems is w +-- let mpos = w ^. input . mousePos +-- return $ w & dragInvItems k xs cfig mpos ldp sss _ -> w where ldp = invDisplayParams w @@ -115,24 +116,24 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of dropSelected :: World -> World dropSelected w = fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 - (0, j) <- w ^? hud . hudElement . diSelection . _Just + (0, _) <- w ^? hud . hudElement . diSelection . _Just xs <- w ^? hud . hudElement . diSelectionExtra - return $ IS.foldr (dropItem cr) w (IS.insert j xs) + return $ IS.foldr (dropItem cr) w xs tryDropSelected :: World -> Maybe World tryDropSelected w = do cr <- w ^? cWorld . lWorld . creatures . ix 0 - (0, j) <- w ^? hud . hudElement . diSelection . _Just + (0, _) <- w ^? hud . hudElement . diSelection . _Just xs <- w ^? hud . hudElement . diSelectionExtra - return $ IS.foldr (dropItem cr) w (IS.insert j xs) + return $ IS.foldr (dropItem cr) w xs tryPickupSelected :: World -> Maybe World tryPickupSelected w = do cr <- w ^? cWorld . lWorld . creatures . ix 0 - (3, j) <- w ^? hud . hudElement . diSelection . _Just + (3, _) <- w ^? hud . hudElement . diSelection . _Just xs <- w ^? hud . hudElement . diSelectionExtra OverInvDrag 3 x <- w ^? input . mouseContext - return $ IS.foldr (dropItem cr) w (IS.insert j xs) + return $ IS.foldr (dropItem cr) w xs updateMouseReleaseInGame :: World -> World updateMouseReleaseInGame w = case w ^. input . mouseContext of @@ -207,7 +208,7 @@ startDrag :: (Int, Int) -> World -> World startDrag (a, b) w = fromMaybe (augInvDirectSelect (a, b) $ setmichosen mempty w) $ do (i, j) <- w ^? hud . hudElement . diSelection . _Just xs <- w ^? hud . hudElement . diSelectionExtra - guard $ i == a && b `IS.member` IS.insert j xs + guard $ i == a && b `IS.member` xs return $ setmichosen xs w where setmichosen x = @@ -246,6 +247,44 @@ collectInvItems is w = fromMaybe w $ do (k, ks) <- IS.minView js return . h (j + 1) ks $ swapInvItems (\_ _ -> Just (j + 1)) k w' +shiftInvItems' :: + Int -> + (Int,Int) -> + IS.IntSet -> + IM.IntMap (SelectionItem a) -> + World -> + World +shiftInvItems' k x xs ss w = fromMaybe w $ do + (maxi,_) <- IS.maxView xs + (mini,_) <- IS.minView xs + if x < (k,mini) + then do + minss <- IM.lookupMin ss + guard (mini > fst minss) + return $ shiftInvItemsUp k xs w + else do + guard $ x > (k,maxi) + maxss <- IM.lookupMax ss + guard (maxi < fst maxss) + return $ shiftInvItemsDown k xs w +-- if +-- Just p -> fromMaybe w $ do +-- (k,_) <- IS.minView xs +-- guard $ p < (j,k) +-- ss <- sss ^? ix j . ssItems +-- minsss <- IM.lookupMin ss +-- guard (k > fst minsss) +-- return $ shiftInvItemsUp j xs w +-- _ -> case inverseSelBoundaryDown cfig ldp sss mpos of +-- Just p -> fromMaybe w $ do +-- (k,_) <- IS.maxView xs +-- guard $ p > (j,k) +-- ss <- sss ^? ix j . ssItems +-- maxsss <- IM.lookupMax ss +-- guard (k < fst maxsss) +-- return $ shiftInvItemsDown j xs w +-- _ -> w + shiftInvItems :: Int -> IS.IntSet -> @@ -256,16 +295,20 @@ shiftInvItems :: World -> World shiftInvItems j xs cfig mpos ldp sss w = case inverseSelBoundaryUp cfig ldp sss mpos of - Just p | p < (j, IS.findMin xs) -> fromMaybe w $ do + Just p -> fromMaybe w $ do + (k,_) <- IS.minView xs + guard $ p < (j,k) ss <- sss ^? ix j . ssItems minsss <- IM.lookupMin ss - guard (IS.findMin xs > fst minsss) + guard (k > fst minsss) return $ shiftInvItemsUp j xs w _ -> case inverseSelBoundaryDown cfig ldp sss mpos of - Just p | p > (j, IS.findMax xs) -> fromMaybe w $ do + Just p -> fromMaybe w $ do + (k,_) <- IS.maxView xs + guard $ p > (j,k) ss <- sss ^? ix j . ssItems maxsss <- IM.lookupMax ss - guard (IS.findMax xs < fst maxsss) + guard (k < fst maxsss) return $ shiftInvItemsDown j xs w _ -> w diff --git a/tags b/tags index f8fe93c30..468fe6e08 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 39;" C +CombineInventory src/Dodge/Data/HUD.hs 40;" 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 26;" C +DisplayCarte src/Dodge/Data/HUD.hs 27;" C DisplayInventory src/Dodge/Data/HUD.hs 18;" C DisplayInventory src/Dodge/DisplayInventory.hs 2;" m -DisplayTerminal src/Dodge/Data/HUD.hs 45;" C +DisplayTerminal src/Dodge/Data/HUD.hs 46;" 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 38;" C +ExamineInventory src/Dodge/Data/HUD.hs 39;" 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,7 +821,7 @@ 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 47;" t +HUD src/Dodge/Data/HUD.hs 48;" t HUD src/Dodge/Data/HUD.hs 6;" m HUD src/Dodge/Render/HUD.hs 3;" m HUDElement src/Dodge/Data/HUD.hs 17;" t @@ -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 44;" C +LockedInventory src/Dodge/Data/HUD.hs 45;" 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 35;" C +NoSubInventory src/Dodge/Data/HUD.hs 36;" 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 @@ -1824,7 +1824,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 34;" t +SubInventory src/Dodge/Data/HUD.hs 35;" t Superfluous src/Shape/Data.hs 38;" C Surface src/Shape/Data.hs 41;" t Survive src/Dodge/Data/Scenario.hs 5;" C @@ -2291,16 +2291,16 @@ _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 49;" f -_carteRot src/Dodge/Data/HUD.hs 51;" f -_carteZoom src/Dodge/Data/HUD.hs 50;" f +_carteCenter src/Dodge/Data/HUD.hs 50;" f +_carteRot src/Dodge/Data/HUD.hs 52;" f +_carteZoom src/Dodge/Data/HUD.hs 51;" f _ceSideEffect src/Dodge/Data/Universe.hs 62;" f _ceString src/Dodge/Data/Universe.hs 63;" f -_ciFilter src/Dodge/Data/HUD.hs 42;" f +_ciFilter src/Dodge/Data/HUD.hs 43;" f _ciInvIDs src/Dodge/Data/Combine.hs 6;" f _ciItem src/Dodge/Data/Combine.hs 7;" f -_ciSections src/Dodge/Data/HUD.hs 40;" f -_ciSelection src/Dodge/Data/HUD.hs 41;" f +_ciSections src/Dodge/Data/HUD.hs 41;" f +_ciSelection src/Dodge/Data/HUD.hs 42;" 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 @@ -2324,7 +2324,7 @@ _cldtUp src/Dodge/Data/DoubleTree.hs 46;" f _cldtUp src/Dodge/Data/DoubleTree.hs 54;" f _clickPos src/Dodge/Data/Input.hs 46;" f _clickWorldPos src/Dodge/Data/Input.hs 48;" f -_closeObjects src/Dodge/Data/HUD.hs 52;" f +_closeObjects src/Dodge/Data/HUD.hs 53;" 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 @@ -2607,7 +2607,7 @@ _heldPos src/Dodge/Data/Input.hs 47;" f _heldTriggerType src/Dodge/Data/Item/Use.hs 42;" f _heldWorldPos src/Dodge/Data/Input.hs 49;" f _hud src/Dodge/Data/World.hs 47;" f -_hudElement src/Dodge/Data/HUD.hs 48;" f +_hudElement src/Dodge/Data/HUD.hs 49;" 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 @@ -3120,7 +3120,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 45;" f +_termID src/Dodge/Data/HUD.hs 46;" 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 @@ -3434,7 +3434,7 @@ attachOnward' src/Dodge/Tree/Compose.hs 98;" f attachTree src/Dodge/Tree/Compose.hs 38;" f attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 66;" f attribSize src/Shader/Compile.hs 306;" f -augInvDirectSelect src/Dodge/Inventory.hs 275;" f +augInvDirectSelect src/Dodge/Inventory.hs 276;" f augmentedHUD src/Dodge/Item/Scope.hs 47;" f autoAmr src/Dodge/Item/Held/Rod.hs 51;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 362;" f @@ -3573,7 +3573,7 @@ chainLinkOrientation src/Dodge/Creature/State.hs 183;" f chainPairs src/Geometry.hs 363;" f changeSwapClose src/Dodge/Inventory.hs 168;" f changeSwapSel src/Dodge/Inventory.hs 160;" f -changeSwapWith src/Dodge/Inventory.hs 269;" f +changeSwapWith src/Dodge/Inventory.hs 270;" f charToTuple src/Picture/Base.hs 317;" f charToTupleGrad src/Picture/Text.hs 18;" f chargeIfEquipped src/Dodge/ItEffect.hs 54;" f @@ -3585,7 +3585,7 @@ chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 112;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 30;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 46;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 99;" f -checkConnection src/Dodge/Inventory.hs 243;" f +checkConnection src/Dodge/Inventory.hs 244;" f checkDeath src/Dodge/Creature/State.hs 75;" f checkEndGame src/Dodge/Update.hs 680;" f checkErrorGL src/Shader/Compile.hs 255;" f @@ -3655,7 +3655,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 225;" f +collectInvItems src/Dodge/Update/Input/InGame.hs 241;" 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 @@ -3689,7 +3689,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 217;" f +concurrentIS src/Dodge/Update/Input/InGame.hs 233;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 532;" f connectionBlurb src/Dodge/Terminal.hs 102;" f connectionBlurbLines src/Dodge/Terminal.hs 47;" f @@ -3723,14 +3723,14 @@ crHit src/Dodge/WorldEvent/ThingsHit.hs 68;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 30;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 13;" f crInAimStance src/Dodge/Creature/Test.hs 88;" f -crInvSize src/Dodge/Inventory/CheckSlots.hs 38;" f +crInvSize src/Dodge/Inventory/CheckSlots.hs 27;" f crIsAiming src/Dodge/Creature/Test.hs 56;" f crIsArmouredFrom src/Dodge/Creature/Test.hs 107;" f crMvAbsolute src/Dodge/Creature/Impulse/Movement.hs 20;" f crMvBy src/Dodge/Creature/Impulse/Movement.hs 13;" f crMvForward src/Dodge/Creature/Impulse/Movement.hs 38;" f crNearPoint src/Dodge/Creature/Test.hs 133;" f -crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 35;" f +crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 24;" f crOnWall src/Dodge/WallCreatureCollisions.hs 84;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 67;" f crSetRoots src/Dodge/Inventory/Location.hs 48;" f @@ -4042,7 +4042,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 354;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 403;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f @@ -4082,7 +4082,7 @@ doublePair src/Geometry.hs 149;" f doublePairSet src/Geometry.hs 153;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 72;" f doubleV2 src/Geometry.hs 156;" f -dragInvItems src/Dodge/Update/Input/InGame.hs 202;" f +dragInvItems src/Dodge/Update/Input/InGame.hs 218;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawAugmentedHUD src/Dodge/Creature/State.hs 210;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f @@ -4210,7 +4210,7 @@ droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f dropByState src/Dodge/Creature/State.hs 118;" f dropExcept src/Dodge/Creature/Action.hs 172;" f dropItem src/Dodge/Creature/Action.hs 178;" f -dropSelected src/Dodge/Update/Input/InGame.hs 115;" f +dropSelected src/Dodge/Update/Input/InGame.hs 116;" f drumMag src/Dodge/Item/Ammo.hs 48;" f dtIL src/Dodge/DoubleTree.hs 75;" f dtToAdjRootParent src/Dodge/DoubleTree.hs 126;" f @@ -4290,7 +4290,6 @@ findBoundDists src/Dodge/Update/Camera.hs 235;" f findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f findIndex src/IntMapHelp.hs 85;" f -findItemSlot src/Dodge/Inventory/CheckSlots.hs 26;" f findReverseEdge src/Polyhedra.hs 50;" f findReverseEdgeList src/Polyhedra.hs 57;" f findWallFreeDropPoint src/Dodge/FloorItem.hs 47;" f @@ -4607,7 +4606,7 @@ invSelectionItem src/Dodge/Inventory/SelectionList.hs 23;" f invSelectionItem' src/Dodge/Inventory/SelectionList.hs 20;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 162;" f -invSize src/Dodge/Inventory/CheckSlots.hs 41;" f +invSize src/Dodge/Inventory/CheckSlots.hs 30;" f invTrees src/Dodge/Item/Grammar.hs 198;" f invTrees' src/Dodge/Item/Grammar.hs 202;" f inventoryExtra src/Dodge/Render/HUD.hs 289;" f @@ -4628,9 +4627,9 @@ invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f isAmmoIntLink src/Dodge/HeldUse.hs 206;" f isAnimate src/Dodge/Creature/Test.hs 136;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f -isConnected src/Dodge/Inventory.hs 253;" f +isConnected src/Dodge/Inventory.hs 254;" f isElectrical src/Dodge/Data/Damage.hs 42;" f -isFilteringInv src/Dodge/Inventory.hs 314;" f +isFilteringInv src/Dodge/Inventory.hs 315;" f isFrictionless src/Dodge/Creature/State.hs 341;" f isGas src/Dodge/Euse.hs 64;" f isInLnk src/Dodge/PlacementSpot.hs 160;" f @@ -4909,7 +4908,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 514;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 563;" f maybeOpenTerminal src/Dodge/Update.hs 123;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 111;" f @@ -5134,7 +5133,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 450;" f +pauseGame src/Dodge/Update/Input/InGame.hs 499;" f pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f @@ -5571,8 +5570,8 @@ screenPolygon src/Dodge/Base/Window.hs 17;" f screenPolygonBord src/Dodge/Base/Window.hs 27;" f screenPosAbs src/Dodge/ScreenPos.hs 15;" f screenToWorldPos src/Dodge/Base/Coordinate.hs 53;" f -scrollAugInvSel src/Dodge/Inventory.hs 283;" f -scrollAugNextInSection src/Dodge/Inventory.hs 296;" f +scrollAugInvSel src/Dodge/Inventory.hs 284;" f +scrollAugNextInSection src/Dodge/Inventory.hs 297;" f scrollCommandStrings src/Dodge/Update/Scroll.hs 135;" f scrollCommands src/Dodge/Update/Scroll.hs 132;" f scrollDebugInfoInt src/Dodge/Debug.hs 47;" f @@ -5604,7 +5603,7 @@ selSecSelSize src/Dodge/SelectionSections.hs 182;" f selSecYint src/Dodge/SelectionSections.hs 191;" f selectCreatureDebugItem src/Dodge/Debug.hs 39;" f selectUse src/Dodge/SelectUse.hs 10;" f -selectedCloseObject src/Dodge/Inventory.hs 307;" f +selectedCloseObject src/Dodge/Inventory.hs 308;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f senseDamage src/Dodge/Machine/Update.hs 152;" f @@ -5690,9 +5689,10 @@ shiftChildren src/Dodge/Tree/Compose.hs 43;" f 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 234;" f -shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 263;" f -shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 257;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 279;" f +shiftInvItems' src/Dodge/Update/Input/InGame.hs 250;" f +shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 312;" f +shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 306;" 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 +5791,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 453;" f +spaceAction src/Dodge/Update/Input/InGame.hs 502;" 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 @@ -5848,7 +5848,7 @@ stackText src/Picture/Base.hs 188;" f stackedInventory src/Dodge/Creature.hs 281;" f startCr src/Dodge/Creature.hs 91;" f startCrafts src/Dodge/Room/Start.hs 92;" f -startDrag src/Dodge/Update/Input/InGame.hs 191;" f +startDrag src/Dodge/Update/Input/InGame.hs 207;" f startInvList src/Dodge/Creature.hs 109;" f startInventory src/Dodge/Creature.hs 112;" f startNewGameInSlot src/Dodge/StartNewGame.hs 15;" f @@ -5878,11 +5878,11 @@ stripZ src/Geometry/Vector3D.hs 97;" f subInvX src/Dodge/ListDisplayParams.hs 50;" f subMap src/TreeHelp.hs 118;" f subZipWith src/Dodge/Placement/Instance/Wall.hs 115;" f -swapAnyExtraSelection src/Dodge/Inventory.hs 235;" f +swapAnyExtraSelection src/Dodge/Inventory.hs 236;" f swapInOutLinks src/Dodge/RoomLink.hs 80;" f swapIndices src/ListHelp.hs 50;" f -swapInvItems src/Dodge/Inventory.hs 185;" f -swapItemWith src/Dodge/Inventory.hs 259;" f +swapInvItems src/Dodge/Inventory.hs 186;" f +swapItemWith src/Dodge/Inventory.hs 260;" f swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f swarmUsingCenter src/Dodge/Creature/Boid.hs 171;" f switchDoor src/Dodge/Placement/Instance/Door.hs 96;" f @@ -5989,8 +5989,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 477;" f -toggleTweakInv src/Dodge/Update/Input/InGame.hs 491;" f +toggleMap src/Dodge/Update/Input/InGame.hs 526;" f +toggleTweakInv src/Dodge/Update/Input/InGame.hs 540;" f togglesToEffects src/Dodge/Terminal.hs 248;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -6061,11 +6061,13 @@ 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 500;" f +tryCombine src/Dodge/Update/Input/InGame.hs 549;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 123;" f tryGetChannel src/Sound.hs 96;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 20;" f tryGetRootItemInvID src/Dodge/Inventory/Location.hs 29;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 36;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 130;" f tryPlay src/Sound.hs 83;" f tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 23;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 29;" f @@ -6107,7 +6109,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 388;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 437;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBounds src/Dodge/Update/Camera.hs 245;" f @@ -6130,7 +6132,7 @@ updateDistortion src/Dodge/Distortion.hs 5;" f updateDistortions src/Dodge/Update.hs 513;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f updateEnergyBalls src/Dodge/Update.hs 540;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 429;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 478;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f @@ -6138,35 +6140,35 @@ updateFlame src/Dodge/Flame.hs 71;" f updateFlames src/Dodge/Update.hs 537;" f updateFlare src/Dodge/Flare.hs 7;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 280;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 273;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 329;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 322;" f updateGusts src/Dodge/Update.hs 691;" f updateHeldRootItem src/Dodge/Creature/State.hs 167;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f updateIMl src/Dodge/Update.hs 482;" f updateIMl' src/Dodge/Update.hs 487;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 333;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 382;" f updateInstantBullets src/Dodge/Update.hs 629;" 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 327;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 315;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 376;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 364;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f updateLasers src/Dodge/Update.hs 411;" f updateLightSources src/Dodge/Update.hs 516;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 348;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 397;" f updateMIM src/Dodge/Update.hs 642;" f updateMachine src/Dodge/Machine/Update.hs 19;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 144;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 160;" f updateMouseContext src/Dodge/Update.hs 307;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 96;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 88;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 122;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 138;" f updateMovement src/Dodge/Creature/State.hs 331;" f updateObjCatMaybes src/Dodge/Update.hs 504;" f updateObjMapMaybe src/Dodge/Update.hs 497;" f @@ -6174,8 +6176,8 @@ updatePastWorlds src/Dodge/Update.hs 399;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f updatePosEvents src/Dodge/Update.hs 549;" f updatePreload src/Preload/Update.hs 20;" f -updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 290;" f -updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 293;" f +updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 339;" f +updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 342;" 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