Improve door crushing

This commit is contained in:
2026-03-26 19:21:10 +00:00
parent 31d7a00ecf
commit 01b765300e
10 changed files with 107 additions and 87 deletions
+6 -2
View File
@@ -34,6 +34,7 @@ module Dodge.Base.Collide (
collide3,
) where
import qualified Data.IntMap.Strict as IM
import Control.Lens
import Control.Monad
import qualified Data.IntSet as IS
@@ -48,7 +49,7 @@ import FoldableHelp
import Geometry
import Linear
collidePoint :: Point2 -> Point2 -> [Wall] -> (Point2, Maybe Wall)
collidePoint :: Foldable t => Point2 -> Point2 -> t Wall -> (Point2, Maybe Wall)
{-# INLINE collidePoint #-}
collidePoint sp ep = foldl' f (ep, Nothing)
where
@@ -201,7 +202,7 @@ collidePointTestFilter t sp ep =
collidePointWallsFilter :: (Wall -> Bool) -> Point2 -> Point2 -> World -> (Point2, Maybe Wall)
{-# INLINE collidePointWallsFilter #-}
collidePointWallsFilter t sp ep = collidePoint sp ep . filter t . wlsNearSeg sp ep
collidePointWallsFilter t sp ep = collidePoint sp ep . IM.filter t . wlsNearSeg sp ep
-- overlapSegWalls :: Point2 -> Point2 -> StreamOf Wall
-- -> StreamOf (Point2,Wall)
@@ -219,6 +220,7 @@ visibleWalls sp ep =
takeUntil (wlIsOpaque . snd)
. sortOn (dist sp . fst)
. overlapSegWalls sp ep
. IM.elems
. wlsNearSeg sp ep
allVisibleWalls :: World -> [(Point2, Wall)]
@@ -296,6 +298,7 @@ hasLOS :: Point2 -> Point2 -> World -> Bool
hasLOS p1 p2 =
not
. collidePointTestFilter (const True) p1 p2
. IM.elems
. wlsNearSeg p1 p2
hasButtonLOS :: Point2 -> Point2 -> World -> Bool
@@ -312,6 +315,7 @@ hasLOSIndirect :: Point2 -> Point2 -> World -> Bool
hasLOSIndirect p1 p2 =
not
. collidePointTestFilter wlIsOpaque p1 p2
. IM.elems
. wlsNearSeg p1 p2
canSee :: Int -> Int -> World -> Bool
+2 -1
View File
@@ -5,6 +5,7 @@ module Dodge.Creature.Action.Blink (
unsafeBlinkAction,
) where
import qualified Data.IntMap.Strict as IM
import Linear
import Dodge.Creature.Radius
import Dodge.Zoning.Wall
@@ -34,7 +35,7 @@ blinkActionMousePos cr w =
p1 = w ^. cWorld . lWorld . lAimPos
cpos = cr ^. crPos . _xy
--p2 = bouncePoint (const True) 1 cpos p1 w
p2 = pushIntoMaybe $ collideCircWalls cpos p1 r (wlsNearSeg cpos p1 w)
p2 = pushIntoMaybe $ collideCircWalls cpos p1 r (IM.elems $ wlsNearSeg cpos p1 w)
r = crRad $ cr ^. crType
p3 = maybe p1 ((+.+ squashNormalizeV (cpos -.- p1)) . fst) p2
--p3 = maybe p1 (const 0) p2
+1 -1
View File
@@ -276,7 +276,7 @@ drawFarWallDetect w =
( \q ->
line
[ p
, fst $ collidePoint p q $ filter wlIsOpaque $ wlsNearSeg p q w
, fst $ collidePoint p q $ filter wlIsOpaque $ IM.elems $ wlsNearSeg p q w
]
)
$ getViewpoints p (_cWorld w)
+1 -2
View File
@@ -33,8 +33,7 @@ import Data.Monoid
import RandomHelp
testStringInit :: Universe -> [String]
testStringInit _ = []
--(fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crHP . _HP)
testStringInit u = (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crWallTouch)
-- <> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial)
--testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir)
--testStringInit u = map show
+1 -1
View File
@@ -352,7 +352,7 @@ muzzleWallCheck w cr = fromMaybe cr $ do
cp = cr ^. crPos . _xy
-- cop = cr ^. crOldPos . _xy
r <- boundPointsRect (cp : ps)
let wls = uncurry wlsNearRect r w & filter (not . _wlTouchThrough)
let wls = uncurry wlsNearRect r w & IM.elems & filter (not . _wlTouchThrough)
vs = mapMaybe (g cp wls) ps
return $ if null vs
then cr
+3 -2
View File
@@ -26,6 +26,7 @@ import Geometry
import LensHelp
import SDL (MouseButton (..))
import qualified SDL
import qualified Data.IntMap.Strict as IM
{- Update the screen camera rotation and position, including any in rold scope/remote camera modifiers;
update where your avatar's view is from. -}
@@ -220,7 +221,7 @@ rotateToOverlappingWall w =
maybe
id
(doWallRotate . snd)
(overlapCircWallsClosest p r (filter _wlRotateTo $ wlsNearCirc p r w))
(overlapCircWallsClosest p r (filter _wlRotateTo . IM.elems $ wlsNearCirc p r w))
w
where
r = crRad (cr ^. crType) + 10
@@ -245,7 +246,7 @@ farWallDistDirection :: Point2 -> World -> Maybe (Float, Float, Float, Float)
farWallDistDirection p w = boundPoints $ map f $ getViewpoints p (_cWorld w)
where
f q = (rotateV (negate (w ^. wCam . camRot)) . (-.- p)) (foldl' findPoint q (wls q))
wls q = filter wlIsOpaque $ wlsNearSeg p q w
wls q = filter wlIsOpaque . IM.elems $ wlsNearSeg p q w
findPoint q = fromMaybe q . uncurry (intersectSegSeg p q) . _wlLine
findBoundDists :: Config -> World -> (Float, Float, Float, Float)
+18 -4
View File
@@ -1,6 +1,7 @@
-- | Deals with moving creature wall collisions.
module Dodge.WallCreatureCollisions (colCrsWalls) where
import qualified Data.IntMap.Strict as IM
import Control.Lens
import Data.Foldable
import qualified Data.IntSet as IS
@@ -28,19 +29,23 @@ colCrWall w c = cornpush . wallpush $ pushthrough c
r = crRad (c ^. crType) + wallBuffer
p1 = c ^. crOldPos . _xy
p2 = c ^. crPos . _xy
ls = _wlLine <$> wls
ls = _wlLine <$> IM.elems wls
ls' = filter (uncurry $ isLHS p1) ls
wls = filter notff $ wlsNearCirc p2 r w
wls = IM.filter notff $ wlsNearCirc p2 (2*r) w
notff x = x ^. wlMaterial /= ForceField
pushCr :: [Wall] -> Creature -> Creature
-- might want to check angled crushing
pushCr :: IM.IntMap Wall -> Creature -> Creature
pushCr wls cr
| dist ep sp > r && dist ep ap > r =
| (dist ep sp > r && dist ep ap > r)
|| wlsCrush twls
=
ecr
& crDamage <>~ [Crushing 1000 0]
& crPos . _xy .~ ap
| otherwise = ecr
where
twls = IM.elems $ IM.restrictKeys wls (ecr ^. crWallTouch)
ep = ecr ^. crPos . _xy
ap = cr ^. crOldPos . _xy
sp = cr ^. crPos . _xy
@@ -50,6 +55,15 @@ pushCr wls cr
Just p -> acr & crPos . _xy .~ p & crWallTouch %~ IS.insert (wl ^. wlID)
Nothing -> acr
wlsCrush :: [Wall] -> Bool
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
where
f = uncurry (-) . (^. wlLine)
-- the amount to push creatures out from walls, extra to their radius
wallBuffer :: Float
wallBuffer = 0
+2 -2
View File
@@ -163,10 +163,10 @@ wlHitPos sp ep = maybe ep ((+ normalize (ep - sp)) . fst) . safeHead . wlsHit sp
wlsHitUnsorted :: Point2 -> Point2 -> World -> [(Point2, Wall)]
wlsHitUnsorted sp ep
| sp == ep = const mempty
| otherwise = overlapSegWalls sp ep . wlsNearSeg sp ep
| otherwise = overlapSegWalls sp ep . IM.elems . wlsNearSeg sp ep
wlsHitRadial :: Point2 -> Float -> World -> [(Point2, Wall)]
wlsHitRadial p r = mapMaybe f . wlsNearCirc p r
wlsHitRadial p r = mapMaybe f . IM.elems . wlsNearCirc p r
where
--f wl = uncurry (intersectSegSeg p (p - r *.* v)) (_wlLine wl) <&> (,wl)
f wl = mhp <&> (,wl)
+6 -7
View File
@@ -11,7 +11,6 @@ module Dodge.Zoning.Wall
import Control.Lens
import qualified Data.IntSet as IS
import Data.Maybe
import Dodge.Data.World
import Dodge.Zoning.Base
import FoldableHelp
@@ -32,21 +31,21 @@ wlIXsNearRect = nearRect wlZoneSize _wlZoning
wlIXsNearCirc :: Point2 -> Float -> World -> IS.IntSet
wlIXsNearCirc p r = wlIXsNearRect (p +.+ V2 r r) (p -.- V2 r r)
wlsFromIXs :: World -> IS.IntSet -> [Wall]
wlsFromIXs :: World -> IS.IntSet -> IM.IntMap Wall
{-# INLINE wlsFromIXs #-}
wlsFromIXs w = mapMaybe (\wlid -> w ^? cWorld . lWorld . walls . ix wlid) . IS.toList
wlsFromIXs w = IM.restrictKeys (w ^. cWorld . lWorld . walls)
wlsNearPoint :: Point2 -> World -> [Wall]
wlsNearPoint :: Point2 -> World -> IM.IntMap Wall
wlsNearPoint p w = wlsFromIXs w $ wlIXsNearPoint p w
wlsNearSeg :: Point2 -> Point2 -> World -> [Wall]
wlsNearSeg :: Point2 -> Point2 -> World -> IM.IntMap Wall
{-# INLINE wlsNearSeg #-}
wlsNearSeg sp ep w = wlsFromIXs w $ wlIXsNearSeg sp ep w
wlsNearRect :: Point2 -> Point2 -> World -> [Wall]
wlsNearRect :: Point2 -> Point2 -> World -> IM.IntMap Wall
wlsNearRect sp ep w = wlsFromIXs w $ wlIXsNearRect sp ep w
wlsNearCirc :: Point2 -> Float -> World -> [Wall]
wlsNearCirc :: Point2 -> Float -> World -> IM.IntMap Wall
wlsNearCirc p r w = wlsFromIXs w $ wlIXsNearCirc p r w
wlZoneSize :: Float
+67 -65
View File
@@ -160,8 +160,8 @@ BulletPayload src/Dodge/Data/Bullet.hs 32;" t
BulletTrajectory src/Dodge/Data/Bullet.hs 40;" t
BulletTrajectoryType src/Dodge/Data/Bullet.hs 47;" t
BurstTrigger src/Dodge/Data/TriggerType.hs 12;" C
Button src/Dodge/Data/Button.hs 33;" t
ButtonAccessTerminal src/Dodge/Data/Button.hs 31;" C
Button src/Dodge/Data/Button.hs 29;" t
ButtonAccessTerminal src/Dodge/Data/Button.hs 27;" C
ButtonDumbSwitch src/Dodge/Data/Button.hs 26;" C
ButtonEvent src/Dodge/Data/Button.hs 13;" t
ButtonPress src/Dodge/Data/Button.hs 14;" C
@@ -699,7 +699,7 @@ MODBlockedString src/Dodge/Data/Universe.hs 106;" C
MODString src/Dodge/Data/Universe.hs 105;" C
MODStringOption src/Dodge/Data/Universe.hs 107;" C
MOTOR src/Dodge/Data/Item/Combine.hs 63;" C
MPO src/Dodge/Base/Collide.hs 95;" t
MPO src/Dodge/Base/Collide.hs 96;" t
MTRS src/Dodge/Data/MTRS.hs 6;" t
MTree src/Dodge/Data/MetaTree.hs 12;" C
Machine src/Dodge/Data/Machine.hs 30;" t
@@ -1561,9 +1561,7 @@ _bdMaxX src/Dodge/Data/Bounds.hs 12;" f
_bdMaxY src/Dodge/Data/Bounds.hs 14;" f
_bdMinX src/Dodge/Data/Bounds.hs 11;" f
_bdMinY src/Dodge/Data/Bounds.hs 13;" f
_bdsColor1 src/Dodge/Data/Button.hs 28;" f
_bdsColor2 src/Dodge/Data/Button.hs 29;" f
_bdsTrigger src/Dodge/Data/Button.hs 27;" f
_bdsTrigger src/Dodge/Data/Button.hs 26;" f
_beamCombine src/Dodge/Data/Beam.hs 46;" f
_blDir src/Dodge/Data/Block.hs 27;" f
_blDraw src/Dodge/Data/Block.hs 29;" f
@@ -1596,13 +1594,13 @@ _bpColor src/Dodge/Data/Button.hs 17;" f
_bpEff src/Dodge/Data/Button.hs 16;" f
_bsColor1 src/Dodge/Data/Button.hs 22;" f
_bsColor2 src/Dodge/Data/Button.hs 23;" f
_btEvent src/Dodge/Data/Button.hs 36;" f
_btID src/Dodge/Data/Button.hs 37;" f
_btEvent src/Dodge/Data/Button.hs 32;" f
_btID src/Dodge/Data/Button.hs 33;" f
_btOn src/Dodge/Data/Button.hs 15;" f
_btOn src/Dodge/Data/Button.hs 24;" f
_btPos src/Dodge/Data/Button.hs 34;" f
_btRot src/Dodge/Data/Button.hs 35;" f
_btTermID src/Dodge/Data/Button.hs 31;" f
_btPos src/Dodge/Data/Button.hs 30;" f
_btRot src/Dodge/Data/Button.hs 31;" f
_btTermID src/Dodge/Data/Button.hs 27;" f
_buDam src/Dodge/Data/Bullet.hs 34;" f
_buDrag src/Dodge/Data/Bullet.hs 20;" f
_buEffect src/Dodge/Data/Bullet.hs 17;" f
@@ -2532,7 +2530,7 @@ activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 63;" f
activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f
addArmour src/Dodge/Creature.hs 82;" f
addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f
addButtonSlowDoor src/Dodge/Room/LongDoor.hs 96;" f
addButtonSlowDoor src/Dodge/Room/LongDoor.hs 97;" f
addCrGibs src/Dodge/Prop/Gib.hs 17;" f
addDepth src/Picture/Base.hs 125;" f
addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 43;" f
@@ -2563,7 +2561,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 88;" f
addSouthPillars src/Dodge/Room/LongDoor.hs 89;" f
addTermSignal src/Dodge/Event/Input.hs 31;" f
addToTrunk src/TreeHelp.hs 157;" f
addWarningTerminal src/Dodge/Room/Warning.hs 94;" f
@@ -2581,7 +2579,7 @@ airlockCrystal src/Dodge/Room/Airlock.hs 251;" f
airlockDoubleDoor src/Dodge/Room/Airlock.hs 104;" f
airlockSimple src/Dodge/Room/Airlock.hs 129;" f
airlockZ src/Dodge/Room/Airlock.hs 166;" f
allVisibleWalls src/Dodge/Base/Collide.hs 224;" f
allVisibleWalls src/Dodge/Base/Collide.hs 226;" f
alongSegBy src/Geometry.hs 40;" f
alteRifle src/Dodge/Item/Held/Cane.hs 22;" f
alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f
@@ -2597,7 +2595,7 @@ angleBetween src/Geometry.hs 158;" f
angleVV src/Geometry/Vector.hs 58;" f
angleVV3 src/Geometry/Vector3D.hs 122;" f
anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f
anythingHitCirc src/Dodge/Base/Collide.hs 331;" f
anythingHitCirc src/Dodge/Base/Collide.hs 335;" f
applyCME src/Dodge/HeldUse.hs 397;" f
applyClip src/Dodge/Debug.hs 176;" f
applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f
@@ -2743,7 +2741,7 @@ boolOption src/Dodge/Menu/OptionType.hs 12;" f
bossKeyItems src/Dodge/LockAndKey.hs 13;" f
bossRoom src/Dodge/Room/Boss.hs 55;" f
bounceDir src/Dodge/Bullet.hs 111;" f
bouncePoint src/Dodge/Base/Collide.hs 85;" f
bouncePoint src/Dodge/Base/Collide.hs 86;" f
bounceSound src/Dodge/Projectile/Update.hs 74;" f
boundPoints src/Bound.hs 9;" f
boundPointsRect src/Bound.hs 23;" f
@@ -2779,8 +2777,8 @@ cFilledRect src/Dodge/CharacterEnums.hs 6;" f
cWireRect src/Dodge/CharacterEnums.hs 10;" f
calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f
calcTexCoord src/Tile.hs 19;" f
canSee src/Dodge/Base/Collide.hs 317;" f
canSeeIndirect src/Dodge/Base/Collide.hs 324;" f
canSee src/Dodge/Base/Collide.hs 321;" f
canSeeIndirect src/Dodge/Base/Collide.hs 328;" f
cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f
capacitor src/Dodge/Item/Ammo.hs 67;" f
card8Vec src/Dodge/Base/CardinalPoint.hs 17;" f
@@ -2815,7 +2813,7 @@ chasmSimpleMaze src/Dodge/Room/Tutorial.hs 358;" f
chasmSpitTerminal src/Dodge/Room/Tutorial.hs 298;" f
chasmTestCorpse src/Dodge/Creature/Update.hs 155;" f
chasmTestLiving src/Dodge/Creature/Update.hs 137;" f
chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f
chasmWallToSurface src/Dodge/Base/Collide.hs 119;" f
checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f
checkConnection src/Dodge/Inventory/Swap.hs 66;" f
checkDeath src/Dodge/Creature/Update.hs 78;" f
@@ -2838,12 +2836,12 @@ chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 35;" f
chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f
chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f
chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 61;" f
circHitWall src/Dodge/Base/Collide.hs 237;" f
circHitWall src/Dodge/Base/Collide.hs 239;" f
circInPolygon src/Geometry/Polygon.hs 110;" f
circOnAnyCr src/Dodge/Base/Collide.hs 282;" f
circOnAnyCr src/Dodge/Base/Collide.hs 284;" f
circOnSeg src/Geometry.hs 101;" f
circOnSegNoEndpoints src/Geometry.hs 91;" f
circOnSomeWall src/Dodge/Base/Collide.hs 276;" f
circOnSomeWall src/Dodge/Base/Collide.hs 278;" f
circle src/Picture/Base.hs 172;" f
circleDecoration src/Dodge/Placement/TopDecoration.hs 62;" f
circleSolid src/Picture/Base.hs 156;" f
@@ -2879,22 +2877,22 @@ clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f
clsNearRect src/Dodge/Zoning/Cloud.hs 18;" f
clsNearSeg src/Dodge/Zoning/Cloud.hs 15;" f
cogRaised src/Dodge/Creature/Perception.hs 101;" f
colCrWall src/Dodge/WallCreatureCollisions.hs 22;" f
colCrsWalls src/Dodge/WallCreatureCollisions.hs 14;" f
colCrWall src/Dodge/WallCreatureCollisions.hs 23;" f
colCrsWalls src/Dodge/WallCreatureCollisions.hs 15;" f
collectDamageTypes src/Dodge/Damage.hs 53;" f
collectInvItems src/Dodge/Inventory.hs 201;" f
collide3 src/Dodge/Base/Collide.hs 127;" f
collide3Chasm src/Dodge/Base/Collide.hs 111;" f
collide3Chasms src/Dodge/Base/Collide.hs 103;" f
collide3Creature src/Dodge/Base/Collide.hs 160;" f
collide3Floors src/Dodge/Base/Collide.hs 141;" f
collide3Wall src/Dodge/Base/Collide.hs 155;" f
collide3Walls src/Dodge/Base/Collide.hs 136;" f
collide3WallsFloor src/Dodge/Base/Collide.hs 97;" f
collideCircWalls src/Dodge/Base/Collide.hs 249;" f
collidePoint src/Dodge/Base/Collide.hs 51;" f
collidePointTestFilter src/Dodge/Base/Collide.hs 188;" f
collidePointWallsFilter src/Dodge/Base/Collide.hs 202;" f
collide3 src/Dodge/Base/Collide.hs 128;" f
collide3Chasm src/Dodge/Base/Collide.hs 112;" f
collide3Chasms src/Dodge/Base/Collide.hs 104;" f
collide3Creature src/Dodge/Base/Collide.hs 161;" f
collide3Floors src/Dodge/Base/Collide.hs 142;" f
collide3Wall src/Dodge/Base/Collide.hs 156;" f
collide3Walls src/Dodge/Base/Collide.hs 137;" f
collide3WallsFloor src/Dodge/Base/Collide.hs 98;" f
collideCircWalls src/Dodge/Base/Collide.hs 251;" f
collidePoint src/Dodge/Base/Collide.hs 52;" f
collidePointTestFilter src/Dodge/Base/Collide.hs 189;" f
collidePointWallsFilter src/Dodge/Base/Collide.hs 203;" f
color src/Picture/Base.hs 100;" f
colorLamp src/Dodge/Creature/Lamp.hs 10;" f
colorSH src/Shape.hs 234;" f
@@ -2957,7 +2955,7 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f
crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f
crHasTarget src/Dodge/Creature/Test.hs 66;" f
crHasTargetLOS src/Dodge/Creature/Test.hs 69;" f
crHeight src/Dodge/Base/Collide.hs 173;" f
crHeight src/Dodge/Base/Collide.hs 174;" f
crHit src/Dodge/WorldEvent/ThingsHit.hs 136;" f
crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f
crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f
@@ -3147,7 +3145,7 @@ defaultDirtBlock src/Dodge/Default/Block.hs 17;" f
defaultDirtWall src/Dodge/Default/Wall.hs 47;" f
defaultDoor src/Dodge/Default/Door.hs 5;" f
defaultDoorWall src/Dodge/Default/Wall.hs 29;" f
defaultDrawButton src/Dodge/Button/Draw.hs 30;" f
defaultDrawButton src/Dodge/Button/Draw.hs 44;" f
defaultFlIt src/Dodge/Default.hs 27;" f
defaultForeground src/Dodge/Default/ForegroundShape.hs 5;" f
defaultHUD src/Dodge/Default/World.hs 172;" f
@@ -3224,7 +3222,7 @@ doAnyEquipmentEffect src/Dodge/Creature/State.hs 140;" f
doBackspace src/Dodge/Update/Input/Text.hs 31;" f
doBarrelSpin src/Dodge/Projectile/Update.hs 168;" f
doBlBl src/Dodge/BlBl.hs 5;" f
doBounce src/Dodge/Base/Collide.hs 66;" f
doBounce src/Dodge/Base/Collide.hs 67;" f
doButtonEvent src/Dodge/Button/Event.hs 9;" f
doConLoop src/Loop.hs 138;" f
doConLoop' src/Loop.hs 230;" f
@@ -3310,7 +3308,7 @@ drawBlip src/Dodge/RadarBlip.hs 16;" f
drawBlock src/Dodge/Render/ShapePicture.hs 81;" f
drawBoundingBox src/Dodge/Debug/Picture.hs 368;" f
drawBullet src/Dodge/Render/ShapePicture.hs 175;" f
drawButton src/Dodge/Button/Draw.hs 10;" f
drawButton src/Dodge/Button/Draw.hs 11;" f
drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f
drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f
drawCliff src/Dodge/Render/ShapePicture.hs 87;" f
@@ -3337,6 +3335,7 @@ drawDragPickup src/Dodge/Render/Picture.hs 236;" f
drawDragSelect src/Dodge/Render/Picture.hs 195;" f
drawDragSelected src/Dodge/Render/HUD.hs 144;" f
drawDragSelecting src/Dodge/Render/HUD.hs 162;" f
drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f
drawEmptySet src/Dodge/Render/Picture.hs 151;" f
drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f
drawEquipment src/Dodge/Creature/Picture.hs 125;" f
@@ -3404,7 +3403,7 @@ drawShockwave src/Dodge/Shockwave/Draw.hs 6;" f
drawSpark src/Dodge/Spark/Draw.hs 7;" f
drawStaticBall src/Dodge/EnergyBall/Draw.hs 28;" f
drawSubInventory src/Dodge/Render/HUD.hs 173;" f
drawSwitch src/Dodge/Button/Draw.hs 17;" f
drawSwitch src/Dodge/Button/Draw.hs 18;" f
drawSwitchWire src/Dodge/LevelGen/Switch.hs 24;" f
drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f
drawTerminalCursorLink src/Dodge/Render/HUD.hs 392;" f
@@ -3722,10 +3721,10 @@ handleTextInput src/Dodge/Event/Input.hs 19;" f
handleWindowMoveEvent src/Dodge/Event.hs 44;" f
hardQuit src/Dodge/Concurrent.hs 32;" f
hasAutoDoorBody src/Dodge/Creature/Test.hs 141;" f
hasButtonLOS src/Dodge/Base/Collide.hs 301;" f
hasButtonLOS src/Dodge/Base/Collide.hs 304;" f
hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f
hasLOS src/Dodge/Base/Collide.hs 294;" f
hasLOSIndirect src/Dodge/Base/Collide.hs 310;" f
hasLOS src/Dodge/Base/Collide.hs 296;" f
hasLOSIndirect src/Dodge/Base/Collide.hs 313;" f
hat src/Dodge/Item/Equipment.hs 65;" f
head src/DoubleStack.hs 14;" f
headLamp src/Dodge/Item/Equipment.hs 68;" f
@@ -4098,6 +4097,7 @@ makeCorpse src/Dodge/Corpse/Make.hs 13;" f
makeDebris src/Dodge/Block/Debris.hs 48;" f
makeDebrisDirected src/Dodge/Block/Debris.hs 51;" f
makeDoorDebris src/Dodge/Block/Debris.hs 26;" f
makeDumbSwitch src/Dodge/Room/LongDoor.hs 141;" f
makeDustAt src/Dodge/WorldEvent/Cloud.hs 17;" f
makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 68;" f
makeFlak src/Dodge/Bullet.hs 146;" f
@@ -4298,7 +4298,7 @@ nextInSectionSS src/Dodge/SelectionSections.hs 34;" f
nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f
noPic src/ShapePicture.hs 25;" f
noShape src/ShapePicture.hs 29;" f
noclipCheck src/Dodge/WallCreatureCollisions.hs 17;" f
noclipCheck src/Dodge/WallCreatureCollisions.hs 18;" f
nodesNear src/Dodge/Path.hs 75;" f
nonConvexChasm src/Dodge/Room/Tutorial.hs 260;" f
nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f
@@ -4358,10 +4358,10 @@ overPos src/Picture/Base.hs 298;" f
overPosObj src/Shape.hs 274;" f
overPosSH src/Shape.hs 258;" f
overPosSP src/ShapePicture.hs 41;" f
overlapCircWalls src/Dodge/Base/Collide.hs 230;" f
overlapCircWallsClosest src/Dodge/Base/Collide.hs 269;" f
overlapSegCrs src/Dodge/Base/Collide.hs 58;" f
overlapSegWalls src/Dodge/Base/Collide.hs 211;" f
overlapCircWalls src/Dodge/Base/Collide.hs 232;" f
overlapCircWallsClosest src/Dodge/Base/Collide.hs 271;" f
overlapSegCrs src/Dodge/Base/Collide.hs 59;" f
overlapSegWalls src/Dodge/Base/Collide.hs 212;" f
overrideInternal src/Dodge/Creature/ReaderUpdate.hs 180;" f
overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 35;" f
overwriteLabel src/Dodge/Tree/Compose.hs 32;" 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 36;" f
pushCr src/Dodge/WallCreatureCollisions.hs 37;" f
pushL src/DoubleStack.hs 20;" f
pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 70;" f
pushOutFromWall src/Dodge/WallCreatureCollisions.hs 59;" f
pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 83;" f
pushOutFromWall src/Dodge/WallCreatureCollisions.hs 72;" f
pushR src/DoubleStack.hs 24;" f
pushScreen src/Dodge/Menu/PushPop.hs 9;" f
pushYouOutFromWalls src/Dodge/Update.hs 342;" f
@@ -4967,10 +4967,10 @@ showEquipItem src/Dodge/Item/Display.hs 108;" f
showInt src/Dodge/Item/Info.hs 75;" f
showIntsString src/Dodge/Tree/Compose.hs 130;" f
showInventoryPathing src/Dodge/Item/Display.hs 86;" f
showManObj src/Dodge/TestString.hs 58;" f
showManObj src/Dodge/TestString.hs 57;" f
showMuzzlePositions src/Dodge/Debug.hs 292;" f
showTerminalError src/Dodge/Debug/Terminal.hs 80;" f
showTimeFlow src/Dodge/TestString.hs 67;" f
showTimeFlow src/Dodge/TestString.hs 66;" f
shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f
shrinkVert src/Geometry/Polygon.hs 202;" f
shuffle src/RandomHelp.hs 68;" f
@@ -5006,9 +5006,9 @@ slapClean7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 747;" f
slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 667;" f
slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 629;" f
slideWindow src/ListHelp.hs 81;" f
slowCrushRoom src/Dodge/Room/LongDoor.hs 140;" f
slowDoorRoom src/Dodge/Room/LongDoor.hs 152;" f
slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 169;" f
slowCrushRoom src/Dodge/Room/LongDoor.hs 144;" f
slowDoorRoom src/Dodge/Room/LongDoor.hs 176;" f
slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 193;" f
smallBattery src/Dodge/Item/Ammo.hs 57;" f
smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f
smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f
@@ -5043,7 +5043,7 @@ soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 175;" 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 85;" f
southPillarsRoom src/Dodge/Room/LongDoor.hs 86;" f
spaceAction src/Dodge/Update/Input/InGame.hs 504;" f
spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 160;" f
spanColLightI src/Dodge/Placement/Instance/LightSource.hs 153;" 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 73;" f
squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 86;" f
squashNormalizeV src/Geometry/Vector.hs 158;" f
ssLookupDown src/Dodge/SelectionSections.hs 96;" f
ssLookupGE' src/Dodge/SelectionSections.hs 150;" f
@@ -5269,7 +5269,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 663;" f
topInvW src/Dodge/ListDisplayParams.hs 54;" f
topPrismEdgeIndices src/Shader/Poke.hs 335;" f
topPrismIndices src/Shader/Poke.hs 410;" f
topTestPart src/Dodge/TestString.hs 54;" 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
@@ -5348,8 +5348,8 @@ tutRezBox src/Dodge/Room/Tutorial.hs 525;" f
tutRoomTree src/Dodge/Floor.hs 20;" f
tutorialMessage1 src/Dodge/Room/Tutorial.hs 550;" f
tweenAngles src/Geometry/Vector.hs 190;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 35;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 36;" f
twists src/Dodge/Creature/Test.hs 103;" f
twoFlat src/Dodge/Creature/Test.hs 100;" f
twoFlatHRot src/Dodge/Item/HeldOffset.hs 76;" f
@@ -5564,7 +5564,7 @@ viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f
viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f
viewTarget src/Dodge/Creature/ReaderUpdate.hs 155;" f
violet src/Color.hs 48;" f
visibleWalls src/Dodge/Base/Collide.hs 216;" f
visibleWalls src/Dodge/Base/Collide.hs 217;" f
visionCheck src/Dodge/Creature/Perception.hs 152;" f
vocalizationTest src/Dodge/Creature/Vocalization.hs 62;" f
volleyGun src/Dodge/Item/Held/Cane.hs 15;" f
@@ -5572,9 +5572,9 @@ 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 54;" f
wallBuffer src/Dodge/WallCreatureCollisions.hs 67;" f
wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f
wallToSurface src/Dodge/Base/Collide.hs 180;" f
wallToSurface src/Dodge/Base/Collide.hs 181;" f
wallsFromRooms src/Dodge/Layout.hs 141;" f
wallsToDraw src/Dodge/Render/Walls.hs 18;" f
warmupSound src/Dodge/HeldUse.hs 1396;" f
@@ -5627,7 +5627,9 @@ 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
wlsHit src/Dodge/WorldEvent/ThingsHit.hs 156;" f
wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f