From f6e32ff6efe221064921f4ca2c62582cec78ff8a Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 20 Oct 2024 11:32:37 +0100 Subject: [PATCH] Allow dragging of selected items in inventory --- ghcidOutput | 21 ++- src/Dodge/Data/HUD.hs | 17 ++- src/Dodge/Inventory.hs | 17 ++- src/Dodge/SelectionSections.hs | 29 ++++ src/Dodge/TestString.hs | 9 +- src/Dodge/Update.hs | 70 +++++++-- tags | 254 +++++++++++++++++---------------- 7 files changed, 259 insertions(+), 158 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index d980aa1d2..6c267eaa6 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1,20 @@ -All good (597 modules, at 12:38:41) +/home/justin/Haskell/loop/src/Dodge/Update.hs:319:30-33: warning: [-Wunused-matches] + Defined but not used: ‘ssel’ + | +319 | Just (MouseInvChosen ssel esel) -> w + | ^^^^ +/home/justin/Haskell/loop/src/Dodge/Update.hs:319:35-38: warning: [-Wunused-matches] + Defined but not used: ‘esel’ + | +319 | Just (MouseInvChosen ssel esel) -> w + | ^^^^ +/home/justin/Haskell/loop/src/Dodge/Update.hs:341:38: warning: [-Wunused-matches] + Defined but not used: ‘k’ + | +341 | shiftInvItemsUp (_,i) (_,j) (Just (_,k)) w = w + | ^ +/home/justin/Haskell/loop/src/Dodge/Update.hs:351:40: warning: [-Wunused-matches] + Defined but not used: ‘k’ + | +351 | shiftInvItemsDown (_,i) (_,j) (Just (_,k)) w = w + | ^ diff --git a/src/Dodge/Data/HUD.hs b/src/Dodge/Data/HUD.hs index 0d68b9ce3..1946a4dff 100644 --- a/src/Dodge/Data/HUD.hs +++ b/src/Dodge/Data/HUD.hs @@ -19,19 +19,22 @@ data HUDElement } | DisplayCarte -data MouseInventorySelection = NoMouseSel - | MouseInvSelect - {_misSelStart :: (Int,Int), _misMaybeEnd :: Maybe (Int,Int)} - | MouseInvChosen - {_misChosenStart :: (Int,Int), _misChosenEnd :: (Int,Int)} +data MouseInventorySelection + = NoMouseSel + | MouseInvSelect + {_misSelStart :: (Int, Int), _misMaybeEnd :: Maybe (Int, Int)} + | MouseInvChosen + { _misChosenStart :: (Int, Int) + , _misChosenEnd :: (Int, Int) + } data SubInventory = NoSubInventory { _nsSelected :: MouseInventorySelection - , _nsMouseOver :: Maybe (Int,Int) + , _nsMouseOver :: Maybe (Int, Int) } | ExamineInventory - | CombineInventory { _ciSections :: SelectionSections CombinableItem } + | CombineInventory {_ciSections :: SelectionSections CombinableItem} | LockedInventory | DisplayTerminal {_termID :: Int} diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index c32c9202d..323ee05b9 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -10,7 +10,8 @@ module Dodge.Inventory ( crInvSize, selectedCloseObject, setInvPosFromSS, - module Dodge.Inventory.RBList + module Dodge.Inventory.RBList, + swapInvItems, ) where import NewInt @@ -162,18 +163,22 @@ changeSwapClose f i w = fromMaybe w $ do & hud . hudElement . diSections . sssExtra . sssSelPos . _Just . _2 .~ k & worldEventFlags . at InventoryChange ?~ () -changeSwapInv :: +-- can be specialised for when we know that item i is selected +swapInvItems :: (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> Int -> World -> World -changeSwapInv f i w = fromMaybe w $ do +swapInvItems f i w = fromMaybe w $ do ss <- w ^? hud . hudElement . diSections . sssSections . ix 0 . ssItems k <- f i ss + let updateselection = case w ^? hud . hudElement . diSections . sssExtra . sssSelPos . _Just of + Just (0,j) | j == k -> hud . hudElement . diSections . sssExtra . sssSelPos . _Just . _2 .~ i + Just (0,j) | j == i -> hud . hudElement . diSections . sssExtra . sssSelPos . _Just . _2 .~ k + _ -> id return $ w & cWorld . lWorld . creatures . ix 0 %~ updatecreature k --- & cWorld . lWorld . creatures . ix 0 %~ updateRootItemID - & hud . hudElement . diSections . sssExtra . sssSelPos . _Just . _2 .~ k + & updateselection & worldEventFlags . at InventoryChange ?~ () & cWorld . lWorld %~ crUpdateItemLocations 0 & setInvPosFromSS @@ -199,7 +204,7 @@ changeSwapInv f i w = fromMaybe w $ do changeSwapWith :: (Int -> IM.IntMap (SelectionItem ()) -> Maybe Int) -> World -> World changeSwapWith f w = case w ^? hud . hudElement . diSections . sssExtra . sssSelPos . _Just of - Just (0, i) -> w & changeSwapInv f i + Just (0, i) -> w & swapInvItems f i Just (3, i) -> w & changeSwapClose f i _ -> w diff --git a/src/Dodge/SelectionSections.hs b/src/Dodge/SelectionSections.hs index b254269b1..3033c8749 100644 --- a/src/Dodge/SelectionSections.hs +++ b/src/Dodge/SelectionSections.hs @@ -9,6 +9,8 @@ module Dodge.SelectionSections ( inverseSelSecYint, posSelSecYint, inverseSelNumPos, + inverseSelBoundaryUp, + inverseSelBoundaryDown, ) where import Control.Monad @@ -186,5 +188,32 @@ inverseSelNumPos :: inverseSelNumPos cfig ldp sss (V2 x y) = inverseSelSecYintXPosCheck cfig ldp x (posSelSecYint cfig ldp y) sss +inverseSelBoundaryUp :: + Configuration -> + ListDisplayParams -> + SelectionSections a -> + Point2 -> + Maybe (Int,Int) +inverseSelBoundaryUp cfig ldp sss (V2 _ y) = do + sel <- inverseSelSecYint (posSelSecYint cfig ldp y) sss + let mselup = inverseSelSecYint (posSelSecYint cfig ldp y - 1) sss + if Just sel == mselup + then return $ sel & _2 +~ 1 + else return $ sel + +inverseSelBoundaryDown :: + Configuration -> + ListDisplayParams -> + SelectionSections a -> + Point2 -> + Maybe (Int,Int) +inverseSelBoundaryDown cfig ldp sss (V2 _ y) = do + sel <- inverseSelSecYint (posSelSecYint cfig ldp y) sss + let mseldown = inverseSelSecYint (posSelSecYint cfig ldp y + 1) sss + if Just sel == mseldown + then return $ sel & _2 -~ 1 + else return sel + + --getIthPos :: Int -> IM.IntMap (SelectionItem a) -> Int --getIthPos i sm = sum . fmap _siHeight . fst $ IM.split i sm diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index bf0f70b29..4826322fd 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -21,11 +21,10 @@ import Dodge.Data.Universe import qualified IntMapHelp as IM testStringInit :: Universe -> [String] -testStringInit u = [ - show $ u ^? uvWorld . hud . hudElement . subInventory . nsMouseOver . _Just] - <> map show (IM.elems (L.postscan (L.premap _siHeight L.sum) - $ fromMaybe mempty $ u ^? uvWorld . hud . hudElement . diSections . sssSections . ix 0 . ssItems) - ) +testStringInit u = [show $ u ^? uvWorld . hud . hudElement . subInventory . nsMouseOver . _Just] +-- <> map show (IM.elems (L.postscan (L.premap _siHeight L.sum) +-- $ fromMaybe mempty $ u ^? uvWorld . hud . hudElement . diSections . sssSections . ix 0 . ssItems) +-- ) --testStringInit u = [maybe mempty show $ u ^? uvWorld . cWorld . lWorld . projectiles . ix 0 . prjUpdates . ix 3 . pjuControllerID] --testStringInit u = (topTestPart u -- <>) $ map showh $ diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index b8b21ae38..ae6c198f4 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -6,6 +6,7 @@ Description : Simulation update -} module Dodge.Update (updateUniverse) where +import Dodge.Inventory import Dodge.ListDisplayParams import Dodge.SelectionSections import Data.Monoid @@ -32,7 +33,6 @@ import Dodge.Distortion import Dodge.DrWdWd import Dodge.EnergyBall import Dodge.Flame -import Dodge.Inventory import Dodge.Item.Location import Dodge.Laser.Update import Dodge.LightSource.Update @@ -295,27 +295,67 @@ checkTermDist w = fromMaybe w $ do return (w & hud . hudElement . subInventory .~ NoSubInventory NoMouseSel Nothing) updateMouseInventorySelection :: Configuration -> World -> World -updateMouseInventorySelection cfig w +updateMouseInventorySelection cfig w = fromMaybe w $ do + sss <- w ^? hud . hudElement . diSections + return $ updateMouseInventorySelection' sss cfig w + +-- check whether leftclickstart evaluates to True on very short left clicks +updateMouseInventorySelection' :: SelectionSections a -> Configuration -> World -> World +updateMouseInventorySelection' sss cfig w | leftclickstart = case msel of Nothing -> fromMaybe w $ do ysel <- mysel return $ w & hud . hudElement . subInventory . nsSelected .~ MouseInvSelect ysel Nothing - Just (i,j) -> w & hud . hudElement . subInventory . nsSelected .~ - MouseInvChosen (i,j) (i,j) - | leftclickheld = w - | otherwise = w + Just p -> w & hud . hudElement . subInventory . nsSelected %~ startdrag p + | leftclickheld = case w ^? hud . hudElement . subInventory . nsSelected of + Just MouseInvSelect{} -> w + & hud . hudElement . subInventory . nsSelected . misMaybeEnd .~ msel + Just (MouseInvChosen ssel esel) + | maybe False ( w + & shiftInvItemsUp ssel esel (inverseSelBoundaryUp cfig ldp sss mpos) + Just (MouseInvChosen ssel esel) + | maybe False (>esel) $ inverseSelBoundaryDown cfig ldp sss mpos -> w + & shiftInvItemsDown ssel esel (inverseSelBoundaryDown cfig ldp sss mpos) + Just (MouseInvChosen ssel esel) -> w + _ -> w + & hud . hudElement . subInventory . nsSelected .~ NoMouseSel + | otherwise = case w ^? hud . hudElement . subInventory . nsSelected of + Just (MouseInvSelect ssel (Just esel)) -> w + & hud . hudElement . subInventory . nsSelected .~ MouseInvChosen (min ssel esel) + (max ssel esel) + Just (MouseInvSelect _ Nothing) -> w + & hud . hudElement . subInventory . nsSelected .~ NoMouseSel + _ -> w where - leftclickstart = w ^? input . mouseButtons . ix ButtonLeft == Just 0 - leftclickheld = ButtonLeft `M.member` (w ^. input . mouseButtons) + startdrag p (MouseInvChosen s e) | s <= p && p <= e = MouseInvChosen s e + startdrag p _ = MouseInvChosen p p + leftclickstart = w ^? input . mouseButtons . ix ButtonLeft == Just 0 && nobuttonright + leftclickheld = ButtonLeft `M.member` (w ^. input . mouseButtons) && nobuttonright + nobuttonright = not $ ButtonRight `M.member` (w ^. input . mouseButtons) mpos = w ^. input . mousePos ldp = invDisplayParams w - msel = do - sss <- msss - inverseSelNumPos cfig ldp sss (w ^. input . mousePos) - mysel = do - sss <- msss - inverseSelSecYint (posSelSecYint cfig ldp (mpos ^. _y)) sss - msss = w ^? hud . hudElement . diSections + msel = inverseSelNumPos cfig ldp sss (w ^. input . mousePos) + mysel = inverseSelSecYint (posSelSecYint cfig ldp (mpos ^. _y)) sss + +shiftInvItemsUp :: (Int,Int) -> (Int,Int) -> Maybe (Int,Int) -> World -> World +shiftInvItemsUp (_,i) (_,j) (Just (_,k)) w = w + & flip (foldl' f) [i..j] + & hud . hudElement . subInventory . nsSelected . misChosenStart . _2 -~ 1 + & hud . hudElement . subInventory . nsSelected . misChosenEnd . _2 -~ 1 + where + f w' i' = swapInvItems g i' w' + g i' m = fmap fst $ IM.cycleLT i' m +shiftInvItemsUp _ _ Nothing w = w + +shiftInvItemsDown :: (Int,Int) -> (Int,Int) -> Maybe (Int,Int) -> World -> World +shiftInvItemsDown (_,i) (_,j) (Just (_,k)) w = w + & flip (foldl' f) (reverse [i..j]) + & hud . hudElement . subInventory . nsSelected . misChosenStart . _2 +~ 1 + & hud . hudElement . subInventory . nsSelected . misChosenEnd . _2 +~ 1 + where + f w' i' = swapInvItems g i' w' + g i' m = fmap fst $ IM.cycleGT i' m +shiftInvItemsDown _ _ Nothing w = w updateMouseOverInventory :: Configuration -> World -> World updateMouseOverInventory cfig w = fromMaybe w $ do diff --git a/tags b/tags index 3f7c8a583..9fbd7eb7b 100644 --- a/tags +++ b/tags @@ -333,7 +333,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 34;" C +CombineInventory src/Dodge/Data/HUD.hs 37;" C CombineInventoryChange src/Dodge/Data/World.hs 34;" C Common src/Dodge/Zoning/Common.hs 1;" m Compile src/Shader/Compile.hs 1;" m @@ -513,7 +513,7 @@ Display src/Dodge/Item/Display.hs 1;" m DisplayCarte src/Dodge/Data/HUD.hs 20;" C DisplayInventory src/Dodge/Data/HUD.hs 16;" C DisplayInventory src/Dodge/DisplayInventory.hs 5;" m -DisplayTerminal src/Dodge/Data/HUD.hs 36;" C +DisplayTerminal src/Dodge/Data/HUD.hs 39;" C Distortion src/Dodge/Data/Distortion.hs 12;" t Distortion src/Dodge/Data/Distortion.hs 6;" m Distortion src/Dodge/Distortion.hs 1;" m @@ -658,7 +658,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 33;" C +ExamineInventory src/Dodge/Data/HUD.hs 36;" C Explore src/Dodge/Data/Scenario.hs 4;" C Explosion src/Dodge/Data/SoundOrigin.hs 36;" C Explosion src/Dodge/WorldEvent/Explosion.hs 4;" m @@ -816,7 +816,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 40;" t +HUD src/Dodge/Data/HUD.hs 43;" t HUD src/Dodge/Data/HUD.hs 6;" m HUD src/Dodge/Render/HUD.hs 3;" m HUDElement src/Dodge/Data/HUD.hs 15;" t @@ -1072,7 +1072,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 35;" C +LockedInventory src/Dodge/Data/HUD.hs 38;" 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 @@ -1184,8 +1184,8 @@ MountedLS src/Dodge/Data/MountedObject.hs 12;" C MountedObject src/Dodge/Data/MountedObject.hs 11;" t MountedObject src/Dodge/Data/MountedObject.hs 6;" m MountedProp src/Dodge/Data/MountedObject.hs 13;" C -MouseInvChosen src/Dodge/Data/HUD.hs 25;" C -MouseInvSelect src/Dodge/Data/HUD.hs 23;" C +MouseInvChosen src/Dodge/Data/HUD.hs 26;" C +MouseInvSelect src/Dodge/Data/HUD.hs 24;" C MouseInventorySelection src/Dodge/Data/HUD.hs 22;" t Mouse_position src/Dodge/Data/Config.hs 73;" C Move src/Dodge/Data/ActionPlan.hs 28;" C @@ -1253,7 +1253,7 @@ NoIntImp src/Dodge/Data/CreatureEffect.hs 20;" C NoInvEffect src/Dodge/Data/Item/Effect.hs 20;" C NoItTargeting src/Dodge/Data/Item.hs 44;" C NoLighting src/Dodge/Data/Config.hs 102;" C -NoMouseSel src/Dodge/Data/HUD.hs 22;" C +NoMouseSel src/Dodge/Data/HUD.hs 23;" C NoMvType src/Dodge/Data/Creature/Misc.hs 38;" C NoNeedWeapon src/Dodge/Room/NoNeedWeapon.hs 2;" m NoObjShads src/Dodge/Data/Config.hs 100;" C @@ -1264,7 +1264,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 29;" C +NoSubInventory src/Dodge/Data/HUD.hs 32;" 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 @@ -1809,7 +1809,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 28;" t +SubInventory src/Dodge/Data/HUD.hs 31;" t Superfluous src/Shape/Data.hs 38;" C Surface src/Shape/Data.hs 41;" t Survive src/Dodge/Data/Scenario.hs 5;" C @@ -2274,15 +2274,15 @@ _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 42;" f -_carteRot src/Dodge/Data/HUD.hs 44;" f -_carteZoom src/Dodge/Data/HUD.hs 43;" f +_carteCenter src/Dodge/Data/HUD.hs 45;" f +_carteRot src/Dodge/Data/HUD.hs 47;" f +_carteZoom src/Dodge/Data/HUD.hs 46;" f _ceSideEffect src/Dodge/Data/Universe.hs 62;" f _ceString src/Dodge/Data/Universe.hs 63;" 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 34;" f +_ciSections src/Dodge/Data/HUD.hs 37;" 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 @@ -2306,7 +2306,7 @@ _cldtUp src/Dodge/Data/DoubleTree.hs 46;" f _cldtUp src/Dodge/Data/DoubleTree.hs 54;" f _clickPos src/Dodge/Data/Input.hs 26;" f _clickWorldPos src/Dodge/Data/Input.hs 28;" f -_closeObjects src/Dodge/Data/HUD.hs 45;" f +_closeObjects src/Dodge/Data/HUD.hs 48;" 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 @@ -2585,7 +2585,7 @@ _heldPos src/Dodge/Data/Input.hs 27;" f _heldTriggerType src/Dodge/Data/Item/Use.hs 42;" f _heldWorldPos src/Dodge/Data/Input.hs 29;" f _hud src/Dodge/Data/World.hs 47;" f -_hudElement src/Dodge/Data/HUD.hs 41;" f +_hudElement src/Dodge/Data/HUD.hs 44;" 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 @@ -2739,10 +2739,10 @@ _mgField src/Dodge/Data/Magnet.hs 25;" f _mgID src/Dodge/Data/Magnet.hs 22;" f _mgPos src/Dodge/Data/Magnet.hs 24;" f _mgUpdate src/Dodge/Data/Magnet.hs 23;" f -_misChosenEnd src/Dodge/Data/HUD.hs 26;" f -_misChosenStart src/Dodge/Data/HUD.hs 26;" f -_misMaybeEnd src/Dodge/Data/HUD.hs 24;" f -_misSelStart src/Dodge/Data/HUD.hs 24;" f +_misChosenEnd src/Dodge/Data/HUD.hs 28;" f +_misChosenStart src/Dodge/Data/HUD.hs 27;" f +_misMaybeEnd src/Dodge/Data/HUD.hs 25;" f +_misSelStart src/Dodge/Data/HUD.hs 25;" f _moEff src/Dodge/Data/Universe.hs 101;" f _moEff1 src/Dodge/Data/Universe.hs 105;" f _moEff2 src/Dodge/Data/Universe.hs 106;" f @@ -2774,8 +2774,8 @@ _newArcStep src/Dodge/Data/Item/Params.hs 25;" f _nodeMetaTree src/Dodge/Tree/Compose/Data.hs 9;" f _nodeTree src/Dodge/Tree/Compose/Data.hs 9;" f _nodesSearched src/Dodge/Data/Creature/Memory.hs 15;" f -_nsMouseOver src/Dodge/Data/HUD.hs 31;" f -_nsSelected src/Dodge/Data/HUD.hs 30;" f +_nsMouseOver src/Dodge/Data/HUD.hs 34;" f +_nsSelected src/Dodge/Data/HUD.hs 33;" f _numLinkEW src/Dodge/Data/Room.hs 33;" f _numLinkNS src/Dodge/Data/Room.hs 34;" f _numberFloorVerxs src/Dodge/Data/CWorld.hs 32;" f @@ -3103,7 +3103,7 @@ _tcEffect src/Dodge/Data/Terminal.hs 118;" f _tcHelp src/Dodge/Data/Terminal.hs 117;" f _tcString src/Dodge/Data/Terminal.hs 115;" f _tempLightSources src/Dodge/Data/LWorld.hs 138;" f -_termID src/Dodge/Data/HUD.hs 36;" f +_termID src/Dodge/Data/HUD.hs 39;" 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 @@ -3326,7 +3326,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 335;" f +advanceScrollAmount src/Dodge/Update.hs 375;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f aimDelaySweep src/Dodge/Render/ShapePicture.hs 56;" f @@ -3538,6 +3538,7 @@ calcSmoothScroll src/Dodge/SmoothScroll.hs 7;" f calcTexCoord src/Tile.hs 17;" f canSee src/Dodge/Base/Collide.hs 228;" f canSeeIndirect src/Dodge/Base/Collide.hs 235;" 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 cardinalVectors src/Dodge/FloorItem.hs 39;" f @@ -3551,10 +3552,9 @@ centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f chainLinkOrientation src/Dodge/Creature/State.hs 182;" f chainPairs src/Geometry.hs 363;" f -changeSwapClose src/Dodge/Inventory.hs 149;" f -changeSwapInv src/Dodge/Inventory.hs 165;" f -changeSwapSel src/Dodge/Inventory.hs 141;" f -changeSwapWith src/Dodge/Inventory.hs 200;" f +changeSwapClose src/Dodge/Inventory.hs 150;" f +changeSwapSel src/Dodge/Inventory.hs 142;" f +changeSwapWith src/Dodge/Inventory.hs 205;" f charToTuple src/Picture/Base.hs 317;" f charToTupleGrad src/Picture/Text.hs 18;" f chargeIfEquipped src/Dodge/ItEffect.hs 54;" f @@ -3567,7 +3567,7 @@ chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 30;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 46;" f checkBlockHP src/Dodge/Block.hs 46;" f checkDeath src/Dodge/Creature/State.hs 74;" f -checkEndGame src/Dodge/Update.hs 617;" f +checkEndGame src/Dodge/Update.hs 657;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f @@ -3593,7 +3593,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 670;" f +clClSpringVel src/Dodge/Update.hs 710;" f clZoneSize src/Dodge/Zone/Size.hs 3;" f clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f clampPath src/Dodge/Room/Procedural.hs 165;" f @@ -3613,14 +3613,14 @@ 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 142;" f +closeObjectInfo src/Dodge/Render/HUD.hs 143;" f closeObjectToSelectionItem src/Dodge/Inventory/SelectionList.hs 54;" f closeObjectToTextPictures src/Dodge/Inventory/SelectionList.hs 69;" f closestCreatureID src/Dodge/Debug.hs 91;" 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 640;" f +cloudEffect src/Dodge/Update.hs 680;" 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 @@ -3649,7 +3649,7 @@ combinationsOf src/Multiset.hs 40;" f combinationsTrie src/Dodge/Combine.hs 41;" f combineAwareness src/Dodge/Creature/Perception.hs 109;" f combineFloors src/Dodge/Room/Procedural.hs 171;" f -combineInventoryExtra src/Dodge/Render/HUD.hs 231;" f +combineInventoryExtra src/Dodge/Render/HUD.hs 232;" f combineItemListYouX src/Dodge/Combine.hs 33;" f combineList src/Dodge/Combine.hs 20;" f combineRooms src/Dodge/Room/Procedural.hs 151;" f @@ -3690,7 +3690,7 @@ crAdd src/Dodge/Room/RezBox.hs 102;" 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 688;" f +crCrSpring src/Dodge/Update.hs 728;" 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 @@ -3710,7 +3710,7 @@ crNearPoint src/Dodge/Creature/Test.hs 135;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 35;" f crOnWall src/Dodge/WallCreatureCollisions.hs 84;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 67;" f -crSpring src/Dodge/Update.hs 683;" f +crSpring src/Dodge/Update.hs 723;" f crStratConMatches src/Dodge/Creature/Test.hs 72;" f crUpdate src/Dodge/Creature/State.hs 61;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 50;" f @@ -3933,7 +3933,7 @@ denormalEdges src/Polyhedra.hs 135;" f destroyAt src/Dodge/Bullet.hs 201;" f destroyBlock src/Dodge/Block.hs 51;" f destroyDoor src/Dodge/Block.hs 79;" f -destroyInvItem src/Dodge/Inventory.hs 40;" f +destroyInvItem src/Dodge/Inventory.hs 41;" f destroyLS src/Dodge/LightSource.hs 91;" f destroyLSFlashAt src/Dodge/LightSource.hs 101;" f destroyMachine src/Dodge/Machine/Destroy.hs 12;" f @@ -3963,8 +3963,8 @@ displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 33;" f displayFreeSlots src/Dodge/DisplayInventory.hs 144;" f -displayTerminal src/Dodge/Render/HUD.hs 258;" f -displayTerminalLineString src/Dodge/Update.hs 363;" f +displayTerminal src/Dodge/Render/HUD.hs 259;" f +displayTerminalLineString src/Dodge/Update.hs 403;" f dist src/Geometry/Vector.hs 179;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f @@ -4047,7 +4047,7 @@ doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 8;" f doWdWd src/Dodge/WorldEffect.hs 26;" f doWeaponRepetitions src/Dodge/HeldUse.hs 54;" f -doWorldEvents src/Dodge/Update.hs 345;" f +doWorldEvents src/Dodge/Update.hs 385;" 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 @@ -4074,7 +4074,7 @@ 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 -drawCombineInventory src/Dodge/Render/HUD.hs 106;" f +drawCombineInventory src/Dodge/Render/HUD.hs 107;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 58;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f drawCrInfo src/Dodge/Debug/Picture.hs 341;" f @@ -4084,13 +4084,13 @@ drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 56;" f drawDDATest src/Dodge/Debug/Picture.hs 254;" f -drawDIMouseOver src/Dodge/Render/HUD.hs 75;" f -drawDISelections src/Dodge/Render/HUD.hs 88;" f +drawDIMouseOver src/Dodge/Render/HUD.hs 76;" f +drawDISelections src/Dodge/Render/HUD.hs 89;" f drawDoorPaths src/Dodge/Debug/Picture.hs 215;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 81;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 8;" f drawEquipment src/Dodge/Creature/Picture.hs 140;" f -drawExamineInventory src/Dodge/Render/HUD.hs 112;" f +drawExamineInventory src/Dodge/Render/HUD.hs 113;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 232;" f drawFlame src/Dodge/Flame/Draw.hs 7;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 23;" f @@ -4098,12 +4098,12 @@ drawFlare src/Dodge/Flare.hs 12;" f drawFooterText src/Dodge/Render/MenuScreen.hs 65;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f drawGib src/Dodge/Prop/Draw.hs 28;" f -drawHP src/Dodge/Render/HUD.hs 50;" f -drawHUD src/Dodge/Render/HUD.hs 42;" f +drawHP src/Dodge/Render/HUD.hs 51;" f +drawHUD src/Dodge/Render/HUD.hs 43;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 18;" f drawInspectWall src/Dodge/Debug/Picture.hs 207;" f drawInspectWalls src/Dodge/Debug/Picture.hs 195;" f -drawInventory src/Dodge/Render/HUD.hs 59;" f +drawInventory src/Dodge/Render/HUD.hs 60;" 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 @@ -4131,7 +4131,7 @@ 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 160;" f +drawRBOptions src/Dodge/Render/HUD.hs 161;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 7;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 30;" f drawSelectionCursor src/Dodge/Render/List.hs 41;" f @@ -4145,7 +4145,7 @@ 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 98;" f +drawSubInventory src/Dodge/Render/HUD.hs 99;" f drawSweep src/Dodge/Render/ShapePicture.hs 63;" f drawSwitch src/Dodge/Button/Draw.hs 15;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f @@ -4197,7 +4197,7 @@ encircleP src/Dodge/Creature/Boid.hs 27;" f enterCombineInv src/Dodge/DisplayInventory.hs 239;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f -equipAllocString src/Dodge/Render/HUD.hs 203;" f +equipAllocString src/Dodge/Render/HUD.hs 204;" f equipInfo src/Dodge/Item/Info.hs 103;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 65;" f equipPosition src/Dodge/Item/Draw.hs 29;" f @@ -4289,7 +4289,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 147;" f +floorItemPickupInfo src/Dodge/Render/HUD.hs 148;" f floorItemSPic src/Dodge/Render/ShapePicture.hs 165;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 398;" f @@ -4367,7 +4367,7 @@ getLaserColor src/Dodge/HeldUse.hs 193;" f getLaserDamage src/Dodge/HeldUse.hs 190;" f getLaserPhaseV src/Dodge/HeldUse.hs 187;" f getLinksOfType src/Dodge/RoomLink.hs 39;" f -getMouseInvSel src/Dodge/Render/HUD.hs 82;" f +getMouseInvSel src/Dodge/Render/HUD.hs 83;" f getNodePos src/Dodge/Path.hs 31;" f getPretty src/AesonHelp.hs 7;" f getPrettyShort src/AesonHelp.hs 10;" f @@ -4556,7 +4556,7 @@ intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f invAdj src/Dodge/Item/Grammar.hs 181;" f invDimColor src/Dodge/DisplayInventory.hs 138;" f invDisplayParams src/Dodge/ListDisplayParams.hs 29;" f -invHead src/Dodge/Render/HUD.hs 294;" f +invHead src/Dodge/Render/HUD.hs 295;" f invLDT src/Dodge/Item/Grammar.hs 165;" f invRootMap src/Dodge/Item/Grammar.hs 174;" f invRootTrees src/Dodge/Item/Grammar.hs 206;" f @@ -4567,12 +4567,14 @@ invSideEff src/Dodge/Creature/State.hs 161;" f invSize src/Dodge/Inventory/CheckSlots.hs 41;" f invTrees src/Dodge/Item/Grammar.hs 194;" f invTrees' src/Dodge/Item/Grammar.hs 198;" f -inventoryExtra src/Dodge/Render/HUD.hs 212;" f -inventoryExtraH src/Dodge/Render/HUD.hs 223;" f +inventoryExtra src/Dodge/Render/HUD.hs 213;" f +inventoryExtraH src/Dodge/Render/HUD.hs 224;" f inventoryX src/Dodge/Creature.hs 115;" f -inverseSelNumPos src/Dodge/SelectionSections.hs 180;" f -inverseSelSecYint src/Dodge/SelectionSections.hs 155;" f -inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 166;" f +inverseSelBoundaryDown src/Dodge/SelectionSections.hs 204;" f +inverseSelBoundaryUp src/Dodge/SelectionSections.hs 191;" f +inverseSelNumPos src/Dodge/SelectionSections.hs 182;" f +inverseSelSecYint src/Dodge/SelectionSections.hs 157;" f +inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 168;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f invertIntMap src/IntMapHelp.hs 101;" f @@ -4730,7 +4732,7 @@ llleft src/Dodge/Item/Grammar.hs 105;" f llright src/Dodge/Item/Grammar.hs 108;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 120;" f -lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 283;" f +lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 284;" f lnkPosDir src/Dodge/RoomLink.hs 97;" f loadDodgeConfig src/Dodge/Config/Load.hs 9;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 21;" f @@ -4845,7 +4847,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 603;" f +markWallSeen src/Dodge/Update.hs 643;" f maxDamageType src/Dodge/Damage.hs 37;" f maxShowX src/Dodge/Combine/Graph.hs 43;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f @@ -4977,7 +4979,7 @@ mvBullet src/Dodge/Bullet.hs 33;" f mvButton src/Dodge/Placement/PlaceSpot.hs 174;" f mvCr src/Dodge/Placement/PlaceSpot.hs 184;" f mvFS src/Dodge/Placement/PlaceSpot.hs 187;" f -mvGust src/Dodge/Update.hs 631;" f +mvGust src/Dodge/Update.hs 671;" f mvLS src/Dodge/Placement/PlaceSpot.hs 215;" f mvP src/Dodge/Wall/Move.hs 54;" f mvPP src/Dodge/Placement/PlaceSpot.hs 181;" f @@ -5231,7 +5233,7 @@ polysToPic src/Polyhedra.hs 129;" f popScreen src/Dodge/Menu/PushPop.hs 6;" f posEventEffect src/Dodge/PosEvent.hs 16;" f posRms src/Dodge/Tree/Shift.hs 44;" f -posSelSecYint src/Dodge/SelectionSections.hs 136;" f +posSelSecYint src/Dodge/SelectionSections.hs 138;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f postGenerationProcessing src/Dodge/LevelGen.hs 33;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f @@ -5244,7 +5246,7 @@ powlistUpToN src/Multiset.hs 20;" f powlistUpToN' src/Multiset.hs 9;" f powlistUpToN'' src/Multiset.hs 27;" f ppDraw src/Dodge/Render/ShapePicture.hs 162;" f -ppEvents src/Dodge/Update.hs 596;" f +ppEvents src/Dodge/Update.hs 636;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f preCritStart src/Dodge/Room/Start.hs 81;" f preloadRender src/Preload/Render.hs 30;" f @@ -5430,7 +5432,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 53;" f +rmInvItem src/Dodge/Inventory.hs 54;" f rmLinksOfType src/Dodge/RoomLink.hs 135;" f rmOutLinks src/Dodge/RoomLink.hs 138;" f roomC src/Dodge/Room/Room.hs 39;" f @@ -5523,12 +5525,12 @@ 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 206;" f +scrollAugInvSel src/Dodge/Inventory.hs 211;" f scrollCommandStrings src/Dodge/Update/Scroll.hs 134;" f scrollCommands src/Dodge/Update/Scroll.hs 131;" f scrollDebugInfoInt src/Dodge/Debug.hs 46;" f scrollRBOption src/Dodge/Update/Scroll.hs 108;" f -scrollSelectionSections src/Dodge/SelectionSections.hs 25;" f +scrollSelectionSections src/Dodge/SelectionSections.hs 27;" f scrollTimeBack src/Dodge/Update.hs 201;" f scrollTimeForward src/Dodge/Update.hs 220;" f scrollWatch src/Dodge/Item/Weapon/Utility.hs 30;" f @@ -5545,16 +5547,16 @@ secondColumnParams src/Dodge/ListDisplayParams.hs 42;" 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 354;" f -selNumPosCardinal src/Dodge/Render/HUD.hs 374;" f +selNumPos src/Dodge/Render/HUD.hs 355;" f +selNumPosCardinal src/Dodge/Render/HUD.hs 377;" f selSecDrawCursor src/Dodge/Render/List.hs 104;" f selSecDrawCursorAt src/Dodge/Render/List.hs 88;" f -selSecSelCol src/Dodge/Render/HUD.hs 398;" f -selSecSelSize src/Dodge/SelectionSections.hs 132;" f -selSecYint src/Dodge/SelectionSections.hs 141;" f +selSecSelCol src/Dodge/Render/HUD.hs 403;" f +selSecSelSize src/Dodge/SelectionSections.hs 134;" f +selSecYint src/Dodge/SelectionSections.hs 143;" f selectCreatureDebugItem src/Dodge/Debug.hs 38;" f selectUse src/Dodge/SelectUse.hs 11;" f -selectedCloseObject src/Dodge/Inventory.hs 216;" f +selectedCloseObject src/Dodge/Inventory.hs 221;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f senseDamage src/Dodge/Machine/Update.hs 134;" f @@ -5572,7 +5574,7 @@ setClusterID src/Dodge/Combine/Graph.hs 103;" f setDepth src/Picture/Base.hs 128;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f setFallback src/Dodge/PlacementSpot.hs 127;" f -setFirstPosSelectionSections src/Dodge/SelectionSections.hs 31;" f +setFirstPosSelectionSections src/Dodge/SelectionSections.hs 33;" f setFromToDams src/Dodge/Bullet.hs 171;" f setHotkey src/Dodge/Hotkey.hs 38;" f setInLinks src/Dodge/RoomLink.hs 51;" f @@ -5586,7 +5588,7 @@ setLinkTypePD src/Dodge/RoomLink.hs 67;" f setMinInvSize src/Dodge/Creature/Action.hs 150;" f setMusicVolume src/Sound.hs 161;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 51;" f -setOldPos src/Dodge/Update.hs 387;" f +setOldPos src/Dodge/Update.hs 427;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f @@ -5642,6 +5644,8 @@ shiftDec src/Dodge/Placement/PlaceSpot.hs 136;" f shiftDraw src/Dodge/Render/ShapePicture.hs 107;" f shiftDraw' src/Dodge/Render/ShapePicture.hs 113;" f shiftInBy src/Dodge/PlacementSpot.hs 236;" f +shiftInvItemsDown src/Dodge/Update.hs 350;" f +shiftInvItemsUp src/Dodge/Update.hs 340;" 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 @@ -5681,9 +5685,9 @@ showEquipItem src/Dodge/Item/Display.hs 68;" f showEquipmentNumber src/Dodge/Item/Display.hs 110;" f showInt src/Dodge/Item/Info.hs 31;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f -showManObj src/Dodge/TestString.hs 45;" f +showManObj src/Dodge/TestString.hs 44;" f showTerminalError src/Dodge/Debug/Terminal.hs 76;" f -showTimeFlow src/Dodge/TestString.hs 92;" f +showTimeFlow src/Dodge/TestString.hs 91;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f shrinkVert src/Geometry/Polygon.hs 140;" f shuffle src/RandomHelp.hs 46;" f @@ -5691,7 +5695,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 55;" f sigmoid src/Dodge/Base.hs 129;" f -simpleCrSprings src/Dodge/Update.hs 679;" f +simpleCrSprings src/Dodge/Update.hs 719;" f simpleDamFL src/Dodge/Flame.hs 41;" f simpleTermMessage src/Dodge/Terminal.hs 249;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 486;" f @@ -5774,19 +5778,19 @@ square src/Geometry/Polygon.hs 46;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 41;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 110;" f squashNormalizeV src/Geometry/Vector.hs 146;" f -ssLookupDown src/Dodge/SelectionSections.hs 82;" f -ssLookupGE' src/Dodge/SelectionSections.hs 125;" f -ssLookupGT src/Dodge/SelectionSections.hs 112;" f -ssLookupGT' src/Dodge/SelectionSections.hs 118;" f -ssLookupLE' src/Dodge/SelectionSections.hs 100;" f -ssLookupLT src/Dodge/SelectionSections.hs 87;" f -ssLookupLT' src/Dodge/SelectionSections.hs 93;" f -ssLookupMax src/Dodge/SelectionSections.hs 72;" f -ssLookupMin src/Dodge/SelectionSections.hs 107;" f -ssLookupUp src/Dodge/SelectionSections.hs 77;" f -ssScrollUsing src/Dodge/SelectionSections.hs 36;" f -ssScrollUsing' src/Dodge/SelectionSections.hs 46;" f -ssSetCursor src/Dodge/SelectionSections.hs 60;" f +ssLookupDown src/Dodge/SelectionSections.hs 84;" f +ssLookupGE' src/Dodge/SelectionSections.hs 127;" f +ssLookupGT src/Dodge/SelectionSections.hs 114;" f +ssLookupGT' src/Dodge/SelectionSections.hs 120;" f +ssLookupLE' src/Dodge/SelectionSections.hs 102;" f +ssLookupLT src/Dodge/SelectionSections.hs 89;" f +ssLookupLT' src/Dodge/SelectionSections.hs 95;" f +ssLookupMax src/Dodge/SelectionSections.hs 74;" f +ssLookupMin src/Dodge/SelectionSections.hs 109;" f +ssLookupUp src/Dodge/SelectionSections.hs 79;" f +ssScrollUsing src/Dodge/SelectionSections.hs 38;" f +ssScrollUsing' src/Dodge/SelectionSections.hs 48;" f +ssSetCursor src/Dodge/SelectionSections.hs 62;" f ssfold src/FoldableHelp.hs 105;" f stackPicturesAt src/Dodge/Render/List.hs 82;" f stackPicturesAtOff src/Dodge/Render/List.hs 85;" f @@ -5825,6 +5829,7 @@ subMap src/TreeHelp.hs 118;" f subZipWith src/Dodge/Placement/Instance/Wall.hs 115;" f swapInOutLinks src/Dodge/RoomLink.hs 80;" f swapIndices src/ListHelp.hs 50;" f +swapInvItems src/Dodge/Inventory.hs 167;" 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 @@ -5911,7 +5916,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 367;" f +tmUpdate src/Dodge/Update.hs 407;" f toBothLnk src/Dodge/RoomLink.hs 121;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f @@ -5938,7 +5943,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 320;" f topInvW src/Dodge/ListDisplayParams.hs 51;" f topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismIndices src/Shader/Poke.hs 402;" f -topTestPart src/Dodge/TestString.hs 40;" f +topTestPart src/Dodge/TestString.hs 39;" f torch src/Dodge/Item/Held/Utility.hs 26;" f torchShape src/Dodge/Item/Draw/SPic.hs 213;" f torqueCr src/Dodge/WorldEffect.hs 70;" f @@ -6053,39 +6058,39 @@ 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 462;" f +updateBullets src/Dodge/Update.hs 502;" f updateCamera src/Dodge/Update/Camera.hs 31;" f -updateCloseObjects src/Dodge/Inventory.hs 112;" f -updateCloud src/Dodge/Update.hs 645;" f -updateClouds src/Dodge/Update.hs 491;" f +updateCloseObjects src/Dodge/Inventory.hs 113;" f +updateCloud src/Dodge/Update.hs 685;" f +updateClouds src/Dodge/Update.hs 531;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 37;" f updateCombineSections src/Dodge/DisplayInventory.hs 42;" f updateCreature src/Dodge/Creature/Update.hs 10;" f -updateCreatureGroups src/Dodge/Update.hs 431;" f -updateCreatureSoundPositions src/Dodge/Update.hs 409;" f +updateCreatureGroups src/Dodge/Update.hs 471;" f +updateCreatureSoundPositions src/Dodge/Update.hs 449;" f updateDebugMessageOffset src/Dodge/Update.hs 93;" f -updateDelayedEvents src/Dodge/Update.hs 708;" f +updateDelayedEvents src/Dodge/Update.hs 748;" f updateDisplaySections src/Dodge/DisplayInventory.hs 92;" f updateDistortion src/Dodge/Distortion.hs 5;" f -updateDistortions src/Dodge/Update.hs 452;" f +updateDistortions src/Dodge/Update.hs 492;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f -updateEnergyBalls src/Dodge/Update.hs 479;" f +updateEnergyBalls src/Dodge/Update.hs 519;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 189;" 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 476;" f +updateFlames src/Dodge/Update.hs 516;" f updateFlare src/Dodge/Flare.hs 7;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f -updateGusts src/Dodge/Update.hs 628;" f +updateGusts src/Dodge/Update.hs 668;" f updateHeldRootItem src/Dodge/Creature/State.hs 166;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f -updateIMl src/Dodge/Update.hs 423;" f -updateIMl' src/Dodge/Update.hs 427;" f +updateIMl src/Dodge/Update.hs 463;" f +updateIMl' src/Dodge/Update.hs 467;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 109;" f -updateInstantBullets src/Dodge/Update.hs 568;" f +updateInstantBullets src/Dodge/Update.hs 608;" f updateInv src/Dodge/Creature/State.hs 151;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateItemTargeting src/Dodge/Creature/State.hs 267;" f @@ -6094,20 +6099,21 @@ updateKeyInGame src/Dodge/Update/Input/InGame.hs 103;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 92;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f -updateLasers src/Dodge/Update.hs 352;" f -updateLightSources src/Dodge/Update.hs 455;" f +updateLasers src/Dodge/Update.hs 392;" f +updateLightSources src/Dodge/Update.hs 495;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 129;" f -updateMIM src/Dodge/Update.hs 581;" f +updateMIM src/Dodge/Update.hs 621;" f updateMachine src/Dodge/Machine/Update.hs 16;" f updateMouseInventorySelection src/Dodge/Update.hs 297;" f -updateMouseOverInventory src/Dodge/Update.hs 320;" f +updateMouseInventorySelection' src/Dodge/Update.hs 303;" f +updateMouseOverInventory src/Dodge/Update.hs 360;" f updateMovement src/Dodge/Creature/State.hs 330;" f -updateObjCatMaybes src/Dodge/Update.hs 443;" f -updateObjMapMaybe src/Dodge/Update.hs 436;" f -updatePastWorlds src/Dodge/Update.hs 341;" f +updateObjCatMaybes src/Dodge/Update.hs 483;" f +updateObjMapMaybe src/Dodge/Update.hs 476;" f +updatePastWorlds src/Dodge/Update.hs 381;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f -updatePosEvents src/Dodge/Update.hs 488;" f +updatePosEvents src/Dodge/Update.hs 528;" f updatePreload src/Preload/Update.hs 20;" f updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 67;" f updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 70;" f @@ -6115,9 +6121,9 @@ updateProjectile src/Dodge/Projectile/Update.hs 22;" 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 458;" f +updateRadarBlips src/Dodge/Update.hs 498;" f updateRadarSweep src/Dodge/RadarSweep.hs 25;" f -updateRadarSweeps src/Dodge/Update.hs 482;" f +updateRadarSweeps src/Dodge/Update.hs 522;" f updateRandNode src/TreeHelp.hs 108;" f updateRenderSplit appDodge/Main.hs 105;" f updateRootItemID src/Dodge/Inventory/Location.hs 37;" f @@ -6126,19 +6132,19 @@ updateScopeZoom' src/Dodge/Update/Camera.hs 132;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 171;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 150;" f -updateSeenWalls src/Dodge/Update.hs 599;" f +updateSeenWalls src/Dodge/Update.hs 639;" f updateShockwave src/Dodge/Shockwave/Update.hs 12;" f -updateShockwaves src/Dodge/Update.hs 473;" f +updateShockwaves src/Dodge/Update.hs 513;" 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 485;" f +updateSparks src/Dodge/Update.hs 525;" f updateTempLightSource src/Dodge/LightSource/Update.hs 7;" f updateTeslaArc src/Dodge/Tesla/Arc.hs 29;" f -updateTeslaArcs src/Dodge/Update.hs 467;" f +updateTeslaArcs src/Dodge/Update.hs 507;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 470;" f +updateTractorBeams src/Dodge/Update.hs 510;" f updateTurret src/Dodge/Machine/Update.hs 31;" f updateUniverse src/Dodge/Update.hs 73;" f updateUniverseFirst src/Dodge/Update.hs 84;" f @@ -6149,7 +6155,7 @@ updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 20;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWheelEvent src/Dodge/Update/Scroll.hs 20;" f -updateWheelEvents src/Dodge/Update.hs 328;" f +updateWheelEvents src/Dodge/Update.hs 368;" f updateWorldEventFlag src/Dodge/Update.hs 113;" f updateWorldEventFlags src/Dodge/Update.hs 104;" f upperBody src/Dodge/Creature/Picture.hs 133;" f @@ -6302,7 +6308,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 184;" f -yourAugmentedItem src/Dodge/Render/HUD.hs 154;" f +yourAugmentedItem src/Dodge/Render/HUD.hs 155;" 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 @@ -6319,9 +6325,9 @@ zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 117;" f zipWithDefaults src/Dodge/Item/Display.hs 21;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f -zoneClouds src/Dodge/Update.hs 360;" f +zoneClouds src/Dodge/Update.hs 400;" f zoneCreature src/Dodge/Zoning/Creature.hs 52;" f -zoneCreatures src/Dodge/Update.hs 404;" f +zoneCreatures src/Dodge/Update.hs 444;" 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