From befe24e0380d4332ae6ad990ccae95c7a82d17ae Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 21 Aug 2025 16:31:04 +0100 Subject: [PATCH] Start creating explicit tutorial map --- log/aGeneratedRoomLayout | 18 ++- log/treeCluster | 4 +- src/Dodge/Annotation.hs | 48 ++++---- src/Dodge/Annotation/Data.hs | 5 +- src/Dodge/Base/NewID.hs | 5 +- src/Dodge/Floor.hs | 10 +- src/Dodge/LevelGen.hs | 9 +- src/Dodge/Placement/Instance/Terminal.hs | 25 +++- src/Dodge/Render/HUD.hs | 2 +- src/Dodge/Room/RezBox.hs | 77 ++++++------ src/Dodge/Room/Start.hs | 3 +- src/Dodge/Room/Tutorial.hs | 68 +++++++++++ src/Dodge/Terminal.hs | 14 +-- src/Dodge/WorldEffect.hs | 2 +- tags | 143 ++++++++++++----------- 15 files changed, 272 insertions(+), 161 deletions(-) create mode 100644 src/Dodge/Room/Tutorial.hs diff --git a/log/aGeneratedRoomLayout b/log/aGeneratedRoomLayout index 2465257af..7f7d83616 100644 --- a/log/aGeneratedRoomLayout +++ b/log/aGeneratedRoomLayout @@ -1,4 +1,20 @@ -Seed: 7114951007332849727Layout with room names: +Seed: 7114951007332849727 +Room layout (compact): +0,1,2,3,4,5,6 +| ++- 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +| | +| +- 22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46 +| | | +| | +- 47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 +| | | +| | 64,65 +| | +| 66,67,68 +| +69,70,71 + +Layout with room names: rezBox-0 | autoDoor-1 diff --git a/log/treeCluster b/log/treeCluster index 2f3aea916..4d77c0aa7 100644 --- a/log/treeCluster +++ b/log/treeCluster @@ -11,7 +11,7 @@ Seed: 7114951007332849727 | 5:corDoor | -6:SingleRoom +6:sdr | 7:corDoor | @@ -111,7 +111,7 @@ Seed: 7114951007332849727 | 5:0:1:Corridor -6:0:SingleRoom +6:0:sdr 6:0:0:autoRect diff --git a/src/Dodge/Annotation.hs b/src/Dodge/Annotation.hs index 2b569becd..f446dbd8f 100644 --- a/src/Dodge/Annotation.hs +++ b/src/Dodge/Annotation.hs @@ -1,37 +1,37 @@ --{-# LANGUAGE TupleSections #-} -{- | Annotating tree structures with desired properties for rooms. -} -module Dodge.Annotation - ( module Dodge.Annotation.Data - , module Dodge.Annotation - ) where -import Dodge.Cleat -import RandomHelp -import Dodge.Tree -import Dodge.Data.GenWorld -import Dodge.Annotation.Data -import LensHelp ---import Control.Lens +-- | Annotating tree structures with desired properties for rooms. +module Dodge.Annotation ( + module Dodge.Annotation.Data, + module Dodge.Annotation, +) where + import Data.Maybe +import Dodge.Annotation.Data +import Dodge.Cleat +--import Dodge.Data.GenWorld +import Dodge.Tree +import LensHelp +import RandomHelp -annoToRoomTree :: Annotation -> State (StdGen,Int) MTRS +annoToRoomTree :: Annotation -> State (StdGen, Int) MTRS annoToRoomTree an = case an of - AnTree t -> zoom _1 t - AnRoom r -> MTree "SingleRoom" . NodeTree . pure . (rmClusterStatus . csLinks . at OnwardCluster ?~ ()) <$> zoom _1 r <*> return [] + AnTree t -> zoom _1 t +-- AnRoom r -> MTree "SingleRoom" . NodeTree . pure . (rmClusterStatus . csLinks . at OnwardCluster ?~ ()) <$> zoom _1 r <*> return [] OnwardList ans -> do mts <- mapM annoToRoomTree ans return $ foldr1 attachOnward' mts - IntAnno f -> do - (g,i) <- get - put (g,i+1) + IntAnno f -> do + (g, i) <- get + put (g, i + 1) annoToRoomTree (f i) - ModifyTree f a -> f <$> annoToRoomTree a PassthroughLockKeyLists ls ks i -> zoom _1 $ do - (functionlockroom,randomitemidentity) <- takeOne ls + (functionlockroom, randomitemidentity) <- takeOne ls lr <- functionlockroom i ii <- randomitemidentity keyroom <- fromJust $ lookup ii ks - return $ MTree ("PassthroughLockKeyLists-"++show ii) - (NodeMTree $ MTree "RassThroughLockKeyLists" (NodeMTree lr) [MBranch (toLabel i) keyroom]) - [] - + return $ + MTree + ("PassthroughLockKeyLists-" ++ show ii) + (NodeMTree $ MTree "RassThroughLockKeyLists" (NodeMTree lr) [MBranch (toLabel i) keyroom]) + [] diff --git a/src/Dodge/Annotation/Data.hs b/src/Dodge/Annotation/Data.hs index ab52d2743..c051dbe51 100644 --- a/src/Dodge/Annotation/Data.hs +++ b/src/Dodge/Annotation/Data.hs @@ -12,10 +12,9 @@ import System.Random type MTRS = MetaTree Room String data Annotation - = ModifyTree (MetaTree Room String -> MetaTree Room String) Annotation - | OnwardList [Annotation] + = OnwardList [Annotation] | IntAnno (Int -> Annotation) - | AnRoom (State StdGen Room) +-- | AnRoom (State StdGen Room) | AnTree (State StdGen (MetaTree Room String)) | PassthroughLockKeyLists [(Int -> State StdGen (MetaTree Room String), State StdGen ItemType)] diff --git a/src/Dodge/Base/NewID.hs b/src/Dodge/Base/NewID.hs index 08971dfa5..8911d0395 100644 --- a/src/Dodge/Base/NewID.hs +++ b/src/Dodge/Base/NewID.hs @@ -4,10 +4,7 @@ import LensHelp -- | generalised way of putting a new item into a lensed intmap, returning the -- new index as well -plNewID :: ALens' b (IM.IntMap a) - -> a - -> b - -> (Int,b) +plNewID :: ALens' b (IM.IntMap a) -> a -> b -> (Int,b) plNewID l x w = (i,w & l #%~ IM.insert i x) where i = IM.newKey $ w ^# l diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 80d72d1d3..0f145c59f 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -1,8 +1,10 @@ -- | The tree of rooms that make up a level. module Dodge.Floor ( initialRoomTree, + tutRoomTree, ) where +import Dodge.Room.Tutorial import Data.List (intersperse) import Dodge.Annotation import Dodge.Cleat @@ -20,6 +22,9 @@ initialRoomTree :: State (StdGen, Int) (MetaTree Room String) initialRoomTree = annoToRoomTree initialAnoTree --initialRoomTree = annoToRoomTree startWorldTreeTest +tutRoomTree :: State (StdGen, Int) (MetaTree Room String) +tutRoomTree = annoToRoomTree tutAnoTree + --startWorldTreeTest :: Annotation --startWorldTreeTest = -- OnwardList $ @@ -43,7 +48,7 @@ initialAnoTree = -- , AnRoom $ tanksRoom [] [] -- , AnRoom $ roomCCrits 0 -- , AnRoom $ return airlock0 - AnRoom slowDoorRoom + anRoom slowDoorRoom , -- , AnRoom $ roomCCrits 10 -- , AnTree firstBreather -- , AnTree $ telRoomLev 1 >>= rToOnward "telRoomLev" . pure . cleatOnward @@ -113,3 +118,6 @@ initialAnoTree = -- ,[Corridor] AnTree $ randomFourCornerRoom [] >>= rToOnward "randomFourCornerRoom" . pure . cleatOnward ] + +anRoom :: StateT StdGen Identity Room -> Annotation +anRoom t = AnTree $ tToBTree "anRoom" . return . cleatOnward <$> t diff --git a/src/Dodge/LevelGen.hs b/src/Dodge/LevelGen.hs index 4751731f7..e13e8097d 100644 --- a/src/Dodge/LevelGen.hs +++ b/src/Dodge/LevelGen.hs @@ -50,16 +50,17 @@ layoutLevelFromSeed i seed = do putStrLnAppend "log/attemptedSeeds" $ "Generating level with seed " ++ show seed appendFile "log/attemptedSeeds" "\n" let g = mkStdGen seed - let treecluster = evalState initialRoomTree (g, 0) + let treecluster = evalState tutRoomTree (g, 0) let labts = decomposeSelfTree $ numSelfTree $ combineTree _rmName treecluster appendFile "log/treeCluster" ("Seed: " ++ show seed ++ "\n") + putStrLn "MetaTree clusters:" mapM_ (putStrLnAppend "log/treeCluster" . smallDrawTree . fmap showIntsString) labts let tc = composeTree treecluster let rmtree = inorderNumberTree tc - putStrLn "Room layout (compact): " - putStrLn $ compactDrawTree $ fmap (show . snd) rmtree + appendFile "log/aGeneratedRoomLayout" ("Seed: " ++ show seed ++ "\n") + putStrLnAppend "log/aGeneratedRoomLayout" "Room layout (compact): " + putStrLnAppend "log/aGeneratedRoomLayout" $ compactDrawTree $ fmap (show . snd) rmtree let nameshow (r, rid) = _rmName r ++ "-" ++ show rid - appendFile "log/aGeneratedRoomLayout" ("Seed: " ++ show seed) putStrLnAppend "log/aGeneratedRoomLayout" "Layout with room names:" putStrLnAppend "log/aGeneratedRoomLayout" $ smallDrawTree $ fmap nameshow rmtree mrs <- positionRoomsFromTree rmtree diff --git a/src/Dodge/Placement/Instance/Terminal.hs b/src/Dodge/Placement/Instance/Terminal.hs index 5cf330fca..6ae4ebb6f 100644 --- a/src/Dodge/Placement/Instance/Terminal.hs +++ b/src/Dodge/Placement/Instance/Terminal.hs @@ -1,9 +1,11 @@ module Dodge.Placement.Instance.Terminal ( putMessageTerminal, + putImmediateMessageTerminal, putTerminal, terminalColor, ) where +import Dodge.WorldEffect import Color import Data.Maybe import Dodge.Data.GenWorld @@ -13,8 +15,14 @@ import Dodge.SoundLogic import Geometry import LensHelp -putTerminal :: Color -> Machine -> Terminal -> Placement -putTerminal col mc tm = +putTerminalImediateAccess :: Color -> Machine -> Terminal -> Placement +putTerminalImediateAccess = putTerminalFull f + where + f tmpl _ _ = Just $ sps0 $ PutWorldUpdate $ const $ accessTerminal (tmpl ^?! plMID . _Just) + +putTerminalFull ::(Placement -> Placement -> Placement -> Maybe Placement) -> Color -> Machine -> Terminal -> + Placement +putTerminalFull f col mc tm = ps0PushPS (PutTerminal (tm & tmExternalColor .~ col)) $ \tmpl -> Just $ ps0PushPS (PutButton defaultButton) $ @@ -27,7 +35,7 @@ putTerminal col mc tm = ) defaultSensorWall ) - $ \mcpl -> Just $ sps0 $ PutWorldUpdate $ const (setids tmpl btpl mcpl) + $ \mcpl -> Just $ pt0 (PutWorldUpdate $ const (setids tmpl btpl mcpl)) (\_ -> f tmpl btpl mcpl) where setids tmpl btpl mcpl w = w @@ -40,6 +48,9 @@ putTerminal col mc tm = btid = fromJust (_plMID btpl) mcid = fromJust (_plMID mcpl) +putTerminal :: Color -> Machine -> Terminal -> Placement +putTerminal = putTerminalFull (\_ _ _ -> Nothing) + putMessageTerminal :: Color -> Terminal -> Placement putMessageTerminal col = putTerminal col $ @@ -48,5 +59,13 @@ putMessageTerminal col = & mcType .~ McTerminal & mcHP .~ 100 +putImmediateMessageTerminal :: Color -> Terminal -> Placement +putImmediateMessageTerminal col = + putTerminalImediateAccess col $ + defaultMachine + & mcColor .~ col + & mcType .~ McTerminal + & mcHP .~ 100 + terminalColor :: Color terminalColor = dark magenta diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 52f74dea6..ca08fd696 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -380,7 +380,7 @@ drawTerminalDisplay cfig tm = TerminalTextInput s -> (++ [(getPromptTM ++ s ++ [cFilledRect], white)]) TerminalPressTo s -> - (++ [(getPromptTM ++ "PRESS TO " ++ s, white)]) + (++ [("<" ++ s ++ ">", white)]) -- | hasfoc = clockCycle 10 (V.fromList [[cFilledRect] , "."]) w diff --git a/src/Dodge/Room/RezBox.hs b/src/Dodge/Room/RezBox.hs index c1b8c06e4..a29d0ec2c 100644 --- a/src/Dodge/Room/RezBox.hs +++ b/src/Dodge/Room/RezBox.hs @@ -1,11 +1,16 @@ -module Dodge.Room.RezBox where +module Dodge.Room.RezBox ( + rezBox, + rezBoxesWpCrit, + rezColor, + rezBoxes, + rezBox', +) where -import Dodge.Default.Terminal -import Dodge.Terminal import Control.Monad import qualified Data.Set as S import Dodge.Cleat import Dodge.Data.GenWorld +import Dodge.Default.Terminal import Dodge.Item.Random import Dodge.LevelGen.PlacementHelper import Dodge.LightSource @@ -16,6 +21,7 @@ import Dodge.Room.Link import Dodge.Room.Procedural import Dodge.Room.RoadBlock import Dodge.RoomLink +import Dodge.Terminal import Dodge.Tree import Geometry import LensHelp @@ -25,18 +31,17 @@ import RandomHelp rezBox :: LightSource -> Room rezBox ls = roomRect 40 60 1 1 - & rmPmnts .~ [sPS (V2 20 1) 0 $ PutLS ls - , putMessageTerminal terminalColor (defaultTerminal & tmBootLines .~ makeTermPara s <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdDeactivateTerminal) - & plSpot .~ PS (V2 20 0) 0 - ] + & rmPmnts + .~ [ sPS (V2 20 1) 0 $ PutLS ls + , putMessageTerminal terminalColor (defaultTerminal & tmBootLines .~ makeTermPara s <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdDeactivateTerminal) + & plSpot .~ PS (V2 20 0) 0 + ] & restrictInLinks (\(V2 _ h, _) -> h < 1) & restrictOutLinks (\(V2 _ h, _) -> h > 59) & rmName .~ "rezBox" where s = "RESPAWN POINT SET AT THIS LOCATION." -tutorialMessage1 :: String -tutorialMessage1 = "SYNTHESIS SUCCESSFUL. MOVEMENT TEST 1 INITIATED [WASD]. INTERACTION TEST 1 IN QUEUE [SPACE]." rezBox' :: RandomGen g => State g (MetaTree Room String) rezBox' = do @@ -48,39 +53,39 @@ rezBox' = do , cleatOnward door ] -rezBoxesWp :: RandomGen g => State g (Tree Room) -rezBoxesWp = do - w <- state $ randomR (100, 400) - h <- state $ randomR (40, 40) - theweapon <- randBlockBreakWeapon - thecol <- rezColor - let aroom = rezInvBox thecol -- & rmConnectsTo .~ S.singleton (OnEdge North) - let isnorth = S.member (OnEdge North) . _rlType - centralRoom <- - shuffleLinks $ - (roomRectAutoLinks w h){_rmPmnts = []} - & rmLinks %~ setLinkType InLink isnorth - onwardpassage <- shootOutPassage - let n = length $ getLinksOfType (OnEdge North) $ _rmLinks centralRoom - let rezrooms = - map adddoor $ - wpAdd theweapon aroom : replicate (n -2) aroom - return $ - treeFromTrunk [rezBox thecol, door] $ - Node centralRoom (rezrooms ++ [onwardpassage]) - where - adddoor rm = treeFromPost [connectsToNorth door] rm - connectsToNorth = rmConnectsTo .~ S.member (OnEdge North) +--rezBoxesWp :: RandomGen g => State g (Tree Room) +--rezBoxesWp = do +-- w <- state $ randomR (100, 400) +-- h <- state $ randomR (40, 40) +-- theweapon <- randBlockBreakWeapon +-- thecol <- rezColor +-- let aroom = rezInvBox thecol -- & rmConnectsTo .~ S.singleton (OnEdge North) +-- let isnorth = S.member (OnEdge North) . _rlType +-- centralRoom <- +-- shuffleLinks $ +-- (roomRectAutoLinks w h){_rmPmnts = []} +-- & rmLinks %~ setLinkType InLink isnorth +-- onwardpassage <- shootOutPassage +-- let n = length $ getLinksOfType (OnEdge North) $ _rmLinks centralRoom +-- let rezrooms = +-- map adddoor $ +-- wpAdd theweapon aroom : replicate (n -2) aroom +-- return $ +-- treeFromTrunk [rezBox thecol, door] $ +-- Node centralRoom (rezrooms ++ [onwardpassage]) +-- where +-- adddoor rm = treeFromPost [connectsToNorth door] rm +-- connectsToNorth = rmConnectsTo .~ S.member (OnEdge North) maybeBlockedPassage :: RandomGen g => State g (Tree Room) maybeBlockedPassage = fmap (pure . cleatOnward) $ join $ takeOne [return corridor, blockedCorridorCloseBlocks] -shootOutPassage :: RandomGen g => State g (Tree Room) -shootOutPassage = - fmap (pure . cleatOnward) $ - join $ takeOne [blockedCorridorCloseBlocks] +--shootOutPassage :: RandomGen g => State g (Tree Room) +--shootOutPassage = +-- fmap (pure . cleatOnward) $ +-- join $ takeOne [blockedCorridorCloseBlocks] rezBoxesWpCrit :: RandomGen g => State g (Tree Room) rezBoxesWpCrit = do diff --git a/src/Dodge/Room/Start.hs b/src/Dodge/Room/Start.hs index c74a559ab..02fc0ffc3 100644 --- a/src/Dodge/Room/Start.hs +++ b/src/Dodge/Room/Start.hs @@ -5,6 +5,7 @@ module Dodge.Room.Start ( randomChallenges, ) where +import Dodge.Room.RezBox import Dodge.Item.Held.Cane import Dodge.Item.Held.Launcher import Dodge.Cleat @@ -14,7 +15,7 @@ import Dodge.Room.Containing import Dodge.Room.Corridor import Dodge.Room.Door import Dodge.Room.Link -import Dodge.Room.RezBox +--import Dodge.Room.RezBox import Dodge.Room.Room import Dodge.Room.RunPast import Dodge.Tree diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs new file mode 100644 index 000000000..642f25632 --- /dev/null +++ b/src/Dodge/Room/Tutorial.hs @@ -0,0 +1,68 @@ +module Dodge.Room.Tutorial (tutAnoTree) where + +import Dodge.Room.Room +import Dodge.Annotation.Data +import Dodge.Room.Link +import Dodge.Room.Ngon +import Dodge.Room.Door +import TreeHelp +import Dodge.Tree.Compose +import Dodge.Room.RezBox +--import Control.Monad +--import qualified Data.Set as S +--import Dodge.Cleat +import Dodge.Data.GenWorld +import Dodge.Default.Terminal +--import Dodge.Item.Random +import Dodge.LevelGen.PlacementHelper +--import Dodge.LightSource +import Dodge.Placement.Instance +--import Dodge.Room.Corridor +--import Dodge.Room.Door +--import Dodge.Room.Link +import Dodge.Room.Procedural +--import Dodge.Room.RoadBlock +import Dodge.RoomLink +import Dodge.Terminal +--import Dodge.Tree +import Geometry +import LensHelp +--import Padding +import RandomHelp +import Data.List (intersperse) + +tutAnoTree :: Annotation +tutAnoTree = OnwardList $ + intersperse + (AnTree corDoor) + [AnTree tutRooms] + +tutRooms :: State StdGen (MetaTree Room String) +tutRooms = do + x <- tutRezBox + ys <- toggleDoorTest + return $ tToBTree "TutStartRez" $ treePost $ [x,door] <> ys + +tutRezBox :: State StdGen Room +tutRezBox = do + ls <- rezColor + return $ + roomRect 40 60 1 1 + & rmPmnts + .~ [ sPS (V2 20 1) 0 $ PutLS ls + , putImmediateMessageTerminal terminalColor (defaultTerminal & tmBootLines .~ makeTermPara s <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdDeactivateTerminal) + & plSpot .~ PS (V2 20 0) 0 + ] + & restrictInLinks (\(V2 _ h, _) -> h < 1) + & restrictOutLinks (\(V2 _ h, _) -> h > 59) + & rmName .~ "tutRezBox" + where + s = tutorialMessage1 + +tutorialMessage1 :: String +tutorialMessage1 = "SYNTHESIS SUCCESSFUL. MOVEMENT TEST 1 INITIATED [WASD]. INTERACTION TEST 1 IN QUEUE [SPACE]." + +toggleDoorTest :: State StdGen [Room] +toggleDoorTest = do + x <- shuffleLinks $ roomNgon 6 100 + return [x,door] diff --git a/src/Dodge/Terminal.hs b/src/Dodge/Terminal.hs index c1f4ec2c8..7e11fa586 100644 --- a/src/Dodge/Terminal.hs +++ b/src/Dodge/Terminal.hs @@ -9,7 +9,6 @@ module Dodge.Terminal ( sensorCommand, makeColorTermLine, makeTermPara, --- toggleCommand, terminalReturnEffect, getCommands, tabComplete, @@ -59,7 +58,6 @@ getCommand :: World -> Terminal -> TCom -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) getCommand w tm = \case TCInfo x z -> PTE.singleton x (PTE.singleton "" (makeTermPara z)) - --TCBase -> helpCommand <> quitCommand <> toggleCommands tm TCBase -> quitCommand <> toggleCommands tm TCDamageCommand -> damageCodeCommand w TCSensorInfo -> sensorCommand w tm @@ -95,7 +93,7 @@ sensorCommand w tm = PTE.singleton "SENSOR" $ fromMaybe mempty $ do toggleCommands :: Terminal -> PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) toggleCommands tm | null ts = mempty - | otherwise = PTE.singleton "TOGGLE" $ PTE.fromList $ fmap f $ M.toList ts + | otherwise = PTE.singleton "TOGGLE" $ PTE.fromList $ f <$> M.toList ts where ts = tm ^. tmToggles f (s,x) = (s, @@ -105,15 +103,6 @@ toggleCommands tm (TmWdWdfromWdWd (WdWdNegateTrig $ x ^. ttTriggerID)) ]) ---helpCommand :: PTE.TrieMap Char (PTE.TrieMap Char [TerminalLine]) ---helpCommand = PTE.singleton "" (fmap makeTermPara helpStrings) --- ---helpStrings :: PTE.TrieMap Char String ---helpStrings = --- PTE.fromList --- [ ("", "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.") --- ] - 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." @@ -191,6 +180,7 @@ tabComplete' s' w tm = case PTE.lookup s $ getCommands w tm of simpleTermMessage :: [String] -> Terminal 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 diff --git a/src/Dodge/WorldEffect.hs b/src/Dodge/WorldEffect.hs index 10cfc689f..0754577b1 100644 --- a/src/Dodge/WorldEffect.hs +++ b/src/Dodge/WorldEffect.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE LambdaCase #-} +--{-# LANGUAGE LambdaCase #-} module Dodge.WorldEffect ( doWdWd, diff --git a/tags b/tags index e5b1188d9..649cc397d 100644 --- a/tags +++ b/tags @@ -2953,12 +2953,12 @@ 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 141;" f +commandColor src/Dodge/Terminal.hs 130;" f commonPrefix src/Dodge/Debug/Terminal.hs 146;" f comp src/Quaternion.hs 65;" f -compactDraw src/Dodge/LevelGen.hs 91;" f -compactDraw' src/Dodge/LevelGen.hs 102;" f -compactDrawTree src/Dodge/LevelGen.hs 85;" f +compactDraw src/Dodge/LevelGen.hs 92;" f +compactDraw' src/Dodge/LevelGen.hs 103;" f +compactDrawTree src/Dodge/LevelGen.hs 86;" f compileAndCheckShader src/Shader/Compile.hs 277;" f composeNode src/Dodge/Tree/Compose.hs 76;" f composeTree src/Dodge/Tree/Compose.hs 46;" f @@ -2967,8 +2967,8 @@ conEffects src/Dodge/Concurrent.hs 12;" f conLDTToConDT src/Dodge/DoubleTree.hs 22;" f concurrentIS src/Dodge/Update/Input/InGame.hs 281;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f -connectionBlurb src/Dodge/Terminal.hs 46;" f -connectionBlurbLines src/Dodge/Terminal.hs 38;" f +connectionBlurb src/Dodge/Terminal.hs 45;" f +connectionBlurbLines src/Dodge/Terminal.hs 37;" f constructEdges src/Polyhedra.hs 34;" f constructEdgesList src/Polyhedra.hs 43;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f @@ -2989,7 +2989,7 @@ corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f corridorN src/Dodge/Room/Corridor.hs 52;" f corridorWallN src/Dodge/Room/Corridor.hs 71;" f -crAdd src/Dodge/Room/RezBox.hs 110;" f +crAdd src/Dodge/Room/RezBox.hs 115;" f crAwayFromPost src/Dodge/Creature/Test.hs 82;" f crBlips src/Dodge/RadarSweep.hs 87;" f crCamouflage src/Dodge/Creature/Picture.hs 31;" f @@ -3094,7 +3094,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 67;" f +damageCodeCommand src/Dodge/Terminal.hs 65;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f damageDirection src/Dodge/Damage.hs 35;" f @@ -3135,7 +3135,7 @@ 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 -decodeSensorType src/Dodge/Terminal.hs 79;" f +decodeSensorType src/Dodge/Terminal.hs 77;" 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 @@ -3309,7 +3309,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 438;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 436;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f @@ -3685,9 +3685,9 @@ 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 529;" f -getCommand src/Dodge/Terminal.hs 58;" f -getCommands src/Dodge/Terminal.hs 55;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 527;" f +getCommand src/Dodge/Terminal.hs 57;" f +getCommands src/Dodge/Terminal.hs 54;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 45;" f getDistortions src/Dodge/Render.hs 435;" f getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f @@ -3805,7 +3805,7 @@ 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 -helpPara src/Dodge/Terminal.hs 117;" f +helpPara src/Dodge/Terminal.hs 106;" f helpPoly3D src/Polyhedra.hs 125;" f heron src/Geometry.hs 221;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f @@ -3847,8 +3847,8 @@ initTexture2DArraySquare src/Shader/AuxAddition.hs 16;" f initTuItemLocation src/Dodge/Item/Location/Initialize.hs 66;" f initTusItemLocations src/Dodge/Item/Location/Initialize.hs 25;" f initWallZoning src/Dodge/Wall/Zone.hs 12;" f -initialAnoTree src/Dodge/Floor.hs 29;" f -initialRoomTree src/Dodge/Floor.hs 19;" f +initialAnoTree src/Dodge/Floor.hs 39;" f +initialRoomTree src/Dodge/Floor.hs 20;" f initialWorld src/Dodge/Initialisation.hs 15;" f initialisePlaying src/Sound.hs 77;" f initializeGLState src/Preload/Render.hs 216;" f @@ -4155,8 +4155,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 138;" f -makeColorTermPara src/Dodge/Terminal.hs 135;" f +makeColorTermLine src/Dodge/Terminal.hs 127;" f +makeColorTermPara src/Dodge/Terminal.hs 124;" 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 @@ -4192,8 +4192,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 123;" f -makeTermPara src/Dodge/Terminal.hs 132;" f +makeTermLine src/Dodge/Terminal.hs 112;" f +makeTermPara src/Dodge/Terminal.hs 121;" f makeTeslaArc src/Dodge/Tesla.hs 29;" f makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f makeTileFromPoly src/Tile.hs 34;" f @@ -4206,14 +4206,14 @@ maxDamageType src/Dodge/Damage.hs 58;" f maxInvSlots src/Dodge/Inventory/CheckSlots.hs 27;" f maxShowX src/Dodge/Combine/Graph.hs 50;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f -maybeBlockedPassage src/Dodge/Room/RezBox.hs 75;" f +maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearDoorPath src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 71;" f maybeClearDoorPaths src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 68;" f 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 551;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 549;" f maybeOpenConsole src/Dodge/Update.hs 131;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f @@ -4432,7 +4432,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 515;" f +pauseGame src/Dodge/Update/Input/InGame.hs 513;" f pauseMenu src/Dodge/Menu.hs 56;" f pauseMenuOptions src/Dodge/Menu.hs 61;" f pauseSound src/Dodge/SoundLogic.hs 42;" f @@ -4473,10 +4473,10 @@ plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f plMachine src/Dodge/Placement/PlaceSpot.hs 193;" f -plNew src/Dodge/Base/NewID.hs 26;" f +plNew src/Dodge/Base/NewID.hs 23;" f plNewID src/Dodge/Base/NewID.hs 7;" f -plNewUpID src/Dodge/Base/NewID.hs 16;" f -plNewUsing src/Dodge/Base/NewID.hs 34;" f +plNewUpID src/Dodge/Base/NewID.hs 13;" f +plNewUsing src/Dodge/Base/NewID.hs 31;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f plSlideDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 78;" f placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 208;" f @@ -4586,8 +4586,8 @@ positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f postGenerationProcessing src/Dodge/LevelGen.hs 33;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f postWorldLoad src/Dodge/WorldLoad.hs 15;" f -powerFakeout src/Dodge/Room/Start.hs 27;" f -powerFakeout' src/Dodge/Room/Start.hs 24;" f +powerFakeout src/Dodge/Room/Start.hs 29;" f +powerFakeout' src/Dodge/Room/Start.hs 26;" f powerLegs src/Dodge/Item/Equipment.hs 85;" f powlist src/Multiset.hs 61;" f powlistUpToN src/Multiset.hs 23;" f @@ -4596,7 +4596,7 @@ powlistUpToN'' src/Multiset.hs 31;" f ppDraw src/Dodge/Render/ShapePicture.hs 118;" f ppEvents src/Dodge/Update.hs 769;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f -preCritStart src/Dodge/Room/Start.hs 82;" f +preCritStart src/Dodge/Room/Start.hs 84;" f prePos src/Quaternion.hs 68;" f preloadRender src/Preload/Render.hs 30;" f premapMaybe src/FoldlHelp.hs 26;" f @@ -4655,15 +4655,18 @@ putBlockV src/Dodge/Placement/Instance/Wall.hs 153;" f putColorLamp src/Dodge/Placement/Instance/LightSource.hs 203;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f +putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 62;" f putLamp src/Dodge/Placement/Instance/LightSource.hs 206;" f putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" f putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 103;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 106;" f -putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 43;" f +putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 54;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putStrLnAppend src/Dodge/LevelGen.hs 79;" f -putTerminal src/Dodge/Placement/Instance/Terminal.hs 16;" f +putStrLnAppend src/Dodge/LevelGen.hs 80;" f +putTerminal src/Dodge/Placement/Instance/Terminal.hs 51;" f +putTerminalFull src/Dodge/Placement/Instance/Terminal.hs 23;" f +putTerminalImediateAccess src/Dodge/Placement/Instance/Terminal.hs 18;" f putTurret src/Dodge/Placement/Instance/Turret.hs 11;" f putWireEnd src/Dodge/Wire.hs 31;" f putWireStart src/Dodge/Wire.hs 34;" f @@ -4673,7 +4676,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 120;" f +quitCommand src/Dodge/Terminal.hs 109;" 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 @@ -4702,7 +4705,7 @@ 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 662;" f -randomChallenges src/Dodge/Room/Start.hs 62;" f +randomChallenges src/Dodge/Room/Start.hs 64;" f randomCompass src/Dodge/Layout.hs 59;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 266;" f randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 278;" f @@ -4780,16 +4783,15 @@ resumeSound src/Dodge/SoundLogic.hs 48;" f retreatActionsPistol src/Dodge/Humanoid.hs 249;" f retreatFireLauncher src/Dodge/Humanoid.hs 270;" f retreatPointForFrom src/Dodge/Creature/Impulse/Flee.hs 7;" f -reversePair src/Dodge/LevelGen.hs 82;" f +reversePair src/Dodge/LevelGen.hs 83;" f rewinder src/Dodge/Item/Held/Utility.hs 36;" f -rezBox src/Dodge/Room/RezBox.hs 25;" f -rezBox' src/Dodge/Room/RezBox.hs 41;" f -rezBoxStart src/Dodge/Room/Start.hs 77;" f -rezBoxes src/Dodge/Room/RezBox.hs 113;" f -rezBoxesWp src/Dodge/Room/RezBox.hs 51;" f -rezBoxesWpCrit src/Dodge/Room/RezBox.hs 85;" f -rezColor src/Dodge/Room/RezBox.hs 133;" f -rezInvBox src/Dodge/Room/RezBox.hs 140;" f +rezBox src/Dodge/Room/RezBox.hs 31;" f +rezBox' src/Dodge/Room/RezBox.hs 46;" f +rezBoxStart src/Dodge/Room/Start.hs 79;" f +rezBoxes src/Dodge/Room/RezBox.hs 118;" f +rezBoxesWpCrit src/Dodge/Room/RezBox.hs 90;" f +rezColor src/Dodge/Room/RezBox.hs 138;" f +rezInvBox src/Dodge/Room/RezBox.hs 145;" f rezText src/Dodge/Story.hs 4;" f rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 72;" f @@ -4860,7 +4862,7 @@ rprBool src/Dodge/PlacementSpot.hs 72;" f rprBoolShift src/Dodge/PlacementSpot.hs 111;" f rprShift src/Dodge/PlacementSpot.hs 102;" f rsObjectColor src/Dodge/RadarSweep/Draw.hs 34;" f -runPastStart src/Dodge/Room/Start.hs 71;" f +runPastStart src/Dodge/Room/Start.hs 73;" f runStateWorld src/Dodge/Randify.hs 17;" f sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f safeAngleVV src/Geometry/Vector.hs 68;" f @@ -4931,7 +4933,7 @@ selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 52;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 58;" f senseDamage src/Dodge/Machine/Update.hs 160;" f -sensorCommand src/Dodge/Terminal.hs 85;" f +sensorCommand src/Dodge/Terminal.hs 83;" f sensorRoom src/Dodge/Room/SensorDoor.hs 25;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 45;" f sensorSPic src/Dodge/Machine/Draw.hs 70;" f @@ -5035,7 +5037,6 @@ shootBullet src/Dodge/HeldUse.hs 1006;" f shootBullets src/Dodge/HeldUse.hs 996;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootLaser src/Dodge/HeldUse.hs 847;" f -shootOutPassage src/Dodge/Room/RezBox.hs 80;" f shootPulseBall src/Dodge/HeldUse.hs 915;" f shootPulseLaser src/Dodge/HeldUse.hs 888;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f @@ -5067,7 +5068,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 883;" f -simpleTermMessage src/Dodge/Terminal.hs 186;" f +simpleTermMessage src/Dodge/Terminal.hs 180;" 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 @@ -5088,7 +5089,7 @@ slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 171;" f smallBattery src/Dodge/Item/Ammo.hs 60;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f -smallDrawTree src/Dodge/LevelGen.hs 88;" f +smallDrawTree src/Dodge/LevelGen.hs 89;" f smallGlass1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 470;" f smallGlass2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 646;" f smallGlass3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 518;" f @@ -5117,7 +5118,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 519;" f +spaceAction src/Dodge/Update/Input/InGame.hs 517;" 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 @@ -5172,12 +5173,12 @@ stackPicturesAtOff src/Dodge/Render/List.hs 101;" f stackText src/Picture/Base.hs 188;" f stackedInventory src/Dodge/Creature.hs 311;" f startCr src/Dodge/Creature.hs 93;" f -startCrafts src/Dodge/Room/Start.hs 92;" f +startCrafts src/Dodge/Room/Start.hs 94;" f startDrag src/Dodge/Update/Input/InGame.hs 270;" f startInvList src/Dodge/Creature.hs 108;" f startInventory src/Dodge/Creature.hs 111;" f startNewGameInSlot src/Dodge/StartNewGame.hs 15;" f -startRoom src/Dodge/Room/Start.hs 52;" f +startRoom src/Dodge/Room/Start.hs 54;" f startSeedGame src/Dodge/StartNewGame.hs 20;" f startSeedGameConc src/Dodge/StartNewGame.hs 27;" f statsModifier src/Dodge/Creature/Info.hs 16;" f @@ -5215,7 +5216,8 @@ 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 145;" f +tabComplete src/Dodge/Terminal.hs 133;" f +tabComplete' src/Dodge/Terminal.hs 139;" f takeN src/RandomHelp.hs 44;" f takeNMore src/RandomHelp.hs 41;" f takeOne src/RandomHelp.hs 22;" f @@ -5243,10 +5245,10 @@ targetingScope src/Dodge/Item/Scope.hs 38;" f telRoomLev src/Dodge/Room/Teleport.hs 14;" f teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 528;" f termScreenColor src/Dodge/Terminal/Color.hs 10;" f -termSoundLine src/Dodge/Terminal.hs 49;" f -termTextColor src/Dodge/Terminal.hs 52;" f -terminalColor src/Dodge/Placement/Instance/Terminal.hs 51;" f -terminalReturnEffect src/Dodge/Terminal.hs 189;" f +termSoundLine src/Dodge/Terminal.hs 48;" f +termTextColor src/Dodge/Terminal.hs 51;" f +terminalColor src/Dodge/Placement/Instance/Terminal.hs 70;" f +terminalReturnEffect src/Dodge/Terminal.hs 184;" 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 @@ -5265,7 +5267,7 @@ textJustifyCenter src/Picture/Base.hs 212;" f textJustifyLeft src/Picture/Base.hs 208;" f textJustifyRight src/Picture/Base.hs 198;" f textRight src/Picture/Base.hs 203;" f -textTerminal src/Dodge/Terminal.hs 35;" f +textTerminal src/Dodge/Terminal.hs 34;" f textVMirror src/Picture/Base.hs 216;" f tflat2 src/Picture/Data.hs 60;" f tflat3 src/Picture/Data.hs 64;" f @@ -5300,8 +5302,8 @@ tingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 574;" f tinitusS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 566;" f titleOptionsMenu src/Dodge/Menu.hs 102;" f titleOptionsNoWrite src/Dodge/Menu.hs 105;" f -tlDoEffect src/Dodge/Terminal.hs 129;" f -tlSetStatus src/Dodge/Terminal.hs 126;" f +tlDoEffect src/Dodge/Terminal.hs 118;" f +tlSetStatus src/Dodge/Terminal.hs 115;" f tmUpdate src/Dodge/Update.hs 499;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 121;" f @@ -5316,11 +5318,12 @@ 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 318;" f -toggleCommands src/Dodge/Terminal.hs 95;" f +toggleCommands src/Dodge/Terminal.hs 93;" 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 +toggleTest src/Dodge/Room/Tutorial.hs 53;" 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 @@ -5388,7 +5391,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 541;" f +tryCombine src/Dodge/Update/Input/InGame.hs 539;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 149;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 122;" f tryGetChannel src/Sound.hs 97;" f @@ -5408,7 +5411,11 @@ tryUseParent src/Dodge/Creature/State.hs 143;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f -tutorialMessage1 src/Dodge/Room/RezBox.hs 38;" f +tutAnoTree src/Dodge/Floor.hs 33;" f +tutRezBox src/Dodge/Room/Tutorial.hs 34;" f +tutRoomTree src/Dodge/Floor.hs 24;" f +tutRooms src/Dodge/Room/Tutorial.hs 28;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 50;" f tweenAngles src/Geometry/Vector.hs 195;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f @@ -5442,7 +5449,7 @@ 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 472;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 470;" f updateBarrel src/Dodge/Barreloid.hs 41;" f updateBarreloid src/Dodge/Barreloid.hs 15;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 33;" f @@ -5472,7 +5479,7 @@ updateDust src/Dodge/Update.hs 844;" f updateDusts src/Dodge/Update.hs 691;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f updateEnergyBalls src/Dodge/Update.hs 679;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 497;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 495;" f updateExpBarrel src/Dodge/Barreloid.hs 20;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f @@ -5486,12 +5493,12 @@ updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 544;" f updateIMl' src/Dodge/Update.hs 549;" f updateInGameCamera src/Dodge/Update/Camera.hs 79;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 419;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 417;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f updateItemTargeting src/Dodge/Creature/State.hs 259;" f updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 386;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 413;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 411;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 373;" f updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 395;" f updateLampoid src/Dodge/Lampoid.hs 12;" f @@ -5499,7 +5506,7 @@ updateLaser src/Dodge/Laser/Update.hs 11;" f updateLasers src/Dodge/Update.hs 450;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 169;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 432;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 430;" f updateMachine src/Dodge/Machine/Update.hs 20;" f updateMagnets src/Dodge/Update.hs 329;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 194;" f @@ -5693,7 +5700,7 @@ wordsBy src/ListHelp.hs 116;" f worldPosToScreen src/Dodge/Base/Coordinate.hs 28;" f worldSPic src/Dodge/Render/ShapePicture.hs 22;" f worldToGenWorld src/Dodge/LevelGen/LevelStructure.hs 14;" f -wpAdd src/Dodge/Room/RezBox.hs 143;" f +wpAdd src/Dodge/Room/RezBox.hs 148;" f wrench1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 546;" f wristArmour src/Dodge/Item/Equipment.hs 43;" f wristInvisibility src/Dodge/Item/Equipment.hs 96;" f