From c2c139c8aa4756c3fdc8d953710556bd04b62ce0 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 25 Feb 2026 20:00:37 +0000 Subject: [PATCH] Work on tutorial rooms with laser turret --- src/Dodge/Room/LasTurret.hs | 72 +++++++++++++------ src/Dodge/Room/Ngon.hs | 1 + src/Dodge/Room/Tutorial.hs | 18 +++-- tags | 136 +++++++++++++++++++----------------- 4 files changed, 133 insertions(+), 94 deletions(-) diff --git a/src/Dodge/Room/LasTurret.hs b/src/Dodge/Room/LasTurret.hs index aeb9e2cac..fee80eac0 100644 --- a/src/Dodge/Room/LasTurret.hs +++ b/src/Dodge/Room/LasTurret.hs @@ -8,9 +8,9 @@ module Dodge.Room.LasTurret ( keyCardRoomRunPast, lasSensorTurretTest, healthTest, + lasCenRunClose, ) where ---import Dodge.Item.Held.Cane import qualified Data.Set as S import Dodge.Cleat import Dodge.Data.GenWorld @@ -31,10 +31,11 @@ import Geometry import LensHelp import RandomHelp -cenLasTur :: RandomGen g => State g Room +cenLasTur :: (RandomGen g) => State g Room cenLasTur = do thelight <- mntLightLnkCond $ rprBool $ const . isInLnk - roomNgon 8 200 <&> rmPmnts + roomNgon 8 200 + <&> rmPmnts .~ [ putLasTurret 0.02 , heightWallPS (resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 100 <&> (,S.singleton UsedPosLow))) @@ -49,11 +50,11 @@ lightSensInsideDoor :: Int -> Room -> Room lightSensInsideDoor i rm = rm & rmPmnts - .++~ [ psPt atFstLnkOut (PutForeground $ floorWire (V2 20 0) (V2 20 (-100))) - , psPt atFstLnkOut (PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))) - , psPt atFstLnkOut (PutForeground $ verticalWire (V2 20 0) 0 80) - , sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i - ] + .++~ [ psPt atFstLnkOut (PutForeground $ floorWire (V2 20 0) (V2 20 (-100))) + , psPt atFstLnkOut (PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))) + , psPt atFstLnkOut (PutForeground $ verticalWire (V2 20 0) 0 80) + , sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i + ] -- & rmOutPmnt . at i ?~ sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward 100) @@ -61,18 +62,18 @@ lightSensByDoor :: Int -> Room -> Room lightSensByDoor i rm = rm & rmPmnts - .++~ [ psPt atFstLnkOut $ PutForeground $ verticalWire (V2 20 0) 0 80 - , heightWallPS (atNthLnkOutShiftInward 1 100) 30 covershape - , heightWallPS (atFstLnkOutShiftInward 100) 30 covershape - , sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) & plExternalID ?~ i - ] + .++~ [ psPt atFstLnkOut $ PutForeground $ verticalWire (V2 20 0) 0 80 + , heightWallPS (atNthLnkOutShiftInward 1 100) 30 covershape + , heightWallPS (atFstLnkOutShiftInward 100) 30 covershape + , sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) & plExternalID ?~ i + ] where -- & rmOutPmnt . at i ?~ sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) covershape = rectNSWE 10 (-10) (-20) 20 sensorshift (p, a) = ((p +.+ rotateV a (V2 60 (-20)), a), S.singleton UsedPosLow) -keyCardRoomRunPast :: RandomGen g => Int -> Int -> State g (MetaTree Room String) +keyCardRoomRunPast :: (RandomGen g) => Int -> Int -> State g (MetaTree Room String) keyCardRoomRunPast keyid rmid = do cenroom <- shuffleLinks . keyCardAnalyserByDoor keyid rmid =<< roomNgon 6 200 let doorroom = triggerDoorRoom rmid @@ -101,14 +102,15 @@ analyserByNthLink n proxreq i = ) ) (atNthLnkOutShiftBy n sensorshift) - & plExternalID ?~ i + & plExternalID + ?~ i where sensorshift (p, a) = ((p +.+ rotateV a (V2 (-30) (-10)), a), S.singleton UsedPosLow) analyserByDoor :: ProximityRequirement -> Int -> Room -> Room analyserByDoor pr i = rmPmnts .:~ analyserByNthLink 0 pr i -healthTest :: RandomGen g => Int -> State g (Tree Room) +healthTest :: (RandomGen g) => Int -> State g (Tree Room) healthTest n = do cenroom <- shuffleLinks . healthAnalyserByDoor n =<< roomNgon 8 200 return $ @@ -120,14 +122,14 @@ healthTest n = do , cleatOnward door ] -lasSensorTurretTest :: RandomGen g => Int -> State g (MetaTree Room String) +lasSensorTurretTest :: (RandomGen g) => Int -> State g (MetaTree Room String) lasSensorTurretTest n = do cenroom <- shuffleLinks . lightSensInsideDoor n =<< cenLasTur rToOnward "lasSensorTurretTest" $ treePost [door, cenroom, triggerDoorRoom n, cleatOnward door] -lasCenSensEdge :: RandomGen g => Int -> State g (MetaTree Room String) +lasCenSensEdge :: (RandomGen g) => Int -> State g (MetaTree Room String) lasCenSensEdge n = do cenroom <- shuffleLinks . lightSensByDoor n =<< cenLasTur let doorroom = triggerDoorRoom n @@ -139,7 +141,35 @@ lasCenSensEdge n = do , treePost [door, cleatLabel 0 corridor] ] -lasTunnel :: RandomGen g => Float -> State g Room +lasCenRunClose :: (RandomGen g) => State g (MetaTree Room String) +lasCenRunClose = do + thelight <- mntLightLnkCond $ rprBool $ const . isInLnk + thelight1 <- mntLightLnkCond $ rprBool $ const . isOutLnk + r <- + roomNgon 8 250 + <&> rmPmnts + .~ [ putLasTurret 0.02 + , inlinkwall 70 (rectNSWE 10 (-10) (-10) 30) + , inlinkwall 125 (rectNSWE 55 (-55) (-10) 10) + , inlinkwall 180 (rectNSWE 10 (-10) (-30) 10) + , outlinkwall 70 (rectNSWE 10 (-10) (-30) 10) + , outlinkwall 125 (rectNSWE 55 (-55) (-10) 10) + , outlinkwall 180 (rectNSWE 10 (-10) (-10) 30) + , thelight + , thelight1 + ] +-- <&> rmLinks %~ setOutLinksByType (PolyEdge 7) +-- <&> rmLinks %~ tail +-- <&> rmLinks %~ setOutLinks (const False) + rToOnward "lasCenRunClose" $ return $ cleatOnward r + where + linkwall f x = heightWallPS + (resetPLUse $ rprBoolShift (const . f) (shiftInBy x <&> (,S.singleton UsedPosLow))) + 30 + inlinkwall = linkwall isInLnk + outlinkwall = linkwall isOutLnk + +lasTunnel :: (RandomGen g) => Float -> State g Room lasTunnel y = do extraPlmnts <- takeOne @@ -166,7 +196,7 @@ lasTunnel y = do ] , _rmPmnts = [ putLasTurret 0.005 & plSpot .~ PS (V2 10 (240 + y)) (1.5 * pi) - , --, midWall (rectNSEW 65 40 0 25) + , -- , midWall (rectNSEW 65 40 0 25) mntLS vShape (V2 60 145) (V3 40 125 90) , mntLS vShape (V2 (-40) 145) (V3 (-20) 125 90) ] @@ -180,7 +210,7 @@ lasTunnel y = do ] -- a y value of 400 is probably "unrunnable" -lasTunnelRunPast :: RandomGen g => Float -> State g (MetaTree Room String) +lasTunnelRunPast :: (RandomGen g) => Float -> State g (MetaTree Room String) lasTunnelRunPast y = do r <- lasTunnel y r1 <- takeOne [door, corridor] diff --git a/src/Dodge/Room/Ngon.hs b/src/Dodge/Room/Ngon.hs index 265247359..cd0afe652 100644 --- a/src/Dodge/Room/Ngon.hs +++ b/src/Dodge/Room/Ngon.hs @@ -24,6 +24,7 @@ roomNgon n x = do , _rmPmnts = [thelight] , _rmBound = [poly] , _rmFloor = Tiled [makeTileFromPoly poly 2] + --, _rmFloor = InheritFloor , _rmName = show n ++ "gon" , _rmPos = poss } diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 278d2defa..ec303fe6f 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -54,14 +54,18 @@ tutAnoTree = do [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) + , lasCenRunClose +-- , passthroughLockKeyLists lockRoomKeyItems itemRooms , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) - , passthroughLockKeyLists - [(sensorRoomRunPast ElectricSensor, takeOne - [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , - HELD SPARKGUN])] - itemRooms - , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) - , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +-- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +-- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +-- , passthroughLockKeyLists +-- [(sensorRoomRunPast ElectricSensor, takeOne +-- [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , +-- HELD SPARKGUN])] +-- itemRooms +-- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +-- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) , tToBTree "sdr" . return . cleatOnward <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000) -- , return $ tToBTree "cor" $ return $ cleatOnward corridor diff --git a/tags b/tags index e94a4e382..afd98829b 100644 --- a/tags +++ b/tags @@ -2018,6 +2018,7 @@ _mcoTermStatus src/Dodge/Data/Input.hs 27;" f _mcsAmount src/Dodge/Data/Machine.hs 48;" f _mcsType src/Dodge/Data/Machine.hs 48;" f _mctTurret src/Dodge/Data/Machine.hs 47;" f +_mctTurretStun src/Dodge/Data/Machine.hs 47;" f _mdBool src/Dodge/Data/Modification.hs 19;" f _mdExternalID src/Dodge/Data/Modification.hs 15;" f _mdExternalID1 src/Dodge/Data/Modification.hs 23;" f @@ -2579,10 +2580,10 @@ alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f ammoMagInfo src/Dodge/Item/Info.hs 49;" f ammoMagSPic src/Dodge/Item/Draw/SPic.hs 128;" f amr src/Dodge/Item/Held/Rod.hs 34;" f -anRoom src/Dodge/Floor.hs 117;" f +anRoom src/Dodge/Floor.hs 116;" f analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f -analyserByDoor src/Dodge/Room/LasTurret.hs 108;" f -analyserByNthLink src/Dodge/Room/LasTurret.hs 93;" f +analyserByDoor src/Dodge/Room/LasTurret.hs 110;" f +analyserByNthLink src/Dodge/Room/LasTurret.hs 94;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f angleBetween src/Geometry.hs 158;" f angleVV src/Geometry/Vector.hs 58;" f @@ -2765,7 +2766,7 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 248;" 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 133;" f +cChasm src/Dodge/Room/Tutorial.hs 148;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2801,8 +2802,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 294;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 265;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 309;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 280;" 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 @@ -3042,7 +3043,7 @@ dShadCol src/Dodge/Render/List.hs 208;" f damMatSideEffect src/Dodge/Material/Damage.hs 20;" f damThingHitWith src/Dodge/Damage.hs 72;" f damToExpBarrel src/Dodge/Barreloid.hs 53;" f -damageBlock src/Dodge/Wall/Damage.hs 59;" f +damageBlock src/Dodge/Wall/Damage.hs 120;" f damageCodeCommand src/Dodge/Terminal.hs 67;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f @@ -3051,16 +3052,17 @@ damageDirection src/Dodge/Damage.hs 35;" f damageDirt src/Dodge/Material/Damage.hs 130;" f damageFlesh src/Dodge/Material/Damage.hs 97;" f damageGlass src/Dodge/Material/Damage.hs 156;" f -damageGlassBlock src/Dodge/Wall/Damage.hs 64;" f +damageGlassBlock src/Dodge/Wall/Damage.hs 125;" f damageHP src/Dodge/Creature/Damage.hs 37;" f damageInCircle src/Dodge/Damage.hs 61;" f -damageMachine src/Dodge/Wall/Damage.hs 45;" f +damageMachine src/Dodge/Wall/Damage.hs 46;" f damageMetal src/Dodge/Material/Damage.hs 65;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 13;" f damageStone src/Dodge/Material/Damage.hs 33;" f damageThingHit src/Dodge/Bullet.hs 180;" f -damageTypeThreshold src/Dodge/Machine/Update.hs 132;" f -damageWall src/Dodge/Wall/Damage.hs 30;" f +damageTypeThreshold src/Dodge/Machine/Update.hs 139;" f +damageTypeThreshold' src/Dodge/Wall/Damage.hs 84;" f +damageWall src/Dodge/Wall/Damage.hs 31;" f damsToExpBarrel src/Dodge/Barreloid.hs 50;" f dark src/Color.hs 135;" f darkenBackground src/Dodge/Render/MenuScreen.hs 46;" f @@ -3158,16 +3160,16 @@ deleteWallIDs src/Dodge/Wall/Delete.hs 27;" f denormalEdges src/Polyhedra.hs 128;" f destroyAllInvItems src/Dodge/Inventory.hs 53;" f destroyBlock src/Dodge/Block.hs 17;" f -destroyDoor src/Dodge/Wall/Damage.hs 84;" f +destroyDoor src/Dodge/Wall/Damage.hs 145;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyItem src/Dodge/Inventory.hs 62;" f destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 13;" f -destroyMachine' src/Dodge/Wall/Damage.hs 50;" f +destroyMachine' src/Dodge/Wall/Damage.hs 111;" f destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 22;" f -destroyMount src/Dodge/Wall/Damage.hs 105;" f -destroyMounts src/Dodge/Wall/Damage.hs 102;" f +destroyMount src/Dodge/Wall/Damage.hs 166;" f +destroyMounts src/Dodge/Wall/Damage.hs 163;" f destroyProjectile src/Dodge/Projectile/Update.hs 112;" f detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f @@ -3545,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 79;" f +foldMTRS src/Dodge/Room/Tutorial.hs 94;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3607,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 446;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 433;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 461;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 448;" f getDebugMouseOver src/Dodge/Update.hs 424;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3625,7 +3627,7 @@ getNodePos src/Dodge/Path.hs 34;" f getPJStabiliser src/Dodge/HeldUse.hs 1246;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 429;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 444;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3710,8 +3712,8 @@ headLampShape src/Dodge/Item/Draw/SPic.hs 423;" f headMap src/Dodge/DoubleTree.hs 249;" f headPQ src/Dodge/Creature/HandPos.hs 116;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f -healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 90;" f -healthTest src/Dodge/Room/LasTurret.hs 111;" f +healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 91;" f +healthTest src/Dodge/Room/LasTurret.hs 113;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f heldAimStance src/Dodge/Item/AimStance.hs 24;" f heldAimZoom src/Dodge/Update/Camera.hs 157;" f @@ -3760,7 +3762,7 @@ initTexture2DArray src/Shader/AuxAddition.hs 31;" f initTexture2DArrayData src/Shader/AuxAddition.hs 46;" f initTexture2DArraySquare src/Shader/AuxAddition.hs 16;" f initWallZoning src/Dodge/Wall/Zone.hs 12;" f -initialRoomTree src/Dodge/Floor.hs 24;" f +initialRoomTree src/Dodge/Floor.hs 23;" f initialWorld src/Dodge/Initialisation.hs 13;" f initialisePlaying src/Sound.hs 78;" f initializeGLState src/Preload/Render.hs 255;" f @@ -3780,7 +3782,7 @@ insertWall src/Dodge/Placement/PlaceSpot/Block.hs 134;" f insertWallInZones src/Dodge/Wall/Zone.hs 20;" f insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 131;" f insertWithNewKeys src/IntMapHelp.hs 71;" f -intAnno src/Dodge/Floor.hs 111;" f +intAnno src/Dodge/Floor.hs 110;" f interactWithCloseObj src/Dodge/SelectedClose.hs 9;" f interpWith src/Dodge/Creature/Boid.hs 13;" f intersectCircLine src/Geometry/Intersect.hs 354;" f @@ -3843,7 +3845,6 @@ isAnimate src/Dodge/Creature/Test.hs 134;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 67;" f -isElectrical src/Dodge/Machine/Update.hs 106;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 176;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 198;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f @@ -3935,25 +3936,26 @@ justify src/Justify.hs 9;" f k src/ShortShow.hs 48;" f k' src/ShortShow.hs 48;" f keyCard src/Dodge/Item/Held/Utility.hs 20;" f -keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 87;" f -keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 75;" f +keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 88;" f +keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 76;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 439;" f keyholeCorridor src/Dodge/Room/Corridor.hs 44;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f -lChasm src/Dodge/Room/Tutorial.hs 142;" f +lChasm src/Dodge/Room/Tutorial.hs 157;" 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 54;" f lamp src/Dodge/Creature/Lamp.hs 18;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 116;" f -lasCenSensEdge src/Dodge/Room/LasTurret.hs 130;" f +lasCenRunClose src/Dodge/Room/LasTurret.hs 144;" f +lasCenSensEdge src/Dodge/Room/LasTurret.hs 132;" f lasGunPic src/Dodge/Item/Draw/SPic.hs 414;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f -lasSensorTurretTest src/Dodge/Room/LasTurret.hs 123;" f -lasTunnel src/Dodge/Room/LasTurret.hs 142;" f -lasTunnelRunPast src/Dodge/Room/LasTurret.hs 183;" f +lasSensorTurretTest src/Dodge/Room/LasTurret.hs 125;" f +lasTunnel src/Dodge/Room/LasTurret.hs 159;" f +lasTunnelRunPast src/Dodge/Room/LasTurret.hs 200;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f lastMap src/Dodge/DoubleTree.hs 253;" f @@ -3987,8 +3989,8 @@ legsSPic src/Dodge/Item/Draw/SPic.hs 448;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 79;" f light src/Color.hs 131;" f -lightSensByDoor src/Dodge/Room/LasTurret.hs 60;" f -lightSensInsideDoor src/Dodge/Room/LasTurret.hs 48;" f +lightSensByDoor src/Dodge/Room/LasTurret.hs 61;" f +lightSensInsideDoor src/Dodge/Room/LasTurret.hs 49;" f lightSensor src/Dodge/Placement/Instance/Sensor.hs 26;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f lightx4 src/Color.hs 155;" f @@ -4131,32 +4133,32 @@ maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f -maybeDestroyBlock src/Dodge/Wall/Damage.hs 74;" f -maybeDestroyDoor src/Dodge/Wall/Damage.hs 79;" f +maybeDestroyBlock src/Dodge/Wall/Damage.hs 135;" f +maybeDestroyDoor src/Dodge/Wall/Damage.hs 140;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 568;" f maybeOpenConsole src/Dodge/Update.hs 134;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 118;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f -mcApplyDamage src/Dodge/Machine/Update.hs 167;" f -mcBackgroundSound src/Dodge/Machine/Update.hs 156;" f +mcBackgroundSound src/Dodge/Machine/Update.hs 163;" f mcColor src/Dodge/Machine/Draw.hs 83;" f -mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 120;" f +mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 127;" f mcDamSensorUpdate src/Dodge/Machine/Update.hs 174;" f +mcDamSensorUpdate' src/Dodge/Wall/Damage.hs 57;" f mcKillBut src/Dodge/Machine/Destroy.hs 38;" f mcKillTerm src/Dodge/Machine/Destroy.hs 30;" f mcNoItemsTest src/Dodge/Machine/Update.hs 182;" f -mcPlaySound src/Dodge/Machine/Update.hs 140;" f -mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 126;" f +mcPlaySound src/Dodge/Machine/Update.hs 147;" f +mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 133;" f mcProxSensorUpdate src/Dodge/Machine/Update.hs 177;" f mcProxTest src/Dodge/Machine/Update.hs 258;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 219;" f mcSPic src/Dodge/Render/ShapePicture.hs 163;" f mcShootAuto src/Dodge/HeldUse.hs 1164;" f mcShootLaser src/Dodge/HeldUse.hs 1157;" f -mcTypeUpdate src/Dodge/Machine/Update.hs 33;" f +mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f mcUseHeld src/Dodge/HeldUse.hs 1081;" f -mcUseItem src/Dodge/Machine/Update.hs 111;" f +mcUseItem src/Dodge/Machine/Update.hs 118;" f megaBattery src/Dodge/Item/Ammo.hs 53;" f megaShellMag src/Dodge/Item/Ammo.hs 43;" f megaTinMag src/Dodge/Item/Ammo.hs 20;" f @@ -4185,9 +4187,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 165;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 184;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 238;" f +midChasm src/Dodge/Room/Tutorial.hs 180;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 199;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 253;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4357,7 +4359,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/Floor.hs 120;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 523;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4461,8 +4463,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 278;" f -polyChasmC src/Dodge/Room/Tutorial.hs 287;" f +polyChasm src/Dodge/Room/Tutorial.hs 293;" f +polyChasmC src/Dodge/Room/Tutorial.hs 302;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4653,7 +4655,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f removeAmmoFromMag src/Dodge/HeldUse.hs 905;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 344;" f +removeLights src/Dodge/Room/Tutorial.hs 359;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 71;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f @@ -4834,12 +4836,14 @@ semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f senseDamage src/Dodge/Machine/Update.hs 274;" f +senseDamage' src/Dodge/Wall/Damage.hs 60;" f sensorReqToString src/Dodge/Machine/Update.hs 252;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorSPic src/Dodge/Machine/Draw.hs 99;" f -sensorTut src/Dodge/Room/Tutorial.hs 455;" f +sensorTut src/Dodge/Room/Tutorial.hs 470;" f sensorTypeDamages src/Dodge/Machine/Update.hs 298;" f +sensorTypeDamages src/Dodge/Wall/Damage.hs 91;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 49;" f @@ -4864,7 +4868,7 @@ setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 77;" f setOutLinksPD src/Dodge/RoomLink.hs 97;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 86;" f +setRoomInt src/Dodge/Room/Tutorial.hs 101;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 342;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" f setShaderSource src/Shader/Compile.hs 121;" f @@ -4873,7 +4877,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 93;" f +setTreeInts src/Dodge/Room/Tutorial.hs 108;" f setViewDistance src/Dodge/Update/Camera.hs 246;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f @@ -5053,8 +5057,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 208;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 223;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 223;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 238;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f @@ -5099,7 +5103,7 @@ stone4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 543;" f stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 657;" f stopAllSounds src/Sound.hs 127;" f stopBulletAt src/Dodge/Bullet.hs 200;" f -stopPushing src/Dodge/Wall/Damage.hs 110;" f +stopPushing src/Dodge/Wall/Damage.hs 171;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f storageShape src/Dodge/Machine/Draw.hs 31;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f @@ -5158,7 +5162,7 @@ terminalLDP src/Dodge/ListDisplayParams.hs 48;" f terminalReturnEffect src/Dodge/Terminal.hs 279;" f terminalReturnLocal src/Dodge/Terminal.hs 283;" f terminalSPic src/Dodge/Machine/Draw.hs 47;" f -terminalScreenGlow src/Dodge/Machine/Update.hs 44;" f +terminalScreenGlow src/Dodge/Machine/Update.hs 43;" f terminalShape src/Dodge/Machine/Draw.hs 50;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 127;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f @@ -5319,13 +5323,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 48;" f -tutDrop src/Dodge/Room/Tutorial.hs 98;" f -tutHub src/Dodge/Room/Tutorial.hs 351;" f -tutLight src/Dodge/Room/Tutorial.hs 316;" f -tutRezBox src/Dodge/Room/Tutorial.hs 466;" f -tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 489;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 51;" f +tutDrop src/Dodge/Room/Tutorial.hs 113;" f +tutHub src/Dodge/Room/Tutorial.hs 366;" f +tutLight src/Dodge/Room/Tutorial.hs 331;" f +tutRezBox src/Dodge/Room/Tutorial.hs 481;" f +tutRoomTree src/Dodge/Floor.hs 20;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 504;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5424,7 +5428,7 @@ updateLeftParentSF src/Dodge/Item/Grammar.hs 170;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLivingCreature src/Dodge/Creature/Update.hs 47;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 447;" f -updateMachine src/Dodge/Machine/Update.hs 25;" f +updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 361;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 204;" f updateMouseContext src/Dodge/Update.hs 374;" f @@ -5466,7 +5470,7 @@ updateTeslaArc src/Dodge/Update.hs 618;" f updateTeslaArcs src/Dodge/Update.hs 615;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f updateTractorBeams src/Dodge/Update.hs 687;" f -updateTurret src/Dodge/Machine/Update.hs 56;" f +updateTurret src/Dodge/Machine/Update.hs 55;" f updateUniverse src/Dodge/Update.hs 82;" f updateUniverseFirst src/Dodge/Update.hs 93;" f updateUniverseLast src/Dodge/Update.hs 144;" f @@ -5643,7 +5647,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 152;" f +zChasm src/Dodge/Room/Tutorial.hs 167;" 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