From c641cbaa69a1fc8a41cc556badc29381245e5bd2 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 26 Oct 2025 16:55:22 +0000 Subject: [PATCH] Commit before adding more debugging control --- src/Dodge/DrWdWd.hs | 5 +- src/Dodge/LevelGen/PlacementHelper.hs | 3 +- src/Dodge/Path.hs | 1 + src/Dodge/Placement/Instance/Door.hs | 32 ++-- src/Dodge/Placement/Instance/LightSource.hs | 12 ++ src/Dodge/Room/Airlock.hs | 49 +++-- src/Dodge/Room/Tutorial.hs | 5 +- tags | 192 ++++++++++---------- 8 files changed, 171 insertions(+), 128 deletions(-) diff --git a/src/Dodge/DrWdWd.hs b/src/Dodge/DrWdWd.hs index 4e09421e5..54e97deb2 100644 --- a/src/Dodge/DrWdWd.hs +++ b/src/Dodge/DrWdWd.hs @@ -48,10 +48,13 @@ doorLerp speed dr w = fromMaybe (mempty,domounts (dr ^. drLerp) w) $ do x <- newlerp let ps = wlposs x is = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize)) ps + ps' = wlposs (dr ^. drLerp) + is' = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize)) ps' + is'' = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize)) (ps <> ps') -- it seems possible that this will miss some paths: we don't add zones for the -- old footprint. Seems unlikely, but a possible cause of pathfinding bugs return - ( is + ( is'' , domounts x $ f x & playSound x & cWorld . lWorld . doors . ix drid . drLerp .~ x diff --git a/src/Dodge/LevelGen/PlacementHelper.hs b/src/Dodge/LevelGen/PlacementHelper.hs index 232742961..f4bdc99f3 100644 --- a/src/Dodge/LevelGen/PlacementHelper.hs +++ b/src/Dodge/LevelGen/PlacementHelper.hs @@ -46,7 +46,8 @@ jspsJ :: Point2 -> Float -> PSType -> Placement -> Maybe Placement jspsJ p a pst plm = Just $ Placement (PS p a) pst Nothing Nothing $ \_ _ -> Just plm jsps0J :: PSType -> Placement -> Maybe Placement -jsps0J pst plm = Just $ Placement (PS (V2 0 0) 0) pst Nothing Nothing $ \_ _ -> Just plm +--jsps0J pst plm = Just $ Placement (PS (V2 0 0) 0) pst Nothing Nothing $ \_ _ -> Just plm +jsps0J = jspsJ 0 0 ps0 :: PSType -> (Int -> Maybe Placement) -> Placement ps0 pst = Placement (PS (V2 0 0) 0) pst Nothing Nothing . contToIDCont diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index b0ea8531f..241c3aea0 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -118,6 +118,7 @@ pairsToIncGraph pairs = inodes = UV.generate (length ps) (ps !!) ps = Set.toList $ Set.map fst pairs <> Set.map snd pairs +-- consider updating all path edges at the end of world generation? obstructPathsCrossing :: S.Set EdgeObstacle -> Point2 -> Point2 -> World -> World obstructPathsCrossing obs s e w = w & cWorld . incGraph %~ updateincedges where diff --git a/src/Dodge/Placement/Instance/Door.hs b/src/Dodge/Placement/Instance/Door.hs index 0d29c81b4..0f59011c8 100644 --- a/src/Dodge/Placement/Instance/Door.hs +++ b/src/Dodge/Placement/Instance/Door.hs @@ -4,12 +4,12 @@ module Dodge.Placement.Instance.Door ( putDoubleDoorThen, ) where -import Dodge.Door.PutSlideDoor import Control.Lens import Dodge.Data.CreatureEffect import Dodge.Data.GenWorld import Dodge.Default.Door import Dodge.Default.Wall +import Dodge.Door.PutSlideDoor import Dodge.LevelGen.PlacementHelper import Geometry import Linear @@ -51,15 +51,22 @@ doorBetween :: (Placement -> Maybe Placement) -> Placement doorBetween wl cond soff pa pb speed g = case divideLine 40 pa pb of - [x, y] -> ptCont (putSlideDr adoor wl soff x y) g - (x : y : zs) -> divideDoorPane Nothing wl cond (soff - dist y pb) speed (zip (x : y : zs) (y : zs)) g +-- [x, y] -> ptCont (putSlideDr adoor wl soff x y) g + (x : y : zs) -> + divideDoorPane + Nothing + wl + cond + (soff - dist y pb) + speed + (zip (x : y : zs) (y : zs)) + g _ -> error "tried to create doorBetween with too few points" - where - adoor = - defaultDoor - & drTrigger .~ cond - & drUpdate .~ DoorLerp speed - +-- where +-- adoor = +-- defaultDoor +-- & drTrigger .~ cond +-- & drUpdate .~ DoorLerp speed divideDoorPane :: Maybe Int -> @@ -72,12 +79,15 @@ divideDoorPane :: Placement divideDoorPane mid wl cond soff speed ppairs g = case ppairs of [p] -> ptCont (adoor p) g - (p : ps) -> ptCont (adoor p) $ \pl -> Just $ divideDoorPane (_plMID pl) wl cond soff speed ps g + (p : ps) -> ptCont (adoor p) $ + \pl -> Just $ divideDoorPane (_plMID pl) wl cond soff speed ps g _ -> undefined where adoor (x, y) = putSlideDr thedoor wl soff x y thedoor = - defaultDoor & drUpdate . drLerpSpeed .~ speed & drTrigger .~ cond + defaultDoor + & drUpdate . drLerpSpeed .~ speed + & drTrigger .~ cond & drPushedBy .~ maybe PushesItself PushedBy mid putAutoDoor :: Point2 -> Point2 -> Placement diff --git a/src/Dodge/Placement/Instance/LightSource.hs b/src/Dodge/Placement/Instance/LightSource.hs index ac17fd5c8..4782c56cd 100644 --- a/src/Dodge/Placement/Instance/LightSource.hs +++ b/src/Dodge/Placement/Instance/LightSource.hs @@ -11,6 +11,7 @@ module Dodge.Placement.Instance.LightSource ( spanColLightBlackI, moveLSThen, spanLightI, + spanLightY, mntLightLnkCond', spanLS, ) where @@ -27,6 +28,7 @@ import Geometry import RandomHelp import Shape import ShapePicture +import Linear propLSThen :: PropUpdate -> @@ -215,6 +217,16 @@ spanColLightBlackI col h a b = spanLightI :: Point2 -> Point2 -> Placement spanLightI = spanColLightI 0.75 50 +spanLightY :: Point2 -> Point2 -> Point2 -> Point2 -> Placement +spanLightY l x y z = + ps0j (PutLS $ lsColPos 0.75 (addZ (h -5) l)) $ + ps0j (f x) $ + ps0j (f y) $ + sps0 $ f z + where + f p = putShape $ thinHighBar h p (l + normalize (l-p)) + h = 50 + --extendAway :: Point2 -> Point2 -> Point2 --extendAway p x = p +.+ squashNormalizeV (p -.- x) diff --git a/src/Dodge/Room/Airlock.hs b/src/Dodge/Room/Airlock.hs index dba281ee6..131374bab 100644 --- a/src/Dodge/Room/Airlock.hs +++ b/src/Dodge/Room/Airlock.hs @@ -3,8 +3,6 @@ {- Rooms that contain two doors and a switch alternating both. -} module Dodge.Room.Airlock where -import Dodge.Room.Foreground -import ShapePicture import Control.Lens import Control.Monad import qualified Data.IntMap.Strict as IM @@ -18,11 +16,13 @@ import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.Switch import Dodge.Placement.Instance import Dodge.Placement.Instance.Analyser +import Dodge.Room.Foreground import Dodge.Room.Path import Dodge.RoomLink import Geometry import Picture import RandomHelp +import ShapePicture -- | A passage with a switch that opens forward access while closing backwards access. airlock :: RandomGen g => State g Room @@ -107,26 +107,35 @@ airlockDoubleDoor :: Point2A -> Point2A -> Maybe Placement -airlockDoubleDoor cond l x1 y1 x2 y2 = - jspsJ 0 0 (putDoor cond l x1 y1) $ - sPS 0 0 (putDoor cond l x2 y2) +airlockDoubleDoor cond l x1 y1 x2 y2 = jsps0J (pd x1 y1) $ sps0 (pd x2 y2) + where + pd = putDoor cond l putDoor :: WdBl -> Float -> Point2A -> Point2A -> PSType -putDoor cond l p1 p2 = PutDoor dr wl +putDoor cond l p1 p2 = PutDoor dr defaultDoorWall where - wl = defaultDoorWall dr = defaultDoor & drTrigger .~ cond & drUpdate .~ DoorLerp 0.01 & drZeroPos .~ p1 & drOnePos .~ p2 - & drFootPrint .~ IM.fromList (zip [0 ..] wlps') - wlps' = loopPairs $ mkRectangle 9 (V2 l 0) + & drFootPrint + .~ IM.fromDistinctAscList + (zip [0 ..] (loopPairs $ mkRectangle 9 (V2 l 0))) airlockSimple :: RandomGen g => State g Room airlockSimple = do - light1 <- mntLightLnkCond $ PS (V2 90 120) 0 + light1 <- + join $ + takeOne + [ mntLightLnkCond $ PS (V2 90 120) 0 + , mntLightLnkCond $ PS (V2 90 0) pi + , return $ spanLightI (V2 90 0) (V2 90 120) + , return $ spanLightI (V2 0 60) (V2 180 60) + , takeOne [30, 60, 90] <&> \x -> + spanLightY (V2 90 (120 - x)) (V2 (90 - x) 120) (V2 (90 + x) 120) (V2 90 0) + ] return $ defaultRoom { _rmPolys = [rectNSWE 120 0 0 180] @@ -208,9 +217,11 @@ airlock90 = [ pContID (PS (V2 120 120) (3 * pi / 4)) xSwitch - $ \btid -> jsps (V2 5 5) 0 $ putDoor (WdBlBtOn btid) l1 x1 y1 - & putDoorDoor . drMounts .~ themounts --- , mntLS vShape (V2 35 35) (V3 70 70 50) + $ \btid -> + jsps (V2 5 5) 0 $ + putDoor (WdBlBtOn btid) l1 x1 y1 + & putDoorDoor . drMounts .~ themounts + -- , mntLS vShape (V2 35 35) (V3 70 70 50) ] , _rmBound = pure @@ -223,10 +234,10 @@ airlock90 = , _rmName = "airlock90" } where - themounts = + themounts = [ MountedLight (V3 hl hl 50) 150 0.5 - , MountedLight (V3 hl (-hl) 50) 150 0.5 - , MountedSPic . noPic $ thinHighBar 55 (V2 hl (-hl')) (V2 hl hl') + , MountedLight (V3 hl (- hl) 50) 150 0.5 + , MountedSPic . noPic $ thinHighBar 55 (V2 hl (- hl')) (V2 hl hl') ] lnks = muout [(V2 0 40, pi / 2)] ++ muin [(V2 40 0, pi)] hl = 27.5 @@ -239,8 +250,9 @@ airlockCrystal :: Room airlockCrystal = defaultRoom { _rmPolys = [rectNSWE 140 0 0 40, switchcutout] - , _rmLinks = muout [(V2 20 130, 0)] ++ muin [(V2 20 0, pi)] - , _rmPath = mempty + , _rmLinks = lnks + , _rmPath = linksGridToPath' lnks + $ loopPairs [V2 20 40, V2 100 70, V2 20 110] , _rmPmnts = [ pContID (PS (V2 145 70) (pi / 2)) @@ -252,6 +264,7 @@ airlockCrystal = , _rmBound = [rectNSWE 120 20 0 40, switchcutout] } where + lnks = muout [(V2 20 130, 0)] ++ muin [(V2 20 0, pi)] switchcutout = orderPolygon $ map toV2 [(39, 20), (150, 60), (150, 80), (39, 120)] l1 = 55 x1 = (0, pi / 2) diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index ad82158a3..bedf1f7ed 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -51,10 +51,11 @@ tutAnoTree = do -- , return $ tToBTree "cor" $ return $ cleatOnward (twinSlowDoorRoom 80 200 40) -- , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , return $ tToBTree "cor" $ return $ cleatOnward airlock0 --- , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward airlockCrystal -- , tToBTree "x" . return . cleatOnward <$> airlockSimple -- , tToBTree "lastun" . return . cleatOnward <$> tanksRoom [] [] --- , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , return $ tToBTree "cor" $ return $ cleatOnward corridor -- , tToBTree "lastun" . return . cleatOnward <$> cenLasTur -- , return $ tToBTree "cor" $ return $ cleatOnward corridor diff --git a/tags b/tags index 2ea404de3..1da4d9467 100644 --- a/tags +++ b/tags @@ -714,6 +714,7 @@ MakeAutoSF src/Dodge/Data/ComposedItem.hs 35;" C MakeSound src/Dodge/Data/ActionPlan.hs 42;" C MakeStartCloudAt src/Dodge/Data/WorldEffect.hs 28;" C MakeTempLight src/Dodge/Data/WorldEffect.hs 32;" C +MakeTempLightFade src/Dodge/Data/WorldEffect.hs 33;" C ManipulatedObject src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 20;" t Manipulation src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 14;" t Manipulator src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 15;" C @@ -727,11 +728,11 @@ McProxSensor src/Dodge/Data/Machine.hs 46;" C McStatic src/Dodge/Data/Machine.hs 43;" C McTerminal src/Dodge/Data/Machine.hs 44;" C McTurret src/Dodge/Data/Machine.hs 47;" C -MdFlickerUpdate src/Dodge/Data/WorldEffect.hs 47;" C -MdSetLSCol src/Dodge/Data/WorldEffect.hs 46;" C -MdTrigIf src/Dodge/Data/WorldEffect.hs 45;" C -MdWdId src/Dodge/Data/WorldEffect.hs 44;" C -MdWdWd src/Dodge/Data/WorldEffect.hs 43;" t +MdFlickerUpdate src/Dodge/Data/WorldEffect.hs 48;" C +MdSetLSCol src/Dodge/Data/WorldEffect.hs 47;" C +MdTrigIf src/Dodge/Data/WorldEffect.hs 46;" C +MdWdId src/Dodge/Data/WorldEffect.hs 45;" C +MdWdWd src/Dodge/Data/WorldEffect.hs 44;" t MedBaySS src/Dodge/Data/Scenario.hs 100;" C Medium src/Shape/Data.hs 25;" C Melee src/Dodge/Data/ActionPlan.hs 40;" C @@ -1375,7 +1376,7 @@ UseFromLocation src/Dodge/Data/UseCondition.hs 13;" C UseFromRoot src/Dodge/Data/UseCondition.hs 12;" C UseHeld src/Dodge/Data/Item/Use.hs 29;" C UseInt src/Dodge/Data/Item/Use.hs 31;" C -UseInvItem src/Dodge/Data/WorldEffect.hs 33;" C +UseInvItem src/Dodge/Data/WorldEffect.hs 34;" C UseItem src/Dodge/Data/ActionPlan.hs 36;" C UseItemWidth src/Dodge/Data/SelectionList.hs 39;" C UseMapper src/Dodge/Data/Item/Use.hs 37;" C @@ -1438,28 +1439,28 @@ WarmUpCoolDown src/Dodge/Data/TriggerType.hs 14;" C WarmUpNoDelay src/Dodge/Data/TriggerType.hs 19;" C WarningCry src/Dodge/Data/ActionPlan.hs 137;" C WatchAndWait src/Dodge/Data/ActionPlan.hs 135;" C -WdBl src/Dodge/Data/WorldEffect.hs 50;" t -WdBlBtOn src/Dodge/Data/WorldEffect.hs 56;" C -WdBlConst src/Dodge/Data/WorldEffect.hs 53;" C -WdBlCrFilterNearPoint src/Dodge/Data/WorldEffect.hs 55;" C -WdBlDoorMoving src/Dodge/Data/WorldEffect.hs 52;" C -WdBlNegate src/Dodge/Data/WorldEffect.hs 54;" C +WdBl src/Dodge/Data/WorldEffect.hs 51;" t +WdBlBtOn src/Dodge/Data/WorldEffect.hs 57;" C +WdBlConst src/Dodge/Data/WorldEffect.hs 54;" C +WdBlCrFilterNearPoint src/Dodge/Data/WorldEffect.hs 56;" C +WdBlDoorMoving src/Dodge/Data/WorldEffect.hs 53;" C +WdBlNegate src/Dodge/Data/WorldEffect.hs 55;" C WdCrBl src/Dodge/Data/CreatureEffect.hs 12;" t WdCrBlfromCrBl src/Dodge/Data/CreatureEffect.hs 14;" C WdCrLOSTarget src/Dodge/Data/CreatureEffect.hs 16;" C WdCrNegate src/Dodge/Data/CreatureEffect.hs 15;" C WdCrSafeDistFromTarget src/Dodge/Data/CreatureEffect.hs 17;" C WdCrTrue src/Dodge/Data/CreatureEffect.hs 13;" C -WdP2 src/Dodge/Data/WorldEffect.hs 38;" t -WdP2Const src/Dodge/Data/WorldEffect.hs 39;" C -WdP2f src/Dodge/Data/WorldEffect.hs 59;" t -WdP2f0 src/Dodge/Data/WorldEffect.hs 60;" C -WdP2fDoorPosition src/Dodge/Data/WorldEffect.hs 61;" C -WdTrig src/Dodge/Data/WorldEffect.hs 51;" C +WdP2 src/Dodge/Data/WorldEffect.hs 39;" t +WdP2Const src/Dodge/Data/WorldEffect.hs 40;" C +WdP2f src/Dodge/Data/WorldEffect.hs 60;" t +WdP2f0 src/Dodge/Data/WorldEffect.hs 61;" C +WdP2fDoorPosition src/Dodge/Data/WorldEffect.hs 62;" C +WdTrig src/Dodge/Data/WorldEffect.hs 52;" C WdWd src/Dodge/Data/WorldEffect.hs 20;" t -WdWdBurstFireRepetition src/Dodge/Data/WorldEffect.hs 34;" C +WdWdBurstFireRepetition src/Dodge/Data/WorldEffect.hs 35;" C WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 30;" C -WdYouPos src/Dodge/Data/WorldEffect.hs 40;" C +WdYouPos src/Dodge/Data/WorldEffect.hs 41;" C WeaponScopeSF src/Dodge/Data/ComposedItem.hs 19;" C WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 20;" C West src/Dodge/Data/CardinalPoint.hs 9;" C @@ -2452,18 +2453,19 @@ _wsMachine src/Dodge/Data/Wall/Structure.hs 13;" f _xNum src/Dodge/Data/Item/Combine.hs 139;" f _xNum src/Dodge/Data/Item/Combine.hs 149;" f _xNum src/Dodge/Data/Item/Combine.hs 170;" f +aBar src/Dodge/Placement/Instance/LightSource.hs 100;" f aFlame src/Dodge/Gas.hs 20;" f aGasCloud src/Dodge/Gas.hs 15;" f aRadarPulse src/Dodge/RadarSweep.hs 20;" f -aShape src/Dodge/Placement/Instance/LightSource.hs 118;" f +aShape src/Dodge/Placement/Instance/LightSource.hs 125;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 54;" f +accessTerminal src/Dodge/WorldEffect.hs 59;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 62;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 84;" f addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f -addButtonSlowDoor src/Dodge/Room/LongDoor.hs 95;" f +addButtonSlowDoor src/Dodge/Room/LongDoor.hs 96;" f addCrGibs src/Dodge/Prop/Gib.hs 17;" f addDepth src/Picture/Base.hs 133;" f addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 40;" f @@ -2489,7 +2491,7 @@ addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f addRandomGirderEW src/Dodge/Room/Girder.hs 9;" f addRandomGirderFrom src/Dodge/Room/Girder.hs 16;" f addSideEffect src/Dodge/Concurrent.hs 29;" f -addSouthPillars src/Dodge/Room/LongDoor.hs 87;" f +addSouthPillars src/Dodge/Room/LongDoor.hs 88;" f addTermSignal src/Dodge/Event/Input.hs 31;" f addToTrunk src/TreeHelp.hs 157;" f addWarningTerminal src/Dodge/Room/Warning.hs 61;" f @@ -2503,11 +2505,11 @@ aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 181;" f airlock src/Dodge/Room/Airlock.hs 28;" f airlock0 src/Dodge/Room/Airlock.hs 78;" f -airlock90 src/Dodge/Room/Airlock.hs 190;" f -airlockCrystal src/Dodge/Room/Airlock.hs 238;" f +airlock90 src/Dodge/Room/Airlock.hs 199;" f +airlockCrystal src/Dodge/Room/Airlock.hs 249;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 102;" f airlockSimple src/Dodge/Room/Airlock.hs 127;" f -airlockZ src/Dodge/Room/Airlock.hs 155;" f +airlockZ src/Dodge/Room/Airlock.hs 164;" f allVisibleWalls src/Dodge/Base/Collide.hs 224;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f @@ -2859,7 +2861,7 @@ concurrentIS src/Dodge/Update/Input/InGame.hs 287;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f constructEdges src/Polyhedra.hs 34;" f constructEdgesList src/Polyhedra.hs 43;" f -contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 57;" f +contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f continueTerminal src/Dodge/Update/Input/InGame.hs 402;" f convexHull src/Geometry/Polygon.hs 142;" f convexHullSafe src/Geometry/Polygon.hs 149;" f @@ -3095,13 +3097,12 @@ destroyBlock src/Dodge/Block.hs 17;" f destroyDoor src/Dodge/DrWdWd.hs 75;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyItem src/Dodge/Inventory.hs 62;" f -destroyLS src/Dodge/LightSource.hs 32;" f -destroyLSFlashAt src/Dodge/LightSource.hs 42;" f +destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 13;" f destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 22;" f -destroyMount src/Dodge/DrWdWd.hs 95;" f -destroyMounts src/Dodge/DrWdWd.hs 92;" f +destroyMount src/Dodge/DrWdWd.hs 96;" f +destroyMounts src/Dodge/DrWdWd.hs 93;" f destroyProjectile src/Dodge/Projectile/Update.hs 108;" f detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f @@ -3128,7 +3129,7 @@ dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f divideCircle src/Geometry.hs 321;" f -divideDoorPane src/Dodge/Placement/Instance/Door.hs 64;" f +divideDoorPane src/Dodge/Placement/Instance/Door.hs 71;" f divideLine src/Geometry.hs 248;" f divideLineExact src/Geometry.hs 276;" f divideLineOddNumPoints src/Geometry.hs 261;" f @@ -3148,8 +3149,8 @@ doCrGroupUpdate src/Dodge/CrGroupUpdate.hs 5;" f doCrImp src/Dodge/CreatureEffect.hs 13;" f doCrWdAc src/Dodge/CreatureEffect.hs 47;" f doDamage src/Dodge/Creature/State.hs 43;" f -doDeathToggle src/Dodge/WorldEffect.hs 86;" f -doDeathTriggers src/Dodge/WorldEffect.hs 79;" f +doDeathToggle src/Dodge/WorldEffect.hs 91;" f +doDeathTriggers src/Dodge/WorldEffect.hs 84;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 23;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 38;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 66;" f @@ -3177,8 +3178,8 @@ doModificationEffect src/Dodge/ModificationEffect.hs 7;" f doPrWdLsLs src/Dodge/PrWdLsLs.hs 8;" f doPreload appDodge/Main.hs 139;" f doPropUpdates src/Dodge/Prop/Update.hs 31;" f -doQuickload src/Dodge/Save.hs 82;" f -doQuicksave src/Dodge/Save.hs 76;" f +doQuickload src/Dodge/Save.hs 83;" f +doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f doRegexInput src/Dodge/Update/Input/InGame.hs 447;" f doRoomPlacements src/Dodge/Layout.hs 104;" f @@ -3192,7 +3193,7 @@ doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 128;" f doTimeScroll src/Dodge/Update.hs 199;" f -doTmWdWd src/Dodge/WorldEffect.hs 89;" f +doTmWdWd src/Dodge/WorldEffect.hs 94;" f doWallRotate src/Dodge/Update/Camera.hs 220;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f @@ -3371,7 +3372,7 @@ ebEffect src/Dodge/EnergyBall.hs 45;" f ebFlicker src/Dodge/EnergyBall.hs 70;" f ebtToDamage src/Dodge/EnergyBall.hs 93;" f edgeFormatting src/Dodge/Combine/Graph.hs 129;" f -edgeToPic src/Dodge/Debug/Picture.hs 416;" f +edgeToPic src/Dodge/Debug/Picture.hs 413;" f effectOnEquip src/Dodge/Equipment.hs 32;" f effectOnRemove src/Dodge/Equipment.hs 19;" f eitType src/Dodge/Data/EquipType.hs 15;" f @@ -3412,7 +3413,7 @@ errorIsLHS src/Geometry.hs 65;" f errorNormalizeV src/Geometry.hs 54;" f errorPointInPolygon src/Geometry.hs 46;" f evenOddSplit src/Dodge/Base.hs 160;" f -exitTerminalSubInv src/Dodge/WorldEffect.hs 116;" f +exitTerminalSubInv src/Dodge/WorldEffect.hs 121;" f expandLine src/Dodge/Picture.hs 30;" f expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f @@ -3680,7 +3681,7 @@ horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 188;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 82;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 185;" f -iShape src/Dodge/Placement/Instance/LightSource.hs 84;" f +iShape src/Dodge/Placement/Instance/LightSource.hs 88;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f ildtPropagate src/Dodge/DoubleTree.hs 111;" f @@ -3856,11 +3857,11 @@ itmBaseInfo src/Dodge/Item/Info.hs 30;" f itmEquipSiteInfo src/Dodge/Item/Info.hs 250;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f -jShape src/Dodge/Placement/Instance/LightSource.hs 96;" f +jShape src/Dodge/Placement/Instance/LightSource.hs 103;" f joinItemsInList src/Dodge/Item/Grammar.hs 206;" f joystick src/Dodge/Item/Scope.hs 149;" f -jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f -jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f +jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f +jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 64;" f jsps src/Dodge/LevelGen/PlacementHelper.hs 36;" f jsps0 src/Dodge/LevelGen/PlacementHelper.hs 39;" f jsps0J src/Dodge/LevelGen/PlacementHelper.hs 48;" f @@ -3879,7 +3880,7 @@ knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f lChasm src/Dodge/Room/Tutorial.hs 152;" f lConnect src/Dodge/Render/Connectors.hs 42;" f lConnectMulti src/Dodge/Render/Connectors.hs 46;" f -lShape src/Dodge/Placement/Instance/LightSource.hs 87;" f +lShape src/Dodge/Placement/Instance/LightSource.hs 91;" f lamp src/Dodge/Creature/Lamp.hs 21;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 85;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 141;" f @@ -3905,7 +3906,7 @@ ldtToDT src/Dodge/DoubleTree.hs 16;" f ldtToIM src/Dodge/DoubleTree.hs 219;" f ldtToIndentList src/Dodge/DoubleTree.hs 222;" f ldtToLoc src/Dodge/DoubleTree.hs 268;" f -leaveResetQuitTerminal src/Dodge/WorldEffect.hs 110;" f +leaveResetQuitTerminal src/Dodge/WorldEffect.hs 115;" f led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 185;" f @@ -3917,7 +3918,7 @@ leftRightCombine src/Dodge/Item/Grammar.hs 197;" f leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f legsSPic src/Dodge/Item/Draw/SPic.hs 468;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -liShape src/Dodge/Placement/Instance/LightSource.hs 109;" f +liShape src/Dodge/Placement/Instance/LightSource.hs 116;" f light src/Color.hs 104;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 51;" f lightSensInsideDoor src/Dodge/Room/LasTurret.hs 39;" f @@ -3949,7 +3950,7 @@ lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 387;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 630;" f -loadSaveSlot src/Dodge/Save.hs 73;" f +loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f @@ -3988,11 +3989,11 @@ 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 26;" f -lsColPos src/Dodge/LightSource.hs 23;" f -lsColPosID src/Dodge/LightSource.hs 20;" f -lsColPosRad src/Dodge/LightSource.hs 29;" f -lsPosCol src/Dodge/LightSource.hs 26;" f -lsPosRad src/Dodge/LightSource.hs 17;" f +lsColPos src/Dodge/LightSource.hs 24;" f +lsColPosID src/Dodge/LightSource.hs 21;" f +lsColPosRad src/Dodge/LightSource.hs 30;" f +lsPosCol src/Dodge/LightSource.hs 27;" f +lsPosRad src/Dodge/LightSource.hs 18;" f ltAutoCrit src/Dodge/Creature/LtAutoCrit.hs 12;" f m src/ShortShow.hs 48;" f mAT src/Dodge/Item/MagAmmoType.hs 19;" f @@ -4151,11 +4152,11 @@ mkCustomLenses src/ThirdPartyLens.hs 7;" f mkGraphFromEdges src/GraphHelp.hs 4;" f mkNode src/Dodge/Graph.hs 29;" f mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f -mntLS src/Dodge/Placement/Instance/LightSource.hs 133;" f -mntLSCond src/Dodge/Placement/Instance/LightSource.hs 156;" f -mntLSOn src/Dodge/Placement/Instance/LightSource.hs 64;" f -mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 173;" f -mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 178;" f +mntLS src/Dodge/Placement/Instance/LightSource.hs 140;" f +mntLSCond src/Dodge/Placement/Instance/LightSource.hs 163;" f +mntLSOn src/Dodge/Placement/Instance/LightSource.hs 68;" f +mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 180;" f +mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 185;" f modTo src/Geometry/Zone.hs 10;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 60;" f mouseCursorType src/Dodge/Render/Picture.hs 92;" f @@ -4163,7 +4164,7 @@ mouseWorldPos src/Dodge/Base/Coordinate.hs 25;" f moveBullet src/Dodge/Bullet.hs 197;" f moveCombineSel src/Dodge/Update/Scroll.hs 121;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 44;" f -moveLSThen src/Dodge/Placement/Instance/LightSource.hs 43;" f +moveLSThen src/Dodge/Placement/Instance/LightSource.hs 47;" f movePenBullet src/Dodge/Bullet.hs 203;" f moveProjectile src/Dodge/Projectile/Update.hs 209;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f @@ -4239,7 +4240,7 @@ numShads src/Picture/Data.hs 40;" f numSubElements src/Shader/Parameters.hs 39;" f numTraversable src/TreeHelp.hs 184;" f obstacleColor src/Dodge/Debug/Picture.hs 270;" f -obstructPathsCrossing src/Dodge/Path.hs 121;" f +obstructPathsCrossing src/Dodge/Path.hs 122;" f oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 698;" f onEquipWristShield src/Dodge/Equipment.hs 37;" f onRemoveWristShield src/Dodge/Equipment.hs 24;" f @@ -4467,24 +4468,24 @@ prismBox src/Shape.hs 73;" f prismPoly src/Shape.hs 59;" f projV src/Geometry/Vector.hs 177;" f projV3 src/Geometry/Vector3D.hs 127;" f -propLSThen src/Dodge/Placement/Instance/LightSource.hs 29;" f +propLSThen src/Dodge/Placement/Instance/LightSource.hs 33;" f propSPic src/Dodge/Prop/Draw.hs 18;" f propUpdateIf src/Dodge/Prop/Update.hs 20;" f propUpdatePosition src/Dodge/Prop/Update.hs 25;" f propagateOrientation src/Dodge/Item/Orientation.hs 80;" f -ps0 src/Dodge/LevelGen/PlacementHelper.hs 51;" f -ps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 79;" f -ps0PushPSw src/Dodge/LevelGen/PlacementHelper.hs 83;" f -ps0j src/Dodge/LevelGen/PlacementHelper.hs 67;" f -ps0jPushPS src/Dodge/LevelGen/PlacementHelper.hs 74;" f +ps0 src/Dodge/LevelGen/PlacementHelper.hs 52;" f +ps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 80;" f +ps0PushPSw src/Dodge/LevelGen/PlacementHelper.hs 84;" f +ps0j src/Dodge/LevelGen/PlacementHelper.hs 68;" f +ps0jPushPS src/Dodge/LevelGen/PlacementHelper.hs 75;" f psPt src/Dodge/LevelGen/PlacementHelper.hs 24;" f psPtCont src/Dodge/LevelGen/PlacementHelper.hs 18;" f psPtJpl src/Dodge/LevelGen/PlacementHelper.hs 12;" f psPtPl src/Dodge/LevelGen/PlacementHelper.hs 9;" f psRandRanges src/Dodge/PlacementSpot.hs 260;" f -psj src/Dodge/LevelGen/PlacementHelper.hs 70;" f +psj src/Dodge/LevelGen/PlacementHelper.hs 71;" f psposAddLabel src/Dodge/PlacementSpot.hs 69;" f -pt0 src/Dodge/LevelGen/PlacementHelper.hs 54;" f +pt0 src/Dodge/LevelGen/PlacementHelper.hs 55;" f ptCont src/Dodge/LevelGen/PlacementHelper.hs 21;" f pulseChecker src/Dodge/Item/Equipment.hs 103;" f pushCreatureOutFromWalls src/Dodge/WallCreatureCollisions.hs 57;" f @@ -4495,7 +4496,7 @@ pushOutFromWall src/Dodge/WallCreatureCollisions.hs 101;" f pushOutFromWalls src/Dodge/WallCreatureCollisions.hs 64;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f -putAutoDoor src/Dodge/Placement/Instance/Door.hs 83;" f +putAutoDoor src/Dodge/Placement/Instance/Door.hs 93;" f putBlockN src/Dodge/Placement/Instance/Wall.hs 169;" f putBlockRect src/Dodge/Placement/Instance/Wall.hs 148;" f putBlockV src/Dodge/Placement/Instance/Wall.hs 156;" f @@ -4503,7 +4504,7 @@ putDoor src/Dodge/Room/Airlock.hs 114;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 27;" f putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 65;" f -putLamp src/Dodge/Placement/Instance/LightSource.hs 219;" f +putLamp src/Dodge/Placement/Instance/LightSource.hs 236;" f putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" f putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 103;" f @@ -4567,7 +4568,7 @@ randomTreeStructure src/Dodge/Layout/Generate.hs 18;" f randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 216;" f -readSaveSlot src/Dodge/Save.hs 44;" f +readSaveSlot src/Dodge/Save.hs 45;" f recoilAmount src/Dodge/HeldUse.hs 467;" f rectNSWE src/Geometry/Polygon.hs 15;" f rectVV src/Geometry/Polygon.hs 40;" f @@ -4591,7 +4592,7 @@ refreshOptionsSelectionList src/Dodge/Menu/Option.hs 35;" f regexCombs src/Dodge/DisplayInventory.hs 71;" f regexList src/Dodge/DisplayInventory.hs 308;" f reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 602;" f -reloadLevelStart src/Dodge/Save.hs 70;" f +reloadLevelStart src/Dodge/Save.hs 71;" f reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 600;" f rememberSounds src/Dodge/Creature/Perception.hs 176;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f @@ -4616,7 +4617,7 @@ replacePutID src/Dodge/Placement/Instance/Wall.hs 105;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 47;" f resetPLUse src/Dodge/PlacementSpot.hs 92;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f -resetTerminal src/Dodge/WorldEffect.hs 104;" f +resetTerminal src/Dodge/WorldEffect.hs 109;" f resizeFBOTO src/Framebuffer/Update.hs 203;" f resizeFBOTO3 src/Framebuffer/Update.hs 175;" f resizeRBO src/Framebuffer/Update.hs 87;" f @@ -4723,8 +4724,8 @@ safeUpdateSingleNode src/TreeHelp.hs 116;" f saveConfig src/Dodge/Config.hs 23;" f saveQuit src/Dodge/Menu.hs 79;" f saveQuitConc src/Dodge/Menu.hs 82;" f -saveSlotPath src/Dodge/Save.hs 62;" f -saveWorldInSlot src/Dodge/Save.hs 67;" f +saveSlotPath src/Dodge/Save.hs 63;" f +saveWorldInSlot src/Dodge/Save.hs 68;" f sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 714;" f scToTS src/Dodge/Event/Input.hs 34;" f scale src/Picture/Base.hs 149;" f @@ -4899,9 +4900,9 @@ showEquipItem src/Dodge/Item/Display.hs 107;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f -showManObj src/Dodge/TestString.hs 45;" f +showManObj src/Dodge/TestString.hs 47;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 68;" f +showTimeFlow src/Dodge/TestString.hs 70;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 174;" f shrinkVert src/Geometry/Polygon.hs 178;" f shuffle src/RandomHelp.hs 49;" f @@ -4925,8 +4926,8 @@ slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 670;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 604;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 688;" f slideWindow src/ListHelp.hs 80;" f -slowDoorRoom src/Dodge/Room/LongDoor.hs 160;" f -slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 177;" f +slowDoorRoom src/Dodge/Room/LongDoor.hs 141;" f +slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 158;" f smallBattery src/Dodge/Item/Ammo.hs 60;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f @@ -4941,7 +4942,7 @@ smallSnailInt2 src/Dodge/Path.hs 82;" f smg src/Dodge/Item/Held/Stick.hs 58;" f smokeReducer src/Dodge/Item/Scope.hs 162;" f snailAround src/Dodge/Path.hs 79;" f -snapToGrid src/Dodge/Path.hs 130;" f +snapToGrid src/Dodge/Path.hs 131;" f sndV2 src/Geometry/Data.hs 73;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f someCrits src/Dodge/LockAndKey.hs 120;" f @@ -4961,12 +4962,13 @@ soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 150;" f soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f -southPillarsRoom src/Dodge/Room/LongDoor.hs 84;" f +southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f spaceAction src/Dodge/Update/Input/InGame.hs 528;" f -spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 203;" f -spanColLightI src/Dodge/Placement/Instance/LightSource.hs 196;" f -spanLS src/Dodge/Placement/Instance/LightSource.hs 188;" f -spanLightI src/Dodge/Placement/Instance/LightSource.hs 210;" f +spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 210;" f +spanColLightI src/Dodge/Placement/Instance/LightSource.hs 203;" f +spanLS src/Dodge/Placement/Instance/LightSource.hs 195;" f +spanLightI src/Dodge/Placement/Instance/LightSource.hs 217;" f +spanLightY src/Dodge/Placement/Instance/LightSource.hs 220;" f sparkDam src/Dodge/Spark.hs 36;" f sparkGun src/Dodge/Item/Held/BatteryGuns.hs 13;" f sparkRandDir src/Dodge/Spark.hs 116;" f @@ -5033,7 +5035,7 @@ stone4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 484;" f stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 626;" f stopAllSounds src/Sound.hs 125;" f stopBulletAt src/Dodge/Bullet.hs 200;" f -stopPushing src/Dodge/DrWdWd.hs 102;" f +stopPushing src/Dodge/DrWdWd.hs 101;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f @@ -5100,7 +5102,7 @@ teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f testCrossWalls src/Dodge/Room/Path.hs 49;" f testEvent src/Dodge/Event/Test.hs 9;" f testInventory src/Dodge/Creature.hs 292;" f -testStringInit src/Dodge/TestString.hs 33;" f +testStringInit src/Dodge/TestString.hs 34;" f text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f textInputBlurb src/Dodge/Terminal.hs 37;" f @@ -5173,10 +5175,10 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 448;" f topInvW src/Dodge/ListDisplayParams.hs 49;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 41;" f +topTestPart src/Dodge/TestString.hs 43;" f torchShape src/Dodge/Item/Draw/SPic.hs 276;" f torqueAmount src/Dodge/HeldUse.hs 581;" f -torqueCr src/Dodge/WorldEffect.hs 72;" f +torqueCr src/Dodge/WorldEffect.hs 77;" f torso src/Dodge/Creature/Picture.hs 102;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f @@ -5254,8 +5256,8 @@ tutRezBox src/Dodge/Room/Tutorial.hs 379;" f tutRoomTree src/Dodge/Floor.hs 21;" f tutorialMessage1 src/Dodge/Room/Tutorial.hs 403;" f tweenAngles src/Geometry/Vector.hs 190;" f -twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 78;" f -twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 33;" f +twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f +twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f twists src/Dodge/Creature/Test.hs 102;" f twoFlat src/Dodge/Creature/Test.hs 99;" f twoFlatHRot src/Dodge/Item/HeldOffset.hs 80;" f @@ -5316,9 +5318,9 @@ updateDoors src/Dodge/Update.hs 311;" f updateDust src/Dodge/Update.hs 823;" f updateDusts src/Dodge/Update.hs 673;" f updateEdge src/Dodge/Path.hs 47;" f -updateEdgeWallObs src/Dodge/Update/WallDamage.hs 34;" f -updateEdgesWall src/Dodge/Update/WallDamage.hs 27;" f -updateEdgesWall' src/Dodge/Update/WallDamage.hs 31;" f +updateEdgeWallObs src/Dodge/Update/WallDamage.hs 33;" f +updateEdgesWall src/Dodge/Update/WallDamage.hs 24;" f +updateEdgesWall' src/Dodge/Update/WallDamage.hs 30;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f updateEnergyBalls src/Dodge/Update.hs 661;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 505;" f @@ -5446,7 +5448,7 @@ vCen3 src/Geometry/Vector3D.hs 115;" f vInverse src/Geometry/Vector.hs 154;" f vNormal src/Geometry/Vector.hs 149;" f vNormaly src/Geometry/Vector3D.hs 72;" f -vShape src/Dodge/Placement/Instance/LightSource.hs 123;" f +vShape src/Dodge/Placement/Instance/LightSource.hs 130;" f vToL src/MatrixHelper.hs 46;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f