From 43a5817ef3abdcc8a58f85114284884144cf8f89 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 3 Apr 2026 10:32:54 +0100 Subject: [PATCH] Work on Falling carriage state --- .hlint.yaml | 1 + src/Dodge/Creature/ChaseCrit.hs | 4 +- src/Dodge/Creature/Picture.hs | 2 +- src/Dodge/Creature/State.hs | 2 +- src/Dodge/Creature/State/WalkCycle.hs | 32 ++++++++------ src/Dodge/Creature/Test.hs | 2 +- src/Dodge/Creature/Update.hs | 22 ++++----- src/Dodge/Creature/Volition.hs | 2 +- src/Dodge/Data/Creature.hs | 1 + src/Dodge/Data/Creature/Stance.hs | 2 +- src/Dodge/Default/Creature.hs | 1 + src/Dodge/Path.hs | 2 +- src/Dodge/Prop/Draw.hs | 4 +- src/Dodge/Room/LasTurret.hs | 2 +- src/Dodge/Room/Link.hs | 2 +- src/Dodge/Update.hs | 2 +- tags | 64 ++++++++++++++------------- 17 files changed, 79 insertions(+), 68 deletions(-) diff --git a/.hlint.yaml b/.hlint.yaml index 41dc14deb..3eefe5fc4 100644 --- a/.hlint.yaml +++ b/.hlint.yaml @@ -61,6 +61,7 @@ # - ignore: {name: Use let} # - ignore: {name: Use const, within: SpecialModule} # Only within certain modules +- ignore: {name: Functor law} # Define some custom infix operators # - fixity: infixr 3 ~^#^~ diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 9a0397a4c..3bb5706e0 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -36,7 +36,7 @@ hoverCrit :: Creature hoverCrit = defaultCreature & crName .~ "hoverCrit" - & crHP .~ HP 10000 + & crHP .~ HP 1000 & crType .~ HoverCrit 0 & crFaction .~ ColorFaction blue - & crStance . carriage .~ Flying 15 0.975 0 + & crStance . carriage .~ Flying 15 0.975 diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index d5b47694a..99c506e9c 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -96,7 +96,7 @@ chaseUpperBody cr = colorSH (_skinUpper cskin) Just (Walking sa RightForward) -> -f sa _ -> 0 --tbob = 2 * oneSmooth ((sLen - 2*i) / sLen) - f i = ((sLen - 2*i) / sLen) + f i = (sLen - 2*i) / sLen oneSmooth :: Float -> Float diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 74c0dfb43..f7ba3fc68 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -51,7 +51,7 @@ applyPastDamages cr w | HoverCrit {} <- cr ^. crType , _crPain cr > 50 = w & cWorld . lWorld . creatures . ix (_crID cr) . crPain -~ 50 - & cWorld . lWorld . creatures . ix (_crID cr) . crPos . _z %~ max 12 . (subtract 1) + & cWorld . lWorld . creatures . ix (_crID cr) . crPos . _z %~ max 12 . subtract 1 | HoverCrit {} <- cr ^. crType = w | _crPain cr > 200 = dojitter 3 100 | _crPain cr > 20 = dojitter 2 10 diff --git a/src/Dodge/Creature/State/WalkCycle.hs b/src/Dodge/Creature/State/WalkCycle.hs index 3c10b5b29..58ba6b6ec 100644 --- a/src/Dodge/Creature/State/WalkCycle.hs +++ b/src/Dodge/Creature/State/WalkCycle.hs @@ -2,6 +2,7 @@ module Dodge.Creature.State.WalkCycle (updateCarriage) where +import Data.Maybe import Dodge.Creature.HandPos import Linear import Control.Lens @@ -10,31 +11,36 @@ import Dodge.SoundLogic import Sound.Data updateCarriage :: Int -> World -> World -updateCarriage cid w - | Just cr <- w ^? cWorld . lWorld . creatures . ix cid - , Walking x ff <- cr ^. crStance . carriage - , x >= strideLength cr = - w +updateCarriage cid w = fromMaybe w $ do + cr <- w ^? cWorld . lWorld . creatures . ix cid + return $ updateCarriage' cid cr w (cr ^. crStance . carriage) + +updateCarriage' :: Int -> Creature -> World -> Carriage -> World +updateCarriage' cid cr w = \case + Walking x ff | x >= strideLength cr -> w & soundMultiFrom [FootstepSound i | i <- [0 .. 10]] (cr ^. crPos . _xy) (chooseFootSound ff) Nothing & over (cWorld . lWorld . creatures . ix cid . crStance . carriage) resetStride - | Just cr <- w ^? cWorld . lWorld . creatures . ix cid - , z <- cr ^. crPos . _z - , Flying dz x oop <- cr ^. crStance . carriage = - w & cWorld . lWorld . creatures . ix cid . crPos . _xy +~ x *^ f (cr ^. crOldPos . _xy - oop) + Walking {} -> w + Floating -> w + Flying {_zSpeed = dz, _flyInertia = x} -> + w & cWorld . lWorld . creatures . ix cid . crPos . _xy +~ x *^ f (cr ^. crOldPos . _xy - oop ^. _xy) & cWorld . lWorld . creatures . ix cid . crPos . _z +~ dz & cWorld . lWorld . creatures . ix cid . crStance . carriage . zSpeed - %~ if z < 17 then min 0.05 . (+0.001) else max (-0.05) . (subtract 0.001) - | otherwise = w + %~ if cr ^. crPos . _z < 17 then min 0.05 . (+0.001) else max (-0.05) . subtract 0.001 + Boosting {} -> w + Falling _ _ -> w & cWorld . lWorld . creatures . ix cid . crPos +~ + 0.99 *^ (cr ^. crOldPos - oop & _z -~ 0.5) + OnGround {} -> w where - -- limits max speed gained through inertia --- f = id + oop = cr ^. crOldOldPos f v | norm v > 10 = 10 *^ signorm v | otherwise = v + resetStride :: Carriage -> Carriage resetStride = \case Walking _ ff -> Walking 0 (normalGait ff) diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index fefcbf150..12785a905 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -99,7 +99,7 @@ twoFlat :: Creature -> Bool twoFlat = crInAimStance TwoHandFlat twists :: Creature -> Bool -twists cr = crInAimStance TwoHandTwist cr +twists = crInAimStance TwoHandTwist -- the use of crOldPos is because the damage position is calculated on the -- previous frame diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 0c6ce2679..bc129c84f 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -37,7 +37,7 @@ import ShapePicture.Data updateCreature :: Creature -> World -> World updateCreature cr | cr ^. crPos . _z < negate 100 = (tocr . crHP .~ CrIsPitted) . destroyAllInvItems cr - | CrIsCorpse _ <- cr ^. crHP = chasmTestCorpse cr + | CrIsCorpse _ <- cr ^. crHP = updateCarriage (_crID cr) . chasmTestCorpse cr | null (cr ^? crHP . _HP) = id | cr ^. crPos . _z < 0 = (tocr . crZVel -~ 0.5) . (tocr . crPos . _z +~ _crZVel cr) | otherwise = updateLivingCreature cr @@ -142,8 +142,8 @@ chasmTestLiving cr w | Flying {} <- cr ^. crStance . carriage = w | Falling {} <- cr ^. crStance . carriage = w - & tocr . crZVel -~ 0.5 - & tocr . crPos . _z +~ _crZVel cr +-- & tocr . crZVel -~ 0.5 +-- & tocr . crPos . _z +~ _crZVel cr | Just (x, y) <- List.find g (w ^. cWorld . cliffs) = w & soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100) @@ -158,22 +158,22 @@ chasmTestLiving cr w startFalling :: Creature -> Creature startFalling cr = case cr ^. crStance . carriage of - Walking a b -> cr & crZVel -~ 0.5 - & crStance . carriage .~ Falling a b - _ -> cr + Walking a b -> cr & crStance . carriage .~ Falling a b + _ -> cr & crStance . carriage .~ Falling 0 RightForward chasmTestCorpse :: Creature -> World -> World chasmTestCorpse cr w - | _crZVel cr < 0 = - w - & tocr . crZVel -~ 0.5 - & tocr . crPos . _z +~ _crZVel cr +-- | _crZVel cr < 0 = +-- w +-- & tocr . crZVel -~ 0.5 +-- & tocr . crPos . _z +~ _crZVel cr -- only look for TWO cliffs to push along | (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 . crZVel -~ 0.5 +-- | any f (w ^. cWorld . chasms) = w & tocr . crZVel -~ 0.5 + | any f (w ^. cWorld . chasms) = w & tocr %~ startFalling | otherwise = w where diff --git a/src/Dodge/Creature/Volition.hs b/src/Dodge/Creature/Volition.hs index 95dafd1f0..302b6df9a 100644 --- a/src/Dodge/Creature/Volition.hs +++ b/src/Dodge/Creature/Volition.hs @@ -13,7 +13,7 @@ import Geometry holsterWeapon, drawWeapon :: Action holsterWeapon = DoImpulses [ChangePosture AtEase, MakeSound whiteNoiseFadeOutS] -drawWeapon = DoImpulses [ChangePosture $ Aiming, MakeSound whiteNoiseFadeInS] +drawWeapon = DoImpulses [ChangePosture Aiming, MakeSound whiteNoiseFadeInS] shootTillEmpty :: Action --shootTillEmpty = (crCanShoot `DoActionWhile` DoImpulses [UseItem]) diff --git a/src/Dodge/Data/Creature.hs b/src/Dodge/Data/Creature.hs index 58349461a..13ff7c3d4 100644 --- a/src/Dodge/Data/Creature.hs +++ b/src/Dodge/Data/Creature.hs @@ -35,6 +35,7 @@ import Geometry.Data data Creature = Creature { _crPos :: Point3 , _crOldPos :: Point3 + , _crOldOldPos :: Point3 , _crZVel :: Float , _crDir :: Float , _crMvDir :: Float diff --git a/src/Dodge/Data/Creature/Stance.hs b/src/Dodge/Data/Creature/Stance.hs index 29bba55d2..b861333c8 100644 --- a/src/Dodge/Data/Creature/Stance.hs +++ b/src/Dodge/Data/Creature/Stance.hs @@ -21,7 +21,7 @@ data Stance = Stance data Carriage = Walking {_strideAmount :: Float, _footForward :: FootForward} | Floating - | Flying {_zSpeed :: Float, _flyInertia :: Float, _oldOldPos :: Point2} + | Flying {_zSpeed :: Float, _flyInertia :: Float} | Boosting Point2 | Falling {_fallFlail :: Float, _fallFoot :: FootForward} | OnGround diff --git a/src/Dodge/Default/Creature.hs b/src/Dodge/Default/Creature.hs index 4a16015ce..6ef3221f9 100644 --- a/src/Dodge/Default/Creature.hs +++ b/src/Dodge/Default/Creature.hs @@ -14,6 +14,7 @@ defaultCreature = Creature { _crPos = V3 0 0 0 , _crOldPos = V3 0 0 0 + , _crOldOldPos = V3 0 0 0 -- , _crZ = 0 , _crZVel = 0 , _crDir = 0 diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index b36ae6ae3..18d9bf173 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -82,7 +82,7 @@ makePathBetween = makePathUsing $ not . pathEdgeObstructed makePathBetween' :: (Point2 -> Point2 -> World -> Bool) -> (Set.Set EdgeObstacle -> Bool) -> Point2 -> Point2 -> World -> Maybe [Int] -makePathBetween' t1 t2 = makePathUsing' t1 $ t2 +makePathBetween' = makePathUsing' pathEdgeObstructed :: Set.Set EdgeObstacle -> Bool pathEdgeObstructed pe = any (`Set.member` pe) [WallObstacle WallNotAutoOpen, ChasmObstacle] diff --git a/src/Dodge/Prop/Draw.hs b/src/Dodge/Prop/Draw.hs index 6d4bfa878..3db080940 100644 --- a/src/Dodge/Prop/Draw.hs +++ b/src/Dodge/Prop/Draw.hs @@ -20,9 +20,9 @@ debrisSPic db = translateSP (_dbPos db & _z +~ 1) . overPosSP (Q.rotate (_dbRot Gib x col -> noPic $ drawGib x col BlockDebris m -> noPic . colorSH m $ cubeShape 4 --MetalDebris c -> noPic . colorSH c $ upperPrismPolySU 1 $ [0, V2 5 0, V2 4 2] - MetalDebris c -> noPic . colorSH c $ upperPrismPolySU 1 $ [0, V2 8 0, V2 6 3] + MetalDebris c -> noPic . colorSH c $ upperPrismPolySU 1 [0, V2 8 0, V2 6 3] --MetalDebris c -> noPic . colorSH c $ upperPrismPolySU 1 $ [0, V2 10 0, V2 8 4] - GlassDebris -> noPic . colorSH azure $ upperPrismPoly Small Undesired 1 $ [0, V2 8 0, V2 6 3] + GlassDebris -> noPic . colorSH azure $ upperPrismPoly Small Undesired 1 [0, V2 8 0, V2 6 3] propSPic :: Prop -> SPic propSPic pr = diff --git a/src/Dodge/Room/LasTurret.hs b/src/Dodge/Room/LasTurret.hs index 465bdf721..4b4c376c3 100644 --- a/src/Dodge/Room/LasTurret.hs +++ b/src/Dodge/Room/LasTurret.hs @@ -399,7 +399,7 @@ lasCenRunClose1 = do -- (alinks,blinks) <- shufflePair (bllinks,brlinks) -- (alinks,blinks) <- shufflePair (bllinks,tmllink) lnks <- shuffle [bllinks, brlinks, tmllink, tmrlink] - let alinks = lnks !! 0 + let alinks = head lnks blinks = lnks !! 1 outwall <- takeOne diff --git a/src/Dodge/Room/Link.hs b/src/Dodge/Room/Link.hs index dd4bfff36..fb61c7591 100644 --- a/src/Dodge/Room/Link.hs +++ b/src/Dodge/Room/Link.hs @@ -75,7 +75,7 @@ shiftRoomShiftToLink :: (Point2, Float) -> (Point2, Float) -> Room -> Room shiftRoomShiftToLink l inlink r = shiftRoomShiftBy l . shiftRoomShiftBy (0, pi - a) - $ shiftRoomShiftBy (0 - p, 0) r + $ shiftRoomShiftBy (- p, 0) r where (p, a) = inlink diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 6814f334b..cdccea50f 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -579,7 +579,7 @@ updateTerminal tm w = fromMaybe w $ do setOldPos :: Creature -> Creature setOldPos cr = cr & crOldPos .~ _crPos cr - & crStance . carriage . oldOldPos .~ cr ^. crOldPos . _xy + & crOldOldPos .~ cr ^. crOldPos --doRewind :: World -> World --doRewind w = case w ^. cwTime . maybeWorld of diff --git a/tags b/tags index 35bd9abb0..692b718b5 100644 --- a/tags +++ b/tags @@ -42,7 +42,7 @@ ActionUpdate src/Dodge/Creature/Action.hs 50;" t AddGoal src/Dodge/Data/ActionPlan.hs 44;" C AimAt src/Dodge/Data/ActionPlan.hs 66;" C AimStance src/Dodge/Data/AimStance.hs 10;" t -Aiming src/Dodge/Data/Creature/Stance.hs 32;" C +Aiming src/Dodge/Data/Creature/Stance.hs 33;" C AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C AlienContact src/Dodge/Data/Scenario.hs 30;" C AllRoomClipBoundaries src/Dodge/Data/Config.hs 123;" C @@ -66,7 +66,7 @@ Arcing src/Dodge/Data/Item/Params.hs 15;" C ArmourySS src/Dodge/Data/Scenario.hs 112;" C Asleep src/Dodge/Data/Creature/Perception.hs 52;" C AsteroidStrike src/Dodge/Data/Scenario.hs 33;" C -AtEase src/Dodge/Data/Creature/Stance.hs 32;" C +AtEase src/Dodge/Data/Creature/Stance.hs 33;" C AtomicWaste src/Dodge/Data/Scenario.hs 26;" C AttachParams src/Dodge/Data/Item/Use.hs 43;" t AttachType src/Dodge/Data/Item/Combine.hs 91;" t @@ -452,7 +452,7 @@ Floor src/Data/Tile.hs 11;" t FloorItem src/Dodge/Data/FloorItem.hs 11;" t Flying src/Dodge/Data/Creature/Stance.hs 24;" C FollowImpulses src/Dodge/Data/ActionPlan.hs 134;" C -FootForward src/Dodge/Data/Creature/Stance.hs 29;" t +FootForward src/Dodge/Data/Creature/Stance.hs 30;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 30;" C ForceField src/Dodge/Data/Material.hs 19;" C ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t @@ -654,7 +654,7 @@ LayVars src/Dodge/Data/MetaTree.hs 30;" C Layer src/Picture/Data.hs 20;" t LayoutVars src/Dodge/Data/MetaTree.hs 30;" t LeadTarget src/Dodge/Data/ActionPlan.hs 115;" C -LeftForward src/Dodge/Data/Creature/Stance.hs 29;" C +LeftForward src/Dodge/Data/Creature/Stance.hs 30;" C LeftwardDT src/Dodge/Data/DoubleTree.hs 27;" C Lethargic src/Dodge/Data/Creature/Perception.hs 53;" C LevelStartSlot src/Dodge/Data/SaveSlot.hs 9;" C @@ -919,6 +919,7 @@ OnBack src/Dodge/Data/Equipment/Misc.hs 22;" C OnChest src/Dodge/Data/Equipment/Misc.hs 21;" C OnEdge src/Dodge/Data/Room.hs 52;" C OnFloor src/Dodge/Data/Item/Location.hs 38;" C +OnGround src/Dodge/Data/Creature/Stance.hs 27;" C OnHead src/Dodge/Data/Equipment/Misc.hs 20;" C OnLeftLeg src/Dodge/Data/Equipment/Misc.hs 25;" C OnLeftWrist src/Dodge/Data/Equipment/Misc.hs 23;" C @@ -1012,7 +1013,7 @@ Polyhedra src/Polyhedra/Data.hs 13;" t Polyhedron src/Polyhedra/Data.hs 13;" C PosInf src/Dodge/Data/CardinalPoint.hs 44;" C PosRooms src/Dodge/Tree/Shift.hs 29;" t -Posture src/Dodge/Data/Creature/Stance.hs 32;" t +Posture src/Dodge/Data/Creature/Stance.hs 33;" t PreloadData src/Data/Preload.hs 10;" t PrintMaterial src/Dodge/Data/AmmoType.hs 15;" C Prison src/Dodge/Data/Scenario.hs 65;" C @@ -1111,7 +1112,7 @@ Revenge src/Dodge/Data/Scenario.hs 6;" C RewindLeftClick src/Dodge/Data/World.hs 78;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C RightButtonState src/Dodge/Data/RightButtonOptions.hs 13;" t -RightForward src/Dodge/Data/Creature/Stance.hs 29;" C +RightForward src/Dodge/Data/Creature/Stance.hs 30;" C RightwardDT src/Dodge/Data/DoubleTree.hs 34;" C Rocket src/Dodge/Data/Projectile.hs 32;" C RocketHoming src/Dodge/Data/Projectile.hs 39;" t @@ -2667,7 +2668,7 @@ axisInt src/Geometry/Intersect.hs 246;" f azure src/Color.hs 49;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f -backPQ src/Dodge/Creature/HandPos.hs 199;" f +backPQ src/Dodge/Creature/HandPos.hs 200;" f backgroundSpaceS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 734;" f backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f backpackShape src/Dodge/Item/Draw/SPic.hs 188;" f @@ -2816,10 +2817,10 @@ chaseCritInternal src/Dodge/Humanoid.hs 11;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseUpperBody src/Dodge/Creature/Picture.hs 73;" f -chasmRotate src/Dodge/Creature/Update.hs 182;" f +chasmRotate src/Dodge/Creature/Update.hs 198;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 373;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 307;" f -chasmTestCorpse src/Dodge/Creature/Update.hs 165;" f +chasmTestCorpse src/Dodge/Creature/Update.hs 166;" f chasmTestLiving src/Dodge/Creature/Update.hs 140;" f chasmWallToSurface src/Dodge/Base/Collide.hs 120;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -2837,10 +2838,10 @@ checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f chemFuelPouch src/Dodge/Item/Ammo.hs 81;" f -chestPQ src/Dodge/Creature/HandPos.hs 196;" f +chestPQ src/Dodge/Creature/HandPos.hs 197;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f -chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 48;" f +chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 77;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f circHitWall src/Dodge/Base/Collide.hs 240;" f @@ -2971,7 +2972,7 @@ crInAimStance src/Dodge/Creature/Test.hs 91;" f crIntelligence src/Dodge/Creature/Statistics.hs 39;" f crIsAiming src/Dodge/Creature/Test.hs 58;" f crIsArmouredFrom src/Dodge/Creature/Test.hs 107;" f -crLeftHandWall src/Dodge/Creature/HandPos.hs 102;" f +crLeftHandWall src/Dodge/Creature/HandPos.hs 103;" f crMass src/Dodge/Creature/Mass.hs 5;" f crMaterial src/Dodge/Creature/Material.hs 8;" f crMaxHP src/Dodge/Creature/MaxHP.hs 6;" f @@ -2985,7 +2986,7 @@ crNearPoint src/Dodge/Creature/Test.hs 129;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crPathing src/Dodge/Creature/Action.hs 117;" f crRad src/Dodge/Creature/Radius.hs 7;" f -crRightHandWall src/Dodge/Creature/HandPos.hs 84;" f +crRightHandWall src/Dodge/Creature/HandPos.hs 85;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 72;" f crSetRoots src/Dodge/Inventory/Location.hs 56;" f crShape src/Dodge/Creature/Shape.hs 8;" f @@ -3745,7 +3746,7 @@ head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f headLampShape src/Dodge/Item/Draw/SPic.hs 425;" f headMap src/Dodge/DoubleTree.hs 118;" f -headPQ src/Dodge/Creature/HandPos.hs 190;" f +headPQ src/Dodge/Creature/HandPos.hs 191;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 630;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 109;" f healthTest src/Dodge/Room/LasTurret.hs 129;" f @@ -4011,13 +4012,13 @@ leaveResetQuitTerminal src/Dodge/WorldEffect.hs 164;" f led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 193;" f -leftHandPQ src/Dodge/Creature/HandPos.hs 126;" f +leftHandPQ src/Dodge/Creature/HandPos.hs 127;" f leftIsParentCombine src/Dodge/Item/Grammar.hs 170;" f leftPad src/Padding.hs 15;" f leftRightCombine src/Dodge/Item/Grammar.hs 205;" f -leftWristPQ src/Dodge/Creature/HandPos.hs 160;" f -legPQ src/Dodge/Creature/HandPos.hs 166;" f -legPQ' src/Dodge/Creature/HandPos.hs 171;" f +leftWristPQ src/Dodge/Creature/HandPos.hs 161;" f +legPQ src/Dodge/Creature/HandPos.hs 167;" f +legPQ' src/Dodge/Creature/HandPos.hs 172;" f legsSPic src/Dodge/Item/Draw/SPic.hs 450;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 86;" f @@ -4330,7 +4331,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 43;" f +normalGait src/Dodge/Creature/State/WalkCycle.hs 72;" f normalTo8 src/Shader/Poke.hs 466;" f normalizeAngle src/Geometry/Vector.hs 130;" f normalizeAnglePi src/Dodge/Base.hs 154;" f @@ -4717,7 +4718,7 @@ replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 184;" f replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 66;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f -resetStride src/Dodge/Creature/State/WalkCycle.hs 38;" f +resetStride src/Dodge/Creature/State/WalkCycle.hs 67;" f resetTerminal src/Dodge/WorldEffect.hs 158;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f @@ -4749,11 +4750,11 @@ rhombus src/Polyhedra.hs 69;" f rifle src/Dodge/Item/Held/Cane.hs 19;" f right src/DoubleStack.hs 16;" f rightChildList src/Dodge/Item/Grammar.hs 199;" f -rightHandPQ src/Dodge/Creature/HandPos.hs 72;" f +rightHandPQ src/Dodge/Creature/HandPos.hs 73;" f rightIsParentCombine src/Dodge/Item/Grammar.hs 181;" f rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f -rightWristPQ src/Dodge/Creature/HandPos.hs 123;" f +rightWristPQ src/Dodge/Creature/HandPos.hs 124;" f rlPosDir src/Dodge/RoomLink.hs 112;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 401;" f rmInLinks src/Dodge/RoomLink.hs 153;" f @@ -5328,7 +5329,7 @@ translate3 src/Picture/Base.hs 112;" f translateFloatingCamera src/Dodge/Update/Camera.hs 50;" f translateFloatingCameraKeys src/Dodge/Update/Camera.hs 68;" f translateH src/Picture/Base.hs 104;" f -translatePointToLeftHand src/Dodge/Creature/HandPos.hs 154;" f +translatePointToLeftHand src/Dodge/Creature/HandPos.hs 155;" f translatePointToRightHand src/Dodge/Creature/HandPos.hs 43;" f translateSH src/Shape.hs 242;" f translateSHxy src/Shape.hs 246;" f @@ -5338,10 +5339,10 @@ translateSPxy src/ShapePicture.hs 45;" f translateSPz src/ShapePicture.hs 49;" f translateScreenPos src/Dodge/ScreenPos.hs 12;" f translateToES src/Dodge/Creature/HandPos.hs 30;" f -translateToLeftHand src/Dodge/Creature/HandPos.hs 157;" f -translateToLeftLeg src/Dodge/Creature/HandPos.hs 163;" f -translateToRightHand src/Dodge/Creature/HandPos.hs 120;" f -translateToRightLeg src/Dodge/Creature/HandPos.hs 187;" f +translateToLeftHand src/Dodge/Creature/HandPos.hs 158;" f +translateToLeftLeg src/Dodge/Creature/HandPos.hs 164;" f +translateToRightHand src/Dodge/Creature/HandPos.hs 121;" f +translateToRightLeg src/Dodge/Creature/HandPos.hs 188;" f translateXY src/Polyhedra.hs 23;" f trapTBH src/Geometry/Polygon.hs 22;" f trapezionBWHW src/Geometry/Polygon.hs 34;" f @@ -5392,7 +5393,7 @@ twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f twists src/Dodge/Creature/Test.hs 101;" f twoFlat src/Dodge/Creature/Test.hs 98;" f twoFlatHRot src/Dodge/Item/HeldOffset.hs 91;" f -twoHandOffY src/Dodge/Creature/HandPos.hs 138;" f +twoHandOffY src/Dodge/Creature/HandPos.hs 139;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 142;" f twoRoomPoss src/Dodge/PlacementSpot.hs 148;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 522;" f @@ -5429,7 +5430,8 @@ updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f updateBullets src/Dodge/Update.hs 644;" f updateCamera src/Dodge/Update/Camera.hs 33;" f -updateCarriage src/Dodge/Creature/State/WalkCycle.hs 12;" f +updateCarriage src/Dodge/Creature/State/WalkCycle.hs 13;" f +updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 41;" f updateCloseObjects src/Dodge/Inventory.hs 126;" f updateCloud src/Dodge/Update.hs 886;" f updateClouds src/Dodge/Update.hs 755;" f @@ -5501,7 +5503,7 @@ updatePlasmaBall src/Dodge/Update.hs 509;" f updatePlasmaBalls src/Dodge/Update.hs 651;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 189;" f +updatePulse src/Dodge/Creature/Update.hs 205;" f updatePulseBall src/Dodge/Update.hs 529;" f updatePulseLaser src/Dodge/Update.hs 698;" f updatePulseLasers src/Dodge/Update.hs 504;" f @@ -5715,7 +5717,7 @@ zChasm src/Dodge/Room/Tutorial.hs 162;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f -zeroOneSmooth src/Dodge/Creature/HandPos.hs 69;" f +zeroOneSmooth src/Dodge/Creature/HandPos.hs 70;" f zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 51;" f zipCount src/Dodge/Tree/Shift.hs 142;" f