From 0fd7ba46b513fbdf2835ccddaa70c35e78fc1eec Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 22 Oct 2025 22:47:10 +0100 Subject: [PATCH] Door destruction happens during door update, updates pathing --- src/Dodge/Block.hs | 36 -------- src/Dodge/Data/Door.hs | 1 - src/Dodge/Data/WorldEffect.hs | 5 +- src/Dodge/Default/Door.hs | 1 - src/Dodge/DrWdWd.hs | 91 ++++++++++-------- src/Dodge/Path.hs | 14 +-- src/Dodge/Update.hs | 18 +--- src/Dodge/Wall/Damage.hs | 10 +- tags | 167 ++++++++++++++++------------------ 9 files changed, 145 insertions(+), 198 deletions(-) diff --git a/src/Dodge/Block.hs b/src/Dodge/Block.hs index a028ea683..0aa60b983 100644 --- a/src/Dodge/Block.hs +++ b/src/Dodge/Block.hs @@ -1,7 +1,6 @@ module Dodge.Block ( splinterBlock, destroyBlock, - destroyDoor, ) where import Dodge.Zoning.Wall @@ -13,10 +12,7 @@ import Data.Foldable import qualified Data.IntSet as IS import Data.Maybe import Dodge.Block.Debris -import Dodge.Data.MountedObject import Dodge.Data.World -import Dodge.DrWdWd -import Dodge.LightSource import Dodge.Material.Sound import Dodge.Wall.Delete import Dodge.Wall.Zone @@ -83,35 +79,3 @@ maybeClearPath w (i,j) = fromMaybe w $ do ---- w ---- & cWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles .~ mempty) . FGL.delEdge (x, y) -destroyDoor :: Door -> World -> World -destroyDoor dr w = - w - & doDrWdWd (_drDeath dr) dr - & deleteWallIDs wlids - & cWorld . lWorld . doors %~ IM.delete (_drID dr) --- & muchWlDustAt awl (0.5 * uncurry (+) (_drPos dr)) --- & flip (foldl' (flip $ muchWlDustAt awl)) (map (pos +.+) ps) - & stopPushing (_drPushes dr) - & destroyMounts (_drMounts dr) - where - wlids = _drWallIDs dr - --awl = _walls (_cWorld w) IM.! IS.findMin wlids --- awl = w ^?! cWorld . lWorld . walls . ix (IS.findMin wlids) --- pos = fst . _wlLine $ awl --- ps = replicateM 25 (randInCirc 20) & evalState $ _randGen w - -destroyMounts :: [MountedObject] -> World -> World -destroyMounts mos w = foldl' (flip destroyMount) w mos - -destroyMount :: MountedObject -> World -> World -destroyMount mo = case mo of - MountedLS lsid -> destroyLS lsid - MountedProp prid -> cWorld . lWorld . props . at prid .~ Nothing - -stopPushing :: Maybe Int -> World -> World -stopPushing mdrid w = fromMaybe w $ do - drid <- mdrid - dr <- w ^? cWorld . lWorld . doors . ix drid - return $ - w & cWorld . lWorld . doors . ix drid . drMech .~ DrWdId - & stopPushing (_drPushes dr) diff --git a/src/Dodge/Data/Door.hs b/src/Dodge/Data/Door.hs index 382323e39..228a6e4f5 100644 --- a/src/Dodge/Data/Door.hs +++ b/src/Dodge/Data/Door.hs @@ -37,7 +37,6 @@ data Door = Door , _drLerp :: Float , _drFootPrint :: IM.IntMap (Point2,Point2) , _drHP :: Int - , _drDeath :: DrWdWd , _drSpeed :: Float , _drPushedBy :: PushSource , _drPushes :: Maybe Int diff --git a/src/Dodge/Data/WorldEffect.hs b/src/Dodge/Data/WorldEffect.hs index 0d2a1f327..40542e501 100644 --- a/src/Dodge/Data/WorldEffect.hs +++ b/src/Dodge/Data/WorldEffect.hs @@ -60,10 +60,7 @@ data WdP2f = WdP2f0 | WdP2fDoorPosition Int -data DrWdWd - = DrWdId - | DrWdMakeDoorDebris - | DoorLerp +data DrWdWd = DrWdId | DoorLerp deriveJSON defaultOptions ''ItCrWdWd deriveJSON defaultOptions ''WdWd diff --git a/src/Dodge/Default/Door.hs b/src/Dodge/Default/Door.hs index e68c6f37e..bc4fa3bf9 100644 --- a/src/Dodge/Default/Door.hs +++ b/src/Dodge/Default/Door.hs @@ -42,7 +42,6 @@ defaultDoor = , _drLerp = 0 , _drFootPrint = mempty , _drHP = 10000 - , _drDeath = DrWdMakeDoorDebris , _drSpeed = 1 , _drPushedBy = PushesItself , _drPushes = Nothing diff --git a/src/Dodge/DrWdWd.hs b/src/Dodge/DrWdWd.hs index 76ca0de4f..c5a8b1d0e 100644 --- a/src/Dodge/DrWdWd.hs +++ b/src/Dodge/DrWdWd.hs @@ -1,12 +1,15 @@ -module Dodge.DrWdWd (doDrWdWd,doDrWdWd') where +module Dodge.DrWdWd (updateDoor) where -import ListHelp +import Dodge.LightSource +import Data.Foldable +import Dodge.Wall.Delete +import Dodge.Block.Debris +import qualified Data.IntMap.Strict as IM import Dodge.Zoning.Pathing import Dodge.Zoning.Base import Geometry.Data import Control.Lens import Data.Maybe -import Dodge.Block.Debris import Dodge.Data.World import Dodge.ShiftPoint import Dodge.SoundLogic @@ -14,47 +17,19 @@ import Dodge.Wall.Move import Dodge.WorldBool import qualified Data.Set as S -doDrWdWd :: DrWdWd -> Door -> World -> World -doDrWdWd dww = case dww of - DrWdId -> const id - DrWdMakeDoorDebris -> makeDoorDebris - DoorLerp -> doorLerp +updateDoor :: Door -> World -> (S.Set Int2, World) +updateDoor dr w + | dr ^. drHP < 1 = destroyDoor dr w + | DoorLerp <- dr ^. drMech = doorLerp dr w + | otherwise = (mempty,w) -doDrWdWd' :: Door -> World -> (S.Set Int2, World) -doDrWdWd' dr w = case dr ^. drMech of - DrWdId -> (mempty,w) - DrWdMakeDoorDebris -> (mempty, makeDoorDebris dr w) - DoorLerp -> doorLerp' dr w - -doorLerp :: Door -> World -> World -doorLerp dr w = fromMaybe w $ do - x <- newlerp - return $ - f x - & playSound x - & cWorld . lWorld . doors . ix drid . drLerp .~ x - where - f = ifoldl' (flip . moveWallID) w . wlposs - p2a = lerpP2A (dr ^. drZeroPos) (dr ^. drOnePos) - wlposs x = (dr ^. drFootPrint) & each . each %~ shiftPointBy (p2a x) - clerp = dr ^. drLerp - newlerp - | toOpen && clerp < 1 = Just . min 1 $ clerp + speed - | clerp > 0 && not toOpen = Just . max 0 $ clerp - speed - | otherwise = Nothing - toOpen = doWdBl (_drTrigger dr) w - speed = _drSpeed dr - drid = _drID dr - playSound x - | _drPushedBy dr == PushesItself = - soundContinue (WallSound drid) (fst $ p2a x) slideDoorS (Just 1) - | otherwise = id - -doorLerp' :: Door -> World -> (S.Set Int2,World) -doorLerp' dr w = fromMaybe (mempty,w) $ do +doorLerp :: Door -> World -> (S.Set Int2,World) +doorLerp dr w = fromMaybe (mempty,w) $ do x <- newlerp let ps = (dr ^. drFootPrint) & each . each %~ shiftPointBy (p2a x) is = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize)) ps + -- it seems possible that this will miss some paths: we add zones for the + -- old footprint. Seems unlikely, but a possible cause of pathfinding bugs return $ (is, f x & playSound x @@ -75,3 +50,39 @@ doorLerp' dr w = fromMaybe (mempty,w) $ do | _drPushedBy dr == PushesItself = soundContinue (WallSound drid) (fst $ p2a x) slideDoorS (Just 1) | otherwise = id + +destroyDoor :: Door -> World -> (S.Set Int2, World) +destroyDoor dr w = + (is,w + & makeDoorDebris dr + & deleteWallIDs wlids + & cWorld . lWorld . doors %~ IM.delete (_drID dr) +-- & muchWlDustAt awl (0.5 * uncurry (+) (_drPos dr)) +-- & flip (foldl' (flip $ muchWlDustAt awl)) (map (pos +.+) ps) + & stopPushing (_drPushes dr) + & destroyMounts (_drMounts dr)) + where + p2a = lerpP2A (dr ^. drZeroPos) (dr ^. drOnePos) (dr ^. drLerp) + ps = (dr ^. drFootPrint) & each . each %~ shiftPointBy p2a + is = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize)) ps + wlids = _drWallIDs dr + --awl = _walls (_cWorld w) IM.! IS.findMin wlids +-- awl = w ^?! cWorld . lWorld . walls . ix (IS.findMin wlids) +-- pos = fst . _wlLine $ awl +-- ps = replicateM 25 (randInCirc 20) & evalState $ _randGen w + +destroyMounts :: [MountedObject] -> World -> World +destroyMounts mos w = foldl' (flip destroyMount) w mos + +destroyMount :: MountedObject -> World -> World +destroyMount mo = case mo of + MountedLS lsid -> destroyLS lsid + MountedProp prid -> cWorld . lWorld . props . at prid .~ Nothing + +stopPushing :: Maybe Int -> World -> World +stopPushing mdrid w = fromMaybe w $ do + drid <- mdrid + dr <- w ^? cWorld . lWorld . doors . ix drid + return $ + w & cWorld . lWorld . doors . ix drid . drMech .~ DrWdId + & stopPushing (_drPushes dr) diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index 081dcea2c..57f9d9dbe 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -40,13 +40,13 @@ import Linear getNodePos :: Int -> World -> Maybe Point2 getNodePos i w = w ^? cWorld . incNode . ix i -getEdgesCrossingPoly :: [Point2] -> World -> [(Int,Int)] -getEdgesCrossingPoly ps w = filter tcross $ zonesExtract (w ^. incEdgeZoning) - $ Set.toList $ foldMap (uncurry $ zoneOfSegSet peZoneSize) $ pairs - where - pairs = loopPairs ps - tcross (i,j) = any (isJust . uncurry (intersectSegSeg (f i) (f j))) pairs - f i = w ^?! cWorld . incNode . ix i +--getEdgesCrossingPoly :: [Point2] -> World -> [(Int,Int)] +--getEdgesCrossingPoly ps w = filter tcross $ zonesExtract (w ^. incEdgeZoning) +-- $ Set.toList $ foldMap (uncurry $ zoneOfSegSet peZoneSize) $ pairs +-- where +-- pairs = loopPairs ps +-- tcross (i,j) = any (isJust . uncurry (intersectSegSeg (f i) (f j))) pairs +-- f i = w ^?! cWorld . incNode . ix i getEdgesCrossing :: Point2 -> Point2 -> World -> [(Int,Int)] getEdgesCrossing s e w = filter inedgecrosses $ nearSeg peZoneSize _incEdgeZoning s e w diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 29442a886..9210c74eb 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -3,8 +3,6 @@ module Dodge.Update (updateUniverse) where -import Dodge.Zoning.Pathing -import Dodge.Debug.Picture import Dodge.Zoning.Base import Dodge.Path import Data.Foldable @@ -328,14 +326,8 @@ updateEdgeWallObs w (i,j) = fromMaybe w $ do | otherwise = at DoorObstacle ?~ () updateDoors :: World -> World -updateDoors w = let (is,w') = foldrM doDrWdWd' w (w ^. cWorld . lWorld . doors) +updateDoors w = let (is,w') = foldrM updateDoor w (w ^. cWorld . lWorld . doors) in updateEdgesWall (zonesExtract (w ^. incEdgeZoning & each . each %~ S.fromList) is) w' - & cWorld . lWorld . flares <>~ foldMap (drawZoneCol green peZoneSize) is ---updateDoors w = uncurry updateEdgesWall . --- over _1 (zonesExtract (w ^. incEdgeZoning & each . each %~ S.fromList)) $ foldrM doDrWdWd' w (w ^. cWorld . lWorld . doors) - -updateDoor :: Door -> World -> World -updateDoor dr = doDrWdWd (_drMech dr) dr updateMagnets :: LWorld -> LWorld updateMagnets lw = @@ -561,14 +553,6 @@ updateIMl fim fup w = alaf Endo foldMap (dbArg fup) (fim w) w updateIMl' :: (World -> IM.IntMap a) -> (a -> World -> World) -> World -> World updateIMl' fim fup w = alaf Endo foldMap fup (fim w) w -updateAccum :: (Foldable f, Monoid m) - => (World -> f a) - -> (a -> World -> (m, World)) - -> World - -> (m, World) -updateAccum fim fup w = foldrM fup w (fim w) - --alaf Endo foldMap fup (fim w) w - updateCreatureGroups :: World -> World updateCreatureGroups w = w & cWorld . lWorld . creatureGroups diff --git a/src/Dodge/Wall/Damage.hs b/src/Dodge/Wall/Damage.hs index 86c8a3e7a..485788e01 100644 --- a/src/Dodge/Wall/Damage.hs +++ b/src/Dodge/Wall/Damage.hs @@ -20,7 +20,7 @@ damageWall dt wl w = case _wlStructure wl of & maybeDestroyBlock blid DoorPart drid -> w' & cWorld . lWorld . doors . ix drid . drHP -~ x - & maybeDestroyDoor drid +-- & maybeDestroyDoor drid _ -> w' where x = case dt of @@ -34,7 +34,7 @@ maybeDestroyBlock blid w = case w ^? cWorld . lWorld . blocks . ix blid of Just bl | _blHP bl < 1 -> destroyBlock bl w _ -> w -maybeDestroyDoor :: Int -> World -> World -maybeDestroyDoor drid w = case w ^? cWorld . lWorld . doors . ix drid of - Just dr | _drHP dr < 1 -> destroyDoor dr w - _ -> w +--maybeDestroyDoor :: Int -> World -> World +--maybeDestroyDoor drid w = case w ^? cWorld . lWorld . doors . ix drid of +-- Just dr | _drHP dr < 1 -> destroyDoor dr w +-- _ -> w diff --git a/tags b/tags index c6f43f185..1126d484b 100644 --- a/tags +++ b/tags @@ -350,13 +350,12 @@ DoReplicate src/Dodge/Data/ActionPlan.hs 106;" C DoReplicatePartial src/Dodge/Data/ActionPlan.hs 110;" C DockingBaySS src/Dodge/Data/Scenario.hs 92;" C Door src/Dodge/Data/Door.hs 30;" t -DoorLerp src/Dodge/Data/WorldEffect.hs 66;" C +DoorLerp src/Dodge/Data/WorldEffect.hs 63;" C DoorObstacle src/Dodge/Data/PathGraph.hs 50;" C DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C DoubleRes src/Dodge/Data/Config.hs 98;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t -DrWdId src/Dodge/Data/WorldEffect.hs 64;" C -DrWdMakeDoorDebris src/Dodge/Data/WorldEffect.hs 65;" C +DrWdId src/Dodge/Data/WorldEffect.hs 63;" C DrWdWd src/Dodge/Data/WorldEffect.hs 63;" t DrawForceField src/Dodge/Data/Wall.hs 45;" C DrawnWall src/Dodge/Data/Wall.hs 41;" C @@ -1755,18 +1754,17 @@ _doReplicateAction src/Dodge/Data/ActionPlan.hs 113;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 107;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 112;" f _doors src/Dodge/Data/LWorld.hs 118;" f -_drDeath src/Dodge/Data/Door.hs 40;" f _drFootPrint src/Dodge/Data/Door.hs 38;" f _drHP src/Dodge/Data/Door.hs 39;" f _drID src/Dodge/Data/Door.hs 31;" f _drLerp src/Dodge/Data/Door.hs 37;" f _drMech src/Dodge/Data/Door.hs 34;" f -_drMounts src/Dodge/Data/Door.hs 44;" f -_drObstacleType src/Dodge/Data/Door.hs 46;" f +_drMounts src/Dodge/Data/Door.hs 43;" f +_drObstacleType src/Dodge/Data/Door.hs 45;" f _drOnePos src/Dodge/Data/Door.hs 36;" f -_drPushedBy src/Dodge/Data/Door.hs 42;" f -_drPushes src/Dodge/Data/Door.hs 43;" f -_drSpeed src/Dodge/Data/Door.hs 41;" f +_drPushedBy src/Dodge/Data/Door.hs 41;" f +_drPushes src/Dodge/Data/Door.hs 42;" f +_drSpeed src/Dodge/Data/Door.hs 40;" f _drTrigger src/Dodge/Data/Door.hs 33;" f _drWallIDs src/Dodge/Data/Door.hs 32;" f _drZeroPos src/Dodge/Data/Door.hs 35;" f @@ -2527,7 +2525,7 @@ addToTrunk src/TreeHelp.hs 157;" f addWarningTerminal src/Dodge/Room/Warning.hs 61;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 441;" f +advanceScrollAmount src/Dodge/Update.hs 438;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 60;" f aimDelaySweep src/Dodge/Render/Picture.hs 287;" f @@ -2780,13 +2778,13 @@ checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 70;" f checkDeath' src/Dodge/Creature/Update.hs 73;" f -checkEndGame src/Dodge/Update.hs 798;" f +checkEndGame src/Dodge/Update.hs 787;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 93;" f -checkTermDist src/Dodge/Update.hs 340;" f +checkTermDist src/Dodge/Update.hs 337;" f checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f @@ -2809,7 +2807,7 @@ circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f circleSolidCol src/Picture/Base.hs 168;" f clAlt src/Dodge/Cloud.hs 5;" f -clClSpringVel src/Dodge/Update.hs 871;" f +clClSpringVel src/Dodge/Update.hs 860;" f clColor src/Shader/Poke/Cloud.hs 35;" f clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f clampPath src/Dodge/Room/Procedural.hs 168;" f @@ -2836,7 +2834,7 @@ closeObjectInfo src/Dodge/Render/HUD.hs 226;" f closestPointOnLine src/Geometry/Intersect.hs 272;" f closestPointOnLineParam src/Geometry/Intersect.hs 288;" f closestPointOnSeg src/Geometry/Intersect.hs 303;" f -cloudEffect src/Dodge/Update.hs 823;" f +cloudEffect src/Dodge/Update.hs 812;" f cloudPoisonDamage src/Dodge/Update/Cloud.hs 11;" f clsNearCirc src/Dodge/Zoning/Cloud.hs 18;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f @@ -2915,7 +2913,7 @@ crAwayFromPost src/Dodge/Creature/Test.hs 85;" f crBlips src/Dodge/RadarSweep.hs 88;" f crCamouflage src/Dodge/Creature/Picture.hs 33;" f crCanSeeCr src/Dodge/Creature/Test.hs 52;" f -crCrSpring src/Dodge/Update.hs 900;" f +crCrSpring src/Dodge/Update.hs 889;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f @@ -2946,7 +2944,7 @@ crRad src/Dodge/Creature/Radius.hs 7;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 74;" f crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 897;" f +crSpring src/Dodge/Update.hs 886;" f crStratConMatches src/Dodge/Creature/Test.hs 80;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f crUpdate src/Dodge/Creature/Update.hs 63;" f @@ -3089,9 +3087,9 @@ defaultConfig src/Dodge/Data/Config.hs 128;" f defaultCraftItem src/Dodge/Default/Item.hs 25;" f defaultCreature src/Dodge/Default/Creature.hs 12;" f defaultCreatureMemory src/Dodge/Default/Creature.hs 65;" f -defaultCrystalWall src/Dodge/Default/Wall.hs 47;" f +defaultCrystalWall src/Dodge/Default/Wall.hs 43;" f defaultDirtBlock src/Dodge/Default/Block.hs 19;" f -defaultDirtWall src/Dodge/Default/Wall.hs 68;" f +defaultDirtWall src/Dodge/Default/Wall.hs 64;" f defaultDoor src/Dodge/Default/Door.hs 29;" f defaultDoorWall src/Dodge/Default/Wall.hs 39;" f defaultDrawButton src/Dodge/Button/Draw.hs 29;" f @@ -3107,17 +3105,17 @@ defaultInvSize src/Dodge/Default/Creature.hs 72;" f defaultLWorld src/Dodge/Default/World.hs 100;" f defaultListDisplayParams src/Dodge/ListDisplayParams.hs 18;" f defaultMachine src/Dodge/Default.hs 30;" f -defaultMachineWall src/Dodge/Default/Wall.hs 55;" f +defaultMachineWall src/Dodge/Default/Wall.hs 51;" f defaultPerceptionState src/Dodge/Default/Creature.hs 75;" f defaultProp src/Dodge/Default/Prop.hs 6;" f defaultProximitySensor src/Dodge/Default.hs 54;" f defaultRoom src/Dodge/Default/Room.hs 9;" f -defaultSensorWall src/Dodge/Default/Wall.hs 65;" f +defaultSensorWall src/Dodge/Default/Wall.hs 61;" f defaultSwitchWall src/Dodge/Default/Door.hs 22;" f defaultTerminal src/Dodge/Default/Terminal.hs 10;" f defaultVision src/Dodge/Default/Creature.hs 85;" f defaultWall src/Dodge/Default/Wall.hs 17;" f -defaultWindow src/Dodge/Default/Wall.hs 85;" f +defaultWindow src/Dodge/Default/Wall.hs 81;" f defaultWorld src/Dodge/Default/World.hs 31;" f degToRad src/Geometry/Vector.hs 118;" f deleteIMInZone src/Dodge/Base.hs 70;" f @@ -3127,8 +3125,8 @@ deleteWallID src/Dodge/Wall/Delete.hs 13;" f deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f denormalEdges src/Polyhedra.hs 136;" f destroyAllInvItems src/Dodge/Inventory.hs 53;" f -destroyBlock src/Dodge/Block.hs 52;" f -destroyDoor src/Dodge/Block.hs 86;" f +destroyBlock src/Dodge/Block.hs 51;" f +destroyDoor src/Dodge/Block.hs 85;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyItem src/Dodge/Inventory.hs 62;" f destroyLS src/Dodge/LightSource.hs 32;" f @@ -3136,8 +3134,8 @@ destroyLSFlashAt src/Dodge/LightSource.hs 42;" 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/Block.hs 106;" f -destroyMounts src/Dodge/Block.hs 103;" f +destroyMount src/Dodge/Block.hs 105;" f +destroyMounts src/Dodge/Block.hs 102;" 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 @@ -3151,7 +3149,7 @@ difference src/Geometry.hs 127;" f digitalLine src/Geometry.hs 285;" f digitalRect src/Geometry.hs 302;" f dim src/Color.hs 112;" f -dirtColor src/Dodge/Default/Wall.hs 81;" f +dirtColor src/Dodge/Default/Wall.hs 77;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f displayConfig src/Dodge/Menu.hs 230;" f @@ -3160,7 +3158,7 @@ displayFrameTicks src/Dodge/Render/Picture.hs 51;" f displayFreeSlots src/Dodge/DisplayInventory.hs 192;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 179;" f -displayTerminalLineString src/Dodge/Update.hs 505;" f +displayTerminalLineString src/Dodge/Update.hs 502;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f @@ -3196,8 +3194,6 @@ doDebugTestF12 src/Dodge/Update/Input/DebugTest.hs 84;" f doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 41;" f doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f -doDrWdWd src/Dodge/DrWdWd.hs 17;" f -doDrWdWd' src/Dodge/DrWdWd.hs 23;" f doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f doDrawing' src/Dodge/Render.hs 45;" f @@ -3236,12 +3232,11 @@ doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f doWdWd src/Dodge/WorldEffect.hs 28;" f -doWorldEvents src/Dodge/Update.hs 450;" f +doWorldEvents src/Dodge/Update.hs 447;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 14;" f doorBetween src/Dodge/Placement/Instance/Door.hs 39;" f -doorLerp src/Dodge/DrWdWd.hs 29;" f -doorLerp' src/Dodge/DrWdWd.hs 53;" f +doorLerp src/Dodge/DrWdWd.hs 20;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 276;" f @@ -3408,7 +3403,7 @@ dtToRootIntMap' src/Dodge/DoubleTree.hs 153;" f dtToUpDownAdj src/Dodge/DoubleTree.hs 158;" f dummyMenuOption src/Dodge/Menu/Option.hs 72;" f dustColor src/Shader/Poke/Cloud.hs 71;" f -dustSpringVel src/Dodge/Update.hs 882;" f +dustSpringVel src/Dodge/Update.hs 871;" f ebColor src/Dodge/EnergyBall.hs 77;" f ebDamage src/Dodge/EnergyBall.hs 85;" f ebEffect src/Dodge/EnergyBall.hs 45;" f @@ -3588,10 +3583,9 @@ getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 342;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 329;" f -getDebugMouseOver src/Dodge/Update.hs 398;" f +getDebugMouseOver src/Dodge/Update.hs 395;" f getDistortions src/Dodge/Render.hs 435;" f getEdgesCrossing src/Dodge/Path.hs 51;" f -getEdgesCrossingPoly src/Dodge/Path.hs 43;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 147;" f @@ -3600,7 +3594,7 @@ getLaserDamage src/Dodge/HeldUse.hs 704;" f getLaserPhaseV src/Dodge/HeldUse.hs 701;" f getLinksOfType src/Dodge/RoomLink.hs 41;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 410;" f +getMenuMouseContext src/Dodge/Update.hs 407;" f getNodePos src/Dodge/Path.hs 40;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f @@ -3834,7 +3828,7 @@ isNHS src/Geometry/Intersect.hs 53;" f isNothing' src/MaybeHelp.hs 31;" f isOnSeg src/Geometry.hs 237;" f isOutLnk src/Dodge/PlacementSpot.hs 166;" f -isOverTerminalScreen src/Dodge/Update.hs 421;" f +isOverTerminalScreen src/Dodge/Update.hs 418;" f isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f isPutID src/Dodge/Placement/Instance/Wall.hs 129;" f isRHS src/Geometry/LHS.hs 32;" f @@ -4116,8 +4110,8 @@ maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" f maxShowX src/Dodge/Combine/Graph.hs 48;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f -maybeClearPath src/Dodge/Block.hs 72;" f -maybeClearPaths src/Dodge/Block.hs 69;" f +maybeClearPath src/Dodge/Block.hs 71;" f +maybeClearPaths src/Dodge/Block.hs 68;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 32;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 37;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 562;" f @@ -4235,7 +4229,7 @@ muzzleRandPos src/Dodge/HeldUse.hs 778;" f mvButton src/Dodge/Placement/PlaceSpot.hs 193;" f mvCr src/Dodge/Placement/PlaceSpot.hs 196;" f mvFS src/Dodge/Placement/PlaceSpot.hs 203;" f -mvGust src/Dodge/Update.hs 814;" f +mvGust src/Dodge/Update.hs 803;" f mvLS src/Dodge/Placement/PlaceSpot.hs 275;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4348,7 +4342,7 @@ pauseMenu src/Dodge/Menu.hs 59;" f pauseMenuOptions src/Dodge/Menu.hs 66;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 185;" f -pbFlicker src/Dodge/Update.hs 491;" f +pbFlicker src/Dodge/Update.hs 488;" f pbsHit src/Dodge/WorldEvent/ThingsHit.hs 90;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f @@ -4603,7 +4597,7 @@ randPeakedParam src/RandomHelp.hs 130;" f randProb src/RandomHelp.hs 68;" f randSpark src/Dodge/Spark.hs 69;" f randSparkExtraVel src/Dodge/Spark.hs 92;" f -randWallReflect src/Dodge/Update.hs 673;" f +randWallReflect src/Dodge/Update.hs 662;" f randomChallenges src/Dodge/Room/Start.hs 63;" f randomCompass src/Dodge/Layout.hs 60;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 268;" f @@ -4854,7 +4848,7 @@ setLinkType src/Dodge/RoomLink.hs 78;" f setLinkTypePD src/Dodge/RoomLink.hs 85;" f setMusicVolume src/Sound.hs 162;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 58;" f -setOldPos src/Dodge/Update.hs 524;" f +setOldPos src/Dodge/Update.hs 521;" f setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f @@ -4965,7 +4959,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 82;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 891;" f +simpleCrSprings src/Dodge/Update.hs 880;" f simpleTermMessage src/Dodge/Terminal.hs 164;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 680;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 472;" f @@ -5035,7 +5029,7 @@ speedLegs src/Dodge/Item/Equipment.hs 90;" f splashMenu src/Dodge/Menu.hs 33;" f splashMenuOptions src/Dodge/Menu.hs 38;" f splashScreen src/Dodge/Initialisation.hs 10;" f -splinterBlock src/Dodge/Block.hs 26;" f +splinterBlock src/Dodge/Block.hs 25;" f splitBezierquad src/Geometry/Bezier.hs 15;" f splitExtra src/Justify.hs 21;" f splitLookupTrie src/SimpleTrie.hs 39;" f @@ -5091,7 +5085,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 199;" f -stopPushing src/Dodge/Block.hs 111;" f +stopPushing src/Dodge/Block.hs 110;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f @@ -5207,7 +5201,7 @@ titleOptionsMenu src/Dodge/Menu.hs 106;" f titleOptionsNoWrite src/Dodge/Menu.hs 109;" f tlDoEffect src/Dodge/Terminal.hs 102;" f tlSetStatus src/Dodge/Terminal.hs 99;" f -tmUpdate src/Dodge/Update.hs 508;" f +tmUpdate src/Dodge/Update.hs 505;" f toBinary src/Dodge/Inventory/SelectionList.hs 141;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f @@ -5336,14 +5330,13 @@ unpause src/Dodge/Menu.hs 212;" f unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 57;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 75;" f -unshadowBlock src/Dodge/Block.hs 39;" f +unshadowBlock src/Dodge/Block.hs 38;" f untilJust src/MonadHelp.hs 7;" f untilJustCount src/MonadHelp.hs 14;" f unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 131;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 137;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 119;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 196;" f -updateAccum src/Dodge/Update.hs 559;" f updateAimPos src/Dodge/Update.hs 309;" f updateAllNodes src/TreeHelp.hs 86;" f updateArc src/Dodge/Tesla.hs 44;" f @@ -5354,47 +5347,47 @@ updateBaseWheelEvent src/Dodge/Update/Scroll.hs 34;" f updateBounds src/Dodge/Update/Camera.hs 258;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f -updateBullets src/Dodge/Update.hs 595;" f +updateBullets src/Dodge/Update.hs 584;" f updateCamera src/Dodge/Update/Camera.hs 30;" f updateCloseObjects src/Dodge/Inventory.hs 115;" f -updateCloud src/Dodge/Update.hs 828;" f -updateClouds src/Dodge/Update.hs 699;" f +updateCloud src/Dodge/Update.hs 817;" f +updateClouds src/Dodge/Update.hs 688;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 32;" f updateCreature' src/Dodge/Creature/Update.hs 41;" f -updateCreatureGroups src/Dodge/Update.hs 567;" f -updateCreatureSoundPositions src/Dodge/Update.hs 538;" f -updateDebris src/Dodge/Update.hs 602;" f +updateCreatureGroups src/Dodge/Update.hs 556;" f +updateCreatureSoundPositions src/Dodge/Update.hs 535;" f +updateDebris src/Dodge/Update.hs 591;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 98;" f -updateDelayedEvents src/Dodge/Update.hs 920;" f +updateDelayedEvents src/Dodge/Update.hs 909;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 5;" f -updateDistortions src/Dodge/Update.hs 588;" f -updateDoor src/Dodge/Update.hs 332;" f +updateDistortions src/Dodge/Update.hs 577;" f +updateDoor src/Dodge/DrWdWd.hs 15;" f updateDoorEdge src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 74;" f updateDoorEdges src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 71;" f updateDoors src/Dodge/Update.hs 328;" f -updateDust src/Dodge/Update.hs 852;" f -updateDusts src/Dodge/Update.hs 702;" f +updateDust src/Dodge/Update.hs 841;" f +updateDusts src/Dodge/Update.hs 691;" f updateEdge src/Dodge/Path.hs 57;" f updateEdgeWallObs src/Dodge/Update.hs 317;" f updateEdgesWall src/Dodge/Update.hs 314;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f -updateEnergyBalls src/Dodge/Update.hs 690;" f +updateEnergyBalls src/Dodge/Update.hs 679;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 505;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 687;" f +updateFlames src/Dodge/Update.hs 676;" f updateFloatingCamera src/Dodge/Update/Camera.hs 35;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 363;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 359;" f -updateGusts src/Dodge/Update.hs 811;" f -updateIMl src/Dodge/Update.hs 553;" f -updateIMl' src/Dodge/Update.hs 556;" f +updateGusts src/Dodge/Update.hs 800;" f +updateIMl src/Dodge/Update.hs 550;" f +updateIMl' src/Dodge/Update.hs 553;" f updateInGameCamera src/Dodge/Update/Camera.hs 79;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 428;" f updateInt2Map src/Dodge/Zoning/Base.hs 98;" f @@ -5407,33 +5400,33 @@ updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 405;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 11;" f -updateLasers src/Dodge/Update.hs 457;" f +updateLasers src/Dodge/Update.hs 454;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 170;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 441;" f updateMachine src/Dodge/Machine/Update.hs 24;" f -updateMagnets src/Dodge/Update.hs 335;" f +updateMagnets src/Dodge/Update.hs 332;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 203;" f -updateMouseContext src/Dodge/Update.hs 348;" f -updateMouseContextGame src/Dodge/Update.hs 353;" f +updateMouseContext src/Dodge/Update.hs 345;" f +updateMouseContextGame src/Dodge/Update.hs 350;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 96;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 86;" f updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 166;" f -updateObjCatMaybes src/Dodge/Update.hs 579;" f -updateObjMapMaybe src/Dodge/Update.hs 572;" f -updatePastWorlds src/Dodge/Update.hs 446;" f +updateObjCatMaybes src/Dodge/Update.hs 568;" f +updateObjMapMaybe src/Dodge/Update.hs 561;" f +updatePastWorlds src/Dodge/Update.hs 443;" f updatePreload src/Preload/Update.hs 20;" f updateProjectile src/Dodge/Projectile/Update.hs 25;" f updateProp src/Dodge/Prop/Update.hs 11;" f updatePulse src/Dodge/Creature/Update.hs 146;" f -updatePulseBall src/Dodge/Update.hs 471;" f -updatePulseLaser src/Dodge/Update.hs 642;" f -updatePulseLasers src/Dodge/Update.hs 466;" f +updatePulseBall src/Dodge/Update.hs 468;" f +updatePulseLaser src/Dodge/Update.hs 631;" f +updatePulseLasers src/Dodge/Update.hs 463;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 591;" f +updateRadarBlips src/Dodge/Update.hs 580;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 693;" f +updateRadarSweeps src/Dodge/Update.hs 682;" f updateRandNode src/TreeHelp.hs 109;" f updateRenderSplit appDodge/Main.hs 112;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f @@ -5443,16 +5436,16 @@ updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 258;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 237;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 684;" f +updateShockwaves src/Dodge/Update.hs 673;" f updateSingleNodes src/TreeHelp.hs 98;" f updateSound src/Sound.hs 72;" f updateSounds src/Sound.hs 67;" f updateSpark src/Dodge/Spark.hs 19;" f -updateSparks src/Dodge/Update.hs 696;" f -updateTeslaArc src/Dodge/Update.hs 612;" f -updateTeslaArcs src/Dodge/Update.hs 609;" f +updateSparks src/Dodge/Update.hs 685;" f +updateTeslaArc src/Dodge/Update.hs 601;" f +updateTeslaArcs src/Dodge/Update.hs 598;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 681;" f +updateTractorBeams src/Dodge/Update.hs 670;" f updateTurret src/Dodge/Machine/Update.hs 49;" f updateUniverse src/Dodge/Update.hs 77;" f updateUniverseFirst src/Dodge/Update.hs 88;" f @@ -5463,7 +5456,7 @@ updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 23;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 11;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWheelEvent src/Dodge/Update/Scroll.hs 25;" f -updateWheelEvents src/Dodge/Update.hs 436;" f +updateWheelEvents src/Dodge/Update.hs 433;" f updateWorldEventFlag src/Dodge/Update.hs 123;" f updateWorldEventFlags src/Dodge/Update.hs 111;" f upperBody src/Dodge/Creature/Picture.hs 120;" f @@ -5617,7 +5610,7 @@ xIntercepts src/Dodge/Zoning/Base.hs 66;" f xV2 src/Geometry/Vector.hs 201;" f xyV3 src/Geometry/Vector.hs 213;" f xyzV4 src/Geometry/Vector.hs 209;" f -yIntercepts' src/Dodge/Zoning/Base.hs 82;" f +yIntercepts src/Dodge/Zoning/Base.hs 82;" f yV2 src/Geometry/Vector.hs 205;" f yellow src/Color.hs 17;" f you src/Dodge/Base/You.hs 13;" f @@ -5639,11 +5632,11 @@ zipArcs src/Dodge/Tesla.hs 52;" f zipCount src/Dodge/Tree/Shift.hs 136;" f zipCountDown src/Dodge/Room/Procedural.hs 121;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f -zoneClouds src/Dodge/Update.hs 498;" f +zoneClouds src/Dodge/Update.hs 495;" f zoneCreature src/Dodge/Zoning/Creature.hs 55;" f -zoneCreatures src/Dodge/Update.hs 534;" f +zoneCreatures src/Dodge/Update.hs 531;" f zoneDust src/Dodge/Zoning/Cloud.hs 48;" f -zoneDusts src/Dodge/Update.hs 502;" f +zoneDusts src/Dodge/Update.hs 499;" f zoneExtract src/Dodge/Zoning/Base.hs 58;" f zoneIncPe src/Dodge/Zoning/Pathing.hs 66;" f zoneMonoid src/Dodge/Zoning/Base.hs 89;" f