From b837e6a798325876980867f9181fb7c348cd4fb5 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 19 Sep 2025 20:39:17 +0100 Subject: [PATCH] Cleanup --- src/Dodge/Base/Coordinate.hs | 37 +--- src/Dodge/Data/HUD.hs | 3 - src/Dodge/Data/SelectionList.hs | 4 +- src/Dodge/Default/World.hs | 3 - src/Dodge/Render/MenuScreen.hs | 24 +-- src/Dodge/Render/Picture.hs | 80 ++++---- src/Dodge/Update.hs | 39 +--- src/Dodge/Update/Input/InGame.hs | 85 ++++---- tags | 338 +++++++++++++++---------------- 9 files changed, 268 insertions(+), 345 deletions(-) diff --git a/src/Dodge/Base/Coordinate.hs b/src/Dodge/Base/Coordinate.hs index 7a638e12d..3baac69d2 100644 --- a/src/Dodge/Base/Coordinate.hs +++ b/src/Dodge/Base/Coordinate.hs @@ -1,5 +1,4 @@ module Dodge.Base.Coordinate ( - cartePosToScreen, worldPosToScreen, screenToWorldPos, mouseWorldPos, @@ -7,18 +6,9 @@ module Dodge.Base.Coordinate ( import Control.Lens import Dodge.Data.Camera -import Dodge.Data.HUD import Dodge.Data.Input import Geometry ----- | Transform coordinates from world position to screen coordinates. ---worldPosToScreenNorm :: Config -> World -> Point2 -> Point2 ---worldPosToScreenNorm cfig w = doWindowScale cfig . doRotate . doZoom . doTranslate --- where --- doTranslate p = p -.- (w ^. cWorld . lWorld . wCam . cwcCenter) --- doZoom p = (w ^. cWorld . lWorld . wCam . cwcZoom) *.* p --- doRotate p = rotateV (negate (w ^. cWorld . lWorld . wCam . cwcRot)) p - {- | Transform world coordinates to scaled screen coordinates. - These have to be scaled according to the size of the window to get actual screen positions. - This allows for line thicknesses etc to correspond to pixel sizes. @@ -31,33 +21,10 @@ worldPosToScreen cam = . ((cam ^. camZoom) *.*) . (-.- (cam ^. camCenter)) -{- | Transform coordinates from the map position to screen -coordinates. --} -cartePosToScreen :: HUD -> Point2 -> Point2 -cartePosToScreen thehud = doRotate . doZoom . doTranslate - where - doTranslate p = p - (thehud ^. carteCenter) -- _carteCenter (_hud (_cWorld w)) - doZoom p = (thehud ^. carteZoom) *.* p - doRotate p = rotateV (negate $ thehud ^. carteRot) p - ---crToMousePosOffset :: Creature -> World -> (Point2, Float) ---crToMousePosOffset cr w = (mouseWorldPos w -.- _crPos cr, 0) - -- | The mouse position in world coordinates. mouseWorldPos :: Input -> Camera -> Point2 mouseWorldPos inp cam = screenToWorldPos cam (inp ^. mousePos) screenToWorldPos :: Camera -> Point2 -> Point2 -screenToWorldPos cam p = - (cam ^. camCenter) - + (1 / (cam ^. camZoom)) *.* rotateV (cam ^. camRot) p - ----- | The mouse position in map coordinates ---mouseCartePos :: World -> Point2 ---mouseCartePos w = (thehud ^. carteCenter) --- +.+ --- (1 / (thehud ^. carteZoom)) --- *.* rotateV (thehud ^. carteRot) (_mousePos w) --- where --- thehud = w ^. cWorld . lWorld . hud +screenToWorldPos cam p = + (cam ^. camCenter) + (1 / (cam ^. camZoom)) *.* rotateV (cam ^. camRot) p diff --git a/src/Dodge/Data/HUD.hs b/src/Dodge/Data/HUD.hs index ae6aa47e3..7b85e2e66 100644 --- a/src/Dodge/Data/HUD.hs +++ b/src/Dodge/Data/HUD.hs @@ -34,9 +34,6 @@ data HUD = HUD , _diSelection :: Maybe Selection , _diInvFilter :: Maybe String , _diCloseFilter :: Maybe String - , _carteCenter :: Point2 - , _carteZoom :: Float - , _carteRot :: Float , _closeItems :: [NewInt ItmInt] , _closeButtons :: [Int] } diff --git a/src/Dodge/Data/SelectionList.hs b/src/Dodge/Data/SelectionList.hs index e6264f0e0..3daf399fc 100644 --- a/src/Dodge/Data/SelectionList.hs +++ b/src/Dodge/Data/SelectionList.hs @@ -17,7 +17,7 @@ data ListDisplayParams = ListDisplayParams } data CursorDisplay - = BoundaryCursor {_cursSides :: [CardinalPoint]} + = BoundaryCursor [CardinalPoint] | BackdropCursor data SectionCursor = SectionCursor @@ -53,4 +53,4 @@ makeLenses ''ListDisplayParams makeLenses ''SelectionItem makeLenses ''SelSection makeLenses ''SectionCursor -makeLenses ''CursorDisplay +makePrisms ''CursorDisplay diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index ee470fd49..7502a8c9c 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -164,9 +164,6 @@ defaultHUD = , _diSelection = Just (Sel 1 0 mempty) , _diInvFilter = mempty , _diCloseFilter = mempty - , _carteCenter = V2 0 0 - , _carteZoom = 0.5 - , _carteRot = 0 , _closeItems = mempty , _closeButtons = mempty } diff --git a/src/Dodge/Render/MenuScreen.hs b/src/Dodge/Render/MenuScreen.hs index c263ee286..4b3a3d53b 100644 --- a/src/Dodge/Render/MenuScreen.hs +++ b/src/Dodge/Render/MenuScreen.hs @@ -11,29 +11,23 @@ import Dodge.Render.List import Dodge.ScreenPos import Picture -drawMenuScreen :: Config -> Maybe Int -> ScreenLayer -> Picture -drawMenuScreen cf mi = \case - OptionScreen{_scTitle = s, _scSelectionList = l} -> drawOptions cf s mi l - InputScreen inputstr -> drawInputMenu cf ('>' : inputstr) +drawMenuScreen :: Maybe Int -> ScreenLayer -> Config -> Picture +drawMenuScreen mi = \case + OptionScreen{_scTitle = s, _scSelectionList = l} -> drawOptions s mi l + InputScreen inputstr -> drawInputMenu ('>' : inputstr) -drawInputMenu :: Config -> String -> Picture -drawInputMenu cf s = darkenBackground cf <> drawTitle cf s +drawInputMenu :: String -> Config -> Picture +drawInputMenu s cf = darkenBackground cf <> drawTitle cf s -drawOptions :: Config -> String -> Maybe Int -> [SelectionItem a] -> Picture -drawOptions cf title msel sl = +drawOptions :: String -> Maybe Int -> [SelectionItem a] -> Config -> Picture +drawOptions title msel sl cf = darkenBackground cf <> drawTitle cf title <> drawSelectionList menuLDP cf sl <> translateScreenPos cf (menuLDP ^. ldpPos) - ( drawCursorAt - msel - sl - menuLDP - 50 - (BoundaryCursor [North, South]) - ) + (drawCursorAt msel sl menuLDP 50 (BoundaryCursor [North, South])) darkenBackground :: Config -> Picture darkenBackground = color (withAlpha 0.5 black) . polygon . reverse . screenBox diff --git a/src/Dodge/Render/Picture.hs b/src/Dodge/Render/Picture.hs index d1f7e12cc..dd96185e5 100644 --- a/src/Dodge/Render/Picture.hs +++ b/src/Dodge/Render/Picture.hs @@ -1,7 +1,6 @@ {-# LANGUAGE LambdaCase #-} -module Dodge.Render.Picture ( - fixedCoordPictures, -) where + +module Dodge.Render.Picture (fixedCoordPictures) where import Control.Lens import Data.Maybe @@ -62,18 +61,18 @@ fpsText x = color col . text $ "ms/frame " ++ show x | otherwise = red drawMenuOrHUD :: Config -> Universe -> Picture -drawMenuOrHUD cfig u = case u ^. uvScreenLayers of +drawMenuOrHUD cf u = case u ^. uvScreenLayers of [] -> drawHUD (u ^. uvConfig) (u ^. uvWorld) - (x : _) -> drawMenuScreen cfig (u ^? uvWorld . input . mouseContext . mcoMenuClick) x + (x : _) -> drawMenuScreen (u ^? uvWorld . input . mouseContext . mcoMenuClick) x cf drawConcurrentMessage :: Universe -> Picture drawConcurrentMessage u = - translate 0 (50 - halfHeight cfig) + translate 0 (50 - halfHeight cf) . stackPicturesAt . map (centerText . f) $ u ^.. uvSideEffects . each where - cfig = _uvConfig u + cf = _uvConfig u f (RunningSideEffect ce) = ce ++ " IN PROGRESS" f x = _ceString x ++ " QUEUED" @@ -131,43 +130,32 @@ drawCursorByTerminalStatus = \case _ -> drawEmptySet 5 drawQuitTerminal :: Float -> Picture -drawQuitTerminal x = fold - [ line [V2 x x, V2 (- x) (- x)] - , line [V2 x (-x), V2 (- x) x] - , polygonWire (square x) - ] +drawQuitTerminal x = + line [V2 x x, V2 (- x) (- x)] + <> line [V2 x (- x), V2 (- x) x] + <> polygonWire (square x) drawEmptySet :: Float -> Picture -drawEmptySet x = - fold - [ line [V2 x x, V2 (- x) (- x)] - , circle x - ] +drawEmptySet x = line [V2 x x, V2 (- x) (- x)] <> circle x drawReturn :: Float -> Picture drawReturn x = - fold - [ line [V2 0 0, V2 y y] - , line [V2 0 0, V2 y (- y)] - , line [V2 0 0, V2 (2 * y) 0] - , line [V2 (2 * y) 0, V2 (2 * y) (2 * x)] - ] + line [V2 0 0, V2 y y] + <> line [V2 0 0, V2 y (- y)] + <> line [V2 0 0, V2 (2 * y) 0] + <> line [V2 (2 * y) 0, V2 (2 * y) (2 * x)] where y = 0.7 * x ---drawReturn = scale 0.1 0.1 . translate (-50) (-100) $ text [toEnum 153] - drawPlus :: Float -> Picture drawPlus x = fold [line [V2 (- x) 0, V2 x 0], line [V2 0 (- x), V2 0 x]] drawMenuClick :: Float -> Picture drawMenuClick z = - fold - [ line [V2 y 0, V2 x 0] - , line [V2 ny 0, V2 nx 0] - , line [V2 0 ny, V2 0 nx] - , line [V2 0 y, V2 0 x] - ] + line [V2 y 0, V2 x 0] + <> line [V2 ny 0, V2 nx 0] + <> line [V2 0 ny, V2 0 nx] + <> line [V2 0 y, V2 0 x] where x = 0.5 * z y = x + z @@ -176,12 +164,10 @@ drawMenuClick z = drawMenuCursor :: Float -> Picture drawMenuCursor z = - fold - [ line [V2 y 0, V2 x 0] - , line [V2 ny 0, V2 nx 0] - , line [V2 0 ny, V2 0 nx] - , line [V2 0 y, V2 0 x] - ] + line [V2 y 0, V2 x 0] + <> line [V2 ny 0, V2 nx 0] + <> line [V2 0 ny, V2 0 nx] + <> line [V2 0 y, V2 0 x] where x = z y = x + z @@ -278,12 +264,10 @@ drawCombFilter x = drawGapPlus :: Float -> Picture drawGapPlus x = - fold - [ line [V2 (-1.5 * x) 0, V2 (-0.5 * x) 0] - , line [V2 (0.5 * x) 0, V2 (1.5 * x) 0] - , line [V2 (0.5 * x) (- x), V2 (0.5 * x) x] - , line [V2 (-0.5 * x) (- x), V2 (-0.5 * x) x] - ] + line [V2 (-1.5 * x) 0, V2 (-0.5 * x) 0] + <> line [V2 (0.5 * x) 0, V2 (1.5 * x) 0] + <> line [V2 (0.5 * x) (- x), V2 (0.5 * x) x] + <> line [V2 (-0.5 * x) (- x), V2 (-0.5 * x) x] aimDelaySweep :: Universe -> Picture aimDelaySweep u = fold $ do @@ -297,7 +281,15 @@ drawAimSweep cr w = fold $ do a <- safeArgV (mwp -.- p) return $ uncurryV translate (worldPosToScreen campos p) $ - arcFull (a - rot) 10 white (a + diffAngles cdir a - rot) 1 white (5 + dist mwp p * campos ^. camZoom) white + arcFull + (a - rot) + 10 + white + (a + diffAngles cdir a - rot) + 1 + white + (5 + dist mwp p * campos ^. camZoom) + white where cdir = _crDir cr rot = campos ^. camRot diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 0333d29d2..2df3d9321 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1,10 +1,4 @@ ---{-# LANGUAGE BangPatterns #-} {-# LANGUAGE LambdaCase #-} - -{- | -Module : Dodge.Update -Description : Simulation update --} module Dodge.Update (updateUniverse) where import Color @@ -37,7 +31,6 @@ import Dodge.Laser.Update import Dodge.LinearShockwave.Update import Dodge.ListDisplayParams import Dodge.Machine.Update ---import Dodge.Menu import Dodge.ModificationEffect import Dodge.PressPlate import Dodge.Projectile.Update @@ -161,18 +154,14 @@ updateUniverseLast u = updateUniverseMid :: Universe -> Universe updateUniverseMid u = case _uvScreenLayers u of (OptionScreen{_scOptionFlag = LoadingScreen} : _) -> u - -- (sl@OptionScreen{_scOptionFlag = GameOverOptions} : _) -> u & updateUseInputOnScreen sl (sl : _) -> u & uvWorld . unpauseClock .~ 0 & updateUseInputOnScreen sl [] -> (uvWorld . unpauseClock +~ 1) . timeFlowUpdate . updateUseInputInGame - . over - uvWorld - (updateMouseInGame (u ^. uvConfig)) $ over uvWorld - (updateCamera (u ^. uvConfig)) + (updateMouseInGame (u ^. uvConfig) . (updateCamera (u ^. uvConfig))) u timeFlowUpdate :: Universe -> Universe @@ -184,12 +173,11 @@ timeFlowUpdate u = case u ^. uvWorld . timeFlow of over uvWorld (doTimeScroll smoothing) u CameraScrollTimeFlow{} -> u RewindLeftClick 0 _ -> u & uvWorld . timeFlow .~ NormalTimeFlow - RewindLeftClick _ _ -> over uvWorld scrollTimeBack u -- & uvWorld . cWorld . timeFlow .~ NormalTimeFlow + RewindLeftClick _ _ -> over uvWorld scrollTimeBack u RespawnDelay{} -> functionalUpdate u PausedTimeFlow _ itmloc -> over uvWorld (pauseTime itmloc) u pauseTime :: NewInt ItmInt -> World -> World ---pauseTime itmloc w pauseTime _ w -- | justPressedButtonLeft || outofcharge = w & timeFlow .~ NormalTimeFlow | justPressedButtonLeft = w & timeFlow .~ NormalTimeFlow @@ -228,16 +216,10 @@ scrollTimeBack w = case w ^? pastWorlds . _head of & mupdateitem x _ -> w where - --mupdateitem x = fromMaybe id $ do mupdateitem _ = fromMaybe id $ do - --i <- w ^? timeFlow . scrollItemID . unNInt _ <- w ^? timeFlow . scrollItemID . unNInt - -- let pointituse = pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix i) . itUse return id --- (pointituse . leftConsumption . wpCharge .~ (x -1)) --- . (pointituse . leftHammer .~ HammerDown) - scrollTimeForward :: World -> World scrollTimeForward w = case w ^? timeFlow . futureWorlds . _head of Nothing -> w @@ -250,9 +232,8 @@ scrollTimeForward w = case w ^? timeFlow . futureWorlds . _head of where ramount = (w ^?! timeFlow . reverseAmount) + 1 mupdateitem = fromMaybe id $ do - --i <- w ^? timeFlow . scrollItemID . unNInt _ <- w ^? timeFlow . scrollItemID . unNInt - return id -- pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix i) . itUse . leftConsumption . wpCharge .~ ramount + return id -- | The update step. functionalUpdate :: Universe -> Universe @@ -477,7 +458,8 @@ pbFlicker pt = d = 4 * fromIntegral (10 + abs ((_pbTimer pt `mod` 20) - 10)) zoneClouds :: World -> World -zoneClouds w = w & clZoning .~ foldl' (flip zoneCloud) mempty (w ^. cWorld . lWorld . clouds) +zoneClouds w = w + & clZoning .~ foldl' (flip zoneCloud) mempty (w ^. cWorld . lWorld . clouds) zoneDusts :: World -> World zoneDusts w = w & dsZoning .~ foldl' (flip zoneDust) mempty (w ^. cWorld . lWorld . dusts) @@ -533,13 +515,9 @@ updateCreatureSoundPositions w = updateIMl :: (World -> IM.IntMap a) -> (a -> a -> World -> World) -> World -> World updateIMl fim fup w = alaf Endo foldMap (dbArg fup) (fim w) w ---updateIMl fim fup w = foldl' (flip $ dbArg fup) w (fim w) - updateIMl' :: (World -> IM.IntMap a) -> (a -> World -> World) -> World -> World updateIMl' fim fup w = alaf Endo foldMap fup (fim w) w ---updateIMl' fim fup w = foldl' (flip fup) w (fim w) - updateCreatureGroups :: World -> World updateCreatureGroups w = w & cWorld . lWorld . creatureGroups @@ -867,13 +845,12 @@ dustSpringVel a v b radDist = 10 simpleCrSprings :: World -> World -simpleCrSprings w = IM.foldl' (flip crSpring) w $ IM.filter (\cr -> _crZ cr >= 0) $ w ^. cWorld . lWorld . creatures +simpleCrSprings w = IM.foldl' (flip crSpring) w + $ IM.filter (\cr -> _crZ cr >= 0) $ w ^. cWorld . lWorld . creatures -- note that this may in rare cases not push creatures away from each other crSpring :: Creature -> World -> World -crSpring c w = foldl' (flip $ crCrSpring c) w cs - where - cs = crsNearPoint (_crPos c) w +crSpring c w = foldl' (flip $ crCrSpring c) w $ crsNearPoint (_crPos c) w crCrSpring :: Creature -> Creature -> World -> World crCrSpring c1 c2 diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 7d422536b..30cfdc7c0 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -43,27 +43,25 @@ import NewInt import SDL updateUseInputInGame :: Universe -> Universe -updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud of - HUD{_subInventory = si, _diSelection = disel} -> case si of - DisplayTerminal tmid -> updateKeysInTerminal tmid u - CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _ _))} -> +updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . subInventory of + DisplayTerminal tmid -> updateKeysInTerminal tmid u + CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _ _))} -> + u + & tohud . subInventory %~ docombineregexinput sss msel + & uvWorld . worldEventFlags . at CombineInventoryChange ?~ () + _ | disel == Just (-1) -> u - & tohud . subInventory %~ docombineregexinput sss msel - & uvWorld . worldEventFlags . at CombineInventoryChange ?~ () - _ - | disel ^? _Just . slSec == Just (-1) -> - u - & tohud %~ dodisplayregexinput diInvFilter diInvFilter (-1) - & uvWorld . worldEventFlags . at InventoryChange ?~ () - & uvWorld %~ setInvPosFromSS - _ - | disel ^? _Just . slSec == Just 2 -> - u - & tohud %~ dodisplayregexinput diCloseFilter diCloseFilter 2 - & uvWorld . worldEventFlags . at InventoryChange ?~ () - & uvWorld %~ setInvPosFromSS - _ -> updateKeysInGame u + & tohud %~ dodisplayregexinput diInvFilter diInvFilter (-1) + & uvWorld . worldEventFlags . at InventoryChange ?~ () + & uvWorld %~ setInvPosFromSS + _ | disel == Just 2 -> + u + & tohud %~ dodisplayregexinput diCloseFilter diCloseFilter 2 + & uvWorld . worldEventFlags . at InventoryChange ?~ () + & uvWorld %~ setInvPosFromSS + _ -> updateKeysInGame u where + disel = u ^? uvWorld . hud . diSelection . _Just . slSec tohud = uvWorld . hud dodisplayregexinput filterprism filterlens x di = fromMaybe di $ do sss <- di ^? diSections @@ -97,21 +95,22 @@ updateMouseInGame cfig w updateMouseHeldInGame :: Config -> World -> World updateMouseHeldInGame cfig w = case w ^. input . mouseContext of - OverInvDragSelect{} | ButtonRight `M.member` (w ^. input . mouseButtons) -> + OverInvDragSelect{} + | ButtonRight `M.member` (w ^. input . mouseButtons) -> w & input . mouseContext .~ MouseGameRotate OverInvDragSelect (Just sstart) _ -> let sss = w ^. hud . diSections msel = inverseSelNumPos cfig invDP (w ^. input . mousePos) sss - in case msel of - Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing - Just (i, j) - | i == fst sstart -> w & input . mouseContext . mcoSelEnd ?~ j - | i < fst sstart -> w & input . mouseContext . mcoSelEnd ?~ 0 - | otherwise -> - w & input . mouseContext . mcoSelEnd - .~ fmap - fst - (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) + in case msel of + Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing + Just (i, j) + | i == fst sstart -> w & input . mouseContext . mcoSelEnd ?~ j + | i < fst sstart -> w & input . mouseContext . mcoSelEnd ?~ 0 + | otherwise -> + w & input . mouseContext . mcoSelEnd + .~ fmap + fst + (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) -- not sure how the above performs when filtering... OverInvDragSelect Nothing _ -> fromMaybe w $ do sss <- w ^? hud . diSections @@ -275,9 +274,9 @@ endCombineRegex w = ssSetCursor (ssLookupDown 0 j) sss where sss = w ^. hud . subInventory . ciSections j = fromMaybe 0 $ do - itms <- sss ^? ix 0 . ssItems - (k, _) <- IM.lookupMin itms - return (k -1) + itms <- sss ^? ix 0 . ssItems + (k, _) <- IM.lookupMin itms + return (k -1) startDrag :: (Int, Int) -> World -> World startDrag (a, b) w = setcontext $ case w ^? hud . diSelection . _Just of @@ -387,8 +386,7 @@ updateKeysInTerminal tmid u = fromMaybe deactivate $ do x <- u ^? uvWorld . cWorld . lWorld . buttons . ix (tm ^. tmButtonID) . btPos y <- u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crPos case tm ^. tmStatus of - _ - | dist x y > 40 || not (hasButtonLOS x y (u ^. uvWorld)) -> Nothing + _ | dist x y > 40 || not (hasButtonLOS x y (u ^. uvWorld)) -> Nothing TerminalDeactivated -> Nothing TerminalTextInput{} -> Just $ updateKeysTextInputTerminal tmid u TerminalPressTo{} -> Just $ updateKeyContinueTerminal tmid u @@ -398,6 +396,7 @@ updateKeysInTerminal tmid u = fromMaybe deactivate $ do updateKeyContinueTerminal :: Int -> Universe -> Universe updateKeyContinueTerminal tmid u + | isJust (u ^. uvWorld . input . pressedKeys . at ScancodeEscape) = u | elem 0 $ u ^. uvWorld . input . pressedKeys = u & uvWorld %~ continueTerminal tmid | otherwise = u @@ -417,7 +416,7 @@ updateKeysTextInputTerminal tmid u = uvWorld %~ terminalReturnEffect tmid | otherwise = id tryTabComplete - | u ^. uvWorld . input . pressedKeys . at ScancodeTab == Just 0 = + | u ^. uvWorld . input . pressedKeys . at ScancodeTab == Just 0 = uvWorld . cWorld . lWorld . terminals . ix tmid %~ tabComplete (u ^. uvWorld) | otherwise = id @@ -536,7 +535,8 @@ getCloseObj :: World -> Maybe (Either (NewInt ItmInt) Button) getCloseObj w = getSelectedCloseObj w <|> topcitem <|> topcbut where topcitem = do - k <- (w ^? hud . diSections . ix 3 . ssItems) + k <- + (w ^? hud . diSections . ix 3 . ssItems) >>= (fmap fst . IM.lookupMin) Left <$> w ^? hud . closeItems . ix k topcbut = do @@ -545,8 +545,15 @@ getCloseObj w = getSelectedCloseObj w <|> topcitem <|> topcbut tryCombine :: (Int, Int) -> World -> World tryCombine (i, j) w = fromMaybe w $ do - CombItem is it <- w ^? hud . subInventory - . ciSections . ix i . ssItems . ix j . siPayload . _Just + CombItem is it <- + w + ^? hud . subInventory + . ciSections + . ix i + . ssItems + . ix j + . siPayload + . _Just p <- w ^? cWorld . lWorld . creatures . ix 0 . crPos return $ createItemYou it (foldr (destroyInvItem 0 . NInt) w (sort is)) diff --git a/tags b/tags index 7db90be43..799287379 100644 --- a/tags +++ b/tags @@ -600,7 +600,7 @@ InputScreen src/Dodge/Data/Universe.hs 92;" C Inspect_wall src/Dodge/Data/Config.hs 92;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t -IntID src/Dodge/Data/Universe.hs 113;" t +IntID src/Dodge/Data/Universe.hs 110;" t IntImp src/Dodge/Data/CreatureEffect.hs 20;" t Intention src/Dodge/Data/Creature.hs 69;" t IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 107;" C @@ -720,9 +720,9 @@ MICROCHIP src/Dodge/Data/Item/Combine.hs 72;" C MICROPHONE src/Dodge/Data/Item/Combine.hs 84;" C MINIDISPLAY src/Dodge/Data/Item/Combine.hs 77;" C MINIGUNX src/Dodge/Data/Item/Combine.hs 152;" C -MODBlockedString src/Dodge/Data/Universe.hs 99;" C -MODString src/Dodge/Data/Universe.hs 98;" C -MODStringOption src/Dodge/Data/Universe.hs 100;" C +MODBlockedString src/Dodge/Data/Universe.hs 96;" C +MODString src/Dodge/Data/Universe.hs 95;" C +MODStringOption src/Dodge/Data/Universe.hs 97;" C MOTOR src/Dodge/Data/Item/Combine.hs 64;" C MP2Ac src/Dodge/Data/CreatureEffect.hs 56;" t MP2NoAction src/Dodge/Data/CreatureEffect.hs 56;" C @@ -772,8 +772,8 @@ Medium src/Shape/Data.hs 30;" C Melee src/Dodge/Data/ActionPlan.hs 41;" C MeleeStrike src/Dodge/Data/ActionPlan.hs 192;" C Memory src/Dodge/Data/Creature/Memory.hs 13;" t -MenuOption src/Dodge/Data/Universe.hs 102;" t -MenuOptionDisplay src/Dodge/Data/Universe.hs 97;" t +MenuOption src/Dodge/Data/Universe.hs 99;" t +MenuOptionDisplay src/Dodge/Data/Universe.hs 94;" t MetaBranch src/Dodge/Data/MetaTree.hs 16;" t MetaNode src/Dodge/Data/MetaTree.hs 12;" t MetaTree src/Dodge/Data/MetaTree.hs 9;" t @@ -1196,7 +1196,7 @@ SecretCabal src/Dodge/Data/Scenario.hs 44;" C SectionCursor src/Dodge/Data/SelectionList.hs 23;" t SeeAbove src/Dodge/Data/Wall.hs 42;" C SeeThrough src/Dodge/Data/Wall.hs 41;" C -Sel src/Dodge/Data/HUD.hs 44;" C +Sel src/Dodge/Data/HUD.hs 41;" C SelCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 33;" C SelCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 31;" C SelItem src/Dodge/Data/SelectionList.hs 42;" C @@ -1204,7 +1204,7 @@ SelNothing src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 29;" C SelSection src/Dodge/Data/SelectionList.hs 29;" t Select_creature src/Dodge/Data/Config.hs 94;" C SelectedItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 24;" C -Selection src/Dodge/Data/HUD.hs 44;" t +Selection src/Dodge/Data/HUD.hs 41;" t SelectionItem src/Dodge/Data/SelectionList.hs 41;" t SelectionWidth src/Dodge/Data/SelectionList.hs 39;" t SelfTree src/Dodge/Data/MetaTree.hs 18;" t @@ -1379,8 +1379,8 @@ ToPlaySound src/Sound/Data.hs 35;" t ToStart src/Sound/Data.hs 26;" C ToStartMenu src/Sound/Data.hs 29;" C ToStop src/Sound/Data.hs 28;" C -Toggle src/Dodge/Data/Universe.hs 103;" C -Toggle2 src/Dodge/Data/Universe.hs 107;" C +Toggle src/Dodge/Data/Universe.hs 100;" C +Toggle2 src/Dodge/Data/Universe.hs 104;" C ToggleSF src/Dodge/Data/ComposedItem.hs 38;" C TopDT src/Dodge/Data/DoubleTree.hs 85;" C TopLDT src/Dodge/Data/DoubleTree.hs 43;" C @@ -1636,9 +1636,6 @@ _camViewFrom src/Dodge/Data/Camera.hs 29;" f _camZoom src/Dodge/Data/Camera.hs 26;" f _canID src/Dodge/Data/LWorld.hs 169;" f _carriage src/Dodge/Data/Creature/Stance.hs 18;" f -_carteCenter src/Dodge/Data/HUD.hs 37;" f -_carteRot src/Dodge/Data/HUD.hs 39;" f -_carteZoom src/Dodge/Data/HUD.hs 38;" f _cdtCloseLeft src/Dodge/Data/DoubleTree.hs 88;" f _cdtCloseLeft src/Dodge/Data/DoubleTree.hs 96;" f _cdtCloseRight src/Dodge/Data/DoubleTree.hs 90;" f @@ -1679,8 +1676,8 @@ _cldtUp src/Dodge/Data/DoubleTree.hs 45;" f _cldtUp src/Dodge/Data/DoubleTree.hs 53;" f _clickPos src/Dodge/Data/Input.hs 42;" f _clickWorldPos src/Dodge/Data/Input.hs 44;" f -_closeButtons src/Dodge/Data/HUD.hs 41;" f -_closeItems src/Dodge/Data/HUD.hs 40;" f +_closeButtons src/Dodge/Data/HUD.hs 38;" f +_closeItems src/Dodge/Data/HUD.hs 37;" f _cloudEBO src/Data/Preload/Render.hs 51;" f _cloudShader src/Data/Preload/Render.hs 50;" f _cloudVBO src/Data/Preload/Render.hs 49;" f @@ -1740,7 +1737,6 @@ _creatures src/Dodge/Data/LWorld.hs 100;" f _csLinks src/Dodge/Data/RoomCluster.hs 10;" f _currentArc src/Dodge/Data/Item/Params.hs 17;" f _currentFoot src/Dodge/Data/Creature/Stance.hs 27;" f -_cursSides src/Dodge/Data/SelectionList.hs 20;" f _cwGen src/Dodge/Data/CWorld.hs 25;" f _cwTiles src/Dodge/Data/CWorld.hs 27;" f _cwgGameRooms src/Dodge/Data/CWorld.hs 37;" f @@ -2059,13 +2055,13 @@ _meleeCooldown src/Dodge/Data/Creature/Misc.hs 70;" f _meleeTarget src/Dodge/Data/ActionPlan.hs 187;" f _mgField src/Dodge/Data/Magnet.hs 25;" f _mgPos src/Dodge/Data/Magnet.hs 24;" f -_moEff src/Dodge/Data/Universe.hs 104;" f -_moEff1 src/Dodge/Data/Universe.hs 108;" f -_moEff2 src/Dodge/Data/Universe.hs 109;" f -_moString src/Dodge/Data/Universe.hs 105;" f -_moString src/Dodge/Data/Universe.hs 110;" f -_modOption src/Dodge/Data/Universe.hs 100;" f -_modString src/Dodge/Data/Universe.hs 98;" 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 +_moString src/Dodge/Data/Universe.hs 102;" f +_moString src/Dodge/Data/Universe.hs 107;" f +_modOption src/Dodge/Data/Universe.hs 97;" f +_modString src/Dodge/Data/Universe.hs 95;" f _modifications src/Dodge/Data/LWorld.hs 134;" f _mouseButtons src/Dodge/Data/Input.hs 38;" f _mouseButtonsReleased src/Dodge/Data/Input.hs 39;" f @@ -2283,8 +2279,7 @@ _rsSource src/Dodge/Data/RadarSweep.hs 26;" f _rsTimer src/Dodge/Data/RadarSweep.hs 23;" f _scAvailableLines src/Dodge/Data/Universe.hs 89;" f _scDisplayTime src/Dodge/Data/Universe.hs 90;" f -_scFooter src/Dodge/Data/Universe.hs 94;" f -_scInput src/Dodge/Data/Universe.hs 93;" f +_scInput src/Dodge/Data/Universe.hs 92;" f _scOffset src/Dodge/Data/Universe.hs 85;" f _scOptionFlag src/Dodge/Data/Universe.hs 87;" f _scOptions src/Dodge/Data/Universe.hs 84;" f @@ -2341,9 +2336,9 @@ _skVel src/Dodge/Data/Spark.hs 15;" f _skinHead src/Dodge/Data/Creature/Misc.hs 78;" f _skinLower src/Dodge/Data/Creature/Misc.hs 80;" f _skinUpper src/Dodge/Data/Creature/Misc.hs 79;" f -_slInt src/Dodge/Data/HUD.hs 44;" f -_slSec src/Dodge/Data/HUD.hs 44;" f -_slSet src/Dodge/Data/HUD.hs 44;" f +_slInt src/Dodge/Data/HUD.hs 41;" f +_slSec src/Dodge/Data/HUD.hs 41;" f +_slSet src/Dodge/Data/HUD.hs 41;" f _smoothScrollAmount src/Dodge/Data/Input.hs 41;" f _soundAngDist src/Sound/Data.hs 49;" f _soundChannel src/Sound/Data.hs 48;" f @@ -2600,10 +2595,10 @@ addToTrunk src/TreeHelp.hs 156;" f addWarningTerminal src/Dodge/Room/Warning.hs 53;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 422;" f +advanceScrollAmount src/Dodge/Update.hs 403;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -aimDelaySweep src/Dodge/Render/Picture.hs 288;" f +aimDelaySweep src/Dodge/Render/Picture.hs 272;" f aimStanceInfo src/Dodge/Item/Info.hs 244;" f aimTurn src/Dodge/Creature/YourControl.hs 180;" f airlock src/Dodge/Room/Airlock.hs 23;" f @@ -2820,7 +2815,6 @@ 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 24;" f -cartePosToScreen src/Dodge/Base/Coordinate.hs 37;" f cdtPropagateFold src/Dodge/DoubleTree.hs 407;" f cenLasTur src/Dodge/Room/LasTurret.hs 24;" f centerText src/Picture/Base.hs 184;" f @@ -2847,13 +2841,13 @@ checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 65;" f checkDeath src/Dodge/Creature/Update.hs 68;" f checkDeath' src/Dodge/Creature/Update.hs 71;" f -checkEndGame src/Dodge/Update.hs 776;" f +checkEndGame src/Dodge/Update.hs 757;" 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 18;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 93;" f -checkTermDist src/Dodge/Update.hs 334;" f +checkTermDist src/Dodge/Update.hs 315;" 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 @@ -2878,7 +2872,7 @@ circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f circleSolidCol src/Picture/Base.hs 168;" f clAlt src/Dodge/Cloud.hs 5;" f -clClSpringVel src/Dodge/Update.hs 849;" f +clClSpringVel src/Dodge/Update.hs 830;" f clColor src/Shader/Poke/Cloud.hs 35;" f clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f clampPath src/Dodge/Room/Procedural.hs 165;" f @@ -2907,7 +2901,7 @@ closestCreatureID src/Dodge/Debug.hs 118;" f closestPointOnLine src/Geometry/Intersect.hs 281;" f closestPointOnLineParam src/Geometry/Intersect.hs 297;" f closestPointOnSeg src/Geometry/Intersect.hs 312;" f -cloudEffect src/Dodge/Update.hs 801;" f +cloudEffect src/Dodge/Update.hs 782;" f cloudPoisonDamage src/Dodge/Update/Cloud.hs 10;" f clsNearCirc src/Dodge/Zoning/Cloud.hs 18;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f @@ -2919,7 +2913,7 @@ cogRaised src/Dodge/Creature/Perception.hs 102;" f colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 18;" f collectDamageTypes src/Dodge/Damage.hs 53;" f -collectInvItems src/Dodge/Update/Input/InGame.hs 297;" f +collectInvItems src/Dodge/Update/Input/InGame.hs 296;" f collide3 src/Dodge/Base/Collide.hs 119;" f collide3Chasm src/Dodge/Base/Collide.hs 103;" f collide3Chasms src/Dodge/Base/Collide.hs 96;" f @@ -2959,13 +2953,13 @@ composeTree src/Dodge/Tree/Compose.hs 46;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 640;" f conEffects src/Dodge/Concurrent.hs 12;" f conLDTToConDT src/Dodge/DoubleTree.hs 22;" f -concurrentIS src/Dodge/Update/Input/InGame.hs 289;" f +concurrentIS src/Dodge/Update/Input/InGame.hs 288;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f constDPic src/Dodge/Debug.hs 62;" f constructEdges src/Polyhedra.hs 34;" f constructEdgesList src/Polyhedra.hs 43;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f -continueTerminal src/Dodge/Update/Input/InGame.hs 404;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 403;" f convexHull src/Geometry/Polygon.hs 110;" f convexHullSafe src/Geometry/Polygon.hs 117;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -2986,7 +2980,7 @@ crAwayFromPost src/Dodge/Creature/Test.hs 82;" f crBlips src/Dodge/RadarSweep.hs 87;" f crCamouflage src/Dodge/Creature/Picture.hs 33;" f crCanSeeCr src/Dodge/Creature/Test.hs 51;" f -crCrSpring src/Dodge/Update.hs 878;" f +crCrSpring src/Dodge/Update.hs 859;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 38;" f @@ -3014,7 +3008,7 @@ crRad src/Dodge/Creature/Radius.hs 7;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 72;" f crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 873;" f +crSpring src/Dodge/Update.hs 854;" f crStratConMatches src/Dodge/Creature/Test.hs 77;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f crUpdate' src/Dodge/Creature/Update.hs 57;" f @@ -3101,7 +3095,7 @@ damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 35;" f damageWall src/Dodge/Wall/Damage.hs 15;" f damsToExpBarrel src/Dodge/Barreloid.hs 46;" f dark src/Color.hs 108;" f -darkenBackground src/Dodge/Render/MenuScreen.hs 52;" f +darkenBackground src/Dodge/Render/MenuScreen.hs 32;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 314;" f @@ -3226,11 +3220,11 @@ dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f displayConfig src/Dodge/Menu.hs 212;" f displayControls src/Dodge/Menu.hs 223;" f -displayFrameTicks src/Dodge/Render/Picture.hs 46;" f +displayFrameTicks src/Dodge/Render/Picture.hs 45;" f displayFreeSlots src/Dodge/DisplayInventory.hs 192;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 179;" f -displayTerminalLineString src/Dodge/Update.hs 485;" f +displayTerminalLineString src/Dodge/Update.hs 466;" f dist src/Geometry/Vector.hs 190;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f @@ -3269,7 +3263,7 @@ doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 40;" f doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 48;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 56;" f doDrWdWd src/Dodge/DrWdWd.hs 16;" f -doDrag src/Dodge/Update/Input/InGame.hs 128;" f +doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f doDrawing' src/Dodge/Render.hs 45;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f @@ -3280,7 +3274,7 @@ doInPlacements src/Dodge/Layout.hs 81;" f doIndividualPlacements src/Dodge/Layout.hs 106;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f doIntImp src/Dodge/CreatureEffect.hs 24;" f -doItemTimeScroll src/Dodge/Update.hs 203;" f +doItemTimeScroll src/Dodge/Update.hs 191;" f doLoop src/Loop.hs 60;" f doMCrAc src/Dodge/CreatureEffect.hs 57;" f doMP2Ac src/Dodge/CreatureEffect.hs 73;" f @@ -3296,7 +3290,7 @@ doPropUpdates src/Dodge/Prop/Update.hs 34;" 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 449;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 448;" f doRoomInPlacements src/Dodge/Layout.hs 86;" f doRoomOutPlacements src/Dodge/Layout.hs 96;" f doRoomPlacements src/Dodge/Layout.hs 111;" f @@ -3309,7 +3303,7 @@ doTestDrawing src/Dodge/Render.hs 41;" 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 182;" f -doTimeScroll src/Dodge/Update.hs 208;" f +doTimeScroll src/Dodge/Update.hs 196;" f doTmWdWd src/Dodge/WorldEffect.hs 89;" f doWallRotate src/Dodge/Update/Camera.hs 220;" f doWdBl src/Dodge/WorldBool.hs 10;" f @@ -3317,7 +3311,7 @@ doWdCrBl src/Dodge/CreatureEffect.hs 37;" f doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f doWdWd src/Dodge/WorldEffect.hs 28;" f -doWorldEvents src/Dodge/Update.hs 431;" f +doWorldEvents src/Dodge/Update.hs 412;" 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 @@ -3336,9 +3330,9 @@ doublePairSet src/Geometry.hs 169;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 129;" f doubleV2 src/Geometry.hs 172;" f drawARHUD src/Dodge/Creature/State.hs 192;" f -drawAimSweep src/Dodge/Render/Picture.hs 295;" f +drawAimSweep src/Dodge/Render/Picture.hs 279;" f drawAllShadows src/Dodge/Shadows.hs 5;" f -drawArrowDown src/Dodge/Render/Picture.hs 220;" f +drawArrowDown src/Dodge/Render/Picture.hs 206;" f drawBaseMachine src/Dodge/Machine/Draw.hs 68;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 16;" f @@ -3351,9 +3345,9 @@ drawChasm src/Dodge/Render/ShapePicture.hs 45;" f drawCircCollisionTest src/Dodge/Debug/Picture.hs 117;" f drawCliff src/Dodge/Render/ShapePicture.hs 48;" f drawCollisionTest src/Dodge/Debug/Picture.hs 102;" f -drawCombFilter src/Dodge/Render/Picture.hs 268;" f +drawCombFilter src/Dodge/Render/Picture.hs 254;" f drawCombineInventory src/Dodge/Render/HUD.hs 182;" f -drawConcurrentMessage src/Dodge/Render/Picture.hs 69;" f +drawConcurrentMessage src/Dodge/Render/Picture.hs 68;" f drawCoord src/Dodge/Debug/Picture.hs 375;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f drawCrInfo src/Dodge/Debug/Picture.hs 396;" f @@ -3362,18 +3356,18 @@ drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 197;" f drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 71;" f -drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 125;" f +drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 124;" f drawDDATest src/Dodge/Debug/Picture.hs 302;" f drawDamSensor src/Dodge/Machine/Draw.hs 27;" f drawDoorPaths src/Dodge/Debug/Picture.hs 252;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 95;" f -drawDrag src/Dodge/Render/Picture.hs 199;" f -drawDragDrop src/Dodge/Render/Picture.hs 228;" f -drawDragPickup src/Dodge/Render/Picture.hs 237;" f -drawDragSelect src/Dodge/Render/Picture.hs 196;" f +drawDrag src/Dodge/Render/Picture.hs 185;" f +drawDragDrop src/Dodge/Render/Picture.hs 214;" f +drawDragPickup src/Dodge/Render/Picture.hs 223;" f +drawDragSelect src/Dodge/Render/Picture.hs 182;" f drawDragSelected src/Dodge/Render/HUD.hs 136;" f drawDragSelecting src/Dodge/Render/HUD.hs 153;" f -drawEmptySet src/Dodge/Render/Picture.hs 140;" f +drawEmptySet src/Dodge/Render/Picture.hs 138;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f drawEquipment src/Dodge/Creature/Picture.hs 127;" f drawExamineInventory src/Dodge/Render/HUD.hs 198;" f @@ -3381,18 +3375,17 @@ drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 269;" f drawFlame src/Dodge/Flame/Draw.hs 8;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 37;" f -drawFooterText src/Dodge/Render/MenuScreen.hs 72;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f -drawGapPlus src/Dodge/Render/Picture.hs 279;" f +drawGapPlus src/Dodge/Render/Picture.hs 265;" f drawGib src/Dodge/Prop/Draw.hs 39;" f drawHUD src/Dodge/Render/HUD.hs 51;" f -drawInputMenu src/Dodge/Render/MenuScreen.hs 22;" f +drawInputMenu src/Dodge/Render/MenuScreen.hs 19;" f drawInspectWall src/Dodge/Debug/Picture.hs 244;" f drawInspectWalls src/Dodge/Debug/Picture.hs 232;" f drawInventory src/Dodge/Render/HUD.hs 58;" f drawItemChildrenConnect src/Dodge/Render/HUD.hs 329;" f drawItemConnections src/Dodge/Render/HUD.hs 319;" f -drawJumpDown src/Dodge/Render/Picture.hs 191;" f +drawJumpDown src/Dodge/Render/Picture.hs 177;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLampCover src/Dodge/Prop/Draw.hs 55;" f drawLaser src/Dodge/Laser/Update.hs 29;" f @@ -3405,34 +3398,34 @@ drawListYoff src/Dodge/Render/List.hs 92;" f drawMachine src/Dodge/Machine/Draw.hs 16;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f drawMapperInventory src/Dodge/Render/HUD.hs 173;" f -drawMenuClick src/Dodge/Render/Picture.hs 163;" f -drawMenuCursor src/Dodge/Render/Picture.hs 177;" f -drawMenuOrHUD src/Dodge/Render/Picture.hs 64;" f -drawMenuScreen src/Dodge/Render/MenuScreen.hs 16;" f -drawMouseCursor src/Dodge/Render/Picture.hs 80;" f +drawMenuClick src/Dodge/Render/Picture.hs 153;" f +drawMenuCursor src/Dodge/Render/Picture.hs 165;" f +drawMenuOrHUD src/Dodge/Render/Picture.hs 63;" f +drawMenuScreen src/Dodge/Render/MenuScreen.hs 14;" f +drawMouseCursor src/Dodge/Render/Picture.hs 79;" f drawMouseOver src/Dodge/Render/HUD.hs 109;" f drawMousePosition src/Dodge/Debug/Picture.hs 365;" f drawMovingShape src/Dodge/Prop/Draw.hs 81;" f drawMovingShapeCol src/Dodge/Prop/Draw.hs 87;" f -drawOptions src/Dodge/Render/MenuScreen.hs 36;" f +drawOptions src/Dodge/Render/MenuScreen.hs 22;" f drawPathBetween src/Dodge/Debug/Picture.hs 200;" f drawPathEdge src/Dodge/Debug/Picture.hs 257;" f drawPathing src/Dodge/Debug/Picture.hs 438;" f -drawPlus src/Dodge/Render/Picture.hs 160;" f +drawPlus src/Dodge/Render/Picture.hs 150;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawProp src/Dodge/Prop/Draw.hs 26;" f drawProxSensor src/Dodge/Machine/Draw.hs 37;" f drawPulseBall src/Dodge/Render/ShapePicture.hs 54;" f -drawQuitTerminal src/Dodge/Render/Picture.hs 133;" f +drawQuitTerminal src/Dodge/Render/Picture.hs 132;" f drawRBOptions src/Dodge/Render/HUD.hs 251;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 14;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 38;" f -drawReturn src/Dodge/Render/Picture.hs 147;" f +drawReturn src/Dodge/Render/Picture.hs 141;" f drawRootCursor src/Dodge/Render/HUD.hs 76;" f drawSSCursor src/Dodge/SelectionSections/Draw.hs 35;" f drawSSMultiCursor src/Dodge/SelectionSections/Draw.hs 46;" f -drawSelect src/Dodge/Render/Picture.hs 256;" f +drawSelect src/Dodge/Render/Picture.hs 242;" f drawSelectionList src/Dodge/Render/List.hs 35;" f drawSelectionListBackground src/Dodge/Render/List.hs 51;" f drawSelectionSections src/Dodge/SelectionSections/Draw.hs 16;" f @@ -3450,11 +3443,11 @@ drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f drawTerminalDisplay src/Dodge/Render/HUD.hs 360;" f drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f drawText src/Picture/Base.hs 220;" f -drawTitle src/Dodge/Render/MenuScreen.hs 55;" f +drawTitle src/Dodge/Render/MenuScreen.hs 35;" f drawTitleBackground src/Dodge/Render/List.hs 44;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f drawTurret src/Dodge/Machine/Draw.hs 76;" f -drawVerticalDoubleArrow src/Dodge/Render/Picture.hs 211;" f +drawVerticalDoubleArrow src/Dodge/Render/Picture.hs 197;" f drawVerticalLampCover src/Dodge/Prop/Draw.hs 71;" f drawWall src/Dodge/Wall/Draw.hs 7;" f drawWallFace src/Dodge/Debug/Picture.hs 72;" f @@ -3491,7 +3484,7 @@ dtToRootIntMap' src/Dodge/DoubleTree.hs 153;" f dtToUpDownAdj src/Dodge/DoubleTree.hs 158;" f dummyMenuOption src/Dodge/Menu/Option.hs 72;" f dustColor src/Shader/Poke/Cloud.hs 71;" f -dustSpringVel src/Dodge/Update.hs 860;" f +dustSpringVel src/Dodge/Update.hs 841;" f ebColor src/Dodge/EnergyBall.hs 77;" f ebDamage src/Dodge/EnergyBall.hs 85;" f ebEffect src/Dodge/EnergyBall.hs 45;" f @@ -3512,8 +3505,8 @@ encircleCloseP src/Dodge/Creature/Boid.hs 36;" f encircleDistP src/Dodge/Creature/Boid.hs 22;" f encircleP src/Dodge/Creature/Boid.hs 28;" f endArcPos src/Dodge/Tesla.hs 87;" f -endCombineRegex src/Dodge/Update/Input/InGame.hs 273;" f -endRegex src/Dodge/Update/Input/InGame.hs 267;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 272;" f +endRegex src/Dodge/Update/Input/InGame.hs 266;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 592;" f enterCombineInv src/Dodge/DisplayInventory.hs 317;" f epText src/Dodge/Inventory/SelectionList.hs 76;" f @@ -3581,7 +3574,7 @@ fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 464;" f firstBreather src/Dodge/Room/Breather.hs 9;" f firstTrie src/SimpleTrie.hs 51;" f firstWorldLoad appDodge/Main.hs 78;" f -fixedCoordPictures src/Dodge/Render/Picture.hs 18;" f +fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 38;" f flameMuzzles src/Dodge/HeldUse.hs 317;" f @@ -3629,7 +3622,7 @@ forceField src/Dodge/Wall/ForceField.hs 7;" f forceFoldable src/StrictHelp.hs 7;" f forceSpine src/StrictHelp.hs 4;" f fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 29;" f -fpsText src/Dodge/Render/Picture.hs 54;" f +fpsText src/Dodge/Render/Picture.hs 53;" f fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 159;" f frag src/Shader/Data.hs 102;" f freeShaderPointers' src/Shader.hs 37;" f @@ -3642,7 +3635,7 @@ fromV3 src/Geometry/Data.hs 63;" f frontArmour src/Dodge/Item/Equipment.hs 38;" f fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 53;" f -functionalUpdate src/Dodge/Update.hs 258;" f +functionalUpdate src/Dodge/Update.hs 239;" f fuseFunc src/Dodge/Path.hs 150;" f fusePairs src/Dodge/Path.hs 153;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f @@ -3676,7 +3669,7 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 85;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 170;" f getBulletType src/Dodge/HeldUse.hs 924;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 535;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 534;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f @@ -3689,7 +3682,7 @@ getLaserDamage src/Dodge/HeldUse.hs 700;" f getLaserPhaseV src/Dodge/HeldUse.hs 697;" f getLinksOfType src/Dodge/RoomLink.hs 39;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 391;" f +getMenuMouseContext src/Dodge/Update.hs 372;" f getNodePos src/Dodge/Path.hs 31;" f getPJStabiliser src/Dodge/HeldUse.hs 1283;" f getPretty src/AesonHelp.hs 8;" f @@ -3908,7 +3901,7 @@ isAnimate src/Dodge/Creature/Test.hs 130;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 76;" f isElectrical src/Dodge/Machine/Update.hs 81;" f -isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 199;" f +isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 198;" f isInLnk src/Dodge/PlacementSpot.hs 168;" f isJust' src/MaybeHelp.hs 29;" f isLHS src/Geometry/LHS.hs 8;" f @@ -3918,7 +3911,7 @@ isNHS src/Geometry/Intersect.hs 51;" f isNothing' src/MaybeHelp.hs 33;" f isOnSeg src/Geometry.hs 240;" f isOutLnk src/Dodge/PlacementSpot.hs 173;" f -isOverTerminalScreen src/Dodge/Update.hs 402;" f +isOverTerminalScreen src/Dodge/Update.hs 383;" f isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f isPutID src/Dodge/Placement/Instance/Wall.hs 129;" f isRHS src/Geometry/LHS.hs 24;" f @@ -4196,8 +4189,8 @@ maybeClearPath src/Dodge/Block.hs 72;" f maybeClearPaths src/Dodge/Block.hs 69;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 32;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 37;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 556;" f -maybeOpenConsole src/Dodge/Update.hs 131;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 563;" f +maybeOpenConsole src/Dodge/Update.hs 124;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f @@ -4281,8 +4274,8 @@ mntLight src/Dodge/Placement/Instance/LightSource.hs 158;" f mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 163;" f modTo src/Geometry/Zone.hs 10;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 60;" f -mouseCursorType src/Dodge/Render/Picture.hs 87;" f -mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f +mouseCursorType src/Dodge/Render/Picture.hs 86;" f +mouseWorldPos src/Dodge/Base/Coordinate.hs 25;" f moveBullet src/Dodge/Bullet.hs 194;" f moveCombineSel src/Dodge/Update/Scroll.hs 121;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 44;" f @@ -4311,7 +4304,7 @@ muzFlareAt src/Dodge/HeldUse.hs 674;" f mvButton src/Dodge/Placement/PlaceSpot.hs 154;" f mvCr src/Dodge/Placement/PlaceSpot.hs 160;" f mvFS src/Dodge/Placement/PlaceSpot.hs 163;" f -mvGust src/Dodge/Update.hs 792;" f +mvGust src/Dodge/Update.hs 773;" f mvLS src/Dodge/Placement/PlaceSpot.hs 220;" f mvP src/Dodge/Wall/Move.hs 54;" f mvPP src/Dodge/Placement/PlaceSpot.hs 157;" f @@ -4369,7 +4362,7 @@ onEquipWristShield src/Dodge/Equipment.hs 36;" f onRemoveWristShield src/Dodge/Equipment.hs 23;" f onXY src/Geometry/Vector3D.hs 130;" f oneH src/Dodge/Creature/Test.hs 93;" f -openConsole src/Dodge/Update.hs 136;" f +openConsole src/Dodge/Update.hs 129;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 52;" f optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 43;" f @@ -4419,12 +4412,12 @@ parseNum src/Dodge/Debug/Terminal.hs 77;" 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 527;" f +pauseGame src/Dodge/Update/Input/InGame.hs 526;" f pauseMenu src/Dodge/Menu.hs 56;" f pauseMenuOptions src/Dodge/Menu.hs 63;" f pauseSound src/Dodge/SoundLogic.hs 42;" f -pauseTime src/Dodge/Update.hs 191;" f -pbFlicker src/Dodge/Update.hs 472;" f +pauseTime src/Dodge/Update.hs 180;" f +pbFlicker src/Dodge/Update.hs 453;" f pbsHit src/Dodge/WorldEvent/ThingsHit.hs 62;" f peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f @@ -4474,7 +4467,6 @@ placeSpotID src/Dodge/Placement/PlaceSpot.hs 81;" f placeSpotID' src/Dodge/Placement/PlaceSpot.hs 87;" f placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 70;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 51;" f -placeString src/Dodge/Render/MenuScreen.hs 61;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 140;" f plainRegex src/Dodge/DisplayInventory.hs 189;" f playIfFree src/Sound.hs 137;" f @@ -4578,7 +4570,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 119;" f -ppEvents src/Dodge/Update.hs 755;" f +ppEvents src/Dodge/Update.hs 736;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f preCritStart src/Dodge/Room/Start.hs 83;" f prePos src/Quaternion.hs 68;" f @@ -4688,7 +4680,7 @@ randPeakedParam src/RandomHelp.hs 130;" f randProb src/RandomHelp.hs 68;" f randSpark src/Dodge/Spark.hs 69;" f randSparkExtraVel src/Dodge/Spark.hs 92;" f -randWallReflect src/Dodge/Update.hs 648;" f +randWallReflect src/Dodge/Update.hs 629;" f randomChallenges src/Dodge/Room/Start.hs 63;" f randomCompass src/Dodge/Layout.hs 57;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 265;" f @@ -4882,14 +4874,14 @@ screenBox src/Dodge/Base/Window.hs 53;" f 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 51;" f +screenToWorldPos src/Dodge/Base/Coordinate.hs 28;" f scrollAugInvSel src/Dodge/Inventory.hs 190;" f scrollAugNextInSection src/Dodge/Inventory.hs 203;" f scrollDebugInfoInt src/Dodge/Debug.hs 73;" f scrollRBOption src/Dodge/Update/Scroll.hs 202;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f -scrollTimeBack src/Dodge/Update.hs 218;" f -scrollTimeForward src/Dodge/Update.hs 241;" f +scrollTimeBack src/Dodge/Update.hs 206;" f +scrollTimeForward src/Dodge/Update.hs 223;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 570;" f seagullBarkTransformedS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 654;" f seagullChatter1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 666;" f @@ -4928,7 +4920,7 @@ sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f setAimPosture src/Dodge/Creature/YourControl.hs 144;" f setChannelPos src/Sound.hs 150;" f -setClickWorldPos src/Dodge/Update.hs 106;" f +setClickWorldPos src/Dodge/Update.hs 99;" f setClusterID src/Dodge/Combine/Graph.hs 116;" f setDepth src/Picture/Base.hs 128;" f setDirPS src/Dodge/PlacementSpot.hs 50;" f @@ -4942,12 +4934,12 @@ setLinkType src/Dodge/RoomLink.hs 60;" f setLinkTypePD src/Dodge/RoomLink.hs 67;" f setMusicVolume src/Sound.hs 162;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 53;" f -setOldPos src/Dodge/Update.hs 504;" f +setOldPos src/Dodge/Update.hs 485;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 288;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 339;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 338;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -5001,9 +4993,9 @@ shiftChildren src/Dodge/Tree/Compose.hs 43;" f shiftDraw src/Dodge/Render/ShapePicture.hs 79;" f shiftDraw' src/Dodge/Render/ShapePicture.hs 85;" f shiftInBy src/Dodge/PlacementSpot.hs 250;" f -shiftInvItems src/Dodge/Update/Input/InGame.hs 307;" f -shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 352;" f -shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 346;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 306;" f +shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 351;" f +shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 345;" 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 @@ -5053,7 +5045,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 76;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 869;" f +simpleCrSprings src/Dodge/Update.hs 850;" f simpleTermMessage src/Dodge/Terminal.hs 164;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 680;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f @@ -5104,7 +5096,7 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 86;" f -spaceAction src/Dodge/Update/Input/InGame.hs 530;" f +spaceAction src/Dodge/Update/Input/InGame.hs 529;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 190;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 175;" f @@ -5160,7 +5152,7 @@ stackText src/Picture/Base.hs 188;" f stackedInventory src/Dodge/Creature.hs 311;" f startCr src/Dodge/Creature.hs 92;" f startCrafts src/Dodge/Room/Start.hs 93;" f -startDrag src/Dodge/Update/Input/InGame.hs 282;" f +startDrag src/Dodge/Update/Input/InGame.hs 281;" f startInvList src/Dodge/Creature.hs 107;" f startInventory src/Dodge/Creature.hs 110;" f startNewGameInSlot src/Dodge/StartNewGame.hs 15;" f @@ -5276,7 +5268,7 @@ throwItem src/Dodge/Creature/Action.hs 211;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 194;" f tilesToLine src/Shader/AuxAddition.hs 66;" f -timeFlowUpdate src/Dodge/Update.hs 178;" f +timeFlowUpdate src/Dodge/Update.hs 167;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f timeStopper src/Dodge/Item/Held/Utility.hs 39;" f tinMag src/Dodge/Item/Ammo.hs 28;" f @@ -5291,7 +5283,7 @@ titleOptionsMenu src/Dodge/Menu.hs 104;" f titleOptionsNoWrite src/Dodge/Menu.hs 107;" f tlDoEffect src/Dodge/Terminal.hs 102;" f tlSetStatus src/Dodge/Terminal.hs 99;" f -tmUpdate src/Dodge/Update.hs 488;" f +tmUpdate src/Dodge/Update.hs 469;" f toBinary src/Dodge/Inventory/SelectionList.hs 141;" f toBothLnk src/Dodge/RoomLink.hs 121;" f toClosestMultiple src/HelpNum.hs 3;" f @@ -5375,11 +5367,11 @@ tryAttachItems src/Dodge/Item/Grammar.hs 34;" f tryClickUse src/Dodge/Creature/YourControl.hs 236;" f tryCombine src/Dodge/Update/Input/InGame.hs 546;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 150;" f -tryDropSelected src/Dodge/Update/Input/InGame.hs 139;" f +tryDropSelected src/Dodge/Update/Input/InGame.hs 138;" f tryGetChannel src/Sound.hs 97;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 22;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 38;" f -tryPickupSelected src/Dodge/Update/Input/InGame.hs 146;" f +tryPickupSelected src/Dodge/Update/Input/InGame.hs 145;" f tryPlay src/Sound.hs 84;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 23;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 52;" f @@ -5427,91 +5419,91 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 138;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 144;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 126;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 200;" f -updateAimPos src/Dodge/Update.hs 321;" f +updateAimPos src/Dodge/Update.hs 302;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 44;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 480;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 479;" f updateBarrel src/Dodge/Barreloid.hs 41;" f updateBarreloid src/Dodge/Barreloid.hs 15;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 34;" f updateBounds src/Dodge/Update/Camera.hs 258;" f updateBulVel src/Dodge/Bullet.hs 56;" f updateBullet src/Dodge/Bullet.hs 21;" f -updateBullets src/Dodge/Update.hs 571;" f +updateBullets src/Dodge/Update.hs 552;" f updateCamera src/Dodge/Update/Camera.hs 30;" f updateCloseObjects src/Dodge/Inventory.hs 114;" f -updateCloud src/Dodge/Update.hs 806;" f -updateClouds src/Dodge/Update.hs 674;" f +updateCloud src/Dodge/Update.hs 787;" f +updateClouds src/Dodge/Update.hs 655;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 31;" f updateCreature' src/Dodge/Creature/Update.hs 39;" f -updateCreatureGroups src/Dodge/Update.hs 543;" f -updateCreatureSoundPositions src/Dodge/Update.hs 519;" f -updateDebris src/Dodge/Update.hs 578;" f +updateCreatureGroups src/Dodge/Update.hs 524;" f +updateCreatureSoundPositions src/Dodge/Update.hs 500;" f +updateDebris src/Dodge/Update.hs 559;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f -updateDebugMessageOffset src/Dodge/Update.hs 100;" f -updateDelayedEvents src/Dodge/Update.hs 898;" f +updateDebugMessageOffset src/Dodge/Update.hs 93;" f +updateDelayedEvents src/Dodge/Update.hs 879;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 5;" f -updateDistortions src/Dodge/Update.hs 564;" f -updateDoor src/Dodge/Update.hs 326;" f -updateDust src/Dodge/Update.hs 830;" f -updateDusts src/Dodge/Update.hs 677;" f +updateDistortions src/Dodge/Update.hs 545;" f +updateDoor src/Dodge/Update.hs 307;" f +updateDust src/Dodge/Update.hs 811;" f +updateDusts src/Dodge/Update.hs 658;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f -updateEnergyBalls src/Dodge/Update.hs 665;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 507;" f +updateEnergyBalls src/Dodge/Update.hs 646;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 506;" f updateExpBarrel src/Dodge/Barreloid.hs 20;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 662;" f +updateFlames src/Dodge/Update.hs 643;" f updateFloatingCamera src/Dodge/Update/Camera.hs 35;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 365;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 361;" f -updateGusts src/Dodge/Update.hs 789;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 364;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 360;" f +updateGusts src/Dodge/Update.hs 770;" f updateHumanoid src/Dodge/Humanoid.hs 13;" f -updateIMl src/Dodge/Update.hs 533;" f -updateIMl' src/Dodge/Update.hs 538;" f +updateIMl src/Dodge/Update.hs 514;" f +updateIMl' src/Dodge/Update.hs 519;" f updateInGameCamera src/Dodge/Update/Camera.hs 79;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 430;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 429;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f updateItemTargeting src/Dodge/Creature/State.hs 258;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 399;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 424;" f -updateKeysInGame src/Dodge/Update/Input/InGame.hs 85;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 384;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 407;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 397;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 423;" f +updateKeysInGame src/Dodge/Update/Input/InGame.hs 83;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 383;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 406;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 11;" f -updateLasers src/Dodge/Update.hs 438;" f +updateLasers src/Dodge/Update.hs 419;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 170;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 443;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 442;" f updateMachine src/Dodge/Machine/Update.hs 21;" f -updateMagnets src/Dodge/Update.hs 329;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 205;" f -updateMouseContext src/Dodge/Update.hs 342;" f -updateMouseContextGame src/Dodge/Update.hs 347;" f -updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 98;" f -updateMouseInGame src/Dodge/Update/Input/InGame.hs 88;" f -updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 168;" f -updateObjCatMaybes src/Dodge/Update.hs 555;" f -updateObjMapMaybe src/Dodge/Update.hs 548;" f -updatePastWorlds src/Dodge/Update.hs 427;" f +updateMagnets src/Dodge/Update.hs 310;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 204;" f +updateMouseContext src/Dodge/Update.hs 323;" f +updateMouseContextGame src/Dodge/Update.hs 328;" f +updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 96;" f +updateMouseInGame src/Dodge/Update/Input/InGame.hs 86;" f +updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 167;" f +updateObjCatMaybes src/Dodge/Update.hs 536;" f +updateObjMapMaybe src/Dodge/Update.hs 529;" f +updatePastWorlds src/Dodge/Update.hs 408;" f updatePreload src/Preload/Update.hs 20;" f updateProjectile src/Dodge/Projectile/Update.hs 27;" f updateProp src/Dodge/Prop/Update.hs 11;" f updatePulse src/Dodge/Creature/Update.hs 136;" f -updatePulseBall src/Dodge/Update.hs 452;" f -updatePulseLaser src/Dodge/Update.hs 618;" f -updatePulseLasers src/Dodge/Update.hs 447;" f +updatePulseBall src/Dodge/Update.hs 433;" f +updatePulseLaser src/Dodge/Update.hs 599;" f +updatePulseLasers src/Dodge/Update.hs 428;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 567;" f +updateRadarBlips src/Dodge/Update.hs 548;" f updateRadarSweep src/Dodge/RadarSweep.hs 39;" f -updateRadarSweeps src/Dodge/Update.hs 668;" f +updateRadarSweeps src/Dodge/Update.hs 649;" f updateRandNode src/TreeHelp.hs 108;" f updateRenderSplit appDodge/Main.hs 110;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f @@ -5521,29 +5513,29 @@ updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 258;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 237;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 659;" f +updateShockwaves src/Dodge/Update.hs 640;" f updateSingleNodes src/TreeHelp.hs 97;" f updateSound src/Sound.hs 72;" f updateSounds src/Sound.hs 67;" f updateSpark src/Dodge/Spark.hs 19;" f -updateSparks src/Dodge/Update.hs 671;" f -updateTeslaArc src/Dodge/Update.hs 588;" f -updateTeslaArcs src/Dodge/Update.hs 585;" f +updateSparks src/Dodge/Update.hs 652;" f +updateTeslaArc src/Dodge/Update.hs 569;" f +updateTeslaArcs src/Dodge/Update.hs 566;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 8;" f -updateTractorBeams src/Dodge/Update.hs 656;" f +updateTractorBeams src/Dodge/Update.hs 637;" f updateTurret src/Dodge/Machine/Update.hs 46;" f -updateUniverse src/Dodge/Update.hs 79;" f -updateUniverseFirst src/Dodge/Update.hs 90;" f -updateUniverseLast src/Dodge/Update.hs 141;" f -updateUniverseMid src/Dodge/Update.hs 161;" f +updateUniverse src/Dodge/Update.hs 72;" f +updateUniverseFirst src/Dodge/Update.hs 83;" f +updateUniverseLast src/Dodge/Update.hs 134;" f +updateUniverseMid src/Dodge/Update.hs 154;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 45;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 23;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 10;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWheelEvent src/Dodge/Update/Scroll.hs 25;" f -updateWheelEvents src/Dodge/Update.hs 417;" f -updateWorldEventFlag src/Dodge/Update.hs 125;" f -updateWorldEventFlags src/Dodge/Update.hs 113;" f +updateWheelEvents src/Dodge/Update.hs 398;" f +updateWorldEventFlag src/Dodge/Update.hs 118;" f +updateWorldEventFlags src/Dodge/Update.hs 106;" f upperBody src/Dodge/Creature/Picture.hs 120;" f upperBox src/Shape.hs 156;" f upperBoxHalf src/Shape.hs 222;" f @@ -5679,7 +5671,7 @@ wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f wlsNearSeg src/Dodge/Zoning/Wall.hs 42;" f wordsBy src/ListHelp.hs 116;" f -worldPosToScreen src/Dodge/Base/Coordinate.hs 28;" f +worldPosToScreen src/Dodge/Base/Coordinate.hs 18;" f worldSPic src/Dodge/Render/ShapePicture.hs 22;" f worldToGenWorld src/Dodge/LevelGen/LevelStructure.hs 14;" f wpAdd src/Dodge/Room/RezBox.hs 147;" f @@ -5715,11 +5707,11 @@ zipArcs src/Dodge/Tesla.hs 52;" f zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 118;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f -zoneClouds src/Dodge/Update.hs 479;" f +zoneClouds src/Dodge/Update.hs 460;" f zoneCreature src/Dodge/Zoning/Creature.hs 54;" f -zoneCreatures src/Dodge/Update.hs 514;" f +zoneCreatures src/Dodge/Update.hs 495;" f zoneDust src/Dodge/Zoning/Cloud.hs 48;" f -zoneDusts src/Dodge/Update.hs 482;" f +zoneDusts src/Dodge/Update.hs 463;" f zoneExtract src/Dodge/Zoning/Base.hs 52;" f zoneMonoid src/Dodge/Zoning/Base.hs 83;" f zoneOfCirc src/Dodge/Zoning/Base.hs 24;" f