From 0ddedf7fd6cfe27ee205ae28f7f2f855ef1a7097 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 26 Mar 2026 20:25:59 +0000 Subject: [PATCH] Improve wall squashing further --- src/Dodge/Base/Collide.hs | 14 ++-- src/Dodge/Data/WorldEffect.hs | 1 - src/Dodge/Inventory.hs | 2 +- src/Dodge/Inventory/SelectionList.hs | 5 +- src/Dodge/TestString.hs | 17 ++++ src/Dodge/WallCreatureCollisions.hs | 14 +++- src/Dodge/WorldEffect.hs | 3 - src/Dodge/WorldEvent/ThingsHit.hs | 10 +-- tags | 112 +++++++++++++-------------- 9 files changed, 99 insertions(+), 79 deletions(-) diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index b45720a7f..50c6410d6 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -34,6 +34,7 @@ module Dodge.Base.Collide ( collide3, ) where +import Data.Foldable import qualified Data.IntMap.Strict as IM import Control.Lens import Control.Monad @@ -186,11 +187,11 @@ wallToSurface wl = (g x, g $ vNormal (x - y), [(g x, g (y - x)), (g y, g (x - y) -- this COULD be written in terms of collidePointWallsFilterStream, TODO test -- whether this is actually faster -collidePointTestFilter :: (Wall -> Bool) -> Point2 -> Point2 -> [Wall] -> Bool +collidePointTestFilter :: (Wall -> Bool) -> Point2 -> Point2 -> IM.IntMap Wall -> Bool {-# INLINE collidePointTestFilter #-} collidePointTestFilter t sp ep = any (isJust . uncurry (intersectSegSeg sp ep) . _wlLine) - . filter t + . IM.filter t ---- this COULD be written in terms of collidePointWallsFilterStream, TODO test ---- whether this is actually faster @@ -209,9 +210,9 @@ collidePointWallsFilter t sp ep = collidePoint sp ep . IM.filter t . wlsNearSeg -- {-# INLINE overlapSegWalls #-} -- overlapSegWalls sp ep = S.mapMaybe $ \wl -> uncurry (intersectSegSeg sp ep) (_wlLine wl) <&> (,wl) -overlapSegWalls :: Point2 -> Point2 -> [Wall] -> [(Point2, Wall)] +overlapSegWalls :: Point2 -> Point2 -> IM.IntMap Wall -> IM.IntMap (Point2, Wall) {-# INLINE overlapSegWalls #-} -overlapSegWalls sp ep = mapMaybe $ +overlapSegWalls sp ep = IM.mapMaybe $ \wl -> uncurry (intersectSegSeg sp ep) (_wlLine wl) <&> (,wl) visibleWalls :: Point2 -> Point2 -> World -> [(Point2, Wall)] @@ -219,8 +220,8 @@ visibleWalls :: Point2 -> Point2 -> World -> [(Point2, Wall)] visibleWalls sp ep = takeUntil (wlIsOpaque . snd) . sortOn (dist sp . fst) - . overlapSegWalls sp ep . IM.elems + . overlapSegWalls sp ep . wlsNearSeg sp ep allVisibleWalls :: World -> [(Point2, Wall)] @@ -298,7 +299,6 @@ hasLOS :: Point2 -> Point2 -> World -> Bool hasLOS p1 p2 = not . collidePointTestFilter (const True) p1 p2 - . IM.elems . wlsNearSeg p1 p2 hasButtonLOS :: Point2 -> Point2 -> World -> Bool @@ -315,7 +315,7 @@ hasLOSIndirect :: Point2 -> Point2 -> World -> Bool hasLOSIndirect p1 p2 = not . collidePointTestFilter wlIsOpaque p1 p2 - . IM.elems +-- . IM.elems . wlsNearSeg p1 p2 canSee :: Int -> Int -> World -> Bool diff --git a/src/Dodge/Data/WorldEffect.hs b/src/Dodge/Data/WorldEffect.hs index e98ec4d57..8e90584af 100644 --- a/src/Dodge/Data/WorldEffect.hs +++ b/src/Dodge/Data/WorldEffect.hs @@ -33,7 +33,6 @@ data WdWd | MakeStartCloudAt Point3 | TorqueCr Float Int | WdWdNegateTrig Int --- | WdWdFromItCrixWdWd (LabelDoubleTree ComposeLinkType Item) Int ItCrWdWd | MakeTempLight LSParam Int | MakeTempLightFade Float LSParam Int | UseInvItem Int Int -- invid presstime diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 1fc9fd435..8b29b35a8 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -142,7 +142,7 @@ updateCloseObjects w = x <- lw ^? terminals . ix tid . tmStatus return (x /= TerminalDeactivated) _ -> True - isclose x = dist y x < 40 && hasButtonLOS y x w + isclose x = dist y x < 30 && hasButtonLOS y x w y = you w ^. crPos . _xy changeSwapSelSet :: Int -> World -> World diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index 402f9fa31..a69c769e1 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -236,8 +236,9 @@ closeButtonToSelectionItem w i = do btText :: Button -> String btText bt = case _btEvent bt of ButtonPress {} -> "BUTTON" - ButtonSwitch {_btOn = t} -> if t then "SWITCH\\" else "SWITCH/" - ButtonDumbSwitch {} -> "SWITCH" + --ButtonSwitch {_btOn = t} -> if t then "SWITCH\\" else "SWITCH/" + ButtonSwitch {} -> "SWITCH" + ButtonDumbSwitch {} -> "SWITCH" -- do we want to show switch status? ButtonAccessTerminal i -> "TERMINAL " ++ show i closeItemToTextPictures :: Item -> ([String], Color) diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 3bd9f7a8e..76d8d7a9f 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -1,6 +1,7 @@ {-# OPTIONS_GHC -Wno-unused-imports #-} module Dodge.TestString where +import Dodge.WallCreatureCollisions import Data.List ((\\)) import ShortShow import Geometry @@ -34,6 +35,22 @@ import RandomHelp testStringInit :: Universe -> [String] testStringInit u = (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crWallTouch) + <> fromMaybe [] (do + w1 <- u ^? uvWorld . cWorld . lWorld . walls . ix 18 + w2 <- u ^? uvWorld . cWorld . lWorld . walls . ix 61 + let + f = uncurry (-) . (^. wlLine) + g = argV . f + h = normalizeV . uncurry (-) . (^. wlLine) + a = angleVV (f w1) (f w2) + return [show $ wlWlCrush w1 w2, show a , show (f w1), show (f w2) + , show $ g w1 + , show $ g w2 + , show $ h w1 + , show $ h w2 + , show (norm (h w1 + h w2)) + ] + ) -- <> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial) --testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir) --testStringInit u = map show diff --git a/src/Dodge/WallCreatureCollisions.hs b/src/Dodge/WallCreatureCollisions.hs index 0bdc33c3c..98b5f4e0c 100644 --- a/src/Dodge/WallCreatureCollisions.hs +++ b/src/Dodge/WallCreatureCollisions.hs @@ -1,5 +1,7 @@ -- | Deals with moving creature wall collisions. -module Dodge.WallCreatureCollisions (colCrsWalls) where +module Dodge.WallCreatureCollisions (colCrsWalls, + wlWlCrush + ) where import qualified Data.IntMap.Strict as IM import Control.Lens @@ -45,7 +47,8 @@ pushCr wls cr & crPos . _xy .~ ap | otherwise = ecr where - twls = IM.elems $ IM.restrictKeys wls (ecr ^. crWallTouch) + stwls = IM.filter (\wl -> uncurry circOnSegNoEndpoints (wl ^. wlLine) sp r) wls + twls = IM.elems $ IM.restrictKeys wls (ecr ^. crWallTouch) -- `IM.union` stwls ep = ecr ^. crPos . _xy ap = cr ^. crOldPos . _xy sp = cr ^. crPos . _xy @@ -60,9 +63,12 @@ wlsCrush [] = False wlsCrush (x:xs) = any (wlWlCrush x) xs || wlsCrush xs wlWlCrush :: Wall -> Wall -> Bool -wlWlCrush w1 w2 = angleVV (f w1) (f w2) > 0.75 * pi +wlWlCrush w1 w2 = norm (f w1 + f w2) < 0.5 where - f = uncurry (-) . (^. wlLine) + f = normalizeV . uncurry (-) . (^. wlLine) +--wlWlCrush w1 w2 = angleVV (f w1) (f w2) > 0.75 * pi +-- where +-- f = uncurry (-) . (^. wlLine) -- the amount to push creatures out from walls, extra to their radius wallBuffer :: Float diff --git a/src/Dodge/WorldEffect.hs b/src/Dodge/WorldEffect.hs index d2ccfd1c4..eee6b5efb 100644 --- a/src/Dodge/WorldEffect.hs +++ b/src/Dodge/WorldEffect.hs @@ -45,9 +45,6 @@ doWdWd = \case SoundStart so p sid mi -> soundStart so p sid mi WdWdNegateTrig trid -> cWorld . lWorld . triggers . ix trid %~ not WdWdSetSoundFilter x -> wSoundFilter .~ x - -- WdWdFromItCrixWdWd it crid f -> \w -> fromMaybe w $ do - -- cr <- w ^? cWorld . lWorld . creatures . ix crid - -- return $ doItCrWdWd f it cr w MakeTempLight _ 0 -> id MakeTempLight x t -> (cWorld . lWorld . lights .:~ x) diff --git a/src/Dodge/WorldEvent/ThingsHit.hs b/src/Dodge/WorldEvent/ThingsHit.hs index 3c9acb24d..e8754e961 100644 --- a/src/Dodge/WorldEvent/ThingsHit.hs +++ b/src/Dodge/WorldEvent/ThingsHit.hs @@ -154,19 +154,19 @@ thingsHitExceptCr (Just cid) sp ep = filter t . thingsHit sp ep t = (Just cid /=) . (^? _2 . _Left . crID) wlsHit :: Point2 -> Point2 -> World -> [(Point2, Wall)] -wlsHit sp ep = sortOn (dist sp . fst) . wlsHitUnsorted sp ep +wlsHit sp ep = sortOn (dist sp . fst) . IM.elems . wlsHitUnsorted sp ep ---- pushes out any hit point by one wlHitPos :: Point2 -> Point2 -> World -> Point2 wlHitPos sp ep = maybe ep ((+ normalize (ep - sp)) . fst) . safeHead . wlsHit sp ep -wlsHitUnsorted :: Point2 -> Point2 -> World -> [(Point2, Wall)] +wlsHitUnsorted :: Point2 -> Point2 -> World -> IM.IntMap (Point2, Wall) wlsHitUnsorted sp ep | sp == ep = const mempty - | otherwise = overlapSegWalls sp ep . IM.elems . wlsNearSeg sp ep + | otherwise = overlapSegWalls sp ep . wlsNearSeg sp ep -wlsHitRadial :: Point2 -> Float -> World -> [(Point2, Wall)] -wlsHitRadial p r = mapMaybe f . IM.elems . wlsNearCirc p r +wlsHitRadial :: Point2 -> Float -> World -> IM.IntMap (Point2, Wall) +wlsHitRadial p r = IM.mapMaybe f . wlsNearCirc p r where --f wl = uncurry (intersectSegSeg p (p - r *.* v)) (_wlLine wl) <&> (,wl) f wl = mhp <&> (,wl) diff --git a/tags b/tags index ce9819c9f..95e5b45b5 100644 --- a/tags +++ b/tags @@ -1184,8 +1184,9 @@ SemiAutoTrigger src/Dodge/Data/TriggerType.hs 9;" C SensorType src/Dodge/Data/Machine/Sensor.hs 12;" t SensorWithRequirement src/Dodge/Data/Machine/Sensor.hs 30;" C SentinelAt src/Dodge/Data/ActionPlan.hs 152;" C -SetLSCol src/Dodge/Data/WorldEffect.hs 29;" C +SetLSCol src/Dodge/Data/WorldEffect.hs 28;" C SetTrigger src/Dodge/Data/WorldEffect.hs 27;" C +SetTriggerAndSetLSCol src/Dodge/Data/WorldEffect.hs 29;" C ShadNum src/Picture/Data.hs 30;" t Shader src/Shader/Data.hs 51;" t ShaderTexture src/Shader/Data.hs 102;" t @@ -1511,7 +1512,6 @@ West8 src/Dodge/Data/CardinalPoint.hs 34;" C WlID src/Dodge/Data/CrWlID.hs 10;" C Wood src/Dodge/Data/Material.hs 11;" C World src/Dodge/Data/World.hs 35;" t -WorldEffects src/Dodge/Data/WorldEffect.hs 28;" C WorldEventFlag src/Dodge/Data/World.hs 30;" t WorldGovernment src/Dodge/Data/Scenario.hs 52;" C XInfinity src/Dodge/Data/CardinalPoint.hs 44;" t @@ -2525,7 +2525,7 @@ aRadarPulse src/Dodge/RadarSweep.hs 20;" f aShape src/Dodge/Placement/Instance/LightSource.hs 93;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 65;" f +accessTerminal src/Dodge/WorldEffect.hs 63;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 63;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 82;" f @@ -2707,10 +2707,10 @@ bgunSound src/Dodge/HeldUse.hs 540;" f bingate src/Dodge/Item/Scope.hs 115;" f black src/Color.hs 54;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 15;" f -blinkActionFail src/Dodge/Creature/Action/Blink.hs 87;" f -blinkActionMousePos src/Dodge/Creature/Action/Blink.hs 24;" f -blinkDistortions src/Dodge/Creature/Action/Blink.hs 45;" f -blinkShockwave src/Dodge/Creature/Action/Blink.hs 78;" f +blinkActionFail src/Dodge/Creature/Action/Blink.hs 88;" f +blinkActionMousePos src/Dodge/Creature/Action/Blink.hs 25;" f +blinkDistortions src/Dodge/Creature/Action/Blink.hs 46;" f +blinkShockwave src/Dodge/Creature/Action/Blink.hs 79;" f blinker src/Dodge/Item/Held/Utility.hs 30;" f blipAt src/Dodge/RadarSweep.hs 78;" f blockLine src/Dodge/Placement/Instance/Wall.hs 44;" f @@ -2862,7 +2862,7 @@ cleatSide src/Dodge/Cleat.hs 27;" f click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 783;" f clicker src/Dodge/Item/Scope.hs 88;" f clipV src/Geometry/Vector.hs 48;" f -clipZoom src/Dodge/Update/Camera.hs 233;" f +clipZoom src/Dodge/Update/Camera.hs 234;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 205;" f @@ -3082,7 +3082,7 @@ dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 349;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f -deZoneWall src/Dodge/Zoning/Wall.hs 70;" f +deZoneWall src/Dodge/Zoning/Wall.hs 69;" f deadEndRoom src/Dodge/Room/Room.hs 261;" f deadFeet src/Dodge/Creature/Picture.hs 68;" f deadRot src/Dodge/Creature/Picture.hs 86;" f @@ -3207,8 +3207,8 @@ displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f displayTerminalLineString src/Dodge/Update.hs 561;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f -distributeAmmoToItem src/Dodge/WorldEffect.hs 151;" f -distributeAmmoToYou src/Dodge/WorldEffect.hs 139;" f +distributeAmmoToItem src/Dodge/WorldEffect.hs 149;" f +distributeAmmoToYou src/Dodge/WorldEffect.hs 137;" f distributerRoom src/Dodge/Room/Room.hs 428;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f @@ -3232,8 +3232,8 @@ doCrGroupUpdate src/Dodge/CrGroupUpdate.hs 5;" f doCrImp src/Dodge/CreatureEffect.hs 13;" f doCrWdAc src/Dodge/CreatureEffect.hs 48;" f doDamage src/Dodge/Creature/State.hs 42;" f -doDeathToggle src/Dodge/WorldEffect.hs 100;" f -doDeathTriggers src/Dodge/WorldEffect.hs 93;" f +doDeathToggle src/Dodge/WorldEffect.hs 98;" f +doDeathTriggers src/Dodge/WorldEffect.hs 91;" f doDebugGet src/Dodge/Debug.hs 145;" f doDebugPut src/Dodge/Debug.hs 134;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 23;" f @@ -3278,8 +3278,8 @@ doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 132;" f doTimeScroll src/Dodge/Update.hs 233;" f -doTmWdWd src/Dodge/WorldEffect.hs 103;" f -doWallRotate src/Dodge/Update/Camera.hs 230;" f +doTmWdWd src/Dodge/WorldEffect.hs 101;" f +doWallRotate src/Dodge/Update/Camera.hs 231;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f @@ -3497,7 +3497,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 171;" f +exitTerminalSubInv src/Dodge/WorldEffect.hs 169;" f expandLine src/Dodge/Picture.hs 30;" f expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f @@ -3515,13 +3515,13 @@ extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 103;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 62;" f facesToVF src/Polyhedra/Geodesic.hs 70;" f -farWallDistDirection src/Dodge/Update/Camera.hs 244;" f +farWallDistDirection src/Dodge/Update/Camera.hs 245;" f fdiv src/ShortShow.hs 41;" f feet src/Dodge/Creature/Picture.hs 51;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f -findBoundDists src/Dodge/Update/Camera.hs 251;" f +findBoundDists src/Dodge/Update/Camera.hs 252;" f findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f findIndex src/IntMapHelp.hs 86;" f @@ -3617,7 +3617,7 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAimZoom src/Dodge/Update/Camera.hs 151;" f +getAimZoom src/Dodge/Update/Camera.hs 152;" f getAmmoLinks src/Dodge/Item/Grammar.hs 108;" f getAttachedSFLink src/Dodge/HeldUse.hs 805;" f getAutoSpringLinks src/Dodge/Item/Grammar.hs 89;" f @@ -3736,7 +3736,7 @@ healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 108;" f healthTest src/Dodge/Room/LasTurret.hs 130;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f heldAimStance src/Dodge/Item/AimStance.hs 27;" f -heldAimZoom src/Dodge/Update/Camera.hs 157;" f +heldAimZoom src/Dodge/Update/Camera.hs 158;" f heldEffect src/Dodge/HeldUse.hs 64;" f heldEffectMuzzles src/Dodge/HeldUse.hs 135;" f heldHandlePos src/Dodge/Item/HeldOffset.hs 85;" f @@ -3989,7 +3989,7 @@ launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 42;" f ldpRect src/Dodge/Render/List.hs 48;" f ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 84;" f -leaveResetQuitTerminal src/Dodge/WorldEffect.hs 165;" f +leaveResetQuitTerminal src/Dodge/WorldEffect.hs 163;" f led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 193;" f @@ -4251,7 +4251,7 @@ 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 -moveZoomCamera src/Dodge/Update/Camera.hs 93;" f +moveZoomCamera src/Dodge/Update/Camera.hs 94;" f mtTopLabels src/Dodge/Tree/Compose.hs 51;" f mtUnderLabels src/Dodge/Tree/Compose.hs 54;" f muchWlDustAt src/Dodge/Wall/Dust.hs 10;" f @@ -4549,10 +4549,10 @@ psposAddLabel src/Dodge/PlacementSpot.hs 71;" f pt0 src/Dodge/LevelGen/PlacementHelper.hs 55;" f ptCont src/Dodge/LevelGen/PlacementHelper.hs 21;" f pulseChecker src/Dodge/Item/Equipment.hs 84;" f -pushCr src/Dodge/WallCreatureCollisions.hs 37;" f +pushCr src/Dodge/WallCreatureCollisions.hs 38;" f pushL src/DoubleStack.hs 20;" f -pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 83;" f -pushOutFromWall src/Dodge/WallCreatureCollisions.hs 72;" f +pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 84;" f +pushOutFromWall src/Dodge/WallCreatureCollisions.hs 73;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f pushYouOutFromWalls src/Dodge/Update.hs 342;" f @@ -4685,7 +4685,7 @@ replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 67;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f -resetTerminal src/Dodge/WorldEffect.hs 159;" f +resetTerminal src/Dodge/WorldEffect.hs 157;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f resizeFBOTO2 src/Framebuffer/Update.hs 104;" f @@ -4757,7 +4757,7 @@ rotate src/Picture/Base.hs 145;" f rotate3x src/Geometry/Vector3D.hs 60;" f rotate3y src/Geometry/Vector3D.hs 66;" f rotate3z src/Geometry/Vector3D.hs 54;" f -rotateCamera src/Dodge/Update/Camera.hs 204;" f +rotateCamera src/Dodge/Update/Camera.hs 205;" f rotateList src/Padding.hs 49;" f rotateSH src/Shape.hs 254;" f rotateSHq src/Shape.hs 163;" f @@ -4765,7 +4765,7 @@ rotateSHx src/Shape.hs 262;" f rotateSP src/ShapePicture.hs 57;" f rotateTo src/Polyhedra/Geodesic.hs 65;" f rotateTo8 src/Dodge/Update/Camera/Rotate.hs 6;" f -rotateToOverlappingWall src/Dodge/Update/Camera.hs 218;" f +rotateToOverlappingWall src/Dodge/Update/Camera.hs 219;" f rotateToZ src/Quaternion.hs 35;" f rotateV src/Geometry/Vector.hs 106;" f rotateVAround src/Geometry/Vector.hs 113;" f @@ -4890,7 +4890,7 @@ 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 94;" f -setViewDistance src/Dodge/Update/Camera.hs 239;" f +setViewDistance src/Dodge/Update/Camera.hs 240;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f @@ -5076,7 +5076,7 @@ sqPlatformChasm src/Dodge/Room/Tutorial.hs 225;" f sqSpitChasm src/Dodge/Room/Tutorial.hs 240;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f -squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 86;" f +squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 87;" f squashNormalizeV src/Geometry/Vector.hs 158;" f ssLookupDown src/Dodge/SelectionSections.hs 96;" f ssLookupGE' src/Dodge/SelectionSections.hs 150;" f @@ -5240,7 +5240,7 @@ titleOptionsMenu src/Dodge/Menu.hs 104;" f 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 119;" f +tmDistributeAmmo src/Dodge/WorldEffect.hs 117;" f tmDistributeLines src/Dodge/Room/Room.hs 466;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 54;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f @@ -5272,7 +5272,7 @@ topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 53;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torqueAmount src/Dodge/HeldUse.hs 606;" f -torqueCr src/Dodge/WorldEffect.hs 86;" f +torqueCr src/Dodge/WorldEffect.hs 84;" f torso src/Dodge/Creature/Picture.hs 100;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f @@ -5286,8 +5286,8 @@ transMat src/MatrixHelper.hs 87;" f transToHandle src/Dodge/Item/HeldOffset.hs 28;" f translate src/Picture/Base.hs 108;" f translate3 src/Picture/Base.hs 112;" f -translateFloatingCamera src/Dodge/Update/Camera.hs 49;" f -translateFloatingCameraKeys src/Dodge/Update/Camera.hs 67;" f +translateFloatingCamera src/Dodge/Update/Camera.hs 50;" f +translateFloatingCameraKeys src/Dodge/Update/Camera.hs 68;" f translateH src/Picture/Base.hs 104;" f translatePointToLeftHand src/Dodge/Creature/HandPos.hs 76;" f translatePointToRightHand src/Dodge/Creature/HandPos.hs 37;" f @@ -5367,7 +5367,7 @@ unigate src/Dodge/Item/Scope.hs 108;" f unitVectorAtAngle src/Geometry/Vector.hs 101;" f unlockInv src/Dodge/Inventory/Lock.hs 12;" f unpause src/Dodge/Menu.hs 205;" f -unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 58;" f +unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 59;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 75;" f unshadowBlock src/Dodge/Block.hs 14;" f @@ -5384,11 +5384,11 @@ updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 454;" f updateBarrel src/Dodge/Barreloid.hs 44;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f -updateBounds src/Dodge/Update/Camera.hs 261;" f +updateBounds src/Dodge/Update/Camera.hs 262;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f updateBullets src/Dodge/Update.hs 643;" f -updateCamera src/Dodge/Update/Camera.hs 32;" f +updateCamera src/Dodge/Update/Camera.hs 33;" f updateCloseObjects src/Dodge/Inventory.hs 125;" f updateCloud src/Dodge/Update.hs 885;" f updateClouds src/Dodge/Update.hs 754;" f @@ -5420,7 +5420,7 @@ updateEnterRegex src/Dodge/Update/Input/InGame.hs 481;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 742;" f -updateFloatingCamera src/Dodge/Update/Camera.hs 37;" f +updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 338;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 334;" f updateGas src/Dodge/Update.hs 907;" f @@ -5428,7 +5428,7 @@ updateGasses src/Dodge/Update.hs 757;" f updateGusts src/Dodge/Update.hs 869;" f updateIMl src/Dodge/Update.hs 609;" f updateIMl' src/Dodge/Update.hs 612;" f -updateInGameCamera src/Dodge/Update/Camera.hs 85;" f +updateInGameCamera src/Dodge/Update/Camera.hs 86;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 404;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f @@ -5559,7 +5559,7 @@ verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 23;" f vgunMuzzles src/Dodge/HeldUse.hs 369;" f viewClipBounds src/Dodge/Debug/Picture.hs 350;" f -viewDistanceFromItems src/Dodge/Update/Camera.hs 201;" f +viewDistanceFromItems src/Dodge/Update/Camera.hs 202;" f viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 155;" f @@ -5572,7 +5572,7 @@ volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f walkNozzle src/Dodge/HeldUse.hs 826;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f -wallBuffer src/Dodge/WallCreatureCollisions.hs 67;" f +wallBuffer src/Dodge/WallCreatureCollisions.hs 68;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallToSurface src/Dodge/Base/Collide.hs 181;" f wallsFromRooms src/Dodge/Layout.hs 141;" f @@ -5619,25 +5619,25 @@ windowYFloat src/Dodge/Data/Config.hs 74;" f withAlpha src/Color.hs 37;" f withByteString src/Shader/Compile.hs 157;" f wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 160;" f -wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f -wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f -wlIXsNearRect src/Dodge/Zoning/Wall.hs 29;" f -wlIXsNearSeg src/Dodge/Zoning/Wall.hs 25;" f +wlIXsNearCirc src/Dodge/Zoning/Wall.hs 31;" f +wlIXsNearPoint src/Dodge/Zoning/Wall.hs 21;" f +wlIXsNearRect src/Dodge/Zoning/Wall.hs 28;" f +wlIXsNearSeg src/Dodge/Zoning/Wall.hs 24;" f wlIsOpaque src/Dodge/Base/Wall.hs 6;" f wlIsSeeThrough src/Dodge/Base/Wall.hs 11;" f wlOpaqueDraw src/Dodge/Render/Walls.hs 53;" f wlSeeThroughDraw src/Dodge/Render/Walls.hs 56;" f -wlWlCrush src/Dodge/WallCreatureCollisions.hs 61;" f -wlZoneSize src/Dodge/Zoning/Wall.hs 52;" f -wlsCrush src/Dodge/WallCreatureCollisions.hs 57;" f -wlsFromIXs src/Dodge/Zoning/Wall.hs 35;" f +wlWlCrush src/Dodge/WallCreatureCollisions.hs 62;" f +wlZoneSize src/Dodge/Zoning/Wall.hs 51;" f +wlsCrush src/Dodge/WallCreatureCollisions.hs 58;" f +wlsFromIXs src/Dodge/Zoning/Wall.hs 34;" f wlsHit src/Dodge/WorldEvent/ThingsHit.hs 156;" f wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 163;" f -wlsNearCirc src/Dodge/Zoning/Wall.hs 49;" f -wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f -wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f -wlsNearSeg src/Dodge/Zoning/Wall.hs 42;" f +wlsNearCirc src/Dodge/Zoning/Wall.hs 48;" f +wlsNearPoint src/Dodge/Zoning/Wall.hs 38;" f +wlsNearRect src/Dodge/Zoning/Wall.hs 45;" f +wlsNearSeg src/Dodge/Zoning/Wall.hs 41;" f wordsBy src/ListHelp.hs 117;" f worldPosToResOffset src/Dodge/Base/Coordinate.hs 31;" f worldPosToScreen src/Dodge/Base/Coordinate.hs 24;" f @@ -5698,12 +5698,12 @@ zoneOfRect src/Dodge/Zoning/Base.hs 30;" f zoneOfSeg src/Dodge/Zoning/Base.hs 49;" f zoneOfSegSet src/Dodge/Zoning/Base.hs 53;" f zoneOfSight src/Dodge/Zoning/World.hs 9;" f -zoneOfWl src/Dodge/Zoning/Wall.hs 55;" f +zoneOfWl src/Dodge/Zoning/Wall.hs 54;" f zonePn src/Dodge/Zoning/Pathing.hs 32;" f -zoneWall src/Dodge/Zoning/Wall.hs 65;" f +zoneWall src/Dodge/Zoning/Wall.hs 64;" f zonesAroundPoint src/Dodge/Zoning/Base.hs 98;" f zonesExtract src/Dodge/Zoning/Base.hs 62;" f -zoomFloatingCamera src/Dodge/Update/Camera.hs 77;" f +zoomFloatingCamera src/Dodge/Update/Camera.hs 78;" f zoomInLongGun src/Dodge/Update/Scroll.hs 103;" f zoomOutLongGun src/Dodge/Update/Scroll.hs 111;" f zoomScope src/Dodge/Item/Scope.hs 32;" f