diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index 5d5b7764e..55b4f1ed6 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -14,6 +14,9 @@ module Dodge.Creature.HandPos ( rightHandPQ, ) where +import Control.Monad +import qualified Data.IntMap.Strict as IM +import Linear import Control.Lens import Dodge.Creature.Test import Dodge.Data.Creature @@ -61,11 +64,44 @@ rightHandPQ cr | oneH cr = (V3 11 (-3) 20, Q.qID) | twists cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 4 (-10) 0, Q.qID) | twoFlat cr = (V3 4 (-8) 12, Q.qID) --- | wl <- crRightHandWall cr = (0, Q.qID) + | Just p <- crRightHandWall cr = (20 & _xy .~ p, Q.qID) | otherwise = (handWalkingPos LeftForward (-8) cr, Q.qID) ---crRightHandWall :: IM.IntMap Wall -> Creature -> Wall ---crRightHandWall wls cr +crRightHandWall :: Creature -> Maybe Point2 +crRightHandWall cr = do + (_,p) <- IM.lookupMin (cr ^. crWallTouch) + let wp = p - cr ^. crPos . _xy + dp = argV wp + ang = nearZeroAngle (cd - dp) + cdp = unitVectorAtAngle cd + x | ang < 0 = 0.8 - (0.5 * ang / (pi / 4)) + | otherwise = 0.8* dotV cdp (signorm wp) + y | ang < 0 = 2 - (5 * ang / (pi / 4)) + | otherwise = 2 + ep = wp - y *^ signorm wp + x *^ vNormal wp + guard $ ang > negate (pi / 8) + return $ ep & _xy %~ rot + where + cd = cr ^. crDir + rot = rotateV (negate cd) + +crLeftHandWall :: Creature -> Maybe Point2 +crLeftHandWall cr = do + (_,p) <- IM.lookupMin (cr ^. crWallTouch) + let wp = p - cr ^. crPos . _xy + dp = argV wp + ang = nearZeroAngle (cd - dp) + cdp = unitVectorAtAngle cd + x | ang > 0 = 0.8 + (0.5 * ang / (pi / 4)) + | otherwise = 0.8* dotV cdp (signorm wp) + y | ang > 0 = 2 + (5 * ang / (pi / 4)) + | otherwise = 2 + ep = wp - y *^ signorm wp - x *^ vNormal wp + guard $ ang < (pi / 8) + return $ ep & _xy %~ rot + where + cd = cr ^. crDir + rot = rotateV (negate cd) translateToRightHand :: Creature -> SPic -> SPic translateToRightHand = overPosSP . translatePointToRightHand @@ -75,9 +111,10 @@ rightWristPQ cr = rightHandPQ cr `Q.comp` (V3 0 (-4) (-4), Q.qID) leftHandPQ :: Creature -> Point3Q leftHandPQ cr - | oneH cr = (V3 0 8 10, Q.qz 0.4) | twists cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 12 4 0, Q.qz 0.4) | twoFlat cr = (V3 4 8 12, Q.qID) + | Just p <- crLeftHandWall cr = (20 & _xy .~ p, Q.qID) + | oneH cr = (V3 0 8 10, Q.qz 0.4) | otherwise = (handWalkingPos RightForward 8 cr, Q.qID) translatePointToLeftHand :: Creature -> Point3 -> Point3 diff --git a/src/Dodge/Data/Creature.hs b/src/Dodge/Data/Creature.hs index a9757c6c6..58349461a 100644 --- a/src/Dodge/Data/Creature.hs +++ b/src/Dodge/Data/Creature.hs @@ -22,6 +22,7 @@ import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.Map.Strict as M +import qualified Data.IntMap.Strict as IM import Dodge.Data.ActionPlan import Dodge.Data.Creature.Misc import Dodge.Data.Creature.Perception @@ -30,8 +31,6 @@ import Dodge.Data.Creature.State import Dodge.Data.Item import Dodge.Data.Material import Geometry.Data -import qualified Data.IntSet as IS ---import qualified IntMapHelp as IM data Creature = Creature { _crPos :: Point3 @@ -58,7 +57,7 @@ data Creature = Creature , _crIntention :: Intention , _crName :: String , _crDeathTimer :: Int - , _crWallTouch :: IS.IntSet + , _crWallTouch :: IM.IntMap Point2 } data CrHP diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index ee653b4f7..ea0c112c5 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -34,7 +34,7 @@ import Data.Monoid import RandomHelp testStringInit :: Universe -> [String] -testStringInit u = [fromMaybe "" $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crName] +testStringInit u = fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crWallTouch . each -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage . strideAmount) -- a <> fromMaybe [] (do -- a w1 <- u ^? uvWorld . cWorld . lWorld . walls . ix 18 diff --git a/src/Dodge/WallCreatureCollisions.hs b/src/Dodge/WallCreatureCollisions.hs index 513337d1d..cfb654d38 100644 --- a/src/Dodge/WallCreatureCollisions.hs +++ b/src/Dodge/WallCreatureCollisions.hs @@ -9,7 +9,6 @@ import Data.Maybe import qualified Data.IntMap.Strict as IM import Control.Lens import Data.Foldable -import qualified Data.IntSet as IS import Dodge.Base import Dodge.Creature.Radius import Dodge.Data.Universe @@ -56,14 +55,14 @@ pushCr w wls cr | otherwise = ecr where -- stwls = IM.filter (\wl -> uncurry circOnSegNoEndpoints (wl ^. wlLine) sp r) wls - twls = IM.elems $ IM.restrictKeys wls (ecr ^. crWallTouch) -- `IM.union` stwls + twls = IM.elems $ IM.intersection wls (ecr ^. crWallTouch) -- `IM.union` stwls -- ep = ecr ^. crPos . _xy ap = cr ^. crOldPos . _xy -- sp = cr ^. crPos . _xy ecr = foldl' f (cr & crWallTouch .~ mempty) wls r = crRad (cr ^. crType) - f acr wl = case pushOutFromWall r (acr ^. crPos . _xy) (wl ^. wlLine) of - Just p -> acr & crPos . _xy .~ p & crWallTouch %~ IS.insert (wl ^. wlID) + f acr wl = case pushOutFromWall' r (acr ^. crPos . _xy) (wl ^. wlLine) of + Just (p,hitp) -> acr & crPos . _xy .~ p & crWallTouch . at (wl ^. wlID) ?~ hitp Nothing -> acr wallMovement :: LWorld -> Point2 -> Wall -> Point2 @@ -100,11 +99,22 @@ wlWlCrush' w p w1 w2 = (t w1 w2 || t w2 w1) -- test either wall is moving toward wallBuffer :: Float wallBuffer = 0 --- assumes that the wall is orientated --- assumes wall points are different -pushOutFromWall :: Float -> Point2 -> (Point2, Point2) -> Maybe Point2 -pushOutFromWall rad cp2 (wp1, wp2) - | isOnWall = Just newP +---- assumes that the wall is orientated +---- assumes wall points are different +--pushOutFromWall :: Float -> Point2 -> (Point2, Point2) -> Maybe Point2 +--pushOutFromWall rad cp2 (wp1, wp2) +-- | isOnWall = Just newP +-- | otherwise = Nothing +-- where +-- n = errorNormalizeV 61 $ vNormal (wp1 - wp2) +-- wp1' = wp1 + rad *^ n +-- wp2' = wp2 + rad *^ n +-- newP = errorClosestPointOnLine 5 wp1' wp2' cp2 +-- isOnWall = circOnSegNoEndpoints wp1 wp2 cp2 rad + +pushOutFromWall' :: Float -> Point2 -> (Point2, Point2) -> Maybe (Point2,Point2) +pushOutFromWall' rad cp2 (wp1, wp2) + | isOnWall = Just (newP,newP - rad *^ n) | otherwise = Nothing where n = errorNormalizeV 61 $ vNormal (wp1 - wp2) diff --git a/tags b/tags index eea2cb6ff..b211d27b8 100644 --- a/tags +++ b/tags @@ -15,7 +15,7 @@ <$> src/Dodge/Data/ActionPlan.hs 156;" o <$> src/Dodge/Data/CWorld.hs 52;" o <$> src/Dodge/Data/Camera.hs 38;" o -<$> src/Dodge/Data/Creature.hs 93;" o +<$> src/Dodge/Data/Creature.hs 92;" o <$> src/Dodge/Data/LWorld.hs 179;" o <$> src/Dodge/Data/Terminal.hs 69;" o ABSOLUTE src/Dodge/Data/Item/Combine.hs 39;" C @@ -239,7 +239,7 @@ ContextDT src/Dodge/Data/DoubleTree.hs 25;" t ContinentalGovernment src/Dodge/Data/Scenario.hs 51;" C ControlDeckSS src/Dodge/Data/Scenario.hs 89;" C ConvexPoly src/Geometry/ConvexPoly.hs 25;" t -CookDeath src/Dodge/Data/Creature.hs 70;" C +CookDeath src/Dodge/Data/Creature.hs 69;" C CookingDamage src/Dodge/Data/Damage/Type.hs 5;" C Corporation src/Dodge/Data/Scenario.hs 46;" C Cosmic src/Dodge/Data/Scenario.hs 74;" C @@ -252,16 +252,16 @@ CrGroup src/Dodge/Data/Creature/State.hs 23;" t CrGroupID src/Dodge/Data/Creature/State.hs 29;" C CrGroupParams src/Dodge/Data/CrGroupParams.hs 12;" t CrGroupUpdate src/Dodge/Data/CrGroupParams.hs 20;" t -CrHP src/Dodge/Data/Creature.hs 64;" t +CrHP src/Dodge/Data/Creature.hs 63;" t CrHitSound src/Dodge/Data/SoundOrigin.hs 32;" C CrID src/Dodge/Data/CrWlID.hs 10;" C CrImp src/Dodge/Data/CreatureEffect.hs 9;" t CrInt src/Dodge/Data/Item/Location.hs 22;" t CrIsAiming src/Dodge/Data/CreatureEffect.hs 20;" C CrIsAnimate src/Dodge/Data/CreatureEffect.hs 20;" C -CrIsCorpse src/Dodge/Data/Creature.hs 66;" C -CrIsGibs src/Dodge/Data/Creature.hs 67;" C -CrIsPitted src/Dodge/Data/Creature.hs 68;" C +CrIsCorpse src/Dodge/Data/Creature.hs 65;" C +CrIsGibs src/Dodge/Data/Creature.hs 66;" C +CrIsPitted src/Dodge/Data/Creature.hs 67;" C CrMouth src/Dodge/Data/SoundOrigin.hs 16;" C CrMvType src/Dodge/Data/Creature/Misc.hs 26;" t CrMvType src/Dodge/Data/Creature/Misc.hs 29;" C @@ -278,7 +278,7 @@ Cr_status src/Dodge/Data/Config.hs 84;" C CraftType src/Dodge/Data/Item/Combine.hs 49;" t CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C -Creature src/Dodge/Data/Creature.hs 36;" t +Creature src/Dodge/Data/Creature.hs 35;" t CreaturePart src/Dodge/Data/Wall/Structure.hs 16;" C CreatureShape src/Dodge/Data/Creature/Misc.hs 74;" t CreatureType src/Dodge/Data/Creature/Misc.hs 58;" t @@ -307,7 +307,7 @@ DamageHitSound src/Dodge/Data/SoundOrigin.hs 41;" C DamageLaser src/Dodge/Data/Laser.hs 15;" C DamageSensor src/Dodge/Data/Machine/Sensor.hs 19;" t DamageType src/Dodge/Data/Damage/Type.hs 3;" t -DeathType src/Dodge/Data/Creature.hs 70;" t +DeathType src/Dodge/Data/Creature.hs 69;" t Debris src/Dodge/Data/Prop.hs 25;" t DebrisChunk src/Dodge/Data/Prop.hs 25;" C DebrisType src/Dodge/Data/Prop.hs 21;" t @@ -494,7 +494,7 @@ GeoObjShads src/Dodge/Data/Config.hs 117;" C GetTo src/Dodge/Data/ActionPlan.hs 141;" C GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 22;" C -GibsDeath src/Dodge/Data/Creature.hs 70;" C +GibsDeath src/Dodge/Data/Creature.hs 69;" C Glass src/Dodge/Data/Material.hs 14;" C GlassBreakSound src/Dodge/Data/SoundOrigin.hs 34;" C Goal src/Dodge/Data/ActionPlan.hs 149;" t @@ -519,7 +519,7 @@ HEATSENSOR src/Dodge/Data/Item/Combine.hs 82;" C HELD src/Dodge/Data/Item/Combine.hs 16;" C HOMINGMODULE src/Dodge/Data/Item/Combine.hs 101;" C HOSE src/Dodge/Data/Item/Combine.hs 54;" C -HP src/Dodge/Data/Creature.hs 65;" C +HP src/Dodge/Data/Creature.hs 64;" C HUD src/Dodge/Data/HUD.hs 29;" t HalfRes src/Dodge/Data/Config.hs 113;" C HammerTrigger src/Dodge/Data/TriggerType.hs 10;" C @@ -586,7 +586,7 @@ Inspect_wall src/Dodge/Data/Config.hs 106;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t IntID src/Dodge/Data/Universe.hs 120;" t -Intention src/Dodge/Data/Creature.hs 72;" t +Intention src/Dodge/Data/Creature.hs 71;" t IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 123;" C IntroScanSF src/Dodge/Data/ComposedItem.hs 21;" C IntroScanType src/Dodge/Data/Item/Combine.hs 44;" t @@ -750,7 +750,7 @@ MedBaySS src/Dodge/Data/Scenario.hs 100;" C Medium src/Shape/Data.hs 25;" C Melee src/Dodge/Data/ActionPlan.hs 40;" C MeleeStrike src/Dodge/Data/ActionPlan.hs 144;" C -Memory src/Dodge/Data/Creature.hs 79;" t +Memory src/Dodge/Data/Creature.hs 78;" t MenuOption src/Dodge/Data/Universe.hs 109;" t MenuOptionDisplay src/Dodge/Data/Universe.hs 104;" t MetaBranch src/Dodge/Data/MetaTree.hs 19;" t @@ -997,7 +997,7 @@ PistolAI src/Dodge/Data/Creature/Misc.hs 41;" C Placement src/Dodge/Data/GenWorld.hs 114;" t PlacementSpot src/Dodge/Data/GenWorld.hs 98;" t PlainBarrel src/Dodge/Data/Creature/Misc.hs 86;" C -PlainDeath src/Dodge/Data/Creature.hs 70;" C +PlainDeath src/Dodge/Data/Creature.hs 69;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C PlasmaBall src/Dodge/Data/PlasmaBall.hs 13;" t PlasmaBallType src/Dodge/Data/PlasmaBall.hs 20;" t @@ -1013,7 +1013,7 @@ Point3Q src/Geometry/Data.hs 52;" t Point4 src/Geometry/Data.hs 41;" t Poison src/Dodge/Data/Damage.hs 26;" C PoisonDamage src/Dodge/Data/Damage/Type.hs 6;" C -PoisonDeath src/Dodge/Data/Creature.hs 70;" C +PoisonDeath src/Dodge/Data/Creature.hs 69;" C PoisonGas src/Dodge/Data/Cloud.hs 42;" C PolyEdge src/Dodge/Data/Room.hs 51;" C PolyShad src/Picture/Data.hs 31;" C @@ -1674,36 +1674,36 @@ _cpPoints src/Geometry/ConvexPoly.hs 26;" f _cpRad src/Geometry/ConvexPoly.hs 28;" f _cpVigilance src/Dodge/Data/Creature/Perception.hs 31;" f _cpVision src/Dodge/Data/Creature/Perception.hs 34;" f -_crActionPlan src/Dodge/Data/Creature.hs 52;" f -_crDamage src/Dodge/Data/Creature.hs 49;" f -_crDeathTimer src/Dodge/Data/Creature.hs 60;" f -_crDir src/Dodge/Data/Creature.hs 40;" f -_crEquipment src/Dodge/Data/Creature.hs 48;" f -_crFaction src/Dodge/Data/Creature.hs 56;" f -_crGroup src/Dodge/Data/Creature.hs 57;" f +_crActionPlan src/Dodge/Data/Creature.hs 51;" f +_crDamage src/Dodge/Data/Creature.hs 48;" f +_crDeathTimer src/Dodge/Data/Creature.hs 59;" f +_crDir src/Dodge/Data/Creature.hs 39;" f +_crEquipment src/Dodge/Data/Creature.hs 47;" f +_crFaction src/Dodge/Data/Creature.hs 55;" f +_crGroup src/Dodge/Data/Creature.hs 56;" f _crGroupCenter src/Dodge/Data/CrGroupParams.hs 15;" f _crGroupID src/Dodge/Data/Creature/State.hs 27;" f _crGroupIDs src/Dodge/Data/CrGroupParams.hs 14;" f _crGroupParamID src/Dodge/Data/CrGroupParams.hs 13;" f _crGroupUpdate src/Dodge/Data/CrGroupParams.hs 16;" f -_crHP src/Dodge/Data/Creature.hs 45;" f -_crID src/Dodge/Data/Creature.hs 44;" f -_crIntention src/Dodge/Data/Creature.hs 58;" f -_crInv src/Dodge/Data/Creature.hs 46;" f -_crManipulation src/Dodge/Data/Creature.hs 47;" f -_crMemory src/Dodge/Data/Creature.hs 54;" f -_crMvAim src/Dodge/Data/Creature.hs 42;" f -_crMvDir src/Dodge/Data/Creature.hs 41;" f -_crName src/Dodge/Data/Creature.hs 59;" f -_crOldPos src/Dodge/Data/Creature.hs 38;" f -_crPain src/Dodge/Data/Creature.hs 50;" f -_crPerception src/Dodge/Data/Creature.hs 53;" f -_crPos src/Dodge/Data/Creature.hs 37;" f -_crStance src/Dodge/Data/Creature.hs 51;" f -_crType src/Dodge/Data/Creature.hs 43;" f -_crVocalization src/Dodge/Data/Creature.hs 55;" f -_crWallTouch src/Dodge/Data/Creature.hs 61;" f -_crZVel src/Dodge/Data/Creature.hs 39;" f +_crHP src/Dodge/Data/Creature.hs 44;" f +_crID src/Dodge/Data/Creature.hs 43;" f +_crIntention src/Dodge/Data/Creature.hs 57;" f +_crInv src/Dodge/Data/Creature.hs 45;" f +_crManipulation src/Dodge/Data/Creature.hs 46;" f +_crMemory src/Dodge/Data/Creature.hs 53;" f +_crMvAim src/Dodge/Data/Creature.hs 41;" f +_crMvDir src/Dodge/Data/Creature.hs 40;" f +_crName src/Dodge/Data/Creature.hs 58;" f +_crOldPos src/Dodge/Data/Creature.hs 37;" f +_crPain src/Dodge/Data/Creature.hs 49;" f +_crPerception src/Dodge/Data/Creature.hs 52;" f +_crPos src/Dodge/Data/Creature.hs 36;" f +_crStance src/Dodge/Data/Creature.hs 50;" f +_crType src/Dodge/Data/Creature.hs 42;" f +_crVocalization src/Dodge/Data/Creature.hs 54;" f +_crWallTouch src/Dodge/Data/Creature.hs 60;" f +_crZVel src/Dodge/Data/Creature.hs 38;" f _crZoning src/Dodge/Data/World.hs 48;" f _creatureGroups src/Dodge/Data/LWorld.hs 96;" f _creatures src/Dodge/Data/LWorld.hs 95;" f @@ -2054,7 +2054,7 @@ _mtTree src/Dodge/Data/MetaTree.hs 13;" f _musicData src/Data/Preload.hs 13;" f _mvAimSpeed src/Dodge/Data/Creature/Misc.hs 33;" f _mvSpeed src/Dodge/Data/Creature/Misc.hs 28;" f -_mvToPoint src/Dodge/Data/Creature.hs 74;" f +_mvToPoint src/Dodge/Data/Creature.hs 73;" f _mvTurnJit src/Dodge/Data/Creature/Misc.hs 32;" f _mvTurnRad src/Dodge/Data/Creature/Misc.hs 31;" f _mzAmmoSlot src/Dodge/Data/Muzzle.hs 13;" f @@ -2066,7 +2066,7 @@ _mzRandomOffset src/Dodge/Data/Muzzle.hs 17;" f _mzRot src/Dodge/Data/Muzzle.hs 11;" f _nodeMetaTree src/Dodge/Data/MetaTree.hs 17;" f _nodeTree src/Dodge/Data/MetaTree.hs 16;" f -_nodesSearched src/Dodge/Data/Creature.hs 81;" f +_nodesSearched src/Dodge/Data/Creature.hs 80;" f _nonInf src/Dodge/Data/CardinalPoint.hs 44;" f _numLinkEW src/Dodge/Data/Room.hs 34;" f _numLinkNS src/Dodge/Data/Room.hs 35;" f @@ -2326,7 +2326,7 @@ _soundStatus src/Sound/Data.hs 45;" f _soundTime src/Sound/Data.hs 44;" f _soundVolume src/Sound/Data.hs 49;" f _soundVolumeFraction src/Sound/Data.hs 50;" f -_soundsToInvestigate src/Dodge/Data/Creature.hs 80;" f +_soundsToInvestigate src/Dodge/Data/Creature.hs 79;" f _spPixelOff src/Dodge/Data/ScreenPos.hs 14;" f _spScreenOff src/Dodge/Data/ScreenPos.hs 13;" f _sparks src/Dodge/Data/LWorld.hs 110;" f @@ -2358,7 +2358,7 @@ _swarm src/Dodge/Data/Creature/State.hs 26;" f _taArcSteps src/Dodge/Data/TeslaArc.hs 17;" f _taColor src/Dodge/Data/TeslaArc.hs 18;" f _taTimer src/Dodge/Data/TeslaArc.hs 16;" f -_targetCr src/Dodge/Data/Creature.hs 73;" f +_targetCr src/Dodge/Data/Creature.hs 72;" f _targetID src/Dodge/Data/ActionPlan.hs 67;" f _targetSeenAt src/Dodge/Data/ActionPlan.hs 68;" f _tbPos src/Dodge/Data/TractorBeam.hs 12;" f @@ -2474,7 +2474,7 @@ _vcMaxCoolDown src/Dodge/Data/Creature/Misc.hs 21;" f _vertices src/Polyhedra/Data.hs 22;" f _viDist src/Dodge/Data/Creature/Perception.hs 41;" f _viFOV src/Dodge/Data/Creature/Perception.hs 40;" f -_viewPoint src/Dodge/Data/Creature.hs 75;" f +_viewPoint src/Dodge/Data/Creature.hs 74;" f _volleyNumBarrels src/Dodge/Data/TriggerType.hs 13;" f _volleyRate src/Dodge/Data/TriggerType.hs 13;" f _volume_master src/Dodge/Data/Config.hs 49;" f @@ -2671,7 +2671,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 124;" f +backPQ src/Dodge/Creature/HandPos.hs 146;" f backgroundSpaceS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 729;" f backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f backpackShape src/Dodge/Item/Draw/SPic.hs 188;" f @@ -2837,7 +2837,7 @@ 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 121;" f +chestPQ src/Dodge/Creature/HandPos.hs 143;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 35;" f @@ -2886,8 +2886,8 @@ clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f clsNearRect src/Dodge/Zoning/Cloud.hs 18;" f clsNearSeg src/Dodge/Zoning/Cloud.hs 15;" f cogRaised src/Dodge/Creature/Perception.hs 101;" f -colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f -colCrsWalls src/Dodge/WallCreatureCollisions.hs 20;" f +colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f +colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 53;" f collectInvItems src/Dodge/Inventory.hs 205;" f collide3 src/Dodge/Base/Collide.hs 129;" f @@ -2984,6 +2984,7 @@ crMvType src/Dodge/Creature/MoveType.hs 6;" f crNearPoint src/Dodge/Creature/Test.hs 132;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crRad src/Dodge/Creature/Radius.hs 7;" f +crRightHandWall src/Dodge/Creature/HandPos.hs 70;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 75;" f crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f @@ -3494,7 +3495,7 @@ equipInfo src/Dodge/Item/Info.hs 140;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 159;" f equipPosition src/Dodge/Item/Draw.hs 38;" f equipSiteInfo src/Dodge/Item/Info.hs 253;" f -equipSitePQ src/Dodge/Creature/HandPos.hs 28;" f +equipSitePQ src/Dodge/Creature/HandPos.hs 31;" f equipType src/Dodge/Data/EquipType.hs 10;" f equipmentDesignation src/Dodge/Inventory/RBList.hs 52;" f equipmentStrValue src/Dodge/Creature/Statistics.hs 56;" f @@ -3717,7 +3718,7 @@ haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 67;" f handHandleOrient src/Dodge/Item/HeldOffset.hs 57;" f handOrient src/Dodge/Item/HeldOffset.hs 39;" f -handWalkingPos src/Dodge/Creature/HandPos.hs 41;" f +handWalkingPos src/Dodge/Creature/HandPos.hs 44;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 46;" f handleKeyboardEvent src/Dodge/Event/Input.hs 23;" f @@ -3740,7 +3741,7 @@ head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f headLampShape src/Dodge/Item/Draw/SPic.hs 423;" f headMap src/Dodge/DoubleTree.hs 118;" f -headPQ src/Dodge/Creature/HandPos.hs 115;" f +headPQ src/Dodge/Creature/HandPos.hs 137;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 108;" f healthTest src/Dodge/Room/LasTurret.hs 130;" f @@ -4003,13 +4004,13 @@ leaveResetQuitTerminal src/Dodge/WorldEffect.hs 163;" 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 72;" f +leftHandPQ src/Dodge/Creature/HandPos.hs 94;" 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 85;" f -legPQ src/Dodge/Creature/HandPos.hs 91;" f -legPQ' src/Dodge/Creature/HandPos.hs 96;" f +leftWristPQ src/Dodge/Creature/HandPos.hs 107;" f +legPQ src/Dodge/Creature/HandPos.hs 113;" f +legPQ' src/Dodge/Creature/HandPos.hs 118;" f legsSPic src/Dodge/Item/Draw/SPic.hs 448;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 86;" f @@ -4310,7 +4311,7 @@ nextInSectionSS src/Dodge/SelectionSections.hs 34;" f nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f -noclipCheck src/Dodge/WallCreatureCollisions.hs 23;" f +noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodesNear src/Dodge/Path.hs 75;" f nonConvexChasm src/Dodge/Room/Tutorial.hs 260;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f @@ -4562,10 +4563,10 @@ pt0 src/Dodge/LevelGen/PlacementHelper.hs 55;" f ptCont src/Dodge/LevelGen/PlacementHelper.hs 21;" f pulseChecker src/Dodge/Item/Equipment.hs 84;" f pushCaverns src/Dodge/Room/LongDoor.hs 192;" f -pushCr src/Dodge/WallCreatureCollisions.hs 43;" f +pushCr src/Dodge/WallCreatureCollisions.hs 42;" f pushL src/DoubleStack.hs 20;" f -pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 116;" f -pushOutFromWall src/Dodge/WallCreatureCollisions.hs 105;" f +pushOutFromCorners src/Dodge/WallCreatureCollisions.hs 126;" f +pushOutFromWall' src/Dodge/WallCreatureCollisions.hs 115;" f pushR src/DoubleStack.hs 24;" f pushScreen src/Dodge/Menu/PushPop.hs 9;" f pushYouOutFromWalls src/Dodge/Update.hs 342;" f @@ -4729,11 +4730,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 59;" f +rightHandPQ src/Dodge/Creature/HandPos.hs 62;" 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 69;" f +rightWristPQ src/Dodge/Creature/HandPos.hs 91;" f rlPosDir src/Dodge/RoomLink.hs 112;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 399;" f rmInLinks src/Dodge/RoomLink.hs 153;" f @@ -5017,10 +5018,10 @@ slapClean7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 747;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 667;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 629;" f slideWindow src/ListHelp.hs 81;" f -slowCrush90 src/Dodge/Room/LongDoor.hs 257;" f +slowCrush90 src/Dodge/Room/LongDoor.hs 263;" f slowCrushRoom src/Dodge/Room/LongDoor.hs 148;" f -slowDoorRoom src/Dodge/Room/LongDoor.hs 303;" f -slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 320;" f +slowDoorRoom src/Dodge/Room/LongDoor.hs 309;" f +slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 326;" f smallBattery src/Dodge/Item/Ammo.hs 57;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f @@ -5090,7 +5091,7 @@ sqPlatformChasm src/Dodge/Room/Tutorial.hs 225;" f sqSpitChasm src/Dodge/Room/Tutorial.hs 240;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f -squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 119;" f +squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 129;" f squashNormalizeV src/Geometry/Vector.hs 160;" f ssLookupDown src/Dodge/SelectionSections.hs 96;" f ssLookupGE' src/Dodge/SelectionSections.hs 150;" f @@ -5304,8 +5305,8 @@ 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 79;" f -translatePointToRightHand src/Dodge/Creature/HandPos.hs 38;" f +translatePointToLeftHand src/Dodge/Creature/HandPos.hs 101;" f +translatePointToRightHand src/Dodge/Creature/HandPos.hs 41;" f translateSH src/Shape.hs 242;" f translateSHxy src/Shape.hs 246;" f translateSHz src/Shape.hs 250;" f @@ -5313,11 +5314,11 @@ translateSP src/ShapePicture.hs 53;" f 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 25;" f -translateToLeftHand src/Dodge/Creature/HandPos.hs 82;" f -translateToLeftLeg src/Dodge/Creature/HandPos.hs 88;" f -translateToRightHand src/Dodge/Creature/HandPos.hs 66;" f -translateToRightLeg src/Dodge/Creature/HandPos.hs 112;" f +translateToES src/Dodge/Creature/HandPos.hs 28;" f +translateToLeftHand src/Dodge/Creature/HandPos.hs 104;" f +translateToLeftLeg src/Dodge/Creature/HandPos.hs 110;" f +translateToRightHand src/Dodge/Creature/HandPos.hs 88;" f +translateToRightLeg src/Dodge/Creature/HandPos.hs 134;" f translateXY src/Polyhedra.hs 23;" f trapTBH src/Geometry/Polygon.hs 22;" f trapezionBWHW src/Geometry/Polygon.hs 34;" f @@ -5417,7 +5418,7 @@ updateCreatureStrides src/Dodge/Update.hs 370;" f updateDebris src/Dodge/Update.hs 656;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 102;" f -updateDelayedEvents src/Dodge/Update.hs 997;" f +updateDelayedEvents src/Dodge/Update.hs 994;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f updateDistortions src/Dodge/Update.hs 635;" f @@ -5587,9 +5588,9 @@ volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f walkNozzle src/Dodge/HeldUse.hs 826;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f -wallBuffer src/Dodge/WallCreatureCollisions.hs 100;" f +wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f -wallMovement src/Dodge/WallCreatureCollisions.hs 69;" f +wallMovement src/Dodge/WallCreatureCollisions.hs 68;" f wallToSurface src/Dodge/Base/Collide.hs 182;" f wallsFromRooms src/Dodge/Layout.hs 141;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f @@ -5643,9 +5644,9 @@ wlIsOpaque src/Dodge/Base/Wall.hs 6;" f wlIsSeeThrough src/Dodge/Base/Wall.hs 11;" f wlOpaqueDraw src/Dodge/Render/Walls.hs 53;" f wlSeeThroughDraw src/Dodge/Render/Walls.hs 56;" f -wlWlCrush' src/Dodge/WallCreatureCollisions.hs 90;" f +wlWlCrush' src/Dodge/WallCreatureCollisions.hs 89;" f wlZoneSize src/Dodge/Zoning/Wall.hs 51;" f -wlsCrush' src/Dodge/WallCreatureCollisions.hs 81;" f +wlsCrush' src/Dodge/WallCreatureCollisions.hs 80;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 34;" f wlsHit src/Dodge/WorldEvent/ThingsHit.hs 156;" f wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f