Start implementing wider grenade movement

This commit is contained in:
2025-08-03 23:23:55 +01:00
parent ea2e67c9ab
commit 2a93b7f733
6 changed files with 200 additions and 146 deletions
+48 -19
View File
@@ -33,10 +33,11 @@ module Dodge.Base.Collide (
canSeeIndirect,
isWalkable,
anythingHitCirc,
collide3WallsFloor,
collide3,
) where
--import qualified Data.IntMap.Strict as IM
import Dodge.Data.Object
import Control.Monad
import Dodge.Creature.Radius
import Control.Lens
@@ -48,6 +49,7 @@ import Dodge.Data.World
import Dodge.Zoning
import FoldableHelp
import Geometry
import Linear.Metric
collidePoint :: Point2 -> Point2 -> [Wall] -> (Point2, Maybe Wall)
{-# INLINE collidePoint #-}
@@ -83,36 +85,63 @@ bouncePoint :: (Wall -> Bool) -> Float -> Point2 -> Point2 -> World -> Maybe (Po
{-# INLINE bouncePoint #-}
bouncePoint t x sp ep = doBounce x sp ep . collidePointWallsFilter t sp ep
collide3 :: Point3 -> Point3 -> World -> (Point3, Maybe Point3)
collide3 sp ep w = collide3Floors sp (w ^. cWorld . chasms)
type MPO = Maybe (Point3,Object)
collide3WallsFloor :: Point3 -> Point3 -> World -> (Point3, MPO)
collide3WallsFloor sp ep w = collide3Floors sp (w ^. cWorld . chasms)
$ collide3Walls sp w (ep,Nothing)
-- Just (hitpoint,normaltosurface)
collide3Walls :: Point3 -> World -> (Point3, Maybe Point3) -> (Point3, Maybe Point3)
collide3Walls sp w (ep,mn) = collide3Part sp wsfs (ep,mn)
collide3 :: Point3 -> Point3 -> World -> (Point3,MPO)
collide3 sp ep w = foldl' (flip $ collide3Creature sp) (p,m)
$ crsNearSeg (xyV3 sp) (xyV3 p) w
where
wsfs = f <$> wlsNearSeg (xyV3 sp) (xyV3 ep) w
f wl = (g x, g $ vNormal (x-y), [(g x,g (y-x)),(g y,g (x-y))])
where
g = (`v2z` 0)
(x,y) = _wlLine wl
(p,m) = collide3WallsFloor sp ep w
collide3Floors :: Point3 -> [[Point2]] -> (Point3, Maybe Point3) -> (Point3, Maybe Point3)
collide3Floors sp cs (ep,mn) = maybe (ep,mn) (,Just (V3 0 0 1)) mp
-- Just (hitpoint,normaltosurface)
collide3Walls :: Point3 -> World -> (Point3, MPO) -> (Point3, MPO)
collide3Walls sp w ex@(ep,_) = foldl' f ex wls
where
f x wl = collide3Wall sp wl x
wls = wlsNearSeg (xyV3 sp) (xyV3 ep) w
collide3Floors :: Point3 -> [[Point2]] -> (Point3, Maybe (Point3,Object))
-> (Point3, Maybe (Point3,Object))
collide3Floors sp cs (ep,mn) = maybe (ep,mn) (,Just (V3 0 0 1,OFloor)) mp
where
mp = do
V3 x y z <- intersectSegPlane sp ep (V3 0 0 0) (V3 0 0 1)
let g (a,b) = isRHS a b (V2 x y)
f = any g
guard (all (f . loopPairs) cs)
return $ V3 x y z
return $ (V3 x y z)
collide3Part :: Point3 -> [(Point3,Point3,[(Point3,Point3)])]
-> (Point3, Maybe Point3)
-> (Point3, Maybe Point3)
collide3Part sp = flip $ foldl' findPoint
collide3Wall :: Point3 -> Wall -> (Point3, MPO) -> (Point3, MPO)
collide3Wall sp wl (ep,mo) = maybe (ep,mo) (,Just (n,OWall wl)) $ intersectSegSurface sp ep p n ss
where
findPoint (x,mn) (p,n,ss) = maybe (x,mn) (,Just n) $ intersectSegSurface sp x p n ss
(p,n,ss) = wallToSurface wl
collide3Creature :: Point3 -> Creature -> (Point3, MPO) -> (Point3, MPO)
collide3Creature sp cr (ep,m) = fromMaybe (ep,m) $ do
(sp',ep') <- restrictSeg 0 (V3 0 0 1) (sp,ep) >>= restrictSeg (V3 0 0 25) (V3 0 0 (-1))
p <- listToMaybe $ intersectCircSeg cpos (crRad $ cr ^. crType) (xyV3 sp') (xyV3 ep')
let z = 0
return (p `v2z` z,Just (normalize $ (p - cpos) `v2z` 0, OCreature cr))
where
cpos = cr ^. crPos
restrictSeg :: Point3 -> Point3 -> (Point3,Point3) -> Maybe (Point3,Point3)
restrictSeg p n (sp,ep)
| isNHS p n sp
, isNHS p n ep = Just (sp,ep)
| isNHS p n sp = (sp,) <$> intersectSegPlane sp ep p n
| otherwise = (,ep) <$> intersectSegPlane sp ep p n
-- note if both sp & ep are not NHS, this returns Nothing
wallToSurface :: Wall -> (Point3,Point3,[(Point3,Point3)])
wallToSurface wl = (g x, g $ vNormal (x-y), [(g x,g (y-x)),(g y,g (x-y))])
where
g = (`v2z` 0)
(x,y) = _wlLine wl
-- this COULD be written in terms of collidePointWallsFilterStream, TODO test
-- whether this is actually faster
+2
View File
@@ -11,3 +11,5 @@ data Object
= OPulseBall PulseBall
| OCreature Creature
| OWall Wall
| OFloor
| OChasmWall
+66 -41
View File
@@ -1,10 +1,9 @@
{-# LANGUAGE LambdaCase #-}
--{-# OPTIONS_GHC -Wno-unused-imports #-}
module Dodge.Projectile.Update (
updateProjectile,
) where
module Dodge.Projectile.Update (updateProjectile) where
import Dodge.Data.Object
import Control.Monad
import Data.List (delete)
import Data.Maybe
@@ -17,7 +16,7 @@ import Dodge.Payload
import Dodge.SoundLogic
import Dodge.WorldEvent.Cloud
import Dodge.WorldEvent.Sound
import Dodge.WorldEvent.ThingsHit
--import Dodge.WorldEvent.ThingsHit
import Geometry
import qualified IntMapHelp as IM
import LensHelp
@@ -27,7 +26,7 @@ import RandomHelp
updateProjectile :: Projectile -> World -> World
updateProjectile pj w =
(cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjTimer -~ 1)
. shellCollisionCheck pj
. shellExplosionCheck pj
. moveProjectile pj
$ doGravityPU pj w
@@ -66,25 +65,51 @@ applyGravityPU pj w
newz = pj ^. pjZ + pj ^. pjZVel
-- consider pushing any hit creature back
shellCollisionCheck :: Projectile -> World -> World
shellCollisionCheck pj w
shellExplosionCheck :: Projectile -> World -> World
shellExplosionCheck pj w
| RetiredProjectile <- pj ^. pjType
, time <= 0 =
destroyProjectile (pj ^. pjScreenID) (_pjID pj) w
| time <= 0 = explodeShell pj w
| RetiredProjectile <- pj ^. pjType = w
| Just thit <- thingHit oldpos (oldpos + _pjVel pj) w = tryShellBounce thit pj w
| otherwise = w
where
time = _pjTimer pj
oldpos = _pjPos pj
-- note this doesn't take into account moving walls, which may break the
-- bouncing in some way
tryShellBounce :: (Point2, Either Creature Wall) -> Projectile -> World -> World
tryShellBounce (p, Right wl) pj w
| Just GStuckCreature{} <- pj ^? pjType . gnHitEffect = w
| Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w
---- note this doesn't take into account moving walls, which may break the
---- bouncing in some way
--tryShellBounce :: (Point2, Either Creature Wall) -> Projectile -> World -> World
--tryShellBounce (p, Right wl) pj w
-- | Just GStick <- pj ^? pjType . gnHitEffect =
-- w
-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType
-- .~ Grenade (GStuckWall (wl ^. wlStructure))
-- & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos)
-- | Just x <- pj ^? pjType . gnHitEffect . bounceTolerance
-- , abs (dotV (pj ^. pjVel) (vNormal hitline)) < x =
-- w
-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjVel
-- %~ reflectIn hitline
-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjPos
-- .~ p - normalizeV (pj ^. pjVel)
-- & soundStart (ShellSound (pj ^. pjID)) (pj ^. pjPos) click1S Nothing
-- where
-- hitline = normalizeV $ uncurry (-) $ _wlLine wl
--tryShellBounce (p, Left cr) pj w
-- | Just GStick <- pj ^? pjType . gnHitEffect =
-- w
-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType
-- .~ Grenade
-- ( GStuckCreature
-- (cr ^. crID)
-- (rotateV (- cr ^. crDir) (p - cr ^. crPos))
-- (pj ^. pjDir - cr ^. crDir)
-- )
-- & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos)
--tryShellBounce _ pj w = explodeShell pj w
tryShellBounce' :: Point3 -> (Point3, Object ) -> Projectile -> World -> World
tryShellBounce' p' (n, OWall wl) pj w
| Just GStick <- pj ^? pjType . gnHitEffect =
w
& cWorld . lWorld . projectiles . ix (_pjID pj) . pjType
@@ -98,13 +123,10 @@ tryShellBounce (p, Right wl) pj w
& cWorld . lWorld . projectiles . ix (_pjID pj) . pjPos
.~ p - normalizeV (pj ^. pjVel)
& soundStart (ShellSound (pj ^. pjID)) (pj ^. pjPos) click1S Nothing
| isJust $ pj ^? pjType . gnHitEffect . bounceTolerance =
explodeShell pj w
where
p = xyV3 p'
hitline = normalizeV $ uncurry (-) $ _wlLine wl
tryShellBounce (p, Left cr) pj w
| Just GStuckCreature{} <- pj ^? pjType . gnHitEffect = w
| Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w
tryShellBounce' p' (n,OCreature cr) pj w
| Just GStick <- pj ^? pjType . gnHitEffect =
w
& cWorld . lWorld . projectiles . ix (_pjID pj) . pjType
@@ -115,7 +137,10 @@ tryShellBounce (p, Left cr) pj w
(pj ^. pjDir - cr ^. crDir)
)
& soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos)
tryShellBounce _ pj w = explodeShell pj w
where
p = xyV3 p'
tryShellBounce' _ _ pj w = w
tryShellBounce' _ _ pj w = explodeShell pj w
destroyProjectile :: Maybe (NewInt ItmInt) -> Int -> World -> World
destroyProjectile mitid pjid w =
@@ -130,11 +155,11 @@ destroyProjectile mitid pjid w =
trySpin :: Projectile -> World -> World
trySpin pj = fromMaybe id $ do
guard (pj ^. pjTimer == 335)
(cid,s) <- pj ^? pjBarrelSpin . _Just
(cid, s) <- pj ^? pjBarrelSpin . _Just
return $ doBarrelSpin cid s pj
tryThrust :: Projectile -> World -> World
tryThrust pj = fromMaybe id $ do
tryThrust pj = fromMaybe id $ do
Rocket y x <- pj ^? pjType
guard $ pj ^. pjTimer <= 330 && pj ^. pjTimer >= 0
return $ doThrust pj x . pjRemoteSetDirection (Just y) pj
@@ -145,9 +170,9 @@ doThrust pj smoke w =
& randGen .~ g
& cWorld . lWorld . projectiles . ix i . pjVel %~ (\v -> accel +.+ frict *.* v)
& soundContinue (ShellSound i) newPos missileLaunchS (Just 1)
-- & makeFlamelet (oldPos -.- vel) (vel + 2 * rotateV (pi + sparkD) accel) 3 10
& makeFlamelet (oldPos -.- vel) (vel +.+ rotateV (pi + sparkD) accel) 3 10
& makeCloudAt RocketSmoke
& makeCloudAt
RocketSmoke
lifetime
(addZ 20 (oldPos +.+ r1 +.+ 30 *.* normalizeV (oldPos -.- newPos)))
where
@@ -155,7 +180,7 @@ doThrust pj smoke w =
lt
| smoke == Just ReducedRocketSmoke = (50, 200)
| otherwise = (300, 500)
-- trailfadetime = fst . randomR (100, 300) $ _randGen w
-- trailfadetime = fst . randomR (100, 300) $ _randGen w
accel = rotateV (pj ^. pjDir) (V2 3 0)
i = _pjID pj
oldPos = _pjPos pj
@@ -170,11 +195,12 @@ doThrust pj smoke w =
doBarrelSpin :: Int -> Float -> Projectile -> World -> World
doBarrelSpin cid i pj w =
w & cWorld . lWorld . projectiles . ix pjid . pjSpin .~ newSpin
& cWorld . lWorld . projectiles . ix pjid . pjBarrelSpin .~ Nothing
-- & cWorld . lWorld . projectiles . ix pjid . pjUpdates %~ deleteBy f (StartSpinPU 0 0 0)
& cWorld . lWorld . projectiles . ix pjid . pjBarrelSpin .~ Nothing
where
-- f _ StartSpinPU{} = True
-- f _ _ = False
-- & cWorld . lWorld . projectiles . ix pjid . pjUpdates %~ deleteBy f (StartSpinPU 0 0 0)
-- f _ StartSpinPU{} = True
-- f _ _ = False
pjid = _pjID pj
dir = argV $ _pjVel pj
newSpin = case w ^? cWorld . lWorld . creatures . ix cid of
@@ -207,20 +233,21 @@ pjRemoteSetDirection ph pj w = case ph of
moveProjectile :: Projectile -> World -> World
moveProjectile pj w
| Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w
| Just (GStuckCreature crid p d) <- pj ^? pjType . gnHitEffect
| Just (GStuckCreature crid poff d) <- pj ^? pjType . gnHitEffect
, Just cr <- w ^? cWorld . lWorld . creatures . ix crid =
let cpos = cr ^. crPos
cdir = cr ^. crDir
vel = cpos - cr ^. crOldPos
in w
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjPos
.~ cpos + rotateV cdir p
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir
.~ d + cdir
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjVel
.~ vel
.~ cpos + rotateV cdir poff
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir .~ d + cdir
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjVel .~ vel
| Just GStuckCreature{} <- pj ^? pjType . gnHitEffect =
w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjType .~ Grenade GStick
-- | Just thit <- thingHit p (p + _pjVel pj) w = tryShellBounce thit pj w
| (p,Just po) <- collide3 (p `v2z` (_pjZ pj)) ((p + _pjVel pj)`v2z` (_pjZ pj + _pjZVel pj) ) w
= tryShellBounce' p po pj w
| otherwise =
w
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjSpin *~ 0.99
@@ -228,14 +255,12 @@ moveProjectile pj w
& cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir +~ _pjSpin pj
& tryThrust pj
& trySpin pj
where
p = _pjPos pj
explodeShell ::
Projectile ->
World ->
World
explodeShell :: Projectile -> World -> World
explodeShell pj w =
w
-- & cWorld . lWorld . projectiles . ix pjid . pjUpdates .~ []
& cWorld . lWorld . projectiles . ix pjid . pjType .~ RetiredProjectile
& cWorld . lWorld . projectiles . ix pjid . pjVel .~ 0
& cWorld . lWorld . projectiles . ix pjid . pjTimer .~ 30
+2 -2
View File
@@ -22,11 +22,11 @@ updateDebrisChunk w db = (w, mdb)
sv = db ^. dbVel
sp = _dbPos db
np = sp + sv
cdb = case collide3 sp np w of
cdb = case collide3WallsFloor sp np w of
(p,Nothing) -> db & dbPos .~ p
& dbVel -~ V3 0 0 1
& dbRot %~ dospin
(p,Just n) -> db & dbPos .~ p + (0.0001 * normalize n)
(p,Just (n,_)) -> db & dbPos .~ p + (0.0001 * normalize n)
& dbVel .~ (0.7 * reflectInNormal n sv) - V3 0 0 1
dospin = (_dbSpin db *)
mdb = do
+1 -1
View File
@@ -49,7 +49,7 @@ intersectSegSurface sp ep p n ss = do
return xp
isNHS :: Point3 -> Point3 -> Point3 -> Bool
isNHS p n x = 0 < dot n (x - p)
isNHS p n x = 0 > dot (p - x) n
intersectSegSegErrorTest :: Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2
{-# INLINE intersectSegSegErrorTest #-}
+81 -83
View File
@@ -489,16 +489,16 @@ FullShadowFidelity src/Shape/Data.hs 24;" C
FullSize src/Dodge/Data/Item/Params.hs 28;" C
FullyVisible src/Dodge/Data/CamouflageStatus.hs 6;" C
FunctionChangeSF src/Dodge/Data/ComposedItem.hs 34;" C
GBounce src/Dodge/Data/Projectile.hs 58;" C
GBounce src/Dodge/Data/Projectile.hs 50;" C
GEqC src/SameConstr.hs 20;" c
GIMBAL src/Dodge/Data/Item/Combine.hs 97;" C
GLASSSHARD src/Dodge/Data/Item/Combine.hs 61;" C
GLAUNCHER src/Dodge/Data/Item/Combine.hs 173;" C
GRAPECANNON src/Dodge/Data/Item/Combine.hs 151;" C
GREEN src/Color/Data.hs 16;" C
GStick src/Dodge/Data/Projectile.hs 59;" C
GStuckCreature src/Dodge/Data/Projectile.hs 60;" C
GStuckWall src/Dodge/Data/Projectile.hs 61;" C
GStick src/Dodge/Data/Projectile.hs 51;" C
GStuckCreature src/Dodge/Data/Projectile.hs 52;" C
GStuckWall src/Dodge/Data/Projectile.hs 53;" C
GYROSCOPE src/Dodge/Data/Item/Combine.hs 98;" C
GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 18;" C
GameOverOptions src/Dodge/Data/Universe.hs 72;" C
@@ -526,8 +526,8 @@ GoesOnLegs src/Dodge/Data/Equipment/Misc.hs 16;" C
GoesOnWrist src/Dodge/Data/Equipment/Misc.hs 15;" C
Government src/Dodge/Data/Scenario.hs 43;" C
GovernmentScope src/Dodge/Data/Scenario.hs 49;" t
Grenade src/Dodge/Data/Projectile.hs 42;" C
GrenadeHitEffect src/Dodge/Data/Projectile.hs 57;" t
Grenade src/Dodge/Data/Projectile.hs 35;" C
GrenadeHitEffect src/Dodge/Data/Projectile.hs 49;" t
GrenadeHitEffectSF src/Dodge/Data/ComposedItem.hs 37;" C
Gust src/Dodge/Data/Gust.hs 13;" t
GymSS src/Dodge/Data/Scenario.hs 104;" C
@@ -549,8 +549,8 @@ HeavySmokeFlare src/Dodge/Data/Muzzle.hs 29;" C
HeldItemType src/Dodge/Data/Item/Combine.hs 140;" t
HeldPlatformSF src/Dodge/Data/ComposedItem.hs 14;" C
HiddenGoal src/Dodge/Data/Scenario.hs 14;" C
HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 53;" C
HomeUsingTargeting src/Dodge/Data/Projectile.hs 54;" C
HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 45;" C
HomeUsingTargeting src/Dodge/Data/Projectile.hs 46;" C
Hospital src/Dodge/Data/Scenario.hs 69;" C
Hotkey src/Dodge/Data/Equipment/Misc.hs 32;" t
Hotkey0 src/Dodge/Data/Equipment/Misc.hs 49;" C
@@ -734,6 +734,7 @@ MODStringOption src/Dodge/Data/Universe.hs 100;" C
MOTOR src/Dodge/Data/Item/Combine.hs 64;" C
MP2Ac src/Dodge/Data/CreatureEffect.hs 56;" t
MP2NoAction src/Dodge/Data/CreatureEffect.hs 56;" C
MPO src/Dodge/Base/Collide.hs 88;" t
MTRS src/Dodge/Annotation/Data.hs 12;" t
MTree src/Dodge/Data/MetaTree.hs 9;" C
Machine src/Dodge/Data/Machine.hs 31;" t
@@ -856,7 +857,7 @@ NoDebugInfo src/Dodge/Data/Universe.hs 58;" C
NoEscapeMenuOption src/Dodge/Data/Universe.hs 79;" C
NoFaction src/Dodge/Data/Creature/State.hs 20;" C
NoFlare src/Dodge/Data/Muzzle.hs 25;" C
NoHoming src/Dodge/Data/Projectile.hs 52;" C
NoHoming src/Dodge/Data/Projectile.hs 44;" C
NoIntImp src/Dodge/Data/CreatureEffect.hs 20;" C
NoItTargeting src/Dodge/Data/Item.hs 56;" C
NoItemScroll src/Dodge/Data/Item.hs 52;" C
@@ -914,7 +915,9 @@ NumShadowCasters6 src/Dodge/Data/Config.hs 21;" C
NumShadowCasters7 src/Dodge/Data/Config.hs 22;" C
NumShadowCasters8 src/Dodge/Data/Config.hs 23;" C
NumShadowCasters9 src/Dodge/Data/Config.hs 24;" C
OChasmWall src/Dodge/Data/Object.hs 15;" C
OCreature src/Dodge/Data/Object.hs 12;" C
OFloor src/Dodge/Data/Object.hs 14;" C
OItem src/Dodge/Data/ComposedItem.hs 50;" t
OPulseBall src/Dodge/Data/Object.hs 11;" C
ORANGE src/Color/Data.hs 26;" C
@@ -1043,8 +1046,7 @@ Prison src/Dodge/Data/Scenario.hs 65;" C
Projectile src/Dodge/Data/Projectile.hs 17;" t
ProjectileParams src/Dodge/Data/Item/Use.hs 53;" C
ProjectileStabiliserSF src/Dodge/Data/ComposedItem.hs 36;" C
ProjectileType src/Dodge/Data/Projectile.hs 41;" t
ProjectileUpdate src/Dodge/Data/Projectile.hs 35;" t
ProjectileType src/Dodge/Data/Projectile.hs 34;" t
Prop src/Dodge/Data/Prop.hs 18;" t
PropDoubleLampCover src/Dodge/Data/Prop.hs 63;" C
PropDraw src/Dodge/Data/Prop.hs 58;" t
@@ -1130,12 +1132,11 @@ RandomTurn src/Dodge/Data/ActionPlan.hs 31;" C
ReactorSS src/Dodge/Data/Scenario.hs 111;" C
RecRoomSS src/Dodge/Data/Scenario.hs 103;" C
RectRoomType src/Dodge/Data/Room.hs 32;" C
ReducedRocketSmoke src/Dodge/Data/Projectile.hs 65;" C
ReducedRocketSmoke src/Dodge/Data/Projectile.hs 57;" C
ReigonalGovernment src/Dodge/Data/Scenario.hs 50;" C
Religion src/Dodge/Data/Scenario.hs 47;" C
Reload src/Dodge/Data/ActionPlan.hs 190;" C
RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 27;" C
RemoteDirectionPU src/Dodge/Data/Projectile.hs 38;" C
RemoteScreenSF src/Dodge/Data/ComposedItem.hs 25;" C
RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C
Remove_LOS src/Dodge/Data/Config.hs 77;" C
@@ -1148,7 +1149,7 @@ ResFactor src/Dodge/Data/Config.hs 97;" t
ResearchFacility src/Dodge/Data/Scenario.hs 62;" C
ResourceFailure src/Dodge/Data/Scenario.hs 29;" C
RetailFacility src/Dodge/Data/Scenario.hs 67;" C
RetiredProjectile src/Dodge/Data/Projectile.hs 48;" C
RetiredProjectile src/Dodge/Data/Projectile.hs 40;" C
Revenge src/Dodge/Data/Scenario.hs 6;" C
RewindLeftClick src/Dodge/Data/World.hs 73;" C
RezBaySS src/Dodge/Data/Scenario.hs 105;" C
@@ -1156,9 +1157,9 @@ RightButtonOptions src/Dodge/Data/RightButtonOptions.hs 13;" t
RightForward src/Dodge/Data/Creature/Stance.hs 33;" C
RightwardDT src/Dodge/Data/DoubleTree.hs 93;" C
RightwardLDT src/Dodge/Data/DoubleTree.hs 52;" C
Rocket src/Dodge/Data/Projectile.hs 43;" C
RocketHoming src/Dodge/Data/Projectile.hs 51;" t
RocketSmoke src/Dodge/Data/Projectile.hs 64;" t
Rocket src/Dodge/Data/Projectile.hs 36;" C
RocketHoming src/Dodge/Data/Projectile.hs 43;" t
RocketSmoke src/Dodge/Data/Projectile.hs 56;" t
RocketSmoke src/Dodge/Data/Cloud.hs 24;" C
Room src/Dodge/Data/GenWorld.hs 95;" t
RoomClipping src/Dodge/Data/Config.hs 107;" t
@@ -1291,7 +1292,6 @@ Stance src/Dodge/Data/Creature/Stance.hs 13;" t
StandaloneWall src/Dodge/Data/Wall/Structure.hs 13;" C
Standing src/Dodge/Data/Creature/Stance.hs 25;" C
StartSentinelPost src/Dodge/Data/ActionPlan.hs 153;" C
StartSpinPU src/Dodge/Data/Projectile.hs 37;" C
StayInArea src/Dodge/Data/Scenario.hs 13;" C
Stone src/Dodge/Data/Material.hs 11;" C
StorageSS src/Dodge/Data/Scenario.hs 94;" C
@@ -1375,7 +1375,6 @@ TeslaBeamCombine src/Dodge/Data/Beam.hs 41;" C
TeslaGunFlare src/Dodge/Data/Muzzle.hs 31;" C
TextShad src/Picture/Data.hs 37;" C
ThermalSensor src/Dodge/Data/Machine/Sensor/Type.hs 13;" C
ThrustPU src/Dodge/Data/Projectile.hs 36;" C
Tile src/Data/Tile.hs 16;" t
Tiled src/Data/Tile.hs 14;" C
TimeFlowStatus src/Dodge/Data/World.hs 58;" t
@@ -1618,7 +1617,7 @@ _bmRange src/Dodge/Data/Beam.hs 26;" f
_bmType src/Dodge/Data/Beam.hs 29;" f
_boffEff src/Dodge/Data/Button.hs 23;" f
_bonEff src/Dodge/Data/Button.hs 22;" f
_bounceTolerance src/Dodge/Data/Projectile.hs 58;" f
_bounceTolerance src/Dodge/Data/Projectile.hs 50;" f
_bpColor src/Dodge/Data/Button.hs 19;" f
_bpEff src/Dodge/Data/Button.hs 18;" f
_bsColor1 src/Dodge/Data/Button.hs 24;" f
@@ -1909,7 +1908,7 @@ _gfMax src/Dodge/Data/GenFloat.hs 12;" f
_gfMin src/Dodge/Data/GenFloat.hs 12;" f
_gibColor src/Dodge/Data/Prop.hs 44;" f
_gibSize src/Dodge/Data/Prop.hs 43;" f
_gnHitEffect src/Dodge/Data/Projectile.hs 42;" f
_gnHitEffect src/Dodge/Data/Projectile.hs 35;" f
_grBound src/Dodge/GameRoom.hs 18;" f
_grDir src/Dodge/GameRoom.hs 20;" f
_grLinkDirs src/Dodge/GameRoom.hs 21;" f
@@ -2156,31 +2155,25 @@ _peZoning src/Dodge/Data/World.hs 52;" f
_penEnd src/Dodge/Data/PathGraph.hs 35;" f
_penPathEdge src/Dodge/Data/PathGraph.hs 36;" f
_penStart src/Dodge/Data/PathGraph.hs 34;" f
_phRemoteID src/Dodge/Data/Projectile.hs 53;" f
_phTargetingID src/Dodge/Data/Projectile.hs 54;" f
_phRemoteID src/Dodge/Data/Projectile.hs 45;" f
_phTargetingID src/Dodge/Data/Projectile.hs 46;" f
_pickUpLevel src/Dodge/Layout/Generate.hs 14;" f
_pickUps src/Dodge/Layout/Generate.hs 15;" f
_pictureShaders src/Data/Preload/Render.hs 28;" f
_piercedPoints src/Dodge/Data/Creature/Misc.hs 89;" f
_pjDetonatorID src/Dodge/Data/Projectile.hs 30;" f
_pjBarrelSpin src/Dodge/Data/Projectile.hs 27;" f
_pjDetonatorID src/Dodge/Data/Projectile.hs 29;" f
_pjDir src/Dodge/Data/Projectile.hs 20;" f
_pjID src/Dodge/Data/Projectile.hs 23;" f
_pjPayload src/Dodge/Data/Projectile.hs 24;" f
_pjID src/Dodge/Data/Projectile.hs 22;" f
_pjPayload src/Dodge/Data/Projectile.hs 23;" f
_pjPos src/Dodge/Data/Projectile.hs 18;" f
_pjScreenID src/Dodge/Data/Projectile.hs 31;" f
_pjScreenID src/Dodge/Data/Projectile.hs 30;" f
_pjSpin src/Dodge/Data/Projectile.hs 21;" f
_pjSpinFactor src/Dodge/Data/Projectile.hs 22;" f
_pjTimer src/Dodge/Data/Projectile.hs 25;" f
_pjType src/Dodge/Data/Projectile.hs 29;" f
_pjUpdates src/Dodge/Data/Projectile.hs 28;" f
_pjTimer src/Dodge/Data/Projectile.hs 24;" f
_pjType src/Dodge/Data/Projectile.hs 28;" f
_pjVel src/Dodge/Data/Projectile.hs 19;" f
_pjZ src/Dodge/Data/Projectile.hs 26;" f
_pjZVel src/Dodge/Data/Projectile.hs 27;" f
_pjuCID src/Dodge/Data/Projectile.hs 37;" f
_pjuEnd src/Dodge/Data/Projectile.hs 36;" f
_pjuSpinAmound src/Dodge/Data/Projectile.hs 37;" f
_pjuStart src/Dodge/Data/Projectile.hs 36;" f
_pjuTime src/Dodge/Data/Projectile.hs 37;" f
_pjZ src/Dodge/Data/Projectile.hs 25;" f
_pjZVel src/Dodge/Data/Projectile.hs 26;" f
_plIDCont src/Dodge/Data/GenWorld.hs 82;" f
_plMID src/Dodge/Data/GenWorld.hs 81;" f
_plOrder src/Dodge/Data/GenWorld.hs 78;" f
@@ -2272,8 +2265,8 @@ _renderData src/Data/Preload.hs 11;" f
_reverseAmount src/Dodge/Data/World.hs 64;" f
_reverseAmount src/Dodge/Data/World.hs 70;" f
_reverseAmount src/Dodge/Data/World.hs 74;" f
_rkHoming src/Dodge/Data/Projectile.hs 44;" f
_rkSmoke src/Dodge/Data/Projectile.hs 45;" f
_rkHoming src/Dodge/Data/Projectile.hs 37;" f
_rkSmoke src/Dodge/Data/Projectile.hs 38;" f
_rlDir src/Dodge/Data/Room.hs 26;" f
_rlPos src/Dodge/Data/Room.hs 25;" f
_rlType src/Dodge/Data/Room.hs 24;" f
@@ -2411,10 +2404,10 @@ _ssShownItems src/Dodge/Data/SelectionList.hs 32;" f
_ssShownLength src/Dodge/Data/SelectionList.hs 33;" f
_strideAmount src/Dodge/Data/Creature/Stance.hs 22;" f
_strideLength src/Dodge/Data/Creature/Stance.hs 16;" f
_stuckCrID src/Dodge/Data/Projectile.hs 60;" f
_stuckCrOffset src/Dodge/Data/Projectile.hs 60;" f
_stuckCrRot src/Dodge/Data/Projectile.hs 60;" f
_stuckWlID src/Dodge/Data/Projectile.hs 61;" f
_stuckCrID src/Dodge/Data/Projectile.hs 52;" f
_stuckCrOffset src/Dodge/Data/Projectile.hs 52;" f
_stuckCrRot src/Dodge/Data/Projectile.hs 52;" f
_stuckWlID src/Dodge/Data/Projectile.hs 53;" f
_subInventory src/Dodge/Data/HUD.hs 20;" f
_swColor src/Dodge/Data/Shockwave.hs 18;" f
_swDam src/Dodge/Data/Shockwave.hs 23;" f
@@ -2670,7 +2663,7 @@ airlockDoor src/Dodge/Room/Airlock.hs 51;" f
airlockDoubleDoor src/Dodge/Room/Airlock.hs 54;" f
airlockSimple src/Dodge/Room/Airlock.hs 66;" f
airlockZ src/Dodge/Room/Airlock.hs 91;" f
allVisibleWalls src/Dodge/Base/Collide.hs 154;" f
allVisibleWalls src/Dodge/Base/Collide.hs 183;" f
alongSegBy src/Geometry.hs 41;" f
alteRifle src/Dodge/Item/Held/Cane.hs 22;" f
ammoMagInfo src/Dodge/Item/Info.hs 49;" f
@@ -2684,11 +2677,11 @@ angleVV src/Geometry/Vector.hs 57;" f
angleVV3 src/Geometry/Vector3D.hs 122;" f
annoToRoomTree src/Dodge/Annotation.hs 17;" f
anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f
anythingHitCirc src/Dodge/Base/Collide.hs 269;" f
anythingHitCirc src/Dodge/Base/Collide.hs 298;" f
applyCME src/Dodge/HeldUse.hs 378;" f
applyCreatureDamage src/Dodge/Creature/Damage.hs 13;" f
applyEventIO src/Loop.hs 89;" f
applyGravityPU src/Dodge/Projectile/Update.hs 57;" f
applyGravityPU src/Dodge/Projectile/Update.hs 39;" f
applyIndividualDamage src/Dodge/Creature/Damage.hs 16;" f
applyInvLock src/Dodge/HeldUse.hs 444;" f
applyMagnetsToBul src/Dodge/Bullet.hs 30;" f
@@ -2834,7 +2827,7 @@ blunderbuss src/Dodge/Item/Held/Cone.hs 14;" f
bossKeyItems src/Dodge/LockAndKey.hs 12;" f
bossRoom src/Dodge/Room/Boss.hs 60;" f
bounceDir src/Dodge/Bullet.hs 108;" f
bouncePoint src/Dodge/Base/Collide.hs 82;" f
bouncePoint src/Dodge/Base/Collide.hs 84;" f
boundPoints src/Bound.hs 10;" f
boundedGrid src/Grid.hs 19;" f
boxABC src/Polyhedra.hs 108;" f
@@ -2866,8 +2859,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 255;" f
canSeeIndirect src/Dodge/Base/Collide.hs 262;" f
canSee src/Dodge/Base/Collide.hs 284;" f
canSeeIndirect src/Dodge/Base/Collide.hs 291;" f
cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 22;" f
capacitor src/Dodge/Item/Ammo.hs 69;" f
cardEightVec src/Dodge/Base/CardinalPoint.hs 16;" f
@@ -2919,12 +2912,12 @@ chooseMovementPistol src/Dodge/Humanoid.hs 203;" f
chooseMovementPistol' src/Dodge/Humanoid.hs 208;" f
chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 88;" f
circCollisionDebugItem src/Dodge/Debug.hs 63;" f
circHitWall src/Dodge/Base/Collide.hs 171;" f
circHitWall src/Dodge/Base/Collide.hs 200;" f
circInPolygon src/Geometry/Polygon.hs 70;" f
circOnAnyCr src/Dodge/Base/Collide.hs 219;" f
circOnAnyCr src/Dodge/Base/Collide.hs 248;" f
circOnSeg src/Geometry.hs 102;" f
circOnSegNoEndpoints src/Geometry.hs 92;" f
circOnSomeWall src/Dodge/Base/Collide.hs 213;" f
circOnSomeWall src/Dodge/Base/Collide.hs 242;" f
circle src/Picture/Base.hs 180;" f
circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f
circleSolid src/Picture/Base.hs 164;" f
@@ -2972,14 +2965,16 @@ colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f
colCrsWalls src/Dodge/WallCreatureCollisions.hs 18;" f
collectDamageTypes src/Dodge/Damage.hs 53;" f
collectInvItems src/Dodge/Update/Input/InGame.hs 298;" f
collide3 src/Dodge/Base/Collide.hs 86;" f
collide3Floors src/Dodge/Base/Collide.hs 100;" f
collide3Part src/Dodge/Base/Collide.hs 110;" f
collide3Walls src/Dodge/Base/Collide.hs 91;" f
collideCircWalls src/Dodge/Base/Collide.hs 181;" f
collidePoint src/Dodge/Base/Collide.hs 52;" f
collidePointTestFilter src/Dodge/Base/Collide.hs 119;" f
collidePointWallsFilter src/Dodge/Base/Collide.hs 133;" f
collide3 src/Dodge/Base/Collide.hs 94;" f
collide3Creature src/Dodge/Base/Collide.hs 123;" f
collide3Floors src/Dodge/Base/Collide.hs 107;" f
collide3Wall src/Dodge/Base/Collide.hs 118;" f
collide3Walls src/Dodge/Base/Collide.hs 101;" f
collide3WallsFloor src/Dodge/Base/Collide.hs 90;" f
collideCircWalls src/Dodge/Base/Collide.hs 210;" f
collidePoint src/Dodge/Base/Collide.hs 54;" f
collidePointTestFilter src/Dodge/Base/Collide.hs 148;" f
collidePointWallsFilter src/Dodge/Base/Collide.hs 162;" f
collisionDebugItem src/Dodge/Debug.hs 47;" f
color src/Picture/Base.hs 108;" f
colorLamp src/Dodge/Creature/Lamp.hs 10;" f
@@ -3262,7 +3257,7 @@ destroyMatS src/Dodge/Material/Sound.hs 7;" f
destroyMcType src/Dodge/Machine/Destroy.hs 21;" f
destroyMount src/Dodge/Block.hs 100;" f
destroyMounts src/Dodge/Block.hs 97;" f
destroyProjectile src/Dodge/Projectile/Update.hs 137;" f
destroyProjectile src/Dodge/Projectile/Update.hs 144;" f
detV src/Geometry/Vector.hs 93;" f
detector src/Dodge/Item/Held/Utility.hs 27;" f
detectorColor src/Dodge/Item/Draw/SPic.hs 465;" f
@@ -3300,9 +3295,10 @@ doAfterPlacements src/Dodge/Layout.hs 83;" f
doAimTwist src/Dodge/Creature/YourControl.hs 140;" f
doAnyEquipmentEffect src/Dodge/Creature/State.hs 223;" f
doBackspace src/Dodge/Update/Input/Text.hs 31;" f
doBarrelSpin src/Dodge/Projectile/Update.hs 194;" f
doBlBl src/Dodge/BlBl.hs 5;" f
doBlSh src/Dodge/Block/Draw.hs 14;" f
doBounce src/Dodge/Base/Collide.hs 64;" f
doBounce src/Dodge/Base/Collide.hs 66;" f
doButtonEvent src/Dodge/Button/Event.hs 10;" f
doConLoop src/Loop.hs 137;" f
doConLoop' src/Loop.hs 226;" f
@@ -3330,7 +3326,7 @@ doDrawing src/Dodge/Render.hs 35;" f
doDrawing' src/Dodge/Render.hs 46;" f
doFloatFloat src/Dodge/FloatFunction.hs 5;" f
doGenFloat src/Dodge/HeldUse.hs 1212;" f
doGravityPU src/Dodge/Projectile/Update.hs 51;" f
doGravityPU src/Dodge/Projectile/Update.hs 33;" f
doHeldUseEffect src/Dodge/HeldUse.hs 354;" f
doInPlacements src/Dodge/Layout.hs 92;" f
doIndividualPlacements src/Dodge/Layout.hs 117;" f
@@ -3366,7 +3362,7 @@ doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f
doTestDrawing src/Dodge/Render.hs 42;" f
doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f
doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f
doThrust src/Dodge/Projectile/Update.hs 153;" f
doThrust src/Dodge/Projectile/Update.hs 166;" f
doTimeScroll src/Dodge/Update.hs 208;" f
doTmTm src/Dodge/TmTm.hs 6;" f
doTmWdWd src/Dodge/WorldEffect.hs 99;" f
@@ -3596,7 +3592,7 @@ expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f
expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f
expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f
expireAndDamage src/Dodge/Bullet.hs 186;" f
explodeShell src/Dodge/Projectile/Update.hs 249;" f
explodeShell src/Dodge/Projectile/Update.hs 260;" f
explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 556;" f
explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f
extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f
@@ -3817,11 +3813,11 @@ handleResizeEvent src/Dodge/Event.hs 53;" f
handleTextInput src/Dodge/Event/Input.hs 18;" f
handleWindowMoveEvent src/Dodge/Event.hs 44;" f
hardQuit src/Dodge/Concurrent.hs 32;" f
hasButtonLOS src/Dodge/Base/Collide.hs 233;" f
hasButtonLOS src/Dodge/Base/Collide.hs 262;" f
hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f
hasFrontArmour src/Dodge/Creature/Test.hs 118;" f
hasLOS src/Dodge/Base/Collide.hs 226;" f
hasLOSIndirect src/Dodge/Base/Collide.hs 241;" f
hasLOS src/Dodge/Base/Collide.hs 255;" f
hasLOSIndirect src/Dodge/Base/Collide.hs 270;" f
hat src/Dodge/Item/Equipment.hs 76;" f
head src/DoubleStack.hs 14;" f
headLamp src/Dodge/Item/Equipment.hs 79;" f
@@ -3989,7 +3985,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 186;" f
isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 172;" f
isValidCommand src/Dodge/Debug/Terminal.hs 131;" f
isVowel src/StringHelp.hs 8;" f
isWalkable src/Dodge/Base/Collide.hs 248;" f
isWalkable src/Dodge/Base/Collide.hs 277;" f
isoMatrix src/MatrixHelper.hs 30;" f
isotriBWH src/Geometry/Polygon.hs 20;" f
itDim src/Dodge/Item/InvSize.hs 21;" f
@@ -4345,7 +4341,7 @@ moveCombineSel src/Dodge/Update/Scroll.hs 114;" f
moveInverseShockwave src/Dodge/Shockwave/Update.hs 44;" f
moveLSThen src/Dodge/Placement/Instance/LightSource.hs 30;" f
movePenBullet src/Dodge/Bullet.hs 201;" f
moveProjectile src/Dodge/Projectile/Update.hs 224;" f
moveProjectile src/Dodge/Projectile/Update.hs 232;" f
moveRoomBy src/Dodge/Room/Link.hs 53;" f
moveShockwave src/Dodge/Shockwave/Update.hs 15;" f
moveToSideFirstOutLink src/Dodge/Room/Warning.hs 55;" f
@@ -4455,10 +4451,10 @@ overPos src/Picture/Base.hs 303;" f
overPosObj src/Shape.hs 277;" f
overPosSH src/Shape.hs 261;" f
overPosSP src/ShapePicture.hs 41;" f
overlapCircWalls src/Dodge/Base/Collide.hs 160;" f
overlapCircWallsClosest src/Dodge/Base/Collide.hs 199;" f
overlapSegCrs src/Dodge/Base/Collide.hs 58;" f
overlapSegWalls src/Dodge/Base/Collide.hs 142;" f
overlapCircWalls src/Dodge/Base/Collide.hs 189;" f
overlapCircWallsClosest src/Dodge/Base/Collide.hs 228;" f
overlapSegCrs src/Dodge/Base/Collide.hs 60;" f
overlapSegWalls src/Dodge/Base/Collide.hs 171;" f
overrideInternal src/Dodge/Creature/ReaderUpdate.hs 174;" f
overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 35;" f
overwriteLabel src/Dodge/Tree/Compose.hs 31;" f
@@ -4511,7 +4507,7 @@ pipe src/Dodge/Item/Craftable.hs 32;" f
pistol src/Dodge/Item/Held/Stick.hs 40;" f
pistolCrit src/Dodge/Creature/PistolCrit.hs 12;" f
pistolerRoom src/Dodge/Room/Room.hs 321;" f
pjRemoteSetDirection src/Dodge/Projectile/Update.hs 203;" f
pjRemoteSetDirection src/Dodge/Projectile/Update.hs 211;" f
plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f
plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f
plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f
@@ -4815,6 +4811,7 @@ restrictInLinks src/Dodge/RoomLink.hs 42;" f
restrictLinkType src/Dodge/RoomLink.hs 32;" f
restrictOutLinks src/Dodge/RoomLink.hs 45;" f
restrictRMInLinksPD src/Dodge/Room/Link.hs 25;" f
restrictSeg src/Dodge/Base/Collide.hs 132;" f
resumeSound src/Dodge/SoundLogic.hs 48;" f
retreatActionsPistol src/Dodge/Humanoid.hs 249;" f
retreatFireLauncher src/Dodge/Humanoid.hs 270;" f
@@ -5041,7 +5038,7 @@ shapeVerxSize src/Shape/Parameters.hs 10;" f
shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f
shatterGunSPic src/Dodge/Item/Draw/SPic.hs 324;" f
shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f
shellCollisionCheck src/Dodge/Projectile/Update.hs 86;" f
shellExplosionCheck src/Dodge/Projectile/Update.hs 68;" f
shellMag src/Dodge/Item/Ammo.hs 49;" f
shellModule src/Dodge/Item/Scope.hs 123;" f
shellShape src/Dodge/Projectile/Draw.hs 34;" f
@@ -5439,10 +5436,11 @@ tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 26;" f
tryPutItemInInv src/Dodge/Inventory/Add.hs 42;" f
tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f
trySeedFromClipboard src/Dodge/Menu.hs 91;" f
tryShellBounce src/Dodge/Projectile/Update.hs 101;" f
trySpinByCID src/Dodge/Projectile/Update.hs 181;" f
tryShellBounce src/Dodge/Projectile/Update.hs 81;" f
tryShellBounce' src/Dodge/Projectile/Update.hs 111;" f
trySpin src/Dodge/Projectile/Update.hs 154;" f
trySynthBullet src/Dodge/Creature/State.hs 249;" f
tryThrust src/Dodge/Projectile/Update.hs 147;" f
tryThrust src/Dodge/Projectile/Update.hs 160;" f
tryUseParent src/Dodge/Creature/State.hs 227;" f
turnTo src/Dodge/Movement/Turn.hs 8;" f
turret src/Dodge/Placement/Instance/Turret.hs 35;" f
@@ -5477,7 +5475,6 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f
unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f
unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 122;" f
unusedSpotNearInLink src/Dodge/PlacementSpot.hs 191;" f
upProjectile src/Dodge/Projectile/Update.hs 36;" f
updateAimPos src/Dodge/Update.hs 321;" f
updateAllNodes src/TreeHelp.hs 85;" f
updateArc src/Dodge/Tesla.hs 44;" f
@@ -5548,7 +5545,7 @@ updateObjCatMaybes src/Dodge/Update.hs 578;" f
updateObjMapMaybe src/Dodge/Update.hs 571;" f
updatePastWorlds src/Dodge/Update.hs 441;" f
updatePreload src/Preload/Update.hs 20;" f
updateProjectile src/Dodge/Projectile/Update.hs 28;" f
updateProjectile src/Dodge/Projectile/Update.hs 26;" f
updateProp src/Dodge/Prop/Update.hs 11;" f
updatePulse src/Dodge/Creature/Update.hs 39;" f
updatePulseBall src/Dodge/Update.hs 467;" f
@@ -5653,7 +5650,7 @@ viewClipBounds src/Dodge/Debug/Picture.hs 318;" f
viewDistanceFromItems src/Dodge/Update/Camera.hs 186;" f
viewTarget src/Dodge/Creature/ReaderUpdate.hs 146;" f
violet src/Color.hs 21;" f
visibleWalls src/Dodge/Base/Collide.hs 146;" f
visibleWalls src/Dodge/Base/Collide.hs 175;" f
visionCheck src/Dodge/Creature/Perception.hs 153;" f
vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f
volleyGun src/Dodge/Item/Held/Cane.hs 15;" f
@@ -5665,6 +5662,7 @@ wallBlips src/Dodge/RadarSweep.hs 98;" f
wallBuffer src/Dodge/WallCreatureCollisions.hs 52;" f
wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f
wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f
wallToSurface src/Dodge/Base/Collide.hs 140;" f
wallsFromRooms src/Dodge/Layout.hs 146;" f
wallsToDraw src/Dodge/Render/Walls.hs 17;" f
warmupSound src/Dodge/HeldUse.hs 1454;" f