From b0d519c69d1ed9011020b3609ca0f6d3b8eaba75 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 24 Oct 2025 20:30:36 +0100 Subject: [PATCH] Improve some door placement --- src/Dodge/Block/Draw.hs | 13 --- src/Dodge/Data/Block.hs | 18 +--- src/Dodge/Data/GenWorld.hs | 2 +- src/Dodge/Placement/PlaceSpot.hs | 23 ++--- src/Dodge/Placement/PlaceSpot/Block.hs | 28 ++++-- src/Dodge/Placement/PlaceSpot/TriggerDoor.hs | 16 ++-- src/Dodge/Room/Airlock.hs | 3 +- src/Dodge/Room/Tutorial.hs | 5 +- tags | 99 +++++++++----------- 9 files changed, 92 insertions(+), 115 deletions(-) delete mode 100644 src/Dodge/Block/Draw.hs diff --git a/src/Dodge/Block/Draw.hs b/src/Dodge/Block/Draw.hs deleted file mode 100644 index e4c23846d..000000000 --- a/src/Dodge/Block/Draw.hs +++ /dev/null @@ -1,13 +0,0 @@ ---{-# LANGUAGE LambdaCase #-} -module Dodge.Block.Draw () where --- ---import Dodge.Data.Block ---import Shape ---import ShapePicture - ---drawBlock :: BlockDraw -> SPic ---drawBlock = \case --- BlockDrawMempty -> mempty ----- BlockDraws bds -> foldMap drawBlock bds ----- BlockDrawColHeightPoss col h ps -> noPic $ colorSH col (upperBox Medium Typical h ps) --- BlockDrawBlSh x -> noPic x diff --git a/src/Dodge/Data/Block.hs b/src/Dodge/Data/Block.hs index 9c70893b8..84e083936 100644 --- a/src/Dodge/Data/Block.hs +++ b/src/Dodge/Data/Block.hs @@ -22,27 +22,13 @@ data Block = Block , _blWallIDs :: IS.IntSet , _blHP :: Int , _blShadows :: [Int] -- a list of walls that are not shown when this block exists - , _blFootprint :: [Point2] -- TODO check whether this should be clockwise/anticlockwise + , _blFootprint :: [Point2] -- TODO check whether this should be clockwise/anticlockwise , _blPos :: Point2 , _blDir :: Float , _blHeight :: Float --- , _blDraw :: BlockDraw - , _blDraw :: Shape + , _blDraw :: Shape -- should probably make a data type for instances of these... } deriving (Eq, Ord, Show, Read) --Generic, Flat) ---data BlockDraw --- = BlockDrawMempty --- | BlockDrawBlSh Shape ----- | BlockDraws [BlockDraw] ----- | BlockDrawColHeightPoss Color Float [Point2] --- deriving (Eq, Ord, Show, Read) --Generic, Flat) --- ---data BlSh --- = BlShConst Shape --- deriving (Eq, Ord, Show, Read) --Generic, Flat) - makeLenses ''Block ---deriveJSON defaultOptions ''BlSh ---deriveJSON defaultOptions ''BlockDraw deriveJSON defaultOptions ''Block diff --git a/src/Dodge/Data/GenWorld.hs b/src/Dodge/Data/GenWorld.hs index 8828a2b38..cc51699d5 100644 --- a/src/Dodge/Data/GenWorld.hs +++ b/src/Dodge/Data/GenWorld.hs @@ -54,7 +54,7 @@ data PSType | PutWall {_pwPoly :: [Point2], _pwWall :: Wall} | PutSlideDr Bool Door Wall (S.Set EdgeObstacle) Float Point2 Point2 -- | PutDoor Color EdgeObstacle WdBl [(Point2, Point2)] - | PutDoor Bool (S.Set EdgeObstacle) WdBl Float Point2A Point2A -- [(Point2, Point2)] + | PutDoor Bool WdBl Float Point2A Point2A | RandPS (State StdGen PSType) | PutForeground ForegroundShape | PutWorldUpdate (Int -> PlacementSpot -> GenWorld -> GenWorld) diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index 3f1e32a3c..27fa5d363 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -6,6 +6,7 @@ -} module Dodge.Placement.PlaceSpot (placeSpot) where +import Dodge.Placement.PlaceSpot.Block import Control.Monad.State import Data.Bifunctor import Data.Foldable @@ -16,7 +17,6 @@ import Dodge.Base.NewID import Dodge.Data.GenWorld import Dodge.Default.Wall import Dodge.Path -import Dodge.Placement.PlaceSpot.Block import Dodge.Placement.PlaceSpot.TriggerDoor import Dodge.Placement.Shift import Dodge.ShiftPoint @@ -134,7 +134,7 @@ placeSpotID rid ps pt w = case pt of PutMachine pps mc mitm -> plMachine (map doShift pps) mc mitm p rot w PutLS ls -> plNewUpID (gwWorld . cWorld . lWorld . lightSources) lsID (mvLS p' rot ls) w RandPS _ -> error "RandPS should not be reachable here" --evaluateRandPS rid rgn ps w - PutDoor isauto eo f l p1 p2 -> plDoor isauto eo f l (pashift p1) (pashift p2) w + PutDoor isauto f l p1 p2 -> plDoor isauto f l (pashift p1) (pashift p2) w PutCoord cp -> plNewID (gwWorld . coordinates) (doShift cp) w PutSlideDr isauto wl dr eo off a b -> plSlideDoor isauto wl dr eo off (doShift a) (doShift b) w @@ -180,9 +180,9 @@ placeWallPoly qs wl w | otherwise = error "tried to place wall poly with too few points" addPane :: Wall -> World -> (Point2, Point2) -> World -addPane wl w l = - w & plNew (cWorld . lWorld . walls) wlID (wl & wlLine .~ l) - & uncurry (obstructPathsCrossing (S.fromList [WallObstacle WallNotAutoOpen])) l +addPane wl w l = insertWall (wl & wlLine .~ l & wlID .~ i) w + where + i = IM.newKey $ w ^. cWorld . lWorld . walls mvProp :: Point2 -> Float -> Prop -> Prop mvProp p a = (prRot +~ a) . (prPos %~ ((p +.+) . rotateV a)) @@ -211,7 +211,7 @@ plMachine :: plMachine wallpoly mc mitm p rot gw = ( mcid , gw & tolw . machines . at mcid ?~ themc - & tolw . walls %~ placeMachineWalls wallpoly mcid wlid + & gwWorld %~ placeMachineWalls wallpoly mcid wlid & tolw %~ maybe id placeturretitm mitm ) where @@ -227,15 +227,10 @@ plMachine wallpoly mc mitm p rot gw = itid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . items itm' = itm & itID .~ NInt itid & itLocation .~ OnTurret mcid --- TODO correctly remove/shift pathfinding lines (removePathsCrossing) -placeMachineWalls :: [Point2] -> Int -> Int -> IM.IntMap Wall -> IM.IntMap Wall -placeMachineWalls poly mcid wlid = flip (foldr f) $ zip [wlid ..] $ loopPairs poly +placeMachineWalls :: [Point2] -> Int -> Int -> World -> World +placeMachineWalls poly mcid = insertStructureWalls MachinePart baseWall poly mcid where - f (wid, l) = IM.insert wid baseWall{_wlID = wid, _wlLine = l} - baseWall = - defaultMachineWall - & wlStructure . wsMachine .~ mcid - & wlTouchThrough .~ True + baseWall = defaultMachineWall & wlStructure . wsMachine .~ mcid mvLS :: Point3 -> Float -> LightSource -> LightSource mvLS (V3 x y z) rot ls = ls & lsParam . lsPos .~ V3 x y z +.+.+ startPos diff --git a/src/Dodge/Placement/PlaceSpot/Block.hs b/src/Dodge/Placement/PlaceSpot/Block.hs index 9b414063e..ef30d042d 100644 --- a/src/Dodge/Placement/PlaceSpot/Block.hs +++ b/src/Dodge/Placement/PlaceSpot/Block.hs @@ -2,16 +2,18 @@ module Dodge.Placement.PlaceSpot.Block ( plBlock, plLineBlock, + insertWall, + insertStructureWalls, ) where -import Dodge.Wall.Pathing -import qualified Data.Set as S import Control.Lens import qualified Data.IntSet as IS import Data.List +import qualified Data.Set as S import Dodge.Base import Dodge.Data.GenWorld import Dodge.Path +import Dodge.Wall.Pathing import Geometry import qualified IntMapHelp as IM @@ -26,15 +28,26 @@ plBlock ps bl wl w = , _blShadows = [] , _blFootprint = ps } - & gwWorld %~ insertWalls wls + & gwWorld %~ insertStructureWalls BlockPart wl ps blid i where blid = IM.newKey $ w ^. gwWorld . cWorld . lWorld . blocks i = IM.newKey $ w ^. gwWorld . cWorld . lWorld . walls - is = take (length ps) [i .. ] + is = take (length ps) [i ..] + +insertStructureWalls :: + (Int -> WallStructure) -> + Wall -> + [Point2] -> + Int -> + Int -> + World -> + World +insertStructureWalls f wl ps sid wid = insertWalls wls + where wls = zipWith - (\j ln -> wl & wlLine .~ ln & wlID .~ j & wlStructure .~ BlockPart blid) - is + (\i xy -> wl & wlLine .~ xy & wlID .~ i & wlStructure .~ f sid) + [wid ..] (loopPairs ps) -- | Splits a line into many four cornered blocks. @@ -107,6 +120,7 @@ insertWalls wls w = foldl' (flip insertWall) w wls insertWall :: Wall -> World -> World insertWall wl = - uncurry (obstructPathsCrossing (S.map WallObstacle $ getWallPathing wl)) + uncurry + (obstructPathsCrossing (S.map WallObstacle $ getWallPathing wl)) (_wlLine wl) . (cWorld . lWorld . walls . at (_wlID wl) ?~ wl) diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 721cf97c9..43b32bfa0 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -4,6 +4,7 @@ module Dodge.Placement.PlaceSpot.TriggerDoor ( updateDoorEdges, ) where +import Dodge.Placement.PlaceSpot.Block import Data.List import qualified Data.Set as S import Dodge.Data.GenWorld @@ -19,7 +20,6 @@ import Linear plDoor :: Bool -> - S.Set EdgeObstacle -> -- | Opening condition WdBl -> -- | Door positions, closed to open. @@ -29,7 +29,7 @@ plDoor :: Point2A -> GenWorld -> (Int, GenWorld) -plDoor isauto eo cond l p1 p2 gw = (drid, over gwWorld addWalls $ gw & gwWorld . cWorld . lWorld . doors %~ addDoor) -- carefull with the ordering of addWalls +plDoor isauto cond l p1 p2 gw = (drid, over gwWorld addWalls $ gw & gwWorld . cWorld . lWorld . doors %~ addDoor) -- carefull with the ordering of addWalls where drid = IM.newKey $ _doors (_lWorld (_cWorld $ _gwWorld gw)) addDoor = @@ -43,13 +43,15 @@ plDoor isauto eo cond l p1 p2 gw = (drid, over gwWorld addWalls $ gw & gwWorld . , _drLerp = 0 , _drFootPrint = IM.fromList . zip wlids $ wlps' } - wlids = take 4 [IM.newKey $ _walls (_lWorld (_cWorld $ _gwWorld gw)) ..] + wlids = take 4 [wlid..] + wlid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . walls wlps' = rectanglePairs 9 0 (V2 l 0) + addWalls = insertStructureWalls (`DoorPart` isauto) defaultDoorWall + (map fst wlps' & each %~ shiftPointBy p1) drid wlid --addWalls w' = foldl' (addDoorWall eo drid $ switchWallCol col) w' $ zip wlids - addWalls w' = - foldl' (addDoorWall isauto eo drid defaultDoorWall) w' $ - zip wlids $ - wlps' & each . each %~ shiftPointBy p1 + -- foldl' (addDoorWall isauto eo drid defaultDoorWall) w' $ + -- zip wlids $ + -- wlps' & each . each %~ shiftPointBy p1 addDoorWall :: Bool -> diff --git a/src/Dodge/Room/Airlock.hs b/src/Dodge/Room/Airlock.hs index cdb60fcfd..13ad22626 100644 --- a/src/Dodge/Room/Airlock.hs +++ b/src/Dodge/Room/Airlock.hs @@ -96,9 +96,8 @@ airlock0 = ] col = dim $ dim $ bright red ---airlockDoor :: Color -> WdBl -> [(Point2, Point2)] -> PSType airlockDoor :: WdBl -> Float -> Point2A -> Point2A -> PSType -airlockDoor = PutDoor False switchWallObs +airlockDoor = PutDoor False airlockDoubleDoor :: Point2 -> diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 87f720f71..1c0f41be7 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,3 +1,4 @@ +{-# OPTIONS_GHC -Wno-unused-imports #-} module Dodge.Room.Tutorial where import Dodge.Room.Tanks @@ -44,10 +45,10 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor - , tToBTree "lastun" . return . cleatOnward <$> tanksRoom [] [] +-- , tToBTree "lastun" . return . cleatOnward <$> tanksRoom [] [] -- , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , return $ tToBTree "cor" $ return $ cleatOnward corridor --- , tToBTree "lastun" . return . cleatOnward <$> cenLasTur + , tToBTree "lastun" . return . cleatOnward <$> cenLasTur -- , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , return $ tToBTree "cor" $ return $ cleatOnward corridor diff --git a/tags b/tags index 4900ba5bd..5c659e083 100644 --- a/tags +++ b/tags @@ -126,16 +126,9 @@ BlBl src/Dodge/Data/BlBl.hs 9;" t BlConst src/Dodge/Data/BlBl.hs 11;" C BlId src/Dodge/Data/BlBl.hs 12;" C BlNegate src/Dodge/Data/BlBl.hs 10;" C -BlSh src/Dodge/Data/Block.hs 40;" t -BlShConst src/Dodge/Data/Block.hs 41;" C Block src/Dodge/Data/Block.hs 20;" t BlockDebris src/Dodge/Data/Prop.hs 29;" C BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 30;" C -BlockDraw src/Dodge/Data/Block.hs 33;" t -BlockDrawBlSh src/Dodge/Data/Block.hs 35;" C -BlockDrawColHeightPoss src/Dodge/Data/Block.hs 37;" C -BlockDrawMempty src/Dodge/Data/Block.hs 34;" C -BlockDraws src/Dodge/Data/Block.hs 36;" C BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C BlockedLink src/Dodge/Data/Room.hs 50;" C BloomLayer src/Picture/Data.hs 23;" C @@ -2628,7 +2621,7 @@ bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 668;" f bangStick src/Dodge/Item/Held/Stick.hs 15;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f -barrelShape src/Dodge/Render/ShapePicture.hs 78;" f +barrelShape src/Dodge/Render/ShapePicture.hs 80;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 406;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 98;" f baseCI src/Dodge/Item/Grammar.hs 158;" f @@ -2711,7 +2704,7 @@ branchRectWith src/Dodge/Room/Branch.hs 15;" f branchWith src/Dodge/Room/Room.hs 69;" f bright src/Color.hs 120;" f brightX src/Color.hs 116;" f -btSPic src/Dodge/Render/ShapePicture.hs 127;" f +btSPic src/Dodge/Render/ShapePicture.hs 129;" f btText src/Dodge/Inventory/SelectionList.hs 237;" f bufferEBO src/Shader/Bind.hs 28;" f bufferPokedVBO src/Shader/Bind.hs 19;" f @@ -2725,7 +2718,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 702;" f -cChasm src/Dodge/Room/Tutorial.hs 134;" f +cChasm src/Dodge/Room/Tutorial.hs 135;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2760,7 +2753,7 @@ chaseCritInternal src/Dodge/Humanoid.hs 7;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 120;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 201;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 202;" f chasmTest src/Dodge/Creature/Update.hs 132;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -2980,7 +2973,7 @@ crsNearRect src/Dodge/Zoning/Creature.hs 39;" f crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 66;" f cubeShape src/Dodge/Block/Debris.hs 113;" f -cullPoint src/Dodge/Render/ShapePicture.hs 94;" f +cullPoint src/Dodge/Render/ShapePicture.hs 96;" f cullPretty src/AesonHelp.hs 14;" f cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cutWall src/Dodge/LevelGen/StaticWalls.hs 124;" f @@ -3243,14 +3236,13 @@ drawArrowDown src/Dodge/Render/Picture.hs 221;" f drawBaseMachine src/Dodge/Machine/Draw.hs 68;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 16;" f -drawBlock src/Dodge/Block/Draw.hs 7;" f drawBoundingBox src/Dodge/Debug/Picture.hs 354;" f -drawBullet src/Dodge/Render/ShapePicture.hs 133;" f +drawBullet src/Dodge/Render/ShapePicture.hs 135;" f drawButton src/Dodge/Button/Draw.hs 10;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f -drawChasm src/Dodge/Render/ShapePicture.hs 50;" f +drawChasm src/Dodge/Render/ShapePicture.hs 52;" f drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f -drawCliff src/Dodge/Render/ShapePicture.hs 53;" f +drawCliff src/Dodge/Render/ShapePicture.hs 55;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f drawCombFilter src/Dodge/Render/Picture.hs 269;" f drawCombineInventory src/Dodge/Render/HUD.hs 182;" f @@ -3258,7 +3250,7 @@ drawConcurrentMessage src/Dodge/Render/Picture.hs 74;" f drawCoord src/Dodge/Debug/Picture.hs 382;" f drawCrInfo src/Dodge/Debug.hs 135;" f drawCrInfo' src/Dodge/Debug.hs 130;" f -drawCreature src/Dodge/Render/ShapePicture.hs 69;" f +drawCreature src/Dodge/Render/ShapePicture.hs 71;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 198;" f drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f @@ -3322,7 +3314,7 @@ drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawProp src/Dodge/Prop/Draw.hs 26;" f drawProxSensor src/Dodge/Machine/Draw.hs 37;" f -drawPulseBall src/Dodge/Render/ShapePicture.hs 61;" f +drawPulseBall src/Dodge/Render/ShapePicture.hs 63;" f drawQuitTerminal src/Dodge/Render/Picture.hs 147;" f drawRBOptions src/Dodge/Render/HUD.hs 251;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 14;" f @@ -3449,7 +3441,7 @@ explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 556;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f -extraPics src/Dodge/Render/ShapePicture.hs 99;" f +extraPics src/Dodge/Render/ShapePicture.hs 101;" f extraWeaponLinks src/Dodge/Item/Grammar.hs 90;" f extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 99;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f @@ -3502,11 +3494,11 @@ flockArmourChaseCrit src/Dodge/Creature/ArmourChase.hs 14;" f flockChaseTarget src/Dodge/Creature/Boid.hs 188;" f flockPointTarget src/Dodge/Creature/Boid.hs 204;" f floorItemPickupInfo src/Dodge/Render/HUD.hs 231;" f -floorItemSPic src/Dodge/Render/ShapePicture.hs 120;" f +floorItemSPic src/Dodge/Render/ShapePicture.hs 122;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 558;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 554;" f -foldMTRS src/Dodge/Room/Tutorial.hs 79;" f +foldMTRS src/Dodge/Room/Tutorial.hs 80;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 110;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3567,8 +3559,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 533;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 350;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 337;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 351;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 338;" f getDebugMouseOver src/Dodge/Update.hs 376;" f getDistortions src/Dodge/Render.hs 435;" f getEdgesCrossing src/Dodge/Path.hs 49;" f @@ -3585,7 +3577,7 @@ getNodePos src/Dodge/Path.hs 38;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 333;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 334;" f getRootItemBounds src/Dodge/Render/HUD.hs 100;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3735,9 +3727,10 @@ insertNewKey src/IntMapHelp.hs 65;" f insertOneS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 514;" f insertOver src/ListHelp.hs 47;" f insertS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 446;" f -insertWall src/Dodge/Placement/PlaceSpot/Block.hs 108;" f +insertStructureWalls src/Dodge/Placement/PlaceSpot/Block.hs 43;" f +insertWall src/Dodge/Placement/PlaceSpot/Block.hs 127;" f insertWallInZones src/Dodge/Wall/Zone.hs 20;" f -insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 105;" f +insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 124;" f insertWithNewKeys src/IntMapHelp.hs 71;" f intAnno src/Dodge/Floor.hs 111;" f interactWithCloseObj src/Dodge/SelectedClose.hs 9;" f @@ -3900,14 +3893,14 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 459;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f -lChasm src/Dodge/Room/Tutorial.hs 143;" f +lChasm src/Dodge/Room/Tutorial.hs 144;" f lConnect src/Dodge/Render/Connectors.hs 42;" f lConnectMulti src/Dodge/Render/Connectors.hs 46;" f lShape src/Dodge/Placement/Instance/LightSource.hs 89;" f lamp src/Dodge/Creature/Lamp.hs 21;" f lampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 8;" f lampCoverWhen src/Dodge/Placement/Instance/LightSource/Cover.hs 19;" f -lampCrSPic src/Dodge/Render/ShapePicture.hs 83;" f +lampCrSPic src/Dodge/Render/ShapePicture.hs 85;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 141;" f lasGunPic src/Dodge/Item/Draw/SPic.hs 412;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f @@ -4013,7 +4006,7 @@ lookupTrie src/SimpleTrie.hs 30;" f loopPairs src/ListHelp.hs 30;" f lootRoom src/Dodge/Room/Treasure.hs 58;" f lorem src/Lorem.hs 3;" f -lowBlock src/Dodge/Placement/Instance/Block.hs 25;" f +lowBlock src/Dodge/Placement/Instance/Block.hs 26;" f lsColPos src/Dodge/LightSource.hs 23;" f lsColPosID src/Dodge/LightSource.hs 20;" f lsColPosRad src/Dodge/LightSource.hs 29;" f @@ -4115,7 +4108,7 @@ mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 104;" f mcProxSensorUpdate src/Dodge/Machine/Update.hs 139;" f mcProxTest src/Dodge/Machine/Update.hs 203;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 171;" f -mcSPic src/Dodge/Render/ShapePicture.hs 130;" f +mcSPic src/Dodge/Render/ShapePicture.hs 132;" f mcShootAuto src/Dodge/HeldUse.hs 1169;" f mcShootLaser src/Dodge/HeldUse.hs 1162;" f mcTriggerVal src/Dodge/Machine/Update.hs 110;" f @@ -4150,7 +4143,7 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 16;" f midBounds src/Dodge/Room/Foreground.hs 151;" f -midChasm src/Dodge/Room/Tutorial.hs 164;" f +midChasm src/Dodge/Room/Tutorial.hs 165;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4215,7 +4208,7 @@ mvButton src/Dodge/Placement/PlaceSpot.hs 190;" f mvCr src/Dodge/Placement/PlaceSpot.hs 193;" f mvFS src/Dodge/Placement/PlaceSpot.hs 200;" f mvGust src/Dodge/Update.hs 784;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 240;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 239;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f @@ -4354,9 +4347,9 @@ pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 40;" f pistolerRoom src/Dodge/Room/Room.hs 330;" f pjRemoteSetDirection src/Dodge/Projectile/Update.hs 172;" f -plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f +plBlock src/Dodge/Placement/PlaceSpot/Block.hs 20;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 20;" f -plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 41;" f +plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 60;" f plMachine src/Dodge/Placement/PlaceSpot.hs 203;" f plNew src/Dodge/Base/NewID.hs 19;" f plNewID src/Dodge/Base/NewID.hs 7;" f @@ -4441,8 +4434,8 @@ pokeWall src/Shader/Poke.hs 78;" f pokeWallsWindows src/Shader/Poke.hs 50;" f poly3 src/Picture/Base.hs 84;" f poly3Col src/Picture/Base.hs 88;" f -polyChasm src/Dodge/Room/Tutorial.hs 185;" f -polyChasmC src/Dodge/Room/Tutorial.hs 194;" f +polyChasm src/Dodge/Room/Tutorial.hs 186;" f +polyChasmC src/Dodge/Room/Tutorial.hs 195;" f polyCirc src/Shape.hs 46;" f polyCircx src/Shape.hs 51;" f polyCornerDist src/Geometry/Polygon.hs 61;" f @@ -4561,8 +4554,8 @@ randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 56;" f randDirSpark src/Dodge/Spark.hs 55;" f -randEdgeTank src/Dodge/Room/Tanks.hs 33;" f -randEdgeTanks src/Dodge/Room/Tanks.hs 62;" f +randEdgeTank src/Dodge/Room/Tanks.hs 34;" f +randEdgeTanks src/Dodge/Room/Tanks.hs 52;" f randFirstWeapon src/Dodge/Placement/Random.hs 8;" f randFromPair src/RandomHelp.hs 141;" f randInArc src/RandomHelp.hs 81;" f @@ -4589,7 +4582,7 @@ randomPath src/TreeHelp.hs 145;" f randomPoints bench/Bench.hs 37;" f randomRanges src/RandomHelp.hs 16;" f randomSelectionFromList src/RandomHelp.hs 65;" f -randomTank src/Dodge/Room/Tanks.hs 19;" f +randomTank src/Dodge/Room/Tanks.hs 20;" f randomTreeStructure src/Dodge/Layout/Generate.hs 18;" f randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f @@ -4628,7 +4621,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f removeAmmoFromMag src/Dodge/HeldUse.hs 907;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 250;" f +removeLights src/Dodge/Room/Tutorial.hs 251;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 26;" f @@ -4807,7 +4800,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 197;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorSPic src/Dodge/Machine/Draw.hs 81;" f -sensorTut src/Dodge/Room/Tutorial.hs 359;" f +sensorTut src/Dodge/Room/Tutorial.hs 360;" f sensorTypeDamages src/Dodge/Machine/Update.hs 234;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 81;" f @@ -4834,7 +4827,7 @@ setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 86;" f +setRoomInt src/Dodge/Room/Tutorial.hs 87;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -4844,7 +4837,7 @@ setTargetMv src/Dodge/Creature/ReaderUpdate.hs 82;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f setToggle src/Dodge/Prop/Update.hs 44;" f -setTreeInts src/Dodge/Room/Tutorial.hs 93;" f +setTreeInts src/Dodge/Room/Tutorial.hs 94;" f setViewDistance src/Dodge/Update/Camera.hs 236;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 440;" f @@ -4886,7 +4879,7 @@ shellShape src/Dodge/Projectile/Draw.hs 35;" f shieldWall src/Dodge/Item/BackgroundEffect.hs 77;" f shiftByV2 src/Dodge/PlacementSpot.hs 250;" f shiftChildren src/Dodge/Tree/Compose.hs 44;" f -shiftDraw src/Dodge/Render/ShapePicture.hs 88;" f +shiftDraw src/Dodge/Render/ShapePicture.hs 90;" f shiftInBy src/Dodge/PlacementSpot.hs 247;" f shiftInvItems src/Dodge/Update/Input/InGame.hs 305;" f shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 350;" f @@ -5102,8 +5095,8 @@ takeWhileArb src/ListHelp.hs 99;" f takeWhileArb' src/ListHelp.hs 107;" f tankShape src/Dodge/Placement/Instance/Tank.hs 22;" f tankSquareDec src/Dodge/Placement/Instance/Tank.hs 15;" f -tanksPipesRoom src/Dodge/Room/Tanks.hs 90;" f -tanksRoom src/Dodge/Room/Tanks.hs 98;" f +tanksPipesRoom src/Dodge/Room/Tanks.hs 69;" f +tanksRoom src/Dodge/Room/Tanks.hs 77;" f tap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 630;" f tap2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 562;" f tap3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 610;" f @@ -5278,13 +5271,13 @@ tryUseParent src/Dodge/Creature/State.hs 145;" 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/Room/Tutorial.hs 42;" f -tutDrop src/Dodge/Room/Tutorial.hs 98;" f -tutHub src/Dodge/Room/Tutorial.hs 257;" f -tutLight src/Dodge/Room/Tutorial.hs 222;" f -tutRezBox src/Dodge/Room/Tutorial.hs 370;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 43;" f +tutDrop src/Dodge/Room/Tutorial.hs 99;" f +tutHub src/Dodge/Room/Tutorial.hs 258;" f +tutLight src/Dodge/Room/Tutorial.hs 223;" f +tutRezBox src/Dodge/Room/Tutorial.hs 371;" f tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 394;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 395;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 30;" f @@ -5600,7 +5593,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 153;" f zConnect src/Dodge/Render/Connectors.hs 17;" f zConnectCol src/Dodge/Render/Connectors.hs 28;" f zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f