From 5ddfc83f0942203c09900831f084d50e14e6a2a8 Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 5 Jul 2025 11:50:25 +0100 Subject: [PATCH] Start refactoring hand/item handle orientation --- src/Dodge/HeldUse.hs | 51 +++++++++-------- src/Dodge/Item/HeldOffset.hs | 23 ++++++++ src/Dodge/Item/Info.hs | 6 +- tags | 107 ++++++++++++++++++----------------- 4 files changed, 108 insertions(+), 79 deletions(-) diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index a9c286704..4c54bada8 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -128,7 +128,7 @@ heldEffectMuzzles :: LocationLDT ItemLink OItem -> Creature -> World -> World heldEffectMuzzles loc cr w = setusetime . doHeldUseEffect t cr . uncurry (applyCME (_ldtValue t ^. _1) cr) - . foldl' (useLoadedAmmo t cr) (False, w) + . foldl' (useLoadedAmmo loc cr) (False, w) $ loadedmuzzles where t = loc ^. locLDT @@ -680,8 +680,8 @@ loadMuzzle t@(LDT _ l _) mz = fromMaybe (t, Nothing) $ do , Just (mz, usedammo, mag) ) -makeMuzzleFlare :: Muzzle -> LDTree ItemLink OItem -> Creature -> World -> World -makeMuzzleFlare mz itmtree cr = case mz ^. mzFlareType of +makeMuzzleFlare :: Muzzle -> LocationLDT ItemLink OItem -> Creature -> World -> World +makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of NoFlare -> id BasicFlare -> basicMuzFlare pos dir NoLightFlare -> muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir @@ -690,12 +690,13 @@ makeMuzzleFlare mz itmtree cr = case mz ^. mzFlareType of . muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir HeavySmokeFlare -> basicMuzFlare pos dir LasGunFlare -> - flareCircleAt (getLaserColor $ fmap (^. _1) itmtree) 0.8 (pos `v2z` 20) + flareCircleAt (getLaserColor loc) 0.8 (pos `v2z` 20) . ( cWorld . lWorld . lights - .:~ LSParam (pos `v2z` 10) 100 (xyzV4 $ getLaserColor $ fmap (^. _1) itmtree) + .:~ LSParam (pos `v2z` 10) 100 (xyzV4 $ getLaserColor loc) ) TeslaGunFlare -> cWorld . lWorld . lights .:~ LSParam (pos `v2z` 10) 100 (V3 0 0 1) where + itmtree = loc ^. locLDT itm = itmtree ^. ldtValue (moff, mrot) = heldItemOrient2D' itm cr (_mzPos mz) (_mzRot mz) pos = _crPos cr + rotateV (_crDir cr) moff @@ -735,7 +736,7 @@ getLaserPhaseV = const 1 getLaserDamage :: LDTree ItemLink Item -> LaserType getLaserDamage = const (DamageLaser 11) -getLaserColor :: LDTree ItemLink Item -> Color +getLaserColor :: LocationLDT ItemLink OItem -> Color getLaserColor = const yellow basicMuzFlare :: Point2 -> Float -> World -> World @@ -750,19 +751,19 @@ isAmmoIntLink i (AmmoInLink j _) = i == j isAmmoIntLink _ _ = False useLoadedAmmo :: - LDTree ItemLink OItem -> + LocationLDT ItemLink OItem -> Creature -> (Bool, World) -> Maybe (Muzzle, Int, LDTree ItemLink OItem) -> (Bool, World) useLoadedAmmo _ _ (cme, w) Nothing = (cme, w) -useLoadedAmmo itmtree cr (_, w) (Just (mz, x, magtree)) = (,) True $ - removeAmmoFromMag x mid cr . makeMuzzleFlare mz itmtree cr $ case _mzEffect mz of - MuzzleShootBullet -> shootBullets itmtree cr (mz, x, magtree) w - MuzzleLaser -> creatureShootLaser itmtree cr mz w +useLoadedAmmo loc cr (_, w) (Just (mz, x, magtree)) = (,) True $ + removeAmmoFromMag x mid cr . makeMuzzleFlare mz loc cr $ case _mzEffect mz of + MuzzleShootBullet -> shootBullets loc cr (mz, x, magtree) w + MuzzleLaser -> creatureShootLaser loc cr mz w MuzzleTesla -> shootTeslaArc itm cr mz w MuzzleTractor -> shootTractorBeam cr w - MuzzleRLauncher -> createProjectileR itmtree magtree mz cr w + MuzzleRLauncher -> createProjectileR loc magtree mz cr w MuzzleGLauncher -> createProjectile (itmtree ^. ldtValue . _3) @@ -787,6 +788,7 @@ useLoadedAmmo itmtree cr (_, w) (Just (mz, x, magtree)) = (,) True $ MuzzleStopper -> useStopWatch (itm ^. _1) cr w MuzzleScroller -> useTimeScrollGun (itm ^. _1) cr w where + itmtree = loc ^. locLDT mid = magtree ^? ldtValue . _1 . itLocation . ilInvID itm = itmtree ^. ldtValue @@ -853,12 +855,12 @@ tractorBeamAt pos outpos dir power = d = unitVectorAtAngle dir * power creatureShootLaser :: - LDTree ItemLink OItem -> + LocationLDT ItemLink OItem -> Creature -> Muzzle -> World -> World -creatureShootLaser itmtree cr mz w = +creatureShootLaser loc cr mz w = w & randGen .~ g & shootLaser @@ -867,8 +869,9 @@ creatureShootLaser itmtree cr mz w = (getLaserPhaseV istree) pos dir - (getLaserColor istree) + (getLaserColor loc) where + itmtree = loc ^. locLDT istree = fmap (\(x, _, _) -> x) itmtree itm = itmtree ^. ldtValue (moff, mrot) = heldItemOrient2D' itm cr (_mzPos mz) (_mzRot mz) @@ -964,18 +967,19 @@ magAmmoParams itm = case itm ^. itType of -- _ -> 0 shootBullets :: - LDTree ItemLink OItem -> + LocationLDT ItemLink OItem -> Creature -> (Muzzle, Int, LDTree ItemLink OItem) -> World -> World -shootBullets itmtree cr (mz, x, magtree) w = fromMaybe w $ do +shootBullets loc cr (mz, x, magtree) w = fromMaybe w $ do thebullet <- getBulletType $ fmap (^. _1) magtree - return $ foldl' (&) w (replicate x (shootBullet thebullet (itmtree ^. ldtValue . _1) cr mz)) + return $ foldl' (&) w (replicate x (shootBullet thebullet loc cr mz)) -shootBullet :: Bullet -> Item -> Creature -> Muzzle -> World -> World -shootBullet bu itm cr mz w = makeBullet bu itm bulpos dir . (randGen .~ g) $ w +shootBullet :: Bullet -> LocationLDT ItemLink OItem -> Creature -> Muzzle -> World -> World +shootBullet bu loc cr mz w = makeBullet bu itm bulpos dir . (randGen .~ g) $ w where + itm = loc ^. locLDT . ldtValue . _1 bulpos = _crPos cr + rotateV (_crDir cr) moff (moff, mrot) = heldItemOrient2D itm cr (_mzPos mz + V2 0 offset) (_mzRot mz) (a, g) = randomR (- inacc, inacc) $ _randGen w @@ -1263,15 +1267,15 @@ determineProjectileTracking magtree itmtree = return $ HomeUsingTargeting (targetingtree ^. ldtValue . itID) createProjectileR :: - LDTree ItemLink OItem -> + LocationLDT ItemLink OItem -> LDTree ItemLink OItem -> Muzzle -> Creature -> World -> World -createProjectileR itmtree magtree = +createProjectileR loc magtree = createProjectile - (itmtree ^. ldtValue . _3) + (loc ^. locLDT . ldtValue . _3) ( Rocket (determineProjectileTracking (fmap (^. _1) magtree) $ fmap (^. _1) itmtree) smoke @@ -1279,6 +1283,7 @@ createProjectileR itmtree magtree = magtree (getPJStabiliser $ fmap (^. _1) itmtree) where + itmtree = loc ^. locLDT smoke | isJust $ lookup SmokeReducerLink (magtree ^. ldtLeft) = Just ReducedRocketSmoke | otherwise = Nothing diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 71598e8c2..d963a8115 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -71,6 +71,29 @@ heldItemRelativeOrient itm cr (p, q) f i = 0.1 * fromIntegral (sLen - i) / fromIntegral sLen sLen = _strideLength $ _crStance cr +handleOrient :: LocationLDT ItemLink OItem -> Point3Q +handleOrient _ = (V3 3 0 0, Q.qID) + +-- note this is relative to the creature +handOrient :: Creature -> AimStance -> Point3Q +handOrient cr = case cr ^. crStance . posture of + Aiming -> \case + TwoHandUnder -> (V3 1 0 shoulderHeight, Q.qID) + TwoHandOver -> (V3 0 0 shoulderHeight, Q.qID) + OneHand -> (V3 13 (-2) shoulderHeight, Q.qID) + TwoHandFlat -> (V3 13 0 shoulderHeight, Q.qID) + AtEase -> \case + OneHand -> (V3 (10 + walkhandp) (-7) 15, Q.qID) + TwoHandFlat -> (V3 10 0 15, Q.axisAngle (V3 0 0 1) $ twoFlatHRot cr) + TwoHandUnder -> (V3 10 0 15, Q.axisAngle (V3 0 0 1) (strideRot cr + 1.2)) + TwoHandOver -> (V3 10 0 15, Q.axisAngle (V3 0 0 1) (strideRot cr + 1.2)) + where + walkhandp = case cr ^? crStance . carriage of + Just (Walking x LeftForward) -> f x * 50 -2 + _ -> - 2 + f i = 0.1 * fromIntegral (sLen - i) / fromIntegral sLen + sLen = _strideLength $ _crStance cr + locOrientation :: LocationLDT ItemLink OItem -> Creature -> Point3Q locOrientation loc cr = heldItemRelativeOrient diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 29e6d34cf..31f80bf87 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -242,9 +242,9 @@ heldPositionInfo = aimStanceInfo . itemBaseStance aimStanceInfo :: AimStance -> String aimStanceInfo as = case as of - TwoHandUnder -> "It is held in two hands and tucked under the shoulder." - TwoHandOver -> "It is held in two hands and over the shoulder." - TwoHandFlat -> "It is held in two hands at its sides." + TwoHandUnder -> "It is held using two hands, tucked under the shoulder." + TwoHandOver -> "It is held using two hands, resting over the shoulder." + TwoHandFlat -> "It is held using two hands in front of the body." OneHand -> "It is held in one hand." itmEquipSiteInfo :: Item -> String diff --git a/tags b/tags index d9f7f72a4..90159e597 100644 --- a/tags +++ b/tags @@ -3354,10 +3354,10 @@ advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 44;" f aimDelaySweep src/Dodge/Render/Picture.hs 264;" f aimStance src/Dodge/Item/AimStance.hs 13;" f -aimStanceHandlePos src/Dodge/Item/HeldOffset.hs 85;" f +aimStanceHandlePos src/Dodge/Item/HeldOffset.hs 105;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 165;" f -aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 81;" f +aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 101;" f airlock src/Dodge/Room/Airlock.hs 19;" f airlock0 src/Dodge/Room/Airlock.hs 25;" f airlock90 src/Dodge/Room/Airlock.hs 122;" f @@ -3489,7 +3489,7 @@ basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f -basicMuzFlare src/Dodge/HeldUse.hs 741;" f +basicMuzFlare src/Dodge/HeldUse.hs 742;" f basicTerminal src/Dodge/Terminal.hs 35;" f battery src/Dodge/Item/Ammo.hs 62;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f @@ -3785,14 +3785,14 @@ createItemYou src/Dodge/Inventory/Add.hs 95;" f createLightMap src/Render.hs 26;" f createNewArc src/Dodge/Tesla/Arc.hs 90;" f createPathGrid src/Dodge/Room/Path.hs 21;" f -createProjectile src/Dodge/HeldUse.hs 1301;" f -createProjectileR src/Dodge/HeldUse.hs 1265;" f +createProjectile src/Dodge/HeldUse.hs 1306;" f +createProjectileR src/Dodge/HeldUse.hs 1269;" f createShell src/Dodge/Projectile/Create.hs 22;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 39;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 117;" f createWall src/Dodge/Wall/Create.hs 8;" f creatureDisplayText src/Dodge/Creature/Picture/Awareness.hs 11;" f -creatureShootLaser src/Dodge/HeldUse.hs 855;" f +creatureShootLaser src/Dodge/HeldUse.hs 857;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 52;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 73;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 62;" f @@ -3981,7 +3981,7 @@ detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 451;" f detectorEffect src/Dodge/Item/Weapon/Radar.hs 20;" f detectorInfo src/Dodge/Item/Info.hs 224;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1251;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1255;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 204;" f @@ -4046,7 +4046,7 @@ doDrag src/Dodge/Update/Input/InGame.hs 107;" 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 1209;" f +doGenFloat src/Dodge/HeldUse.hs 1213;" f doGravityPU src/Dodge/Projectile/Update.hs 50;" f doHeldUseEffect src/Dodge/HeldUse.hs 322;" f doInPlacements src/Dodge/Layout.hs 92;" f @@ -4096,7 +4096,7 @@ doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 37;" f doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f -doWdWd src/Dodge/WorldEffect.hs 27;" f +doWdWd src/Dodge/WorldEffect.hs 26;" f doWorldEvents src/Dodge/Update.hs 432;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f @@ -4240,7 +4240,7 @@ drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f dropAll src/Dodge/Creature/State.hs 127;" f dropExcept src/Dodge/Creature/Action.hs 166;" f -dropInventoryPath src/Dodge/HeldUse.hs 1381;" f +dropInventoryPath src/Dodge/HeldUse.hs 1386;" f dropItem src/Dodge/Creature/Action.hs 172;" f dropper src/Dodge/Item/Scope.hs 76;" f drumMag src/Dodge/Item/Ammo.hs 33;" f @@ -4363,7 +4363,7 @@ flameThrower src/Dodge/Item/Held/SprayGuns.hs 64;" f flameTorrent src/Dodge/Item/Held/SprayGuns.hs 32;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 48;" f flamerPic src/Dodge/Item/Draw/SPic.hs 385;" f -flareCircleAt src/Dodge/HeldUse.hs 722;" f +flareCircleAt src/Dodge/HeldUse.hs 723;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 39;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f @@ -4430,7 +4430,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 158;" f gameplayMenu src/Dodge/Menu.hs 134;" f gameplayMenuOptions src/Dodge/Menu.hs 137;" f -gasType src/Dodge/HeldUse.hs 1165;" f +gasType src/Dodge/HeldUse.hs 1169;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 22;" f generateGraphs src/Dodge/LevelGen.hs 39;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f @@ -4445,11 +4445,11 @@ getAimZoom src/Dodge/Update/Camera.hs 135;" f getAmmoLinks src/Dodge/Item/Grammar.hs 114;" f getArguments src/Dodge/Update/Scroll.hs 178;" f getArguments' src/Dodge/Update/Scroll.hs 166;" f -getAttachedSFLink src/Dodge/HeldUse.hs 793;" f +getAttachedSFLink src/Dodge/HeldUse.hs 795;" f getAutoSpringLinks src/Dodge/Item/Grammar.hs 93;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 171;" f -getBulletType src/Dodge/HeldUse.hs 913;" f +getBulletType src/Dodge/HeldUse.hs 916;" f getCloseObj src/Dodge/Update/Input/InGame.hs 515;" f getCommands src/Dodge/Terminal.hs 117;" f getCommandsHelp src/Dodge/Terminal.hs 75;" f @@ -4457,17 +4457,17 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 45;" f getDamageCoding src/Dodge/Terminal.hs 177;" f getDistortions src/Dodge/Render.hs 411;" f getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1294;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1299;" f getInventoryPath src/Dodge/Inventory/Path.hs 8;" f getItemValue src/Dodge/Inventory/SelectionList.hs 143;" f -getLaserColor src/Dodge/HeldUse.hs 738;" f -getLaserDamage src/Dodge/HeldUse.hs 735;" f -getLaserPhaseV src/Dodge/HeldUse.hs 732;" f +getLaserColor src/Dodge/HeldUse.hs 739;" f +getLaserDamage src/Dodge/HeldUse.hs 736;" f +getLaserPhaseV src/Dodge/HeldUse.hs 733;" f getLinksOfType src/Dodge/RoomLink.hs 39;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 11;" f getMenuMouseContext src/Dodge/Update.hs 392;" f getNodePos src/Dodge/Path.hs 31;" f -getPJStabiliser src/Dodge/HeldUse.hs 1286;" f +getPJStabiliser src/Dodge/HeldUse.hs 1291;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 8;" f getRootItemBounds src/Dodge/Render/HUD.hs 95;" f @@ -4528,13 +4528,14 @@ halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 63;" f +handOrient src/Dodge/Item/HeldOffset.hs 75;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 45;" 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 handleMouseWheelEvent src/Dodge/Event/Input.hs 58;" f -handlePos src/Dodge/Item/HeldOffset.hs 110;" f +handlePos src/Dodge/Item/HeldOffset.hs 130;" f handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 18;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f @@ -4559,18 +4560,18 @@ heldAimStance src/Dodge/Item/AimStance.hs 22;" f heldAimZoom src/Dodge/Update/Camera.hs 140;" f heldEffect src/Dodge/HeldUse.hs 60;" f heldEffectMuzzles src/Dodge/HeldUse.hs 127;" f -heldHandlePos src/Dodge/Item/HeldOffset.hs 115;" f +heldHandlePos src/Dodge/Item/HeldOffset.hs 135;" f heldInfo src/Dodge/Item/Info.hs 90;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 18;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 177;" f heldItemInvLock src/Dodge/HeldUse.hs 474;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1051;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1055;" f heldItemMuzzles src/Dodge/HeldUse.hs 156;" f -heldItemOffset src/Dodge/Item/HeldOffset.hs 92;" f +heldItemOffset src/Dodge/Item/HeldOffset.hs 112;" f heldItemOrient2D src/Dodge/Item/HeldOffset.hs 37;" f heldItemOrient2D' src/Dodge/Item/HeldOffset.hs 42;" f heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 47;" f -heldItemRifling src/Dodge/HeldUse.hs 1095;" f +heldItemRifling src/Dodge/HeldUse.hs 1099;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 223;" f heldItemWeight src/Dodge/Creature/Statistics.hs 71;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f @@ -4690,7 +4691,7 @@ invertIntMap src/Multiset.hs 67;" f invertInventoryToMap src/Dodge/Combine.hs 57;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f -isAmmoIntLink src/Dodge/HeldUse.hs 748;" f +isAmmoIntLink src/Dodge/HeldUse.hs 749;" f isAnimate src/Dodge/Creature/Test.hs 143;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 74;" f @@ -4727,7 +4728,7 @@ itemBlips src/Dodge/RadarSweep.hs 93;" f itemBulkiness src/Dodge/Creature/YourControl.hs 172;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 61;" f -itemDetectorEffect src/Dodge/HeldUse.hs 799;" f +itemDetectorEffect src/Dodge/HeldUse.hs 801;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 49;" f itemEquipPict src/Dodge/Item/Draw.hs 18;" f itemExternalValue src/Dodge/Inventory/SelectionList.hs 84;" f @@ -4741,8 +4742,8 @@ itemInternalValue src/Dodge/Item/Display.hs 34;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f itemInvLock src/Dodge/HeldUse.hs 469;" f itemMuzzles src/Dodge/HeldUse.hs 141;" f -itemRandomOffset src/Dodge/HeldUse.hs 988;" f -itemRelativeOrient src/Dodge/Item/HeldOffset.hs 159;" f +itemRandomOffset src/Dodge/HeldUse.hs 992;" f +itemRelativeOrient src/Dodge/Item/HeldOffset.hs 179;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f itemSPic src/Dodge/Item/Draw/SPic.hs 33;" f @@ -4864,7 +4865,7 @@ locGoHelp src/Dodge/DoubleTree.hs 273;" f locGoLeft src/Dodge/DoubleTree.hs 262;" f locGoRight src/Dodge/DoubleTree.hs 267;" f locLeftmost src/Dodge/DoubleTree.hs 255;" f -locOrientation src/Dodge/Item/HeldOffset.hs 74;" f +locOrientation src/Dodge/Item/HeldOffset.hs 94;" f locRightmost src/Dodge/DoubleTree.hs 258;" f locToTop src/Dodge/DoubleTree.hs 250;" f locUp src/Dodge/DoubleTree.hs 237;" f @@ -4896,7 +4897,7 @@ machineAddSound src/Dodge/Machine.hs 49;" f machinePistol src/Dodge/Item/Held/Stick.hs 52;" f machineUpdateDeathEff src/Dodge/Machine.hs 34;" f machineUpdateLiveDieEff src/Dodge/Machine.hs 16;" f -magAmmoParams src/Dodge/HeldUse.hs 934;" f +magAmmoParams src/Dodge/HeldUse.hs 937;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 11;" f magShield src/Dodge/Item/Equipment.hs 27;" f magV src/Geometry/Vector.hs 171;" f @@ -4911,7 +4912,7 @@ makeAttach src/Dodge/Item/Attach.hs 10;" f makeBlip src/Dodge/RadarSweep.hs 69;" f makeBlockDebris src/Dodge/Block/Debris.hs 28;" f makeBoolOption src/Dodge/Menu/OptionType.hs 8;" f -makeBullet src/Dodge/HeldUse.hs 1032;" f +makeBullet src/Dodge/HeldUse.hs 1036;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f @@ -4992,11 +4993,11 @@ mcProximitySensorUpdate src/Dodge/Machine/Update.hs 130;" f mcSPic src/Dodge/Render/ShapePicture.hs 111;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 93;" f mcSensorUpdate src/Dodge/Machine/Update.hs 125;" f -mcShootAuto src/Dodge/HeldUse.hs 1220;" f -mcShootLaser src/Dodge/HeldUse.hs 1213;" f +mcShootAuto src/Dodge/HeldUse.hs 1224;" f +mcShootLaser src/Dodge/HeldUse.hs 1217;" f mcTriggerVal src/Dodge/Machine/Update.hs 99;" f mcTypeUpdate src/Dodge/Machine/Update.hs 28;" f -mcUseHeld src/Dodge/HeldUse.hs 1139;" f +mcUseHeld src/Dodge/HeldUse.hs 1143;" f mcUseItem src/Dodge/Machine/Update.hs 85;" f medkit src/Dodge/Item/Consumable.hs 8;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f @@ -5089,7 +5090,7 @@ multiArrow src/Picture/Composite.hs 11;" f multiLookupTrie src/SimpleTrie.hs 34;" f multiLookupTrieI src/SimpleTrie.hs 43;" f muout src/Dodge/RoomLink.hs 129;" f -muzFlareAt src/Dodge/HeldUse.hs 708;" f +muzFlareAt src/Dodge/HeldUse.hs 709;" f mvButton src/Dodge/Placement/PlaceSpot.hs 176;" f mvCr src/Dodge/Placement/PlaceSpot.hs 186;" f mvFS src/Dodge/Placement/PlaceSpot.hs 189;" f @@ -5511,7 +5512,7 @@ rememberSounds src/Dodge/Creature/Perception.hs 178;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f remoteScreen src/Dodge/Item/Scope.hs 139;" f removeAimPosture src/Dodge/Creature/YourControl.hs 147;" f -removeAmmoFromMag src/Dodge/HeldUse.hs 901;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 904;" f removeDot src/ShortShow.hs 29;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f @@ -5792,15 +5793,15 @@ shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f shineTargetLaser src/Dodge/Creature/State.hs 329;" f shineTorch src/Dodge/Creature/State.hs 409;" f -shootBullet src/Dodge/HeldUse.hs 976;" f -shootBullets src/Dodge/HeldUse.hs 966;" f +shootBullet src/Dodge/HeldUse.hs 979;" f +shootBullets src/Dodge/HeldUse.hs 969;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f -shootLaser src/Dodge/HeldUse.hs 880;" f +shootLaser src/Dodge/HeldUse.hs 883;" f shootOutPassage src/Dodge/Room/RezBox.hs 74;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f -shootTeslaArc src/Dodge/HeldUse.hs 1239;" f +shootTeslaArc src/Dodge/HeldUse.hs 1243;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f -shootTractorBeam src/Dodge/HeldUse.hs 832;" f +shootTractorBeam src/Dodge/HeldUse.hs 834;" f shootersRoom src/Dodge/Room/Room.hs 315;" f shootersRoom' src/Dodge/Room/Room.hs 280;" f shootersRoom1 src/Dodge/Room/Room.hs 305;" f @@ -5808,7 +5809,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 693;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 95;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 115;" f shoulderSH src/Dodge/Creature/Picture.hs 133;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f showAttachItem src/Dodge/Item/Display.hs 91;" f @@ -5958,7 +5959,7 @@ strFromEquipment src/Dodge/Creature/Statistics.hs 48;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 60;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 35;" f strictify src/MaybeHelp.hs 37;" f -strideRot src/Dodge/Item/HeldOffset.hs 98;" f +strideRot src/Dodge/Item/HeldOffset.hs 118;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -6103,7 +6104,7 @@ torqueCr src/Dodge/WorldEffect.hs 66;" f torso src/Dodge/Creature/Picture.hs 99;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f -tractorBeamAt src/Dodge/HeldUse.hs 844;" f +tractorBeamAt src/Dodge/HeldUse.hs 846;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 60;" f tractorGunPic src/Dodge/Item/Draw/SPic.hs 435;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f @@ -6182,7 +6183,7 @@ twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f twists src/Dodge/Creature/Test.hs 108;" f twoFlat src/Dodge/Creature/Test.hs 105;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 107;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 127;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 150;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 533;" f @@ -6343,24 +6344,24 @@ upperRounded src/Shape.hs 185;" f useBulletPayload src/Dodge/Bullet.hs 113;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f -useGasParams src/Dodge/HeldUse.hs 1144;" f +useGasParams src/Dodge/HeldUse.hs 1148;" f useHotkey src/Dodge/Creature/YourControl.hs 70;" f -useInventoryPath src/Dodge/HeldUse.hs 1412;" f +useInventoryPath src/Dodge/HeldUse.hs 1417;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 18;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f -useLoadedAmmo src/Dodge/HeldUse.hs 752;" f +useLoadedAmmo src/Dodge/HeldUse.hs 753;" f useMagShield src/Dodge/Euse.hs 26;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1372;" f +useRewindGun src/Dodge/HeldUse.hs 1377;" f useRewindGun src/Dodge/Luse.hs 40;" f useRoomPosCond src/Dodge/PlacementSpot.hs 178;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 181;" f -useStopWatch src/Dodge/HeldUse.hs 1353;" f +useStopWatch src/Dodge/HeldUse.hs 1358;" f useStopWatch src/Dodge/Luse.hs 21;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 127;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1361;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1366;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 196;" f @@ -6396,7 +6397,7 @@ vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 345;" f waistSP src/Dodge/Creature/HandPos.hs 173;" f -walkNozzle src/Dodge/HeldUse.hs 814;" f +walkNozzle src/Dodge/HeldUse.hs 816;" f walkableNodeNear src/Dodge/Path.hs 48;" f wallBlips src/Dodge/RadarSweep.hs 98;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 52;" f @@ -6404,7 +6405,7 @@ wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f wallsFromRooms src/Dodge/Layout.hs 146;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f -warmupSound src/Dodge/HeldUse.hs 1406;" f +warmupSound src/Dodge/HeldUse.hs 1411;" f warningRooms src/Dodge/Room/Warning.hs 28;" f wasdAim src/Dodge/Creature/YourControl.hs 126;" f wasdDir src/Dodge/WASD.hs 17;" f