From 33b90d637a6bd4d0616d5ee32f28858cab287965 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 17 Aug 2025 09:46:41 +0100 Subject: [PATCH] Tweak terminal tab completion --- src/Dodge/Terminal.hs | 66 ++++++++----- tags | 224 +++++++++++++++++++++--------------------- 2 files changed, 155 insertions(+), 135 deletions(-) diff --git a/src/Dodge/Terminal.hs b/src/Dodge/Terminal.hs index 1541bf979..b176c5a2d 100644 --- a/src/Dodge/Terminal.hs +++ b/src/Dodge/Terminal.hs @@ -1,11 +1,12 @@ {-# LANGUAGE LambdaCase #-} + module Dodge.Terminal ( --- doTerminalCommandEffect, + -- doTerminalCommandEffect, makeTermLine, --- commandFutureLines, --- quitCommand, --- helpCommand, --- commandsCommand, + -- commandFutureLines, + -- quitCommand, + -- helpCommand, + -- commandsCommand, connectionBlurbLines, disconnectTerminal, basicTerminal, @@ -22,14 +23,15 @@ module Dodge.Terminal ( tabComplete, ) where -import qualified Data.ListTrie.Patricia.Map.Enum as PTE --import Dodge.Data.WorldEffect -import Dodge.Data.Terminal.Status + import Color +import qualified Data.ListTrie.Patricia.Map.Enum as PTE --import Control.Monad --import Data.Char --import qualified Data.Map.Strict as M import Data.Maybe +import Dodge.Data.Terminal.Status import Dodge.Data.World import Dodge.Default import Dodge.SoundLogic @@ -52,7 +54,8 @@ connectionBlurbLines tls = , TLine 0 [TerminalLineConst "LOADING TEXT INTERFACE..." termTextColor] TmWdId ] ++ tls - ++ [ TLine 10 [TerminalLineConst "READY FOR INPUT" termTextColor] (TmTmSetStatus (TerminalTextInput ""))] + ++ [TLine 10 [TerminalLineConst "READY FOR INPUT" termTextColor] (TmTmSetStatus (TerminalTextInput ""))] + -- ++ [TerminalLineEffect 0 (TmTmSetStatus (TerminalTextInput "" 0))] --quitCommand :: TerminalCommand @@ -121,10 +124,13 @@ helpCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) helpCommand = PTE.singleton "HELP" (fmap makeTermPara helpStrings) helpStrings :: PTE.TrieMap Char String -helpStrings = PTE.fromList - [("", "THIS TERMINAL PROCESSES TEXT INPUT. USE TAB FOR AVAILABLE COMMANDS AND AUTOCOMPLETE.") - ,("HELP", "BASIC HELP. ACCEPTS A COMMAND AS AN ARGUMENT.") - ] +helpStrings = + PTE.fromList + [ ("", "THIS TERMINAL PROCESSES TEXT INPUT. USE TAB FOR AVAILABLE COMMANDS AND AUTOCOMPLETE.") + , ("HELP", "BASIC HELP. ACCEPTS A COMMAND AS AN ARGUMENT.") + , ("QUIT", "SHUTDOWN TERMINAL.") + , ("QTEST", "TEST.") + ] --commandsCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) --commandsCommand = PTE.singleton "COMMANDS" (PTE.singleton "" [TLine 0 [] TmDisplayCommands]) @@ -147,13 +153,29 @@ makeColorTermLine col str = TLine 1 [TerminalLineConst str col] TmWdId commandColor :: Color commandColor = yellow +-- ugly tabComplete :: String -> Terminal -> Terminal -tabComplete s tm = case fmap fst $ PTE.toList $ PTE.lookupPrefix s $ getCommands tm of - [] -> tm - [x] -> tm & tmStatus .~ TerminalTextInput x - xs -> tm & tmFutureLines .~ - makeColorTermPara commandColor - (unwords xs) +tabComplete s' tm = case PTE.lookup s $ getCommands tm of + Just m -> case fmap fst $ PTE.toList $ PTE.lookupPrefix a m of + [] -> tm + [x] -> tm & tmStatus .~ TerminalTextInput (s ++ " " ++ x) + xs -> + tm & tmFutureLines + .~ makeColorTermPara + commandColor + (unwords xs) + Nothing -> case fmap fst $ PTE.toList $ PTE.lookupPrefix s $ getCommands tm of + [] -> tm + [x] -> tm & tmStatus .~ TerminalTextInput x + xs -> + tm & tmFutureLines + .~ makeColorTermPara + commandColor + (unwords xs) + where + ss = words s' + s = fromMaybe "" $ ss ^? ix 0 + a = fromMaybe "" $ ss ^? ix 1 --doTerminalCommandEffect :: TerminalCommandEffect -> Terminal -> World -> EffectArguments --doTerminalCommandEffect tce = case tce of @@ -298,20 +320,20 @@ simpleTermMessage strs = defaultTerminal & tmBootLines .~ map makeTermLine strs terminalReturnEffect :: Int -> World -> World terminalReturnEffect tmid w = fromMaybe w $ do - tm <- w ^? cWorld . lWorld . terminals. ix tmid + tm <- w ^? cWorld . lWorld . terminals . ix tmid s <- tm ^? tmStatus . tiText return $ runTerminalInput s tm $ w & cWorld . lWorld . terminals . ix tmid . tmDisplayedLines - .:~ (getPromptTM ++ s,termTextColor) + .:~ (getPromptTM ++ s, termTextColor) runTerminalInput :: String -> Terminal -> World -> World runTerminalInput s tm w = w & cWorld . lWorld . terminals . ix (_tmID tm) %~ ( --(tmInput .~ TerminalInput{ _tiSel = (0, 0)}) - - (tmFutureLines ++.~ ss) + + (tmFutureLines ++.~ ss) . (tmCommandHistory %~ take 10 . (s :)) . (tmStatus .~ TerminalTextInput "") ) diff --git a/tags b/tags index 946950e56..c2a1372a9 100644 --- a/tags +++ b/tags @@ -17,7 +17,7 @@ <$> src/Dodge/Data/Camera.hs 39;" o <$> src/Dodge/Data/Creature.hs 80;" o <$> src/Dodge/Data/LWorld.hs 184;" o -<$> src/Dodge/Data/Terminal.hs 106;" o +<$> src/Dodge/Data/Terminal.hs 104;" o ABSOLUTE src/Dodge/Data/Item/Combine.hs 40;" C AIUNIT src/Dodge/Data/Item/Combine.hs 75;" C ALTERIFLE src/Dodge/Data/Item/Combine.hs 155;" C @@ -392,7 +392,7 @@ Ears src/Dodge/Data/Creature/Perception.hs 47;" C East src/Dodge/Data/CardinalPoint.hs 5;" C East8 src/Dodge/Data/CardinalPoint.hs 13;" C EdgeObstacle src/Dodge/Data/PathGraph.hs 48;" t -EffectArguments src/Dodge/Data/Terminal.hs 55;" t +EffectArguments src/Dodge/Data/Terminal.hs 54;" t EighthRes src/Dodge/Data/Config.hs 97;" C Eldritch src/Dodge/Data/Scenario.hs 34;" C ElectricSensor src/Dodge/Data/Machine/Sensor/Type.hs 12;" C @@ -846,7 +846,7 @@ NewIntMap src/NewInt.hs 18;" t NewSideEffect src/Dodge/Data/Universe.hs 65;" C NoAction src/Dodge/Data/ActionPlan.hs 152;" C NoAmmoRequired src/Dodge/Data/Muzzle.hs 25;" C -NoArguments src/Dodge/Data/Terminal.hs 56;" C +NoArguments src/Dodge/Data/Terminal.hs 55;" C NoBeamCombine src/Dodge/Data/Beam.hs 43;" C NoConcurrentEffect src/Loop/Data.hs 7;" C NoCrImp src/Dodge/Data/CreatureEffect.hs 24;" C @@ -946,7 +946,7 @@ OnRightWrist src/Dodge/Data/Equipment/Misc.hs 26;" C OnSpecial src/Dodge/Data/Equipment/Misc.hs 28;" C OnTurret src/Dodge/Data/Item/Location.hs 37;" C OnceSound src/Dodge/Data/SoundOrigin.hs 16;" C -OneArgument src/Dodge/Data/Terminal.hs 57;" C +OneArgument src/Dodge/Data/Terminal.hs 56;" C OneHand src/Dodge/Data/AimStance.hs 9;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 14;" C OnwardList src/Dodge/Annotation/Data.hs 16;" C @@ -1309,9 +1309,9 @@ SwarmCrit src/Dodge/Data/Creature/Misc.hs 71;" C SwitchToItem src/Dodge/Data/ActionPlan.hs 38;" C TAPE src/Dodge/Data/Item/Combine.hs 56;" C TARGETING src/Dodge/Data/Item/Combine.hs 22;" C -TCBase src/Dodge/Data/Terminal.hs 81;" C -TCInfo src/Dodge/Data/Terminal.hs 80;" C -TCom src/Dodge/Data/Terminal.hs 80;" t +TCBase src/Dodge/Data/Terminal.hs 80;" C +TCInfo src/Dodge/Data/Terminal.hs 79;" C +TCom src/Dodge/Data/Terminal.hs 79;" t TESLAGUN src/Dodge/Data/Item/Combine.hs 169;" C THERMOMETER src/Dodge/Data/Item/Combine.hs 85;" C THREELINES src/Dodge/Data/GenParams.hs 20;" C @@ -1319,7 +1319,7 @@ TIMESCROLLER src/Dodge/Data/Item/Combine.hs 144;" C TIMESTOPPER src/Dodge/Data/Item/Combine.hs 143;" C TIN src/Dodge/Data/Item/Combine.hs 58;" C TINMAG src/Dodge/Data/Item/Combine.hs 108;" C -TLine src/Dodge/Data/Terminal.hs 44;" C +TLine src/Dodge/Data/Terminal.hs 43;" C TO src/Shader/Data.hs 59;" t TORCH src/Dodge/Data/Item/Combine.hs 176;" C TRACTORGUN src/Dodge/Data/Item/Combine.hs 170;" C @@ -1343,28 +1343,28 @@ TargetingLaser src/Dodge/Data/Laser.hs 18;" C TargetingType src/Dodge/Data/Item/Targeting.hs 11;" t TeleSound src/Dodge/Data/SoundOrigin.hs 36;" C TermSignal src/Dodge/Data/Input.hs 54;" t -Terminal src/Dodge/Data/Terminal.hs 26;" t +Terminal src/Dodge/Data/Terminal.hs 25;" t TerminalBusy src/Dodge/Data/Terminal/Status.hs 12;" C -TerminalCommand src/Dodge/Data/Terminal.hs 73;" t -TerminalCommandArguments src/Dodge/Data/Terminal.hs 63;" C -TerminalCommandEffect src/Dodge/Data/Terminal.hs 62;" t -TerminalCommandEffectCommands src/Dodge/Data/Terminal.hs 69;" C -TerminalCommandEffectDamageCoding src/Dodge/Data/Terminal.hs 64;" C -TerminalCommandEffectHelp src/Dodge/Data/Terminal.hs 67;" C -TerminalCommandEffectLinkedObject src/Dodge/Data/Terminal.hs 66;" C -TerminalCommandEffectNoArgumentsStr src/Dodge/Data/Terminal.hs 68;" C -TerminalCommandEffectNone src/Dodge/Data/Terminal.hs 71;" C -TerminalCommandEffectSensorParameter src/Dodge/Data/Terminal.hs 65;" C -TerminalCommandEffectSingleCommand src/Dodge/Data/Terminal.hs 70;" C -TerminalLine src/Dodge/Data/Terminal.hs 44;" t -TerminalLineConst src/Dodge/Data/Terminal.hs 42;" C -TerminalLineString src/Dodge/Data/Terminal.hs 42;" t +TerminalCommand src/Dodge/Data/Terminal.hs 72;" t +TerminalCommandArguments src/Dodge/Data/Terminal.hs 62;" C +TerminalCommandEffect src/Dodge/Data/Terminal.hs 61;" t +TerminalCommandEffectCommands src/Dodge/Data/Terminal.hs 68;" C +TerminalCommandEffectDamageCoding src/Dodge/Data/Terminal.hs 63;" C +TerminalCommandEffectHelp src/Dodge/Data/Terminal.hs 66;" C +TerminalCommandEffectLinkedObject src/Dodge/Data/Terminal.hs 65;" C +TerminalCommandEffectNoArgumentsStr src/Dodge/Data/Terminal.hs 67;" C +TerminalCommandEffectNone src/Dodge/Data/Terminal.hs 70;" C +TerminalCommandEffectSensorParameter src/Dodge/Data/Terminal.hs 64;" C +TerminalCommandEffectSingleCommand src/Dodge/Data/Terminal.hs 69;" C +TerminalLine src/Dodge/Data/Terminal.hs 43;" t +TerminalLineConst src/Dodge/Data/Terminal.hs 41;" C +TerminalLineString src/Dodge/Data/Terminal.hs 41;" t TerminalOff src/Dodge/Data/Terminal/Status.hs 11;" C TerminalPressTo src/Dodge/Data/Terminal/Status.hs 14;" C TerminalSound src/Dodge/Data/SoundOrigin.hs 24;" C TerminalStatus src/Dodge/Data/Terminal/Status.hs 10;" t TerminalTextInput src/Dodge/Data/Terminal/Status.hs 13;" C -TerminalToggle src/Dodge/Data/Terminal.hs 50;" t +TerminalToggle src/Dodge/Data/Terminal.hs 49;" t Terrestrial src/Dodge/Data/Scenario.hs 72;" C TerrestrialBiome src/Dodge/Data/Scenario.hs 76;" t TeslaArc src/Dodge/Data/TeslaArc.hs 17;" t @@ -1376,15 +1376,14 @@ Tile src/Data/Tile.hs 16;" t Tiled src/Data/Tile.hs 14;" C TimeFlowStatus src/Dodge/Data/World.hs 58;" t Tiny src/Shape/Data.hs 32;" C -TmDisplayCommands src/Dodge/Data/Terminal.hs 96;" C -TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 94;" C -TmTmSetStatus src/Dodge/Data/Terminal.hs 95;" C -TmWdId src/Dodge/Data/Terminal.hs 89;" C -TmWdWd src/Dodge/Data/Terminal.hs 88;" t -TmWdWdDisconnectTerminal src/Dodge/Data/Terminal.hs 90;" C -TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 93;" C -TmWdWdTermSound src/Dodge/Data/Terminal.hs 92;" C -TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 91;" C +TmTmClearDisplayedLines src/Dodge/Data/Terminal.hs 93;" C +TmTmSetStatus src/Dodge/Data/Terminal.hs 94;" C +TmWdId src/Dodge/Data/Terminal.hs 88;" C +TmWdWd src/Dodge/Data/Terminal.hs 87;" t +TmWdWdDisconnectTerminal src/Dodge/Data/Terminal.hs 89;" C +TmWdWdDoDeathTriggers src/Dodge/Data/Terminal.hs 92;" C +TmWdWdTermSound src/Dodge/Data/Terminal.hs 91;" C +TmWdWdfromWdWd src/Dodge/Data/Terminal.hs 90;" C ToContinueStart src/Sound/Data.hs 27;" C ToPlaySound src/Sound/Data.hs 35;" t ToStart src/Sound/Data.hs 26;" C @@ -1563,8 +1562,8 @@ _apStrategy src/Dodge/Data/ActionPlan.hs 21;" f _aps src/Dodge/Data/Muzzle.hs 22;" f _arbitraryAction src/Dodge/Data/ActionPlan.hs 167;" f _arcNode src/Dodge/Data/LWorld.hs 117;" f -_argList src/Dodge/Data/Terminal.hs 59;" f -_argType src/Dodge/Data/Terminal.hs 58;" f +_argList src/Dodge/Data/Terminal.hs 58;" f +_argType src/Dodge/Data/Terminal.hs 57;" f _asDir src/Dodge/Data/ArcStep.hs 16;" f _asObject src/Dodge/Data/ArcStep.hs 17;" f _asPos src/Dodge/Data/ArcStep.hs 15;" f @@ -1697,7 +1696,7 @@ _cloudEBO src/Data/Preload/Render.hs 51;" f _cloudShader src/Data/Preload/Render.hs 50;" f _cloudVBO src/Data/Preload/Render.hs 49;" f _clouds src/Dodge/Data/LWorld.hs 103;" f -_cmdEffect src/Dodge/Data/Terminal.hs 56;" f +_cmdEffect src/Dodge/Data/Terminal.hs 55;" f _colorBlurShader src/Data/Preload/Render.hs 22;" f _coolEnd src/Dodge/Data/TriggerType.hs 17;" f _coolSound src/Dodge/Data/Item/Params.hs 24;" f @@ -2420,10 +2419,10 @@ _tbPos src/Dodge/Data/TractorBeam.hs 14;" f _tbStartPos src/Dodge/Data/TractorBeam.hs 15;" f _tbTime src/Dodge/Data/TractorBeam.hs 17;" f _tbVel src/Dodge/Data/TractorBeam.hs 16;" f -_tcAlias src/Dodge/Data/Terminal.hs 75;" f -_tcEffect src/Dodge/Data/Terminal.hs 77;" f -_tcHelp src/Dodge/Data/Terminal.hs 76;" f -_tcString src/Dodge/Data/Terminal.hs 74;" f +_tcAlias src/Dodge/Data/Terminal.hs 74;" f +_tcEffect src/Dodge/Data/Terminal.hs 76;" f +_tcHelp src/Dodge/Data/Terminal.hs 75;" f +_tcString src/Dodge/Data/Terminal.hs 73;" f _termID src/Dodge/Data/HUD.hs 42;" f _terminals src/Dodge/Data/LWorld.hs 128;" f _teslaArcs src/Dodge/Data/LWorld.hs 116;" f @@ -2438,21 +2437,21 @@ _tileZero src/Data/Tile.hs 19;" f _tiles src/Data/Tile.hs 14;" f _timeFlow src/Dodge/Data/World.hs 38;" f _timeFlowCharge src/Dodge/Data/World.hs 78;" f -_tlEffect src/Dodge/Data/Terminal.hs 47;" f -_tlPause src/Dodge/Data/Terminal.hs 45;" f -_tlString src/Dodge/Data/Terminal.hs 46;" f -_tmBootLines src/Dodge/Data/Terminal.hs 28;" f -_tmButtonID src/Dodge/Data/Terminal.hs 29;" f -_tmCommandHistory src/Dodge/Data/Terminal.hs 37;" f -_tmCommands src/Dodge/Data/Terminal.hs 34;" f -_tmDeathEffect src/Dodge/Data/Terminal.hs 35;" f -_tmDisplayedLines src/Dodge/Data/Terminal.hs 32;" f -_tmExternalColor src/Dodge/Data/Terminal.hs 31;" f -_tmFutureLines src/Dodge/Data/Terminal.hs 33;" f -_tmID src/Dodge/Data/Terminal.hs 27;" f -_tmMachineID src/Dodge/Data/Terminal.hs 30;" f -_tmStatus src/Dodge/Data/Terminal.hs 36;" f -_tmToggles src/Dodge/Data/Terminal.hs 38;" f +_tlEffect src/Dodge/Data/Terminal.hs 46;" f +_tlPause src/Dodge/Data/Terminal.hs 44;" f +_tlString src/Dodge/Data/Terminal.hs 45;" f +_tmBootLines src/Dodge/Data/Terminal.hs 27;" f +_tmButtonID src/Dodge/Data/Terminal.hs 28;" f +_tmCommandHistory src/Dodge/Data/Terminal.hs 36;" f +_tmCommands src/Dodge/Data/Terminal.hs 33;" f +_tmDeathEffect src/Dodge/Data/Terminal.hs 34;" f +_tmDisplayedLines src/Dodge/Data/Terminal.hs 31;" f +_tmExternalColor src/Dodge/Data/Terminal.hs 30;" f +_tmFutureLines src/Dodge/Data/Terminal.hs 32;" f +_tmID src/Dodge/Data/Terminal.hs 26;" f +_tmMachineID src/Dodge/Data/Terminal.hs 29;" f +_tmStatus src/Dodge/Data/Terminal.hs 35;" f +_tmToggles src/Dodge/Data/Terminal.hs 37;" f _toPlaySoundChunkID src/Sound/Data.hs 41;" f _toPlaySoundPos src/Sound/Data.hs 38;" f _toPlaySoundStatus src/Sound/Data.hs 37;" f @@ -2466,8 +2465,8 @@ _tractorBeams src/Dodge/Data/LWorld.hs 123;" f _trieChildren src/SimpleTrie.hs 12;" f _trieMVal src/SimpleTrie.hs 11;" f _triggers src/Dodge/Data/LWorld.hs 133;" f -_ttDeathEffect src/Dodge/Data/Terminal.hs 52;" f -_ttTriggerID src/Dodge/Data/Terminal.hs 51;" f +_ttDeathEffect src/Dodge/Data/Terminal.hs 51;" f +_ttTriggerID src/Dodge/Data/Terminal.hs 50;" f _tuDir src/Dodge/Data/Machine.hs 61;" f _tuFireTime src/Dodge/Data/Machine.hs 60;" f _tuTurnSpeed src/Dodge/Data/Machine.hs 59;" f @@ -2762,7 +2761,7 @@ basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f basicMuzFlare src/Dodge/HeldUse.hs 709;" f -basicTerminal src/Dodge/Terminal.hs 38;" f +basicTerminal src/Dodge/Terminal.hs 42;" f battery src/Dodge/Item/Ammo.hs 63;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f belowNumX src/Dodge/Combine/Graph.hs 86;" f @@ -2978,8 +2977,7 @@ combineList src/Dodge/Combine.hs 20;" f combineRooms src/Dodge/Room/Procedural.hs 152;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 480;" f combineTree src/Dodge/Tree/Compose.hs 66;" f -commandColor src/Dodge/Terminal.hs 143;" f -commandsCommand src/Dodge/Terminal.hs 125;" f +commandColor src/Dodge/Terminal.hs 147;" f commonPrefix src/Dodge/Debug/Terminal.hs 146;" f comp src/Quaternion.hs 65;" f compactDraw src/Dodge/LevelGen.hs 91;" f @@ -2993,8 +2991,8 @@ conEffects src/Dodge/Concurrent.hs 12;" f conLDTToConDT src/Dodge/DoubleTree.hs 22;" f concurrentIS src/Dodge/Update/Input/InGame.hs 291;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f -connectionBlurb src/Dodge/Terminal.hs 99;" f -connectionBlurbLines src/Dodge/Terminal.hs 45;" f +connectionBlurb src/Dodge/Terminal.hs 103;" f +connectionBlurbLines src/Dodge/Terminal.hs 49;" f constructEdges src/Polyhedra.hs 34;" f constructEdgesList src/Polyhedra.hs 43;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f @@ -3119,7 +3117,7 @@ dShadCol src/Dodge/Render/List.hs 215;" f damMatSideEffect src/Dodge/Material/Damage.hs 13;" f damThingHitWith src/Dodge/Damage.hs 72;" f damToExpBarrel src/Dodge/Barreloid.hs 49;" f -damageCodeCommand src/Dodge/Terminal.hs 243;" f +damageCodeCommand src/Dodge/Terminal.hs 255;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f damageDirection src/Dodge/Damage.hs 35;" f @@ -3160,7 +3158,6 @@ debugMenuOptions src/Dodge/Menu.hs 122;" f debugOn src/Dodge/Data/Config.hs 151;" f debugSelectCreatureList src/Dodge/Debug.hs 86;" f debugSelectCreatureMessage src/Dodge/Debug.hs 77;" f -decodedtmap src/Dodge/Terminal.hs 216;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f decomposeTree src/Dodge/Tree/Compose.hs 57;" f decoratedBlock src/Dodge/Placement/Instance/Block.hs 10;" f @@ -3260,7 +3257,7 @@ dim src/Color.hs 112;" f dirtColor src/Dodge/Default/Wall.hs 81;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f -disconnectTerminal src/Dodge/Terminal.hs 228;" f +disconnectTerminal src/Dodge/Terminal.hs 240;" f displayConfig src/Dodge/Menu.hs 213;" f displayControls src/Dodge/Menu.hs 223;" f displayFrameTicks src/Dodge/Render/Picture.hs 45;" f @@ -3297,8 +3294,8 @@ doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f doDamage src/Dodge/Creature/State.hs 41;" f -doDeathToggle src/Dodge/WorldEffect.hs 93;" f -doDeathTriggers src/Dodge/WorldEffect.hs 88;" f +doDeathToggle src/Dodge/WorldEffect.hs 90;" f +doDeathTriggers src/Dodge/WorldEffect.hs 85;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 37;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 62;" f @@ -3335,12 +3332,12 @@ 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 420;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 426;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f doRoomShift src/Dodge/Room/Link.hs 33;" f -doScopeZoom src/Dodge/Update/Scroll.hs 85;" f +doScopeZoom src/Dodge/Update/Scroll.hs 88;" f doSectionSize src/Dodge/DisplayInventory.hs 217;" f doSideEffects appDodge/Main.hs 120;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 166;" f @@ -3349,13 +3346,13 @@ doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 183;" f doTimeScroll src/Dodge/Update.hs 208;" f -doTmWdWd src/Dodge/WorldEffect.hs 96;" f +doTmWdWd src/Dodge/WorldEffect.hs 93;" f doWallRotate src/Dodge/Update/Camera.hs 213;" f doWdBl src/Dodge/WorldBool.hs 10;" f 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 +doWdWd src/Dodge/WorldEffect.hs 27;" f doWorldEvents src/Dodge/Update.hs 446;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f @@ -3365,6 +3362,10 @@ doorMechanismStepwise src/Dodge/DrWdWd.hs 59;" f dotV src/Geometry/Vector.hs 75;" f dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 265;" f +doubleFindMax src/Dodge/Update/Scroll.hs 196;" f +doubleFindMin src/Dodge/Update/Scroll.hs 175;" f +doubleFindPred src/Dodge/Update/Scroll.hs 203;" f +doubleFindSucc src/Dodge/Update/Scroll.hs 182;" f doubleLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 28;" f doublePair src/Geometry.hs 165;" f doublePairSet src/Geometry.hs 169;" f @@ -3568,7 +3569,7 @@ errorNormalizeV src/Geometry.hs 55;" f errorPointInPolygon src/Geometry.hs 47;" f evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 150;" f evenOddSplit src/Dodge/Base.hs 160;" f -exitTerminalSubInv src/Dodge/Terminal.hs 236;" f +exitTerminalSubInv src/Dodge/Terminal.hs 248;" f expandLine src/Dodge/Picture.hs 30;" f expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f @@ -3704,11 +3705,10 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 84;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 169;" f getBulletType src/Dodge/HeldUse.hs 943;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 516;" f -getCommand src/Dodge/Terminal.hs 111;" f -getCommands src/Dodge/Terminal.hs 108;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 522;" f +getCommand src/Dodge/Terminal.hs 115;" f +getCommands src/Dodge/Terminal.hs 112;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 45;" f -getDamageCoding src/Dodge/Terminal.hs 188;" f getDistortions src/Dodge/Render.hs 435;" f getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1310;" f @@ -3726,7 +3726,6 @@ getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 6;" f getRootItemBounds src/Dodge/Render/HUD.hs 96;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f -getSensor src/Dodge/Terminal.hs 200;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 126;" f getTiles src/Dodge/Layout.hs 208;" f @@ -3826,9 +3825,9 @@ heldItemWeight src/Dodge/Creature/Statistics.hs 72;" f heldPositionInfo src/Dodge/Item/Info.hs 241;" f heldTorqueAmount src/Dodge/HeldUse.hs 584;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f -helpCommand src/Dodge/Terminal.hs 116;" f +helpCommand src/Dodge/Terminal.hs 120;" f helpPoly3D src/Polyhedra.hs 125;" f -helpStrings src/Dodge/Terminal.hs 119;" f +helpStrings src/Dodge/Terminal.hs 123;" f heron src/Geometry.hs 221;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f highBar src/Dodge/Room/Foreground.hs 89;" f @@ -4003,7 +4002,7 @@ itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f itemSPic src/Dodge/Item/Draw/SPic.hs 33;" f itemScan src/Dodge/Item/Scope.hs 63;" f -itemScroll src/Dodge/Update/Scroll.hs 53;" f +itemScroll src/Dodge/Update/Scroll.hs 56;" f itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 121;" f itemScrollValue src/Dodge/Inventory/SelectionList.hs 148;" f itemSidePush src/Dodge/HeldUse.hs 383;" f @@ -4177,8 +4176,8 @@ makeBullet src/Dodge/HeldUse.hs 1021;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f -makeColorTermLine src/Dodge/Terminal.hs 140;" f -makeColorTermPara src/Dodge/Terminal.hs 137;" f +makeColorTermLine src/Dodge/Terminal.hs 144;" f +makeColorTermPara src/Dodge/Terminal.hs 141;" f makeCorpse src/Dodge/Corpse/Make.hs 13;" f makeDebris src/Dodge/Block/Debris.hs 45;" f makeDebrisDirected src/Dodge/Block/Debris.hs 48;" f @@ -4214,8 +4213,8 @@ makeSourcedShader src/Shader/Compile.hs 167;" f makeSpark src/Dodge/Spark.hs 45;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 19;" f makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f -makeTermLine src/Dodge/Terminal.hs 131;" f -makeTermPara src/Dodge/Terminal.hs 134;" f +makeTermLine src/Dodge/Terminal.hs 135;" f +makeTermPara src/Dodge/Terminal.hs 138;" f makeTeslaArc src/Dodge/Tesla.hs 29;" f makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f makeTileFromPoly src/Tile.hs 34;" f @@ -4235,7 +4234,7 @@ 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 537;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 543;" f maybeOpenConsole src/Dodge/Update.hs 131;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f @@ -4320,7 +4319,7 @@ mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 60;" f mouseCursorType src/Dodge/Render/Picture.hs 86;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f moveBullet src/Dodge/Bullet.hs 193;" f -moveCombineSel src/Dodge/Update/Scroll.hs 115;" f +moveCombineSel src/Dodge/Update/Scroll.hs 118;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 44;" f moveLSThen src/Dodge/Placement/Instance/LightSource.hs 30;" f movePenBullet src/Dodge/Bullet.hs 199;" f @@ -4454,7 +4453,7 @@ parseNum src/Dodge/Debug/Terminal.hs 75;" 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 502;" f +pauseGame src/Dodge/Update/Input/InGame.hs 508;" f pauseMenu src/Dodge/Menu.hs 56;" f pauseMenuOptions src/Dodge/Menu.hs 61;" f pauseSound src/Dodge/SoundLogic.hs 42;" f @@ -4695,7 +4694,7 @@ qToV2 src/Quaternion.hs 56;" f qToV3 src/Quaternion.hs 53;" f quarterRoomSquare src/Dodge/Room/Procedural.hs 213;" f quarterRoomTri src/Dodge/Room/Procedural.hs 177;" f -quitCommand src/Dodge/Terminal.hs 128;" f +quitCommand src/Dodge/Terminal.hs 132;" f qz src/Quaternion.hs 71;" f rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f @@ -4883,7 +4882,7 @@ rprShift src/Dodge/PlacementSpot.hs 102;" f rsObjectColor src/Dodge/RadarSweep/Draw.hs 34;" f runPastStart src/Dodge/Room/Start.hs 71;" f runStateWorld src/Dodge/Randify.hs 17;" f -runTerminalInput src/Dodge/Terminal.hs 297;" f +runTerminalInput src/Dodge/Terminal.hs 309;" f sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f safeAngleVV src/Geometry/Vector.hs 68;" f safeArgV src/Geometry/Vector.hs 87;" f @@ -4921,7 +4920,7 @@ screenToWorldPos src/Dodge/Base/Coordinate.hs 51;" f scrollAugInvSel src/Dodge/Inventory.hs 209;" f scrollAugNextInSection src/Dodge/Inventory.hs 222;" f scrollDebugInfoInt src/Dodge/Debug.hs 71;" f -scrollRBOption src/Dodge/Update/Scroll.hs 154;" f +scrollRBOption src/Dodge/Update/Scroll.hs 216;" f scrollSelectionSections src/Dodge/SelectionSections.hs 26;" f scrollTimeBack src/Dodge/Update.hs 218;" f scrollTimeForward src/Dodge/Update.hs 241;" f @@ -4949,12 +4948,11 @@ selSecSelCol src/Dodge/Render/HUD.hs 513;" f selSecSelSize src/Dodge/SelectionSections.hs 180;" f selSecYint src/Dodge/SelectionSections.hs 189;" f selectCreatureDebugItem src/Dodge/Debug.hs 55;" f -selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f +selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f senseDamage src/Dodge/Machine/Update.hs 160;" f -sensorCommand src/Dodge/Terminal.hs 219;" f -sensorInfoMap src/Dodge/Terminal.hs 191;" f +sensorCommand src/Dodge/Terminal.hs 231;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 48;" f sensorSPic src/Dodge/Machine/Draw.hs 70;" f @@ -5090,7 +5088,7 @@ shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 888;" f -simpleTermMessage src/Dodge/Terminal.hs 264;" f +simpleTermMessage src/Dodge/Terminal.hs 276;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 680;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f singleAmmo src/Dodge/Item/AmmoSlots.hs 62;" f @@ -5140,7 +5138,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 506;" f +spaceAction src/Dodge/Update/Input/InGame.hs 512;" 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 @@ -5238,6 +5236,7 @@ t src/ShortShow.hs 33;" f tEast src/Dodge/Room/Corridor.hs 90;" f tToBTree src/Dodge/Tree/Compose.hs 92;" f tWest src/Dodge/Room/Corridor.hs 115;" f +tabComplete src/Dodge/Terminal.hs 150;" f takeN src/RandomHelp.hs 44;" f takeNMore src/RandomHelp.hs 41;" f takeOne src/RandomHelp.hs 22;" f @@ -5266,14 +5265,14 @@ telRoomLev src/Dodge/Room/Teleport.hs 14;" f teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 528;" f termButton src/Dodge/Placement/Instance/Terminal.hs 51;" f termScreenColor src/Dodge/Terminal/Color.hs 10;" f -termSoundLine src/Dodge/Terminal.hs 102;" f -termTextColor src/Dodge/Terminal.hs 105;" f +termSoundLine src/Dodge/Terminal.hs 106;" f +termTextColor src/Dodge/Terminal.hs 109;" f terminalColor src/Dodge/Placement/Instance/Terminal.hs 61;" f -terminalReturnEffect src/Dodge/Terminal.hs 287;" f +terminalReturnEffect src/Dodge/Terminal.hs 299;" f terminalSPic src/Dodge/Machine/Draw.hs 29;" f terminalScreenGlow src/Dodge/Machine/Update.hs 35;" f terminalShape src/Dodge/Machine/Draw.hs 32;" f -terminalWheelEvent src/Dodge/Update/Scroll.hs 125;" f +terminalWheelEvent src/Dodge/Update/Scroll.hs 128;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f teslaGunPic src/Dodge/Item/Draw/SPic.hs 421;" f teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f @@ -5336,12 +5335,11 @@ 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 317;" f -toggleCommand src/Dodge/Terminal.hs 207;" f +toggleCommand src/Dodge/Terminal.hs 219;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 65;" f toggleExamineInv src/Dodge/Creature/Impulse/UseItem.hs 103;" f toggleJust src/MaybeHelp.hs 41;" f toggleMapperInv src/Dodge/Creature/Impulse/UseItem.hs 108;" f -togglesToEffects src/Dodge/Terminal.hs 259;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 642;" f tone440raiseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 664;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 606;" f @@ -5409,7 +5407,7 @@ truncate src/Polyhedra/Geodesic.hs 38;" f trunkDepth src/TreeHelp.hs 161;" f tryAttachItems src/Dodge/Item/Grammar.hs 33;" f tryClickUse src/Dodge/Creature/YourControl.hs 221;" f -tryCombine src/Dodge/Update/Input/InGame.hs 527;" f +tryCombine src/Dodge/Update/Input/InGame.hs 533;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 149;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 126;" f tryGetChannel src/Sound.hs 97;" f @@ -5462,10 +5460,10 @@ unusedSpotNearInLink src/Dodge/PlacementSpot.hs 191;" f updateAimPos src/Dodge/Update.hs 321;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 44;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 454;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 460;" f updateBarrel src/Dodge/Barreloid.hs 41;" f updateBarreloid src/Dodge/Barreloid.hs 15;" f -updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f +updateBaseWheelEvent src/Dodge/Update/Scroll.hs 33;" f updateBounds src/Dodge/Update/Camera.hs 251;" f updateBulVel src/Dodge/Bullet.hs 55;" f updateBullet src/Dodge/Bullet.hs 20;" f @@ -5492,7 +5490,7 @@ updateDust src/Dodge/Update.hs 849;" f updateDusts src/Dodge/Update.hs 698;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f updateEnergyBalls src/Dodge/Update.hs 686;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 481;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 487;" f updateExpBarrel src/Dodge/Barreloid.hs 20;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f @@ -5506,18 +5504,18 @@ updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 553;" f updateIMl' src/Dodge/Update.hs 558;" f updateInGameCamera src/Dodge/Update/Camera.hs 79;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 401;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 407;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f updateItemTargeting src/Dodge/Creature/State.hs 259;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 395;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 401;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 383;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 11;" f updateLasers src/Dodge/Update.hs 453;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 169;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 414;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 420;" f updateMachine src/Dodge/Machine/Update.hs 20;" f updateMagnets src/Dodge/Update.hs 329;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 198;" f @@ -5545,7 +5543,7 @@ updateRandNode src/TreeHelp.hs 108;" f updateRenderSplit appDodge/Main.hs 108;" f updateRightParentSF src/Dodge/Item/Grammar.hs 180;" f updateRootItemID src/Dodge/Inventory/Location.hs 35;" f -updateScopeZoom src/Dodge/Update/Scroll.hs 73;" f +updateScopeZoom src/Dodge/Update/Scroll.hs 76;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 264;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 243;" f @@ -5569,7 +5567,7 @@ updateUseInputInGame src/Dodge/Update/Input/InGame.hs 43;" 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 21;" f +updateWheelEvent src/Dodge/Update/Scroll.hs 24;" f updateWheelEvents src/Dodge/Update.hs 431;" f updateWorldEventFlag src/Dodge/Update.hs 125;" f updateWorldEventFlags src/Dodge/Update.hs 113;" f @@ -5768,7 +5766,7 @@ zoneWall src/Dodge/Zoning/Wall.hs 65;" f zonesAroundPoint src/Dodge/Zoning/Base.hs 96;" f zonesExtract src/Dodge/Zoning/Base.hs 56;" f zoomFloatingCamera src/Dodge/Update/Camera.hs 71;" f -zoomInLongGun src/Dodge/Update/Scroll.hs 99;" f -zoomOutLongGun src/Dodge/Update/Scroll.hs 107;" f +zoomInLongGun src/Dodge/Update/Scroll.hs 102;" f +zoomOutLongGun src/Dodge/Update/Scroll.hs 110;" f zoomScope src/Dodge/Item/Scope.hs 33;" f -zoomSpeed src/Dodge/Update/Scroll.hs 96;" f +zoomSpeed src/Dodge/Update/Scroll.hs 99;" f