diff --git a/src/Dodge/PlacementSpot.hs b/src/Dodge/PlacementSpot.hs index 5fb87661c..af5cbf20f 100644 --- a/src/Dodge/PlacementSpot.hs +++ b/src/Dodge/PlacementSpot.hs @@ -14,6 +14,7 @@ module Dodge.PlacementSpot ( isUnusedLnk, isInLnk, isOutLnk, + isOutLnkNum, unusedSpotNearInLink, randDirPS, unusedSpotAwayFromInLink, @@ -169,6 +170,11 @@ isOutLnk rp = case _rpType rp of UsedOutLink{} -> null $ _rpPlacementUse rp _ -> False +isOutLnkNum :: Int -> RoomPos -> Bool +isOutLnkNum i rp = case _rpType rp of + UsedOutLink{_rplsChildNum = j} | j == i -> null $ _rpPlacementUse rp + _ -> False + useUnusedLnk :: PlacementSpot useUnusedLnk = rprBool isUnusedLnk diff --git a/src/Dodge/Room/Corridor.hs b/src/Dodge/Room/Corridor.hs index f06e679b7..05b54b86d 100644 --- a/src/Dodge/Room/Corridor.hs +++ b/src/Dodge/Room/Corridor.hs @@ -32,6 +32,10 @@ corridor = poly = rectNSWE 80 0 0 40 lnks' = [ outLink (V2 20 70) 0 + , outLink (V2 20 70) (pi / 3) + , outLink (V2 20 70) (negate $ pi / 3) + , outLink (V2 20 70) (pi / 4) + , outLink (V2 20 70) (negate $ pi / 4) , outLink (V2 20 70) (pi / 6) , outLink (V2 20 70) (negate $ pi / 6) , inLink (V2 20 10) pi diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index 87d4d321b..d8d0de97d 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -11,6 +11,7 @@ module Dodge.Room.Room ( weaponBehindPillar, critsRoom, distributerRoom, + critDeadEnd, ) where import Linear @@ -251,6 +252,10 @@ weaponLongCorridor = do critInDeadEnd :: Room critInDeadEnd = deadEndRoom & rmPmnts .~ [sPS (V2 0 0) 0 randC1] +-- this one should face the inlink door +critDeadEnd :: Room +critDeadEnd = deadEndRoom & rmPmnts .~ [sPS (V2 0 0) (pi/2) randC1] + deadEndRoom :: Room deadEndRoom = defaultRoom diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 014d82dd5..2e4eb815c 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,6 +1,7 @@ {-# OPTIONS_GHC -Wno-unused-imports #-} module Dodge.Room.Tutorial where +import Dodge.Room.Room import Dodge.Data.AmmoType import Dodge.Room.Path import Dodge.Room.Pillar @@ -49,7 +50,7 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor - , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) , tToBTree "sdr" . return . cleatOnward <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000) -- , return $ tToBTree "cor" $ return $ cleatOnward corridor @@ -67,6 +68,7 @@ tutAnoTree = do , return $ tToBTree "cor" $ return $ cleatOnward corridor , return $ tToBTree "door" $ return $ cleatOnward door , tutHub + , chasmSpitTerminal , tutLight , tutDrop , return $ tToBTree "cor" $ return $ cleatOnward corridor @@ -179,7 +181,99 @@ midChasm = do return [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] --- dia x y = [sps0 $ PutChasm [V2 ] +midChasmPlatform :: State LayoutVars Room +midChasmPlatform = do + x <- state $ randomR (250, 300) + y <- state $ randomR (250, 300) + r <- roomRectAutoLinks x y + cs <- join $ takeOne [censquare x y] + shuffleLinks $ + r + & rmLinks %~ setOutLinks (isMidEdgeLink r North) + & rmLinks %~ setInLinks (isMidEdgeLink r South) + & rmPmnts <>~ cs + where + censquare x y = do + z <- state $ randomR (40, 60) + let (chsms,clfs) = sqPlatformChasm 20 (min x y/2 - z) + --return [sps0 $ putConvexChasm (rectNSWE (y - z) z z (x - z))] + return [sps0 $ PutChasm + (fmap (fmap (+ V2 (x/2) (y/2))) chsms) + (fmap (fmap (+ V2 (x/2) (y/2))) clfs) + ]-- (rectNSWE (y - z) z z (x - z))] +-- cenoct x y = +-- return +-- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] + +sqPlatformChasm :: Float -> Float -> ([[Point2]],[[Point2]]) +sqPlatformChasm b a = + ( [[ibr,obr,otr,itr],[itr,otr,otl,itl],[itl,otl,obl,ibl],[ibl,obl,obr,ibr]] + , [[obr,otr,otl,obl], [ibr,ibl, itl, itr]] + ) + where + obr = V2 a (-a) + obl = V2 (-a) (-a) + otl = V2 (-a) a + otr = V2 a a + ibr = V2 b (-b) + ibl = V2 (-b) (-b) + itl = V2 (-b) b + itr = V2 b b + +sqSpitChasm :: Float -> Float -> ([[Point2]],[[Point2]]) +sqSpitChasm b a = + ( [[ibr,obr,otr,itr],[itr,otr,otl,itl],[itl,otl,obl,ibl]] + , [[ibr,obr,otr,otl,obl,ibl,itl,itr]] + ) + where + obr = V2 a (-a) + obl = V2 (-a) (-a) + otl = V2 (-a) a + otr = V2 a a + ibr = V2 b (-a) + ibl = V2 (-b) (-a) + itl = V2 (-b) b + itr = V2 b b + +midChasmSpit :: State LayoutVars Room +midChasmSpit = do + let x = 300 + y = 300 + r <- roomRectAutoLinks x y + cs <- join $ takeOne [censquare x y] + shuffleLinks $ + r + & rmLinks %~ setOutLinks + (\rl -> isMidEdgeLink r South rl + || isMidEdgeLink r West rl + || isMidEdgeLink r East rl + ) + & rmLinks %~ setInLinks (isMidEdgeLink r South) + & rmPmnts <>~ cs + where + censquare x y = do + z <- state $ randomR (40, 60) + let (chsms,clfs) = sqSpitChasm 20 (min x y/2 - z) + return [sps0 $ PutChasm + (fmap (fmap (+ V2 (x/2) (y/2))) chsms) + (fmap (fmap (+ V2 (x/2) (y/2))) clfs) + ]-- (rectNSWE (y - z) z z (x - z))] +-- cenoct x y = +-- return +-- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] + +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 + let y' = y & rmPmnts <>~ [l3,l4] + return $ tToBTree "chasmTerm" $ Node (addDoorToggleTerminal' i1 (PS 150 0) y') + [treePost [triggerDoorRoom i1, critDeadEnd] + ,treePost [triggerDoorRoom i1, critDeadEnd] + ,return $ cleatOnward $ triggerDoorRoom i1 + ] polyChasm :: Int -> Float -> State LayoutVars Room polyChasm n x = @@ -221,7 +315,7 @@ chasmSimpleMaze = tutLight :: State LayoutVars (MetaTree Room String) tutLight = do x <- shuffleRoomPos =<< chasmSimpleMaze - y <- chasmSimpleMaze + y <- midChasmSpit z <- chasmSimpleMaze return $ tToBTree "TutLight" $ @@ -231,7 +325,7 @@ tutLight = do ,sps g (PutFlIt battery) ] , corridor & rmPmnts .~ mempty - , removeLights y + , y , corridor & rmPmnts .~ mempty , removeLights z , door diff --git a/src/Dodge/Room/Warning.hs b/src/Dodge/Room/Warning.hs index 3105573b3..426d282d0 100644 --- a/src/Dodge/Room/Warning.hs +++ b/src/Dodge/Room/Warning.hs @@ -2,10 +2,12 @@ module Dodge.Room.Warning ( warningRooms, addDoorToggleTerminal, + addDoorToggleTerminal', addDoorAtNthLinkToggleTerminal, addDoorAtNthLinkToggleInterrupt, ) where +import Dodge.LevelGen.PlacementHelper import Dodge.Default import Color import Control.Monad @@ -78,6 +80,17 @@ addDoorAtNthLinkToggleTerminal j xs i = [("DOOR", TerminalToggle (fromJust $ _plMID trpl) (BlConst True)) ] +addDoorToggleTerminal' :: Int -> PlacementSpot -> Room -> Room +addDoorToggleTerminal' i pspot rm = rm + & rmPmnts .:~ (pmnt & plExternalID ?~ i) + where + pmnt = ptCont (PutTrigger False) $ \pl -> Just $ putMessageTerminal ( + lineOutputTerminal [] + & tmToggles + .~ M.fromList + [("DOOR", TerminalToggle (fromJust $ _plMID pl) (BlConst True)) + ]) & plSpot .~ pspot + addWarningTerminal :: String -> Int -> Room -> Room addWarningTerminal str = addDoorToggleTerminal diff --git a/src/Geometry/Polygon.hs b/src/Geometry/Polygon.hs index bcab6ab01..449ea5dcd 100644 --- a/src/Geometry/Polygon.hs +++ b/src/Geometry/Polygon.hs @@ -19,6 +19,14 @@ rectNSWE !n !s !w !e = [V2 w n, V2 w s, V2 e s, V2 e n] rectWH :: Float -> Float -> [Point2] rectWH w h = rectNSWE h (- h) (- w) w +trapTBH :: Float -> Float -> Float -> [Point2] +trapTBH t b h = + [ V2 (-b) (-h) + , V2 b (-h) + , V2 t h + , V2 (-t) h + ] + isotriBWH :: Point2 -> Float -> Float -> [Point2] isotriBWH (V2 x y) w h = [V2 (x - w) y, V2 (x + w) y, V2 x (y + h)] diff --git a/tags b/tags index 4e36caa62..55fea41f9 100644 --- a/tags +++ b/tags @@ -967,10 +967,10 @@ POISONSPRAYER src/Dodge/Data/Item/Combine.hs 172;" C PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 87;" C POWERLEGS src/Dodge/Data/Item/Combine.hs 128;" C PRISM src/Dodge/Data/Item/Combine.hs 65;" C -PS src/Dodge/Data/GenWorld.hs 92;" C -PSNoShiftCont src/Dodge/Data/GenWorld.hs 93;" C -PSPos src/Dodge/Data/GenWorld.hs 94;" C -PSRoomRand src/Dodge/Data/GenWorld.hs 99;" C +PS src/Dodge/Data/GenWorld.hs 99;" C +PSNoShiftCont src/Dodge/Data/GenWorld.hs 100;" C +PSPos src/Dodge/Data/GenWorld.hs 101;" C +PSRoomRand src/Dodge/Data/GenWorld.hs 106;" C PSType src/Dodge/Data/GenWorld.hs 32;" t PUMP src/Dodge/Data/Item/Combine.hs 62;" C PaletteColor src/Color/Data.hs 11;" t @@ -991,8 +991,8 @@ PhysicalSensor src/Dodge/Data/Machine/Sensor.hs 16;" C Picture src/Picture/Data.hs 41;" t Piercing src/Dodge/Data/Damage.hs 16;" C PistolAI src/Dodge/Data/Creature/Misc.hs 41;" C -Placement src/Dodge/Data/GenWorld.hs 105;" t -PlacementSpot src/Dodge/Data/GenWorld.hs 91;" t +Placement src/Dodge/Data/GenWorld.hs 112;" t +PlacementSpot src/Dodge/Data/GenWorld.hs 98;" t PlainBarrel src/Dodge/Data/Creature/Misc.hs 86;" C PlainDeath src/Dodge/Data/Creature.hs 68;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C @@ -1047,7 +1047,7 @@ PutFlIt src/Dodge/Data/GenWorld.hs 43;" C PutForeground src/Dodge/Data/GenWorld.hs 57;" C PutID src/Dodge/Data/GenWorld.hs 60;" C PutLS src/Dodge/Data/GenWorld.hs 39;" C -PutLabel src/Dodge/Data/GenWorld.hs 62;" C +PutLabel src/Dodge/Data/GenWorld.hs 66;" C PutLineBlock src/Dodge/Data/GenWorld.hs 48;" C PutMachine src/Dodge/Data/GenWorld.hs 34;" C PutMod src/Dodge/Data/GenWorld.hs 46;" C @@ -1119,7 +1119,7 @@ Rocket src/Dodge/Data/Projectile.hs 32;" C RocketHoming src/Dodge/Data/Projectile.hs 39;" t RocketSmoke src/Dodge/Data/Projectile.hs 52;" t RocketSmoke src/Dodge/Data/Cloud.hs 22;" C -Room src/Dodge/Data/GenWorld.hs 120;" t +Room src/Dodge/Data/GenWorld.hs 127;" t RoomClipping src/Dodge/Data/Config.hs 122;" t RoomInt src/Dodge/Tree/Shift.hs 26;" t RoomLink src/Dodge/Data/Room.hs 24;" t @@ -2108,11 +2108,11 @@ _pjSpin src/Dodge/Data/Projectile.hs 19;" f _pjTimer src/Dodge/Data/Projectile.hs 22;" f _pjType src/Dodge/Data/Projectile.hs 24;" f _pjVel src/Dodge/Data/Projectile.hs 17;" f -_plExternalID src/Dodge/Data/GenWorld.hs 109;" f -_plIDCont src/Dodge/Data/GenWorld.hs 110;" f -_plMID src/Dodge/Data/GenWorld.hs 108;" f -_plSpot src/Dodge/Data/GenWorld.hs 106;" f -_plType src/Dodge/Data/GenWorld.hs 107;" f +_plExternalID src/Dodge/Data/GenWorld.hs 116;" f +_plIDCont src/Dodge/Data/GenWorld.hs 117;" f +_plMID src/Dodge/Data/GenWorld.hs 115;" f +_plSpot src/Dodge/Data/GenWorld.hs 113;" f +_plType src/Dodge/Data/GenWorld.hs 114;" f _playStatus src/Sound/Data.hs 15;" f _playingSounds src/Dodge/Data/World.hs 41;" f _posture src/Dodge/Data/Creature/Stance.hs 17;" f @@ -2131,13 +2131,13 @@ _proxReqEquipment src/Dodge/Data/Machine/Sensor.hs 35;" f _proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 34;" f _proxSensorType src/Dodge/Data/Machine/Sensor.hs 25;" f _proxToggle src/Dodge/Data/Machine/Sensor.hs 26;" f -_psFallback src/Dodge/Data/GenWorld.hs 97;" f -_psPos src/Dodge/Data/GenWorld.hs 92;" f -_psRandShift src/Dodge/Data/GenWorld.hs 101;" f -_psRoomEff src/Dodge/Data/GenWorld.hs 96;" f -_psRoomRandPointNum src/Dodge/Data/GenWorld.hs 100;" f -_psRot src/Dodge/Data/GenWorld.hs 92;" f -_psSelect src/Dodge/Data/GenWorld.hs 95;" f +_psFallback src/Dodge/Data/GenWorld.hs 104;" f +_psPos src/Dodge/Data/GenWorld.hs 99;" f +_psRandShift src/Dodge/Data/GenWorld.hs 108;" f +_psRoomEff src/Dodge/Data/GenWorld.hs 103;" f +_psRoomRandPointNum src/Dodge/Data/GenWorld.hs 107;" f +_psRot src/Dodge/Data/GenWorld.hs 99;" f +_psSelect src/Dodge/Data/GenWorld.hs 102;" f _pullWallShader src/Data/Preload/Render.hs 22;" f _pulseBalls src/Dodge/Data/LWorld.hs 116;" f _pulseLasers src/Dodge/Data/LWorld.hs 115;" f @@ -2145,13 +2145,14 @@ _pulseProgress src/Dodge/Data/Creature/Misc.hs 54;" f _pulseRate src/Dodge/Data/Creature/Misc.hs 53;" f _putBlock src/Dodge/Data/GenWorld.hs 44;" f _putButton src/Dodge/Data/GenWorld.hs 40;" f -_putChasmPoly src/Dodge/Data/GenWorld.hs 61;" f +_putChasmChasms src/Dodge/Data/GenWorld.hs 61;" f +_putChasmCliffs src/Dodge/Data/GenWorld.hs 61;" f _putDoorDoor src/Dodge/Data/GenWorld.hs 55;" f _putDoorWall src/Dodge/Data/GenWorld.hs 55;" f _putEndPoint src/Dodge/Data/GenWorld.hs 52;" f _putID src/Dodge/Data/GenWorld.hs 60;" f _putItem src/Dodge/Data/GenWorld.hs 43;" f -_putLabel src/Dodge/Data/GenWorld.hs 62;" f +_putLabel src/Dodge/Data/GenWorld.hs 66;" f _putMachineMachine src/Dodge/Data/GenWorld.hs 36;" f _putMachineMaybeItem src/Dodge/Data/GenWorld.hs 37;" f _putMachinePoly src/Dodge/Data/GenWorld.hs 35;" f @@ -2197,28 +2198,28 @@ _rkSmoke src/Dodge/Data/Projectile.hs 34;" f _rlDir src/Dodge/Data/Room.hs 27;" f _rlPos src/Dodge/Data/Room.hs 26;" f _rlType src/Dodge/Data/Room.hs 25;" f -_rmBound src/Dodge/Data/GenWorld.hs 135;" f -_rmChildren src/Dodge/Data/GenWorld.hs 146;" f -_rmClusterStatus src/Dodge/Data/GenWorld.hs 148;" f -_rmConnectsTo src/Dodge/Data/GenWorld.hs 143;" f -_rmEndWires src/Dodge/Data/GenWorld.hs 142;" f -_rmFloor src/Dodge/Data/GenWorld.hs 136;" f +_rmBound src/Dodge/Data/GenWorld.hs 142;" f +_rmChildren src/Dodge/Data/GenWorld.hs 153;" f +_rmClusterStatus src/Dodge/Data/GenWorld.hs 155;" f +_rmConnectsTo src/Dodge/Data/GenWorld.hs 150;" f +_rmEndWires src/Dodge/Data/GenWorld.hs 149;" f +_rmFloor src/Dodge/Data/GenWorld.hs 143;" f _rmHeight src/Dodge/Data/Room.hs 39;" f -_rmInPmnt src/Dodge/Data/GenWorld.hs 134;" f -_rmLinkEff src/Dodge/Data/GenWorld.hs 124;" f -_rmLinks src/Dodge/Data/GenWorld.hs 122;" f -_rmMID src/Dodge/Data/GenWorld.hs 144;" f -_rmMParent src/Dodge/Data/GenWorld.hs 145;" f -_rmName src/Dodge/Data/GenWorld.hs 137;" f -_rmPath src/Dodge/Data/GenWorld.hs 132;" f -_rmPmnts src/Dodge/Data/GenWorld.hs 133;" f -_rmPolys src/Dodge/Data/GenWorld.hs 121;" f -_rmPos src/Dodge/Data/GenWorld.hs 131;" f -_rmRandPSs src/Dodge/Data/GenWorld.hs 140;" f -_rmShift src/Dodge/Data/GenWorld.hs 138;" f -_rmStartWires src/Dodge/Data/GenWorld.hs 141;" f -_rmType src/Dodge/Data/GenWorld.hs 147;" f -_rmViewpoints src/Dodge/Data/GenWorld.hs 139;" f +_rmInPmnt src/Dodge/Data/GenWorld.hs 141;" f +_rmLinkEff src/Dodge/Data/GenWorld.hs 131;" f +_rmLinks src/Dodge/Data/GenWorld.hs 129;" f +_rmMID src/Dodge/Data/GenWorld.hs 151;" f +_rmMParent src/Dodge/Data/GenWorld.hs 152;" f +_rmName src/Dodge/Data/GenWorld.hs 144;" f +_rmPath src/Dodge/Data/GenWorld.hs 139;" f +_rmPmnts src/Dodge/Data/GenWorld.hs 140;" f +_rmPolys src/Dodge/Data/GenWorld.hs 128;" f +_rmPos src/Dodge/Data/GenWorld.hs 138;" f +_rmRandPSs src/Dodge/Data/GenWorld.hs 147;" f +_rmShift src/Dodge/Data/GenWorld.hs 145;" f +_rmStartWires src/Dodge/Data/GenWorld.hs 148;" f +_rmType src/Dodge/Data/GenWorld.hs 154;" f +_rmViewpoints src/Dodge/Data/GenWorld.hs 146;" f _rmWidth src/Dodge/Data/Room.hs 38;" f _rpDir src/Dodge/Data/Room.hs 17;" f _rpFlags src/Dodge/Data/Room.hs 18;" f @@ -2527,9 +2528,10 @@ addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f addButtonSlowDoor src/Dodge/Room/LongDoor.hs 96;" f addCrGibs src/Dodge/Prop/Gib.hs 17;" f addDepth src/Picture/Base.hs 125;" f -addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 41;" f -addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 60;" f -addDoorToggleTerminal src/Dodge/Room/Warning.hs 38;" f +addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 43;" f +addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 62;" f +addDoorToggleTerminal src/Dodge/Room/Warning.hs 40;" f +addDoorToggleTerminal' src/Dodge/Room/Warning.hs 83;" f addGib4 src/Dodge/Prop/Gib.hs 52;" f addGibAt src/Dodge/Prop/Gib.hs 63;" f addGibAtDir src/Dodge/Prop/Gib.hs 69;" f @@ -2545,8 +2547,8 @@ addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f addIndefiniteArticle src/StringHelp.hs 17;" f addNodesCrossing src/Dodge/Room/Path.hs 22;" f -addPane src/Dodge/Placement/PlaceSpot.hs 173;" f -addPointPolygon src/Geometry/Polygon.hs 134;" f +addPane src/Dodge/Placement/PlaceSpot.hs 171;" f +addPointPolygon src/Geometry/Polygon.hs 142;" f addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f addRandomGirderEW src/Dodge/Room/Girder.hs 9;" f @@ -2555,7 +2557,7 @@ addSideEffect src/Dodge/Concurrent.hs 29;" f addSouthPillars src/Dodge/Room/LongDoor.hs 88;" f addTermSignal src/Dodge/Event/Input.hs 31;" f addToTrunk src/TreeHelp.hs 157;" f -addWarningTerminal src/Dodge/Room/Warning.hs 81;" f +addWarningTerminal src/Dodge/Room/Warning.hs 94;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f advanceScrollAmount src/Dodge/Update.hs 454;" f @@ -2745,7 +2747,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 77;" f +branchWith src/Dodge/Room/Room.hs 78;" f bright src/Color.hs 147;" f brightX src/Color.hs 143;" f btSPic src/Dodge/Render/ShapePicture.hs 160;" f @@ -2763,7 +2765,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 131;" f +cChasm src/Dodge/Room/Tutorial.hs 133;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2783,8 +2785,8 @@ cenLasTur src/Dodge/Room/LasTurret.hs 34;" f centerText src/Picture/Base.hs 176;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f -centroid src/Geometry/Polygon.hs 169;" f -centroidNum src/Geometry/Polygon.hs 172;" f +centroid src/Geometry/Polygon.hs 177;" f +centroidNum src/Geometry/Polygon.hs 180;" f chainPairs src/Geometry.hs 360;" f changeSwapOther src/Dodge/Inventory.hs 141;" f changeSwapSel src/Dodge/Inventory.hs 134;" f @@ -2798,7 +2800,8 @@ chaseCritInternal src/Dodge/Humanoid.hs 8;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 121;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 200;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 291;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 265;" f chasmTest src/Dodge/Creature/Update.hs 123;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -2824,7 +2827,7 @@ chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 77;" f chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 60;" f circHitWall src/Dodge/Base/Collide.hs 241;" f -circInPolygon src/Geometry/Polygon.hs 102;" f +circInPolygon src/Geometry/Polygon.hs 110;" f circOnAnyCr src/Dodge/Base/Collide.hs 292;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f @@ -2913,22 +2916,21 @@ constructEdges src/Polyhedra.hs 31;" f constructEdgesList src/Polyhedra.hs 40;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f continueTerminal src/Dodge/Update/Input/InGame.hs 407;" f -convexCover src/Dodge/Placement/PlaceSpot.hs 165;" f -convexHull src/Geometry/Polygon.hs 142;" f -convexHullSafe src/Geometry/Polygon.hs 149;" f +convexHull src/Geometry/Polygon.hs 150;" f +convexHullSafe src/Geometry/Polygon.hs 157;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 46;" f coolMachinePistol src/Dodge/Creature/State.hs 102;" f 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 393;" f +corDoor src/Dodge/Room/Room.hs 394;" f cornerList src/Preload/Render.hs 236;" f corpseOrGib src/Dodge/Creature/Update.hs 91;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f -corridorN src/Dodge/Room/Corridor.hs 53;" f -corridorWallN src/Dodge/Room/Corridor.hs 72;" f +corridorN src/Dodge/Room/Corridor.hs 57;" f +corridorWallN src/Dodge/Room/Corridor.hs 76;" f crAdd src/Dodge/Room/RezBox.hs 116;" f crAwayFromPost src/Dodge/Creature/Test.hs 85;" f crBlips src/Dodge/RadarSweep.hs 88;" f @@ -2996,9 +2998,9 @@ creatureShootPulseLaser src/Dodge/HeldUse.hs 871;" 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 -critInDeadEnd src/Dodge/Room/Room.hs 251;" f -critsPillarRoom src/Dodge/Room/Room.hs 398;" f -critsRoom src/Dodge/Room/Room.hs 406;" f +critInDeadEnd src/Dodge/Room/Room.hs 252;" f +critsPillarRoom src/Dodge/Room/Room.hs 399;" f +critsRoom src/Dodge/Room/Room.hs 407;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 28;" f crossProd src/Geometry/Vector3D.hs 41;" f @@ -3063,7 +3065,7 @@ dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 325;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f -deadEndRoom src/Dodge/Room/Room.hs 254;" f +deadEndRoom src/Dodge/Room/Room.hs 255;" f deadFeet src/Dodge/Creature/Picture.hs 68;" f deadRot src/Dodge/Creature/Picture.hs 84;" f deadScalp src/Dodge/Creature/Picture.hs 81;" f @@ -3187,7 +3189,7 @@ dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 152;" f distributeAmmoToYou src/Dodge/WorldEffect.hs 140;" f -distributerRoom src/Dodge/Room/Room.hs 415;" f +distributerRoom src/Dodge/Room/Room.hs 416;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f divideDoorPane src/Dodge/Placement/Instance/Door.hs 65;" f @@ -3268,7 +3270,7 @@ doorBetween src/Dodge/Placement/Instance/Door.hs 38;" 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 284;" f +doubleCorridorBarrels src/Dodge/Room/Room.hs 285;" f doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 129;" f @@ -3538,7 +3540,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 77;" f +foldMTRS src/Dodge/Room/Tutorial.hs 79;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3600,8 +3602,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 351;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 338;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 442;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 429;" f getDebugMouseOver src/Dodge/Update.hs 424;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3618,7 +3620,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 334;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 425;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3642,14 +3644,14 @@ 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 80;" f -glassSwitchBackCrits src/Dodge/Room/Room.hs 114;" f +glassSwitchBack src/Dodge/Room/Room.hs 81;" f +glassSwitchBackCrits src/Dodge/Room/Room.hs 115;" f glauncherPic src/Dodge/Item/Draw/SPic.hs 402;" f gluintSize src/Shader/Parameters.hs 25;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f goToTarget src/Dodge/Creature/ReaderUpdate.hs 150;" f -grahamEliminate src/Geometry/Polygon.hs 163;" f -grahamScan src/Geometry/Polygon.hs 154;" f +grahamEliminate src/Geometry/Polygon.hs 171;" f +grahamScan src/Geometry/Polygon.hs 162;" f grapeCannon src/Dodge/Item/Held/Cone.hs 17;" f graphToEdges src/Dodge/Graph.hs 35;" f graphToIncidence src/Dodge/Graph.hs 40;" f @@ -3744,7 +3746,7 @@ icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f ildtPropagate src/Dodge/DoubleTree.hs 111;" f inLink src/Dodge/RoomLink.hs 128;" f inSegArea src/Geometry/Intersect.hs 319;" f -inSimplePoly src/Geometry/Polygon.hs 90;" f +inSimplePoly src/Geometry/Polygon.hs 98;" f inTextInputFocus src/Dodge/InputFocus.hs 8;" f incidenceToFunction src/Dodge/Graph.hs 26;" f indefiniteExceptions src/StringHelp.hs 29;" f @@ -3860,7 +3862,7 @@ isValidCommand src/Dodge/Debug/Terminal.hs 134;" f isVowel src/StringHelp.hs 8;" f isWalkable src/Dodge/WorldEvent/ThingsHit.hs 183;" f isoMatrix src/MatrixHelper.hs 35;" f -isotriBWH src/Geometry/Polygon.hs 22;" f +isotriBWH src/Geometry/Polygon.hs 30;" f itDim src/Dodge/Item/InvSize.hs 21;" f itEffectOnDrop src/Dodge/Item/BackgroundEffect.hs 81;" f itEffectOnPickup src/Dodge/Item/BackgroundEffect.hs 78;" f @@ -3931,9 +3933,9 @@ keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 87;" f keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 75;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 439;" f -keyholeCorridor src/Dodge/Room/Corridor.hs 40;" f +keyholeCorridor src/Dodge/Room/Corridor.hs 44;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f -lChasm src/Dodge/Room/Tutorial.hs 140;" f +lChasm src/Dodge/Room/Tutorial.hs 142;" 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 @@ -3990,7 +3992,7 @@ lineCol src/Picture/Base.hs 234;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 128;" f -lineOutputTerminal src/Dodge/Room/Warning.hs 86;" f +lineOutputTerminal src/Dodge/Room/Warning.hs 99;" f lineSplit src/Justify.hs 26;" f lineUp src/Dodge/Creature/Boid.hs 150;" f linksDAGToPath src/Dodge/Room/Path.hs 13;" f @@ -4177,7 +4179,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 163;" 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 midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4191,9 +4195,9 @@ miniGunX src/Dodge/Item/Held/Cane.hs 33;" f miniGunXPict src/Dodge/Item/Draw/SPic.hs 375;" f miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 367;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 653;" f -miniTree2 src/Dodge/Room/Room.hs 121;" f +miniTree2 src/Dodge/Room/Room.hs 122;" f minimumOn src/FoldlHelp.hs 14;" f -mirrorXAxis src/Geometry/Polygon.hs 68;" f +mirrorXAxis src/Geometry/Polygon.hs 76;" f mirrorxz src/Picture/Base.hs 330;" f mirroryz src/Picture/Base.hs 335;" f missileLaunchS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 619;" f @@ -4223,7 +4227,7 @@ moveProjectile src/Dodge/Projectile/Update.hs 249;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 228;" f -moveToSideNthOutLink src/Dodge/Room/Warning.hs 89;" f +moveToSideNthOutLink src/Dodge/Room/Warning.hs 102;" f moveWall src/Dodge/Wall/Move.hs 23;" f moveWallID src/Dodge/Wall/Move.hs 18;" f moveWallIDUnsafe src/Dodge/Wall/Move.hs 13;" f @@ -4241,16 +4245,16 @@ muzFlareAt src/Dodge/HeldUse.hs 681;" f muzzlePos src/Dodge/HeldUse.hs 767;" f muzzleRandPos src/Dodge/HeldUse.hs 776;" f muzzleWallCheck src/Dodge/Update.hs 323;" f -mvButton src/Dodge/Placement/PlaceSpot.hs 181;" f -mvCr src/Dodge/Placement/PlaceSpot.hs 184;" f -mvFS src/Dodge/Placement/PlaceSpot.hs 190;" f +mvButton src/Dodge/Placement/PlaceSpot.hs 179;" f +mvCr src/Dodge/Placement/PlaceSpot.hs 182;" f +mvFS src/Dodge/Placement/PlaceSpot.hs 188;" f mvGust src/Dodge/Update.hs 823;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 225;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 223;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f -mvProp src/Dodge/Placement/PlaceSpot.hs 178;" f +mvProp src/Dodge/Placement/PlaceSpot.hs 176;" f myIntersectLineLine src/Geometry/Intersect.hs 198;" f myIntersectSegSeg src/Geometry/Intersect.hs 176;" f nRays src/Geometry.hs 182;" f @@ -4310,10 +4314,10 @@ optionsToSelections src/Dodge/Menu/Option.hs 47;" f orRegex src/Dodge/DisplayInventory.hs 81;" f orange src/Color.hs 52;" f orderAround3 src/Geometry/Vector3D.hs 105;" f -orderAroundFirst src/Geometry/Polygon.hs 120;" f -orderAroundFirstReverse src/Geometry/Polygon.hs 116;" f -orderPolygon src/Geometry/Polygon.hs 125;" f -orderPolygonAround src/Geometry/Polygon.hs 108;" f +orderAroundFirst src/Geometry/Polygon.hs 128;" f +orderAroundFirstReverse src/Geometry/Polygon.hs 124;" f +orderPolygon src/Geometry/Polygon.hs 133;" f +orderPolygonAround src/Geometry/Polygon.hs 116;" f orientAttachment src/Dodge/Item/Orientation.hs 80;" f orientByParentChSF src/Dodge/Item/Orientation.hs 35;" f orientChild src/Dodge/Item/Orientation.hs 19;" f @@ -4378,25 +4382,25 @@ 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 338;" f +pistolerRoom src/Dodge/Room/Room.hs 339;" 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 plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 57;" f -plMachine src/Dodge/Placement/PlaceSpot.hs 193;" f +plMachine src/Dodge/Placement/PlaceSpot.hs 191;" f plNew src/Dodge/Base/NewID.hs 19;" f plNewID src/Dodge/Base/NewID.hs 7;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f -placeChasm src/Dodge/Placement/PlaceSpot.hs 154;" f -placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 220;" f +placeChasm src/Dodge/Placement/PlaceSpot.hs 155;" f +placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 218;" f placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 43;" f placeSpot src/Dodge/Placement/PlaceSpot.hs 35;" f placeSpotID src/Dodge/Placement/PlaceSpot.hs 104;" f placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 89;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 67;" f -placeWallPoly src/Dodge/Placement/PlaceSpot.hs 168;" f +placeWallPoly src/Dodge/Placement/PlaceSpot.hs 166;" f plainRegex src/Dodge/DisplayInventory.hs 193;" f playIfFree src/Sound.hs 139;" f playPositionalSoundQueue src/Sound.hs 147;" f @@ -4407,8 +4411,8 @@ plusDecoration src/Dodge/Placement/TopDecoration.hs 43;" f pnZoneSize src/Dodge/Zoning/Pathing.hs 26;" f pointIfNotClose src/Dodge/LevelGen/StaticWalls/Deprecated.hs 68;" f pointInCircle src/Geometry.hs 209;" f -pointInOrOnPolygon src/Geometry/Polygon.hs 78;" f -pointInPoly src/Geometry/Polygon.hs 86;" f +pointInOrOnPolygon src/Geometry/Polygon.hs 86;" f +pointInPoly src/Geometry/Polygon.hs 94;" f pointIsInCone src/Geometry.hs 375;" f pointIsOnScreen src/Dodge/Base/Window.hs 60;" f pointTowardsImpulse src/Dodge/Path.hs 91;" f @@ -4451,20 +4455,20 @@ 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 184;" f -polyChasmC src/Dodge/Room/Tutorial.hs 193;" f +polyChasm src/Dodge/Room/Tutorial.hs 275;" f +polyChasmC src/Dodge/Room/Tutorial.hs 284;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f -polyCornerDist src/Geometry/Polygon.hs 61;" f -polyOrthDist src/Geometry/Polygon.hs 51;" f +polyCornerDist src/Geometry/Polygon.hs 69;" f +polyOrthDist src/Geometry/Polygon.hs 59;" f polyPointsIntersect src/Geometry/ConvexPoly.hs 60;" f polyPointsOverlap src/Geometry/ConvexPoly.hs 53;" f polyToEdges src/Polyhedra.hs 125;" f polyToGeoRender src/Polyhedra.hs 134;" f polyToPics src/Polyhedra.hs 119;" f -polyToTris src/Geometry/Triangulate.hs 7;" f +polyToTris src/Geometry/Triangulate.hs 8;" f polyToTris' src/Geometry.hs 172;" f -polyToTris'' src/Geometry/Triangulate.hs 15;" f +polyToTris'' src/Geometry/Triangulate.hs 16;" f polygon src/Picture/Base.hs 64;" f polygonCol src/Picture/Base.hs 70;" f polygonWire src/Picture/Base.hs 59;" f @@ -4533,6 +4537,7 @@ putAutoDoor src/Dodge/Placement/Instance/Door.hs 87;" f putBlockN src/Dodge/Placement/Instance/Wall.hs 120;" f putBlockRect src/Dodge/Placement/Instance/Wall.hs 111;" f putBlockV src/Dodge/Placement/Instance/Wall.hs 114;" f +putConvexChasm src/Dodge/Data/GenWorld.hs 70;" f putDoor src/Dodge/Room/Airlock.hs 114;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f @@ -4611,10 +4616,10 @@ recComLookup src/Dodge/Terminal.hs 180;" f recTabComplete src/Dodge/Terminal.hs 227;" f recoilAmount src/Dodge/HeldUse.hs 470;" f rectNSWE src/Geometry/Polygon.hs 15;" f -rectVV src/Geometry/Polygon.hs 40;" f +rectVV src/Geometry/Polygon.hs 48;" f rectWH src/Geometry/Polygon.hs 19;" f -rectXH src/Geometry/Polygon.hs 34;" f -rectXY src/Geometry/Polygon.hs 37;" f +rectXH src/Geometry/Polygon.hs 42;" f +rectXY src/Geometry/Polygon.hs 45;" f red src/Color.hs 41;" f reduceLocDT src/Dodge/DoubleTree.hs 398;" f reduceLocLDT src/Dodge/DoubleTree.hs 393;" f @@ -4642,7 +4647,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 249;" f +removeLights src/Dodge/Room/Tutorial.hs 340;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 71;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f @@ -4701,15 +4706,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 48;" f -roomCCrits src/Dodge/Room/Room.hs 279;" f -roomCenterPillar src/Dodge/Room/Room.hs 134;" f +roomC src/Dodge/Room/Room.hs 49;" f +roomCCrits src/Dodge/Room/Room.hs 280;" f +roomCenterPillar src/Dodge/Room/Room.hs 135;" 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 129;" f +roomMiniIntro src/Dodge/Room/Room.hs 130;" f roomNgon src/Dodge/Room/Ngon.hs 16;" f -roomPadCut src/Dodge/Room/Room.hs 69;" f +roomPadCut src/Dodge/Room/Room.hs 70;" 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 @@ -4826,7 +4831,7 @@ 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 360;" f +sensorTut src/Dodge/Room/Tutorial.hs 451;" f sensorTypeDamages src/Dodge/Machine/Update.hs 298;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f @@ -4852,7 +4857,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 84;" f +setRoomInt src/Dodge/Room/Tutorial.hs 86;" 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 @@ -4861,7 +4866,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 91;" f +setTreeInts src/Dodge/Room/Tutorial.hs 93;" f setViewDistance src/Dodge/Update/Camera.hs 243;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f @@ -4922,10 +4927,10 @@ shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootTeslaArc src/Dodge/HeldUse.hs 1181;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f shootTractorBeam src/Dodge/HeldUse.hs 819;" f -shootersRoom src/Dodge/Room/Room.hs 332;" f -shootersRoom' src/Dodge/Room/Room.hs 299;" f -shootersRoom1 src/Dodge/Room/Room.hs 322;" f -shootingRange src/Dodge/Room/Room.hs 349;" f +shootersRoom src/Dodge/Room/Room.hs 333;" f +shootersRoom' src/Dodge/Room/Room.hs 300;" f +shootersRoom1 src/Dodge/Room/Room.hs 323;" f +shootingRange src/Dodge/Room/Room.hs 350;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 527;" f @@ -4940,8 +4945,8 @@ showManObj src/Dodge/TestString.hs 54;" f showMuzzlePositions src/Dodge/Debug.hs 253;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f showTimeFlow src/Dodge/TestString.hs 77;" f -shrinkPolyOnEdges src/Geometry/Polygon.hs 175;" f -shrinkVert src/Geometry/Polygon.hs 179;" f +shrinkPolyOnEdges src/Geometry/Polygon.hs 183;" f +shrinkVert src/Geometry/Polygon.hs 187;" f shuffle src/RandomHelp.hs 51;" f shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 82;" f @@ -5024,7 +5029,7 @@ 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 377;" f +spawnerRoom src/Dodge/Room/Room.hs 378;" f speedLegs src/Dodge/Item/Equipment.hs 74;" f splashMenu src/Dodge/Menu.hs 31;" f splashMenuOptions src/Dodge/Menu.hs 36;" f @@ -5041,7 +5046,9 @@ 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 -square src/Geometry/Polygon.hs 48;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 208;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 223;" f +square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f squashNormalizeV src/Geometry/Vector.hs 158;" f @@ -5108,9 +5115,9 @@ swapItemWith src/Dodge/Inventory.hs 164;" f swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f swarmUsingCenter src/Dodge/Creature/Boid.hs 174;" f t src/ShortShow.hs 48;" f -tEast src/Dodge/Room/Corridor.hs 91;" f +tEast src/Dodge/Room/Corridor.hs 95;" f tToBTree src/Dodge/Tree/Compose.hs 93;" f -tWest src/Dodge/Room/Corridor.hs 116;" f +tWest src/Dodge/Room/Corridor.hs 120;" f takeN src/RandomHelp.hs 46;" f takeNMore src/RandomHelp.hs 43;" f takeOne src/RandomHelp.hs 24;" f @@ -5204,7 +5211,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 120;" f -tmDistributeLines src/Dodge/Room/Room.hs 451;" f +tmDistributeLines src/Dodge/Room/Room.hs 452;" 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 @@ -5267,7 +5274,8 @@ translateToLeftLeg src/Dodge/Creature/HandPos.hs 98;" f translateToRightHand src/Dodge/Creature/HandPos.hs 55;" f translateToRightLeg src/Dodge/Creature/HandPos.hs 113;" f translateXY src/Polyhedra.hs 23;" f -trapezionBWHW src/Geometry/Polygon.hs 26;" f +trapTBH src/Geometry/Polygon.hs 22;" f +trapezionBWHW src/Geometry/Polygon.hs 34;" f treeAttachDeep src/TreeHelp.hs 193;" f treeChildNums src/TreeHelp.hs 130;" f treeFromPost src/TreeHelp.hs 40;" f @@ -5304,13 +5312,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 47;" f -tutDrop src/Dodge/Room/Tutorial.hs 96;" f -tutHub src/Dodge/Room/Tutorial.hs 256;" f -tutLight src/Dodge/Room/Tutorial.hs 221;" f -tutRezBox src/Dodge/Room/Tutorial.hs 371;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 48;" f +tutDrop src/Dodge/Room/Tutorial.hs 98;" f +tutHub src/Dodge/Room/Tutorial.hs 347;" f +tutLight src/Dodge/Room/Tutorial.hs 312;" f +tutRezBox src/Dodge/Room/Tutorial.hs 462;" f tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 394;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 485;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5539,7 +5547,7 @@ wallToSurface src/Dodge/Base/Collide.hs 180;" f wallsFromRooms src/Dodge/Layout.hs 137;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f warmupSound src/Dodge/HeldUse.hs 1371;" f -warningRooms src/Dodge/Room/Warning.hs 31;" f +warningRooms src/Dodge/Room/Warning.hs 33;" f warp1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 845;" f wasdAim src/Dodge/Creature/YourControl.hs 133;" f wasdDir src/Dodge/WASD.hs 17;" f @@ -5548,12 +5556,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 194;" f -weaponBetweenPillars src/Dodge/Room/Room.hs 210;" f -weaponEmptyRoom src/Dodge/Room/Room.hs 155;" f -weaponLongCorridor src/Dodge/Room/Room.hs 235;" f -weaponRoom src/Dodge/Room/Room.hs 268;" f -weaponUnderCrits src/Dodge/Room/Room.hs 173;" f +weaponBehindPillar src/Dodge/Room/Room.hs 195;" f +weaponBetweenPillars src/Dodge/Room/Room.hs 211;" f +weaponEmptyRoom src/Dodge/Room/Room.hs 156;" f +weaponLongCorridor src/Dodge/Room/Room.hs 236;" f +weaponRoom src/Dodge/Room/Room.hs 269;" f +weaponUnderCrits src/Dodge/Room/Room.hs 174;" f wedgeGeom src/Dodge/Base.hs 42;" f wedgeOfThickness src/Dodge/Picture.hs 9;" f whirS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 639;" f @@ -5628,7 +5636,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 150;" f +zChasm src/Dodge/Room/Tutorial.hs 152;" 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