From 5394450800eef82c0f2c65f7c67f9ea69732e689 Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 21 Mar 2026 18:48:44 +0000 Subject: [PATCH] Work on rooms --- src/Dodge/DisplayInventory.hs | 2 +- src/Dodge/LockAndKey.hs | 10 +- src/Dodge/Material/Damage.hs | 2 +- src/Dodge/Placement/Instance/LightSource.hs | 4 + src/Dodge/Room/Procedural.hs | 5 +- src/Dodge/Room/Room.hs | 9 +- src/Dodge/Room/SensorDoor.hs | 30 ++-- src/Dodge/Room/Tutorial.hs | 107 ++++++------ tags | 174 ++++++++++---------- 9 files changed, 170 insertions(+), 173 deletions(-) diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index df727de43..7f64914b5 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -143,7 +143,7 @@ updateDisplaySections w cfig = (sfclose, sclose) = filterSectionsPair closefiltcurs plainRegex closeitms "NEARBY ITEMS" $ w ^? hud . diCloseFilter . _Just - interfaceshead = if null btitems then mempty else makehead "NEARBY INTERFACES" + interfaceshead = if null btitems then mempty else makehead "INTERFACES" btitems = IM.fromDistinctAscList . zip [0 ..] $ mapMaybe (closeButtonToSelectionItem w) (w ^. hud . closeButtons) diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index 2b9292e2b..e3e928338 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -26,11 +26,11 @@ lockRoomMultiItems = lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] lockRoomKeyItems = -- [ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD]) - [ (sensorRoomRunPast LaserSensor, return LASER) --- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) --- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) --- , (const glassLessonRunPast, takeOne [LASER]) --- , (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD]) +-- , (sensorRoomRunPast LaserSensor, return LASER) +-- [ (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) +-- [ (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) +-- [ (const glassLessonRunPast, takeOne [LASER]) + [ (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD]) -- , (keyCardRoomRunPast 0, return (HELD $ KEYCARD 0)) ] diff --git a/src/Dodge/Material/Damage.hs b/src/Dodge/Material/Damage.hs index 5746697c9..9ac37a67e 100644 --- a/src/Dodge/Material/Damage.hs +++ b/src/Dodge/Material/Damage.hs @@ -90,7 +90,7 @@ damagePiezoelectric = damageStone damagePhotovoltaic :: Damage -> ECW -> World -> (Int,World) damagePhotovoltaic dm ecw w = case dm of - Lasering _ p t -> f (3*dmam) $ laserSpark (outTo p t) (rdir p t) + Lasering _ p t -> f (10*dmam) $ laserSpark (outTo p t) (rdir p t) Piercing _ p t -> f dmam $ makeSpark NormalSpark (outTo p t) (rdir p t) . makeDustAt Stone 200 (addZ 20 (outTo p t)) diff --git a/src/Dodge/Placement/Instance/LightSource.hs b/src/Dodge/Placement/Instance/LightSource.hs index 7150ed097..ee8f21823 100644 --- a/src/Dodge/Placement/Instance/LightSource.hs +++ b/src/Dodge/Placement/Instance/LightSource.hs @@ -16,6 +16,7 @@ module Dodge.Placement.Instance.LightSource ( spanLightY, mntLightLnkCond', spanLS, + mntLightLnkShape, ) where import Color @@ -148,6 +149,9 @@ mntLightLnkCond ps = do shp <- takeOne [vShape, lShape, jShape, liShape] return $ mntLSCond (fmap (fmap $ colorSH black) shp) ps +mntLightLnkShape :: (Point2 -> Point3 -> Shape) -> PlacementSpot -> Placement +mntLightLnkShape shp ps = mntLSCond (fmap (fmap $ colorSH black) shp) ps + mntLightLnkCond' :: PlacementSpot -> Placement mntLightLnkCond' = mntLSCond (fmap (fmap $ colorSH black) vShape) diff --git a/src/Dodge/Room/Procedural.hs b/src/Dodge/Room/Procedural.hs index 3ba80b46f..052720472 100644 --- a/src/Dodge/Room/Procedural.hs +++ b/src/Dodge/Room/Procedural.hs @@ -118,8 +118,9 @@ gridRoomPos xs ys = map makeonpos (grid xs ys) <> map makeoffpos (grid (mids xs) -- to do so) roomRectAutoLights :: RandomGen g => Float -> Float -> State g Room roomRectAutoLights x y = do - l1 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isInLnk rp - l2 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnk rp + shp <- takeOne [vShape, lShape, jShape, liShape] + let l1 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isInLnk rp + l2 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnk rp return $ roomRect x y (f x) (f y) & rmName .~ "autoRect" & rmPmnts .~ [ l1 , l2 ] diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index 6ae1834e0..b7e454679 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -15,6 +15,7 @@ module Dodge.Room.Room ( critDeadEnd, ) where +import Data.Maybe import Linear import Color import Dodge.Placement.Instance.Pipe @@ -428,8 +429,8 @@ distributerRoom :: AmmoType -> Int -> State LayoutVars Room distributerRoom atype aamount = do i <- nextLayoutInt i1 <- nextLayoutInt - w <- state $ randomR (100, 400) - h <- state $ randomR (200, 400) + w <- state $ randomR (100, 200) + h <- state $ randomR (200, 200) r <- roomRectAutoLights w h let mcstore = defaultMachine & mcMaterial .~ Metal @@ -446,8 +447,8 @@ distributerRoom atype aamount = do & plSpot .~ unusedOffPathAwayFromLink 50 & plExternalID ?~ i1 thepipe gw = - let p1 = gw ^?! genPmnt . ix i . plSpot . psPos - p2 = gw ^?! genPmnt . ix i1 . plSpot . psPos + let p1 = fromMaybe (error "distributerRoom pipe") $ gw ^? genPmnt . ix i . plSpot . psPos + p2 = fromMaybe (error "distributerRoom pipe") $ gw ^? genPmnt . ix i1 . plSpot . psPos in sps (PS p1 0) (PutForeground (ForegroundShape 0 0 diff --git a/src/Dodge/Room/SensorDoor.hs b/src/Dodge/Room/SensorDoor.hs index 072298ee1..07ae844e6 100644 --- a/src/Dodge/Room/SensorDoor.hs +++ b/src/Dodge/Room/SensorDoor.hs @@ -2,8 +2,6 @@ module Dodge.Room.SensorDoor (sensAboveDoor, sensorRoomRunPast) where -import Dodge.RoomLink -import Dodge.Room.Procedural import Control.Monad import qualified Data.Set as S import Dodge.Cleat @@ -17,6 +15,8 @@ import Dodge.Room.Door import Dodge.Room.Link import Dodge.Room.Modify import Dodge.Room.Ngon +import Dodge.Room.Procedural +import Dodge.RoomLink import Dodge.Terminal import Dodge.Tree import Dodge.Wire @@ -28,8 +28,12 @@ import RandomHelp -- for roomRectAutoLinks-- make the locked door a center door? sensorRoom :: SensorType -> Int -> State LayoutVars (Tree Room) sensorRoom senseType n = do - --rm <- join $ takeOne [addLightsNGon =<< roomNgon 8 200, roomRectAutoLights 200 200] - rm <- join $ takeOne [ roomRectAutoLights 200 200 <&> rmLinks %~ setOutLinks nonCornerLinks] + rm <- + join $ + takeOne + [ addLightsNGon =<< roomNgon 8 200 + , roomRectAutoLights 200 200 <&> rmLinks %~ setOutLinks nonCornerLinks + ] cenroom <- shuffleLinks $ sensInsideDoor senseType n rm return $ treePost @@ -75,7 +79,8 @@ sensAboveDoor sensetype wth ps = sensInsideDoor :: SensorType -> Int -> Room -> Room sensInsideDoor senseType i rm = rm - & rmName .++~ take 4 (show senseType) + & rmName + .++~ take 4 (show senseType) & rmPmnts .++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100)) , psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100)) @@ -87,12 +92,11 @@ sensInsideDoor senseType i rm = , sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i ] where - termpos rp rm' = isUnusedLnk rp rm' - && all ((>30) . dist (_rpPos rp) . _rpPos) (filter usedlnks $ rm' ^. rmPos) + termpos rp rm' = + isUnusedLnk rp rm' + && all ((> 30) . dist (_rpPos rp) . _rpPos) (filter usedlnks $ rm' ^. rmPos) usedlnks rp = case _rpType rp of - UsedOutLink {} -> True - UsedInLink {} -> True - UnusedLink {} -> False - NotLink {} -> False - - + UsedOutLink{} -> True + UsedInLink{} -> True + UnusedLink{} -> False + NotLink{} -> False diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 0aaf292d2..6d7eba390 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -2,7 +2,6 @@ module Dodge.Room.Tutorial where -import Dodge.Room.Modify import Control.Monad import qualified Data.IntMap.Strict as IM import qualified Data.IntSet as IS @@ -29,6 +28,7 @@ import Dodge.Room.Door import Dodge.Room.LasTurret import Dodge.Room.Link import Dodge.Room.LongDoor +import Dodge.Room.Modify import Dodge.Room.Ngon import Dodge.Room.Path import Dodge.Room.Pillar @@ -54,48 +54,31 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor - , passthroughLockKeyLists lockRoomKeyItems itemRooms ---bbb , -- , return . tToBTree "door" $ treePost [corridor, cleatOnward door] ---bbb corDoor ---bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb lasRunRand ---bbb , corDoor ---bbb , passthroughLockKeyLists lockRoomKeyItems itemRooms ---bbb , -- , passthroughLockKeyLists lockRoomKeyItems itemRooms ---bbb tToBTree "door" . return <$> return (cleatOnward door) ---bbb , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb -- , passthroughLockKeyLists ---bbb -- [(sensorRoomRunPast ElectricSensor, takeOne ---bbb -- [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , ---bbb -- HELD SPARKGUN])] ---bbb -- itemRooms ---bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) ---bbb tToBTree "sdr" . return . cleatOnward ---bbb <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000) ---bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom ---bbb -- aaa---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] [] ---bbb -- aaa-- , return $ tToBTree "door" $ return $ cleatOnward door ---bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa-- , tToBTree "sdr" . return . cleatOnward <$> ---bbb -- aaa-- (shuffleLinks =<< tanksPipesRoom) ---bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa , return $ tToBTree "door" $ return $ cleatOnward door ---bbb -- aaa , tutHub ---bbb -- aaa , chasmSpitTerminal ---bbb -- aaa , tutLight ---bbb -- aaa , tutDrop ---bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---bbb -- aaa ---- , AnTree $ pickupTut ---bbb -- aaa ---- , AnTree $ weaponTut + , chasmSpitTerminal + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , corDoor + , tToBTree "sdr" . return . cleatOnward + <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000) + , -- , return $ tToBTree "cor" $ return $ cleatOnward corridor + -- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom + ---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] [] + -- , return $ tToBTree "door" $ return $ cleatOnward door + -- , return $ tToBTree "cor" $ return $ cleatOnward corridor + -- , tToBTree "sdr" . return . cleatOnward <$> + -- (shuffleLinks =<< tanksPipesRoom) + -- , return $ tToBTree "cor" $ return $ cleatOnward corridor + -- , return $ tToBTree "cor" $ return $ cleatOnward corridor + -- , return $ tToBTree "cor" $ return $ cleatOnward corridor + return $ tToBTree "door" $ return $ cleatOnward door + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tutHub + , chasmSpitTerminal + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tutLight + , tutDrop + , return $ tToBTree "cor" $ return $ cleatOnward corridor + ---- , AnTree $ pickupTut + ---- , AnTree $ weaponTut ] foldMTRS :: @@ -131,8 +114,7 @@ tutDrop = do isUnusedLnk (\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow)) ss = - [ makeTermLine "--------------------------------------------" - , makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS" + [ makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS" , makeTermLine "--------------------------------------------" ] <> tlSetStatus (TerminalPressTo "CONTINUE") @@ -273,19 +255,21 @@ midChasmSpit = do y = 300 r <- roomRectAutoLights x y cs <- join $ takeOne [censquare x y] + foutlnks <- + takeOne + [ \rl -> + isMidEdgeLink r North rl + || isMidEdgeLink r East rl + || isMidEdgeLink r West rl + , \rl -> OnEdge North `S.member` (rl ^. rlType) + && not (FromEdge East 0 `S.member` (rl ^. rlType)) + && not (FromEdge West 0 `S.member` (rl ^. rlType)) + ] shuffleLinks $ r - & rmLinks - %~ setOutLinks - ( \rl -> - isMidEdgeLink r North rl - || isMidEdgeLink r East rl - || isMidEdgeLink r West rl - ) - & rmLinks - %~ setInLinks (isMidEdgeLink r South) - & rmPmnts - .~ cs + & rmLinks %~ setOutLinks foutlnks + & rmLinks %~ setInLinks (isMidEdgeLink r South) + & rmPmnts .~ cs where censquare x y = do z <- state $ randomR (40, 60) @@ -304,8 +288,11 @@ chasmSpitTerminal :: State LayoutVars MTRS chasmSpitTerminal = do i1 <- nextLayoutInt y <- midChasmSpit - l3 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 0 rp - l4 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 1 rp + shp <- takeOne [vShape, lShape, jShape, liShape] + let l3 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 0 rp + l4 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 1 rp + l5 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 2 rp + -- let y' = y & rmPmnts <>~ [l3, l4, l5] let y' = y & rmPmnts <>~ [l3, l4] return $ tToBTree "chasmTerm" $ @@ -430,9 +417,7 @@ tutHub = do where ds = ["DESTROY THIS TO OPEN THE DOOR"] ss = - [ makeTermLine "---------------------------------------------" - , makeTermLine "YOU CAN INTERACT WITH SOME TERMINALS DIRECTLY" - , makeTermLine " THESE WILL DISPLAY A PROMPT SYMBOL" + [ makeTermLine "SOME TERMINALS HAVE A PROMPT" , makeTermLine " *****" , makeTermLine " * * TYPE OR SCROLL TO ENTER COMMANDS" , makeTermLine " * > *" diff --git a/tags b/tags index 830284d6c..40146f889 100644 --- a/tags +++ b/tags @@ -2505,11 +2505,11 @@ _wsMachine src/Dodge/Data/Wall/Structure.hs 13;" f _xNum src/Dodge/Data/Item/Combine.hs 140;" f _xNum src/Dodge/Data/Item/Combine.hs 150;" f _xNum src/Dodge/Data/Item/Combine.hs 170;" f -aBar src/Dodge/Placement/Instance/LightSource.hs 66;" f +aBar src/Dodge/Placement/Instance/LightSource.hs 67;" f aFlame src/Dodge/Gas.hs 20;" f aGasCloud src/Dodge/Gas.hs 15;" f aRadarPulse src/Dodge/RadarSweep.hs 20;" f -aShape src/Dodge/Placement/Instance/LightSource.hs 91;" f +aShape src/Dodge/Placement/Instance/LightSource.hs 92;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f accessTerminal src/Dodge/WorldEffect.hs 65;" f @@ -2741,7 +2741,7 @@ boxXYZ src/Polyhedra.hs 91;" f boxXYZnobase src/Polyhedra.hs 77;" f brainHat src/Dodge/Item/Equipment.hs 62;" f branchRectWith src/Dodge/Room/Branch.hs 16;" f -branchWith src/Dodge/Room/Room.hs 79;" f +branchWith src/Dodge/Room/Room.hs 80;" f bright src/Color.hs 147;" f brightX src/Color.hs 143;" f btSPic src/Dodge/Render/ShapePicture.hs 169;" f @@ -2759,7 +2759,7 @@ 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 buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f -cChasm src/Dodge/Room/Tutorial.hs 147;" f +cChasm src/Dodge/Room/Tutorial.hs 126;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2778,7 +2778,7 @@ ceilingTo src/Geometry/Zone.hs 15;" f cenLasTur src/Dodge/Room/LasTurret.hs 51;" f centerText src/Picture/Base.hs 176;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f -centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f +centerVaultRoom src/Dodge/Room/Procedural.hs 270;" f centroid src/Geometry/Polygon.hs 177;" f centroidNum src/Geometry/Polygon.hs 180;" f chainPairs src/Geometry.hs 360;" f @@ -2795,8 +2795,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 173;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 340;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 302;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 319;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 281;" 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 @@ -2835,7 +2835,7 @@ circleSolidCol src/Picture/Base.hs 160;" f clAlt src/Dodge/Cloud.hs 5;" f clColor src/Shader/Poke/Cloud.hs 39;" f clZoneSize src/Dodge/Zoning/Cloud.hs 24;" f -clampPath src/Dodge/Room/Procedural.hs 146;" f +clampPath src/Dodge/Room/Procedural.hs 147;" f clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 817;" f clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 733;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 577;" f @@ -2885,11 +2885,11 @@ colorSH src/Shape.hs 234;" f combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 44;" f combineAwareness src/Dodge/Creature/Perception.hs 109;" f -combineFloors src/Dodge/Room/Procedural.hs 152;" f +combineFloors src/Dodge/Room/Procedural.hs 153;" f combineInventoryExtra src/Dodge/Render/HUD.hs 340;" f combineItemListYouX src/Dodge/Combine.hs 36;" f combineList src/Dodge/Combine.hs 21;" f -combineRooms src/Dodge/Room/Procedural.hs 132;" f +combineRooms src/Dodge/Room/Procedural.hs 133;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 743;" f combineTree src/Dodge/Tree/Compose.hs 68;" f commandColor src/Dodge/Terminal.hs 127;" f @@ -2921,7 +2921,7 @@ coolMinigun src/Dodge/Creature/State.hs 95;" f copier src/Dodge/Item/Scope.hs 94;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f -corDoor src/Dodge/Room/Room.hs 404;" f +corDoor src/Dodge/Room/Room.hs 405;" f cornerList src/Preload/Render.hs 236;" f corpseOrGib src/Dodge/Creature/Update.hs 98;" f corridor src/Dodge/Room/Corridor.hs 17;" f @@ -2995,10 +2995,10 @@ creatureShootPulseLaser src/Dodge/HeldUse.hs 883;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 60;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 81;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 70;" f -critDeadEnd src/Dodge/Room/Room.hs 257;" f -critInDeadEnd src/Dodge/Room/Room.hs 253;" f -critsPillarRoom src/Dodge/Room/Room.hs 410;" f -critsRoom src/Dodge/Room/Room.hs 418;" f +critDeadEnd src/Dodge/Room/Room.hs 258;" f +critInDeadEnd src/Dodge/Room/Room.hs 254;" f +critsPillarRoom src/Dodge/Room/Room.hs 411;" f +critsRoom src/Dodge/Room/Room.hs 419;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 28;" f crossProd src/Geometry/Vector3D.hs 41;" f @@ -3069,7 +3069,7 @@ dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 339;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f -deadEndRoom src/Dodge/Room/Room.hs 260;" f +deadEndRoom src/Dodge/Room/Room.hs 261;" f deadFeet src/Dodge/Creature/Picture.hs 68;" f deadRot src/Dodge/Creature/Picture.hs 86;" f deadScalp src/Dodge/Creature/Picture.hs 81;" f @@ -3194,7 +3194,7 @@ dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 151;" f distributeAmmoToYou src/Dodge/WorldEffect.hs 139;" f -distributerRoom src/Dodge/Room/Room.hs 427;" f +distributerRoom src/Dodge/Room/Room.hs 428;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f divideDoorPane src/Dodge/Placement/Instance/Door.hs 65;" f @@ -3272,11 +3272,11 @@ doWorldEvents src/Dodge/Update.hs 463;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 13;" f doorBetween src/Dodge/Placement/Instance/Door.hs 38;" f -doorCor src/Dodge/Room/Room.hs 399;" f +doorCor src/Dodge/Room/Room.hs 400;" f doorLerp src/Dodge/Door.hs 40;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f -doubleCorridorBarrels src/Dodge/Room/Room.hs 290;" f +doubleCorridorBarrels src/Dodge/Room/Room.hs 291;" f doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 28;" f @@ -3547,7 +3547,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 100;" f +foldMTRS src/Dodge/Room/Tutorial.hs 80;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3609,8 +3609,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 539;" 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 489;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 476;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 466;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 453;" f getDebugMouseOver src/Dodge/Update.hs 424;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3628,7 +3628,7 @@ getPJStabiliser src/Dodge/HeldUse.hs 1268;" 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 472;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 449;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3652,8 +3652,8 @@ glassShat1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 697;" f glassShat2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 707;" f glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 711;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 687;" f -glassSwitchBack src/Dodge/Room/Room.hs 82;" f -glassSwitchBackCrits src/Dodge/Room/Room.hs 116;" f +glassSwitchBack src/Dodge/Room/Room.hs 83;" f +glassSwitchBackCrits src/Dodge/Room/Room.hs 117;" f glauncherPic src/Dodge/Item/Draw/SPic.hs 401;" f gluintSize src/Shader/Parameters.hs 25;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f @@ -3748,7 +3748,7 @@ horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 82;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f -iShape src/Dodge/Placement/Instance/LightSource.hs 54;" f +iShape src/Dodge/Placement/Instance/LightSource.hs 55;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f inLink src/Dodge/RoomLink.hs 128;" f @@ -3922,7 +3922,7 @@ itmBaseInfo src/Dodge/Item/Info.hs 30;" f itmEquipSiteInfo src/Dodge/Item/Info.hs 249;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 229;" f -jShape src/Dodge/Placement/Instance/LightSource.hs 69;" f +jShape src/Dodge/Placement/Instance/LightSource.hs 70;" f joinItemsInList src/Dodge/Item/Grammar.hs 211;" f joystick src/Dodge/Item/Scope.hs 158;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f @@ -3942,11 +3942,11 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f -lChasm src/Dodge/Room/Tutorial.hs 159;" f +lChasm src/Dodge/Room/Tutorial.hs 138;" 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 -lShape src/Dodge/Placement/Instance/LightSource.hs 57;" f +lShape src/Dodge/Placement/Instance/LightSource.hs 58;" f lamp src/Dodge/Creature/Lamp.hs 18;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f lasCenRunClose' src/Dodge/Room/LasTurret.hs 309;" f @@ -3983,7 +3983,7 @@ leftRightCombine src/Dodge/Item/Grammar.hs 201;" f leftWristPQ src/Dodge/Creature/HandPos.hs 82;" f legsSPic src/Dodge/Item/Draw/SPic.hs 447;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f +liShape src/Dodge/Placement/Instance/LightSource.hs 83;" f light src/Color.hs 131;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f @@ -4177,9 +4177,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 188;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 210;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 269;" f +midChasm src/Dodge/Room/Tutorial.hs 167;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 189;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 248;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4193,7 +4193,7 @@ miniGunX src/Dodge/Item/Held/Cane.hs 33;" f miniGunXPict src/Dodge/Item/Draw/SPic.hs 374;" f miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 366;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 653;" f -miniTree2 src/Dodge/Room/Room.hs 123;" f +miniTree2 src/Dodge/Room/Room.hs 124;" f minimumOn src/FoldlHelp.hs 14;" f mirrorXAxis src/Geometry/Polygon.hs 76;" f mirrorxz src/Picture/Base.hs 330;" f @@ -4208,11 +4208,12 @@ mkDustCloudLike src/Shader/Poke/Cloud.hs 27;" f mkGraphFromEdges src/GraphHelp.hs 4;" f mkNode src/Dodge/Graph.hs 29;" f mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f -mntLS src/Dodge/Placement/Instance/LightSource.hs 106;" f -mntLSCond src/Dodge/Placement/Instance/LightSource.hs 129;" f -mntLSOn src/Dodge/Placement/Instance/LightSource.hs 34;" f -mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 146;" f -mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 151;" f +mntLS src/Dodge/Placement/Instance/LightSource.hs 107;" f +mntLSCond src/Dodge/Placement/Instance/LightSource.hs 130;" f +mntLSOn src/Dodge/Placement/Instance/LightSource.hs 35;" f +mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 147;" f +mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 155;" f +mntLightLnkShape src/Dodge/Placement/Instance/LightSource.hs 152;" f modTo src/Geometry/Zone.hs 18;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f @@ -4276,6 +4277,7 @@ noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 23;" f nodesNear src/Dodge/Path.hs 75;" f +nonCornerLinks src/Dodge/Room/SensorDoor.hs 55;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f normalTo8 src/Shader/Poke.hs 466;" f normalizeAngle src/Geometry/Vector.hs 128;" f @@ -4350,7 +4352,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 554;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 531;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4381,7 +4383,7 @@ pincerP'' src/Dodge/Creature/Boid.hs 106;" f pincerP''' src/Dodge/Creature/Boid.hs 77;" f pipe src/Dodge/Item/Craftable.hs 29;" f pistol src/Dodge/Item/Held/Stick.hs 18;" f -pistolerRoom src/Dodge/Room/Room.hs 344;" f +pistolerRoom src/Dodge/Room/Room.hs 345;" f pjRemoteSetDirection src/Dodge/Projectile/Update.hs 196;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f @@ -4455,8 +4457,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 318;" f -polyChasmC src/Dodge/Room/Tutorial.hs 330;" f +polyChasm src/Dodge/Room/Tutorial.hs 297;" f +polyChasmC src/Dodge/Room/Tutorial.hs 309;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4543,7 +4545,7 @@ putDoor src/Dodge/Room/Airlock.hs 114;" 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 60;" f -putLamp src/Dodge/Placement/Instance/LightSource.hs 203;" f +putLamp src/Dodge/Placement/Instance/LightSource.hs 207;" 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 98;" f @@ -4561,8 +4563,8 @@ qID src/Quaternion.hs 58;" f qToAng src/Quaternion.hs 55;" f qToV2 src/Quaternion.hs 52;" f qToV3 src/Quaternion.hs 49;" f -quarterRoomSquare src/Dodge/Room/Procedural.hs 193;" f -quarterRoomTri src/Dodge/Room/Procedural.hs 157;" f +quarterRoomSquare src/Dodge/Room/Procedural.hs 194;" f +quarterRoomTri src/Dodge/Room/Procedural.hs 158;" f quitCommand src/Dodge/Terminal.hs 106;" f qz src/Quaternion.hs 67;" f rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f @@ -4594,8 +4596,8 @@ randSparkExtraVel src/Dodge/Spark.hs 93;" f randWallReflect src/Dodge/Update.hs 702;" f randomChallenges src/Dodge/Room/Start.hs 64;" f randomCompass src/Dodge/Layout.hs 60;" f -randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" f -randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 258;" f +randomFourCornerRoom src/Dodge/Room/Procedural.hs 247;" f +randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 259;" f randomLightPositions src/Dodge/Room/Modify/Girder.hs 152;" f randomMediumRoom src/Dodge/Room/Boss.hs 70;" f randomPath src/TreeHelp.hs 145;" f @@ -4706,15 +4708,15 @@ rmInLinks src/Dodge/RoomLink.hs 153;" f rmInvItem src/Dodge/Inventory.hs 74;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f rmOutLinks src/Dodge/RoomLink.hs 153;" f -roomC src/Dodge/Room/Room.hs 50;" f -roomCCrits src/Dodge/Room/Room.hs 285;" f -roomCenterPillar src/Dodge/Room/Room.hs 136;" f +roomC src/Dodge/Room/Room.hs 51;" f +roomCCrits src/Dodge/Room/Room.hs 286;" f +roomCenterPillar src/Dodge/Room/Room.hs 137;" f roomCritLS src/Dodge/Room/RunPast.hs 24;" f roomCross src/Dodge/Room/Boss.hs 79;" f roomGlassOctogon src/Dodge/Room/Boss.hs 22;" f -roomMiniIntro src/Dodge/Room/Room.hs 131;" f +roomMiniIntro src/Dodge/Room/Room.hs 132;" f roomNgon src/Dodge/Room/Ngon.hs 16;" f -roomPadCut src/Dodge/Room/Room.hs 71;" f +roomPadCut src/Dodge/Room/Room.hs 72;" f roomPillars src/Dodge/Room/Pillar.hs 106;" f roomPillarsContaining src/Dodge/Room/Containing.hs 39;" f roomPillarsPassage src/Dodge/Room/Pillar.hs 93;" f @@ -4825,15 +4827,15 @@ selSecSelSize src/Dodge/SelectionSections.hs 143;" f selSecYint src/Dodge/SelectionSections.hs 152;" f selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f -sensAboveDoor src/Dodge/Room/SensorDoor.hs 64;" f -sensInsideDoor src/Dodge/Room/SensorDoor.hs 73;" f +sensAboveDoor src/Dodge/Room/SensorDoor.hs 70;" f +sensInsideDoor src/Dodge/Room/SensorDoor.hs 79;" f senseDamage src/Dodge/Machine/Update.hs 264;" f senseDamage' src/Dodge/Wall/Damage.hs 61;" f sensorReqToString src/Dodge/Machine/Update.hs 242;" f -sensorRoom src/Dodge/Room/SensorDoor.hs 31;" f -sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 55;" f +sensorRoom src/Dodge/Room/SensorDoor.hs 29;" f +sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 61;" f sensorSPic src/Dodge/Machine/Draw.hs 99;" f -sensorTut src/Dodge/Room/Tutorial.hs 498;" f +sensorTut src/Dodge/Room/Tutorial.hs 475;" 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 @@ -4868,7 +4870,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 107;" f +setTreeInts src/Dodge/Room/Tutorial.hs 87;" f setViewDistance src/Dodge/Update/Camera.hs 245;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f @@ -4930,10 +4932,10 @@ shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootTeslaArc src/Dodge/HeldUse.hs 1203;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f shootTractorBeam src/Dodge/HeldUse.hs 831;" f -shootersRoom src/Dodge/Room/Room.hs 338;" f -shootersRoom' src/Dodge/Room/Room.hs 305;" f -shootersRoom1 src/Dodge/Room/Room.hs 328;" f -shootingRange src/Dodge/Room/Room.hs 355;" f +shootersRoom src/Dodge/Room/Room.hs 339;" f +shootersRoom' src/Dodge/Room/Room.hs 306;" f +shootersRoom1 src/Dodge/Room/Room.hs 329;" f +shootingRange src/Dodge/Room/Room.hs 356;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 527;" f @@ -5021,17 +5023,17 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f spaceAction src/Dodge/Update/Input/InGame.hs 534;" f -spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 176;" f -spanColLightI src/Dodge/Placement/Instance/LightSource.hs 169;" f -spanLS src/Dodge/Placement/Instance/LightSource.hs 161;" f -spanLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f -spanLightY src/Dodge/Placement/Instance/LightSource.hs 187;" f +spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 180;" f +spanColLightI src/Dodge/Placement/Instance/LightSource.hs 173;" f +spanLS src/Dodge/Placement/Instance/LightSource.hs 165;" f +spanLightI src/Dodge/Placement/Instance/LightSource.hs 187;" f +spanLightY src/Dodge/Placement/Instance/LightSource.hs 191;" f sparkDam src/Dodge/Spark.hs 37;" f sparkRandDir src/Dodge/Spark.hs 117;" f sparkToDamage src/Dodge/Spark.hs 40;" f spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 54;" f -spawnerRoom src/Dodge/Room/Room.hs 383;" f +spawnerRoom src/Dodge/Room/Room.hs 384;" f speedLegs src/Dodge/Item/Equipment.hs 74;" f splashMenu src/Dodge/Menu.hs 31;" f splashMenuOptions src/Dodge/Menu.hs 36;" f @@ -5048,8 +5050,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 239;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 254;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 218;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 233;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f @@ -5216,7 +5218,7 @@ titleOptionsNoWrite src/Dodge/Menu.hs 107;" f tlDoEffect src/Dodge/Terminal.hs 115;" f tlSetStatus src/Dodge/Terminal.hs 112;" f tmDistributeAmmo src/Dodge/WorldEffect.hs 119;" f -tmDistributeLines src/Dodge/Room/Room.hs 465;" f +tmDistributeLines src/Dodge/Room/Room.hs 466;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 54;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 136;" f @@ -5317,13 +5319,13 @@ tryThrust src/Dodge/Projectile/Update.hs 126;" f tryUseParent src/Dodge/Creature/State.hs 145;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f -tutAnoTree src/Dodge/Room/Tutorial.hs 51;" f -tutDrop src/Dodge/Room/Tutorial.hs 112;" f -tutHub src/Dodge/Room/Tutorial.hs 394;" f -tutLight src/Dodge/Room/Tutorial.hs 362;" f -tutRezBox src/Dodge/Room/Tutorial.hs 509;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 52;" f +tutDrop src/Dodge/Room/Tutorial.hs 92;" f +tutHub src/Dodge/Room/Tutorial.hs 373;" f +tutLight src/Dodge/Room/Tutorial.hs 341;" f +tutRezBox src/Dodge/Room/Tutorial.hs 486;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 534;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 511;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5521,7 +5523,7 @@ vCen3 src/Geometry/Vector3D.hs 115;" f vInverse src/Geometry/Vector.hs 154;" f vNormal src/Geometry/Vector.hs 149;" f vNormaly src/Geometry/Vector3D.hs 72;" f -vShape src/Dodge/Placement/Instance/LightSource.hs 96;" f +vShape src/Dodge/Placement/Instance/LightSource.hs 97;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f @@ -5564,12 +5566,12 @@ wasdMovement src/Dodge/Creature/YourControl.hs 169;" f wasdWithAiming src/Dodge/Creature/YourControl.hs 126;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 185;" f -weaponBehindPillar src/Dodge/Room/Room.hs 196;" f -weaponBetweenPillars src/Dodge/Room/Room.hs 212;" f -weaponEmptyRoom src/Dodge/Room/Room.hs 157;" f -weaponLongCorridor src/Dodge/Room/Room.hs 237;" f -weaponRoom src/Dodge/Room/Room.hs 274;" f -weaponUnderCrits src/Dodge/Room/Room.hs 175;" f +weaponBehindPillar src/Dodge/Room/Room.hs 197;" f +weaponBetweenPillars src/Dodge/Room/Room.hs 213;" f +weaponEmptyRoom src/Dodge/Room/Room.hs 158;" f +weaponLongCorridor src/Dodge/Room/Room.hs 238;" f +weaponRoom src/Dodge/Room/Room.hs 275;" f +weaponUnderCrits src/Dodge/Room/Room.hs 176;" f wedgeGeom src/Dodge/Base.hs 42;" f wedgeOfThickness src/Dodge/Picture.hs 9;" f whirS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 639;" f @@ -5644,7 +5646,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 172;" f +zChasm src/Dodge/Room/Tutorial.hs 151;" 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