From 4e4cc9293906c39c063861dd5fc1074a0ba9b983 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 25 Nov 2024 15:01:16 +0000 Subject: [PATCH] Improve item pickup by dragging --- ghcidOutput | 2 +- src/Dodge/Creature/Action.hs | 4 +- src/Dodge/Inventory.hs | 86 +---------- src/Dodge/Inventory/Add.hs | 19 +++ src/Dodge/Inventory/Swap.hs | 97 +++++++++++++ src/Dodge/Update/Input/InGame.hs | 11 +- tags | 241 ++++++++++++++++--------------- 7 files changed, 248 insertions(+), 212 deletions(-) create mode 100644 src/Dodge/Inventory/Swap.hs diff --git a/ghcidOutput b/ghcidOutput index b6ee0ea01..d560b8d96 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1 @@ -All good (593 modules, at 14:02:41) +All good (594 modules, at 15:00:52) diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index 90b9e7934..2042cb5e8 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -13,7 +13,7 @@ module Dodge.Creature.Action ( unsafeBlinkAction, sizeSelf, youDropItem, - pickUpItem, +-- pickUpItem, ) where import Control.Applicative @@ -31,7 +31,7 @@ import Dodge.Default import Dodge.FloatFunction import Dodge.FloorItem import Dodge.Inventory -import Dodge.Inventory.Add +--import Dodge.Inventory.Add import Dodge.Path import Dodge.SoundLogic import Dodge.WallCreatureCollisions diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 525cd164b..db5c55c2f 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -16,12 +16,10 @@ module Dodge.Inventory ( swapItemWith, ) where -import Control.Monad +import Dodge.Inventory.Swap import Data.Function -import qualified Data.IntSet as IS import Data.Maybe import Dodge.Base -import Dodge.Data.DoubleTree import Dodge.Data.SelectionList import Dodge.Data.World import Dodge.Euse @@ -29,17 +27,12 @@ import Dodge.Inventory.CheckSlots import Dodge.Inventory.Location import Dodge.Inventory.RBList import Dodge.ItEffect -import Dodge.Item.Grammar import Dodge.SelectionSections -import Dodge.SoundLogic import Geometry import qualified IntMapHelp as IM import LensHelp import ListHelp import NewInt -import Sound.Data - ---import Padding -- TODO check what happens to selection index when dropping non-selected items @@ -176,83 +169,6 @@ changeSwapOther manlens n f i w = fromMaybe w $ do & hud . hudElement . diSelection . _Just . _2 %~ doswap & worldEventFlags . at InventoryChange ?~ () --- can be specialised for when we know that item i is selected -swapInvItems :: - (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> - Int -> - World -> - World -swapInvItems f i w = fromMaybe w $ do - ss <- w ^? hud . hudElement . diSections . ix 0 . ssItems - k <- f i ss - let updateselection = case w ^? hud . hudElement . diSelection . _Just of - Just (0, j) | j == k -> hud . hudElement . diSelection . _Just . _2 .~ i - Just (0, j) | j == i -> hud . hudElement . diSelection . _Just . _2 .~ k - _ -> id - return $ - w - & swapAnyExtraSelection i k - & checkConnection InventorySound disconnectItemS i k - & cWorld . lWorld . creatures . ix 0 %~ updatecreature k - & updateselection - & worldEventFlags . at InventoryChange ?~ () - & cWorld . lWorld %~ crUpdateItemLocations 0 - & setInvPosFromSS - & cWorld . lWorld %~ crUpdateItemLocations 0 -- the double application is inefficient, but necessary without further changes - -- a rethink is maybe in order - & checkConnection InventoryConnectSound connectItemS i k - where - -- & checkconnect k InventoryConnectSound connectItemS - - -- cpos = fromMaybe 0 $ w ^? cWorld . lWorld . creatures . ix 0 . crPos - -- checkconnect k stype s w' - -- | p (i+1) || p (i-1) - -- || p (k+1) || p (k-1) = soundStart stype cpos s Nothing w' - -- | otherwise = w' - -- where - -- p j = maybe False not $ w' ^? cWorld . lWorld . creatures . ix 0 . crInv . ix j . itLocation . ilIsRoot - updatecreature k = - (crInv %~ IM.safeSwapKeys i k) - . (crManipulation . manObject . imSelectedItem .~ k) - . (crInvEquipped %~ IM.safeSwapKeys i k) - . swapSite i k - . swapSite k i - . (crInvHotkeys %~ IM.safeSwapKeys i k) - . swapSite' i k - . swapSite' k i - cr = you w - swapSite a b = case cr ^? crInvEquipped . ix a of - Just epos -> crEquipment . ix epos .~ b - Nothing -> id - swapSite' a b = case cr ^? crInvHotkeys . ix a of - 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 - cpos <- w ^? cWorld . lWorld . creatures . ix 0 . crPos - let locs = allInvLocs inv - iit <- locs ^? ix i . _2 - jit <- locs ^? ix j . _2 - guard $ isConnected iit || isConnected jit - return $ soundStart so cpos s Nothing w - -isConnected :: LocationLDT b a -> Bool -isConnected x = case x ^. locLdtContext of - TopLDT -> - not (null $ x ^. locLDT . ldtRight) - || not (null $ x ^. locLDT . ldtLeft) - _ -> True swapItemWith :: (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> diff --git a/src/Dodge/Inventory/Add.hs b/src/Dodge/Inventory/Add.hs index ba50799b4..efd259577 100644 --- a/src/Dodge/Inventory/Add.hs +++ b/src/Dodge/Inventory/Add.hs @@ -4,8 +4,11 @@ module Dodge.Inventory.Add ( --createAndSelectItem, createItemYou, pickUpItem, + pickUpItemAt, ) where +import Dodge.Inventory.Swap +import Control.Monad import NewInt import Dodge.SoundLogic import Dodge.Inventory.Location @@ -25,6 +28,16 @@ tryPutFloorItemIDInInv cid flitid w = do flit <- w ^? cWorld . lWorld . floorItems . unNIntMap . ix (_unNInt flitid) tryPutItemInInv cid flit w +-- not sure why we have the cid here, this will probably only work for cid == 0 +tryPutItemInInvAt :: Int -> Int -> FloorItem -> World -> Maybe World +tryPutItemInInvAt i cid flit w = do + (j,w') <- tryPutItemInInv cid flit w + guard (i <= j) + return $ foldr f w' [i+1..j] + where + f j = swapInvItems (\_ _ -> Just (j-1)) j + + -- | Pick up a specific item. tryPutItemInInv :: Int -> FloorItem -> World -> Maybe (Int, World) tryPutItemInInv cid flit w = case maybeInvSlot of @@ -93,3 +106,9 @@ pickUpItem :: Int -> FloorItem -> World -> World pickUpItem cid flit w = maybe w (soundStart (CrSound cid) (_flItPos flit) pickUpS Nothing . snd) $ tryPutItemInInv cid flit w + +-- | Pick up a specific item. +pickUpItemAt :: Int -> Int -> FloorItem -> World -> World +pickUpItemAt invid cid flit w = + maybe w (soundStart (CrSound cid) (_flItPos flit) pickUpS Nothing) $ + tryPutItemInInvAt invid cid flit w diff --git a/src/Dodge/Inventory/Swap.hs b/src/Dodge/Inventory/Swap.hs new file mode 100644 index 000000000..e722ac5b7 --- /dev/null +++ b/src/Dodge/Inventory/Swap.hs @@ -0,0 +1,97 @@ +module Dodge.Inventory.Swap ( + swapInvItems, + swapAnyExtraSelection +) where + +import Dodge.SoundLogic +import Dodge.Item.Grammar +import Dodge.Base.You +import Dodge.Inventory.Location +import Dodge.Data.DoubleTree +import Sound.Data +import qualified Data.IntSet as IS +import Data.Maybe +import Control.Lens +import Dodge.Data.SelectionList +import qualified IntMapHelp as IM +import Dodge.Data.World +import Control.Monad + +-- can be specialised for when we know that item i is selected +swapInvItems :: + (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> + Int -> + World -> + World +swapInvItems f i w = fromMaybe w $ do + ss <- w ^? hud . hudElement . diSections . ix 0 . ssItems + k <- f i ss + let updateselection = case w ^? hud . hudElement . diSelection . _Just of + Just (0, j) | j == k -> hud . hudElement . diSelection . _Just . _2 .~ i + Just (0, j) | j == i -> hud . hudElement . diSelection . _Just . _2 .~ k + _ -> id + return $ + w + & swapAnyExtraSelection i k + & checkConnection InventorySound disconnectItemS i k + & cWorld . lWorld . creatures . ix 0 %~ updatecreature k + & updateselection + & worldEventFlags . at InventoryChange ?~ () + & cWorld . lWorld %~ crUpdateItemLocations 0 + & setInvPosFromSS + & cWorld . lWorld %~ crUpdateItemLocations 0 -- the double application is inefficient, but necessary without further changes + -- a rethink is maybe in order + & checkConnection InventoryConnectSound connectItemS i k + where + -- & checkconnect k InventoryConnectSound connectItemS + + -- cpos = fromMaybe 0 $ w ^? cWorld . lWorld . creatures . ix 0 . crPos + -- checkconnect k stype s w' + -- | p (i+1) || p (i-1) + -- || p (k+1) || p (k-1) = soundStart stype cpos s Nothing w' + -- | otherwise = w' + -- where + -- p j = maybe False not $ w' ^? cWorld . lWorld . creatures . ix 0 . crInv . ix j . itLocation . ilIsRoot + updatecreature k = + (crInv %~ IM.safeSwapKeys i k) + . (crManipulation . manObject . imSelectedItem .~ k) + . (crInvEquipped %~ IM.safeSwapKeys i k) + . swapSite i k + . swapSite k i + . (crInvHotkeys %~ IM.safeSwapKeys i k) + . swapSite' i k + . swapSite' k i + cr = you w + swapSite a b = case cr ^? crInvEquipped . ix a of + Just epos -> crEquipment . ix epos .~ b + Nothing -> id + swapSite' a b = case cr ^? crInvHotkeys . ix a of + 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 + cpos <- w ^? cWorld . lWorld . creatures . ix 0 . crPos + let locs = allInvLocs inv + iit <- locs ^? ix i . _2 + jit <- locs ^? ix j . _2 + guard $ isConnected iit || isConnected jit + return $ soundStart so cpos s Nothing w + +isConnected :: LocationLDT b a -> Bool +isConnected x = case x ^. locLdtContext of + TopLDT -> + not (null $ x ^. locLDT . ldtRight) + || not (null $ x ^. locLDT . ldtLeft) + _ -> True + diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index e785f0808..b3437d7c9 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -123,7 +123,12 @@ tryPickupSelected k mpos w = do let itmstopickup = mapMaybe g $ IS.toList xs let slotsneeded = alaf Sum foldMap (_itInvSize . _flIt) $ itmstopickup guard $ nfreeslots >= slotsneeded - return $ foldl' (flip $ pickUpItem 0) w itmstopickup + return $ case mpos of + Nothing -> foldl' (flip $ pickUpItem 0) w itmstopickup + & hud . hudElement . diSelectionExtra .~ mempty + Just (_,j) -> foldr (pickUpItemAt j 0) w itmstopickup + & hud . hudElement . diSelection ?~ (0,j) + & hud . hudElement . diSelectionExtra .~ IS.fromDistinctAscList [j..j+IS.size xs-1] where g i = do NInt j <- w ^? hud . closeItems . ix i @@ -134,10 +139,6 @@ updateMouseReleaseInGame w = case w ^. input . mouseContext of OverInvDrag k mpos _ _ -> input . mouseContext .~ MouseInGame $ fromMaybe w $ tryDropSelected mpos w <|> tryPickupSelected k mpos w --- OverInvDrag i mpos -> fromMaybe (dropSelected w & input . mouseContext .~ MouseInGame) $ do --- j <- mpos --- guard $ fst j == i --- return $ w & input . mouseContext .~ OverInvSelect j OverInvDragSelect _ Nothing -> w & input . mouseContext .~ MouseInGame & hud . hudElement . diSelectionExtra .~ mempty diff --git a/tags b/tags index 44e0e63ab..07cd29b17 100644 --- a/tags +++ b/tags @@ -1831,6 +1831,7 @@ Superfluous src/Shape/Data.hs 38;" C Surface src/Shape/Data.hs 41;" t Survive src/Dodge/Data/Scenario.hs 5;" C Suspicious src/Dodge/Data/Creature/Perception.hs 66;" C +Swap src/Dodge/Inventory/Swap.hs 1;" m SwapEquipment src/Dodge/Data/RightButtonOptions.hs 27;" C Swarm src/Dodge/Data/Creature/State.hs 47;" C SwarmAI src/Dodge/Data/Creature/Misc.hs 56;" C @@ -3347,7 +3348,7 @@ addToTrunk src/TreeHelp.hs 156;" f addWarningTerminal src/Dodge/Room/Warning.hs 37;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 77;" f -advanceScrollAmount src/Dodge/Update.hs 396;" f +advanceScrollAmount src/Dodge/Update.hs 403;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f aimDelaySweep src/Dodge/Render/Picture.hs 233;" f @@ -3379,7 +3380,7 @@ angleVV src/Geometry/Vector.hs 57;" f angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f -anythingHitCirc src/Dodge/Base/Collide.hs 242;" f +anythingHitCirc src/Dodge/Base/Collide.hs 243;" f applyCME src/Dodge/HeldUse.hs 65;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f @@ -3438,7 +3439,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 199;" 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 @@ -3559,8 +3560,8 @@ cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 7;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 228;" f -canSeeIndirect src/Dodge/Base/Collide.hs 235;" f +canSee src/Dodge/Base/Collide.hs 229;" f +canSeeIndirect src/Dodge/Base/Collide.hs 236;" f cardEightVec src/Dodge/Base/CardinalPoint.hs 16;" f cardList src/Dodge/Base/CardinalPoint.hs 6;" f cardVec src/Dodge/Base/CardinalPoint.hs 9;" f @@ -3575,9 +3576,9 @@ centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f chainLinkOrientation src/Dodge/Creature/State.hs 183;" f chainPairs src/Geometry.hs 363;" f -changeSwapOther src/Dodge/Inventory.hs 156;" f -changeSwapSel src/Dodge/Inventory.hs 148;" f -changeSwapWith src/Dodge/Inventory.hs 268;" f +changeSwapOther src/Dodge/Inventory.hs 157;" f +changeSwapSel src/Dodge/Inventory.hs 149;" f +changeSwapWith src/Dodge/Inventory.hs 192;" f charToTuple src/Picture/Base.hs 317;" f charToTupleGrad src/Picture/Text.hs 18;" f chargeIfEquipped src/Dodge/ItEffect.hs 54;" f @@ -3589,15 +3590,15 @@ 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 101;" f -checkConnection src/Dodge/Inventory.hs 240;" f +checkConnection src/Dodge/Inventory/Swap.hs 81;" f checkDeath src/Dodge/Creature/State.hs 75;" f -checkEndGame src/Dodge/Update.hs 683;" f +checkEndGame src/Dodge/Update.hs 690;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 16;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 94;" f -checkTermDist src/Dodge/Update.hs 297;" f +checkTermDist src/Dodge/Update.hs 301;" f checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f @@ -3618,7 +3619,7 @@ circle src/Picture/Base.hs 180;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f circleSolidCol src/Picture/Base.hs 168;" f -clClSpringVel src/Dodge/Update.hs 736;" f +clClSpringVel src/Dodge/Update.hs 743;" f clZoneSize src/Dodge/Zone/Size.hs 3;" f clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f clampPath src/Dodge/Room/Procedural.hs 166;" f @@ -3646,7 +3647,7 @@ closestCreatureID src/Dodge/Debug.hs 92;" f closestPointOnLine src/Geometry/Intersect.hs 251;" f closestPointOnLineParam src/Geometry/Intersect.hs 267;" f closestPointOnSeg src/Geometry/Intersect.hs 282;" f -cloudEffect src/Dodge/Update.hs 706;" f +cloudEffect src/Dodge/Update.hs 713;" f cloudPoisonDamage src/Dodge/Update/Cloud.hs 9;" f clsNearCirc src/Dodge/Zoning/Cloud.hs 18;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f @@ -3660,7 +3661,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 229;" f +collectInvItems src/Dodge/Update/Input/InGame.hs 236;" 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 @@ -3694,7 +3695,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 221;" f +concurrentIS src/Dodge/Update/Input/InGame.hs 228;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 532;" f connectionBlurb src/Dodge/Terminal.hs 102;" f connectionBlurbLines src/Dodge/Terminal.hs 47;" f @@ -3718,7 +3719,7 @@ crAdd src/Dodge/Room/RezBox.hs 104;" f crAwayFromPost src/Dodge/Creature/Test.hs 77;" f crBlips src/Dodge/RadarSweep.hs 69;" f crCanSeeCr src/Dodge/Creature/Test.hs 48;" f -crCrSpring src/Dodge/Update.hs 754;" f +crCrSpring src/Dodge/Update.hs 761;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 28;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 37;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 51;" f @@ -3739,7 +3740,7 @@ 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 -crSpring src/Dodge/Update.hs 749;" f +crSpring src/Dodge/Update.hs 756;" f crStratConMatches src/Dodge/Creature/Test.hs 72;" f crUpdate src/Dodge/Creature/State.hs 62;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f @@ -3753,7 +3754,7 @@ createFlIt src/Dodge/Placement/PlaceSpot.hs 180;" f createForceField src/Dodge/ForceField.hs 7;" f createGas src/Dodge/Gas.hs 8;" f createHeadLamp src/Dodge/Euse.hs 159;" f -createItemYou src/Dodge/Inventory/Add.hs 80;" f +createItemYou src/Dodge/Inventory/Add.hs 92;" f createLightMap src/Render.hs 26;" f createNewArc src/Dodge/Tesla/Arc.hs 76;" f createPathGrid src/Dodge/Room/Path.hs 21;" f @@ -3953,7 +3954,7 @@ denormalEdges src/Polyhedra.hs 136;" f destroyAt src/Dodge/Bullet.hs 201;" f destroyBlock src/Dodge/Block.hs 56;" f destroyDoor src/Dodge/Block.hs 85;" f -destroyInvItem src/Dodge/Inventory.hs 48;" f +destroyInvItem src/Dodge/Inventory.hs 49;" f destroyLS src/Dodge/LightSource.hs 91;" f destroyLSFlashAt src/Dodge/LightSource.hs 101;" f destroyMachine src/Dodge/Machine/Destroy.hs 12;" f @@ -3983,10 +3984,10 @@ disconnectTerminal src/Dodge/Terminal.hs 217;" f displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 39;" f -displayFreeSlots src/Dodge/DisplayInventory.hs 212;" f +displayFreeSlots src/Dodge/DisplayInventory.hs 211;" f displayIndents src/Dodge/DisplayInventory.hs 119;" f displaySectionsSizes src/Dodge/DisplayInventory.hs 114;" f -displayTerminalLineString src/Dodge/Update.hs 425;" f +displayTerminalLineString src/Dodge/Update.hs 432;" f dist src/Geometry/Vector.hs 179;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f @@ -4026,7 +4027,7 @@ doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 26;" f doIntImp src/Dodge/CreatureEffect.hs 24;" f doInvEffect src/Dodge/ItEffect.hs 10;" f doItCrWdWd src/Dodge/WorldEffect.hs 49;" f -doItemTimeScroll src/Dodge/Update.hs 194;" f +doItemTimeScroll src/Dodge/Update.hs 198;" f doLoop src/Loop.hs 60;" f doMCrAc src/Dodge/CreatureEffect.hs 57;" f doMP2Ac src/Dodge/CreatureEffect.hs 73;" f @@ -4043,13 +4044,13 @@ 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 360;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 366;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Camera.hs 141;" f -doSectionSize src/Dodge/DisplayInventory.hs 234;" f +doSectionSize src/Dodge/DisplayInventory.hs 233;" f doSideEffects appDodge/Main.hs 118;" f doStep src/Dodge/ArcStep.hs 9;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 164;" f @@ -4060,7 +4061,7 @@ doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 74;" f -doTimeScroll src/Dodge/Update.hs 199;" f +doTimeScroll src/Dodge/Update.hs 203;" f doTmTm src/Dodge/TmTm.hs 6;" f doTmWdWd src/Dodge/WorldEffect.hs 107;" f doWallRotate src/Dodge/Update/Camera.hs 188;" f @@ -4070,7 +4071,7 @@ doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f doWdWd src/Dodge/WorldEffect.hs 26;" f doWeaponRepetitions src/Dodge/HeldUse.hs 56;" f -doWorldEvents src/Dodge/Update.hs 407;" f +doWorldEvents src/Dodge/Update.hs 414;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f doorBetween src/Dodge/Placement/Instance/Door.hs 39;" f @@ -4234,7 +4235,7 @@ encircle src/Dodge/Creature/Boid.hs 115;" f encircleCloseP src/Dodge/Creature/Boid.hs 35;" f encircleDistP src/Dodge/Creature/Boid.hs 21;" f encircleP src/Dodge/Creature/Boid.hs 27;" f -enterCombineInv src/Dodge/DisplayInventory.hs 344;" f +enterCombineInv src/Dodge/DisplayInventory.hs 343;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f equipAllocString src/Dodge/Render/HUD.hs 290;" f @@ -4362,7 +4363,7 @@ fromV3 src/Geometry/Data.hs 43;" f frontArmour src/Dodge/Item/Equipment.hs 41;" f fstV2 src/Geometry/Data.hs 50;" f fuelPack src/Dodge/Item/Equipment.hs 64;" f -functionalUpdate src/Dodge/Update.hs 245;" f +functionalUpdate src/Dodge/Update.hs 249;" f fuseFunc src/Dodge/Path.hs 150;" f fusePairs src/Dodge/Path.hs 153;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f @@ -4482,7 +4483,7 @@ hardQuit src/Dodge/Concurrent.hs 33;" f hasButtonLOS src/Dodge/Base/Collide.hs 207;" f hasFrontArmour src/Dodge/Creature/Test.hs 110;" f hasLOS src/Dodge/Base/Collide.hs 200;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 214;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 215;" f hat src/Dodge/Item/Equipment.hs 94;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 100;" f @@ -4595,7 +4596,7 @@ interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f invAdj src/Dodge/Item/Grammar.hs 188;" f invCursorParams src/Dodge/ListDisplayParams.hs 38;" f -invDimColor src/Dodge/DisplayInventory.hs 206;" f +invDimColor src/Dodge/DisplayInventory.hs 205;" f invDisplayParams src/Dodge/ListDisplayParams.hs 32;" f invHead src/Dodge/Render/HUD.hs 388;" f invLDT src/Dodge/Item/Grammar.hs 171;" f @@ -4623,7 +4624,7 @@ 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 250;" f +isConnected src/Dodge/Inventory/Swap.hs 91;" f isElectrical src/Dodge/Data/Damage.hs 42;" f isFrictionless src/Dodge/Creature/State.hs 341;" f isGas src/Dodge/Euse.hs 64;" f @@ -4635,7 +4636,7 @@ isLeftOfA src/Geometry.hs 181;" f isNothing' src/MaybeHelp.hs 33;" f isOnSeg src/Geometry.hs 240;" f isOutLnk src/Dodge/PlacementSpot.hs 164;" f -isOverTerminalScreen src/Dodge/Update.hs 374;" f +isOverTerminalScreen src/Dodge/Update.hs 381;" f isPutID src/Dodge/Placement/Instance/Wall.hs 129;" f isRHS src/Geometry/LHS.hs 24;" f isUnusedLnk src/Dodge/PlacementSpot.hs 61;" f @@ -4643,7 +4644,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 186;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 172;" f isValidCommand src/Dodge/Debug/Terminal.hs 128;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/Base/Collide.hs 221;" f +isWalkable src/Dodge/Base/Collide.hs 222;" f isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 82;" f @@ -4766,7 +4767,7 @@ listConfig src/Dodge/Menu.hs 199;" f listControls src/Dodge/Menu.hs 212;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 140;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 188;" f -listSelectionColorPicture src/Dodge/DisplayInventory.hs 336;" f +listSelectionColorPicture src/Dodge/DisplayInventory.hs 335;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f llleft src/Dodge/Item/Grammar.hs 107;" f llright src/Dodge/Item/Grammar.hs 114;" f @@ -4892,7 +4893,7 @@ makeTlsTimeRadColPos src/Dodge/LightSource.hs 88;" f makeTypeCraft src/Dodge/Item/Craftable.hs 13;" f makeTypeCraftNum src/Dodge/Item/Craftable.hs 7;" f mapOverlay src/Dodge/Render/HUD/Carte.hs 24;" f -markWallSeen src/Dodge/Update.hs 668;" f +markWallSeen src/Dodge/Update.hs 675;" f maxDamageType src/Dodge/Damage.hs 37;" f maxShowX src/Dodge/Combine/Graph.hs 49;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f @@ -4903,7 +4904,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 536;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 542;" f maybeOpenTerminal src/Dodge/Update.hs 123;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 111;" f @@ -5019,7 +5020,7 @@ mvBullet src/Dodge/Bullet.hs 33;" f mvButton src/Dodge/Placement/PlaceSpot.hs 176;" f mvCr src/Dodge/Placement/PlaceSpot.hs 186;" f mvFS src/Dodge/Placement/PlaceSpot.hs 189;" f -mvGust src/Dodge/Update.hs 697;" f +mvGust src/Dodge/Update.hs 704;" f mvLS src/Dodge/Placement/PlaceSpot.hs 217;" f mvP src/Dodge/Wall/Move.hs 54;" f mvPP src/Dodge/Placement/PlaceSpot.hs 183;" f @@ -5128,11 +5129,11 @@ 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 456;" f +pauseGame src/Dodge/Update/Input/InGame.hs 462;" f pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f -pauseTime src/Dodge/Update.hs 185;" f +pauseTime src/Dodge/Update.hs 189;" f pciToCI src/Dodge/Item/Grammar.hs 96;" f peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f @@ -5152,7 +5153,8 @@ pesNearSeg src/Dodge/Zoning/Pathing.hs 37;" f picAtCrPos1 src/Dodge/Render/ShapePicture.hs 62;" f picFormat src/Polyhedra.hs 23;" f picMap src/Picture/Base.hs 67;" f -pickUpItem src/Dodge/Inventory/Add.hs 92;" f +pickUpItem src/Dodge/Inventory/Add.hs 104;" f +pickUpItemAt src/Dodge/Inventory/Add.hs 110;" f pickUpS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 458;" f pincerP src/Dodge/Creature/Boid.hs 60;" f pincerP' src/Dodge/Creature/Boid.hs 93;" f @@ -5185,7 +5187,7 @@ placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 89;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 70;" f placeString src/Dodge/Render/MenuScreen.hs 63;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 162;" f -plainRegex src/Dodge/DisplayInventory.hs 209;" f +plainRegex src/Dodge/DisplayInventory.hs 208;" f plateCraft src/Dodge/Item/Craftable.hs 45;" f playIfFree src/Sound.hs 136;" f playPositionalSoundQueue src/Sound.hs 144;" f @@ -5287,7 +5289,7 @@ powlistUpToN src/Multiset.hs 23;" f powlistUpToN' src/Multiset.hs 12;" f powlistUpToN'' src/Multiset.hs 31;" f ppDraw src/Dodge/Render/ShapePicture.hs 116;" f -ppEvents src/Dodge/Update.hs 660;" f +ppEvents src/Dodge/Update.hs 667;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f preCritStart src/Dodge/Room/Start.hs 82;" f preloadRender src/Preload/Render.hs 30;" f @@ -5415,7 +5417,7 @@ refract src/Dodge/Item/Weapon/LaserPath.hs 40;" f refreshOptionsSelectionList src/Dodge/Menu/Option.hs 39;" f regexCombs src/Dodge/DisplayInventory.hs 69;" f regexIn src/Regex.hs 4;" f -regexList src/Dodge/DisplayInventory.hs 378;" f +regexList src/Dodge/DisplayInventory.hs 376;" f regexList src/Regex.hs 7;" f reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 442;" f reloadLevelStart src/Dodge/Save.hs 71;" f @@ -5472,7 +5474,7 @@ rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f rmInLinks src/Dodge/RoomLink.hs 138;" f -rmInvItem src/Dodge/Inventory.hs 61;" f +rmInvItem src/Dodge/Inventory.hs 62;" f rmLinksOfType src/Dodge/RoomLink.hs 135;" f rmOutLinks src/Dodge/RoomLink.hs 138;" f roomC src/Dodge/Room/Room.hs 38;" f @@ -5565,15 +5567,15 @@ 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 207;" f +scrollAugNextInSection src/Dodge/Inventory.hs 220;" f scrollCommandStrings src/Dodge/Update/Scroll.hs 135;" f scrollCommands src/Dodge/Update/Scroll.hs 132;" f scrollDebugInfoInt src/Dodge/Debug.hs 47;" f scrollRBOption src/Dodge/Update/Scroll.hs 109;" f scrollSelectionSections src/Dodge/SelectionSections.hs 25;" f -scrollTimeBack src/Dodge/Update.hs 209;" f -scrollTimeForward src/Dodge/Update.hs 229;" f +scrollTimeBack src/Dodge/Update.hs 213;" f +scrollTimeForward src/Dodge/Update.hs 233;" f scrollWatch src/Dodge/Item/Weapon/Utility.hs 30;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 420;" f seagullBarkTransformedS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 486;" f @@ -5586,12 +5588,12 @@ seagullWhistle1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 372;" f seagullWhistleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 530;" f searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 203;" f secondColumnParams src/Dodge/ListDisplayParams.hs 45;" f -sectionsDesiredLines src/Dodge/DisplayInventory.hs 218;" f -sectionsSizes src/Dodge/DisplayInventory.hs 223;" f +sectionsDesiredLines src/Dodge/DisplayInventory.hs 217;" f +sectionsSizes src/Dodge/DisplayInventory.hs 222;" f seedStartMenu src/Dodge/Menu.hs 79;" f seedStartOptions src/Dodge/Menu.hs 82;" f segOnCirc src/Geometry.hs 116;" f -selCloseObj src/Dodge/Update/Input/InGame.hs 479;" f +selCloseObj src/Dodge/Update/Input/InGame.hs 485;" f selNumPos src/Dodge/Render/HUD.hs 437;" f selNumPosCardinal src/Dodge/Render/HUD.hs 460;" f selSecDrawCursor src/Dodge/Render/List.hs 130;" f @@ -5631,7 +5633,7 @@ setLinkTypePD src/Dodge/RoomLink.hs 67;" f setMinInvSize src/Dodge/Creature/Action.hs 149;" f setMusicVolume src/Sound.hs 161;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 51;" f -setOldPos src/Dodge/Update.hs 449;" f +setOldPos src/Dodge/Update.hs 456;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f @@ -5686,9 +5688,9 @@ 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 238;" f -shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 269;" f -shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 263;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 245;" f +shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 275;" f +shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 269;" 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 @@ -5738,7 +5740,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 129;" f -simpleCrSprings src/Dodge/Update.hs 745;" f +simpleCrSprings src/Dodge/Update.hs 752;" f simpleDamFL src/Dodge/Flame.hs 41;" f simpleTermMessage src/Dodge/Terminal.hs 253;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 504;" f @@ -5787,7 +5789,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 459;" f +spaceAction src/Dodge/Update/Input/InGame.hs 465;" 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 @@ -5843,7 +5845,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 200;" 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 @@ -5873,11 +5875,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 231;" f +swapAnyExtraSelection src/Dodge/Inventory/Swap.hs 72;" f swapInOutLinks src/Dodge/RoomLink.hs 80;" f swapIndices src/ListHelp.hs 50;" f -swapInvItems src/Dodge/Inventory.hs 180;" f -swapItemWith src/Dodge/Inventory.hs 257;" f +swapInvItems src/Dodge/Inventory/Swap.hs 21;" f +swapItemWith src/Dodge/Inventory.hs 181;" 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 @@ -5958,7 +5960,7 @@ threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 205;" f tilesToLine src/Shader/AuxAddition.hs 66;" f -timeFlowUpdate src/Dodge/Update.hs 172;" f +timeFlowUpdate src/Dodge/Update.hs 176;" f timeModule src/Dodge/Item/Craftable.hs 33;" f timerTLS src/Dodge/LightSource/Update.hs 22;" f tinMag src/Dodge/Item/Ammo.hs 27;" f @@ -5967,7 +5969,7 @@ titleOptionsMenu src/Dodge/Menu.hs 99;" f titleOptionsNoWrite src/Dodge/Menu.hs 102;" f tlsTimeRadColPos src/Dodge/LightSource.hs 69;" f tlsTimeRadFunPos src/Dodge/LightSource.hs 26;" f -tmUpdate src/Dodge/Update.hs 429;" f +tmUpdate src/Dodge/Update.hs 436;" f toBothLnk src/Dodge/RoomLink.hs 121;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f @@ -5984,8 +5986,8 @@ toggleCombineInv src/Dodge/DisplayInventory.hs 35;" 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 499;" f -toggleTweakInv src/Dodge/Update/Input/InGame.hs 513;" f +toggleMap src/Dodge/Update/Input/InGame.hs 505;" f +toggleTweakInv src/Dodge/Update/Input/InGame.hs 519;" f togglesToEffects src/Dodge/Terminal.hs 248;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -6056,16 +6058,17 @@ 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 522;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 109;" f +tryCombine src/Dodge/Update/Input/InGame.hs 528;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 108;" 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 117;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 116;" f tryPlay src/Sound.hs 83;" f -tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 23;" f -tryPutItemInInv src/Dodge/Inventory/Add.hs 29;" f +tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 25;" f +tryPutItemInInv src/Dodge/Inventory/Add.hs 41;" f +tryPutItemInInvAt src/Dodge/Inventory/Add.hs 31;" f trySeedFromClipboard src/Dodge/Menu.hs 88;" f trySiphonFuel src/Dodge/Euse.hs 46;" f trySpinByCID src/Dodge/Projectile/Update.hs 95;" f @@ -6104,114 +6107,114 @@ 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 394;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 400;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBounds src/Dodge/Update/Camera.hs 245;" f updateBulVel src/Dodge/Bullet.hs 50;" f updateBullet src/Dodge/Bullet.hs 28;" f -updateBullets src/Dodge/Update.hs 526;" f +updateBullets src/Dodge/Update.hs 533;" f updateCamera src/Dodge/Update/Camera.hs 31;" f -updateCloseObjects src/Dodge/Inventory.hs 119;" f -updateCloud src/Dodge/Update.hs 711;" f -updateClouds src/Dodge/Update.hs 555;" f +updateCloseObjects src/Dodge/Inventory.hs 120;" f +updateCloud src/Dodge/Update.hs 718;" f +updateClouds src/Dodge/Update.hs 562;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 46;" f updateCreature src/Dodge/Creature/Update.hs 10;" f -updateCreatureGroups src/Dodge/Update.hs 495;" f -updateCreatureSoundPositions src/Dodge/Update.hs 471;" f +updateCreatureGroups src/Dodge/Update.hs 502;" f +updateCreatureSoundPositions src/Dodge/Update.hs 478;" f updateDebugMessageOffset src/Dodge/Update.hs 92;" f -updateDelayedEvents src/Dodge/Update.hs 774;" f +updateDelayedEvents src/Dodge/Update.hs 781;" f updateDisplaySections src/Dodge/DisplayInventory.hs 126;" f updateDistortion src/Dodge/Distortion.hs 5;" f -updateDistortions src/Dodge/Update.hs 516;" f +updateDistortions src/Dodge/Update.hs 523;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f -updateEnergyBalls src/Dodge/Update.hs 543;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 435;" f +updateEnergyBalls src/Dodge/Update.hs 550;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 441;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFlame src/Dodge/Flame.hs 71;" f -updateFlames src/Dodge/Update.hs 540;" f +updateFlames src/Dodge/Update.hs 547;" f updateFlare src/Dodge/Flare.hs 7;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 286;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 279;" f -updateGusts src/Dodge/Update.hs 694;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 292;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 285;" f +updateGusts src/Dodge/Update.hs 701;" f updateHeldRootItem src/Dodge/Creature/State.hs 167;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f -updateIMl src/Dodge/Update.hs 485;" f -updateIMl' src/Dodge/Update.hs 490;" f +updateIMl src/Dodge/Update.hs 492;" f +updateIMl' src/Dodge/Update.hs 497;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 339;" f -updateInstantBullets src/Dodge/Update.hs 632;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 345;" f +updateInstantBullets src/Dodge/Update.hs 639;" f updateInv src/Dodge/Creature/State.hs 152;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateItemTargeting src/Dodge/Creature/State.hs 268;" f updateItemWithOrientation src/Dodge/Creature/State.hs 194;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 333;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 321;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 339;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 327;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f -updateLasers src/Dodge/Update.hs 414;" f -updateLightSources src/Dodge/Update.hs 519;" f +updateLasers src/Dodge/Update.hs 421;" f +updateLightSources src/Dodge/Update.hs 526;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 354;" f -updateMIM src/Dodge/Update.hs 645;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 360;" f +updateMIM src/Dodge/Update.hs 652;" f updateMachine src/Dodge/Machine/Update.hs 19;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 153;" f -updateMouseContext src/Dodge/Update.hs 307;" f -updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 89;" f -updateMouseInGame src/Dodge/Update/Input/InGame.hs 81;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 128;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 160;" f +updateMouseContext src/Dodge/Update.hs 311;" f +updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 90;" f +updateMouseInGame src/Dodge/Update/Input/InGame.hs 82;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 135;" f updateMovement src/Dodge/Creature/State.hs 331;" f -updateObjCatMaybes src/Dodge/Update.hs 507;" f -updateObjMapMaybe src/Dodge/Update.hs 500;" f -updatePastWorlds src/Dodge/Update.hs 402;" f +updateObjCatMaybes src/Dodge/Update.hs 514;" f +updateObjMapMaybe src/Dodge/Update.hs 507;" f +updatePastWorlds src/Dodge/Update.hs 409;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f -updatePosEvents src/Dodge/Update.hs 552;" f +updatePosEvents src/Dodge/Update.hs 559;" f updatePreload src/Preload/Update.hs 20;" f -updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 296;" f -updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 299;" f +updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 302;" f +updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 305;" 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 updateRadarBlip src/Dodge/RadarBlip.hs 8;" f -updateRadarBlips src/Dodge/Update.hs 522;" f +updateRadarBlips src/Dodge/Update.hs 529;" f updateRadarSweep src/Dodge/RadarSweep.hs 25;" f -updateRadarSweeps src/Dodge/Update.hs 546;" f +updateRadarSweeps src/Dodge/Update.hs 553;" f updateRandNode src/TreeHelp.hs 108;" f updateRenderSplit appDodge/Main.hs 106;" f updateRootItemID src/Dodge/Inventory/Location.hs 35;" f updateScopeZoom src/Dodge/Update/Camera.hs 127;" f updateScopeZoom' src/Dodge/Update/Camera.hs 132;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f -updateSection src/Dodge/DisplayInventory.hs 287;" f -updateSectionsPositioning src/Dodge/DisplayInventory.hs 260;" f -updateSeenWalls src/Dodge/Update.hs 663;" f +updateSection src/Dodge/DisplayInventory.hs 286;" f +updateSectionsPositioning src/Dodge/DisplayInventory.hs 259;" f +updateSeenWalls src/Dodge/Update.hs 670;" f updateShockwave src/Dodge/Shockwave/Update.hs 12;" f -updateShockwaves src/Dodge/Update.hs 537;" f +updateShockwaves src/Dodge/Update.hs 544;" f updateSingleNodes src/TreeHelp.hs 97;" f updateSound src/Sound.hs 71;" f updateSounds src/Sound.hs 66;" f updateSpark src/Dodge/Spark.hs 19;" f -updateSparks src/Dodge/Update.hs 549;" f +updateSparks src/Dodge/Update.hs 556;" f updateTempLightSource src/Dodge/LightSource/Update.hs 7;" f updateTeslaArc src/Dodge/Tesla/Arc.hs 29;" f -updateTeslaArcs src/Dodge/Update.hs 531;" f +updateTeslaArcs src/Dodge/Update.hs 538;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 534;" f +updateTractorBeams src/Dodge/Update.hs 541;" f updateTurret src/Dodge/Machine/Update.hs 47;" f updateUniverse src/Dodge/Update.hs 71;" f updateUniverseFirst src/Dodge/Update.hs 83;" f updateUniverseLast src/Dodge/Update.hs 133;" f updateUniverseMid src/Dodge/Update.hs 155;" f -updateUseInputInGame src/Dodge/Update/Input/InGame.hs 38;" f +updateUseInputInGame src/Dodge/Update/Input/InGame.hs 39;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 21;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWheelEvent src/Dodge/Update/Scroll.hs 19;" f -updateWheelEvents src/Dodge/Update.hs 389;" f +updateWheelEvents src/Dodge/Update.hs 396;" f updateWorldEventFlag src/Dodge/Update.hs 117;" f updateWorldEventFlags src/Dodge/Update.hs 105;" f upperBody src/Dodge/Creature/Picture.hs 133;" f @@ -6383,9 +6386,9 @@ zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 118;" f zipWithDefaults src/Dodge/Item/Display.hs 21;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f -zoneClouds src/Dodge/Update.hs 422;" f +zoneClouds src/Dodge/Update.hs 429;" f zoneCreature src/Dodge/Zoning/Creature.hs 52;" f -zoneCreatures src/Dodge/Update.hs 466;" f +zoneCreatures src/Dodge/Update.hs 473;" f zoneExtract src/Dodge/Zoning/Base.hs 50;" f zoneMonoid src/Dodge/Zoning/Base.hs 80;" f zoneOfCirc src/Dodge/Zoning/Base.hs 22;" f