diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index 1079e2609..03076841d 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -27,7 +27,7 @@ import ShapePicture -- the position of a weapon handle aimingWeaponHandlePos :: Creature -> Item -> Point2 aimingWeaponHandlePos _ it = case it ^? itUse . heldAim . aimStance of - Just TwoHandUnder -> 0 + Just TwoHandUnder -> V2 (-2) 0 Just TwoHandOver -> V2 (-7) 0 Just OneHand -> V2 10 (-2) Just TwoHandFlat -> V2 10 0 diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index 71d6cfc14..b7bfe8bfd 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -23,38 +23,31 @@ import Dodge.SelectUse import qualified IntMapHelp as IM useRootItem :: Int -> World -> World -useRootItem crid w = fromMaybe w $ do +useRootItem crid w = (worldEventFlags . at InventoryChange ?~ ()) . fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid itRef <- cr ^? crManipulation . manObject . imRootSelectedItem - it <- invRootTrees (_crInv cr) ^? ix itRef - return $ - itemUseEffect' cr it w - & worldEventFlags . at InventoryChange ?~ () + itmtree <- invRootTrees (_crInv cr) ^? ix itRef + let itm = itmtree ^. ldtValue . cItem + case itmtree ^. ldtValue . cItemFunction of + WeaponPlatformSF -> + return $ + heldEffect (bimap _iatType _cItem itmtree) cr w + & pointerToItem itm . itUse . heldHammer .~ HammerDown + EquipmentPlatformSF -> do + guard (_crHammerPosition cr == HammerUp) + invid <- itm ^? itLocation . ilInvID + return $ toggleEquipmentAt invid cr w + _ -> Nothing -itemUseEffect' :: Creature -> LabelDoubleTree ItemLink ComposedItem -> World -> World -itemUseEffect' cr itmtree w = case itmtree ^. ldtValue . cItemFunction of - WeaponPlatformSF -> - heldEffect (bimap _iatType _cItem itmtree) cr w - & pointerToItem itm . itUse . heldHammer .~ HammerDown - EquipmentPlatformSF -> doequipmentchange - _ -> w - where - -- UseHotkey{} -> doequipmentchange - -- UseEquip{} -> doequipmentchange - -- (UseConsume eff) -> useC eff (_ldtValue itmtree) cr w - -- UseCraft{} -> w - -- UseAttach{} -> selectUse itmtree cr w - -- UseAmmoMag{} -> w - -- UseScope{} -> w - -- UseBulletMod{} -> w - - itm :: Item - itm = itmtree ^. ldtValue . cItem - - doequipmentchange = fromMaybe w $ do - guard (_crHammerPosition cr == HammerUp) - invid <- itm ^? itLocation . ilInvID - return $ toggleEquipmentAt invid cr w +-- where +-- UseHotkey{} -> doequipmentchange +-- UseEquip{} -> doequipmentchange +-- (UseConsume eff) -> useC eff (_ldtValue itmtree) cr w +-- UseCraft{} -> w +-- UseAttach{} -> selectUse itmtree cr w +-- UseAmmoMag{} -> w +-- UseScope{} -> w +-- UseBulletMod{} -> w itemUseEffect :: Creature -> LabelDoubleTree ComposeLinkType Item -> World -> World itemUseEffect cr itmtree w = case itmtree ^. ldtValue . itUse of diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index efe81af2a..84281e16c 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -4,8 +4,6 @@ module Dodge.Creature.State ( ) where import Control.Monad -import Dodge.Targeting.Draw -import Dodge.Data.DoubleTree import qualified Data.Map.Strict as M import Data.Maybe import Data.Monoid @@ -18,6 +16,7 @@ import Dodge.Creature.State.WalkCycle import Dodge.Creature.Test import Dodge.Damage import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Dodge.Data.World import Dodge.DoubleTree import Dodge.Euse @@ -27,6 +26,7 @@ import Dodge.Item.Grammar import Dodge.Item.HeldOffset import Dodge.Prop.Gib import Dodge.SoundLogic +import Dodge.Targeting.Draw import Dodge.Zoning.Creature import FoldableHelp import Geometry @@ -74,13 +74,15 @@ crUpdate f = checkDeath :: Creature -> World -> World checkDeath cr w - | _crHP cr > 0 = w - & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] - | otherwise = w - & dropByState cr -- the order of - & removecr -- these is important - & stopSoundFrom (CrWeaponSound (_crID cr) 0) - & corpseOrGib cr + | _crHP cr > 0 = + w + & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] + | otherwise = + w + & dropByState cr -- the order of + & removecr -- these is important + & stopSoundFrom (CrWeaponSound (_crID cr) 0) + & corpseOrGib cr where removecr | _crID cr == 0 = @@ -166,8 +168,11 @@ invSideEff cr = alaf Endo foldMap f (_crInv cr) . updateHeldRootItem cr -- a loop going over all root inventory items invRootItemEffs :: Creature -> World -> World -invRootItemEffs cr = appEndo $ foldMap (reduceLocLDT (Endo . invItemLocUpdate) . LocLDT TopLDT) - (invLDT (_crInv cr)) +invRootItemEffs cr = + appEndo $ + foldMap + (reduceLocLDT (Endo . invItemLocUpdate) . LocLDT TopLDT) + (invLDT (_crInv cr)) invItemLocUpdate :: LocationLDT ItemLink PartiallyComposedItem -> World -> World invItemLocUpdate loc w = case itm ^. itType of @@ -176,24 +181,52 @@ invItemLocUpdate loc w = case itm ^. itType of x <- itm ^? itUse . uaParams . apInt if x < 100 then do - bat <- loc ^? locLDT . ldtLeft . ix 0 . _2 . ldtValue . _1 + bat <- loc ^? locLDT . ldtLeft . ix 0 . _2 . ldtValue . _1 j <- bat ^? itLocation . ilInvID y <- bat ^? itUse . amagLoadStatus . iaLoaded guard $ y > 0 - return $ w & cWorld . lWorld . creatures - . ix 0 . crInv . ix i . itUse . uaParams . apInt +~ 1 - & cWorld . lWorld . creatures - . ix 0 . crInv . ix j . itUse . amagLoadStatus . iaLoaded -~ 1 + return $ + w + & cWorld . lWorld . creatures + . ix 0 + . crInv + . ix i + . itUse + . uaParams + . apInt + +~ 1 + & cWorld . lWorld . creatures + . ix 0 + . crInv + . ix j + . itUse + . amagLoadStatus + . iaLoaded + -~ 1 else do mag <- loc ^? locLdtContext . cldtParent . _1 j <- mag ^? itLocation . ilInvID y <- mag ^? itUse . amagLoadStatus . iaLoaded ymax <- mag ^? itUse . amagLoadStatus . iaMax guard $ y < ymax - return $ w & cWorld . lWorld . creatures - . ix 0 . crInv . ix i . itUse . uaParams . apInt .~ 0 - & cWorld . lWorld . creatures - . ix 0 . crInv . ix j . itUse . amagLoadStatus . iaLoaded +~ 1 + return $ + w + & cWorld . lWorld . creatures + . ix 0 + . crInv + . ix i + . itUse + . uaParams + . apInt + .~ 0 + & cWorld . lWorld . creatures + . ix 0 + . crInv + . ix j + . itUse + . amagLoadStatus + . iaLoaded + +~ 1 _ -> w where itm = loc ^. locLDT . ldtValue . _1 @@ -220,7 +253,8 @@ chainLinkOrientation :: ItemLink -> ComposedItem -> (Point3, Q.Quaternion Float) -chainLinkOrientation mo (CItem par _) (ILink lt f) (CItem child _) = (p + Q.rotate q p1, q * q1) +chainLinkOrientation mo (CItem par _) (ILink lt f) (CItem child _) = + (p + Q.rotate q p1, q * q1) where (p, q) = mo (p1, q1) = f par lt child @@ -246,25 +280,36 @@ drawAugmentedHUD (LocLDT con _) w = fromMaybe w $ do itm <- con ^? cldtParent . cItem return $ w & cWorld . lWorld . flares <>~ drawTargeting itm w -shineTargetLaser :: Creature -> LabelDoubleTree ItemLink ComposedItem -> (Point3, Q.Quaternion Float) - -> World -> World -shineTargetLaser cr itmtree (p,q) w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do +shineTargetLaser :: + Creature -> + LabelDoubleTree ItemLink ComposedItem -> + (Point3, Q.Quaternion Float) -> + World -> + World +shineTargetLaser cr itmtree (p, q) w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do guard (crIsAiming cr) (_, mag) <- find (isammolink . _iatType . fst) (itmtree ^. ldtLeft) i <- mag ^? ldtValue . cItem . itUse . amagLoadStatus . iaLoaded guard $ i >= x maginvid <- mag ^? ldtValue . cItem . itLocation . ilInvID - return $ w - & worldEventFlags . at InventoryChange ?~ () - & cWorld . lWorld . creatures . ix (_crID cr) - . crInv . ix maginvid . itUse . amagLoadStatus . iaLoaded -~ x - & cWorld . lWorld . lasers .:~ LaserStart - { _lpPhaseV = 1 - , _lpDir = _crDir cr + argV (Q.qToV2 q) - , _lpPos = pos - , _lpColor = col - , _lpType = TargetingLaser (_itID itm) - } + return $ + w + & worldEventFlags . at InventoryChange ?~ () + & cWorld . lWorld . creatures . ix (_crID cr) + . crInv + . ix maginvid + . itUse + . amagLoadStatus + . iaLoaded + -~ x + & cWorld . lWorld . lasers + .:~ LaserStart + { _lpPhaseV = 1 + , _lpDir = _crDir cr + argV (Q.qToV2 q) + , _lpPos = pos + , _lpColor = col + , _lpType = TargetingLaser (_itID itm) + } where x = 1 isammolink AmmoInLink{} = True @@ -272,7 +317,6 @@ shineTargetLaser cr itmtree (p,q) w = fromMaybe (w & pointittarg . itTgPos .~ No pos = _crPos cr + xyV3 (rotate3 cdir (p + V3 5 0 0)) cdir = _crDir cr itm = itmtree ^. ldtValue . cItem - --pointItUse = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itUse pointittarg = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itTargeting cid = _crID cr invid = _ilInvID $ _itLocation itm @@ -302,21 +346,28 @@ shineTorch cr itmtree (p, q) = fromMaybe id $ do -- does this need to be updated if it is not attached to the used root item? updateItemTargeting :: TargetingType -> Creature -> Item -> World -> World updateItemTargeting tt cr itm w = case tt of - _ | not isattached -> w - & pointittarg .itTgPos .~ Nothing - & pointittarg .itTgActive .~ False - TargetRBPress | rbpressed -> w - & pointittarg .itTgPos %~ maybe (Just $ mouseWorldPos (w ^. input) (w ^. wCam)) Just - & pointittarg .itTgActive .~ True - TargetRBPress -> w - & pointittarg .itTgPos .~ Nothing - & pointittarg .itTgActive .~ False + _ + | not isattached -> + w + & pointittarg . itTgPos .~ Nothing + & pointittarg . itTgActive .~ False + TargetRBPress + | rbpressed -> + w + & pointittarg . itTgPos %~ maybe (Just $ mouseWorldPos (w ^. input) (w ^. wCam)) Just + & pointittarg . itTgActive .~ True + TargetRBPress -> + w + & pointittarg . itTgPos .~ Nothing + & pointittarg . itTgActive .~ False TargetRBCreature -> w & pointittarg %~ setRBCreatureTargeting cr w - TargetCursor -> w - & pointittarg .~ ItTargeting - (Just (mouseWorldPos (w ^. input) (w ^. wCam))) - Nothing - True + TargetCursor -> + w + & pointittarg + .~ ItTargeting + (Just (mouseWorldPos (w ^. input) (w ^. wCam))) + Nothing + True where pointittarg = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itTargeting cid = _crID cr @@ -326,10 +377,10 @@ updateItemTargeting tt cr itm w = case tt of setRBCreatureTargeting :: Creature -> World -> ItemTargeting -> ItemTargeting setRBCreatureTargeting cr w ituse - | SDL.ButtonRight `M.member` _mouseButtons (_input w) && isJust (ituse ^?itTgID . _Just) + | SDL.ButtonRight `M.member` _mouseButtons (_input w) && isJust (ituse ^? itTgID . _Just) && canSeeTarget = - ituse & updatePos &itTgActive .~ True - | otherwise = ituse &itTgID .~ fmap _crID newtarg & updatePos &itTgActive .~ False + ituse & updatePos & itTgActive .~ True + | otherwise = ituse & itTgID .~ fmap _crID newtarg & updatePos & itTgActive .~ False where newtarg = safeMinimumOn (dist mwp . _crPos) @@ -341,7 +392,7 @@ setRBCreatureTargeting cr w ituse posFromMaybeID Nothing = Nothing posFromMaybeID (Just i) = w ^? cWorld . lWorld . creatures . ix i . crPos canSeeTarget = fromMaybe False $ do - cid <- ituse ^?itTgID . _Just + cid <- ituse ^? itTgID . _Just cpos <- w ^? cWorld . lWorld . creatures . ix cid . crPos Just $ hasLOS cpos (_crPos cr) w diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index db6ea5f24..b83a65de9 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -6,6 +6,7 @@ module Dodge.HeldUse ( mcUseHeld, ) where +import Dodge.Item.HeldOffset import Color import Control.Monad import Data.Maybe @@ -391,7 +392,10 @@ makeBullet thebullet itm cr mz w = & buDrag *~ drag ) where - bulpos = _crPos cr + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm + V2 0 offset) +-- bulpos = _crPos cr +-- + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm + V2 0 offset) + (moff,mrot) = heldItemOrient2D itm cr (_mzPos mz + V2 0 offset) (_mzRot mz) + bulpos = _crPos cr + rotateV (_crDir cr) moff (a, g'') = randomR (- inacc, inacc) $ _randGen w inacc = _mzInaccuracy mz (drag, g') = case _rifling (_heldParams $ _itUse itm) of @@ -400,7 +404,7 @@ makeBullet thebullet itm cr mz w = (muzvel, g) = case _muzVel $ _heldParams $ _itUse itm of ConstFloat x -> (x, g') UniRandFloat x y -> randomR (x, y) g' - dir = _crDir cr + _mzRot mz + a + dir = _crDir cr + mrot + a offset = case itm ^? itUse . heldParams . randomOffset of Just x | x /= 0 -> fst . randomR (- x, x) $ _randGen w _ -> 0 diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 296fd172a..8ce404cde 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -3,6 +3,7 @@ module Dodge.Item.HeldOffset ( twoFlatHRot, heldItemOffset, heldItemRelativeOrient, + heldItemOrient2D, ) where import qualified Quaternion as Q @@ -23,6 +24,11 @@ transToHandle itm = fromMaybe id $ do V2 x y <- itm ^? itUse . heldAim . aimHandlePos return (-.-.- V3 x y 0) +heldItemOrient2D :: Item -> Creature -> Point2 -> Float -> (Point2, Float) +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 itm cr (p,q) | _posture (_crStance cr) == Aiming = diff --git a/tags b/tags index 6b9e7fffd..dd0c77df0 100644 --- a/tags +++ b/tags @@ -3344,7 +3344,7 @@ applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f applyInvLock src/Dodge/HeldUse.hs 74;" f applyMagnetsToBul src/Dodge/Bullet.hs 46;" f applyNoDamage src/Dodge/Creature/Damage.hs 11;" f -applyPastDamages src/Dodge/Creature/State.hs 130;" f +applyPastDamages src/Dodge/Creature/State.hs 132;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 57;" f applyPosition src/Sound.hs 110;" f applyRecoil src/Dodge/HeldUse.hs 93;" f @@ -3528,7 +3528,7 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 289;" f centroid src/Geometry/Polygon.hs 130;" f centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f -chainLinkOrientation src/Dodge/Creature/State.hs 189;" f +chainLinkOrientation src/Dodge/Creature/State.hs 250;" f chainPairs src/Geometry.hs 363;" f changeSwapOther src/Dodge/Inventory.hs 150;" f changeSwapSel src/Dodge/Inventory.hs 142;" f @@ -3662,7 +3662,7 @@ copyItemToFloor src/Dodge/FloorItem.hs 18;" f copyItemToFloorID src/Dodge/FloorItem.hs 22;" f corDoor src/Dodge/Room/Room.hs 376;" f cornerList src/Preload/Render.hs 195;" f -corpseOrGib src/Dodge/Creature/State.hs 92;" f +corpseOrGib src/Dodge/Creature/State.hs 94;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 134;" f corridorN src/Dodge/Room/Corridor.hs 52;" f @@ -3710,7 +3710,7 @@ createItemYou src/Dodge/Inventory/Add.hs 94;" f createLightMap src/Render.hs 26;" f createNewArc src/Dodge/Tesla/Arc.hs 76;" f createPathGrid src/Dodge/Room/Path.hs 21;" f -createProjectile src/Dodge/HeldUse.hs 500;" f +createProjectile src/Dodge/HeldUse.hs 503;" f createShell src/Dodge/Projectile/Create.hs 19;" f createShieldWall src/Dodge/Euse.hs 133;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 117;" f @@ -3913,7 +3913,7 @@ detV src/Geometry/Vector.hs 93;" f detectorColor src/Dodge/Item/Draw/SPic.hs 391;" f detectorEffect src/Dodge/Item/Weapon/Radar.hs 20;" f detectorInfo src/Dodge/Item/Info.hs 191;" f -determineProjectileTracking src/Dodge/HeldUse.hs 489;" f +determineProjectileTracking src/Dodge/HeldUse.hs 492;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 53;" f diffAngles src/Geometry.hs 196;" f @@ -3958,7 +3958,7 @@ doCrImp src/Dodge/CreatureEffect.hs 28;" f doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f -doDamage src/Dodge/Creature/State.hs 124;" f +doDamage src/Dodge/Creature/State.hs 126;" f doDamagesFL src/Dodge/Flame.hs 57;" f doDeathToggle src/Dodge/WorldEffect.hs 96;" f doDeathTriggers src/Dodge/WorldEffect.hs 91;" f @@ -3967,7 +3967,7 @@ doDrag src/Dodge/Update/Input/InGame.hs 98;" f doDrawing src/Dodge/Render.hs 35;" f doDrawing' src/Dodge/Render.hs 46;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 445;" f +doGenFloat src/Dodge/HeldUse.hs 448;" f doInPlacements src/Dodge/Layout.hs 92;" f doIndividualPlacements src/Dodge/Layout.hs 117;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 26;" f @@ -4032,7 +4032,7 @@ doublePairSet src/Geometry.hs 153;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 72;" f doubleV2 src/Geometry.hs 156;" f drawAllShadows src/Dodge/Shadows.hs 5;" f -drawAugmentedHUD src/Dodge/Creature/State.hs 216;" f +drawAugmentedHUD src/Dodge/Creature/State.hs 278;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 13;" f @@ -4152,7 +4152,7 @@ drawWlIDs src/Dodge/Debug/Picture.hs 329;" f drawZoneCol src/Dodge/Debug/Picture.hs 117;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 249;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f -dropByState src/Dodge/Creature/State.hs 118;" f +dropByState src/Dodge/Creature/State.hs 120;" f dropExcept src/Dodge/Creature/Action.hs 171;" f dropItem src/Dodge/Creature/Action.hs 177;" f drumMag src/Dodge/Item/Ammo.hs 48;" f @@ -4191,7 +4191,7 @@ equipPosition src/Dodge/Item/Draw.hs 30;" f equipSiteInfo src/Dodge/Item/Info.hs 221;" f equipSiteToPositions src/Dodge/Inventory/RBList.hs 77;" f equipSpeed src/Dodge/Creature/Impulse/Movement.hs 99;" f -equipmentEffects src/Dodge/Creature/State.hs 157;" f +equipmentEffects src/Dodge/Creature/State.hs 159;" f equipmentStrValue src/Dodge/Creature/Statistics.hs 22;" f errorAngleVV src/Geometry.hs 62;" f errorClosestPointOnLine src/Geometry.hs 74;" f @@ -4321,7 +4321,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 158;" f gameplayMenu src/Dodge/Menu.hs 131;" f gameplayMenuOptions src/Dodge/Menu.hs 134;" f -gasCreate src/Dodge/HeldUse.hs 442;" f +gasCreate src/Dodge/HeldUse.hs 445;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 22;" f generateGraphs src/Dodge/LevelGen.hs 39;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f @@ -4444,8 +4444,9 @@ heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f heldEffect src/Dodge/HeldUse.hs 34;" f heldEffectMuzzles src/Dodge/HeldUse.hs 44;" f heldInfo src/Dodge/Item/Info.hs 49;" f -heldItemOffset src/Dodge/Item/HeldOffset.hs 58;" f -heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 26;" f +heldItemOffset src/Dodge/Item/HeldOffset.hs 64;" f +heldItemOrient2D src/Dodge/Item/HeldOffset.hs 27;" f +heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 32;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 173;" f heldPositionInfo src/Dodge/Item/Info.hs 208;" f helpCommand src/Dodge/Terminal.hs 66;" f @@ -4514,7 +4515,7 @@ insertWall src/Dodge/Placement/PlaceSpot/Block.hs 122;" f insertWallInZones src/Dodge/Wall/Zone.hs 20;" f insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 117;" f insertWithNewKeys src/IntMapHelp.hs 70;" f -internalCreatureUpdate src/Dodge/Creature/State.hs 108;" f +internalCreatureUpdate src/Dodge/Creature/State.hs 110;" f interpWith src/Dodge/Creature/Boid.hs 10;" f intersectCircSeg src/Geometry/Intersect.hs 303;" f intersectCircSegFirst src/Geometry/Intersect.hs 314;" f @@ -4539,13 +4540,14 @@ invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 219;" f invHead src/Dodge/Render/HUD.hs 392;" f +invItemLocUpdate src/Dodge/Creature/State.hs 177;" f invLDT src/Dodge/Item/Grammar.hs 185;" f -invRootItemEffs src/Dodge/Creature/State.hs 168;" f +invRootItemEffs src/Dodge/Creature/State.hs 170;" f invRootMap src/Dodge/Item/Grammar.hs 194;" f invRootTrees src/Dodge/Item/Grammar.hs 224;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 22;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f -invSideEff src/Dodge/Creature/State.hs 162;" f +invSideEff src/Dodge/Creature/State.hs 164;" f invSize src/Dodge/Inventory/CheckSlots.hs 31;" f invTrees src/Dodge/Item/Grammar.hs 212;" f invTrees' src/Dodge/Item/Grammar.hs 216;" f @@ -4565,7 +4567,7 @@ isAnimate src/Dodge/Creature/Test.hs 136;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 90;" f isElectrical src/Dodge/Data/Damage.hs 42;" f -isFrictionless src/Dodge/Creature/State.hs 348;" f +isFrictionless src/Dodge/Creature/State.hs 427;" f isGas src/Dodge/Euse.hs 63;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 169;" f isInLnk src/Dodge/PlacementSpot.hs 160;" f @@ -4616,9 +4618,8 @@ itemString src/Dodge/Item/Display.hs 42;" f itemToBreakLists src/Dodge/Item/Grammar.hs 53;" f itemToFunction src/Dodge/Item/Grammar.hs 87;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 22;" f -itemUpdate src/Dodge/Creature/State.hs 320;" f -itemUseEffect src/Dodge/Creature/Impulse/UseItem.hs 59;" f -itemUseEffect' src/Dodge/Creature/Impulse/UseItem.hs 34;" f +itemUpdate src/Dodge/Creature/State.hs 399;" f +itemUseEffect src/Dodge/Creature/Impulse/UseItem.hs 52;" f iterateUntil src/MonadHelp.hs 23;" f iterateWhile src/MonadHelp.hs 30;" f itmBaseInfo src/Dodge/Item/Info.hs 23;" f @@ -4855,10 +4856,10 @@ mcProximitySensorUpdate src/Dodge/Machine/Update.hs 124;" f mcSPic src/Dodge/Render/ShapePicture.hs 131;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 87;" f mcSensorUpdate src/Dodge/Machine/Update.hs 119;" f -mcShootLaser src/Dodge/HeldUse.hs 469;" f +mcShootLaser src/Dodge/HeldUse.hs 472;" f mcTriggerVal src/Dodge/Machine/Update.hs 93;" f mcTypeUpdate src/Dodge/Machine/Update.hs 27;" f -mcUseHeld src/Dodge/HeldUse.hs 408;" f +mcUseHeld src/Dodge/HeldUse.hs 411;" f mcUseItem src/Dodge/Machine/Update.hs 79;" f medkit src/Dodge/Item/Consumable.hs 8;" f megaBattery src/Dodge/Item/Ammo.hs 84;" f @@ -5160,7 +5161,7 @@ pointerToItemLocation src/Dodge/Item/Location.hs 25;" f pointerYourRootItem src/Dodge/Item/Location.hs 42;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 36;" f pointsToPoly src/Geometry/ConvexPoly.hs 39;" f -poisonSPic src/Dodge/Creature/State.hs 105;" f +poisonSPic src/Dodge/Creature/State.hs 107;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 516;" f pokeArrayOff src/Shader/Poke.hs 527;" f @@ -5493,7 +5494,7 @@ scaleSH src/Shape.hs 267;" f scalp src/Dodge/Creature/Picture.hs 94;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 69;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/State.hs 102;" f +scorchSPic src/Dodge/Creature/State.hs 104;" f screenBox src/Dodge/Base/Window.hs 53;" f screenPolygon src/Dodge/Base/Window.hs 17;" f screenPolygonBord src/Dodge/Base/Window.hs 27;" f @@ -5569,7 +5570,7 @@ setOldPos src/Dodge/Update.hs 462;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 299;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 378;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 316;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 85;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -5636,15 +5637,15 @@ shiftRoomBy src/Dodge/Room/Link.hs 37;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f -shineTargetLaser src/Dodge/Creature/State.hs 221;" f -shineTorch src/Dodge/Creature/State.hs 253;" f +shineTargetLaser src/Dodge/Creature/State.hs 283;" f +shineTorch src/Dodge/Creature/State.hs 325;" f shootBullet src/Dodge/HeldUse.hs 370;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootL src/Dodge/Item/Weapon/TriggerType.hs 165;" f shootLaser src/Dodge/HeldUse.hs 283;" f shootOutPassage src/Dodge/Room/RezBox.hs 74;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 478;" f +shootTeslaArc src/Dodge/HeldUse.hs 481;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f shootTractorBeam src/Dodge/HeldUse.hs 262;" f shootersRoom src/Dodge/Room/Room.hs 315;" f @@ -5654,7 +5655,7 @@ shootingRange src/Dodge/Room/Room.hs 332;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 10;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 61;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 67;" f shoulderSH src/Dodge/Creature/Picture.hs 137;" f shoulderSP src/Dodge/Creature/HandPos.hs 196;" f showAttachItem src/Dodge/Item/Display.hs 61;" f @@ -5801,7 +5802,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 19;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 37;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 32;" f strictify src/MaybeHelp.hs 37;" f -strideRot src/Dodge/Item/HeldOffset.hs 64;" f +strideRot src/Dodge/Item/HeldOffset.hs 70;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -5914,7 +5915,7 @@ toV3 src/Geometry/Data.hs 38;" f toV4 src/Geometry/Data.hs 40;" f toggleCombineInv src/Dodge/DisplayInventory.hs 35;" f toggleCommand src/Dodge/Terminal.hs 196;" f -toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 79;" f +toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 72;" f toggleJust src/MaybeHelp.hs 41;" f toggleMap src/Dodge/Update/Input/InGame.hs 547;" f toggleTweakInv src/Dodge/Update/Input/InGame.hs 560;" f @@ -5939,7 +5940,7 @@ tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 124;" f transMat src/MatrixHelper.hs 73;" f -transToHandle src/Dodge/Item/HeldOffset.hs 21;" f +transToHandle src/Dodge/Item/HeldOffset.hs 22;" f translate src/Picture/Base.hs 116;" f translate3 src/Picture/Base.hs 120;" f translateFloatingCamera src/Dodge/Update/Camera.hs 47;" f @@ -6005,13 +6006,13 @@ trySiphonFuel src/Dodge/Euse.hs 45;" f trySpinByCID src/Dodge/Projectile/Update.hs 95;" f turnTo src/Dodge/Movement/Turn.hs 4;" f turnToAmount src/Dodge/Movement/Turn.hs 15;" f -turretItemOffset src/Dodge/Item/HeldOffset.hs 16;" f +turretItemOffset src/Dodge/Item/HeldOffset.hs 17;" f tweenAngles src/Geometry/Vector.hs 184;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f twists src/Dodge/Creature/Test.hs 101;" f twoFlat src/Dodge/Creature/Test.hs 98;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 73;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 79;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 400;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 438;" f @@ -6036,8 +6037,8 @@ upHammer src/Dodge/Default.hs 75;" f upProjectile src/Dodge/Projectile/Update.hs 26;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla/Arc.hs 86;" f -updateAttachedItems src/Dodge/Creature/State.hs 179;" f -updateAutoRecharge src/Dodge/Creature/State.hs 331;" f +updateAttachedItems src/Dodge/Creature/State.hs 240;" f +updateAutoRecharge src/Dodge/Creature/State.hs 410;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 455;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f @@ -6071,17 +6072,17 @@ updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 346;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 339;" f updateGusts src/Dodge/Update.hs 704;" f -updateHeldRootItem src/Dodge/Creature/State.hs 173;" f +updateHeldRootItem src/Dodge/Creature/State.hs 234;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f updateIMl src/Dodge/Update.hs 498;" f updateIMl' src/Dodge/Update.hs 503;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 399;" f updateInstantBullets src/Dodge/Update.hs 642;" f -updateInv src/Dodge/Creature/State.hs 152;" f +updateInv src/Dodge/Creature/State.hs 154;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 89;" f -updateItemTargeting src/Dodge/Creature/State.hs 275;" f -updateItemWithOrientation src/Dodge/Creature/State.hs 200;" f +updateItemTargeting src/Dodge/Creature/State.hs 347;" f +updateItemWithOrientation src/Dodge/Creature/State.hs 262;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 393;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 381;" f updateLampoid src/Dodge/Lampoid.hs 12;" f @@ -6097,7 +6098,7 @@ updateMouseContextGame src/Dodge/Update.hs 315;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 87;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 79;" f updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 142;" f -updateMovement src/Dodge/Creature/State.hs 338;" f +updateMovement src/Dodge/Creature/State.hs 417;" f updateObjCatMaybes src/Dodge/Update.hs 520;" f updateObjMapMaybe src/Dodge/Update.hs 513;" f updatePastWorlds src/Dodge/Update.hs 415;" f @@ -6171,12 +6172,12 @@ useBulletPayload src/Dodge/Bullet.hs 105;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f useE src/Dodge/Euse.hs 23;" f -useEquipment src/Dodge/Creature/State.hs 146;" f -useGasParams src/Dodge/HeldUse.hs 419;" f +useEquipment src/Dodge/Creature/State.hs 148;" f +useGasParams src/Dodge/HeldUse.hs 422;" f useHotKey src/Dodge/Creature/YourControl.hs 48;" f -useItemHotkey src/Dodge/Creature/Impulse/UseItem.hs 150;" f -useItemLeftClick src/Dodge/Creature/Impulse/UseItem.hs 124;" f -useItemLeftClick' src/Dodge/Creature/Impulse/UseItem.hs 137;" f +useItemHotkey src/Dodge/Creature/Impulse/UseItem.hs 143;" f +useItemLeftClick src/Dodge/Creature/Impulse/UseItem.hs 117;" f +useItemLeftClick' src/Dodge/Creature/Impulse/UseItem.hs 130;" f useL src/Dodge/Luse.hs 11;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f useLoadedAmmo src/Dodge/HeldUse.hs 214;" f @@ -6191,7 +6192,7 @@ useStopWatch src/Dodge/Luse.hs 21;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 127;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f -useUpdate src/Dodge/Creature/State.hs 323;" f +useUpdate src/Dodge/Creature/State.hs 402;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 196;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 203;" f v2z src/Geometry/Vector3D.hs 93;" f