diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index a1257dfa3..04f7957ed 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -190,18 +190,20 @@ dropItem cr invid = youDropItem :: World -> World youDropItem w = fromMaybe w $ do curpos <- - you w ^? crManipulation . manObject . imSelectedItem --- <|> fmap fst (IM.lookupMax =<< w ^? hud . hudElement . diSections . ix 0 . ssItems) - <|> fmap fst (IM.lookupMax (you w ^. crInv)) - guard $ not $ _crInvLock (you w) - return $ - w - & dropItem cr curpos + cr ^? crManipulation . manObject . imSelectedItem + <|> fmap fst (IM.lookupMax (cr ^. crInv)) + guard $ not $ _crInvLock cr + return $ case cr ^. crStance . posture of + Aiming -> throwItem w + AtEase -> dropItem cr curpos w where - -- & soundStart (CrSound (_crID cr)) (_crPos cr) whiteNoiseFadeOutS Nothing - cr = you w +-- placeholder, remember to deal with two handed weapon twist +-- should throw all attached items? +throwItem :: World -> World +throwItem = id + sizeSelf :: Float -> Creature -> World -> Maybe World sizeSelf x cr w | not (crOnWall cr1 w) = diff --git a/src/Dodge/Creature/Statistics.hs b/src/Dodge/Creature/Statistics.hs index 2df9c26af..aea0474d8 100644 --- a/src/Dodge/Creature/Statistics.hs +++ b/src/Dodge/Creature/Statistics.hs @@ -9,7 +9,7 @@ import qualified IntMapHelp as IM import LensHelp getCrDexterity :: Creature -> Int -getCrDexterity cr = _dexterity (_crStatistics cr) +getCrDexterity = _dexterity . _crStatistics getCrMoveSpeed :: Creature -> Int getCrMoveSpeed cr = strFromHeldItem cr + strFromEquipment cr + _strength (_crStatistics cr) @@ -27,10 +27,7 @@ crCurrentEquipment :: Creature -> IM.IntMap Item crCurrentEquipment = IM.filter (isJust . (^? itLocation . ilEquipSite . _Just)) . _crInv strFromHeldItem :: Creature -> Int -strFromHeldItem cr ---x--- | _posture (_crStance cr) == Aiming || crIsReloading cr = negate $ fromMaybe 0 $ do --- | _posture (_crStance cr) == Aiming = negate $ fromMaybe 0 $ do - | Aiming {} <- _posture (_crStance cr) = negate $ fromMaybe 0 $ do - i <- cr ^? crManipulation . manObject . imRootSelectedItem - cr ^? crInv . ix i . itUse . heldAim . aimWeight - | otherwise = 0 +strFromHeldItem cr = fromMaybe 0 $ do + Aiming <- cr ^? crStance . posture + i <- cr ^? crManipulation . manObject . imRootSelectedItem + fmap negate $ cr ^? crInv . ix i . itUse . heldAim . aimWeight diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index 8ccc3798f..fdeb62aaa 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -2,9 +2,7 @@ module Dodge.Creature.YourControl ( yourControl, ) where -import Dodge.SelectedClose import Control.Monad -import Data.Foldable import qualified Data.Map.Strict as M import Data.Maybe import Dodge.Base.Coordinate @@ -14,6 +12,7 @@ import Dodge.Data.World import Dodge.Hotkey import Dodge.InputFocus import Dodge.Inventory +import Dodge.SelectedClose import Dodge.WASD import Geometry import LensHelp @@ -27,9 +26,7 @@ yourControl _ w | Just x <- w ^? hud . hudElement . subInventory , f x = w - & cWorld . lWorld . creatures . ix 0 --- %~ (wasdWithAiming w . setCrPosture pkeys) - %~ wasdWithAiming w + & cWorld . lWorld . creatures . ix 0 %~ wasdWithAiming w & tryClickUse pkeys & handleHotkeys | otherwise = @@ -42,17 +39,17 @@ yourControl _ w handleHotkeys :: World -> World handleHotkeys w - | SDL.ScancodeLShift `M.member` _pressedKeys (_input w) - || SDL.ScancodeRShift `M.member` _pressedKeys (_input w) - , hks <- mapMaybe scancodeToHotkey $ M.keys $ w ^. input . pressedKeys + | ispressed SDL.ScancodeLShift || ispressed SDL.ScancodeRShift + , Just hk <- listToMaybe . mapMaybe scancodeToHotkey . M.keys $ w ^. input . pressedKeys , Just invid <- lw ^? creatures . ix 0 . crManipulation . manObject . imSelectedItem , Just itid <- lw ^? creatures . ix 0 . crInv . ix invid . itID = - w & cWorld . lWorld %~ \lw' -> foldl' (flip $ assignHotkey itid) lw' hks - | SDL.ScancodeLCtrl `M.member` _pressedKeys (_input w) - || SDL.ScancodeRCtrl `M.member` _pressedKeys (_input w) - , Just hk <- listToMaybe . mapMaybe scancodeToHotkey . M.keys $ w ^. input . pressedKeys - , Just itid <- w ^? cWorld . lWorld . hotkeys . ix hk . unNInt - , Just invid <- w ^? cWorld . lWorld . itemLocations . ix itid . ilInvID = + w & cWorld . lWorld %~ assignHotkey itid hk + | ispressed SDL.ScancodeLCtrl || ispressed SDL.ScancodeRCtrl + , Just hk <- + listToMaybe . mapMaybe scancodeToHotkey . M.keys $ + w ^. input . pressedKeys + , Just itid <- lw ^? hotkeys . ix hk . unNInt + , Just invid <- lw ^? itemLocations . ix itid . ilInvID = w & augInvDirectSelect (0, invid, mempty) | otherwise = M.foldl' @@ -60,6 +57,7 @@ handleHotkeys w w (M.intersectionWith (,) thehotkeys (w ^. input . pressedKeys)) where + ispressed k = k `M.member` _pressedKeys (_input w) thehotkeys = M.mapKeys hotkeyToScancode $ w ^. cWorld . lWorld . hotkeys lw = w ^. cWorld . lWorld @@ -112,11 +110,7 @@ scancodeToHotkey x = case x of {- | The order of these MAY be important, in particular the setting of crMvAim within wasdMovement should probably be done first -} -wasdWithAiming :: - World -> - Creature -> - Creature ---wasdWithAiming w cr = wasdAim inp cam . wasdTwist $ wasdMovement inp cam speed cr +wasdWithAiming :: World -> Creature -> Creature wasdWithAiming w cr = wasdAim inp cam $ wasdMovement inp cam speed cr where speed = _mvSpeed $ _crMvType cr @@ -125,57 +119,32 @@ wasdWithAiming w cr = wasdAim inp cam $ wasdMovement inp cam speed cr wasdAim :: Input -> Camera -> Creature -> Creature wasdAim inp cam cr - | Just 0 <- inp ^? mouseButtons . ix SDL.ButtonRight - = setAimPosture cr - | Just 0 <- inp ^? mouseButtonsReleased . ix SDL.ButtonRight - = removeAimPosture cr + | Just 0 <- inp ^? mouseButtons . ix SDL.ButtonRight = + setAimPosture cr + | Just 0 <- inp ^? mouseButtonsReleased . ix SDL.ButtonRight = + removeAimPosture cr | SDL.ButtonRight `M.member` _mouseButtons inp = aimTurn mouseDir cr | otherwise = creatureTurnTowardDir (_crMvAim cr) 0.2 cr where mouseDir = argV $ mouseWorldPos inp cam - (cr ^. crPos) ----- aim with the root item ----- when initiating aim with a two handed weapon, change the creature direction ----- to be closer to where the two handed weapon was pointing ---wasdTwist :: Creature -> Creature ---wasdTwist cr ----- | _posture (_crStance cr) == Aiming --- | Aiming {} <- cr ^. crStance . posture = fromMaybe cr $ do --- itRef <- cr ^? crManipulation . manObject . imRootSelectedItem --- astance <- cr ^? crInv . ix itRef . itUse . heldAim . aimStance --- case (astance, cr ^. crTwist) of --- (TwoHandUnder, 0) -> --- return $ cr & crTwist .~ twistamount * pi & crDir -~ twistamount * pi --- (TwoHandOver, 0) -> --- return $ cr & crTwist .~ twistamount * pi & crDir -~ twistamount * pi --- _ -> Nothing --- | otherwise = --- cr --- & crDir +~ _crTwist cr --- & crTwist .~ 0 --remove twistk --- where --- twistamount = 1.6 - setAimPosture :: Creature -> Creature -setAimPosture cr = fromMaybe cr $ do +setAimPosture = (crStance . posture .~ Aiming) . doAimTwist (- twoHandTwistAmount) + +doAimTwist :: Float -> Creature -> Creature +doAimTwist x cr = fromMaybe cr $ do itRef <- cr ^? crManipulation . manObject . imRootSelectedItem astance <- cr ^? crInv . ix itRef . itUse . heldAim . aimStance - case astance of - TwoHandUnder -> - return $ cr & crStance . posture .~ Aiming - & crDir -~ twoHandTwistAmount - TwoHandOver -> - return $ cr & crStance . posture .~ Aiming - & crDir -~ twoHandTwistAmount - _ -> return $ cr & crStance . posture .~ Aiming + return $ case astance of + TwoHandUnder -> cr & crDir +~ x + TwoHandOver -> cr & crDir +~ x + _ -> cr + +removeAimPosture :: Creature -> Creature +removeAimPosture = (crStance . posture .~ AtEase) . doAimTwist twoHandTwistAmount twoHandTwistAmount :: Float twoHandTwistAmount = 1.6 * pi - -removeAimPosture :: Creature -> Creature -removeAimPosture cr = cr - & crDir +~ twoHandTwistAmount - & crStance . posture .~ AtEase wasdMovement :: Input -> Camera -> Float -> Creature -> Creature wasdMovement inp cam speed = theMovement . setMvAim @@ -201,10 +170,11 @@ tryClickUse pkeys w = fromMaybe w $ do ltime <- pkeys ^? ix SDL.ButtonLeft rtime <- pkeys ^? ix SDL.ButtonRight guard $ ltime <= rtime - case w ^? cWorld . lWorld . creatures . ix 0 - . crManipulation - . manObject - . imSelectedItem of + case w + ^? cWorld . lWorld . creatures . ix 0 + . crManipulation + . manObject + . imSelectedItem of Just invid -> useItem invid (f ltime) w Nothing -> interactWithCloseObj <$> getSelectedCloseObj w ?? w where diff --git a/src/Dodge/Hotkey.hs b/src/Dodge/Hotkey.hs index 37f25279a..bbc92bfbb 100644 --- a/src/Dodge/Hotkey.hs +++ b/src/Dodge/Hotkey.hs @@ -9,10 +9,8 @@ import NewInt -- it is not obvious to me whether hotkeys should belong to LWorld, CWorld or -- World - assignHotkey :: NewInt ItmInt -> Hotkey -> LWorld -> LWorld -assignHotkey (NInt itid) hk lw = - lw +assignHotkey (NInt itid) hk lw = lw & handleoldposition & hotkeys . at hk ?~ NInt itid & imHotkeys . unNIntMap . at itid ?~ hk diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 4274751b3..908629362 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -28,23 +28,23 @@ heldItemOrient2D itm cr p a = (V2 x y, argV . Q.qToV2 $ q ) where (V3 x y _,q) = heldItemRelativeOrient itm cr (p `v2z` 0, Q.axisAngle (V3 0 0 1) a) -heldItemRelativeOrient :: Item -> Creature -> (Point3, Q.Quaternion Float) -> (Point3, Q.Quaternion Float) +heldItemRelativeOrient + :: Item -> Creature -> (Point3, Q.Quaternion Float) -> (Point3, Q.Quaternion Float) heldItemRelativeOrient itm cr (p,q) | Aiming {} <- _posture (_crStance cr) = (p + aimingWeaponZeroPos cr itm `v2z` shoulderHeight, Q.qID * q) | isTwoHandFlat = - ( V3 (_crRad cr) 0 handD - + rotate3 (twoFlatHRot cr) (transToHandle itm p) + ( V3 (_crRad cr) 0 handD + rotate3 (twoFlatHRot cr) (transToHandle itm p) , Q.axisAngle (V3 0 0 1) (twoFlatHRot cr) * q ) | isOneHand = ( V3 (_crRad cr * 0.7 + handPos) (_crRad cr * negate 0.7) handD - + transToHandle itm p + + transToHandle itm p , Q.qID * q ) | otherwise = - ( V3 (_crRad cr) 0 handD - + rotate3 (strideRot cr + 1.2) (V3 (-8) 0 0 + transToHandle itm p) + ( V3 (_crRad cr) 0 handD + + rotate3 (strideRot cr + 1.2) (V3 (-8) 0 0 + transToHandle itm p) , Q.axisAngle (V3 0 0 1) (strideRot cr + 1.2) * q ) where @@ -74,7 +74,6 @@ aimingWeaponHandlePos _ it = case it ^? itUse . heldAim . aimStance of Just TwoHandFlat -> V2 10 0 Nothing -> 0 - heldItemOffset :: Item -> Creature -> Point3 -> Point3 heldItemOffset itm cr p = fst (heldItemRelativeOrient itm cr (p,Q.qID)) diff --git a/tags b/tags index 101232632..bde3f0570 100644 --- a/tags +++ b/tags @@ -2220,7 +2220,6 @@ _aimMuzzles src/Dodge/Data/Item/Use.hs 128;" f _aimRange src/Dodge/Data/Item/Use.hs 124;" f _aimStance src/Dodge/Data/Item/Use.hs 126;" f _aimTurnSpeed src/Dodge/Data/Item/Use.hs 123;" f -_aimTwist src/Dodge/Data/Creature/Stance.hs 39;" f _aimWeight src/Dodge/Data/Item/Use.hs 122;" f _aimZoom src/Dodge/Data/Item/Use.hs 125;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 21;" f @@ -3389,9 +3388,9 @@ adjustIMZone src/Dodge/Base.hs 81;" f advanceScrollAmount src/Dodge/Update.hs 401;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -aimDelaySweep src/Dodge/Render/Picture.hs 239;" f +aimDelaySweep src/Dodge/Render/Picture.hs 238;" f aimStanceInfo src/Dodge/Item/Info.hs 235;" f -aimTurn src/Dodge/Creature/YourControl.hs 187;" f +aimTurn src/Dodge/Creature/YourControl.hs 161;" f aimingWeaponHandlePos src/Dodge/Item/HeldOffset.hs 69;" f aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 63;" f airlock src/Dodge/Room/Airlock.hs 19;" f @@ -3463,7 +3462,7 @@ armouredCorridor src/Dodge/Room/RoadBlock.hs 20;" f arms src/Dodge/Creature/Picture.hs 75;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f -assignHotkey src/Dodge/Hotkey.hs 13;" f +assignHotkey src/Dodge/Hotkey.hs 12;" f assignPushDoors src/Dodge/LevelGen.hs 42;" f atFstLnkOut src/Dodge/PlacementSpot.hs 211;" f atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 226;" f @@ -4011,7 +4010,7 @@ disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 490;" f disconnectTerminal src/Dodge/Terminal.hs 217;" f displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f -displayFrameTicks src/Dodge/Render/Picture.hs 39;" f +displayFrameTicks src/Dodge/Render/Picture.hs 38;" f displayFreeSlots src/Dodge/DisplayInventory.hs 198;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 173;" f @@ -4026,6 +4025,7 @@ divideLineExact src/Geometry.hs 275;" f divideLineOddNumPoints src/Geometry.hs 260;" f doAfterPlacement src/Dodge/Layout.hs 86;" f doAfterPlacements src/Dodge/Layout.hs 83;" f +doAimTwist src/Dodge/Creature/YourControl.hs 134;" f doAnyEquipmentEffect src/Dodge/Creature/State.hs 189;" f doArcStep src/Dodge/Tesla/Arc.hs 135;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f @@ -4128,7 +4128,7 @@ doublePairSet src/Geometry.hs 165;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 72;" f doubleV2 src/Geometry.hs 168;" f drawARHUD src/Dodge/Creature/State.hs 302;" f -drawAimSweep src/Dodge/Render/Picture.hs 247;" f +drawAimSweep src/Dodge/Render/Picture.hs 246;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f @@ -4140,9 +4140,9 @@ drawButton src/Dodge/Button/Draw.hs 9;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f drawCircCollisionTest src/Dodge/Debug/Picture.hs 111;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f -drawCombFilter src/Dodge/Render/Picture.hs 220;" f +drawCombFilter src/Dodge/Render/Picture.hs 219;" f drawCombineInventory src/Dodge/Render/HUD.hs 179;" f -drawConcurrentMessage src/Dodge/Render/Picture.hs 62;" f +drawConcurrentMessage src/Dodge/Render/Picture.hs 61;" f drawCoord src/Dodge/Debug/Picture.hs 359;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f drawCrInfo src/Dodge/Debug/Picture.hs 380;" f @@ -4154,13 +4154,13 @@ drawCursorAt src/Dodge/Render/List.hs 71;" f drawDDATest src/Dodge/Debug/Picture.hs 286;" f drawDoorPaths src/Dodge/Debug/Picture.hs 247;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 87;" f -drawDrag src/Dodge/Render/Picture.hs 170;" f -drawDragDrop src/Dodge/Render/Picture.hs 181;" f -drawDragPickup src/Dodge/Render/Picture.hs 190;" f -drawDragSelect src/Dodge/Render/Picture.hs 167;" f +drawDrag src/Dodge/Render/Picture.hs 169;" f +drawDragDrop src/Dodge/Render/Picture.hs 180;" f +drawDragPickup src/Dodge/Render/Picture.hs 189;" f +drawDragSelect src/Dodge/Render/Picture.hs 166;" f drawDragSelected src/Dodge/Render/HUD.hs 132;" f drawDragSelecting src/Dodge/Render/HUD.hs 149;" f -drawEmptySet src/Dodge/Render/Picture.hs 117;" f +drawEmptySet src/Dodge/Render/Picture.hs 116;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 10;" f drawEquipment src/Dodge/Creature/Picture.hs 142;" f drawExamineInventory src/Dodge/Render/HUD.hs 195;" f @@ -4169,7 +4169,7 @@ drawFlame src/Dodge/Flame/Draw.hs 7;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 26;" f drawFooterText src/Dodge/Render/MenuScreen.hs 72;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f -drawGapPlus src/Dodge/Render/Picture.hs 230;" f +drawGapPlus src/Dodge/Render/Picture.hs 229;" f drawGib src/Dodge/Prop/Draw.hs 31;" f drawHUD src/Dodge/Render/HUD.hs 48;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 22;" f @@ -4178,7 +4178,7 @@ drawInspectWalls src/Dodge/Debug/Picture.hs 227;" f drawInventory src/Dodge/Render/HUD.hs 55;" f drawItemChildrenConnect src/Dodge/Render/HUD.hs 326;" f drawItemConnections src/Dodge/Render/HUD.hs 316;" f -drawJumpDown src/Dodge/Render/Picture.hs 163;" f +drawJumpDown src/Dodge/Render/Picture.hs 162;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLampCover src/Dodge/Prop/Draw.hs 47;" f drawLaser src/Dodge/Laser/Draw.hs 6;" f @@ -4192,11 +4192,11 @@ drawListYoff src/Dodge/Render/List.hs 92;" f drawMachine src/Dodge/Machine/Draw.hs 17;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f drawMapperInventory src/Dodge/Render/HUD.hs 169;" f -drawMenuClick src/Dodge/Render/Picture.hs 137;" f -drawMenuCursor src/Dodge/Render/Picture.hs 150;" f -drawMenuOrHUD src/Dodge/Render/Picture.hs 57;" f +drawMenuClick src/Dodge/Render/Picture.hs 136;" f +drawMenuCursor src/Dodge/Render/Picture.hs 149;" f +drawMenuOrHUD src/Dodge/Render/Picture.hs 56;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 16;" f -drawMouseCursor src/Dodge/Render/Picture.hs 73;" f +drawMouseCursor src/Dodge/Render/Picture.hs 72;" f drawMouseOver src/Dodge/Render/HUD.hs 103;" f drawMousePosition src/Dodge/Debug/Picture.hs 349;" f drawMovingShape src/Dodge/Prop/Draw.hs 73;" f @@ -4205,18 +4205,18 @@ drawOptions src/Dodge/Render/MenuScreen.hs 36;" f drawPathBetween src/Dodge/Debug/Picture.hs 195;" f drawPathEdge src/Dodge/Debug/Picture.hs 252;" f drawPathing src/Dodge/Debug/Picture.hs 422;" f -drawPlus src/Dodge/Render/Picture.hs 134;" f +drawPlus src/Dodge/Render/Picture.hs 133;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawProp src/Dodge/Prop/Draw.hs 18;" f drawRBOptions src/Dodge/Render/HUD.hs 249;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 14;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 37;" f -drawReturn src/Dodge/Render/Picture.hs 123;" f +drawReturn src/Dodge/Render/Picture.hs 122;" f drawRootCursor src/Dodge/Render/HUD.hs 71;" f drawSSCursor src/Dodge/SelectionSections/Draw.hs 35;" f drawSSMultiCursor src/Dodge/SelectionSections/Draw.hs 46;" f -drawSelect src/Dodge/Render/Picture.hs 209;" f +drawSelect src/Dodge/Render/Picture.hs 208;" f drawSelectionList src/Dodge/Render/List.hs 35;" f drawSelectionListBackground src/Dodge/Render/List.hs 51;" f drawSelectionSections src/Dodge/SelectionSections/Draw.hs 16;" f @@ -4349,7 +4349,7 @@ fireLoudS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 532;" f fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 350;" f firstBreather src/Dodge/Room/Breather.hs 9;" f firstWorldLoad appDodge/Main.hs 78;" f -fixedCoordPictures src/Dodge/Render/Picture.hs 18;" f +fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flDamageInArea src/Dodge/Flame.hs 109;" f flFlicker src/Dodge/Flame.hs 123;" f @@ -4399,7 +4399,7 @@ forceField src/Dodge/Wall/ForceField.hs 7;" f forceFoldable src/StrictHelp.hs 7;" f forceSpine src/StrictHelp.hs 4;" f fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 29;" f -fpsText src/Dodge/Render/Picture.hs 47;" f +fpsText src/Dodge/Render/Picture.hs 46;" f fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 137;" f frag src/Shader/Data.hs 102;" f freeShaderPointers' src/Shader.hs 37;" f @@ -4526,7 +4526,7 @@ halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 37;" f hammerCheck src/Dodge/HeldUse.hs 79;" f handleEvent src/Dodge/Event.hs 27;" f -handleHotkeys src/Dodge/Creature/YourControl.hs 43;" f +handleHotkeys src/Dodge/Creature/YourControl.hs 40;" f handleKeyboardEvent src/Dodge/Event/Input.hs 22;" f handleMouseButtonEvent src/Dodge/Event/Input.hs 63;" f handleMouseMotionEvent src/Dodge/Event/Input.hs 47;" f @@ -4555,7 +4555,7 @@ heldEffect src/Dodge/HeldUse.hs 60;" f heldEffectMuzzles src/Dodge/HeldUse.hs 117;" f heldEffectNoHammerCheck src/Dodge/HeldUse.hs 68;" f heldInfo src/Dodge/Item/Info.hs 84;" f -heldItemOffset src/Dodge/Item/HeldOffset.hs 78;" f +heldItemOffset src/Dodge/Item/HeldOffset.hs 77;" f heldItemOrient2D src/Dodge/Item/HeldOffset.hs 26;" f heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 31;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 220;" f @@ -4575,7 +4575,7 @@ holsterWeapon src/Dodge/Creature/Volition.hs 14;" f homingModule src/Dodge/Item/Scope.hs 48;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 182;" f -hotkeyToScancode src/Dodge/Creature/YourControl.hs 71;" f +hotkeyToScancode src/Dodge/Creature/YourControl.hs 69;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 179;" f humanoidAIList src/Dodge/Humanoid.hs 181;" f iShape src/Dodge/Placement/Instance/LightSource.hs 73;" f @@ -5034,7 +5034,7 @@ mntLight src/Dodge/Placement/Instance/LightSource.hs 158;" f mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 163;" f modTo src/Geometry/Zone.hs 10;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 59;" f -mouseCursorType src/Dodge/Render/Picture.hs 80;" f +mouseCursorType src/Dodge/Render/Picture.hs 79;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f moveBullet src/Dodge/Bullet.hs 187;" f moveCombineSel src/Dodge/Update/Scroll.hs 112;" f @@ -5474,7 +5474,7 @@ reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 446;" f rememberSounds src/Dodge/Creature/Perception.hs 177;" f remoteDetonator src/Dodge/Item/Scope.hs 145;" f remoteScreen src/Dodge/Item/Scope.hs 140;" f -removeAimPosture src/Dodge/Creature/YourControl.hs 173;" f +removeAimPosture src/Dodge/Creature/YourControl.hs 143;" f removeAmmoFromMag src/Dodge/HeldUse.hs 459;" f removeDot src/ShortShow.hs 29;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f @@ -5608,7 +5608,7 @@ scaleMat src/MatrixHelper.hs 59;" f scaleMatrix src/MatrixHelper.hs 56;" f scaleSH src/Shape.hs 268;" f scalp src/Dodge/Creature/Picture.hs 96;" f -scancodeToHotkey src/Dodge/Creature/YourControl.hs 91;" f +scancodeToHotkey src/Dodge/Creature/YourControl.hs 89;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f scorchSPic src/Dodge/Creature/State.hs 118;" f screenBox src/Dodge/Base/Window.hs 53;" f @@ -5662,11 +5662,10 @@ sensorSPic src/Dodge/Machine/Draw.hs 70;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f -setAimPosture src/Dodge/Creature/YourControl.hs 159;" f +setAimPosture src/Dodge/Creature/YourControl.hs 131;" f setChannelPos src/Sound.hs 149;" f setClickWorldPos src/Dodge/Update.hs 100;" f setClusterID src/Dodge/Combine/Graph.hs 115;" f -setCrPosture src/Dodge/Creature/YourControl.hs 197;" f setDepth src/Picture/Base.hs 128;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f setFallback src/Dodge/PlacementSpot.hs 127;" f @@ -5769,7 +5768,7 @@ shootingRange src/Dodge/Room/Room.hs 332;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 9;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 536;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 81;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 80;" f shoulderSH src/Dodge/Creature/Picture.hs 139;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f showAttachItem src/Dodge/Item/Display.hs 88;" f @@ -5799,7 +5798,7 @@ singleLDT src/Dodge/DoubleTree.hs 12;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 19;" f sizeFBOs src/Framebuffer/Update.hs 22;" f -sizeSelf src/Dodge/Creature/Action.hs 205;" f +sizeSelf src/Dodge/Creature/Action.hs 207;" f skwareFadeTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 384;" f slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 506;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 450;" f @@ -5921,7 +5920,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 17;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 29;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 32;" f strictify src/MaybeHelp.hs 37;" f -strideRot src/Dodge/Item/HeldOffset.hs 84;" f +strideRot src/Dodge/Item/HeldOffset.hs 83;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -6011,6 +6010,7 @@ thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 53;" f thingsHit src/Dodge/WorldEvent/ThingsHit.hs 29;" f thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 73;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f +throwItem src/Dodge/Creature/Action.hs 204;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 205;" f tilesToLine src/Shader/AuxAddition.hs 66;" f @@ -6113,7 +6113,7 @@ truncFaces src/Polyhedra/Geodesic.hs 53;" f truncate src/Polyhedra/Geodesic.hs 38;" f trunkDepth src/TreeHelp.hs 161;" f tryAttachItems src/Dodge/Item/Grammar.hs 22;" f -tryClickUse src/Dodge/Creature/YourControl.hs 202;" f +tryClickUse src/Dodge/Creature/YourControl.hs 168;" f tryCombine src/Dodge/Update/Input/InGame.hs 523;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 123;" f tryGetChannel src/Sound.hs 96;" f @@ -6138,7 +6138,8 @@ twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f twists src/Dodge/Creature/Test.hs 103;" f twoFlat src/Dodge/Creature/Test.hs 100;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 93;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 92;" f +twoHandTwistAmount src/Dodge/Creature/YourControl.hs 146;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 406;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -6299,7 +6300,7 @@ useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f useE src/Dodge/Euse.hs 34;" f useGasParams src/Dodge/HeldUse.hs 568;" f -useHotkey src/Dodge/Creature/YourControl.hs 66;" f +useHotkey src/Dodge/Creature/YourControl.hs 64;" f useInventoryPath src/Dodge/HeldUse.hs 811;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 20;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 27;" f @@ -6361,12 +6362,11 @@ wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f wallsFromRooms src/Dodge/Layout.hs 146;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f warningRooms src/Dodge/Room/Warning.hs 27;" f -wasdAim src/Dodge/Creature/YourControl.hs 126;" f +wasdAim src/Dodge/Creature/YourControl.hs 120;" f wasdDir src/Dodge/WASD.hs 17;" f wasdM src/Dodge/WASD.hs 9;" f -wasdMovement src/Dodge/Creature/YourControl.hs 175;" f -wasdTwist src/Dodge/Creature/YourControl.hs 140;" f -wasdWithAiming src/Dodge/Creature/YourControl.hs 115;" f +wasdMovement src/Dodge/Creature/YourControl.hs 149;" f +wasdWithAiming src/Dodge/Creature/YourControl.hs 113;" f watchCombinations src/Dodge/Combine/Combinations.hs 15;" f watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 177;" f weakenMatS src/Dodge/Material/Sound.hs 18;" f @@ -6428,7 +6428,7 @@ yellow src/Color.hs 17;" f you src/Dodge/Base/You.hs 12;" f youDropItem src/Dodge/Creature/Action.hs 190;" f yourAugmentedItem src/Dodge/Render/HUD.hs 235;" f -yourControl src/Dodge/Creature/YourControl.hs 24;" f +yourControl src/Dodge/Creature/YourControl.hs 23;" f yourDefaultSpeed src/Dodge/Default/Creature.hs 129;" f yourDefaultStrideLength src/Dodge/Default/Creature.hs 132;" f yourInfo src/Dodge/Creature/Info.hs 8;" f