diff --git a/src/Dodge/Corpse/Make.hs b/src/Dodge/Corpse/Make.hs index 9d5d1bbef..bd28c0647 100644 --- a/src/Dodge/Corpse/Make.hs +++ b/src/Dodge/Corpse/Make.hs @@ -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 diff --git a/src/Dodge/Creature/State/WalkCycle.hs b/src/Dodge/Creature/State/WalkCycle.hs index b0ab6acd0..609a05efe 100644 --- a/src/Dodge/Creature/State/WalkCycle.hs +++ b/src/Dodge/Creature/State/WalkCycle.hs @@ -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 diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index ee4bf14a1..4363d775a 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -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 diff --git a/tags b/tags index b5339d81b..968c7c018 100644 --- a/tags +++ b/tags @@ -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