From e7b52f448751c03fb76ed2f1ae87721fc49b74c9 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 21 Aug 2025 17:57:02 +0100 Subject: [PATCH] Simplify layout Annotations --- log/treeCluster | 4 +- src/Dodge/Annotation.hs | 22 ++++++----- src/Dodge/Annotation/Data.hs | 25 +++++++++++-- src/Dodge/Floor.hs | 36 +++++++++++------- src/Dodge/LevelGen.hs | 5 ++- src/Dodge/LockAndKey.hs | 2 +- src/Dodge/Room/LongDoor.hs | 4 +- src/Dodge/Room/Tutorial.hs | 10 +++-- src/Dodge/Room/Warning.hs | 2 +- tags | 72 +++++++++++++++++++----------------- 10 files changed, 109 insertions(+), 73 deletions(-) diff --git a/log/treeCluster b/log/treeCluster index 4d77c0aa7..8b802b0bf 100644 --- a/log/treeCluster +++ b/log/treeCluster @@ -11,7 +11,7 @@ Seed: 7114951007332849727 | 5:corDoor | -6:sdr +6:anRoom | 7:corDoor | @@ -111,7 +111,7 @@ Seed: 7114951007332849727 | 5:0:1:Corridor -6:0:sdr +6:0:anRoom 6:0:0:autoRect diff --git a/src/Dodge/Annotation.hs b/src/Dodge/Annotation.hs index f446dbd8f..e327a7e44 100644 --- a/src/Dodge/Annotation.hs +++ b/src/Dodge/Annotation.hs @@ -14,22 +14,24 @@ import Dodge.Tree import LensHelp import RandomHelp -annoToRoomTree :: Annotation -> State (StdGen, Int) MTRS +annoToRoomTree :: Annotation -> State LayoutVars MTRS annoToRoomTree an = case an of - AnTree t -> zoom _1 t + AnTree t -> 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) - annoToRoomTree (f i) - PassthroughLockKeyLists ls ks i -> zoom _1 $ do +-- IntAnno f -> do +-- LayVars g i <- get +-- put $ LayVars g (i + 1) +-- annoToRoomTree (f i) + --PassthroughLockKeyLists ls ks i -> zoom lyGen $ do + PassthroughLockKeyLists ls ks -> do + i <- nextLayoutInt (functionlockroom, randomitemidentity) <- takeOne ls - lr <- functionlockroom i - ii <- randomitemidentity - keyroom <- fromJust $ lookup ii ks + lr <- zoom lyGen $ functionlockroom i + ii <- zoom lyGen $ randomitemidentity + keyroom <- zoom lyGen . fromJust $ lookup ii ks return $ MTree ("PassthroughLockKeyLists-" ++ show ii) diff --git a/src/Dodge/Annotation/Data.hs b/src/Dodge/Annotation/Data.hs index c051dbe51..71d5d942c 100644 --- a/src/Dodge/Annotation/Data.hs +++ b/src/Dodge/Annotation/Data.hs @@ -11,14 +11,33 @@ import System.Random type MTRS = MetaTree Room String +data LayoutVars = LayVars + { _lyGen :: StdGen + , _lyCounter :: Int + } + data Annotation = OnwardList [Annotation] - | IntAnno (Int -> Annotation) +-- | IntAnno (Int -> Annotation) -- | AnRoom (State StdGen Room) - | AnTree (State StdGen (MetaTree Room String)) + | AnTree (State LayoutVars (MetaTree Room String)) | PassthroughLockKeyLists [(Int -> State StdGen (MetaTree Room String), State StdGen ItemType)] [(ItemType, State StdGen (MetaTree Room String))] - Int +-- Int makeLenses ''Annotation +makeLenses ''LayoutVars + +instance RandomGen LayoutVars where + genWord32 x = let (y,g) = genWord32 (x ^. lyGen) + in (y,x & lyGen .~ g) + genWord64 x = let (y,g) = genWord64 (x ^. lyGen) + in (y,x & lyGen .~ g) + split x = let (g,h) = split (x ^. lyGen) in (x & lyGen .~ g, x & lyGen .~ h) + +nextLayoutInt :: State LayoutVars Int +nextLayoutInt = do + LayVars g i <- get + put $ LayVars g (i + 1) + return i diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 0f145c59f..d14a56230 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -4,6 +4,7 @@ module Dodge.Floor ( tutRoomTree, ) where +import Dodge.Annotation.Data import Dodge.Room.Tutorial import Data.List (intersperse) import Dodge.Annotation @@ -18,11 +19,11 @@ import LensHelp import RandomHelp -- | A test level tree. -initialRoomTree :: State (StdGen, Int) (MetaTree Room String) +initialRoomTree :: State LayoutVars (MetaTree Room String) initialRoomTree = annoToRoomTree initialAnoTree --initialRoomTree = annoToRoomTree startWorldTreeTest -tutRoomTree :: State (StdGen, Int) (MetaTree Room String) +tutRoomTree :: State LayoutVars (MetaTree Room String) tutRoomTree = annoToRoomTree tutAnoTree --startWorldTreeTest :: Annotation @@ -35,15 +36,15 @@ initialAnoTree :: Annotation initialAnoTree = OnwardList $ intersperse - (AnTree corDoor) - [ IntAnno $ AnTree . startRoom - , IntAnno $ + (AnTree $ zoom lyGen corDoor) + [ AnTree $ intAnno startRoom + , --IntAnno $ PassthroughLockKeyLists [(sensorRoomRunPast ElectricSensor, takeOne [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , HELD SPARKGUN])] itemRooms - , IntAnno $ AnTree . lasSensorTurretTest + , AnTree $ intAnno lasSensorTurretTest , -- , AnRoom $ tanksRoom [] [] <&> rmPmnts .~ [] -- , AnRoom $ tanksRoom [] [] -- , AnRoom $ roomCCrits 0 @@ -62,8 +63,8 @@ initialAnoTree = -- , AnTree $ tToBTree "spawners" <$> spawnerRoom -- , AnRoom pistolerRoom -- , AnRoom doubleCorridorBarrels - IntAnno $ PassthroughLockKeyLists keyCardRunPastRand itemRooms - , IntAnno $ AnTree . warningRooms "INVISIBLE CREATURE AHEAD" + PassthroughLockKeyLists keyCardRunPastRand itemRooms + , AnTree . intAnno $ warningRooms "INVISIBLE CREATURE AHEAD" , AnTree $ rToOnward "chaseCrit+armourChaseCrit rectRoom" $ return . cleatOnward $ @@ -71,11 +72,12 @@ initialAnoTree = .++~ [ psPtPl anyUnusedSpot (PutCrit invisibleChaseCrit) , psPtPl anyUnusedSpot (PutCrit armourChaseCrit) ] - , IntAnno $ AnTree . fmap (tToBTree "healthTest") . healthTest - , AnTree (tanksRoom [] [] >>= rToOnward "empty tanksRoom" . pure . cleatOnward) - , IntAnno $ PassthroughLockKeyLists lockRoomKeyItems itemRooms + , AnTree . intAnno $ fmap (tToBTree "healthTest") . healthTest + , AnTree . zoom lyGen $ + (tanksRoom [] [] >>= rToOnward "empty tanksRoom" . pure . cleatOnward) + , PassthroughLockKeyLists lockRoomKeyItems itemRooms , AnTree randomChallenges - , IntAnno $ AnTree . lasSensorTurretTest + , AnTree $ intAnno lasSensorTurretTest , -- ,[AnTree $ fmap pure roomCCrits] -- ,[AirlockAno] -- ,[Corridor] @@ -119,5 +121,11 @@ initialAnoTree = AnTree $ randomFourCornerRoom [] >>= rToOnward "randomFourCornerRoom" . pure . cleatOnward ] -anRoom :: StateT StdGen Identity Room -> Annotation -anRoom t = AnTree $ tToBTree "anRoom" . return . cleatOnward <$> t +intAnno :: (Int -> State StdGen MTRS) -> State LayoutVars MTRS +intAnno f = do + LayVars g i <- get + put $ LayVars g (i+1) + zoom lyGen (f i) + +anRoom :: State StdGen Room -> Annotation +anRoom t = AnTree $ zoom lyGen $ (tToBTree "anRoom" . return . cleatOnward <$> t) diff --git a/src/Dodge/LevelGen.hs b/src/Dodge/LevelGen.hs index e13e8097d..263ffb19d 100644 --- a/src/Dodge/LevelGen.hs +++ b/src/Dodge/LevelGen.hs @@ -1,5 +1,6 @@ -module Dodge.LevelGen where +module Dodge.LevelGen (generateWorldFromSeed) where +import Dodge.Annotation.Data import Dodge.Layout import Data.Preload.Render import Control.Lens @@ -50,7 +51,7 @@ layoutLevelFromSeed i seed = do putStrLnAppend "log/attemptedSeeds" $ "Generating level with seed " ++ show seed appendFile "log/attemptedSeeds" "\n" let g = mkStdGen seed - let treecluster = evalState tutRoomTree (g, 0) + let treecluster = evalState initialRoomTree (LayVars g 0) let labts = decomposeSelfTree $ numSelfTree $ combineTree _rmName treecluster appendFile "log/treeCluster" ("Seed: " ++ show seed ++ "\n") putStrLn "MetaTree clusters:" diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index 58910e2b8..a3bf5d0d5 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -22,7 +22,7 @@ lockRoomMultiItems = ) ] -lockRoomKeyItems :: RandomGen g => [(Int -> State g (MetaTree Room String), State g ItemType)] +lockRoomKeyItems :: [(Int -> State StdGen (MetaTree Room String), State StdGen ItemType)] lockRoomKeyItems = [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD]) , (sensorRoomRunPast LaserSensor, return LASER) diff --git a/src/Dodge/Room/LongDoor.hs b/src/Dodge/Room/LongDoor.hs index 41dca8131..9d5037b57 100644 --- a/src/Dodge/Room/LongDoor.hs +++ b/src/Dodge/Room/LongDoor.hs @@ -151,7 +151,7 @@ addButtonSlowDoor x h rm = do Nothing col = dim $ light red -slowDoorRoom :: RandomGen g => State g Room +slowDoorRoom :: State StdGen Room slowDoorRoom = do x <- state $ randomR (400, 800) y <- state $ randomR (400, 800) @@ -168,7 +168,7 @@ slowDoorRoom = do proom <- southPillarsRoom x y h addButtonSlowDoor x h (proom & rmPmnts %~ (++ (crits ++ barrels))) -slowDoorRoomRunPast :: RandomGen g => State g (MetaTree Room String) +slowDoorRoomRunPast :: State StdGen (MetaTree Room String) slowDoorRoomRunPast = do r <- slowDoorRoom rToOnward "slowDoorRoomRunPast" $ diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 642f25632..fe2f7d740 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,5 +1,6 @@ module Dodge.Room.Tutorial (tutAnoTree) where +import Dodge.Cleat import Dodge.Room.Room import Dodge.Annotation.Data import Dodge.Room.Link @@ -34,14 +35,15 @@ import Data.List (intersperse) tutAnoTree :: Annotation tutAnoTree = OnwardList $ intersperse - (AnTree corDoor) - [AnTree tutRooms] + (AnTree $ zoom lyGen corDoor) + [AnTree . zoom lyGen $ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox + ,AnTree $ zoom lyGen tutRooms + ] tutRooms :: State StdGen (MetaTree Room String) tutRooms = do - x <- tutRezBox ys <- toggleDoorTest - return $ tToBTree "TutStartRez" $ treePost $ [x,door] <> ys + return $ tToBTree "DoorTest" $ treePost $ [] <> ys tutRezBox :: State StdGen Room tutRezBox = do diff --git a/src/Dodge/Room/Warning.hs b/src/Dodge/Room/Warning.hs index 125b9afc6..b315dd78d 100644 --- a/src/Dodge/Room/Warning.hs +++ b/src/Dodge/Room/Warning.hs @@ -21,7 +21,7 @@ import Geometry import LensHelp import RandomHelp -warningRooms :: RandomGen g => String -> Int -> State g (MetaTree Room String) +warningRooms :: String -> Int -> State StdGen (MetaTree Room String) warningRooms str n = do rm <- do tr <- tanksRoom [] [] diff --git a/tags b/tags index 649cc397d..cf9354bb6 100644 --- a/tags +++ b/tags @@ -58,9 +58,8 @@ AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 32;" C AmmoPerShot src/Dodge/Data/Muzzle.hs 61;" t AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 31;" C AmmoType src/Dodge/Data/AmmoType.hs 5;" t -AnRoom src/Dodge/Annotation/Data.hs 18;" C -AnTree src/Dodge/Annotation/Data.hs 19;" C -Annotation src/Dodge/Annotation/Data.hs 14;" t +AnTree src/Dodge/Annotation/Data.hs 23;" C +Annotation src/Dodge/Annotation/Data.hs 19;" t ArbitraryAction src/Dodge/Data/ActionPlan.hs 166;" C ArbitraryImpulse src/Dodge/Data/ActionPlan.hs 47;" C ArbitraryImpulseEffect src/Dodge/Data/ActionPlan.hs 48;" C @@ -604,7 +603,7 @@ InputScreen src/Dodge/Data/Universe.hs 92;" C Inspect_wall src/Dodge/Data/Config.hs 91;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t -IntAnno src/Dodge/Annotation/Data.hs 17;" C +IntAnno src/Dodge/Annotation/Data.hs 21;" C IntID src/Dodge/Data/Universe.hs 113;" t IntImp src/Dodge/Data/CreatureEffect.hs 20;" t Intention src/Dodge/Data/Creature.hs 68;" t @@ -682,7 +681,9 @@ Lasering src/Dodge/Data/Damage.hs 26;" C LauncherAI src/Dodge/Data/Creature/Misc.hs 45;" C LauncherAmmo src/Dodge/Data/AmmoType.hs 6;" C LaundrySS src/Dodge/Data/Scenario.hs 115;" C +LayVars src/Dodge/Annotation/Data.hs 14;" C Layer src/Picture/Data.hs 22;" t +LayoutVars src/Dodge/Annotation/Data.hs 14;" t LeadTarget src/Dodge/Data/ActionPlan.hs 149;" C LeftForward src/Dodge/Data/Creature/Stance.hs 31;" C LeftwardDT src/Dodge/Data/DoubleTree.hs 86;" C @@ -790,7 +791,6 @@ MiniGunFlare src/Dodge/Data/Muzzle.hs 32;" C ModIDID src/Dodge/Data/Modification.hs 23;" C ModIDTimerPoint3Bool src/Dodge/Data/Modification.hs 15;" C Modification src/Dodge/Data/Modification.hs 14;" t -ModifyTree src/Dodge/Annotation/Data.hs 15;" C MountedLS src/Dodge/Data/MountedObject.hs 12;" C MountedObject src/Dodge/Data/MountedObject.hs 11;" t MountedProp src/Dodge/Data/MountedObject.hs 13;" C @@ -946,7 +946,7 @@ OnTurret src/Dodge/Data/Item/Location.hs 37;" C OnceSound src/Dodge/Data/SoundOrigin.hs 16;" 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 +OnwardList src/Dodge/Annotation/Data.hs 20;" C Opacity src/Dodge/Data/Wall.hs 40;" t Opaque src/Dodge/Data/Wall.hs 44;" C OpticScope src/Dodge/Data/Item/Scope.hs 14;" C @@ -991,7 +991,7 @@ PSRoomRand src/Dodge/Data/GenWorld.hs 70;" C PSType src/Dodge/Data/GenWorld.hs 30;" t PUMP src/Dodge/Data/Item/Combine.hs 63;" C PaletteColor src/Color/Data.hs 14;" t -PassthroughLockKeyLists src/Dodge/Annotation/Data.hs 20;" C +PassthroughLockKeyLists src/Dodge/Annotation/Data.hs 24;" C PathEdge src/Dodge/Data/PathGraph.hs 40;" t PathEdgeNodes src/Dodge/Data/PathGraph.hs 33;" t PathFromEdge src/Dodge/Data/Room.hs 69;" t @@ -2013,6 +2013,8 @@ _lwID src/Dodge/Data/LinearShockwave.hs 15;" f _lwPoints src/Dodge/Data/LinearShockwave.hs 16;" f _lwPos src/Dodge/Data/LinearShockwave.hs 14;" f _lwTimer src/Dodge/Data/LinearShockwave.hs 17;" f +_lyCounter src/Dodge/Annotation/Data.hs 16;" f +_lyGen src/Dodge/Annotation/Data.hs 15;" f _machines src/Dodge/Data/LWorld.hs 127;" f _magBelowID src/Dodge/Data/Muzzle.hs 22;" f _magnets src/Dodge/Data/LWorld.hs 130;" f @@ -2627,6 +2629,7 @@ alteRifle src/Dodge/Item/Held/Cane.hs 22;" f ammoMagInfo src/Dodge/Item/Info.hs 49;" f ammoMagSPic src/Dodge/Item/Draw/SPic.hs 145;" f amr src/Dodge/Item/Held/Rod.hs 34;" f +anRoom src/Dodge/Floor.hs 129;" f analyser src/Dodge/Placement/Instance/Analyser.hs 10;" f analyserByDoor src/Dodge/Room/LasTurret.hs 77;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f @@ -2678,7 +2681,7 @@ arms src/Dodge/Creature/Picture.hs 70;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 13;" f -assignPushDoors src/Dodge/LevelGen.hs 42;" f +assignPushDoors src/Dodge/LevelGen.hs 43;" f atFstLnkOut src/Dodge/PlacementSpot.hs 211;" f atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 226;" f atFstLnkOutShiftInward src/Dodge/PlacementSpot.hs 229;" f @@ -2956,9 +2959,9 @@ combineTree src/Dodge/Tree/Compose.hs 66;" 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 92;" f -compactDraw' src/Dodge/LevelGen.hs 103;" f -compactDrawTree src/Dodge/LevelGen.hs 86;" f +compactDraw src/Dodge/LevelGen.hs 93;" f +compactDraw' src/Dodge/LevelGen.hs 104;" f +compactDrawTree src/Dodge/LevelGen.hs 87;" f compileAndCheckShader src/Shader/Compile.hs 277;" f composeNode src/Dodge/Tree/Compose.hs 76;" f composeTree src/Dodge/Tree/Compose.hs 46;" f @@ -3669,10 +3672,10 @@ gameplayMenu src/Dodge/Menu.hs 134;" f gameplayMenuOptions src/Dodge/Menu.hs 137;" f gasType src/Dodge/HeldUse.hs 1155;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 22;" f -generateGraphs src/Dodge/LevelGen.hs 39;" f +generateGraphs src/Dodge/LevelGen.hs 40;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f generateLevelFromRoomList src/Dodge/Layout.hs 34;" f -generateWorldFromSeed src/Dodge/LevelGen.hs 19;" f +generateWorldFromSeed src/Dodge/LevelGen.hs 20;" f geom src/Shader/Data.hs 102;" f geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f @@ -3847,8 +3850,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 39;" f -initialRoomTree src/Dodge/Floor.hs 20;" f +initialAnoTree src/Dodge/Floor.hs 35;" f +initialRoomTree src/Dodge/Floor.hs 22;" f initialWorld src/Dodge/Initialisation.hs 15;" f initialisePlaying src/Sound.hs 77;" f initializeGLState src/Preload/Render.hs 216;" f @@ -3868,6 +3871,7 @@ insertWall src/Dodge/Placement/PlaceSpot/Block.hs 122;" f insertWallInZones src/Dodge/Wall/Zone.hs 20;" f insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 117;" f insertWithNewKeys src/IntMapHelp.hs 70;" f +intAnno src/Dodge/Floor.hs 123;" f interactWithCloseObj src/Dodge/SelectedClose.hs 9;" f interpWith src/Dodge/Creature/Boid.hs 11;" f intersectCircSeg src/Geometry/Intersect.hs 335;" f @@ -4033,7 +4037,7 @@ lasTurret src/Dodge/Placement/Instance/Turret.hs 38;" f laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f lastMap src/Dodge/DoubleTree.hs 252;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f -layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f +layoutLevelFromSeed src/Dodge/LevelGen.hs 48;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 74;" f ldtIL src/Dodge/DoubleTree.hs 224;" f ldtPropagate src/Dodge/DoubleTree.hs 69;" f @@ -4583,11 +4587,11 @@ popScreen src/Dodge/Menu/PushPop.hs 6;" f posRms src/Dodge/Tree/Shift.hs 44;" f posSelSecYint src/Dodge/SelectionSections.hs 184;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f -postGenerationProcessing src/Dodge/LevelGen.hs 33;" f +postGenerationProcessing src/Dodge/LevelGen.hs 34;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f postWorldLoad src/Dodge/WorldLoad.hs 15;" f -powerFakeout src/Dodge/Room/Start.hs 29;" f -powerFakeout' src/Dodge/Room/Start.hs 26;" f +powerFakeout src/Dodge/Room/Start.hs 28;" f +powerFakeout' src/Dodge/Room/Start.hs 25;" f powerLegs src/Dodge/Item/Equipment.hs 85;" f powlist src/Multiset.hs 61;" f powlistUpToN src/Multiset.hs 23;" f @@ -4596,7 +4600,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 84;" f +preCritStart src/Dodge/Room/Start.hs 83;" f prePos src/Quaternion.hs 68;" f preloadRender src/Preload/Render.hs 30;" f premapMaybe src/FoldlHelp.hs 26;" f @@ -4663,7 +4667,7 @@ 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 54;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putStrLnAppend src/Dodge/LevelGen.hs 80;" f +putStrLnAppend src/Dodge/LevelGen.hs 81;" 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 @@ -4705,7 +4709,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 64;" f +randomChallenges src/Dodge/Room/Start.hs 63;" f randomCompass src/Dodge/Layout.hs 59;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 266;" f randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 278;" f @@ -4783,11 +4787,11 @@ 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 83;" f +reversePair src/Dodge/LevelGen.hs 84;" f rewinder src/Dodge/Item/Held/Utility.hs 36;" 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 +rezBoxStart src/Dodge/Room/Start.hs 78;" 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 @@ -4862,7 +4866,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 73;" f +runPastStart src/Dodge/Room/Start.hs 72;" f runStateWorld src/Dodge/Randify.hs 17;" f sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f safeAngleVV src/Geometry/Vector.hs 68;" f @@ -5089,7 +5093,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 89;" f +smallDrawTree src/Dodge/LevelGen.hs 90;" 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 @@ -5173,12 +5177,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 94;" f +startCrafts src/Dodge/Room/Start.hs 93;" 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 54;" f +startRoom src/Dodge/Room/Start.hs 53;" f startSeedGame src/Dodge/StartNewGame.hs 20;" f startSeedGameConc src/Dodge/StartNewGame.hs 27;" f statsModifier src/Dodge/Creature/Info.hs 16;" f @@ -5319,11 +5323,11 @@ 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 93;" f +toggleDoorTest src/Dodge/Room/Tutorial.hs 67;" 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 @@ -5411,11 +5415,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 -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 +tutAnoTree src/Dodge/Room/Tutorial.hs 35;" f +tutRezBox src/Dodge/Room/Tutorial.hs 48;" f +tutRoomTree src/Dodge/Floor.hs 26;" f +tutRooms src/Dodge/Room/Tutorial.hs 43;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 64;" f tweenAngles src/Geometry/Vector.hs 195;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f