diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index bea6ffd52..14ce9045b 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -65,8 +65,8 @@ 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.qz 1) | twoFlat cr = (V3 4 (-8) 12, Q.qID) --- | Just dt <- yourRootItemDT w --- , Just as <- itemAimStance + | Just TwoHandTwist <- cr ^? crManipulation . manObject . imAimStance + = (V3 8 (-6) 10, Q.qID) | Just p <- crRightHandWall cr = (20 & _xy .~ p, Q.qID) | otherwise = (handWalkingPos LeftForward (-8) cr, Q.qID) @@ -116,6 +116,10 @@ leftHandPQ :: Creature -> Point3Q leftHandPQ cr | 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 TwoHandTwist <- cr ^? crManipulation . manObject . imAimStance + = (V3 10 8 20, Q.qID) + | Just TwoHandFlat <- cr ^? crManipulation . manObject . imAimStance + = (V3 10 8 20, 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) diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index eb829b7d5..8e1850f38 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -102,7 +102,7 @@ twoFlat :: Creature -> Bool twoFlat = crInAimStance TwoHandFlat twists :: Creature -> Bool -twists cr = crInAimStance TwoHandUnder cr || crInAimStance TwoHandOver cr +twists cr = crInAimStance TwoHandTwist cr -- the use of crOldPos is because the damage position is calculated on the -- previous frame @@ -120,8 +120,7 @@ crIsArmouredFrom m p cr = fromMaybe False $ do -- even though angleVV can generate NaN, the comparison seems to deal with it frontarmdirection | crInAimStance OneHand cr = 0.5 - | crInAimStance TwoHandUnder cr = negate 1 - | crInAimStance TwoHandOver cr = negate 1 + | crInAimStance TwoHandTwist cr = negate 1 | otherwise = 0 --crOnSeg :: Point2 -> Point2 -> Creature -> Bool diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index bce182ee1..c8990988b 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -116,9 +116,6 @@ wasdWithAiming w cr = wasdAim inp w $ wasdMovement (w ^. cWorld . lWorld) inp ca wasdAim :: Input -> World -> Creature -> Creature wasdAim inp w cr - -- | Just 0 <- inp ^? mouseButtons . ix SDL.ButtonRight - -- , Nothing <- inp ^? mouseButtons . ix SDL.ButtonLeft = - -- setAimPosture cr | SDL.ButtonRight `M.member` _mouseButtons inp , AtEase <- cr ^. crStance . posture = setAimPosture cr @@ -137,7 +134,7 @@ setAimPosture cr = doAimTwist :: Maybe AimStance -> Float -> Creature -> Creature doAimTwist as x - | as == Just TwoHandOver || as == Just TwoHandUnder = crDir +~ x + | as == Just TwoHandTwist = crDir +~ x | otherwise = id removeAimPosture :: Creature -> Creature diff --git a/src/Dodge/Data/AimStance.hs b/src/Dodge/Data/AimStance.hs index a04845cca..2a74323ff 100644 --- a/src/Dodge/Data/AimStance.hs +++ b/src/Dodge/Data/AimStance.hs @@ -8,8 +8,7 @@ import Data.Aeson import Data.Aeson.TH data AimStance - = TwoHandUnder - | TwoHandOver + = TwoHandTwist | TwoHandFlat | OneHand deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Item/AimStance.hs b/src/Dodge/Item/AimStance.hs index 4db7629ab..c519fd705 100644 --- a/src/Dodge/Item/AimStance.hs +++ b/src/Dodge/Item/AimStance.hs @@ -34,33 +34,33 @@ heldAimStance = \case PISTOL -> OneHand MACHINEPISTOL -> OneHand AUTOPISTOL -> OneHand - SMG -> TwoHandUnder + SMG -> TwoHandTwist BANGCONE -> OneHand - BLUNDERBUSS -> TwoHandUnder - GRAPECANNON{} -> TwoHandUnder - MINIGUNX{} -> TwoHandUnder + BLUNDERBUSS -> TwoHandTwist + GRAPECANNON{} -> TwoHandTwist + MINIGUNX{} -> TwoHandTwist VOLLEYGUN{} -> TwoHandFlat - RIFLE -> TwoHandUnder - ALTERIFLE -> TwoHandUnder - AUTORIFLE -> TwoHandUnder - BURSTRIFLE -> TwoHandUnder - BANGROD -> TwoHandUnder - ELEPHANTGUN -> TwoHandUnder - AMR -> TwoHandUnder - AUTOAMR -> TwoHandUnder - SNIPERRIFLE -> TwoHandUnder + RIFLE -> TwoHandTwist + ALTERIFLE -> TwoHandTwist + AUTORIFLE -> TwoHandTwist + BURSTRIFLE -> TwoHandTwist + BANGROD -> TwoHandTwist + ELEPHANTGUN -> TwoHandTwist + AMR -> TwoHandTwist + AUTOAMR -> TwoHandTwist + SNIPERRIFLE -> TwoHandTwist FLAMESPITTER -> OneHand - FLAMETHROWER -> TwoHandUnder - FLAMETORRENT -> TwoHandUnder - FLAMEWALL -> TwoHandUnder - BLOWTORCH -> TwoHandUnder + FLAMETHROWER -> TwoHandTwist + FLAMETORRENT -> TwoHandTwist + FLAMEWALL -> TwoHandTwist + BLOWTORCH -> TwoHandTwist TESLACOIL -> TwoHandFlat - TRACTORGUN -> TwoHandUnder - RLAUNCHER -> TwoHandOver - RLAUNCHERX{} -> TwoHandOver - GLAUNCHER -> TwoHandUnder - POISONSPRAYER -> TwoHandUnder - SHATTERGUN -> TwoHandUnder + TRACTORGUN -> TwoHandTwist + RLAUNCHER -> TwoHandTwist + RLAUNCHERX{} -> TwoHandTwist + GLAUNCHER -> TwoHandTwist + POISONSPRAYER -> TwoHandTwist + SHATTERGUN -> TwoHandTwist LED -> OneHand FLATSHIELD -> TwoHandFlat KEYCARD {} -> OneHand diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 833d4c67e..ea09fadb0 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -102,7 +102,7 @@ extraWeaponLinks itm = case itm ^. itType of extraWeaponLinksBelow :: Item -> [ItemSF] extraWeaponLinksBelow itm - | TwoHandUnder <- itemBaseStance itm = [UnderBarrelSlotSF] + | TwoHandTwist <- itemBaseStance itm = [UnderBarrelSlotSF] | otherwise = [] getAmmoLinks :: Item -> [ItemSF] diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index e323a6768..4ce800b50 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -51,14 +51,11 @@ handleOrient loc = case loc ^. locDT . dtValue . _1 . itType of handOrient :: Creature -> AimStance -> Point3Q handOrient cr = \case - TwoHandUnder -> + TwoHandTwist -> let (rp,_) = rightHandPQ cr (lp,_) = leftHandPQ cr - in (rp,Q.qz (argV $ (lp - rp) ^. _xy)) - TwoHandOver -> - let (rp,_) = rightHandPQ cr - (lp,_) = leftHandPQ cr - in (rp,Q.qz (argV $ (lp - rp) ^. _xy)) +-- in (rp,Q.qz (argV $ (lp - rp) ^. _xy)) + in (rp,Q.qNoRoll (lp - rp)) OneHand -> rightHandPQ cr TwoHandFlat -> let (rp,_) = rightHandPQ cr diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 9c8141b9d..cb783e7f2 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -242,8 +242,7 @@ heldPositionInfo = aimStanceInfo . itemBaseStance aimStanceInfo :: AimStance -> String aimStanceInfo as = case as of - TwoHandUnder -> "It is held using two hands, tucked under the shoulder." - TwoHandOver -> "It is held using two hands, resting over the shoulder." + TwoHandTwist -> "It is held using two hands alongside the body." TwoHandFlat -> "It is held using two hands in front of the body." OneHand -> "It is held in one hand." diff --git a/src/Quaternion.hs b/src/Quaternion.hs index eba1a27bd..73567bb91 100644 --- a/src/Quaternion.hs +++ b/src/Quaternion.hs @@ -16,6 +16,7 @@ module Quaternion ( comp, prePos, module Linear.Quaternion, + qNoRoll, ) where import Geometry.Vector @@ -24,6 +25,8 @@ import Geometry.Data import Geometry.Vector3D import Linear.Quaternion import qualified Linear.Quaternion as Q +import Control.Lens +import Linear instance ToJSON a => ToJSON (Q.Quaternion a) where toEncoding = genericToEncoding defaultOptions @@ -46,6 +49,17 @@ vToQuat a b where cprod = crossProd a b +qNoRoll :: Point3 -> Q.Quaternion Float +--qNoRoll x = qz (argV $ x ^. _xy) * Q.axisAngle (V3 0 (-1) 0) (argV (V2 (x ^. _z) (norm (x ^. _xy)))) +qNoRoll x = qNoRoll2 x * qNoRoll1 x +--qNoRoll x = Q.axisAngle (V3 0 1 0) (argV (V2 (x ^. _z) (norm (x ^. _xy)))) * qz (argV $ x ^. _xy) +-- +qNoRoll1 :: Point3 -> Q.Quaternion Float +qNoRoll1 x = Q.axisAngle (V3 0 (-1) 0) . argV $ V2 (norm (x ^. _xy)) (x ^. _z) + +qNoRoll2 :: Point3 -> Q.Quaternion Float +qNoRoll2 x = qz (argV $ x ^. _xy) + qToV3 :: Q.Quaternion Float -> Point3 qToV3 q = Q.rotate q (V3 1 0 0) diff --git a/tags b/tags index 26f4388bc..6a90d588c 100644 --- a/tags +++ b/tags @@ -935,7 +935,7 @@ OnRightLeg src/Dodge/Data/Equipment/Misc.hs 26;" C OnRightWrist src/Dodge/Data/Equipment/Misc.hs 24;" C OnTurret src/Dodge/Data/Item/Location.hs 37;" C OnceSound src/Dodge/Data/SoundOrigin.hs 14;" C -OneHand src/Dodge/Data/AimStance.hs 14;" C +OneHand src/Dodge/Data/AimStance.hs 13;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 13;" C Opacity src/Dodge/Data/Wall.hs 30;" t Opaque src/Dodge/Data/Wall.hs 34;" C @@ -1389,9 +1389,8 @@ TurnTowardCr src/Dodge/Data/CreatureEffect.hs 9;" C Turret src/Dodge/Data/Machine.hs 65;" t TurretInt src/Dodge/Data/Item/Location.hs 19;" t TwistGoal src/Dodge/Data/Scenario.hs 15;" C -TwoHandFlat src/Dodge/Data/AimStance.hs 13;" C -TwoHandOver src/Dodge/Data/AimStance.hs 12;" C -TwoHandUnder src/Dodge/Data/AimStance.hs 11;" C +TwoHandFlat src/Dodge/Data/AimStance.hs 12;" C +TwoHandTwist src/Dodge/Data/AimStance.hs 11;" C Typical src/Shape/Data.hs 31;" C UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 98;" C UNIGATE src/Dodge/Data/Item/Combine.hs 30;" C @@ -2577,7 +2576,7 @@ advanceScrollAmount src/Dodge/Update.hs 479;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f aimDelaySweep src/Dodge/Render/Picture.hs 285;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f -aimTurn src/Dodge/Creature/YourControl.hs 169;" f +aimTurn src/Dodge/Creature/YourControl.hs 161;" f airlock src/Dodge/Room/Airlock.hs 28;" f airlock0 src/Dodge/Room/Airlock.hs 78;" f airlock90 src/Dodge/Room/Airlock.hs 201;" f @@ -2672,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 168;" f +backPQ src/Dodge/Creature/HandPos.hs 172;" 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 @@ -2840,7 +2839,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 165;" f +chestPQ src/Dodge/Creature/HandPos.hs 169;" 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 @@ -2920,7 +2919,7 @@ combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 743;" f combineTree src/Dodge/Tree/Compose.hs 68;" f commandColor src/Dodge/Terminal.hs 127;" f commonPrefix src/Dodge/Debug/Terminal.hs 149;" f -comp src/Quaternion.hs 61;" f +comp src/Quaternion.hs 75;" f compP2A src/Dodge/ShiftPoint.hs 11;" f compactDraw src/Dodge/LevelGen.hs 96;" f compactDraw' src/Dodge/LevelGen.hs 107;" f @@ -2985,7 +2984,7 @@ crMvBy src/Dodge/Creature/Impulse/Movement.hs 22;" f crMvByNoStride src/Dodge/Creature/Impulse/Movement.hs 30;" f crMvForward src/Dodge/Creature/Impulse/Movement.hs 57;" f crMvType src/Dodge/Creature/MoveType.hs 6;" f -crNearPoint src/Dodge/Creature/Test.hs 133;" 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 73;" f @@ -3231,7 +3230,7 @@ divideLine src/Geometry.hs 248;" f divideLineExact src/Geometry.hs 276;" f divideLineOddNumPoints src/Geometry.hs 261;" f dmType src/Dodge/Damage.hs 38;" f -doAimTwist src/Dodge/Creature/YourControl.hs 139;" f +doAimTwist src/Dodge/Creature/YourControl.hs 135;" f doAnyEquipmentEffect src/Dodge/Creature/State.hs 141;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBarrelSpin src/Dodge/Projectile/Update.hs 168;" f @@ -3720,7 +3719,7 @@ halfHeight src/Dodge/Base/Window.hs 49;" f halfWidth src/Dodge/Base/Window.hs 49;" f haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 67;" f -handHandleOrient src/Dodge/Item/HeldOffset.hs 74;" f +handHandleOrient src/Dodge/Item/HeldOffset.hs 71;" f handOrient src/Dodge/Item/HeldOffset.hs 52;" f handWalkingPos src/Dodge/Creature/HandPos.hs 45;" f handleEvent src/Dodge/Event.hs 27;" f @@ -3730,12 +3729,12 @@ handleMouseButtonEvent src/Dodge/Event/Input.hs 59;" f handleMouseMotionEvent src/Dodge/Event/Input.hs 47;" f handleMouseWheelEvent src/Dodge/Event/Input.hs 54;" f handleOrient src/Dodge/Item/HeldOffset.hs 32;" f -handlePos src/Dodge/Item/HeldOffset.hs 97;" f +handlePos src/Dodge/Item/HeldOffset.hs 94;" f handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f -hasAutoDoorBody src/Dodge/Creature/Test.hs 142;" f +hasAutoDoorBody src/Dodge/Creature/Test.hs 141;" f hasButtonLOS src/Dodge/Base/Collide.hs 304;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f hasLOS src/Dodge/Base/Collide.hs 297;" f @@ -3745,7 +3744,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 159;" f +headPQ src/Dodge/Creature/HandPos.hs 163;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 109;" f healthTest src/Dodge/Room/LasTurret.hs 129;" f @@ -3754,10 +3753,10 @@ heldAimStance src/Dodge/Item/AimStance.hs 28;" f heldAimZoom src/Dodge/Update/Camera.hs 158;" f heldEffect src/Dodge/HeldUse.hs 64;" f heldEffectMuzzles src/Dodge/HeldUse.hs 135;" f -heldHandlePos src/Dodge/Item/HeldOffset.hs 103;" f +heldHandlePos src/Dodge/Item/HeldOffset.hs 100;" f heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 20;" f -heldItemBulkiness src/Dodge/Creature/YourControl.hs 182;" f +heldItemBulkiness src/Dodge/Creature/YourControl.hs 174;" f heldItemInvLock src/Dodge/HeldUse.hs 469;" f heldItemMuzVel src/Dodge/HeldUse.hs 1022;" f heldItemMuzzles src/Dodge/HeldUse.hs 198;" f @@ -3875,7 +3874,7 @@ invertInventoryToMap src/Dodge/Combine.hs 57;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 27;" f isAmmoIntLink src/Dodge/HeldUse.hs 738;" f -isAnimate src/Dodge/Creature/Test.hs 136;" f +isAnimate src/Dodge/Creature/Test.hs 135;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 66;" f @@ -3916,7 +3915,7 @@ itemBaseName src/Dodge/Item/Display.hs 60;" f itemBaseStance src/Dodge/Item/AimStance.hs 22;" f itemBelowAttachables src/Dodge/Item/Grammar.hs 53;" f itemBlips src/Dodge/RadarSweep.hs 94;" f -itemBulkiness src/Dodge/Creature/YourControl.hs 176;" f +itemBulkiness src/Dodge/Creature/YourControl.hs 168;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemDetectorEffect src/Dodge/HeldUse.hs 811;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 53;" f @@ -4012,9 +4011,9 @@ leftHandPQ src/Dodge/Creature/HandPos.hs 115;" 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 129;" f -legPQ src/Dodge/Creature/HandPos.hs 135;" f -legPQ' src/Dodge/Creature/HandPos.hs 140;" f +leftWristPQ src/Dodge/Creature/HandPos.hs 133;" f +legPQ src/Dodge/Creature/HandPos.hs 139;" f +legPQ' src/Dodge/Creature/HandPos.hs 144;" 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 @@ -4060,7 +4059,7 @@ locDTLeftmost src/Dodge/DoubleTree.hs 148;" f locDTRightmost src/Dodge/DoubleTree.hs 151;" f locGoHelp src/Dodge/DoubleTree.hs 166;" f locMuzzles src/Dodge/HeldUse.hs 149;" f -locOrient src/Dodge/Item/HeldOffset.hs 69;" f +locOrient src/Dodge/Item/HeldOffset.hs 66;" f locToTop src/Dodge/DoubleTree.hs 145;" f locUp' src/Dodge/DoubleTree.hs 132;" f lockInv src/Dodge/Inventory/Lock.hs 9;" f @@ -4536,7 +4535,7 @@ powlistUpToN src/Multiset.hs 23;" f powlistUpToN' src/Multiset.hs 12;" f powlistUpToN'' src/Multiset.hs 31;" f preCritStart src/Dodge/Room/Start.hs 84;" f -prePos src/Quaternion.hs 64;" f +prePos src/Quaternion.hs 78;" f preloadRender src/Preload/Render.hs 29;" f premapMaybe src/FoldlHelp.hs 26;" f prependTwo src/Geometry.hs 177;" f @@ -4602,14 +4601,17 @@ putTerminalFull src/Dodge/Placement/Instance/Terminal.hs 21;" f putTerminalImediateAccess src/Dodge/Placement/Instance/Terminal.hs 16;" f putWireEnd src/Dodge/Wire.hs 29;" f putWireStart src/Dodge/Wire.hs 32;" f -qID src/Quaternion.hs 58;" f -qToAng src/Quaternion.hs 55;" f -qToV2 src/Quaternion.hs 52;" f -qToV3 src/Quaternion.hs 49;" f +qID src/Quaternion.hs 72;" f +qNoRoll src/Quaternion.hs 52;" f +qNoRoll1 src/Quaternion.hs 57;" f +qNoRoll2 src/Quaternion.hs 60;" f +qToAng src/Quaternion.hs 69;" f +qToV2 src/Quaternion.hs 66;" f +qToV3 src/Quaternion.hs 63;" f quarterRoomSquare src/Dodge/Room/Procedural.hs 194;" f quarterRoomTri src/Dodge/Room/Procedural.hs 158;" f quitCommand src/Dodge/Terminal.hs 106;" f -qz src/Quaternion.hs 67;" f +qz src/Quaternion.hs 81;" f rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f @@ -4688,7 +4690,7 @@ reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 531;" f rememberSounds src/Dodge/Creature/Perception.hs 176;" f remoteDetonator src/Dodge/Item/Scope.hs 152;" f remoteScreen src/Dodge/Item/Scope.hs 146;" f -removeAimPosture src/Dodge/Creature/YourControl.hs 144;" f +removeAimPosture src/Dodge/Creature/YourControl.hs 140;" f removeAmmoFromMag src/Dodge/HeldUse.hs 933;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f @@ -4788,7 +4790,7 @@ rotateSP src/ShapePicture.hs 57;" f rotateTo src/Polyhedra/Geodesic.hs 65;" f rotateTo8 src/Dodge/Update/Camera/Rotate.hs 6;" f rotateToOverlappingWall src/Dodge/Update/Camera.hs 219;" f -rotateToZ src/Quaternion.hs 35;" f +rotateToZ src/Quaternion.hs 38;" f rotateV src/Geometry/Vector.hs 108;" f rotateVAround src/Geometry/Vector.hs 115;" f rotateXY src/Polyhedra.hs 28;" f @@ -4982,7 +4984,7 @@ shootingRange src/Dodge/Room/Room.hs 357;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 527;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 80;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 77;" f showAttachItem src/Dodge/Item/Display.hs 92;" f showEquipItem src/Dodge/Item/Display.hs 108;" f showInt src/Dodge/Item/Info.hs 75;" f @@ -5151,7 +5153,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 50;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 64;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f strictify src/MaybeHelp.hs 35;" f -strideRot src/Dodge/Item/HeldOffset.hs 83;" f +strideRot src/Dodge/Item/HeldOffset.hs 80;" f stringToList src/Picture/Base.hs 308;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -5314,7 +5316,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 123;" f +translatePointToLeftHand src/Dodge/Creature/HandPos.hs 127;" f translatePointToRightHand src/Dodge/Creature/HandPos.hs 42;" f translateSH src/Shape.hs 242;" f translateSHxy src/Shape.hs 246;" f @@ -5324,10 +5326,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 29;" f -translateToLeftHand src/Dodge/Creature/HandPos.hs 126;" f -translateToLeftLeg src/Dodge/Creature/HandPos.hs 132;" f +translateToLeftHand src/Dodge/Creature/HandPos.hs 130;" f +translateToLeftLeg src/Dodge/Creature/HandPos.hs 136;" f translateToRightHand src/Dodge/Creature/HandPos.hs 109;" f -translateToRightLeg src/Dodge/Creature/HandPos.hs 156;" f +translateToRightLeg src/Dodge/Creature/HandPos.hs 160;" f translateXY src/Polyhedra.hs 23;" f trapTBH src/Geometry/Polygon.hs 22;" f trapezionBWHW src/Geometry/Polygon.hs 34;" f @@ -5347,7 +5349,7 @@ truncFaces src/Polyhedra/Geodesic.hs 54;" f truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 162;" f tryAttachItems src/Dodge/Item/Grammar.hs 34;" f -tryClickUse src/Dodge/Creature/YourControl.hs 224;" f +tryClickUse src/Dodge/Creature/YourControl.hs 216;" f tryCombine src/Dodge/Update/Input/InGame.hs 521;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 151;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 140;" f @@ -5377,8 +5379,8 @@ twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f twists src/Dodge/Creature/Test.hs 104;" f twoFlat src/Dodge/Creature/Test.hs 101;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 94;" f -twoHandTwistAmount src/Dodge/Creature/YourControl.hs 154;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 91;" f +twoHandTwistAmount src/Dodge/Creature/YourControl.hs 146;" f twoRoomPoss src/Dodge/PlacementSpot.hs 148;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 519;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 567;" f @@ -5571,7 +5573,7 @@ vNormal src/Geometry/Vector.hs 151;" f vNormaly src/Geometry/Vector3D.hs 72;" f vShape src/Dodge/Placement/Instance/LightSource.hs 100;" f vToL src/MatrixHelper.hs 56;" f -vToQuat src/Quaternion.hs 42;" f +vToQuat src/Quaternion.hs 45;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f vasTightStride src/Shader/Compile.hs 128;" f vecBetweenSpeed src/Dodge/Base.hs 146;" f @@ -5609,7 +5611,7 @@ warp1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 845;" f wasdAim src/Dodge/Creature/YourControl.hs 117;" f wasdDir src/Dodge/WASD.hs 17;" f wasdM src/Dodge/WASD.hs 9;" f -wasdMovement src/Dodge/Creature/YourControl.hs 157;" f +wasdMovement src/Dodge/Creature/YourControl.hs 149;" f wasdWithAiming src/Dodge/Creature/YourControl.hs 110;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 186;" f