From 4390a82d64f161a597963c406ed8eaa1a427dab7 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 28 Dec 2025 18:16:24 +0000 Subject: [PATCH] Work on terminal tab completion/scrolling --- src/Dodge/Terminal.hs | 255 ++++++++++++++++++++----------- src/Dodge/Update/Input/InGame.hs | 2 +- src/Dodge/Update/Scroll.hs | 136 ++++++++--------- tags | 116 +++++++------- 4 files changed, 295 insertions(+), 214 deletions(-) diff --git a/src/Dodge/Terminal.hs b/src/Dodge/Terminal.hs index acd93848b..45efd0a7b 100644 --- a/src/Dodge/Terminal.hs +++ b/src/Dodge/Terminal.hs @@ -1,4 +1,5 @@ {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE TupleSections #-} module Dodge.Terminal ( makeTermLine, @@ -10,10 +11,15 @@ module Dodge.Terminal ( makeTermPara, terminalReturnEffect, getCommands, - tabComplete, +-- tabComplete, tlSetStatus, tlDoEffect, termTextColor, + doTabComplete, +-- recComFindSuccessor, +-- recComFindPredecessor, + recComFindMin, + recComFindMax, ) where import Color @@ -30,6 +36,7 @@ import Dodge.Terminal.Type import Justify import LensHelp import Sound.Data +import Control.Applicative textTerminal :: Terminal textTerminal = defaultTerminal{_tmBootLines = textInputBlurb []} @@ -46,27 +53,26 @@ termSoundLine = TLine 0 [] . TmWdWdTermSound termTextColor :: Color termTextColor = greyN 0.9 -getCommands :: World -> Terminal -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) +--type TCommands = PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) +type TCommands = RecCommands [TerminalLine] + +getCommands :: World -> Terminal -> TCommands getCommands w tm = foldMap (getCommand w tm) $ tm ^. tmCommands -getCommand :: - World -> - Terminal -> - TCom -> - PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) +getCommand :: World -> Terminal -> TCom -> TCommands getCommand w tm = \case - TCInfo x z -> PTE.singleton x (PTE.singleton "" (makeTermPara z)) + TCInfo x z -> RCommands $ PTE.singleton x (Right (makeTermPara z)) TCBase -> quitCommand <> toggleCommands tm TCDamageCommand -> damageCodeCommand w tm -damageCodeCommand :: World -> Terminal -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) -damageCodeCommand w _ = - PTE.singleton "DAMAGECODE" $ PTE.fromList $ mapMaybe f [minBound ..] +damageCodeCommand :: World -> Terminal -> TCommands +damageCodeCommand w _ = RCommands . + PTE.singleton "DAMAGECODE" . Left . RCommands $ PTE.fromList $ mapMaybe f [minBound ..] where - f :: SensorType -> Maybe (String, [TerminalLine]) + f :: SensorType -> Maybe (String, Either TCommands [TerminalLine]) f st = do s <- g st - return (s, decodeSensorType st w) + return (s, Right $ decodeSensorType st w) g = fmap (map toUpper . reverse) . List.stripPrefix (reverse "Sensor") @@ -78,15 +84,16 @@ decodeSensorType st w = fromMaybe [] $ do x <- w ^? cWorld . cwGen . cwgParams . sensorCoding . ix st return [makeTermLine $ show x] -toggleCommands :: Terminal -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) +toggleCommands :: Terminal -> TCommands toggleCommands tm | null ts = mempty - | otherwise = PTE.singleton "TOGGLE" $ PTE.fromList $ f <$> M.toList ts + | otherwise = RCommands . PTE.singleton "TOGGLE" . Left . RCommands . PTE.fromList + $ f <$> M.toList ts where ts = tm ^. tmToggles f (s, x) = ( s - , + , Right [ TLine 1 [TerminalLineConst (s ++ " TOGGLE DONE!") termTextColor] @@ -97,8 +104,8 @@ toggleCommands tm helpPara :: [TerminalLine] helpPara = makeTermPara "THIS TERMINAL PROCESSES KEYBOARD INPUT. USE [RETURN] OR [LMB] TO REGISTER YOUR INPUT. AVAILABLE COMMANDS CAN BE SCROLLED THROUGH, HOLD [RMB] TO SCROLL THROUGH ARGUMENTS. USE [TAB] FOR AUTOCOMPLETE." -quitCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) -quitCommand = PTE.singleton "QUIT" (PTE.singleton "" [TLine 0 [] TmWdWdPowerDownTerminal]) +quitCommand :: TCommands +quitCommand = RCommands . PTE.singleton "QUIT" $ Right [TLine 0 [] TmWdWdPowerDownTerminal] makeTermLine :: String -> TerminalLine makeTermLine = makeColorTermLine termTextColor @@ -121,51 +128,118 @@ makeColorTermLine col str = TLine 1 [TerminalLineConst str col] TmWdId commandColor :: Color commandColor = yellow -tabComplete :: World -> Terminal -> Terminal -tabComplete w tm = fromMaybe tm $ do +--tabComplete :: World -> Terminal -> Terminal +--tabComplete w tm = fromMaybe tm $ do +-- s <- tm ^? tmStatus . tiText +-- return $ tabComplete' s w tm +-- +---- ugly, can improve output to explain when showing available arguments +--tabComplete' :: String -> World -> Terminal -> Terminal +--tabComplete' s' w tm = case PTE.lookup s $ getCommands w tm of +-- Just m -> f (s ++ " ") $ PTE.toList $ PTE.lookupPrefix a m +-- Nothing -> f "" $ PTE.toList $ PTE.lookupPrefix s $ getCommands w tm +-- where +-- ss = words s' +-- s = fromMaybe "" $ ss ^? ix 0 +-- a = fromMaybe "" $ ss ^? ix 1 +-- f y m' = case fmap fst m' of +-- [] -> tm +-- [x] -> tm & tmStatus . tiText .~ (y ++ x) +-- xs -> +-- tm +-- & tmStatus +-- .~ TerminalLineRead +-- & tmFutureLines +-- .~ ( makeColorTermPara +-- commandColor +-- (unwords xs) +-- <> [TLine 1 [] . TmTmSetStatus $ TerminalTextInput s'] +-- ) + +data TabCompletion a + = TabMatch a + | TabComplete String + | TabMultiComplete [String] + | TabFail + +data RecCommands a = + RCommands {_rCommands :: (PTE.TrieMap Char (Either (RecCommands a) a))} + +-- assumes that each command Trie has at least one successful command +recComFindMin :: RecCommands a -> Maybe ([String], a) +recComFindMin (RCommands m) = case PTE.findMin m of + Just (s,Right a) -> Just ([s],a) + Just (s,Left m') -> recComFindMin m' & _Just . _1 .:~ s + Nothing -> Nothing + +recComFindMax :: RecCommands a -> Maybe ([String], a) +recComFindMax (RCommands m) = case PTE.findMax m of + Just (s,Right a) -> Just ([s],a) + Just (s,Left m') -> recComFindMax m' & _Just . _1 .:~ s + Nothing -> Nothing + +--recComFindSuccessor :: [String] -> RecCommands a -> Maybe ([String],a) +--recComFindSuccessor (s:[]) (RCommands m) = case PTE.lookup s m of +-- Just (Left rm) -> +-- _ -> do +-- (s',_) <- PTE.findSuccessor s m & _Just . _1 %~ return +--recComFindSuccessor (s:ss) (RCommands m) +-- = do +-- Left rm <- PTE.lookup s m +-- recComFindSuccessor ss rm -- & _Just . _1 .:~ s +---- fromMaybe (recComFindSuccessor (s:[]) (RCommands m)) $ +-- +--recComFindPredecessor :: [String] -> RecCommands a -> Maybe ([String],a) +--recComFindPredecessor (s:ss) (RCommands m) = Nothing + +instance Semigroup (RecCommands a) where + RCommands x <> RCommands y = RCommands $ x <> y + +instance Monoid (RecCommands a) where + mempty = RCommands mempty + + +tbComplete :: String -> PTE.TrieMap Char a -> TabCompletion a +tbComplete s t = case e of + [] | Just x <- mx -> TabMatch x + [] -> case fmap fst $ PTE.toList t' of + [] -> TabFail + ss -> TabMultiComplete ss + _ -> TabComplete e + where + (e, mx, t') = PTE.splitPrefix $ PTE.deletePrefix s t + +recTabComplete :: String -> TCommands -> TabCompletion [TerminalLine] +recTabComplete s (RCommands t) = fromMaybe (TabMultiComplete $ allstrings $ t) $ do + (s1,ss) <- stripHead $ words s + case tbComplete s1 t of + TabComplete e -> return $ TabComplete e + TabMultiComplete es -> return $ TabMultiComplete (fmap (s1 <>) es) + TabFail -> return $ TabFail + TabMatch (Right x) -> return $ TabMatch x + TabMatch (Left rm) -> return $ recTabComplete (unwords ss) rm + where + stripHead (x:xs) = Just (x,xs) + stripHead _ = Nothing + allstrings = fmap fst . PTE.toList + +doTabComplete :: World -> Terminal -> Terminal +doTabComplete w tm = fromMaybe tm $ do s <- tm ^? tmStatus . tiText - return $ tabComplete' s w tm + case recTabComplete s $ getCommands w tm of + TabMatch _ -> return tm + TabComplete e -> return $ tm & tmStatus . tiText <>~ e + TabMultiComplete ss -> return $ tm + & tmStatus .~ TerminalLineRead + & tmFutureLines .~ + (makeColorTermPara commandColor (unwords ss) <> [TLine 1 [] . TmTmSetStatus $ TerminalTextInput s]) --- ugly, can improve output to explain when showing available arguments -tabComplete' :: String -> World -> Terminal -> Terminal -tabComplete' s' w tm = case PTE.lookup s $ getCommands w tm of - Just m -> f (s ++ " ") $ PTE.toList $ PTE.lookupPrefix a m - Nothing -> f "" $ PTE.toList $ PTE.lookupPrefix s $ getCommands w tm - where - ss = words s' - s = fromMaybe "" $ ss ^? ix 0 - a = fromMaybe "" $ ss ^? ix 1 - f y m' = case fmap fst m' of - [] -> tm - [x] -> tm & tmStatus . tiText .~ (y ++ x) - xs -> - tm - & tmStatus - .~ TerminalLineRead - & tmFutureLines - .~ ( makeColorTermPara - commandColor - (unwords xs) - <> [TLine 1 [] . TmTmSetStatus $ TerminalTextInput s'] - ) -tComplete - :: String - -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) - -> Either (String,[String]) (String,[String]) -tComplete s pt = fromMaybe (Left (mempty,allcommands pt)) $ do - s1 <- words s ^? ix 0 - let (e1,mx,pt') = PTE.splitPrefix $ PTE.deletePrefix s1 pt - case e1 of - [] -> do - pt'' <- mx - return $ fromMaybe (Right (mempty, allcommands pt'')) $ do - s2 <- words s ^? ix 1 - let (e2,_,pt3) = PTE.splitPrefix $ PTE.deletePrefix s2 pt'' - Just $ Right (e2, allcommands pt3) - _ -> Just $ Left (e1, allcommands pt') - where - allcommands = fmap fst . PTE.toList + TabFail -> return tm +-- (e,Right x) -> return $ tm & tmStatus . tiText .~ e +-- (e,Left ss) -> return $ tm +-- & tmStatus .~ TerminalLineRead +-- & tmFutureLines .~ (makeColorTermPara commandColor (unwords ss) <> [TLine 1 [] . TmTmSetStatus $ TerminalTextInput e]) -- damageCodeCommand :: TerminalCommand -- damageCodeCommand = @@ -193,33 +267,34 @@ simpleTermMessage strs = defaultTerminal & tmBootLines .~ map makeTermLine strs -- list available arguments on function input? terminalReturnEffect :: Int -> World -> World -terminalReturnEffect tmid w = fromMaybe w $ do - tm' <- w ^? cWorld . lWorld . terminals . ix tmid - let tm = tabComplete w tm' - s <- tm ^? tmStatus . tiText - let ss = fromMaybe [makeTermLine "ERROR: INPUT NOT RECOGNISED"] $ do - let args = words s - case args of - [] -> return helpPara - (x : _) -> do - teff <- PTE.lookup x (getCommands w tm) - let y = fromMaybe "" (args ^? ix 1) - PTE.lookup y teff - return $ - w - & totm - . tmDisplayedLines - .:~ (getPromptTM ++ s, termTextColor) - & totm - . tmFutureLines - .~ ss - <> tlSetStatus (TerminalTextInput "") - & totm - . tmCommandHistory - %~ take 10 - . (s :) - & totm - . tmStatus - .~ TerminalLineRead - where - totm = cWorld . lWorld . terminals . ix tmid +terminalReturnEffect tmid w = w +-- fromMaybe w $ do +-- tm' <- w ^? cWorld . lWorld . terminals . ix tmid +-- let tm = tabComplete w tm' +-- s <- tm ^? tmStatus . tiText +-- let ss = fromMaybe [makeTermLine "ERROR: INPUT NOT RECOGNISED"] $ do +-- let args = words s +-- case args of +-- [] -> return helpPara +-- (x : _) -> do +-- teff <- PTE.lookup x (getCommands w tm) +-- let y = fromMaybe "" (args ^? ix 1) +-- PTE.lookup y teff +-- return $ +-- w +-- & totm +-- . tmDisplayedLines +-- .:~ (getPromptTM ++ s, termTextColor) +-- & totm +-- . tmFutureLines +-- .~ ss +-- <> tlSetStatus (TerminalTextInput "") +-- & totm +-- . tmCommandHistory +-- %~ take 10 +-- . (s :) +-- & totm +-- . tmStatus +-- .~ TerminalLineRead +-- where +-- totm = cWorld . lWorld . terminals . ix tmid diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index b1de49a51..d3f9e3750 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -422,7 +422,7 @@ updateKeysTextInputTerminal tmid u = | otherwise = id tryTabComplete | u ^. uvWorld . input . pressedKeys . at ScancodeTab == Just 0 = - uvWorld . cWorld . lWorld . terminals . ix tmid %~ tabComplete (u ^. uvWorld) + uvWorld . cWorld . lWorld . terminals . ix tmid %~ doTabComplete (u ^. uvWorld) | otherwise = id updateKeyInGame :: Universe -> Scancode -> Int -> Universe diff --git a/src/Dodge/Update/Scroll.hs b/src/Dodge/Update/Scroll.hs index b23499fe5..f451c0b9f 100644 --- a/src/Dodge/Update/Scroll.hs +++ b/src/Dodge/Update/Scroll.hs @@ -1,11 +1,9 @@ --{-# LANGUAGE TupleSections #-} -module Dodge.Update.Scroll ( - updateWheelEvent, -) where +module Dodge.Update.Scroll (updateWheelEvent) where import Control.Applicative import Control.Monad -import qualified Data.ListTrie.Patricia.Map.Enum as PTE +--import qualified Data.ListTrie.Patricia.Map.Enum as PTE import qualified Data.Map.Strict as M import Data.Maybe import Dodge.Base @@ -130,74 +128,74 @@ moveCombineSel yi = terminalWheelEvent :: Int -> Int -> World -> World terminalWheelEvent yi tmid w - | w & has (input . mouseButtons . ix ButtonRight) - , Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus = - w & cWorld . lWorld . terminals . ix tmid %~ f - | Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus = - w & cWorld . lWorld . terminals . ix tmid %~ g +-- | w & has (input . mouseButtons . ix ButtonRight) +-- , Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus = +-- w & cWorld . lWorld . terminals . ix tmid %~ f +-- | Just TerminalTextInput{} <- w ^? cWorld . lWorld . terminals . ix tmid . tmStatus = +-- w & cWorld . lWorld . terminals . ix tmid %~ f | otherwise = w where - dowrap = if yi > 0 then wrapup else wrapdown - wrapup s coms = PTE.findSuccessor s coms <|> PTE.findMin coms - wrapdown s coms = PTE.findPredecessor s coms <|> PTE.findMax coms - f tm = fromMaybe tm $ do - let coms = getCommands w tm - x <- tm ^? tmStatus . tiText - let s = fromMaybe "" $ x ^? to words . ix 0 - (s', _) <- dowrap s coms - return $ tm & tmStatus . tiText .~ s' - g tm = fromMaybe tm $ do - let coms = getCommands w tm - x <- tm ^? tmStatus . tiText - let s = fromMaybe "" $ x ^? to words . ix 0 - y = fromMaybe "" $ x ^? to words . ix 1 - (s', arg, _) <- - if yi > 0 - then doubleFindSucc s y coms <|> doubleFindMin coms - else doubleFindPred s y coms <|> doubleFindMax coms - return $ tm & tmStatus . tiText .~ s' ++ " " ++ arg +-- dowrap = if yi > 0 then wrapup else wrapdown +-- wrapup s coms = recComFindSuccessor (words s) coms <|> recComFindMin coms +-- wrapdown s coms = recComFindPredecessor (words s) coms <|> recComFindMax coms +-- f tm = fromMaybe tm $ do +-- let coms = getCommands w tm +-- x <- tm ^? tmStatus . tiText +-- let s = fromMaybe "" $ x ^? to words . ix 0 +-- (s', _) <- dowrap s coms +-- return $ tm & tmStatus . tiText .~ unwords s' +---- g tm = fromMaybe tm $ do +---- let coms = getCommands w tm +---- x <- tm ^? tmStatus . tiText +---- let s = fromMaybe "" $ x ^? to words . ix 0 +---- y = fromMaybe "" $ x ^? to words . ix 1 +---- (s', arg, _) <- +---- if yi > 0 +---- then doubleFindSucc s y coms <|> doubleFindMin coms +---- else doubleFindPred s y coms <|> doubleFindMax coms +---- return $ tm & tmStatus . tiText .~ s' ++ " " ++ arg -doubleFindMin :: (Enum a, Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) -doubleFindMin m = do - (x, n) <- PTE.findMin m - case PTE.findMin n of - Just (y, z) -> Just (x, y, z) - Nothing -> Nothing - -doubleFindSucc :: (Enum a, Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) -doubleFindSucc xs ys m = case PTE.lookup xs m of - Just m' -> case PTE.findSuccessor ys m' of - Just (ys', z) -> Just (xs, ys', z) - Nothing -> dfs xs m - Nothing -> dfs xs m - where - dfs xs' m' = case PTE.findSuccessor xs' m' of - Just (xs'', n) -> case PTE.findMin n of - Just (ys', z) -> Just (xs'', ys', z) - Nothing -> dfs xs'' m' - Nothing -> Nothing - --- there are edge cases where this doesn't behave as might be expected -doubleFindMax :: (Enum a, Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) -doubleFindMax m = do - (x, n) <- PTE.findMax m - case PTE.findMax n of - Just (y, z) -> Just (x, y, z) - Nothing -> Nothing - -doubleFindPred :: - (Enum a, Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) -doubleFindPred xs ys m = case PTE.lookup xs m of - Just m' -> case PTE.findPredecessor ys m' of - Just (ys', z) -> Just (xs, ys', z) - Nothing -> dfs xs m - Nothing -> dfs xs m - where - dfs xs' m' = case PTE.findPredecessor xs' m' of - Just (xs'', n) -> case PTE.findMax n of - Just (ys', z) -> Just (xs'', ys', z) - Nothing -> dfs xs'' m' - Nothing -> Nothing +--doubleFindMin :: (Enum a, Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) +--doubleFindMin m = do +-- (x, n) <- PTE.findMin m +-- case PTE.findMin n of +-- Just (y, z) -> Just (x, y, z) +-- Nothing -> Nothing +-- +--doubleFindSucc :: (Enum a, Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) +--doubleFindSucc xs ys m = case PTE.lookup xs m of +-- Just m' -> case PTE.findSuccessor ys m' of +-- Just (ys', z) -> Just (xs, ys', z) +-- Nothing -> dfs xs m +-- Nothing -> dfs xs m +-- where +-- dfs xs' m' = case PTE.findSuccessor xs' m' of +-- Just (xs'', n) -> case PTE.findMin n of +-- Just (ys', z) -> Just (xs'', ys', z) +-- Nothing -> dfs xs'' m' +-- Nothing -> Nothing +-- +---- there are edge cases where this doesn't behave as might be expected +--doubleFindMax :: (Enum a, Enum b) => PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) +--doubleFindMax m = do +-- (x, n) <- PTE.findMax m +-- case PTE.findMax n of +-- Just (y, z) -> Just (x, y, z) +-- Nothing -> Nothing +-- +--doubleFindPred :: +-- (Enum a, Enum b) => [a] -> [b] -> PTE.TrieMap a (PTE.TrieMap b c) -> Maybe ([a], [b], c) +--doubleFindPred xs ys m = case PTE.lookup xs m of +-- Just m' -> case PTE.findPredecessor ys m' of +-- Just (ys', z) -> Just (xs, ys', z) +-- Nothing -> dfs xs m +-- Nothing -> dfs xs m +-- where +-- dfs xs' m' = case PTE.findPredecessor xs' m' of +-- Just (xs'', n) -> case PTE.findMax n of +-- Just (ys', z) -> Just (xs'', ys', z) +-- Nothing -> dfs xs'' m' +-- Nothing -> Nothing scrollRBOption :: Int -> Int -> Int -> Int scrollRBOption dy ymax diff --git a/tags b/tags index 3d35c4d01..962b3af82 100644 --- a/tags +++ b/tags @@ -1062,6 +1062,7 @@ QFloat src/Geometry/Data.hs 50;" t QuarterRes src/Dodge/Data/Config.hs 111;" C QuicksaveSlot src/Dodge/Data/SaveSlot.hs 8;" C RAM src/Dodge/Data/Item/Combine.hs 73;" C +RCommands src/Dodge/Terminal.hs 166;" C RED src/Color/Data.hs 12;" C RELCURS src/Dodge/Data/Item/Combine.hs 40;" C RELITEM src/Dodge/Data/Item/Combine.hs 41;" C @@ -1085,6 +1086,7 @@ RandPS src/Dodge/Data/GenWorld.hs 55;" C RandomImpulse src/Dodge/Data/ActionPlan.hs 31;" C RandomTurn src/Dodge/Data/ActionPlan.hs 30;" C ReactorSS src/Dodge/Data/Scenario.hs 111;" C +RecCommands src/Dodge/Terminal.hs 165;" t RecRoomSS src/Dodge/Data/Scenario.hs 103;" C RectRoomType src/Dodge/Data/Room.hs 33;" C ReducedRocketSmoke src/Dodge/Data/Projectile.hs 52;" C @@ -1279,6 +1281,7 @@ TCBase src/Dodge/Data/Terminal.hs 48;" C TCDamageCommand src/Dodge/Data/Terminal.hs 49;" C TCInfo src/Dodge/Data/Terminal.hs 47;" C TCom src/Dodge/Data/Terminal.hs 46;" t +TCommands src/Dodge/Terminal.hs 57;" t TESLAGUN src/Dodge/Data/Item/Combine.hs 167;" C THERMOMETER src/Dodge/Data/Item/Combine.hs 83;" C THREELINES src/Dodge/Data/GenParams.hs 18;" C @@ -1301,6 +1304,11 @@ TSright src/Dodge/Data/Input.hs 58;" C TStab src/Dodge/Data/Input.hs 56;" C TSup src/Dodge/Data/Input.hs 59;" C TUBE src/Dodge/Data/Item/Combine.hs 51;" C +TabComplete src/Dodge/Terminal.hs 161;" C +TabCompletion src/Dodge/Terminal.hs 159;" t +TabFail src/Dodge/Terminal.hs 163;" C +TabMatch src/Dodge/Terminal.hs 160;" C +TabMultiComplete src/Dodge/Terminal.hs 162;" C Tap src/Dodge/Data/SoundOrigin.hs 39;" C TargetCursor src/Dodge/Data/Item/Targeting.hs 12;" C TargetRBCreature src/Dodge/Data/Item/Targeting.hs 11;" C @@ -2160,6 +2168,7 @@ _pzDir src/Dodge/Data/PulseLaser.hs 14;" f _pzPhaseV src/Dodge/Data/PulseLaser.hs 12;" f _pzPos src/Dodge/Data/PulseLaser.hs 13;" f _pzTimer src/Dodge/Data/PulseLaser.hs 16;" f +_rCommands src/Dodge/Terminal.hs 166;" f _radarBlips src/Dodge/Data/LWorld.hs 108;" f _radarSweeps src/Dodge/Data/LWorld.hs 104;" f _randGen src/Dodge/Data/World.hs 39;" f @@ -2892,7 +2901,7 @@ combineList src/Dodge/Combine.hs 21;" f combineRooms src/Dodge/Room/Procedural.hs 132;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 704;" f combineTree src/Dodge/Tree/Compose.hs 67;" f -commandColor src/Dodge/Terminal.hs 121;" f +commandColor src/Dodge/Terminal.hs 128;" f commonPrefix src/Dodge/Debug/Terminal.hs 149;" f comp src/Quaternion.hs 61;" f compP2A src/Dodge/ShiftPoint.hs 11;" f @@ -3034,18 +3043,18 @@ damMatSideEffect src/Dodge/Material/Damage.hs 20;" f damThingHitWith src/Dodge/Damage.hs 72;" f damToExpBarrel src/Dodge/Barreloid.hs 53;" f damageBlock src/Dodge/Wall/Damage.hs 44;" f -damageCodeCommand src/Dodge/Terminal.hs 62;" f +damageCodeCommand src/Dodge/Terminal.hs 68;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f -damageCrystal src/Dodge/Material/Damage.hs 220;" f +damageCrystal src/Dodge/Material/Damage.hs 222;" f damageDirection src/Dodge/Damage.hs 35;" f -damageDirt src/Dodge/Material/Damage.hs 129;" f -damageFlesh src/Dodge/Material/Damage.hs 96;" f -damageGlass src/Dodge/Material/Damage.hs 154;" f +damageDirt src/Dodge/Material/Damage.hs 130;" f +damageFlesh src/Dodge/Material/Damage.hs 97;" f +damageGlass src/Dodge/Material/Damage.hs 156;" f damageGlassBlock src/Dodge/Wall/Damage.hs 49;" f damageHP src/Dodge/Creature/Damage.hs 37;" f damageInCircle src/Dodge/Damage.hs 61;" f -damageMetal src/Dodge/Material/Damage.hs 64;" f +damageMetal src/Dodge/Material/Damage.hs 65;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 15;" f damageStone src/Dodge/Material/Damage.hs 33;" f damageThingHit src/Dodge/Bullet.hs 180;" f @@ -3080,7 +3089,7 @@ debugPutItems src/Dodge/Debug.hs 78;" f debugPutN src/Dodge/Debug.hs 84;" f debugShowPath src/Dodge/Debug.hs 105;" f debugWritableValues src/Dodge/Debug.hs 118;" f -decodeSensorType src/Dodge/Terminal.hs 76;" f +decodeSensorType src/Dodge/Terminal.hs 82;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 61;" f decomposeTree src/Dodge/Tree/Compose.hs 58;" f decontamRoom src/Dodge/Room/Airlock.hs 38;" f @@ -3156,7 +3165,7 @@ destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 22;" f destroyMount src/Dodge/Wall/Damage.hs 90;" f destroyMounts src/Dodge/Wall/Damage.hs 87;" f -destroyProjectile src/Dodge/Projectile/Update.hs 109;" f +destroyProjectile src/Dodge/Projectile/Update.hs 112;" f detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 432;" f @@ -3193,7 +3202,7 @@ dmType src/Dodge/Damage.hs 38;" f doAimTwist src/Dodge/Creature/YourControl.hs 154;" f doAnyEquipmentEffect src/Dodge/Creature/State.hs 141;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f -doBarrelSpin src/Dodge/Projectile/Update.hs 158;" f +doBarrelSpin src/Dodge/Projectile/Update.hs 168;" f doBlBl src/Dodge/BlBl.hs 5;" f doBounce src/Dodge/Base/Collide.hs 67;" f doButtonEvent src/Dodge/Button/Event.hs 9;" f @@ -3240,14 +3249,15 @@ doRandImpulse src/Dodge/RandImpulse.hs 7;" f doRegexInput src/Dodge/Update/Input/InGame.hs 453;" f doRoomPlacements src/Dodge/Layout.hs 104;" f doRoomShift src/Dodge/Room/Link.hs 33;" f -doScopeZoom src/Dodge/Update/Scroll.hs 91;" f +doScopeZoom src/Dodge/Update/Scroll.hs 89;" f doSectionSize src/Dodge/DisplayInventory.hs 215;" f doSideEffects appDodge/Main.hs 117;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 172;" f +doTabComplete src/Dodge/Terminal.hs 221;" f doTestDrawing src/Dodge/Render.hs 40;" 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 129;" f +doThrust src/Dodge/Projectile/Update.hs 132;" f doTimeScroll src/Dodge/Update.hs 205;" f doTmWdWd src/Dodge/WorldEffect.hs 101;" f doWallRotate src/Dodge/Update/Camera.hs 227;" f @@ -3263,10 +3273,6 @@ doorLerp src/Dodge/Door.hs 40;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 284;" f -doubleFindMax src/Dodge/Update/Scroll.hs 181;" f -doubleFindMin src/Dodge/Update/Scroll.hs 160;" f -doubleFindPred src/Dodge/Update/Scroll.hs 188;" f -doubleFindSucc src/Dodge/Update/Scroll.hs 167;" f doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 129;" f @@ -3476,7 +3482,7 @@ expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 188;" f -explodeShell src/Dodge/Projectile/Update.hs 229;" f +explodeShell src/Dodge/Projectile/Update.hs 274;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 656;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 80;" f @@ -3597,8 +3603,8 @@ getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 173;" f getBulletType src/Dodge/HeldUse.hs 906;" f getCloseObj src/Dodge/Update/Input/InGame.hs 539;" f -getCommand src/Dodge/Terminal.hs 52;" f -getCommands src/Dodge/Terminal.hs 49;" f +getCommand src/Dodge/Terminal.hs 62;" f +getCommands src/Dodge/Terminal.hs 59;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 349;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 336;" f @@ -3723,7 +3729,7 @@ heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f heldTorqueAmount src/Dodge/HeldUse.hs 586;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f -helpPara src/Dodge/Terminal.hs 97;" f +helpPara src/Dodge/Terminal.hs 104;" f helpPoly3D src/Polyhedra.hs 125;" f heron src/Geometry.hs 218;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f @@ -3896,7 +3902,7 @@ itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f itemSPic src/Dodge/Item/Draw/SPic.hs 17;" f itemScan src/Dodge/Item/Scope.hs 63;" f -itemScroll src/Dodge/Update/Scroll.hs 57;" f +itemScroll src/Dodge/Update/Scroll.hs 55;" f itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 127;" f itemScrollValue src/Dodge/Inventory/SelectionList.hs 154;" f itemShapeMax src/Dodge/Item/Orientation.hs 56;" f @@ -4076,8 +4082,8 @@ makeBlockDebris src/Dodge/Block/Debris.hs 36;" f makeBullet src/Dodge/HeldUse.hs 971;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f -makeColorTermLine src/Dodge/Terminal.hs 118;" f -makeColorTermPara src/Dodge/Terminal.hs 115;" f +makeColorTermLine src/Dodge/Terminal.hs 125;" f +makeColorTermPara src/Dodge/Terminal.hs 122;" f makeCorpse src/Dodge/Corpse/Make.hs 13;" f makeDebris src/Dodge/Block/Debris.hs 48;" f makeDebrisDirected src/Dodge/Block/Debris.hs 51;" f @@ -4107,8 +4113,8 @@ makeSourcedShader src/Shader/Compile.hs 54;" f makeSpark src/Dodge/Spark.hs 45;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 23;" f makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f -makeTermLine src/Dodge/Terminal.hs 103;" f -makeTermPara src/Dodge/Terminal.hs 112;" f +makeTermLine src/Dodge/Terminal.hs 110;" f +makeTermPara src/Dodge/Terminal.hs 119;" f makeTeslaArc src/Dodge/Tesla.hs 29;" f makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 39;" f makeTileFromPoly src/Tile.hs 34;" f @@ -4221,13 +4227,13 @@ mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 37;" f moveBullet src/Dodge/Bullet.hs 197;" f -moveCombineSel src/Dodge/Update/Scroll.hs 121;" f +moveCombineSel src/Dodge/Update/Scroll.hs 119;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 31;" f movePenBullet src/Dodge/Bullet.hs 203;" f -moveProjectile src/Dodge/Projectile/Update.hs 210;" f +moveProjectile src/Dodge/Projectile/Update.hs 249;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f -moveStuckGrenade src/Dodge/Projectile/Update.hs 197;" f +moveStuckGrenade src/Dodge/Projectile/Update.hs 228;" f moveToSideNthOutLink src/Dodge/Room/Warning.hs 96;" f moveWall src/Dodge/Wall/Move.hs 23;" f moveWallID src/Dodge/Wall/Move.hs 18;" f @@ -4388,7 +4394,7 @@ pingPongBetween src/Render.hs 210;" f pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 40;" f pistolerRoom src/Dodge/Room/Room.hs 338;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 173;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 196;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 57;" f @@ -4565,7 +4571,7 @@ qToV2 src/Quaternion.hs 52;" f qToV3 src/Quaternion.hs 49;" f quarterRoomSquare src/Dodge/Room/Procedural.hs 193;" f quarterRoomTri src/Dodge/Room/Procedural.hs 157;" f -quitCommand src/Dodge/Terminal.hs 100;" f +quitCommand src/Dodge/Terminal.hs 107;" f qz src/Quaternion.hs 67;" f rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f @@ -4611,6 +4617,9 @@ randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 216;" f rdToVec2s src/Dodge/Render.hs 424;" f readSaveSlot src/Dodge/Save.hs 45;" f +recComFindMax src/Dodge/Terminal.hs 175;" f +recComFindMin src/Dodge/Terminal.hs 169;" f +recTabComplete src/Dodge/Terminal.hs 212;" f recoilAmount src/Dodge/HeldUse.hs 467;" f rectNSWE src/Geometry/Polygon.hs 15;" f rectVV src/Geometry/Polygon.hs 40;" f @@ -4791,7 +4800,7 @@ screenPosAbs src/Dodge/ScreenPos.hs 15;" f screenToWorldPos src/Dodge/Base/Coordinate.hs 40;" f scrollAugInvSel src/Dodge/Inventory.hs 191;" f scrollAugNextInSection src/Dodge/Inventory.hs 204;" f -scrollRBOption src/Dodge/Update/Scroll.hs 202;" f +scrollRBOption src/Dodge/Update/Scroll.hs 200;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f scrollTimeBack src/Dodge/Update.hs 215;" f scrollTimeForward src/Dodge/Update.hs 232;" f @@ -4817,7 +4826,7 @@ selSecDrawCursor src/Dodge/Render/List.hs 101;" f selSecSelCol src/Dodge/Render/HUD.hs 501;" f selSecSelSize src/Dodge/SelectionSections.hs 143;" f selSecYint src/Dodge/SelectionSections.hs 152;" f -selectedItemScroll src/Dodge/Update/Scroll.hs 51;" f +selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 744;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f @@ -4887,8 +4896,8 @@ shapeVerxSize src/Shape/Parameters.hs 5;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f shatterGunSPic src/Dodge/Item/Draw/SPic.hs 313;" f shellExplosionCheck src/Dodge/Projectile/Update.hs 50;" f -shellHitCreature src/Dodge/Projectile/Update.hs 81;" f -shellHitFloor src/Dodge/Projectile/Update.hs 95;" f +shellHitCreature src/Dodge/Projectile/Update.hs 84;" f +shellHitFloor src/Dodge/Projectile/Update.hs 98;" f shellHitWall src/Dodge/Projectile/Update.hs 60;" f shellMag src/Dodge/Item/Ammo.hs 49;" f shellModule src/Dodge/Item/Scope.hs 123;" f @@ -4949,7 +4958,7 @@ shuffleRoomPos src/Dodge/Layout.hs 82;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 876;" f -simpleTermMessage src/Dodge/Terminal.hs 173;" f +simpleTermMessage src/Dodge/Terminal.hs 260;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 716;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 752;" f singleAmmo src/Dodge/Item/AmmoSlots.hs 64;" f @@ -5106,8 +5115,6 @@ t src/ShortShow.hs 48;" f tEast src/Dodge/Room/Corridor.hs 91;" f tToBTree src/Dodge/Tree/Compose.hs 92;" f tWest src/Dodge/Room/Corridor.hs 116;" f -tabComplete src/Dodge/Terminal.hs 124;" f -tabComplete' src/Dodge/Terminal.hs 130;" f takeN src/RandomHelp.hs 44;" f takeNMore src/RandomHelp.hs 41;" f takeOne src/RandomHelp.hs 22;" f @@ -5132,16 +5139,17 @@ targetYouLOS src/Dodge/Creature/ChooseTarget.hs 8;" f targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 202;" f targetYouWhenCognizant src/Dodge/Creature/SetTarget.hs 9;" f targetingScope src/Dodge/Item/Scope.hs 38;" f +tbComplete src/Dodge/Terminal.hs 202;" f teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 544;" f termScreenColor src/Dodge/Terminal/Color.hs 8;" f -termSoundLine src/Dodge/Terminal.hs 43;" f -termTextColor src/Dodge/Terminal.hs 46;" f +termSoundLine src/Dodge/Terminal.hs 50;" f +termTextColor src/Dodge/Terminal.hs 53;" f terminalLDP src/Dodge/ListDisplayParams.hs 44;" f -terminalReturnEffect src/Dodge/Terminal.hs 177;" f +terminalReturnEffect src/Dodge/Terminal.hs 264;" f terminalSPic src/Dodge/Machine/Draw.hs 47;" f terminalScreenGlow src/Dodge/Machine/Update.hs 44;" f terminalShape src/Dodge/Machine/Draw.hs 50;" f -terminalWheelEvent src/Dodge/Update/Scroll.hs 131;" f +terminalWheelEvent src/Dodge/Update/Scroll.hs 129;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f teslaGunPic src/Dodge/Item/Draw/SPic.hs 410;" f teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f @@ -5150,13 +5158,13 @@ testInventory src/Dodge/Creature.hs 290;" f testStringInit src/Dodge/TestString.hs 34;" f text src/Picture/Base.hs 196;" f textGrad src/Picture/Text.hs 5;" f -textInputBlurb src/Dodge/Terminal.hs 37;" f +textInputBlurb src/Dodge/Terminal.hs 44;" f textInputFocus src/Dodge/InputFocus.hs 11;" f textJustifyCenter src/Picture/Base.hs 227;" f textJustifyLeft src/Picture/Base.hs 223;" f textJustifyRight src/Picture/Base.hs 213;" f textRight src/Picture/Base.hs 218;" f -textTerminal src/Dodge/Terminal.hs 34;" f +textTerminal src/Dodge/Terminal.hs 41;" f textVMirror src/Picture/Base.hs 231;" f tflat2 src/Picture/Data.hs 56;" f tflat3 src/Picture/Data.hs 60;" f @@ -5194,8 +5202,8 @@ tingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 698;" f tinitusS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 802;" f titleOptionsMenu src/Dodge/Menu.hs 106;" f titleOptionsNoWrite src/Dodge/Menu.hs 109;" f -tlDoEffect src/Dodge/Terminal.hs 109;" f -tlSetStatus src/Dodge/Terminal.hs 106;" f +tlDoEffect src/Dodge/Terminal.hs 116;" f +tlSetStatus src/Dodge/Terminal.hs 113;" f tmDistributeAmmo src/Dodge/WorldEffect.hs 117;" f tmDistributeLines src/Dodge/Room/Room.hs 449;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 54;" f @@ -5213,7 +5221,7 @@ toV2 src/Geometry/Data.hs 54;" f toV3 src/Geometry/Data.hs 57;" f toV4 src/Geometry/Data.hs 60;" f toggleCombineInv src/Dodge/DisplayInventory.hs 315;" f -toggleCommands src/Dodge/Terminal.hs 81;" f +toggleCommands src/Dodge/Terminal.hs 87;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 67;" f toggleExamineInv src/Dodge/Creature/Impulse/UseItem.hs 105;" f toggleJust src/MaybeHelp.hs 39;" f @@ -5291,9 +5299,9 @@ tryPlay src/Sound.hs 84;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 24;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 54;" f trySeedFromClipboard src/Dodge/Menu.hs 96;" f -trySpin src/Dodge/Projectile/Update.hs 117;" f +trySpin src/Dodge/Projectile/Update.hs 120;" f trySynthBullet src/Dodge/Creature/State.hs 167;" f -tryThrust src/Dodge/Projectile/Update.hs 123;" f +tryThrust src/Dodge/Projectile/Update.hs 126;" f tryUseParent src/Dodge/Creature/State.hs 145;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f @@ -5340,7 +5348,7 @@ updateArc src/Dodge/Tesla.hs 44;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 484;" f updateBarrel src/Dodge/Barreloid.hs 44;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f -updateBaseWheelEvent src/Dodge/Update/Scroll.hs 34;" f +updateBaseWheelEvent src/Dodge/Update/Scroll.hs 32;" f updateBounds src/Dodge/Update/Camera.hs 265;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f @@ -5428,7 +5436,7 @@ updateRandNode src/TreeHelp.hs 109;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f updateRootItemID src/Dodge/Inventory/Location.hs 41;" f -updateScopeZoom src/Dodge/Update/Scroll.hs 79;" f +updateScopeZoom src/Dodge/Update/Scroll.hs 77;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 262;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f @@ -5452,7 +5460,7 @@ updateUseInputInGame src/Dodge/Update/Input/InGame.hs 46;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 24;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 11;" f updateWallDamages src/Dodge/Update/WallDamage.hs 15;" f -updateWheelEvent src/Dodge/Update/Scroll.hs 25;" f +updateWheelEvent src/Dodge/Update/Scroll.hs 23;" f updateWheelEvents src/Dodge/Update.hs 417;" f updateWorldEventFlag src/Dodge/Update.hs 121;" f updateWorldEventFlags src/Dodge/Update.hs 109;" f @@ -5655,7 +5663,7 @@ zoneWall src/Dodge/Zoning/Wall.hs 65;" f zonesAroundPoint src/Dodge/Zoning/Base.hs 98;" f zonesExtract src/Dodge/Zoning/Base.hs 62;" f zoomFloatingCamera src/Dodge/Update/Camera.hs 76;" f -zoomInLongGun src/Dodge/Update/Scroll.hs 105;" f -zoomOutLongGun src/Dodge/Update/Scroll.hs 113;" f +zoomInLongGun src/Dodge/Update/Scroll.hs 103;" f +zoomOutLongGun src/Dodge/Update/Scroll.hs 111;" f zoomScope src/Dodge/Item/Scope.hs 33;" f -zoomSpeed src/Dodge/Update/Scroll.hs 102;" f +zoomSpeed src/Dodge/Update/Scroll.hs 100;" f