Tweak creature cliff interaction, using updateCarriage

This commit is contained in:
2026-04-05 15:14:50 +01:00
parent 22a1162e14
commit d5c98f7c4e
4 changed files with 130 additions and 100 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ chaseCorpse cr = mconcat
& each %~ vNormal
& each . _y *~ 0.6
, colorSH (_skinUpper cskin) . overPosSH (Q.apply neckq) $
(upperPrismPolyHalfMI 3 $ (+ V2 8 0) . vNormal <$> trapTBH 2 5 8)
upperPrismPolyHalfMI 3 ((+ V2 8 0) . vNormal <$> trapTBH 2 5 8)
, colorSH (_skinHead cskin)
(overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4]))
, rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr
+91 -11
View File
@@ -2,8 +2,11 @@
module Dodge.Creature.State.WalkCycle (updateCarriage) where
import Dodge.Creature.Radius
import Geometry
import Dodge.Update.Camera.Rotate
import qualified SDL
import Dodge.WorldEvent.ThingsHit
import Geometry.Polygon
import Data.Maybe
import Dodge.Creature.HandPos
import Linear
@@ -19,16 +22,9 @@ updateCarriage cid w = fromMaybe w $ do
updateCarriage' :: Int -> Creature -> World -> Carriage -> World
updateCarriage' cid cr w = \case
Walking -> case (cr ^? crType . strideAmount,cr ^? crType . footForward) of
(Just x,Just ff) | x >= strideLength cr -> w
& soundMultiFrom
[FootstepSound i | i <- [0 .. 10]]
(cr ^. crPos . _xy)
(chooseFootSound ff)
Nothing
& over (cWorld . lWorld . creatures . ix cid . crType) resetStride
& tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
_ -> w & tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
Walking -> maybeTakeStep cid cr w
& tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
& chasmTestCliffPush walkCliffPush cr
Floating -> w
Flying {_zSpeed = dz, _flyInertia = x} ->
w & tocr . crPos . _xy +~ x *^ f (cr ^. crOldPos . _xy - oop ^. _xy)
@@ -47,12 +43,96 @@ updateCarriage' cid cr w = \case
else w & cWorld . lWorld . creatures . ix cid . crPos .~ ep
OnGround {} -> w
& tocr . crPos . _xy +~ 0.8 *^ (cr ^. crOldPos . _xy - oop ^. _xy)
& chasmTestCliffPush groundCliffPush cr
where
tocr = cWorld . lWorld . creatures . ix cid
oop = cr ^. crOldOldPos
f v | norm v > 10 = 10 *^ signorm v
| otherwise = v
pushAgainst :: Point2 -> Point2 -> Point2
pushAgainst x y
| a > norm y = 0
| a > 0 = y - project y x
| otherwise = y
where
-- project y x is the projection of x onto y
a = dotV (normalize y) (project y x)
walkCliffPush :: Creature -> [(Point2,Point2)] -> Point2
walkCliffPush cr xs = pushAgainst (cr ^. crOldPos . _xy - cr ^. crOldOldPos . _xy) (-h xs)
where
cxy = cr ^. crPos . _xy
h = circSegsInside cxy (cr ^. crType . to crRad)
groundCliffPush :: Creature -> [(Point2,Point2)] -> Point2
groundCliffPush cr xs = x *^ h xs
where
--x = max 0.05 $ 0.05 + 0.05 * (1 - dist cxy p / (2*r))
x = max 0 $ 0.25 * (1 - dist cxy p / (2*r)) ** 2
cxy = cr ^. crPos . _xy
r = cr ^. crType . to crRad
h = circSegsInside cxy r
p = circSegsInside' cxy r xs
circSegsInside' :: Point2 -> Float -> [(Point2,Point2)] -> Point2
circSegsInside' p r = \case
[x,y] -> fromJust (uncurry (uncurry intersectLineLine (f x)) (f y))
((x,y):_) -> closestPointOnLine x y p + r *^ normalizeV (vNormal (x-y))
_ -> error "circSegsInside"
where
r' = r+0.5
f (x,y) = (x+r'*^n,y+r'*^n)
where
n = normalizeV (vNormal (x-y))
circSegsInside :: Point2 -> Float -> [(Point2,Point2)] -> Point2
circSegsInside p r = \case
[x,y] -> normalize $ fromJust (uncurry (uncurry intersectLineLine (f x)) (f y)) - p
((x,y):_) -> normalizeV (vNormal (x-y))
_ -> error "circSegsInside"
where
r' = r+0.5
f (x,y) = (x+r'*^n,y+r'*^n)
where
n = normalizeV (vNormal (x-y))
--circTwoLineCorner :: Float -> Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2
--circTwoLineCorner r x y a b = intersectLineLine x y a b
chasmTestCliffPush :: (Creature -> [(Point2,Point2)] -> Point2) -> Creature -> World -> World
chasmTestCliffPush f' cr w
| (xy:xys) <- filter g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy +~ f' cr (xy:xys) -- (f cr (xy:xys)) *^ h xy xys
& chasmRotate cr (uncurry (-) xy)
| any f (w ^. cWorld . chasms) = w & tocr . crStance . carriage .~ Falling -- %~ startFalling
| otherwise = w
where
cxy = cr ^. crPos . _xy
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ crOnSeg cr
f = pointInPoly cxy
chasmRotate :: Creature -> Point2 -> World -> World
chasmRotate cr v w
| t = rotateTo8 (argV v) w
| otherwise = w
where
t = cr ^. crID == 0 && null (w ^? input . mouseButtons . ix SDL.ButtonRight)
maybeTakeStep :: Int -> Creature -> World -> World
maybeTakeStep cid cr = case (cr ^? crType . strideAmount,cr ^? crType . footForward) of
(Just x,Just ff) | x >= strideLength cr ->
soundMultiFrom
[FootstepSound i | i <- [0 .. 10]]
(cr ^. crPos . _xy)
(chooseFootSound ff)
Nothing
. over (cWorld . lWorld . creatures . ix cid . crType) resetStride
_ -> id
resetStride :: CreatureType -> CreatureType
resetStride ct = case ct ^? footForward of
+9 -62
View File
@@ -1,18 +1,15 @@
{-# LANGUAGE LambdaCase #-}
module Dodge.Creature.Update (updateCreature) where
import Dodge.WorldEvent.ThingsHit
import Dodge.Base.You
import Control.Monad
import Color
import qualified Data.IntMap.Strict as IM
import qualified Data.List as List
import Data.Maybe
import Dodge.Barreloid
-- import Dodge.Base.NewID
import Dodge.Corpse.Make
import Dodge.Creature.Action
import Dodge.Creature.Radius
import Dodge.Creature.State
import Dodge.Creature.State.WalkCycle
import Dodge.Creature.Vocalization
@@ -25,14 +22,12 @@ import Dodge.Inventory
import Dodge.Lampoid
import Dodge.Prop.Gib
import Dodge.SoundLogic
import Dodge.Update.Camera.Rotate
import FoldableHelp
import Geometry
import LensHelp
import Linear
import NewInt
import RandomHelp
import SDL (MouseButton (..))
import Shape
import ShapePicture.Data
@@ -41,7 +36,7 @@ import ShapePicture.Data
updateCreature :: Creature -> World -> World
updateCreature cr
| cr ^. crPos . _z < negate 300 = (tocr . crHP .~ CrDestroyed Pitted) . destroyAllInvItems cr
| CrIsCorpse _ <- cr ^. crHP = updateCarriage (_crID cr) . chasmTestCorpse cr
| CrIsCorpse _ <- cr ^. crHP = updateCarriage (_crID cr)
| null (cr ^? crHP . _HP) = id
| otherwise = updateLivingCreature cr
where
@@ -49,7 +44,7 @@ updateCreature cr
updateLivingCreature :: Creature -> World -> World
updateLivingCreature cr =
chasmTestLiving cr . case _crType cr of
case _crType cr of
Avatar{} ->
(cWorld . lWorld . creatures . ix 0 . crType . avatarPulse %~ updatePulse)
. crUpdate cid
@@ -130,7 +125,8 @@ startDeathTimer cr = cr
toDeathCarriage :: Carriage -> Carriage
toDeathCarriage = \case
Flying {} -> Falling
x -> x
Walking -> OnGround
_ -> Falling
-- could look at the amount of damage here (given by maxDamage) too
corpseOrGib :: Creature -> World -> World
@@ -142,7 +138,7 @@ corpseOrGib cr = case cr ^? crDamage . to maxDamageType . _Just . _1 of
sethp (CrIsCorpse $ poisonSPic thecorpse)
. dodeathsound PoisonDeath
Just PhysicalDamage
| _crPain cr > 200 ->
| _crPain cr > 300 ->
makeCrGibs cr
. sethp (CrDestroyed Gibbed)
. dodeathsound GibsDeath
@@ -172,59 +168,10 @@ poisonSPic = _1 %~ overColSH (mixColors 0.5 0.5 green . normalizeColor)
dropAll :: Creature -> World -> World
dropAll cr w = foldl' (flip (dropItem cr)) w . reverse . IM.keys . _unNIntMap $ _crInv cr
chasmTestLiving :: Creature -> World -> World
chasmTestLiving cr w
| Flying {} <- cr ^. crStance . carriage = w
| Falling {} <- cr ^. crStance . carriage = w
| Just (x, y) <- List.find g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy -~ normalizeV (vNormal (x - y))
& chasmRotate cr (x - y)
| any f (w ^. cWorld . chasms) = w & tocr %~ startFalling
| otherwise = w
where
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ crOnSeg cr
f = pointInPoly (cr ^. crPos . _xy)
startFalling :: Creature -> Creature
startFalling cr = case cr ^. crStance . carriage of
Walking -> cr & crStance . carriage .~ Falling
_ -> cr & crStance . carriage .~ Falling
chasmTestCorpse :: Creature -> World -> World
chasmTestCorpse cr w
| (xy:xys) <- filter g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy +~ h xy xys
| any f (w ^. cWorld . chasms) = w & tocr %~ startFalling
| otherwise = w
where
h :: (Point2,Point2) -> [(Point2,Point2)] -> Point2
h (x,y) [] = normalizeV (vNormal (x-y))
h x (y:_) = unitVectorAtAngle $ tweenAngles (d1/(d1+d2)) (h' x) (h' y)
where
h' :: (Point2,Point2) -> Float
h' = argV . vNormal . uncurry (-)
d a = uncurry closestPointOnLine a (cr ^. crPos . _xy)
d1 :: Float
d1 = norm (cxy - d x)
d2 :: Float
d2 = norm (cxy - d y)
cxy = cr ^. crPos . _xy
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ circOnSeg cxy (crRad $ cr ^. crType)
f = pointInPoly cxy
chasmRotate :: Creature -> Point2 -> World -> World
chasmRotate cr v w
| t = rotateTo8 (argV v) w
| otherwise = w
where
t = cr ^. crID == 0 && null (w ^? input . mouseButtons . ix SDL.ButtonRight)
--startFalling :: Creature -> Creature
--startFalling cr = case cr ^. crStance . carriage of
-- Walking -> cr & crStance . carriage .~ Falling
-- _ -> cr & crStance . carriage .~ Falling
updatePulse :: Pulse -> Pulse
updatePulse p
+29 -26
View File
@@ -2814,20 +2814,22 @@ changeSwapWith src/Dodge/Inventory.hs 283;" f
charToTuple src/Picture/Base.hs 312;" f
charToTupleGrad src/Picture/Text.hs 18;" f
chartreuse src/Color.hs 51;" f
chaseCorpse src/Dodge/Corpse/Make.hs 32;" f
chaseCrit src/Dodge/Creature/ChaseCrit.hs 28;" f
chaseCritInternal src/Dodge/Humanoid.hs 11;" f
chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f
chaseUpperBody src/Dodge/Creature/Picture.hs 77;" f
chasmRotate src/Dodge/Creature/Update.hs 221;" f
chasmRotate src/Dodge/Creature/State/WalkCycle.hs 99;" f
chasmSimpleMaze src/Dodge/Room/Tutorial.hs 375;" f
chasmSpitTerminal src/Dodge/Room/Tutorial.hs 307;" f
chasmTestCorpse src/Dodge/Creature/Update.hs 195;" f
chasmTestLiving src/Dodge/Creature/Update.hs 174;" f
chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 70;" f
chasmTestLiving src/Dodge/Creature/State/WalkCycle.hs 85;" f
chasmTestOnGround src/Dodge/Creature/State/WalkCycle.hs 106;" f
chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f
checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f
checkConnection src/Dodge/Inventory/Swap.hs 66;" f
checkDeath src/Dodge/Creature/Update.hs 99;" f
checkDeath' src/Dodge/Creature/Update.hs 102;" f
checkDeath src/Dodge/Creature/Update.hs 95;" f
checkDeath' src/Dodge/Creature/Update.hs 98;" f
checkEndGame src/Dodge/Update.hs 859;" f
checkErrorGL src/Shader/Compile.hs 86;" f
checkFBO src/Framebuffer/Check.hs 6;" f
@@ -2842,7 +2844,7 @@ chemFuelPouch src/Dodge/Item/Ammo.hs 81;" f
chestPQ src/Dodge/Creature/HandPos.hs 180;" f
chooseCursorBorders src/Dodge/Render/List.hs 141;" f
chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f
chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 64;" f
chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 155;" f
chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f
chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f
circHitWall src/Dodge/Base/Collide.hs 244;" f
@@ -2948,7 +2950,7 @@ copierItemUpdate src/Dodge/Creature/State.hs 136;" f
copyItemToFloor src/Dodge/FloorItem.hs 14;" f
corDoor src/Dodge/Room/Room.hs 411;" f
cornerList src/Preload/Render.hs 236;" f
corpseOrGib src/Dodge/Creature/Update.hs 135;" f
corpseOrGib src/Dodge/Creature/Update.hs 132;" f
corridor src/Dodge/Room/Corridor.hs 17;" f
corridorBoss src/Dodge/LockAndKey.hs 135;" f
corridorN src/Dodge/Room/Corridor.hs 58;" f
@@ -2997,7 +2999,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" f
crSpring src/Dodge/Update.hs 968;" f
crStratConMatches src/Dodge/Creature/Test.hs 78;" f
crStrength src/Dodge/Creature/Statistics.hs 29;" f
crUpdate src/Dodge/Creature/Update.hs 92;" f
crUpdate src/Dodge/Creature/Update.hs 88;" f
crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f
crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f
crVocalResetTime src/Dodge/Creature/Vocalization.hs 59;" f
@@ -3446,7 +3448,7 @@ drawZone src/Dodge/Debug/Picture.hs 152;" f
drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f
drawZoneCol src/Dodge/Debug/Picture.hs 149;" f
drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f
dropAll src/Dodge/Creature/Update.hs 171;" f
dropAll src/Dodge/Creature/Update.hs 168;" f
dropInventoryPath src/Dodge/HeldUse.hs 1371;" f
dropItem src/Dodge/Creature/Action.hs 161;" f
dropper src/Dodge/Item/Scope.hs 82;" f
@@ -3786,7 +3788,7 @@ hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f
hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f
hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f
hoverCrit src/Dodge/Creature/ChaseCrit.hs 35;" f
hoverCritHoverSound src/Dodge/Creature/Update.hs 69;" f
hoverCritHoverSound src/Dodge/Creature/Update.hs 65;" f
hoverCritInternal src/Dodge/Humanoid.hs 28;" f
hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 152;" f
hoverDeathSounds src/Dodge/Creature/Vocalization.hs 52;" f
@@ -4117,7 +4119,7 @@ makeButton src/Dodge/LevelGen/Switch.hs 16;" f
makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f
makeColorTermLine src/Dodge/Terminal.hs 124;" f
makeColorTermPara src/Dodge/Terminal.hs 121;" f
makeCorpse src/Dodge/Corpse/Make.hs 13;" f
makeCorpse src/Dodge/Corpse/Make.hs 15;" f
makeCrGibs src/Dodge/Prop/Gib.hs 19;" f
makeDebris src/Dodge/Block/Debris.hs 75;" f
makeDebrisDirected src/Dodge/Block/Debris.hs 101;" f
@@ -4182,6 +4184,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 538;" f
maybeOpenConsole src/Dodge/Update.hs 133;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 135;" f
maybeTakeStep src/Dodge/Creature/State/WalkCycle.hs 133;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f
mcBackgroundSound src/Dodge/Machine/Update.hs 152;" f
mcColor src/Dodge/Machine/Draw.hs 82;" f
@@ -4337,7 +4340,7 @@ nodeNear src/Dodge/Path.hs 94;" f
nodesNear src/Dodge/Path.hs 100;" f
nonConvexChasm src/Dodge/Room/Tutorial.hs 265;" f
nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f
normalGait src/Dodge/Creature/State/WalkCycle.hs 59;" f
normalGait src/Dodge/Creature/State/WalkCycle.hs 150;" f
normalTo8 src/Shader/Poke.hs 466;" f
normalizeAngle src/Geometry/Vector.hs 130;" f
normalizeAnglePi src/Dodge/Base.hs 154;" f
@@ -4482,7 +4485,7 @@ pointerToItemID src/Dodge/Item/Location.hs 42;" f
pointerYourRootItem src/Dodge/Item/Location.hs 33;" f
pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f
pointsToPoly src/Geometry/ConvexPoly.hs 37;" f
poisonSPic src/Dodge/Creature/Update.hs 167;" f
poisonSPic src/Dodge/Creature/Update.hs 164;" f
poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f
poke34 src/Shader/Poke.hs 509;" f
pokeArrayOff src/Shader/Poke.hs 521;" f
@@ -4723,7 +4726,7 @@ replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 184;" f
replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f
resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 63;" f
resetPLUse src/Dodge/PlacementSpot.hs 94;" f
resetStride src/Dodge/Creature/State/WalkCycle.hs 54;" f
resetStride src/Dodge/Creature/State/WalkCycle.hs 145;" f
resetTerminal src/Dodge/WorldEffect.hs 158;" f
resizeFBOTO src/Framebuffer/Update.hs 185;" f
resizeFBOTO' src/Framebuffer/Update.hs 197;" f
@@ -4849,7 +4852,7 @@ scaleSH src/Shape.hs 266;" f
scalp src/Dodge/Creature/Picture.hs 156;" f
scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f
scodeToChar src/Dodge/ScodeToChar.hs 6;" f
scorchSPic src/Dodge/Creature/Update.hs 164;" f
scorchSPic src/Dodge/Creature/Update.hs 161;" f
screenBox src/Dodge/Base/Window.hs 54;" f
screenPolygon src/Dodge/Base/Window.hs 18;" f
screenPolygonBord src/Dodge/Base/Window.hs 28;" f
@@ -5005,10 +5008,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 97;" f
showManObj src/Dodge/TestString.hs 98;" f
showMuzzlePositions src/Dodge/Debug.hs 292;" f
showTerminalError src/Dodge/Debug/Terminal.hs 80;" f
showTimeFlow src/Dodge/TestString.hs 114;" f
showTimeFlow src/Dodge/TestString.hs 115;" f
shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f
shrinkVert src/Geometry/Polygon.hs 202;" f
shuffle src/RandomHelp.hs 68;" f
@@ -5141,9 +5144,8 @@ stackText src/Picture/Base.hs 180;" f
stackedInventory src/Dodge/Creature.hs 326;" f
startCr src/Dodge/Creature.hs 90;" f
startCrafts src/Dodge/Room/Start.hs 94;" f
startDeathTimer src/Dodge/Creature/Update.hs 123;" f
startDeathTimer src/Dodge/Creature/Update.hs 119;" f
startDrag src/Dodge/Update/Input/InGame.hs 286;" f
startFalling src/Dodge/Creature/Update.hs 190;" f
startInvList src/Dodge/Creature.hs 105;" f
startInventory src/Dodge/Creature.hs 108;" f
startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f
@@ -5292,7 +5294,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 138;" f
toBothLnk src/Dodge/RoomLink.hs 136;" f
toClosestMultiple src/HelpNum.hs 3;" f
toColor8 src/Color.hs 158;" f
toDeathCarriage src/Dodge/Creature/Update.hs 129;" f
toDeathCarriage src/Dodge/Creature/Update.hs 125;" f
toFloatVAs src/Shader/Compile.hs 66;" f
toLabel src/Dodge/Cleat.hs 16;" f
toMultiset src/Multiset.hs 64;" f
@@ -5316,7 +5318,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 671;" 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 92;" f
topTestPart src/Dodge/TestString.hs 93;" f
torchShape src/Dodge/Item/Draw/SPic.hs 277;" f
torqueAmount src/Dodge/HeldUse.hs 606;" f
torqueCr src/Dodge/WorldEffect.hs 85;" f
@@ -5437,14 +5439,14 @@ updateBulVel src/Dodge/Bullet.hs 57;" f
updateBullet src/Dodge/Bullet.hs 22;" f
updateBullets src/Dodge/Update.hs 646;" f
updateCamera src/Dodge/Update/Camera.hs 33;" f
updateCarriage src/Dodge/Creature/State/WalkCycle.hs 14;" f
updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 19;" f
updateCarriage src/Dodge/Creature/State/WalkCycle.hs 18;" f
updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 23;" f
updateCloseObjects src/Dodge/Inventory.hs 126;" f
updateCloud src/Dodge/Update.hs 888;" f
updateClouds src/Dodge/Update.hs 757;" f
updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f
updateCombineSections src/Dodge/DisplayInventory.hs 47;" f
updateCreature src/Dodge/Creature/Update.hs 40;" f
updateCreature src/Dodge/Creature/Update.hs 36;" f
updateCreatureGroups src/Dodge/Update.hs 618;" f
updateCreatureSoundPositions src/Dodge/Update.hs 597;" f
updateCreatureStride src/Dodge/Update.hs 374;" f
@@ -5493,7 +5495,7 @@ updateLaser src/Dodge/Laser/Update.hs 12;" f
updateLasers src/Dodge/Update.hs 497;" f
updateLeftParentSF src/Dodge/Item/Grammar.hs 177;" f
updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f
updateLivingCreature src/Dodge/Creature/Update.hs 49;" f
updateLivingCreature src/Dodge/Creature/Update.hs 45;" f
updateLongPressInGame src/Dodge/Update/Input/InGame.hs 417;" f
updateMachine src/Dodge/Machine/Update.hs 24;" f
updateMagnets src/Dodge/Update.hs 391;" f
@@ -5510,7 +5512,7 @@ updatePlasmaBall src/Dodge/Update.hs 511;" f
updatePlasmaBalls src/Dodge/Update.hs 653;" f
updatePreload src/Preload/Update.hs 21;" f
updateProjectile src/Dodge/Projectile/Update.hs 26;" f
updatePulse src/Dodge/Creature/Update.hs 228;" f
updatePulse src/Dodge/Creature/Update.hs 176;" f
updatePulseBall src/Dodge/Update.hs 531;" f
updatePulseLaser src/Dodge/Update.hs 700;" f
updatePulseLasers src/Dodge/Update.hs 506;" f
@@ -5618,6 +5620,7 @@ visibleWalls src/Dodge/Base/Collide.hs 222;" f
visionCheck src/Dodge/Creature/Perception.hs 165;" f
volleyGun src/Dodge/Item/Held/Cane.hs 15;" f
volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f
walkCliffPush src/Dodge/Creature/State/WalkCycle.hs 54;" f
walkNozzle src/Dodge/HeldUse.hs 826;" f
walkableNodeNear src/Dodge/Path.hs 90;" f
wallBlips src/Dodge/RadarSweep.hs 99;" f