From 31d7a00ecf3669351f517b2de09c45e94d35ee55 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 26 Mar 2026 18:24:42 +0000 Subject: [PATCH] Crush run-past room --- src/Dodge/Button/Draw.hs | 23 +++++- src/Dodge/Button/Event.hs | 1 + src/Dodge/Data/Button.hs | 1 + src/Dodge/Inventory/SelectionList.hs | 1 + src/Dodge/Render/ShapePicture.hs | 6 +- src/Dodge/Room/Airlock.hs | 5 +- src/Dodge/Room/LongDoor.hs | 39 +++++++++- src/Dodge/Room/Procedural.hs | 2 +- src/Dodge/Room/Tutorial.hs | 2 + tags | 109 ++++++++++++++------------- 10 files changed, 125 insertions(+), 64 deletions(-) diff --git a/src/Dodge/Button/Draw.hs b/src/Dodge/Button/Draw.hs index f4875d777..f2e6f5788 100644 --- a/src/Dodge/Button/Draw.hs +++ b/src/Dodge/Button/Draw.hs @@ -1,16 +1,18 @@ -module Dodge.Button.Draw where +module Dodge.Button.Draw (drawButton) where +import Data.Maybe +import Dodge.Data.LWorld import Color -import Dodge.Data.Button import Geometry import Shape import ShapePicture import Control.Lens -drawButton :: Button -> SPic -drawButton bt = case bt ^. btEvent of +drawButton :: LWorld -> Button -> SPic +drawButton lw bt = case bt ^. btEvent of ButtonPress {_bpColor = col} -> defaultDrawButton col bt ButtonSwitch {_bsColor1 = col1, _bsColor2 = col2} -> drawSwitch col1 col2 bt + ButtonDumbSwitch i -> drawDumbSwitch (fromMaybe True $ lw ^? triggers . ix i) ButtonAccessTerminal _ -> mempty drawSwitch :: Color -> Color -> Button -> SPic @@ -26,6 +28,19 @@ drawSwitch col1 col2 bt ] ) +drawDumbSwitch :: Bool -> SPic +drawDumbSwitch t + | t = flick $ pi / 4 + | otherwise = flick (negate (pi / 4)) + where + flick a = noPic + ( mconcat + [ colorSH red . upperBox Small Typical 20 $ rectNSWE (-2) (-5) (-10) 10 + , colorSH (dim red) . translateSH (V3 0 (-2) 20) . rotateSH a . upperBox Small Typical 2 $ + rectNSWE 10 0 (-2) 2 + ] + ) + defaultDrawButton :: Color -> Button -> SPic defaultDrawButton col bt = noPic ( translateSHz 15 . colorSH col $ upperBox Small Typical 5 buttonGeometry diff --git a/src/Dodge/Button/Event.hs b/src/Dodge/Button/Event.hs index 97b089cf0..46229e904 100644 --- a/src/Dodge/Button/Event.hs +++ b/src/Dodge/Button/Event.hs @@ -12,6 +12,7 @@ doButtonEvent = \case ButtonPress False f _ -> buttonFlip f ButtonSwitch _ f _ _ True -> buttonFlip f ButtonSwitch f _ _ _ False -> buttonFlip f + ButtonDumbSwitch i -> \_ -> cWorld . lWorld . triggers . ix i %~ not ButtonAccessTerminal tid -> const $ accessTerminal tid buttonFlip :: WdWd -> Button -> World -> World diff --git a/src/Dodge/Data/Button.hs b/src/Dodge/Data/Button.hs index 6a485b0a8..41f45eca1 100644 --- a/src/Dodge/Data/Button.hs +++ b/src/Dodge/Data/Button.hs @@ -23,6 +23,7 @@ data ButtonEvent , _bsColor2 :: Color , _btOn :: Bool } + | ButtonDumbSwitch { _bdsTrigger :: Int } | ButtonAccessTerminal {_btTermID :: Int} data Button = Button diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index 5233e83e7..402f9fa31 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -237,6 +237,7 @@ btText :: Button -> String btText bt = case _btEvent bt of ButtonPress {} -> "BUTTON" ButtonSwitch {_btOn = t} -> if t then "SWITCH\\" else "SWITCH/" + ButtonDumbSwitch {} -> "SWITCH" ButtonAccessTerminal i -> "TERMINAL " ++ show i closeItemToTextPictures :: Item -> ([String], Color) diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index f669fe9fc..2b88e8841 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -37,7 +37,7 @@ worldSPic cfig u = (lw ^. items) (filtOn _flItPos _floorItems) ) - <> foldup btSPic (filtOn _btPos _buttons) + <> foldup (btSPic (w ^. cWorld . lWorld)) (filtOn _btPos _buttons) <> foldup (mcSPic (w ^. cWorld)) (filtOn _mcPos _machines) -- <> foldMap' drawChasm (w ^. cWorld . chasms) <> foldMap' (Prelude.uncurry drawCliff) (w ^. cWorld . cliffs) @@ -166,8 +166,8 @@ floorItemSPic itm flit = (_flItRot flit) (itemSPic itm) -btSPic :: Button -> SPic -btSPic bt = uncurryV translateSPxy (_btPos bt) $ rotateSP (_btRot bt) (drawButton bt) +btSPic :: LWorld -> Button -> SPic +btSPic lw bt = uncurryV translateSPxy (_btPos bt) $ rotateSP (_btRot bt) (drawButton lw bt) mcSPic :: CWorld -> Machine -> SPic mcSPic cw mc = uncurryV translateSPxy (_mcPos mc) $ rotateSP (_mcDir mc) (drawMachine cw mc) diff --git a/src/Dodge/Room/Airlock.hs b/src/Dodge/Room/Airlock.hs index 941623e05..b1eae9001 100644 --- a/src/Dodge/Room/Airlock.hs +++ b/src/Dodge/Room/Airlock.hs @@ -26,8 +26,7 @@ import ShapePicture -- | A passage with a switch that opens forward access while closing backwards access. airlock :: RandomGen g => State g Room -airlock = - join $ +airlock = join $ takeOne [return airlock0, return airlock90, return airlockCrystal, airlockZ] xSwitch :: PSType @@ -89,7 +88,7 @@ airlock0 = \_ _ -> Just $ putDoubleDoor defaultDoorWall (V2 0 80) (V2 40 80) (dr2 btid) , invisibleWall $ rectNSWE 60 40 (-40) (-30) , spanLightI (V2 (-2) 30) (V2 (-2) 70) - , sps0 $ putShape $ thinHighBar 75 (V2 40 50) (V2 (-1) 50) + , sps0 $ putShape $ thinHighBar 95 (V2 40 50) (V2 (-1) 50) ] , _rmBound = [rectNSWE 75 15 0 40, switchcut] } diff --git a/src/Dodge/Room/LongDoor.hs b/src/Dodge/Room/LongDoor.hs index 744c8d0a1..b175bfde9 100644 --- a/src/Dodge/Room/LongDoor.hs +++ b/src/Dodge/Room/LongDoor.hs @@ -3,6 +3,9 @@ -- | Rooms containing long doors, probably with a big reveal behind them. module Dodge.Room.LongDoor where +import Dodge.Room.Modify +import qualified Data.IntMap.Strict as IM +import Dodge.Default import Control.Monad import Data.Maybe import qualified Data.Set as S @@ -11,7 +14,6 @@ import Dodge.Creature import Dodge.Data.GenWorld import Dodge.Default.Door import Dodge.Default.Room -import Dodge.Default.Wall import Dodge.Door.PutSlideDoor import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.Switch @@ -136,6 +138,41 @@ addButtonSlowDoor x h = lsx = 30 lp@(V2 lx ly) = V2 100 (-20) +makeDumbSwitch :: Int -> Button +makeDumbSwitch i = defaultButton & btEvent .~ ButtonDumbSwitch i + +slowCrushRoom :: RandomGen g => State g Room +slowCrushRoom = do + rm <- shuffleLinks =<< roomRectAutoLights 200 100 + let rm' = removeLights rm + & rmPmnts .~ [spanLightI (V2 0 60) (V2 35 100) + , spanLightI (V2 200 60) (V2 165 100) + ] + return $ rm' + & rmLinks %~ setOutLinksByType (OnEdge East) + & rmLinks %~ setInLinksByType (OnEdge West) + & rmPmnts .:~ + (ps0 (PutTrigger False) $ \i -> Just $ + pContID (apos West 5) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ + pContID (apos East (-5)) (PutButton $ makeDumbSwitch i) $ \_ -> Just $ + sps0 (PutDoor (dr & drTrigger .~ WdTrig i) defaultDoorWall) & plIDCont . mapped . mapped ?~ + sps0 (PutDoor (dr1 & drTrigger .~ WdTrig i) defaultDoorWall) + ) + + where + dr = defaultDoor + & drUpdate .~ DoorLerp 0.01 + & drZeroPos .~ (V2 65 (-40), 0) + & drOnePos .~ (V2 65 50, 0) + & drFootPrint .~ IM.fromDistinctAscList (zip [0..] (loopPairs . reverse $ rectWH 35 50)) + dr1 = dr + & drOnePos .~ (V2 135 (-40), 0) + & drZeroPos .~ (V2 135 50, 0) + apos edge x = (rprBool (t edge) & psSelect . mapped . mapped . _Just . _1 %~ (psRot +~ pi) . (psPos +~ V2 x 0)) + t edge rp _ = case _rpType rp of + UnusedLink s -> OnEdge edge `S.member` s + _ -> False + slowDoorRoom :: RandomGen g => State g Room slowDoorRoom = do x <- state $ randomR (400, 800) diff --git a/src/Dodge/Room/Procedural.hs b/src/Dodge/Room/Procedural.hs index 60c49ea57..650294c3b 100644 --- a/src/Dodge/Room/Procedural.hs +++ b/src/Dodge/Room/Procedural.hs @@ -37,7 +37,7 @@ import RandomHelp --import Control.Lens -- This will need a cleanup, but it might change a bit first -{- A simple rectangular room with a light in the center. +{- A simple rectangular room with no lights. Creates links and pathfinding graph. -} roomRect :: Float -> Float -> Int -> Int -> Room roomRect x y xn yn = diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index c7bde3774..5646e5440 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -55,6 +55,8 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor + , tToBTree "slowCrush" . return . cleatOnward <$> slowCrushRoom + , corDoor , chasmSpitTerminal --a , return $ tToBTree "cor" $ return $ cleatOnward corridor --a , corDoor diff --git a/tags b/tags index 89d18dfe7..a9dfa5b00 100644 --- a/tags +++ b/tags @@ -160,8 +160,9 @@ BulletPayload src/Dodge/Data/Bullet.hs 32;" t BulletTrajectory src/Dodge/Data/Bullet.hs 40;" t BulletTrajectoryType src/Dodge/Data/Bullet.hs 47;" t BurstTrigger src/Dodge/Data/TriggerType.hs 12;" C -Button src/Dodge/Data/Button.hs 28;" t -ButtonAccessTerminal src/Dodge/Data/Button.hs 26;" C +Button src/Dodge/Data/Button.hs 33;" t +ButtonAccessTerminal src/Dodge/Data/Button.hs 31;" C +ButtonDumbSwitch src/Dodge/Data/Button.hs 26;" C ButtonEvent src/Dodge/Data/Button.hs 13;" t ButtonPress src/Dodge/Data/Button.hs 14;" C ButtonSound src/Dodge/Data/SoundOrigin.hs 37;" C @@ -1560,6 +1561,9 @@ _bdMaxX src/Dodge/Data/Bounds.hs 12;" f _bdMaxY src/Dodge/Data/Bounds.hs 14;" f _bdMinX src/Dodge/Data/Bounds.hs 11;" f _bdMinY src/Dodge/Data/Bounds.hs 13;" f +_bdsColor1 src/Dodge/Data/Button.hs 28;" f +_bdsColor2 src/Dodge/Data/Button.hs 29;" f +_bdsTrigger src/Dodge/Data/Button.hs 27;" f _beamCombine src/Dodge/Data/Beam.hs 46;" f _blDir src/Dodge/Data/Block.hs 27;" f _blDraw src/Dodge/Data/Block.hs 29;" f @@ -1592,13 +1596,13 @@ _bpColor src/Dodge/Data/Button.hs 17;" f _bpEff src/Dodge/Data/Button.hs 16;" f _bsColor1 src/Dodge/Data/Button.hs 22;" f _bsColor2 src/Dodge/Data/Button.hs 23;" f -_btEvent src/Dodge/Data/Button.hs 31;" f -_btID src/Dodge/Data/Button.hs 32;" f +_btEvent src/Dodge/Data/Button.hs 36;" f +_btID src/Dodge/Data/Button.hs 37;" f _btOn src/Dodge/Data/Button.hs 15;" f _btOn src/Dodge/Data/Button.hs 24;" f -_btPos src/Dodge/Data/Button.hs 29;" f -_btRot src/Dodge/Data/Button.hs 30;" f -_btTermID src/Dodge/Data/Button.hs 26;" f +_btPos src/Dodge/Data/Button.hs 34;" f +_btRot src/Dodge/Data/Button.hs 35;" f +_btTermID src/Dodge/Data/Button.hs 31;" f _buDam src/Dodge/Data/Bullet.hs 34;" f _buDrag src/Dodge/Data/Bullet.hs 20;" f _buEffect src/Dodge/Data/Bullet.hs 17;" f @@ -2528,7 +2532,7 @@ activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 63;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 82;" f addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f -addButtonSlowDoor src/Dodge/Room/LongDoor.hs 95;" f +addButtonSlowDoor src/Dodge/Room/LongDoor.hs 96;" f addCrGibs src/Dodge/Prop/Gib.hs 17;" f addDepth src/Picture/Base.hs 125;" f addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 43;" f @@ -2559,7 +2563,7 @@ addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f addRandomGirderEW src/Dodge/Room/Girder.hs 9;" f addRandomGirderFrom src/Dodge/Room/Girder.hs 16;" f addSideEffect src/Dodge/Concurrent.hs 29;" f -addSouthPillars src/Dodge/Room/LongDoor.hs 87;" f +addSouthPillars src/Dodge/Room/LongDoor.hs 88;" f addTermSignal src/Dodge/Event/Input.hs 31;" f addToTrunk src/TreeHelp.hs 157;" f addWarningTerminal src/Dodge/Room/Warning.hs 94;" f @@ -2571,12 +2575,12 @@ aimDelaySweep src/Dodge/Render/Picture.hs 285;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 181;" f airlock src/Dodge/Room/Airlock.hs 28;" f -airlock0 src/Dodge/Room/Airlock.hs 79;" f -airlock90 src/Dodge/Room/Airlock.hs 202;" f -airlockCrystal src/Dodge/Room/Airlock.hs 252;" f -airlockDoubleDoor src/Dodge/Room/Airlock.hs 105;" f -airlockSimple src/Dodge/Room/Airlock.hs 130;" f -airlockZ src/Dodge/Room/Airlock.hs 167;" f +airlock0 src/Dodge/Room/Airlock.hs 78;" f +airlock90 src/Dodge/Room/Airlock.hs 201;" f +airlockCrystal src/Dodge/Room/Airlock.hs 251;" f +airlockDoubleDoor src/Dodge/Room/Airlock.hs 104;" f +airlockSimple src/Dodge/Room/Airlock.hs 129;" f +airlockZ src/Dodge/Room/Airlock.hs 166;" f allVisibleWalls src/Dodge/Base/Collide.hs 224;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f @@ -2768,9 +2772,9 @@ bulletPayloadModule src/Dodge/Item/Scope.hs 137;" f bulletSynthesizer src/Dodge/Item/Ammo.hs 89;" f bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f -buttonFlip src/Dodge/Button/Event.hs 17;" f +buttonFlip src/Dodge/Button/Event.hs 18;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f -cChasm src/Dodge/Room/Tutorial.hs 131;" f +cChasm src/Dodge/Room/Tutorial.hs 133;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2807,8 +2811,8 @@ chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 121;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f chasmRotate src/Dodge/Creature/Update.hs 172;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 356;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 296;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 358;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 298;" f chasmTestCorpse src/Dodge/Creature/Update.hs 155;" f chasmTestLiving src/Dodge/Creature/Update.hs 137;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f @@ -2864,7 +2868,7 @@ clipZoom src/Dodge/Update/Camera.hs 233;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 205;" f -closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 242;" f +closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 243;" f closeObjectInfo src/Dodge/Render/HUD.hs 228;" f closestPointOnLine src/Geometry/Intersect.hs 270;" f closestPointOnLineParam src/Geometry/Intersect.hs 286;" f @@ -3106,7 +3110,7 @@ debugWritableValues src/Dodge/Debug.hs 164;" f decodeSensorType src/Dodge/Terminal.hs 81;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 62;" f decomposeTree src/Dodge/Tree/Compose.hs 59;" f -decontamRoom src/Dodge/Room/Airlock.hs 38;" f +decontamRoom src/Dodge/Room/Airlock.hs 37;" f decoratedBlock src/Dodge/Placement/Instance/Block.hs 14;" f decorationToShape src/Dodge/Placement/TopDecoration.hs 16;" f decreaseAwareness src/Dodge/Creature/Perception.hs 118;" f @@ -3143,7 +3147,7 @@ defaultDirtBlock src/Dodge/Default/Block.hs 17;" f defaultDirtWall src/Dodge/Default/Wall.hs 47;" f defaultDoor src/Dodge/Default/Door.hs 5;" f defaultDoorWall src/Dodge/Default/Wall.hs 29;" f -defaultDrawButton src/Dodge/Button/Draw.hs 29;" f +defaultDrawButton src/Dodge/Button/Draw.hs 30;" f defaultFlIt src/Dodge/Default.hs 27;" f defaultForeground src/Dodge/Default/ForegroundShape.hs 5;" f defaultHUD src/Dodge/Default/World.hs 172;" f @@ -3400,7 +3404,7 @@ drawShockwave src/Dodge/Shockwave/Draw.hs 6;" f drawSpark src/Dodge/Spark/Draw.hs 7;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 28;" f drawSubInventory src/Dodge/Render/HUD.hs 173;" f -drawSwitch src/Dodge/Button/Draw.hs 16;" f +drawSwitch src/Dodge/Button/Draw.hs 17;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 24;" f drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f drawTerminalCursorLink src/Dodge/Render/HUD.hs 392;" f @@ -3563,7 +3567,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 777;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 823;" f -foldMTRS src/Dodge/Room/Tutorial.hs 85;" f +foldMTRS src/Dodge/Room/Tutorial.hs 87;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3625,8 +3629,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 509;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 503;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 490;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 505;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 492;" f getDebugMouseOver src/Dodge/Update.hs 450;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3643,7 +3647,7 @@ getPJStabiliser src/Dodge/HeldUse.hs 1271;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 486;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 488;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3957,7 +3961,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 439;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f -lChasm src/Dodge/Room/Tutorial.hs 143;" f +lChasm src/Dodge/Room/Tutorial.hs 145;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f @@ -4193,9 +4197,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 172;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 194;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 261;" f +midChasm src/Dodge/Room/Tutorial.hs 174;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 196;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 263;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4296,7 +4300,7 @@ noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 17;" f nodesNear src/Dodge/Path.hs 75;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 258;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 260;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f normalTo8 src/Shader/Poke.hs 466;" f @@ -4371,7 +4375,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 568;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 570;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4476,8 +4480,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 334;" f -polyChasmC src/Dodge/Room/Tutorial.hs 346;" f +polyChasm src/Dodge/Room/Tutorial.hs 336;" f +polyChasmC src/Dodge/Room/Tutorial.hs 348;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4557,7 +4561,7 @@ putBlockN src/Dodge/Placement/Instance/Wall.hs 120;" f putBlockRect src/Dodge/Placement/Instance/Wall.hs 111;" f putBlockV src/Dodge/Placement/Instance/Wall.hs 114;" f putConvexChasm src/Dodge/Data/GenWorld.hs 70;" f -putDoor src/Dodge/Room/Airlock.hs 117;" f +putDoor src/Dodge/Room/Airlock.hs 116;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 20;" f putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 60;" f @@ -4850,7 +4854,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 242;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 99;" f -sensorTut src/Dodge/Room/Tutorial.hs 512;" f +sensorTut src/Dodge/Room/Tutorial.hs 514;" f sensorTypeDamages src/Dodge/Machine/Update.hs 288;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f @@ -4885,7 +4889,7 @@ setSoundVolume src/Sound.hs 159;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f -setTreeInts src/Dodge/Room/Tutorial.hs 92;" f +setTreeInts src/Dodge/Room/Tutorial.hs 94;" f setViewDistance src/Dodge/Update/Camera.hs 239;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f @@ -5002,8 +5006,9 @@ slapClean7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 747;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 667;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 629;" f slideWindow src/ListHelp.hs 81;" f -slowDoorRoom src/Dodge/Room/LongDoor.hs 139;" f -slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 156;" f +slowCrushRoom src/Dodge/Room/LongDoor.hs 140;" f +slowDoorRoom src/Dodge/Room/LongDoor.hs 152;" f +slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 169;" f smallBattery src/Dodge/Item/Ammo.hs 57;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f @@ -5038,7 +5043,7 @@ soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 175;" f 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 84;" f +southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f spaceAction src/Dodge/Update/Input/InGame.hs 504;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 160;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 153;" f @@ -5067,8 +5072,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 223;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 238;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 225;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 240;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 73;" f @@ -5336,15 +5341,15 @@ tryUseParent src/Dodge/Creature/State.hs 144;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f tutAnoTree src/Dodge/Room/Tutorial.hs 53;" f -tutDrop src/Dodge/Room/Tutorial.hs 97;" f -tutHub src/Dodge/Room/Tutorial.hs 410;" f -tutLight src/Dodge/Room/Tutorial.hs 378;" f -tutRezBox src/Dodge/Room/Tutorial.hs 523;" f +tutDrop src/Dodge/Room/Tutorial.hs 99;" f +tutHub src/Dodge/Room/Tutorial.hs 412;" f +tutLight src/Dodge/Room/Tutorial.hs 380;" f +tutRezBox src/Dodge/Room/Tutorial.hs 525;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 548;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 550;" f tweenAngles src/Geometry/Vector.hs 190;" f -twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 78;" f -twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f +twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f +twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 35;" f twists src/Dodge/Creature/Test.hs 103;" f twoFlat src/Dodge/Creature/Test.hs 100;" f twoFlatHRot src/Dodge/Item/HeldOffset.hs 76;" f @@ -5645,7 +5650,7 @@ writeSaveSlot src/Dodge/Save.hs 36;" f xCylinder src/Shape.hs 133;" f xCylinderST src/Shape.hs 130;" f xIntercepts src/Dodge/Zoning/Base.hs 66;" f -xSwitch src/Dodge/Room/Airlock.hs 33;" f +xSwitch src/Dodge/Room/Airlock.hs 32;" f xV2 src/Geometry/Vector.hs 201;" f xyV3 src/Geometry/Vector.hs 213;" f xyzV4 src/Geometry/Vector.hs 209;" f @@ -5662,7 +5667,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 156;" f +zChasm src/Dodge/Room/Tutorial.hs 158;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f