From 6af2a8cc365663fcc9f254007bb23245078f056a Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 28 Jun 2025 21:21:50 +0100 Subject: [PATCH] Add code for determining item orientation --- src/Dodge/Data/ComposedItem.hs | 4 + src/Dodge/DoubleTree.hs | 15 ++ src/Dodge/HeldUse.hs | 8 +- src/Dodge/Item/HeldOffset.hs | 11 ++ src/Dodge/Item/Orientation.hs | 33 ++++- src/Dodge/Projectile/Create.hs | 6 +- tags | 258 +++++++++++++++++---------------- 7 files changed, 197 insertions(+), 138 deletions(-) diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index d24638f82..157c48e93 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -8,6 +8,8 @@ module Dodge.Data.ComposedItem where import Dodge.Data.AmmoType import Control.Lens import Dodge.Data.Item +import Linear +import qualified Linear.Quaternion as Q data ItemLink = AmmoInLink Int AmmoType @@ -64,4 +66,6 @@ data ItemStructuralFunction type CItem = (Item, ItemStructuralFunction) +type OItem = (Item, ItemStructuralFunction, (V3 Float,Q.Quaternion Float)) + makeLenses ''ItemLink diff --git a/src/Dodge/DoubleTree.hs b/src/Dodge/DoubleTree.hs index cc590fcdf..8ae7d0036 100644 --- a/src/Dodge/DoubleTree.hs +++ b/src/Dodge/DoubleTree.hs @@ -15,6 +15,21 @@ singleLDT x = LDT x [] [] ldtToDT :: LDTree b a -> DoubleTree a ldtToDT (LDT x l r) = DT x (map (ldtToDT . snd) l) (map (ldtToDT . snd) r) +ldtStartPropagate :: (a -> c) -> (c -> b -> a -> c) -> LDTree b a -> LDTree b c +ldtStartPropagate g f (LDT x l r) = LDT z + (fmap (\(j,t) -> (j,ldtPropagate' z j f t)) l) + (fmap (\(j,t) -> (j,ldtPropagate' z j f t)) r) + where + z = g x + + +ldtPropagate' :: c -> b -> (c -> b -> a -> c) -> LDTree b a -> LDTree b c +ldtPropagate' x i f (LDT y l r) = LDT z + (fmap (\(j,t) -> (j,ldtPropagate' z j f t)) l) + (fmap (\(j,t) -> (j,ldtPropagate' z j f t)) r) + where + z = f x i y + -- propagate two functions down the links of an LDT tree -- which function is chosen depends on whether it is a left or right branch ldtPropagate :: diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index cf7ad3e32..07513c28f 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -10,6 +10,7 @@ module Dodge.HeldUse ( heldEffectMuzzles, ) where +import qualified Quaternion as Q import Color import Control.Applicative import Control.Monad @@ -782,6 +783,7 @@ useLoadedAmmo itmtree cr (_, w) (Just (mz, x, magtree)) = (,) True $ MuzzleRLauncher -> createProjectileR itmtree magtree mz cr w MuzzleGLauncher -> createProjectile + (0, Q.qID) (Grenade (getGrenadeHitEffect itmtree)) magtree (getPJStabiliser itmtree) @@ -1288,6 +1290,7 @@ createProjectileR :: World createProjectileR itmtree magtree = createProjectile + (0, Q.qID) ( Rocket (determineProjectileTracking magtree itmtree) smoke @@ -1315,6 +1318,7 @@ getGrenadeHitEffect t = case lookup GrenadeHitEffectLink (t ^. ldtRight) of _ -> GBounce 2 createProjectile :: + (Point3, Q.Quaternion Float) -> ProjectileType -> LDTree ItemLink Item -> Maybe PJStabiliser -> @@ -1322,7 +1326,7 @@ createProjectile :: Creature -> World -> World -createProjectile pjtype magtree stab muz cr = fromMaybe failsound $ do +createProjectile x pjtype magtree stab muz cr = fromMaybe failsound $ do magid <- magtree ^? ldtValue . itLocation . ilInvID ammoitem <- cr ^? crInv . ix magid let rdetonate = @@ -1336,7 +1340,7 @@ createProjectile pjtype magtree stab muz cr = fromMaybe failsound $ do -- <|> ammoitem ^? itConsumables . magParams . ampPayload <|> magAmmoParams ammoitem ^? _Just . ampPayload return $ - createShell rdetonate rscreen stab pjtype aparams muz cr + createShell x rdetonate rscreen stab pjtype aparams muz cr . startthesound where -- the sound should be moved to the projectile firing diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index f4557102e..05be38494 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -5,8 +5,13 @@ module Dodge.Item.HeldOffset ( heldItemOffset, heldItemRelativeOrient, heldItemOrient2D, + itemRelativeOrient, ) where +import Dodge.Item.Orientation +import Dodge.DoubleTree +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Dodge.Creature.Radius import Dodge.Data.AimStance import Dodge.Item.AimStance @@ -135,3 +140,9 @@ heldHandlePos = \case KEYCARD {} -> V2 3 0 BLINKER -> V2 3 0 BLINKERUNSAFE -> V2 3 0 + +itemRelativeOrient :: LocationLDT ItemLink Item -> Creature + -> (Point3, Q.Quaternion Float) -> (Point3, Q.Quaternion Float) +itemRelativeOrient loc cr + = heldItemRelativeOrient (locToTop loc ^. locLDT . ldtValue) cr + . orientLocation (V3 0 0 0,Q.qID) loc diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index 21bf503e2..359cd3ecc 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -3,6 +3,7 @@ module Dodge.Item.Orientation ( orientAttachment, orientLocation, + propagateOrientation, ) where import Dodge.Data.ComposedItem @@ -37,9 +38,10 @@ orientAttachment par lnk ch = case (_itType par, lnk, _itType ch) of (t1, q1) = orientByLink par lnk (t2, q2) = orientChild ch -orientLocation' :: (Point3,Q.Quaternion Float) - -> LocationLDT ItemLink Item - -> (Point3, Q.Quaternion Float) +orientLocation' :: + (Point3, Q.Quaternion Float) -> + LocationLDT ItemLink Item -> + (Point3, Q.Quaternion Float) orientLocation' x = \case (LocLDT TopLDT _) -> x (LocLDT c t) -> (p + Q.rotate q p1, q * q1) @@ -47,10 +49,27 @@ orientLocation' x = \case (p, q) = orientLocation' x (LocLDT (_cldtUp c) (singleLDT (_cldtParent c))) (p1, q1) = orientAttachment (_cldtParent c) (_cldtLink c) (_ldtValue t) -orientLocation :: - (Point3, Q.Quaternion Float) -> - LocationLDT ItemLink Item - -> (Point3, Q.Quaternion Float) -> (Point3, Q.Quaternion Float) +orientLocation :: + (Point3, Q.Quaternion Float) -> + LocationLDT ItemLink Item -> + (Point3, Q.Quaternion Float) -> + (Point3, Q.Quaternion Float) orientLocation x loc (p1, q1) = (p + Q.rotate q p1, q * q1) where (p, q) = orientLocation' x loc + +propagateOrientation :: LDTree ItemLink CItem + -> LDTree ItemLink OItem +propagateOrientation = ldtStartPropagate g f + where + g (x,y) = (x,y,(V3 0 0 0,Q.qID)) + f (x,_,(p,q)) i (y,y1) = let (p1,q1) = orientAttachment x i y + in (y,y1,(p + Q.rotate q p1, q * q1)) + +--propagateOrientation' :: LDTree ItemLink Item +-- -> LDTree ItemLink (Item, (Point3, Q.Quaternion Float)) +--propagateOrientation' = ldtStartPropagate g f +-- where +-- g x = (x,(V3 0 0 0,Q.qID)) +-- f (x,(p,q)) i y = let (p1,q1) = orientAttachment x i y +-- in (y,(p + Q.rotate q p1, q * q1)) diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index 7b494b7cf..7fbde70e4 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -6,6 +6,7 @@ module Dodge.Projectile.Create ( --import Dodge.Data.ComposedItem --import Dodge.Data.DoubleTree +import qualified Quaternion as Q import Dodge.Data.Muzzle import Data.Maybe import Dodge.Data.World @@ -21,6 +22,7 @@ data PJStabiliser -- assumes the mscreen is in your inventory createShell :: + (Point3, Q.Quaternion Float) -> Maybe (NewInt ItmInt) -> Maybe (NewInt ItmInt) -> Maybe PJStabiliser -> @@ -30,7 +32,7 @@ createShell :: Creature -> World -> World -createShell mdetonator mscreen stab pjtype payload muz cr w = +createShell (p,q) mdetonator mscreen stab pjtype payload muz cr w = w & updatescreen & updatedetonator @@ -91,4 +93,4 @@ createShell mdetonator mscreen stab pjtype payload muz cr w = .:~ i i = IM.newKey $ w ^. cWorld . lWorld . projectiles dir = _crDir cr + _mzRot muz - pos = _crPos cr +.+ rotateV dir (_mzPos muz) + pos = _crPos cr + xyV3 p + rotateV dir (_mzPos muz) diff --git a/tags b/tags index 4538c7cf1..de96f1990 100644 --- a/tags +++ b/tags @@ -281,7 +281,7 @@ CardinalPoint src/Dodge/Base/CardinalPoint.hs 1;" m CardinalPoint src/Dodge/Data/CardinalPoint.hs 1;" m Carriage src/Dodge/Data/Creature/Stance.hs 20;" t Carte src/Dodge/Render/HUD/Carte.hs 1;" m -ChainEffect src/Dodge/HeldUse.hs 69;" t +ChainEffect src/Dodge/HeldUse.hs 70;" t ChainEffect src/Dodge/Item/Weapon/TriggerType.hs 43;" t ChainUpdates src/Dodge/Creature/ChainUpdates.hs 1;" m ChangePosture src/Dodge/Data/ActionPlan.hs 42;" C @@ -1395,7 +1395,7 @@ P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C PIPE src/Dodge/Data/Item/Combine.hs 50;" C PISTOL src/Dodge/Data/Item/Combine.hs 143;" C -PJStabiliser src/Dodge/Projectile/Create.hs 18;" t +PJStabiliser src/Dodge/Projectile/Create.hs 19;" t PLANK src/Dodge/Data/Item/Combine.hs 59;" C PLATE src/Dodge/Data/Item/Combine.hs 69;" C PLUS src/Dodge/Data/GenParams.hs 20;" C @@ -1845,8 +1845,8 @@ SplitBeamCombine src/Dodge/Data/Beam.hs 42;" C SprayGuns src/Dodge/Item/Held/SprayGuns.hs 1;" m SpreadGunAI src/Dodge/Data/Creature/Misc.hs 42;" C SpreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 1;" m -StabOrthReduce src/Dodge/Projectile/Create.hs 19;" C -StabSpinIncrease src/Dodge/Projectile/Create.hs 20;" C +StabOrthReduce src/Dodge/Projectile/Create.hs 20;" C +StabSpinIncrease src/Dodge/Projectile/Create.hs 21;" C Stance src/Dodge/Data/Creature/Stance.hs 13;" t Stance src/Dodge/Data/Creature/Stance.hs 6;" m StandaloneWall src/Dodge/Data/Wall/Structure.hs 13;" C @@ -3349,10 +3349,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 65;" f +aimStanceHandlePos src/Dodge/Item/HeldOffset.hs 70;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 165;" f -aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 61;" f +aimingWeaponZeroPos src/Dodge/Item/HeldOffset.hs 66;" 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 @@ -3377,21 +3377,21 @@ angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f anythingHitCirc src/Dodge/Base/Collide.hs 247;" f -applyCME src/Dodge/HeldUse.hs 410;" f +applyCME src/Dodge/HeldUse.hs 411;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 13;" f applyEventIO src/Loop.hs 89;" f applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 16;" f -applyInvLock src/Dodge/HeldUse.hs 476;" f +applyInvLock src/Dodge/HeldUse.hs 477;" f applyMagnetsToBul src/Dodge/Bullet.hs 30;" f applyPastDamages src/Dodge/Creature/State.hs 135;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 22;" f applyPosition src/Sound.hs 111;" f -applyRecoil src/Dodge/HeldUse.hs 508;" f +applyRecoil src/Dodge/HeldUse.hs 509;" f applyResFactor src/Dodge/Data/Config.hs 110;" f applySetTerminalString src/Dodge/Debug/Terminal.hs 81;" f -applySidePush src/Dodge/HeldUse.hs 607;" f -applySoundCME src/Dodge/HeldUse.hs 498;" f +applySidePush src/Dodge/HeldUse.hs 608;" f +applySoundCME src/Dodge/HeldUse.hs 499;" f applyTerminalCommand src/Dodge/Debug/Terminal.hs 28;" f applyTerminalCommandArguments src/Dodge/Debug/Terminal.hs 42;" f applyTerminalString src/Dodge/Debug/Terminal.hs 22;" f @@ -3399,7 +3399,7 @@ applyToNode src/TreeHelp.hs 64;" f applyToRandomNode src/TreeHelp.hs 150;" f applyToSubforest src/TreeHelp.hs 77;" f applyToSubtree src/TreeHelp.hs 70;" f -applyTorqueCME src/Dodge/HeldUse.hs 618;" f +applyTorqueCME src/Dodge/HeldUse.hs 619;" f applyWorldConfig src/Dodge/Config/Update.hs 38;" f aquamarine src/Color.hs 23;" f arHUD src/Dodge/Item/Scope.hs 134;" f @@ -3472,7 +3472,7 @@ baseSMGShape src/Dodge/Item/Draw/SPic.hs 382;" f baseShoulder src/Dodge/Creature/Picture.hs 125;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 288;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 281;" f -baseStickSpread src/Dodge/HeldUse.hs 306;" f +baseStickSpread src/Dodge/HeldUse.hs 307;" f baseTriggerType src/Dodge/Item/TriggerType.hs 5;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 128;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 38;" f @@ -3482,7 +3482,7 @@ basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f basicItemDisplay src/Dodge/Item/Display.hs 22;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f -basicMuzFlare src/Dodge/HeldUse.hs 758;" f +basicMuzFlare src/Dodge/HeldUse.hs 759;" f basicTerminal src/Dodge/Terminal.hs 35;" f battery src/Dodge/Item/Ammo.hs 62;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f @@ -3491,7 +3491,7 @@ beltMag src/Dodge/Item/Ammo.hs 38;" f bfsNodePoints src/Dodge/Path.hs 58;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 218;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 114;" f -bgunSound src/Dodge/HeldUse.hs 561;" f +bgunSound src/Dodge/HeldUse.hs 562;" f bindFBO src/Render.hs 244;" f bingate src/Dodge/Item/Scope.hs 109;" f black src/Color.hs 27;" f @@ -3634,7 +3634,7 @@ clampPath src/Dodge/Room/Procedural.hs 166;" f clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 549;" f clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 663;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 531;" f -cldtPropagateFold src/Dodge/DoubleTree.hs 268;" f +cldtPropagateFold src/Dodge/DoubleTree.hs 283;" f cleanUpPreload src/Preload.hs 10;" f cleanUpRenderPreload src/Preload/Render.hs 217;" f cleanUpSoundPreload src/Preload.hs 15;" f @@ -3777,14 +3777,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 1317;" f -createProjectileR src/Dodge/HeldUse.hs 1282;" f -createShell src/Dodge/Projectile/Create.hs 23;" f +createProjectile src/Dodge/HeldUse.hs 1320;" f +createProjectileR src/Dodge/HeldUse.hs 1284;" f +createShell src/Dodge/Projectile/Create.hs 24;" 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 871;" f +creatureShootLaser src/Dodge/HeldUse.hs 873;" 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 @@ -3855,7 +3855,7 @@ dark src/Color.hs 108;" f darkenBackground src/Dodge/Render/MenuScreen.hs 52;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f -dbwMuzzles src/Dodge/HeldUse.hs 309;" f +dbwMuzzles src/Dodge/HeldUse.hs 310;" f deZoneIX src/Dodge/Zoning/Base.hs 89;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f deadEndRoom src/Dodge/Room/Room.hs 235;" f @@ -3973,7 +3973,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 1268;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1270;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 204;" f @@ -4038,9 +4038,9 @@ 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 1226;" f +doGenFloat src/Dodge/HeldUse.hs 1228;" f doGravityPU src/Dodge/Projectile/Update.hs 50;" f -doHeldUseEffect src/Dodge/HeldUse.hs 339;" f +doHeldUseEffect src/Dodge/HeldUse.hs 340;" f doInPlacements src/Dodge/Layout.hs 92;" f doIndividualPlacements src/Dodge/Layout.hs 117;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f @@ -4101,7 +4101,7 @@ doubleCorridorBarrels src/Dodge/Room/Room.hs 265;" f doubleLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 28;" f doublePair src/Geometry.hs 161;" f doublePairSet src/Geometry.hs 165;" f -doubleTreeToIndentList src/Dodge/DoubleTree.hs 80;" f +doubleTreeToIndentList src/Dodge/DoubleTree.hs 95;" f doubleV2 src/Geometry.hs 168;" f drawARHUD src/Dodge/Creature/State.hs 322;" f drawAimSweep src/Dodge/Render/Picture.hs 271;" f @@ -4232,7 +4232,7 @@ drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f dropAll src/Dodge/Creature/State.hs 128;" f dropExcept src/Dodge/Creature/Action.hs 166;" f -dropInventoryPath src/Dodge/HeldUse.hs 1396;" f +dropInventoryPath src/Dodge/HeldUse.hs 1400;" 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 @@ -4241,15 +4241,15 @@ dssNearCirc src/Dodge/Zoning/Cloud.hs 39;" f dssNearPoint src/Dodge/Zoning/Cloud.hs 30;" f dssNearRect src/Dodge/Zoning/Cloud.hs 36;" f dssNearSeg src/Dodge/Zoning/Cloud.hs 33;" f -dtIL src/Dodge/DoubleTree.hs 83;" f -dtToAdjRootParent src/Dodge/DoubleTree.hs 146;" f -dtToAdjRootParentEither src/Dodge/DoubleTree.hs 154;" f -dtToAdjacency src/Dodge/DoubleTree.hs 91;" f -dtToIntMapWithRoot src/Dodge/DoubleTree.hs 99;" f -dtToLRAdj src/Dodge/DoubleTree.hs 119;" f -dtToLRAdjEither src/Dodge/DoubleTree.hs 131;" f -dtToRootIntMap' src/Dodge/DoubleTree.hs 104;" f -dtToUpDownAdj src/Dodge/DoubleTree.hs 109;" f +dtIL src/Dodge/DoubleTree.hs 98;" f +dtToAdjRootParent src/Dodge/DoubleTree.hs 161;" f +dtToAdjRootParentEither src/Dodge/DoubleTree.hs 169;" f +dtToAdjacency src/Dodge/DoubleTree.hs 106;" f +dtToIntMapWithRoot src/Dodge/DoubleTree.hs 114;" f +dtToLRAdj src/Dodge/DoubleTree.hs 134;" f +dtToLRAdjEither src/Dodge/DoubleTree.hs 146;" f +dtToRootIntMap' src/Dodge/DoubleTree.hs 119;" f +dtToUpDownAdj src/Dodge/DoubleTree.hs 124;" f dummyMenuOption src/Dodge/Menu/Option.hs 74;" f dustColor src/Shader/Poke/Cloud.hs 71;" f dustSpringVel src/Dodge/Update.hs 796;" f @@ -4347,7 +4347,7 @@ firstWorldLoad appDodge/Main.hs 77;" f fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 38;" f -flameMuzzles src/Dodge/HeldUse.hs 312;" f +flameMuzzles src/Dodge/HeldUse.hs 313;" f flameShield src/Dodge/Item/Equipment.hs 33;" f flameSize src/Dodge/Flame/Size.hs 5;" f flameSpitter src/Dodge/Item/Held/SprayGuns.hs 23;" f @@ -4355,7 +4355,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 739;" f +flareCircleAt src/Dodge/HeldUse.hs 740;" 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 @@ -4415,14 +4415,14 @@ fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f g src/ShortShow.hs 33;" f gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f -gadgetEffect src/Dodge/HeldUse.hs 48;" f +gadgetEffect src/Dodge/HeldUse.hs 49;" f gameOverMenu src/Dodge/Menu.hs 187;" f gameRoomFromRoom src/Dodge/Layout.hs 161;" f 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 1182;" f +gasType src/Dodge/HeldUse.hs 1184;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 22;" f generateGraphs src/Dodge/LevelGen.hs 39;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f @@ -4437,11 +4437,11 @@ getAimZoom src/Dodge/Update/Camera.hs 135;" f getAmmoLinks src/Dodge/Item/Grammar.hs 110;" f getArguments src/Dodge/Update/Scroll.hs 178;" f getArguments' src/Dodge/Update/Scroll.hs 166;" f -getAttachedSFLink src/Dodge/HeldUse.hs 809;" f +getAttachedSFLink src/Dodge/HeldUse.hs 811;" f getAutoSpringLinks src/Dodge/Item/Grammar.hs 89;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 171;" f -getBulletType src/Dodge/HeldUse.hs 928;" f +getBulletType src/Dodge/HeldUse.hs 930;" f getCloseObj src/Dodge/Update/Input/InGame.hs 515;" f getCommands src/Dodge/Terminal.hs 117;" f getCommandsHelp src/Dodge/Terminal.hs 75;" f @@ -4449,17 +4449,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 1310;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1313;" f getInventoryPath src/Dodge/Inventory/Path.hs 8;" f getItemValue src/Dodge/Inventory/SelectionList.hs 143;" f -getLaserColor src/Dodge/HeldUse.hs 755;" f -getLaserDamage src/Dodge/HeldUse.hs 752;" f -getLaserPhaseV src/Dodge/HeldUse.hs 749;" f +getLaserColor src/Dodge/HeldUse.hs 756;" f +getLaserDamage src/Dodge/HeldUse.hs 753;" f +getLaserPhaseV src/Dodge/HeldUse.hs 750;" 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 1302;" f +getPJStabiliser src/Dodge/HeldUse.hs 1305;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 8;" f getRootItemBounds src/Dodge/Render/HUD.hs 95;" f @@ -4469,7 +4469,7 @@ getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 126;" f getTiles src/Dodge/Layout.hs 208;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f -getVolleyBurst src/Dodge/HeldUse.hs 104;" f +getVolleyBurst src/Dodge/HeldUse.hs 105;" f getWallSPic src/Dodge/Render/Walls.hs 51;" f getWindowSize src/Dodge/WindowSize.hs 5;" f gimbal src/Dodge/Item/Scope.hs 153;" f @@ -4519,14 +4519,14 @@ hackOutline src/Dodge/Render/Outline.hs 5;" f 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 76;" f +hammerCheck src/Dodge/HeldUse.hs 77;" 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 90;" f +handlePos src/Dodge/Item/HeldOffset.hs 95;" f handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 18;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f @@ -4540,7 +4540,7 @@ hat src/Dodge/Item/Equipment.hs 76;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 79;" f headLampShape src/Dodge/Item/Draw/SPic.hs 441;" f -headMap src/Dodge/DoubleTree.hs 199;" f +headMap src/Dodge/DoubleTree.hs 214;" f heal src/Dodge/Item/Consumable.hs 17;" f heal25 src/Dodge/Item/Consumable.hs 14;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 483;" f @@ -4549,24 +4549,24 @@ healthTest src/Dodge/Room/LasTurret.hs 95;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f heldAimStance src/Dodge/Item/AimStance.hs 22;" f heldAimZoom src/Dodge/Update/Camera.hs 140;" f -heldEffect src/Dodge/HeldUse.hs 63;" f -heldEffectMuzzles src/Dodge/HeldUse.hs 145;" f -heldEffectNoHammerCheck src/Dodge/HeldUse.hs 66;" f -heldHandlePos src/Dodge/Item/HeldOffset.hs 95;" f +heldEffect src/Dodge/HeldUse.hs 64;" f +heldEffectMuzzles src/Dodge/HeldUse.hs 146;" f +heldEffectNoHammerCheck src/Dodge/HeldUse.hs 67;" f +heldHandlePos src/Dodge/Item/HeldOffset.hs 100;" 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 491;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1068;" f -heldItemMuzzles src/Dodge/HeldUse.hs 173;" f -heldItemOffset src/Dodge/Item/HeldOffset.hs 72;" f -heldItemOrient2D src/Dodge/Item/HeldOffset.hs 29;" f -heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 34;" f -heldItemRifling src/Dodge/HeldUse.hs 1112;" f +heldItemInvLock src/Dodge/HeldUse.hs 492;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1070;" f +heldItemMuzzles src/Dodge/HeldUse.hs 174;" f +heldItemOffset src/Dodge/Item/HeldOffset.hs 77;" f +heldItemOrient2D src/Dodge/Item/HeldOffset.hs 34;" f +heldItemRelativeOrient src/Dodge/Item/HeldOffset.hs 39;" f +heldItemRifling src/Dodge/HeldUse.hs 1114;" 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 -heldTorqueAmount src/Dodge/HeldUse.hs 634;" f +heldTorqueAmount src/Dodge/HeldUse.hs 635;" f heldTriggerType src/Dodge/BaseTriggerType.hs 17;" f heldUseDelay src/Dodge/Item/UseDelay.hs 18;" f helpCommand src/Dodge/Terminal.hs 66;" f @@ -4590,7 +4590,7 @@ humanoidAIList src/Dodge/Humanoid.hs 182;" f iShape src/Dodge/Placement/Instance/LightSource.hs 73;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f -ildtPropagate src/Dodge/DoubleTree.hs 62;" f +ildtPropagate src/Dodge/DoubleTree.hs 77;" f impulsiveAIBefore src/Dodge/Creature/Impulse.hs 23;" f inLink src/Dodge/RoomLink.hs 113;" f inSegArea src/Geometry/Intersect.hs 298;" f @@ -4681,7 +4681,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 765;" f +isAmmoIntLink src/Dodge/HeldUse.hs 766;" 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 @@ -4718,7 +4718,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 815;" f +itemDetectorEffect src/Dodge/HeldUse.hs 817;" 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 @@ -4730,9 +4730,10 @@ itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 20;" f itemInternalValue src/Dodge/Item/Display.hs 33;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemInvLock src/Dodge/HeldUse.hs 486;" f -itemMuzzles src/Dodge/HeldUse.hs 158;" f -itemRandomOffset src/Dodge/HeldUse.hs 1005;" f +itemInvLock src/Dodge/HeldUse.hs 487;" f +itemMuzzles src/Dodge/HeldUse.hs 159;" f +itemRandomOffset src/Dodge/HeldUse.hs 1007;" f +itemRelativeOrient src/Dodge/Item/HeldOffset.hs 144;" 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 @@ -4740,7 +4741,7 @@ itemScan src/Dodge/Item/Scope.hs 63;" f itemScroll src/Dodge/Update/Scroll.hs 52;" f itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 120;" f itemScrollValue src/Dodge/Inventory/SelectionList.hs 147;" f -itemSidePush src/Dodge/HeldUse.hs 432;" f +itemSidePush src/Dodge/HeldUse.hs 433;" f itemString src/Dodge/Item/Display.hs 55;" f itemToBreakLists src/Dodge/Item/Grammar.hs 34;" f itemToFunction src/Dodge/Item/Grammar.hs 116;" f @@ -4789,19 +4790,21 @@ lasTunnel src/Dodge/Room/LasTurret.hs 126;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 167;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 38;" f laser src/Dodge/Item/Held/BatteryGuns.hs 41;" f -lastMap src/Dodge/DoubleTree.hs 203;" f +lastMap src/Dodge/DoubleTree.hs 218;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 74;" f -ldtIL src/Dodge/DoubleTree.hs 175;" f -ldtPropagate src/Dodge/DoubleTree.hs 20;" f -ldtPropagateFold src/Dodge/DoubleTree.hs 32;" f -ldtPropagateFoldTree src/Dodge/DoubleTree.hs 49;" f -ldtPropagateIndices src/Dodge/DoubleTree.hs 72;" f +ldtIL src/Dodge/DoubleTree.hs 190;" f +ldtPropagate src/Dodge/DoubleTree.hs 35;" f +ldtPropagate' src/Dodge/DoubleTree.hs 26;" f +ldtPropagateFold src/Dodge/DoubleTree.hs 47;" f +ldtPropagateFoldTree src/Dodge/DoubleTree.hs 64;" f +ldtPropagateIndices src/Dodge/DoubleTree.hs 87;" f +ldtStartPropagate src/Dodge/DoubleTree.hs 18;" f ldtToDT src/Dodge/DoubleTree.hs 15;" f -ldtToIM src/Dodge/DoubleTree.hs 169;" f -ldtToIndentList src/Dodge/DoubleTree.hs 172;" f -ldtToLoc src/Dodge/DoubleTree.hs 218;" f +ldtToIM src/Dodge/DoubleTree.hs 184;" f +ldtToIndentList src/Dodge/DoubleTree.hs 187;" f +ldtToLoc src/Dodge/DoubleTree.hs 233;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 180;" f leftIsParentCombine src/Dodge/Item/Grammar.hs 164;" f @@ -4840,7 +4843,7 @@ lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 394;" f lnkPosDir src/Dodge/RoomLink.hs 97;" f loadDodgeConfig src/Dodge/Config/Load.hs 9;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f -loadMuzzle src/Dodge/HeldUse.hs 679;" f +loadMuzzle src/Dodge/HeldUse.hs 680;" f loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f @@ -4848,13 +4851,13 @@ loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f loadingScreen src/Dodge/Concurrent.hs 56;" f loadingScreen src/Dodge/Menu/Loading.hs 8;" f loadme src/Dodge/Debug/Terminal.hs 139;" f -locGoHelp src/Dodge/DoubleTree.hs 258;" f -locGoLeft src/Dodge/DoubleTree.hs 247;" f -locGoRight src/Dodge/DoubleTree.hs 252;" f -locLeftmost src/Dodge/DoubleTree.hs 240;" f -locRightmost src/Dodge/DoubleTree.hs 243;" f -locToTop src/Dodge/DoubleTree.hs 235;" f -locUp src/Dodge/DoubleTree.hs 222;" f +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 +locRightmost src/Dodge/DoubleTree.hs 258;" f +locToTop src/Dodge/DoubleTree.hs 250;" f +locUp src/Dodge/DoubleTree.hs 237;" f lockInv src/Dodge/Inventory/Lock.hs 9;" f lockInvFor src/Dodge/Item/Weapon/TriggerType.hs 50;" f lockRoomKeyItems src/Dodge/LockAndKey.hs 25;" f @@ -4883,7 +4886,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 949;" f +magAmmoParams src/Dodge/HeldUse.hs 951;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 11;" f magShield src/Dodge/Item/Equipment.hs 27;" f magV src/Geometry/Vector.hs 171;" f @@ -4898,8 +4901,8 @@ 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 1049;" f -makeBullet' src/Dodge/HeldUse.hs 991;" f +makeBullet src/Dodge/HeldUse.hs 1051;" f +makeBullet' src/Dodge/HeldUse.hs 993;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f @@ -4925,7 +4928,7 @@ makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 11;" f makeGrid src/Grid.hs 46;" f makeIntInterval src/Dodge/Zoning/Base.hs 35;" f makeMovingEB src/Dodge/EnergyBall.hs 74;" f -makeMuzzleFlare src/Dodge/HeldUse.hs 700;" f +makeMuzzleFlare src/Dodge/HeldUse.hs 701;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 35;" f makePathBetweenPs src/Dodge/Path.hs 54;" f @@ -4980,11 +4983,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 1237;" f -mcShootLaser src/Dodge/HeldUse.hs 1230;" f +mcShootAuto src/Dodge/HeldUse.hs 1239;" f +mcShootLaser src/Dodge/HeldUse.hs 1232;" f mcTriggerVal src/Dodge/Machine/Update.hs 99;" f mcTypeUpdate src/Dodge/Machine/Update.hs 28;" f -mcUseHeld src/Dodge/HeldUse.hs 1156;" f +mcUseHeld src/Dodge/HeldUse.hs 1158;" 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 @@ -5077,7 +5080,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 725;" f +muzFlareAt src/Dodge/HeldUse.hs 726;" 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 @@ -5153,11 +5156,11 @@ orderAroundFirst src/Geometry/Polygon.hs 82;" f orderAroundFirstReverse src/Geometry/Polygon.hs 78;" f orderPolygon src/Geometry/Polygon.hs 87;" f orderPolygonAround src/Geometry/Polygon.hs 70;" f -orientAttachment src/Dodge/Item/Orientation.hs 35;" f -orientByLink src/Dodge/Item/Orientation.hs 28;" f +orientAttachment src/Dodge/Item/Orientation.hs 30;" f +orientByLink src/Dodge/Item/Orientation.hs 23;" f orientChild src/Dodge/Item/Orientation.hs 15;" f -orientLocation src/Dodge/Item/Orientation.hs 53;" f -orientLocation' src/Dodge/Item/Orientation.hs 45;" f +orientLocation src/Dodge/Item/Orientation.hs 51;" f +orientLocation' src/Dodge/Item/Orientation.hs 40;" f orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f outLink src/Dodge/RoomLink.hs 105;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f @@ -5356,8 +5359,8 @@ preCritStart src/Dodge/Room/Start.hs 82;" f preloadRender src/Preload/Render.hs 30;" f premapMaybe src/FoldlHelp.hs 26;" f prependTwo src/Geometry.hs 176;" f -prettyDT src/Dodge/DoubleTree.hs 208;" f -prettyLDT src/Dodge/DoubleTree.hs 213;" f +prettyDT src/Dodge/DoubleTree.hs 223;" f +prettyLDT src/Dodge/DoubleTree.hs 228;" f prettyShort src/AesonHelp.hs 11;" f primeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 581;" f printColumnTitles src/Dodge/Tree/Shift.hs 142;" f @@ -5377,6 +5380,7 @@ propSPic src/Dodge/Prop/Draw.hs 15;" f propSetToggleAnd src/Dodge/Prop/Update.hs 41;" f propUpdateIf src/Dodge/Prop/Update.hs 25;" f propUpdatePosition src/Dodge/Prop/Update.hs 30;" f +propagateOrientation src/Dodge/Item/Orientation.hs 60;" f ps0 src/Dodge/LevelGen/PlacementHelper.hs 51;" f ps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 79;" f ps0PushPSw src/Dodge/LevelGen/PlacementHelper.hs 83;" f @@ -5471,7 +5475,7 @@ randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 195;" f readSaveSlot src/Dodge/Save.hs 45;" f -recoilAmount src/Dodge/HeldUse.hs 513;" f +recoilAmount src/Dodge/HeldUse.hs 514;" f rectNSWE src/Geometry/Polygon.hs 13;" f rectVV src/Geometry/Polygon.hs 38;" f rectWH src/Geometry/Polygon.hs 17;" f @@ -5479,7 +5483,7 @@ rectXH src/Geometry/Polygon.hs 32;" f rectXY src/Geometry/Polygon.hs 35;" f rectanglePairs src/Dodge/LevelGen/DoorPane.hs 7;" f red src/Color.hs 14;" f -reduceLocLDT src/Dodge/DoubleTree.hs 303;" f +reduceLocLDT src/Dodge/DoubleTree.hs 318;" f reflDirWall src/Dodge/Base/Wall.hs 16;" f reflVelWall src/Dodge/Base/Wall.hs 24;" f reflVelWallDamp src/Dodge/Base/Wall.hs 20;" f @@ -5498,7 +5502,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 916;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 918;" f removeDot src/ShortShow.hs 29;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f @@ -5710,7 +5714,7 @@ setOldPos src/Dodge/Update.hs 475;" 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 470;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 467;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 334;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -5778,15 +5782,15 @@ 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 330;" f -shineTorch src/Dodge/Creature/State.hs 413;" f -shootBullet src/Dodge/HeldUse.hs 981;" f +shineTorch src/Dodge/Creature/State.hs 410;" f +shootBullet src/Dodge/HeldUse.hs 983;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f -shootLaser src/Dodge/HeldUse.hs 895;" f +shootLaser src/Dodge/HeldUse.hs 897;" f shootOutPassage src/Dodge/Room/RezBox.hs 74;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f -shootTeslaArc src/Dodge/HeldUse.hs 1256;" f +shootTeslaArc src/Dodge/HeldUse.hs 1258;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f -shootTractorBeam src/Dodge/HeldUse.hs 848;" f +shootTractorBeam src/Dodge/HeldUse.hs 850;" 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 @@ -5794,7 +5798,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 75;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 80;" f shoulderSH src/Dodge/Creature/Picture.hs 133;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f showAttachItem src/Dodge/Item/Display.hs 90;" f @@ -5944,7 +5948,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 78;" 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 @@ -6085,19 +6089,19 @@ topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 58;" f torch src/Dodge/Item/Held/Utility.hs 23;" f torchShape src/Dodge/Item/Draw/SPic.hs 267;" f -torqueAmount src/Dodge/HeldUse.hs 629;" f +torqueAmount src/Dodge/HeldUse.hs 630;" f torqueCr src/Dodge/WorldEffect.hs 67;" 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 860;" f +tractorBeamAt src/Dodge/HeldUse.hs 862;" 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 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 24;" f +transToHandle src/Dodge/Item/HeldOffset.hs 29;" f translate src/Picture/Base.hs 116;" f translate3 src/Picture/Base.hs 120;" f translateFloatingCamera src/Dodge/Update/Camera.hs 45;" f @@ -6163,13 +6167,13 @@ trySynthBullet src/Dodge/Creature/State.hs 225;" f tryUseParent src/Dodge/Creature/State.hs 218;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f -turretItemOffset src/Dodge/Item/HeldOffset.hs 19;" f +turretItemOffset src/Dodge/Item/HeldOffset.hs 24;" f tweenAngles src/Geometry/Vector.hs 195;" f 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 87;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 92;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 150;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 533;" f @@ -6246,7 +6250,7 @@ updateInGameCamera src/Dodge/Update/Camera.hs 78;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 400;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f -updateItemTargeting src/Dodge/Creature/State.hs 439;" f +updateItemTargeting src/Dodge/Creature/State.hs 436;" f updateItemWithOrientation src/Dodge/Creature/State.hs 304;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f @@ -6331,26 +6335,26 @@ useBulletPayload src/Dodge/Bullet.hs 113;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f useDelay src/Dodge/Item/UseDelay.hs 12;" f -useGasParams src/Dodge/HeldUse.hs 1161;" f +useGasParams src/Dodge/HeldUse.hs 1163;" f useHotkey src/Dodge/Creature/YourControl.hs 70;" f -useInventoryPath src/Dodge/HeldUse.hs 1427;" f +useInventoryPath src/Dodge/HeldUse.hs 1431;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 20;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 27;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f -useLoadedAmmo src/Dodge/HeldUse.hs 769;" f +useLoadedAmmo src/Dodge/HeldUse.hs 770;" f useLocation src/Dodge/Creature/Impulse/UseItem.hs 65;" 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 1387;" f +useRewindGun src/Dodge/HeldUse.hs 1391;" 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 1368;" f +useStopWatch src/Dodge/HeldUse.hs 1372;" f useStopWatch src/Dodge/Luse.hs 21;" f -useTimeCheck src/Dodge/HeldUse.hs 112;" f +useTimeCheck src/Dodge/HeldUse.hs 113;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 127;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1376;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1380;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 196;" f @@ -6374,7 +6378,7 @@ verticalLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 38;" f verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 24;" f -vgunMuzzles src/Dodge/HeldUse.hs 328;" f +vgunMuzzles src/Dodge/HeldUse.hs 329;" f viewBoundaries src/Dodge/Debug/Picture.hs 304;" f viewClipBounds src/Dodge/Debug/Picture.hs 313;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 186;" f @@ -6386,7 +6390,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 830;" f +walkNozzle src/Dodge/HeldUse.hs 832;" f walkableNodeNear src/Dodge/Path.hs 48;" f wallBlips src/Dodge/RadarSweep.hs 98;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 52;" f @@ -6394,7 +6398,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 1421;" f +warmupSound src/Dodge/HeldUse.hs 1425;" f warningRooms src/Dodge/Room/Warning.hs 28;" f wasdAim src/Dodge/Creature/YourControl.hs 126;" f wasdDir src/Dodge/WASD.hs 17;" f