From 53c981718c66924a828f20fc9af99a019c12e211 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 26 Dec 2024 10:16:18 +0000 Subject: [PATCH] Start allowing for more granular control of remote projectiles, cleanup --- src/Dodge/Creature.hs | 1 + src/Dodge/Data/ComposedItem.hs | 2 + src/Dodge/Data/Item/Combine.hs | 1 + src/Dodge/Data/Item/Use/Consumption/Ammo.hs | 5 +- src/Dodge/HeldUse.hs | 8 +- src/Dodge/Item.hs | 1 + src/Dodge/Item/Display.hs | 37 +- src/Dodge/Item/Grammar.hs | 2 + src/Dodge/Item/InventoryColor.hs | 1 + src/Dodge/Item/Scope.hs | 5 + src/Dodge/Projectile/Create.hs | 18 +- src/Dodge/Projectile/Update.hs | 32 +- src/Dodge/Render/HUD.hs | 4 +- tags | 374 ++++++++++---------- 14 files changed, 273 insertions(+), 218 deletions(-) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index b6d3b1718..9ccaf6712 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -247,6 +247,7 @@ inventoryX c = case c of , megaShellMag , homingModule , remoteScreen + , remoteController , remoteDetonator , launcherX 3 , megaShellMag diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 7d37a5640..5fe18a5cd 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -21,6 +21,7 @@ data ComposeLinkType | AmmoEffectLink | WeaponScopeLink | WeaponTargetingLink + | RemoteControllerLink | RemoteScreenLink | RemoteDetonatorLink | AugmentedHUDLink @@ -38,6 +39,7 @@ data ItemStructuralFunction | AugmentedHUDSF | AmmoMagSF AmmoType | RemoteScreenSF + | RemoteControllerSF | RemoteDetonatorSF | UncomposableIsolateSF | AmmoModifierSF AmmoType diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index fbbeb5697..d14bf465d 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -70,6 +70,7 @@ data AttachType = ZOOMSCOPE | BULLETSYNTH | REMOTESCREEN + | REMOTECONTROLLER | REMOTEDETONATOR | HOMINGMODULE | AUGMENTEDHUD diff --git a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs index 33d2fd3cc..833805993 100644 --- a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs +++ b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs @@ -33,7 +33,10 @@ data ProjectileUpdate | ReduceSpinPU {_pjuReduceSpin :: Float} | DestroyPU {_pjuScreenID :: Maybe (NewInt ItmInt), _pjuTimer :: Int} | TimePU - | CollisionEffectPU {_pjuScreenID :: Maybe (NewInt ItmInt)} + | CollisionEffectPU {_pjuControlID :: Maybe (NewInt ItmInt) + ,_pjuDetonatorID :: Maybe (NewInt ItmInt) + ,_pjuScreenID :: Maybe (NewInt ItmInt) + } deriving (Show, Eq, Ord, Read) --Generic, Flat) data AmmoType diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index e06c23fcf..206b660f8 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -593,7 +593,7 @@ determineProjectileTracking :: LabelDoubleTree ComposeLinkType Item -> LabelDoubleTree ComposeLinkType Item -> ProjectileHoming -determineProjectileTracking magtree itmtree = case lookup RemoteScreenLink (magtree ^. ldtLeft) of +determineProjectileTracking magtree itmtree = case lookup RemoteControllerLink (magtree ^. ldtLeft) of Just screen -> HomeUsingRemoteScreen (screen ^. ldtValue . itID) Nothing -> fromMaybe NoHoming $ do _ <- lookup AmmoTargetingLink (magtree ^. ldtLeft) -- should not have to give a direction @@ -611,10 +611,14 @@ createProjectile magtree muz itmtree cr = fromMaybe failsound $ do magid <- magtree ^? ldtValue . itLocation . ilInvID ammoitem <- cr ^? crInv . ix magid let homing = determineProjectileTracking magtree itmtree + rdetonate = fmap (^. ldtValue . itID) $ + lookup RemoteDetonatorLink (magtree ^. ldtLeft) + rscreen = fmap (^. ldtValue . itID) $ + lookup RemoteScreenLink (magtree ^. ldtLeft) aparams <- ((magtree ^? ldtLeft) >>= lookup AmmoPayloadLink >>= (^? ldtValue . itType . ibtAttach . shellPayload)) <|> ammoitem ^? itConsumables . magParams . ampPayload return $ - createShell homing aparams muz cr + createShell homing rdetonate rscreen aparams muz cr . startthesound where -- the sound should be moved to the projectile firing diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index ab28fe102..555221f55 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -39,6 +39,7 @@ itemFromAttachType at = case at of ZOOMSCOPE -> zoomScope BULLETSYNTH -> bulletSynthesizer REMOTESCREEN -> remoteScreen + REMOTECONTROLLER -> remoteController REMOTEDETONATOR -> remoteDetonator -- ROCKETHOMER -> rocketHomer HOMINGMODULE -> homingModule diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index d8a364513..b96205e9a 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE LambdaCase #-} module Dodge.Item.Display ( itemDisplay, itemBaseName, @@ -13,6 +14,10 @@ import LensHelp import Padding import ShortShow +-- Principles: base names should identify an item, numbers can change based on a +-- variety of factors but typically don't depend on functional quality, +-- colour gives an indication of an item's function within a structure + itemDisplay :: Creature -> ComposedItem -> [String] itemDisplay cr ci = zipWithDefaults @@ -39,7 +44,7 @@ itemDisplayPad ls rs basicItemDisplay :: Item -> [String] basicItemDisplay itm = Prelude.take (itInvHeight itm) $ - itemBaseName itm : + itemBaseName (itm ^. itType) : --catMaybes [maybeWarmupStatus itm, maybeRateStatus itm] catMaybes [maybeWarmupStatus itm] ++ repeat "*" @@ -47,36 +52,28 @@ basicItemDisplay itm = itemString :: Item -> String itemString = head . basicItemDisplay -itemBaseName :: Item -> String -itemBaseName itm = case _itType itm of +-- this should be immutable with the item type +itemBaseName :: ItemType -> String +itemBaseName = \case CRAFT str -> show str HELD hit -> case hit ^? xNum of Just i -> takeWhile (/= ' ') (show hit) ++ show i Nothing -> show hit EQUIP eit -> showEquipItem eit - ATTACH ait -> showAttachItem ait itm + ATTACH ait -> showAttachItem ait AMMOMAG ait -> show ait TARGETING tt -> show tt -- BULLETMOD (BulletModTrajectory btt) -> show btt BULLETMOD (BulletModPayload btt) -> show btt BULLETMOD (BulletModEffect btt) -> show btt -showAttachItem :: AttachType -> Item -> String -showAttachItem t itm = case t of +showAttachItem :: AttachType -> String +showAttachItem t = case t of ZOOMSCOPE -> "ZOOMSCOPE" BULLETSYNTH -> "BSYNTH" - REMOTESCREEN -> - "REMOTE SCREEN " - ++ maybe - mempty - show - (itm ^? itUse . uaParams . apLinkedProjectile . _Just) - REMOTEDETONATOR -> - "REM.DETONATOR" - ++ maybe - mempty - show - (itm ^? itUse . uaParams . apLinkedProjectile . _Just) + REMOTESCREEN -> "REM.SCREEN" + REMOTECONTROLLER -> "REM.CONTR0LR" + REMOTEDETONATOR -> "REM.DETONATR" HOMINGMODULE -> "HOMING MOD" AUGMENTEDHUD -> "AUGMENTED HUD" SHELLPAYLOAD x -> show x @@ -86,6 +83,9 @@ showEquipItem eit = case eit of INVISIBILITYEQUIPMENT esite -> "INVISIBILITY " ++ show esite _ -> show eit +-- this can change, but probably won't when (say) dropped and then picked up +-- again +-- that is to say, it should not change based on functional positioning itemNumberDisplay :: Creature -> ComposedItem -> [String] itemNumberDisplay cr ci | EQUIP WRIST_ECG <- ci ^. _1 . itType = @@ -98,6 +98,7 @@ itemNumberDisplay cr ci ["!TARG!"] | Just x <- ci ^? _1 . itConsumables . magLoadStatus . iaLoaded = [shortShow x] | UseAttach (APInt i) <- ci ^. _1 . itUse = [show i] + | UseAttach (APLinkProjectile i) <- ci ^. _1 . itUse = [show i] | UseScope OpticScope{_opticZoom = x} <- ci ^. _1 . itUse = [shortShow x] | otherwise = mempty diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index ea264be7d..28b34ce23 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -67,6 +67,7 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of let screenanddet = case atype of LauncherAmmo -> [ (RemoteScreenSF, RemoteScreenLink) , (RemoteDetonatorSF, RemoteDetonatorLink) + , (RemoteControllerSF, RemoteControllerLink) ] _ -> [] return @@ -106,6 +107,7 @@ itemToFunction itm = case itm ^. itType of AmmoMagSF amtype AMMOMAG{} -> maybe UncomposableIsolateSF AmmoMagSF $ itm ^? itConsumables . magType ATTACH REMOTESCREEN -> RemoteScreenSF + ATTACH REMOTECONTROLLER -> RemoteControllerSF ATTACH REMOTEDETONATOR -> RemoteDetonatorSF ATTACH BULLETSYNTH -> AmmoModifierSF BulletAmmo ATTACH ZOOMSCOPE -> WeaponScopeSF diff --git a/src/Dodge/Item/InventoryColor.hs b/src/Dodge/Item/InventoryColor.hs index b70d2f4ce..1606aa6d9 100644 --- a/src/Dodge/Item/InventoryColor.hs +++ b/src/Dodge/Item/InventoryColor.hs @@ -18,6 +18,7 @@ itemInvColor ci = case ci ^. _2 of AugmentedHUDSF -> rose AmmoMagSF{} -> red RemoteScreenSF -> azure + RemoteControllerSF -> azure RemoteDetonatorSF -> azure UncomposableIsolateSF -> greyN 0.5 AmmoModifierSF{} -> orange diff --git a/src/Dodge/Item/Scope.hs b/src/Dodge/Item/Scope.hs index 57a0d79be..d7f75e537 100644 --- a/src/Dodge/Item/Scope.hs +++ b/src/Dodge/Item/Scope.hs @@ -3,6 +3,7 @@ module Dodge.Item.Scope ( zoomScope, targetingScope, remoteScreen, + remoteController, remoteDetonator, homingModule, -- bulletTargetingModule, @@ -61,3 +62,7 @@ remoteScreen = makeAttach REMOTESCREEN remoteDetonator :: Item remoteDetonator = makeAttach REMOTEDETONATOR & itUse . uaParams .~ APLinkProjectile Nothing + +remoteController :: Item +remoteController = makeAttach REMOTECONTROLLER + & itUse . uaParams .~ APLinkProjectile Nothing diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index a60db60fa..e3079dd6d 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -2,6 +2,9 @@ module Dodge.Projectile.Create ( createShell, ) where +import NewInt +--import Dodge.Data.ComposedItem +--import Dodge.Data.DoubleTree import Dodge.Item.Location import Data.Maybe import Dodge.Data.World @@ -16,9 +19,13 @@ homingDrawType ht = case ht of HomeUsingTargeting {} -> DrawRemoteShell -- assumes the mscreen is in your inventory -createShell :: ProjectileHoming -> Payload -> Muzzle -> Creature -> World -> World -createShell homing payload muz cr w = w +createShell :: ProjectileHoming + -> Maybe (NewInt ItmInt) + -> Maybe (NewInt ItmInt) + -> Payload -> Muzzle -> Creature -> World -> World +createShell homing mdetonator mscreen payload muz cr w = w & updatescreen + & updatedetonator & cWorld . lWorld . projectiles . at i ?~ Shell { _prjPos = pos @@ -33,7 +40,7 @@ createShell homing payload muz cr w = w , _prjPayload = payload , _prjTimer = 350 , _prjUpdates = - [ CollisionEffectPU (homing ^? phRemoteID) --Just screenid) + [ CollisionEffectPU (homing ^? phRemoteID) mdetonator mscreen , TimePU , StartSpinPU 335 (_crID cr) spinamount , RemoteDirectionPU (350 - thrustdelay) 0 homing @@ -45,6 +52,11 @@ createShell homing payload muz cr w = w spindrag = 1 spinamount = 2 thrustdelay = 20 + updatedetonator = fromMaybe id $ do + screenid <- mdetonator + return $ pointerToItemID screenid . itUse . uaParams + . apLinkedProjectile + ?~ i updatescreen = fromMaybe id $ do screenid <- homing ^? phRemoteID return $ pointerToItemID screenid . itUse . uaParams diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index 9e1322e2a..591bf1243 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -25,8 +25,8 @@ updateProjectile pj w = foldl' (\w' pu -> upProjectile pu pj w') w (_prjUpdates upProjectile :: ProjectileUpdate -> Projectile -> World -> World upProjectile pu pj = case pu of - CollisionEffectPU mscreenid -> shellCollisionCheck - mscreenid pj + CollisionEffectPU mcontrolid mdetonatorid mscreenid -> shellCollisionCheck + mcontrolid mdetonatorid mscreenid pj TimePU -> decTimMvVel pj ThrustPU st et | act st et -> doThrust pj @@ -47,14 +47,17 @@ upProjectile pu pj = case pu of act st et = time <= st && time >= et --shellCollisionCheck :: (Projectile -> World -> World) -> Projectile -> World -> World -shellCollisionCheck :: Maybe (NewInt ItmInt) -> Projectile -> World -> World -shellCollisionCheck f pj w +shellCollisionCheck :: Maybe (NewInt ItmInt) + -> Maybe (NewInt ItmInt) + -> Maybe (NewInt ItmInt) + -> Projectile -> World -> World +shellCollisionCheck controlid detid screenid pj w | time > 330 && circOnSomeWall oldPos 4 w = g | time <= 330 && anythingHitCirc 2 oldPos newPos w = g | time <= 0 = g | otherwise = w where - g = explodeShell f pj w + g = explodeShell controlid detid screenid pj w time = _prjTimer pj oldPos = _prjPos pj newPos = oldPos +.+ _prjVel pj @@ -154,12 +157,25 @@ decTimMvVel pj = vel = _prjVel pj pjid = _prjID pj -explodeShell :: Maybe (NewInt ItmInt) -> Projectile -> World -> World -explodeShell mitid pj w = +explodeShell :: Maybe (NewInt ItmInt) -> + Maybe (NewInt ItmInt) -> + Maybe (NewInt ItmInt) -> + Projectile -> World -> World +explodeShell controlid mdetid screenid pj w = w - & cWorld . lWorld . projectiles . ix pjid . prjUpdates .~ [DestroyPU mitid 30] + & cWorld . lWorld . projectiles . ix pjid . prjUpdates .~ [DestroyPU screenid 30] & cWorld . lWorld . projectiles . ix pjid . prjDraw .~ DrawBlankProjectile & usePayload (_prjPayload pj) (_prjPos pj) (_prjVel pj) & stopSoundFrom (ShellSound pjid) + & updatedetonator + & updatecontroller where + updatedetonator = fromMaybe id $ do + detid <- mdetid + return $ pointerToItemID detid . itUse . uaParams . apLinkedProjectile %~ deleteif + deleteif (Just x) | x == pjid = Nothing + deleteif x = x + updatecontroller = fromMaybe id $ do + cid <- controlid + return $ pointerToItemID cid . itUse . uaParams . apLinkedProjectile %~ deleteif pjid = pj ^. prjID diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 846f534b6..62a6f8a1e 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -289,8 +289,8 @@ drawRBOptions cfig w = fromMaybe mempty $ do | a == b - 1 = listCursorChooseBorderScale 0 1 (bc South) curpos 0 white 7 1 | otherwise = mempty otheritem j = fromMaybe "" $ do - itm <- you w ^? crInv . ix j - return $ itemBaseName itm + itype <- you w ^? crInv . ix j . itType + return $ itemBaseName ittype equipAllocString :: EquipmentAllocation -> String equipAllocString = \case diff --git a/tags b/tags index 06629861d..fe91fbf5d 100644 --- a/tags +++ b/tags @@ -20,19 +20,19 @@ <$> src/Dodge/Data/LWorld.hs 159;" o <$> src/Dodge/Data/Terminal.hs 131;" o AIUNIT src/Dodge/Data/Item/Combine.hs 52;" C -ALTERIFLE src/Dodge/Data/Item/Combine.hs 132;" C +ALTERIFLE src/Dodge/Data/Item/Combine.hs 134;" C AMMOMAG src/Dodge/Data/Item/Combine.hs 22;" C -AMR src/Dodge/Data/Item/Combine.hs 137;" C +AMR src/Dodge/Data/Item/Combine.hs 139;" C ANTIMATTER src/Dodge/Data/Item/Combine.hs 46;" C APInt src/Dodge/Data/Item/Use.hs 73;" C APLinkProjectile src/Dodge/Data/Item/Use.hs 71;" C APNothing src/Dodge/Data/Item/Use.hs 74;" C AQUAMARINE src/Color/Data.hs 24;" C ATTACH src/Dodge/Data/Item/Combine.hs 21;" C -AUGMENTEDHUD src/Dodge/Data/Item/Combine.hs 74;" C -AUTOAMR src/Dodge/Data/Item/Combine.hs 138;" C -AUTOPISTOL src/Dodge/Data/Item/Combine.hs 124;" C -AUTORIFLE src/Dodge/Data/Item/Combine.hs 133;" C +AUGMENTEDHUD src/Dodge/Data/Item/Combine.hs 76;" C +AUTOAMR src/Dodge/Data/Item/Combine.hs 140;" C +AUTOPISTOL src/Dodge/Data/Item/Combine.hs 126;" C +AUTORIFLE src/Dodge/Data/Item/Combine.hs 135;" C AZURE src/Color/Data.hs 23;" C AccessTerminal src/Dodge/Data/WorldEffect.hs 27;" C Action src/Dodge/Data/ActionPlan.hs 78;" t @@ -56,20 +56,20 @@ Ambush src/Dodge/Data/ActionPlan.hs 178;" C Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 6;" m Ammo src/Dodge/Item/Ammo.hs 1;" m AmmoEffectLink src/Dodge/Data/ComposedItem.hs 21;" C -AmmoEffectSF src/Dodge/Data/ComposedItem.hs 44;" C +AmmoEffectSF src/Dodge/Data/ComposedItem.hs 46;" C AmmoInLink src/Dodge/Data/ComposedItem.hs 16;" C AmmoMag src/Dodge/Data/Item.hs 34;" C -AmmoMagSF src/Dodge/Data/ComposedItem.hs 38;" C -AmmoMagType src/Dodge/Data/Item/Combine.hs 78;" t +AmmoMagSF src/Dodge/Data/ComposedItem.hs 39;" C +AmmoMagType src/Dodge/Data/Item/Combine.hs 80;" t AmmoModLink src/Dodge/Data/ComposedItem.hs 18;" C -AmmoModifierSF src/Dodge/Data/ComposedItem.hs 41;" C +AmmoModifierSF src/Dodge/Data/ComposedItem.hs 43;" C AmmoParams src/Dodge/Data/Item/Use.hs 110;" t AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 20;" C -AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 43;" C +AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 45;" C AmmoPerShot src/Dodge/Data/Item/Use.hs 159;" t AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 19;" C -AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 42;" C -AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" t +AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 44;" C +AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 41;" t AnRoom src/Dodge/Annotation/Data.hs 18;" C AnTree src/Dodge/Annotation/Data.hs 19;" C Analyser src/Dodge/Placement/Instance/Analyser.hs 1;" m @@ -99,8 +99,8 @@ AttachType src/Dodge/Data/Item/Combine.hs 69;" t Attention src/Dodge/Data/Creature/Perception.hs 60;" t AttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" C Audition src/Dodge/Data/Creature/Perception.hs 47;" t -AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 25;" C -AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 37;" C +AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 26;" C +AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 38;" C AutoAI src/Dodge/Data/Creature/Misc.hs 56;" C AutoCrit src/Dodge/Creature/AutoCrit.hs 1;" m AutoDoorObstacle src/Dodge/Data/PathGraph.hs 51;" C @@ -110,26 +110,26 @@ AuxAddition src/Shader/AuxAddition.hs 1;" m Avatar src/Dodge/Data/Creature/Misc.hs 70;" C Awareness src/Dodge/Data/Creature/Perception.hs 65;" t Awareness src/Dodge/Creature/Picture/Awareness.hs 1;" m -BANGCONE src/Dodge/Data/Item/Combine.hs 126;" C -BANGROD src/Dodge/Data/Item/Combine.hs 135;" C -BANGSTICK src/Dodge/Data/Item/Combine.hs 118;" C -BATTERY src/Dodge/Data/Item/Combine.hs 83;" C -BATTERYPACK src/Dodge/Data/Item/Combine.hs 107;" C -BELTMAG src/Dodge/Data/Item/Combine.hs 81;" C +BANGCONE src/Dodge/Data/Item/Combine.hs 128;" C +BANGROD src/Dodge/Data/Item/Combine.hs 137;" C +BANGSTICK src/Dodge/Data/Item/Combine.hs 120;" C +BATTERY src/Dodge/Data/Item/Combine.hs 85;" C +BATTERYPACK src/Dodge/Data/Item/Combine.hs 109;" C +BELTMAG src/Dodge/Data/Item/Combine.hs 83;" C BLACK src/Color/Data.hs 28;" C -BLINKER src/Dodge/Data/Item/Combine.hs 157;" C -BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 158;" C -BLOWTORCH src/Dodge/Data/Item/Combine.hs 144;" C +BLINKER src/Dodge/Data/Item/Combine.hs 159;" C +BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 160;" C +BLOWTORCH src/Dodge/Data/Item/Combine.hs 146;" C BLUE src/Color/Data.hs 17;" C -BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 127;" C +BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 129;" C BLUNT src/Dodge/Data/Damage/Type.hs 13;" C BQuad src/Geometry/Bezier.hs 9;" t -BRAINHAT src/Dodge/Data/Item/Combine.hs 98;" C -BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 106;" C -BULLETBELTPACK src/Dodge/Data/Item/Combine.hs 105;" C +BRAINHAT src/Dodge/Data/Item/Combine.hs 100;" C +BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 108;" C +BULLETBELTPACK src/Dodge/Data/Item/Combine.hs 107;" C BULLETMOD src/Dodge/Data/Item/Combine.hs 24;" C BULLETSYNTH src/Dodge/Data/Item/Combine.hs 71;" C -BURSTRIFLE src/Dodge/Data/Item/Combine.hs 134;" C +BURSTRIFLE src/Dodge/Data/Item/Combine.hs 136;" C BackdropCursor src/Dodge/Data/SelectionList.hs 21;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 15;" C Ball src/Dodge/Tesla/Ball.hs 1;" m @@ -159,7 +159,7 @@ BeamShooterParams src/Dodge/Data/Item/Use.hs 91;" C BeamSimple src/Dodge/Data/Beam.hs 50;" C BeamType src/Dodge/Data/Beam.hs 46;" t BecomePowerful src/Dodge/Data/Scenario.hs 9;" C -BeltBulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" C +BeltBulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 44;" C Bezier src/Geometry/Bezier.hs 1;" m BezierTrajectory src/Dodge/Data/Bullet.hs 51;" C BezierTrajectoryType src/Dodge/Data/Bullet.hs 58;" C @@ -219,7 +219,7 @@ Bullet src/Dodge/Data/Bullet.hs 17;" t Bullet src/Dodge/Bullet.hs 1;" m Bullet src/Dodge/Data/Bullet.hs 6;" m Bullet src/Dodge/Item/Weapon/Bullet.hs 1;" m -BulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 41;" C +BulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 43;" C BulletEffect src/Dodge/Data/Bullet.hs 35;" t BulletGun src/Dodge/Item/Held/BulletGun.hs 1;" m BulletMod src/Dodge/Data/Item/BulletMod.hs 10;" t @@ -245,13 +245,13 @@ CAMERA src/Dodge/Data/Item/Combine.hs 53;" C CAN src/Dodge/Data/Item/Combine.hs 34;" C CDoNothing src/Dodge/Data/Item/HeldUse.hs 15;" C CHARTREUSE src/Color/Data.hs 25;" C -CHEMFUELPOUCH src/Dodge/Data/Item/Combine.hs 84;" C +CHEMFUELPOUCH src/Dodge/Data/Item/Combine.hs 86;" C CHeal src/Dodge/Data/Item/HeldUse.hs 16;" C CIRCLE src/Dodge/Data/GenParams.hs 20;" C CME src/Dodge/Data/MuzzleEffect.hs 11;" C CONCUSSIVE src/Dodge/Data/Damage/Type.hs 22;" C CRAFT src/Dodge/Data/Item/Combine.hs 20;" C -CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 163;" C +CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 165;" C CREATURESENSOR src/Dodge/Data/Item/Combine.hs 63;" C CRUSHING src/Dodge/Data/Damage/Type.hs 16;" C CUTTING src/Dodge/Data/Damage/Type.hs 14;" C @@ -293,7 +293,7 @@ ChaseCritters src/Dodge/Data/Creature/State.hs 38;" C Check src/Framebuffer/Check.hs 1;" m CheckConsistency src/Dodge/Room/CheckConsistency.hs 1;" m CheckSlots src/Dodge/Inventory/CheckSlots.hs 1;" m -ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 53;" C +ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 55;" C ChooseMovementLtAuto src/Dodge/Data/CreatureEffect.hs 62;" C ChooseMovementSpreadGun src/Dodge/Data/CreatureEffect.hs 61;" C ChooseTarget src/Dodge/Creature/ChooseTarget.hs 1;" m @@ -339,7 +339,7 @@ Common src/Dodge/Zoning/Common.hs 1;" m Compile src/Shader/Compile.hs 1;" m Compose src/Dodge/Tree/Compose.hs 4;" m ComposeLinkType src/Dodge/Data/ComposedItem.hs 15;" t -ComposedItem src/Dodge/Data/ComposedItem.hs 49;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 51;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -353,7 +353,7 @@ Configuration src/Dodge/Data/Config.hs 38;" t Connectors src/Dodge/Render/Connectors.hs 3;" m ConstFloat src/Dodge/Data/GenFloat.hs 11;" C Consumable src/Dodge/Item/Consumable.hs 1;" m -ConsumableItemType src/Dodge/Data/Item/Combine.hs 87;" t +ConsumableItemType src/Dodge/Data/Item/Combine.hs 89;" t Consumables src/Dodge/Data/Item.hs 32;" t Consumption src/Dodge/Data/Item/Use/Consumption.hs 8;" m Consumption src/Dodge/Default/Item/Use/Consumption.hs 1;" m @@ -411,8 +411,8 @@ Craftable src/Dodge/Item/Craftable.hs 1;" m Create src/Dodge/Projectile/Create.hs 1;" m Create src/Dodge/Prop/Create.hs 1;" m Create src/Dodge/Wall/Create.hs 1;" m -CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 56;" C -CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 56;" C +CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 58;" C +CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 58;" C CreateShieldWall src/Dodge/Data/Item/Effect.hs 22;" C Creature src/Dodge/Data/Creature.hs 36;" t Creature src/Dodge/Creature.hs 1;" m @@ -436,9 +436,9 @@ CursorDisplay src/Dodge/Data/SelectionList.hs 19;" t Cuse src/Dodge/Data/Item/HeldUse.hs 14;" t Cuse src/Dodge/Cuse.hs 1;" m Cylinder src/Shape/Data.hs 19;" C -DETECTOR src/Dodge/Data/Item/Combine.hs 156;" C +DETECTOR src/Dodge/Data/Item/Combine.hs 158;" C DPoint2 src/Geometry/Data.hs 34;" t -DRUMMAG src/Dodge/Data/Item/Combine.hs 80;" C +DRUMMAG src/Dodge/Data/Item/Combine.hs 82;" C DS src/DoubleStack.hs 3;" t DT src/Dodge/Data/DoubleTree.hs 30;" C DTBottomNode src/Dodge/Data/DoubleTree.hs 20;" C @@ -491,7 +491,7 @@ DefaultArcStep src/Dodge/Data/ArcStep.hs 23;" C DefaultCrGroupUpdate src/Dodge/Data/CrGroupParams.hs 22;" C DefaultDrawButton src/Dodge/Data/Button.hs 17;" C DefaultDrawSwitch src/Dodge/Data/Button.hs 18;" C -DefaultForceField src/Dodge/Data/Item/Use/Consumption/Ammo.hs 50;" C +DefaultForceField src/Dodge/Data/Item/Use/Consumption/Ammo.hs 52;" C DefaultHeldParams src/Dodge/Data/Item/Use.hs 78;" C DefaultLightSourceDraw src/Dodge/Data/LightSource.hs 13;" C DefaultRoomType src/Dodge/Data/Room.hs 31;" C @@ -503,7 +503,7 @@ DestroyBeing src/Dodge/Data/Scenario.hs 8;" C DestroyBullet src/Dodge/Data/Bullet.hs 36;" C DestroyItem src/Dodge/Data/Scenario.hs 7;" C DestroyPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 34;" C -Detector src/Dodge/Data/Item/Combine.hs 161;" t +Detector src/Dodge/Data/Item/Combine.hs 163;" t Dirt src/Dodge/Data/Material.hs 11;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t Display src/Dodge/Item/Display.hs 1;" m @@ -585,7 +585,7 @@ DrawRemoteShell src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" C DrawShell src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" C DrawnWall src/Dodge/Data/Wall.hs 41;" C Drone src/Dodge/Item/Weapon/Drone.hs 1;" m -DroneAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 44;" C +DroneAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 46;" C DropAll src/Dodge/Data/Creature/State.hs 24;" C DropAmount src/Dodge/Data/Creature/State.hs 25;" C DropItem src/Dodge/Data/ActionPlan.hs 39;" C @@ -597,13 +597,13 @@ EBO src/Shader/Data.hs 88;" t EDoNothing src/Dodge/Data/Item/HeldUse.hs 20;" C EHeadLamp src/Dodge/Data/Item/HeldUse.hs 23;" C ELECTRICAL src/Dodge/Data/Damage/Type.hs 20;" C -ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 136;" C +ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 138;" C EMagShield src/Dodge/Data/Item/HeldUse.hs 21;" C ENTERREMENT src/Dodge/Data/Damage/Type.hs 24;" C EQUIP src/Dodge/Data/Item/Combine.hs 19;" C EWristShield src/Dodge/Data/Item/HeldUse.hs 22;" C EXPLOSIVE src/Dodge/Data/Damage/Type.hs 21;" C -EXPLOSIVES src/Dodge/Data/Item/Combine.hs 89;" C +EXPLOSIVES src/Dodge/Data/Item/Combine.hs 91;" C Ears src/Dodge/Data/Creature/Perception.hs 47;" C East src/Dodge/Data/CardinalPoint.hs 5;" C East8 src/Dodge/Data/CardinalPoint.hs 13;" C @@ -615,7 +615,7 @@ EffectWhileAttached src/Dodge/Data/Item/Effect.hs 25;" C EffectWhileRoot src/Dodge/Data/Item/Effect.hs 24;" C EighthRes src/Dodge/Data/Config.hs 97;" C Eldritch src/Dodge/Data/Scenario.hs 34;" C -ElectricalAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 43;" C +ElectricalAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 45;" C Electronics src/Dodge/Data/Material.hs 11;" C EllShad src/Picture/Data.hs 39;" C Enable_debug src/Dodge/Data/Config.hs 68;" C @@ -632,7 +632,7 @@ EonWristShield src/Dodge/Data/Item/Use/Equipment.hs 31;" C EquipCounter src/Dodge/Data/Item/Use/Equipment.hs 38;" C EquipEffect src/Dodge/Data/Item/Use/Equipment.hs 17;" t EquipID src/Dodge/Data/Item/Use/Equipment.hs 37;" C -EquipItemType src/Dodge/Data/Item/Combine.hs 92;" t +EquipItemType src/Dodge/Data/Item/Combine.hs 94;" t EquipOptions src/Dodge/Data/RightButtonOptions.hs 15;" C EquipParams src/Dodge/Data/Item/Use/Equipment.hs 35;" t EquipSite src/Dodge/Data/Equipment/Misc.hs 21;" t @@ -642,7 +642,7 @@ Equipment src/Dodge/Default/Item/Use/Equipment.hs 1;" m Equipment src/Dodge/Equipment.hs 1;" m Equipment src/Dodge/Item/Equipment.hs 1;" m EquipmentAllocation src/Dodge/Data/RightButtonOptions.hs 18;" t -EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 32;" C +EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 33;" C Escape src/Dodge/Data/Scenario.hs 10;" C EscapeMenuOption src/Dodge/Data/Universe.hs 74;" t Essential src/Shape/Data.hs 34;" C @@ -656,21 +656,21 @@ Explosion src/Dodge/Data/SoundOrigin.hs 37;" C Explosion src/Dodge/WorldEvent/Explosion.hs 4;" m ExplosionPayload src/Dodge/Data/Payload.hs 11;" C ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 87;" C -ExplosivePutty src/Dodge/Data/Item/Use/Consumption/Ammo.hs 47;" C +ExplosivePutty src/Dodge/Data/Item/Use/Consumption/Ammo.hs 49;" C ExternallyGeneratedSounds src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 2;" m ExtraEffect src/Dodge/Item/Weapon/ExtraEffect.hs 6;" m Eyes src/Dodge/Data/Creature/Perception.hs 41;" C FBO src/Shader/Data.hs 57;" t -FLAMESHIELD src/Dodge/Data/Item/Combine.hs 94;" C -FLAMESPITTER src/Dodge/Data/Item/Combine.hs 140;" C -FLAMETHROWER src/Dodge/Data/Item/Combine.hs 141;" C -FLAMETORRENT src/Dodge/Data/Item/Combine.hs 142;" C -FLAMEWALL src/Dodge/Data/Item/Combine.hs 143;" C +FLAMESHIELD src/Dodge/Data/Item/Combine.hs 96;" C +FLAMESPITTER src/Dodge/Data/Item/Combine.hs 142;" C +FLAMETHROWER src/Dodge/Data/Item/Combine.hs 143;" C +FLAMETORRENT src/Dodge/Data/Item/Combine.hs 144;" C +FLAMEWALL src/Dodge/Data/Item/Combine.hs 145;" C FLAMING src/Dodge/Data/Damage/Type.hs 18;" C -FLATSHIELD src/Dodge/Data/Item/Combine.hs 154;" C -FRONTARMOUR src/Dodge/Data/Item/Combine.hs 95;" C +FLATSHIELD src/Dodge/Data/Item/Combine.hs 156;" C +FRONTARMOUR src/Dodge/Data/Item/Combine.hs 97;" C FUELCELL src/Dodge/Data/Item/Combine.hs 65;" C -FUELPACK src/Dodge/Data/Item/Combine.hs 104;" C +FUELPACK src/Dodge/Data/Item/Combine.hs 106;" C FacilityType src/Dodge/Data/Scenario.hs 55;" t Faction src/Dodge/Data/Creature/State.hs 34;" t Factory src/Dodge/Data/Scenario.hs 56;" C @@ -724,7 +724,7 @@ FootForward src/Dodge/Data/Creature/Stance.hs 31;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 29;" C ForceField src/Dodge/ForceField.hs 1;" m ForceField src/Dodge/Wall/ForceField.hs 1;" m -ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 50;" t +ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 52;" t Foreground src/Dodge/Room/Foreground.hs 1;" m ForegroundShape src/Dodge/Data/ForegroundShape.hs 14;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 6;" m @@ -735,22 +735,22 @@ FullRes src/Dodge/Data/Config.hs 97;" C FullShadowFidelity src/Shape/Data.hs 24;" C FullSize src/Dodge/Data/Item/Params.hs 31;" C FullyVisible src/Dodge/Data/CamouflageStatus.hs 12;" C -FunctionChangeLink src/Dodge/Data/ComposedItem.hs 26;" C -FunctionChangeSF src/Dodge/Data/ComposedItem.hs 45;" C +FunctionChangeLink src/Dodge/Data/ComposedItem.hs 27;" C +FunctionChangeSF src/Dodge/Data/ComposedItem.hs 47;" C GEqC src/SameConstr.hs 20;" c GLASSSHARD src/Dodge/Data/Item/Combine.hs 38;" C GLHelp src/GLHelp.hs 1;" m -GRAPECANNON src/Dodge/Data/Item/Combine.hs 128;" C +GRAPECANNON src/Dodge/Data/Item/Combine.hs 130;" C GREEN src/Color/Data.hs 16;" C -GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 33;" C +GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 34;" C GameOverOptions src/Dodge/Data/Universe.hs 70;" C GameRoom src/Dodge/GameRoom.hs 15;" t GameRoom src/Dodge/GameRoom.hs 8;" m Gas src/Dodge/Gas.hs 1;" m -GasAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 45;" C +GasAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 47;" C GasCloud src/Dodge/Data/Cloud.hs 31;" C -GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 56;" t -GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 53;" t +GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 58;" t +GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 55;" t GasParams src/Dodge/Data/Item/Use.hs 113;" C GasSprayParams src/Dodge/Data/Item/Use.hs 79;" C GenCr src/Dodge/Data/Creature/State.hs 31;" C @@ -793,11 +793,11 @@ Gust src/Dodge/Data/Gust.hs 6;" m GymSS src/Dodge/Data/Scenario.hs 104;" C HARDDRIVE src/Dodge/Data/Item/Combine.hs 50;" C HARDWARE src/Dodge/Data/Item/Combine.hs 30;" C -HAT src/Dodge/Data/Item/Combine.hs 99;" C -HEADLAMP src/Dodge/Data/Item/Combine.hs 100;" C +HAT src/Dodge/Data/Item/Combine.hs 101;" C +HEADLAMP src/Dodge/Data/Item/Combine.hs 102;" C HEATSENSOR src/Dodge/Data/Item/Combine.hs 60;" C HELD src/Dodge/Data/Item/Combine.hs 17;" C -HOMINGMODULE src/Dodge/Data/Item/Combine.hs 73;" C +HOMINGMODULE src/Dodge/Data/Item/Combine.hs 75;" C HOSE src/Dodge/Data/Item/Combine.hs 32;" C HUD src/Dodge/Data/HUD.hs 45;" t HUD src/Dodge/Data/HUD.hs 6;" m @@ -818,10 +818,10 @@ HasHammer src/Dodge/Data/Hammer.hs 14;" C HeavySmokeFlare src/Dodge/Data/Item/Use.hs 133;" C Held src/Dodge/Item/Held.hs 1;" m HeldDelay src/Dodge/Data/Item/HeldDelay.hs 6;" m -HeldItemType src/Dodge/Data/Item/Combine.hs 117;" t +HeldItemType src/Dodge/Data/Item/Combine.hs 119;" t HeldOffset src/Dodge/Item/HeldOffset.hs 1;" m HeldParams src/Dodge/Data/Item/Use.hs 77;" t -HeldPlatformSF src/Dodge/Data/ComposedItem.hs 31;" C +HeldPlatformSF src/Dodge/Data/ComposedItem.hs 32;" C HeldScroll src/Dodge/HeldScroll.hs 1;" m HeldUse src/Dodge/Data/Item/HeldUse.hs 6;" m HeldUse src/Dodge/HeldUse.hs 4;" m @@ -849,11 +849,11 @@ Huge src/Shape/Data.hs 28;" C Humanoid src/Dodge/Data/Creature/Misc.hs 76;" C Humanoid src/Dodge/Humanoid.hs 1;" m HumanoidAI src/Dodge/Data/Creature/Misc.hs 48;" t -ILink src/Dodge/Data/ComposedItem.hs 51;" C +ILink src/Dodge/Data/ComposedItem.hs 53;" C IMSS src/Dodge/Data/SelectionList.hs 36;" t -INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 97;" C +INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 99;" C IRONBAR src/Dodge/Data/Item/Combine.hs 57;" C -ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 162;" C +ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 164;" C ImmediateEffect src/Loop/Data.hs 8;" C Importance src/Shape/Data.hs 34;" t Important src/Shape/Data.hs 35;" C @@ -932,12 +932,12 @@ Item src/Dodge/Default/Item.hs 1;" m Item src/Dodge/Item.hs 3;" m ItemClust src/Dodge/Combine/Graph.hs 20;" C ItemDimension src/Dodge/Data/Item/Misc.hs 13;" t -ItemLink src/Dodge/Data/ComposedItem.hs 51;" t +ItemLink src/Dodge/Data/ComposedItem.hs 53;" t ItemLocation src/Dodge/Data/Item/Location.hs 28;" t ItemParams src/Dodge/Data/Item/Params.hs 13;" t ItemParams src/Dodge/Tesla/ItemParams.hs 1;" m ItemScrollTimeFlow src/Dodge/Data/World.hs 62;" C -ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 30;" t +ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 31;" t ItemTargeting src/Dodge/Data/Item.hs 55;" t ItemType src/Dodge/Data/Item/Combine.hs 16;" t ItemUse src/Dodge/Data/Item/Use.hs 34;" t @@ -945,20 +945,20 @@ ItmCrWdWd src/Dodge/Data/Item/Use/Equipment.hs 28;" t ItmCrWdWdDoNothing src/Dodge/Data/Item/Use/Equipment.hs 29;" C ItmInt src/Dodge/Data/Item/Location.hs 25;" t JGK src/Control/Foldl/JGK.hs 1;" m -JUMPLEGS src/Dodge/Data/Item/Combine.hs 103;" C +JUMPLEGS src/Dodge/Data/Item/Combine.hs 105;" C JoinClust src/Dodge/Combine/Graph.hs 21;" C Just' src/MaybeHelp.hs 13;" C JustStartedPlaying src/Sound/Data.hs 25;" C Justify src/Justify.hs 1;" m -KEYCARD src/Dodge/Data/Item/Combine.hs 155;" C +KEYCARD src/Dodge/Data/Item/Combine.hs 157;" C Kill src/Dodge/Data/ActionPlan.hs 198;" C -LASER src/Dodge/Data/Item/Combine.hs 147;" C +LASER src/Dodge/Data/Item/Combine.hs 149;" C LASERING src/Dodge/Data/Damage/Type.hs 19;" C -LAUNCHER src/Dodge/Data/Item/Combine.hs 149;" C -LAUNCHERX src/Dodge/Data/Item/Combine.hs 150;" C +LAUNCHER src/Dodge/Data/Item/Combine.hs 151;" C +LAUNCHERX src/Dodge/Data/Item/Combine.hs 152;" C LDT src/Dodge/Data/DoubleTree.hs 40;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 28;" C -LDTComb src/Dodge/Item/Grammar.hs 164;" t +LDTComb src/Dodge/Item/Grammar.hs 169;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 26;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 27;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 24;" C @@ -969,8 +969,8 @@ LIGHTER src/Dodge/Data/Item/Combine.hs 44;" C LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 58;" C LS src/Dodge/Data/LightSource.hs 23;" C LSParam src/Dodge/Data/LightSource.hs 16;" t -LTest src/Dodge/Data/ComposedItem.hs 56;" C -LUpdate src/Dodge/Data/ComposedItem.hs 61;" C +LTest src/Dodge/Data/ComposedItem.hs 58;" C +LUpdate src/Dodge/Data/ComposedItem.hs 63;" C LWorld src/Dodge/Data/LWorld.hs 97;" t LWorld src/Dodge/Data/LWorld.hs 6;" m LabLink src/Dodge/Data/Room.hs 45;" C @@ -996,7 +996,7 @@ LaserStart src/Dodge/Data/Laser.hs 21;" t LaserType src/Dodge/Data/Laser.hs 16;" t Launcher src/Dodge/Item/Held/Launcher.hs 1;" m LauncherAI src/Dodge/Data/Creature/Misc.hs 54;" C -LauncherAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 40;" C +LauncherAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" C LauncherCrit src/Dodge/Creature/LauncherCrit.hs 1;" m LaundrySS src/Dodge/Data/Scenario.hs 115;" C Layer src/Picture/Data.hs 22;" t @@ -1027,8 +1027,8 @@ LimitedWater src/Dodge/Data/Scenario.hs 40;" C LinearShockwave src/Dodge/Data/LinearShockwave.hs 13;" t LinearShockwave src/Dodge/Data/LinearShockwave.hs 6;" m Link src/Dodge/Room/Link.hs 6;" m -LinkTest src/Dodge/Data/ComposedItem.hs 56;" t -LinkUpdate src/Dodge/Data/ComposedItem.hs 61;" t +LinkTest src/Dodge/Data/ComposedItem.hs 58;" t +LinkUpdate src/Dodge/Data/ComposedItem.hs 63;" t List src/Dodge/Combine/List.hs 1;" m List src/Dodge/Render/List.hs 3;" m ListDisplayParams src/Dodge/Data/SelectionList.hs 13;" t @@ -1063,19 +1063,19 @@ LtAutoAI src/Dodge/Data/Creature/Misc.hs 53;" C LtAutoCrit src/Dodge/Creature/LtAutoCrit.hs 1;" m Lure src/Dodge/Data/ActionPlan.hs 179;" C Luse src/Dodge/Luse.hs 2;" m -MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 123;" C +MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 125;" C MAGENTA src/Color/Data.hs 20;" C MAGNET src/Dodge/Data/Item/Combine.hs 45;" C -MAGSHIELD src/Dodge/Data/Item/Combine.hs 93;" C +MAGSHIELD src/Dodge/Data/Item/Combine.hs 95;" C MBranch src/Dodge/Data/MetaTree.hs 16;" C MBranch src/Dodge/Tree/Compose/Data.hs 10;" C MCrAc src/Dodge/Data/CreatureEffect.hs 45;" t MCrNoAction src/Dodge/Data/CreatureEffect.hs 45;" C -MEDKIT src/Dodge/Data/Item/Combine.hs 88;" C +MEDKIT src/Dodge/Data/Item/Combine.hs 90;" C MICROCHIP src/Dodge/Data/Item/Combine.hs 49;" C MICROPHONE src/Dodge/Data/Item/Combine.hs 61;" C MINIDISPLAY src/Dodge/Data/Item/Combine.hs 54;" C -MINIGUNX src/Dodge/Data/Item/Combine.hs 129;" C +MINIGUNX src/Dodge/Data/Item/Combine.hs 131;" C MODBlockedString src/Dodge/Data/Universe.hs 98;" C MODString src/Dodge/Data/Universe.hs 97;" C MODStringOption src/Dodge/Data/Universe.hs 99;" C @@ -1108,8 +1108,8 @@ MagnetUpdate src/Dodge/Data/Magnet.hs 13;" t MagnetUpdateTimer src/Dodge/Data/Magnet.hs 13;" C Main appDodge/Main.hs 1;" m Make src/Dodge/Corpse/Make.hs 1;" m -MakeAutoLink src/Dodge/Data/ComposedItem.hs 27;" C -MakeAutoSF src/Dodge/Data/ComposedItem.hs 46;" C +MakeAutoLink src/Dodge/Data/ComposedItem.hs 28;" C +MakeAutoSF src/Dodge/Data/ComposedItem.hs 48;" C MakeDefaultCorpse src/Dodge/Data/Creature.hs 75;" C MakeSound src/Dodge/Data/ActionPlan.hs 43;" C MakeStartCloudAt src/Dodge/Data/WorldEffect.hs 30;" C @@ -1364,14 +1364,14 @@ P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C PIERCING src/Dodge/Data/Damage/Type.hs 12;" C PIPE src/Dodge/Data/Item/Combine.hs 28;" C -PISTOL src/Dodge/Data/Item/Combine.hs 122;" C +PISTOL src/Dodge/Data/Item/Combine.hs 124;" C PLANK src/Dodge/Data/Item/Combine.hs 37;" C PLATE src/Dodge/Data/Item/Combine.hs 47;" C PLUS src/Dodge/Data/GenParams.hs 20;" C POISONDAM src/Dodge/Data/Damage/Type.hs 23;" C -POISONSPRAYER src/Dodge/Data/Item/Combine.hs 151;" C +POISONSPRAYER src/Dodge/Data/Item/Combine.hs 153;" C PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 66;" C -POWERLEGS src/Dodge/Data/Item/Combine.hs 101;" C +POWERLEGS src/Dodge/Data/Item/Combine.hs 103;" C PPLevelReset src/Dodge/Data/PressPlate.hs 16;" C PRISM src/Dodge/Data/Item/Combine.hs 43;" C PS src/Dodge/Data/GenWorld.hs 62;" C @@ -1462,7 +1462,7 @@ PressPlateId src/Dodge/Data/PressPlate.hs 15;" C PressType src/Dodge/Data/Input.hs 13;" t PreviousArcEffect src/Dodge/Data/Item/Params.hs 34;" t PrimitiveMode src/Shader/Data.hs 99;" t -PrintMaterial src/Dodge/Data/Item/Use/Consumption/Ammo.hs 46;" C +PrintMaterial src/Dodge/Data/Item/Use/Consumption/Ammo.hs 48;" C Prison src/Dodge/Data/Scenario.hs 65;" C Procedural src/Dodge/Room/Procedural.hs 2;" m Projectile src/Dodge/Data/Projectile.hs 14;" t @@ -1537,10 +1537,12 @@ QuicksaveSlot src/Dodge/Data/SaveSlot.hs 10;" C RAM src/Dodge/Data/Item/Combine.hs 51;" C RBList src/Dodge/Inventory/RBList.hs 1;" m RED src/Color/Data.hs 15;" C +REMOTECONTROLLER src/Dodge/Data/Item/Combine.hs 73;" C +REMOTEDETONATOR src/Dodge/Data/Item/Combine.hs 74;" C REMOTESCREEN src/Dodge/Data/Item/Combine.hs 72;" C -REWINDER src/Dodge/Data/Item/Combine.hs 119;" C +REWINDER src/Dodge/Data/Item/Combine.hs 121;" C RGBA src/Color/Data.hs 31;" t -RIFLE src/Dodge/Data/Item/Combine.hs 131;" C +RIFLE src/Dodge/Data/Item/Combine.hs 133;" C ROSE src/Color/Data.hs 21;" C RPLinkStatus src/Dodge/Data/Room.hs 55;" t RProps src/Dodge/Layout/Generate.hs 13;" C @@ -1574,9 +1576,11 @@ ReigonalGovernment src/Dodge/Data/Scenario.hs 50;" C Religion src/Dodge/Data/Scenario.hs 47;" C Reload src/Dodge/Data/ActionPlan.hs 190;" C ReloadStatus src/Dodge/Data/Item/Use/Consumption.hs 20;" t +RemoteDetonatorLink src/Dodge/Data/ComposedItem.hs 25;" C +RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 41;" C RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C RemoteScreenLink src/Dodge/Data/ComposedItem.hs 24;" C -RemoteScreenSF src/Dodge/Data/ComposedItem.hs 39;" C +RemoteScreenSF src/Dodge/Data/ComposedItem.hs 40;" C RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C RemoveShieldWall src/Dodge/Data/Item/Effect.hs 23;" C Remove_LOS src/Dodge/Data/Config.hs 77;" C @@ -1630,16 +1634,16 @@ RoundedFaces src/Shape/Data.hs 18;" C RunPast src/Dodge/Room/RunPast.hs 1;" m RunningSideEffect src/Dodge/Data/Universe.hs 67;" C SCRAPMETAL src/Dodge/Data/Item/Combine.hs 39;" C -SHATTERGUN src/Dodge/Data/Item/Combine.hs 152;" C +SHATTERGUN src/Dodge/Data/Item/Combine.hs 154;" C SHATTERING src/Dodge/Data/Damage/Type.hs 17;" C -SHELLMAG src/Dodge/Data/Item/Combine.hs 82;" C -SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 75;" C -SMG src/Dodge/Data/Item/Combine.hs 125;" C -SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 139;" C +SHELLMAG src/Dodge/Data/Item/Combine.hs 84;" C +SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 77;" C +SMG src/Dodge/Data/Item/Combine.hs 127;" C +SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 141;" C SOUNDSENSOR src/Dodge/Data/Item/Combine.hs 59;" C -SPARKGUN src/Dodge/Data/Item/Combine.hs 145;" C +SPARKGUN src/Dodge/Data/Item/Combine.hs 147;" C SPARKING src/Dodge/Data/Damage/Type.hs 15;" C -SPEEDLEGS src/Dodge/Data/Item/Combine.hs 102;" C +SPEEDLEGS src/Dodge/Data/Item/Combine.hs 104;" C SPRING src/Dodge/Data/Item/Combine.hs 31;" C SPic src/ShapePicture/Data.hs 7;" t SPic src/Dodge/Item/Draw/SPic.hs 3;" m @@ -1831,16 +1835,16 @@ SwitchAlteRifle src/Dodge/Data/Item/Use.hs 54;" C SwitchToItem src/Dodge/Data/ActionPlan.hs 38;" C TAPE src/Dodge/Data/Item/Combine.hs 33;" C TARGETING src/Dodge/Data/Item/Combine.hs 23;" C -TESLAGUN src/Dodge/Data/Item/Combine.hs 146;" C +TESLAGUN src/Dodge/Data/Item/Combine.hs 148;" C THERMOMETER src/Dodge/Data/Item/Combine.hs 62;" C THREELINES src/Dodge/Data/GenParams.hs 20;" C -TIMESCROLLER src/Dodge/Data/Item/Combine.hs 121;" C -TIMESTOPPER src/Dodge/Data/Item/Combine.hs 120;" C +TIMESCROLLER src/Dodge/Data/Item/Combine.hs 123;" C +TIMESTOPPER src/Dodge/Data/Item/Combine.hs 122;" C TIN src/Dodge/Data/Item/Combine.hs 35;" C -TINMAG src/Dodge/Data/Item/Combine.hs 79;" C +TINMAG src/Dodge/Data/Item/Combine.hs 81;" C TO src/Shader/Data.hs 59;" t -TORCH src/Dodge/Data/Item/Combine.hs 153;" C -TRACTORGUN src/Dodge/Data/Item/Combine.hs 148;" C +TORCH src/Dodge/Data/Item/Combine.hs 155;" C +TRACTORGUN src/Dodge/Data/Item/Combine.hs 150;" C TRANSFORMER src/Dodge/Data/Item/Combine.hs 42;" C TRANSMITTER src/Dodge/Data/Item/Combine.hs 48;" C TSbackspace src/Dodge/Data/Input.hs 62;" C @@ -1964,7 +1968,7 @@ Triangulate src/Geometry/Triangulate.hs 3;" m Trie src/SimpleTrie.hs 9;" t TriggerDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 1;" m TriggerLink src/Dodge/Data/ComposedItem.hs 17;" C -TriggerSF src/Dodge/Data/ComposedItem.hs 36;" C +TriggerSF src/Dodge/Data/ComposedItem.hs 37;" C TriggerType src/Dodge/Data/Item/Use.hs 67;" t TriggerType src/Dodge/Item/Weapon/TriggerType.hs 6;" m TurbineBaySS src/Dodge/Data/Scenario.hs 110;" C @@ -1984,7 +1988,7 @@ TwoHandUnder src/Dodge/Data/Item/Use.hs 186;" C Type src/Dodge/Data/Damage/Type.hs 6;" m Type src/Dodge/Terminal/Type.hs 1;" m Typical src/Shape/Data.hs 36;" C -UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 40;" C +UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 42;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C UnderRoof src/Dodge/Data/Scenario.hs 79;" C UnderSea src/Dodge/Data/Scenario.hs 77;" C @@ -2039,7 +2043,7 @@ VAO src/Shader/Data.hs 64;" t VBO src/Shader/Data.hs 81;" t VF src/Polyhedra/Data.hs 21;" t VIOLET src/Color/Data.hs 22;" C -VOLLEYGUN src/Dodge/Data/Item/Combine.hs 130;" C +VOLLEYGUN src/Dodge/Data/Item/Combine.hs 132;" C Vector src/Geometry/Vector.hs 3;" m Vector3D src/Geometry/Vector3D.hs 2;" m VertexAttribute src/Shader/Data.hs 68;" t @@ -2054,12 +2058,12 @@ Vision src/Dodge/Data/Creature/Perception.hs 41;" t Vocalization src/Dodge/Data/Creature/Misc.hs 27;" t Vocalization src/Dodge/Creature/Vocalization.hs 1;" m Volition src/Dodge/Creature/Volition.hs 2;" m -WALLDETECTOR src/Dodge/Data/Item/Combine.hs 164;" C +WALLDETECTOR src/Dodge/Data/Item/Combine.hs 166;" C WASD src/Dodge/WASD.hs 1;" m WHITE src/Color/Data.hs 27;" C WIRE src/Dodge/Data/Item/Combine.hs 64;" C -WRISTARMOUR src/Dodge/Data/Item/Combine.hs 96;" C -WRIST_ECG src/Dodge/Data/Item/Combine.hs 108;" C +WRISTARMOUR src/Dodge/Data/Item/Combine.hs 98;" C +WRIST_ECG src/Dodge/Data/Item/Combine.hs 110;" C WaitThen src/Dodge/Data/ActionPlan.hs 103;" C WalkCycle src/Dodge/Creature/State/WalkCycle.hs 1;" m Walking src/Dodge/Data/Creature/Stance.hs 21;" C @@ -2116,9 +2120,9 @@ WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 32;" C WdYouPos src/Dodge/Data/WorldEffect.hs 40;" C Weapon src/Dodge/Item/Weapon.hs 2;" m WeaponScopeLink src/Dodge/Data/ComposedItem.hs 22;" C -WeaponScopeSF src/Dodge/Data/ComposedItem.hs 34;" C +WeaponScopeSF src/Dodge/Data/ComposedItem.hs 35;" C WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 23;" C -WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 35;" C +WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 36;" C Weapons src/Dodge/Item/Held/Weapons.hs 1;" m West src/Dodge/Data/CardinalPoint.hs 7;" C West8 src/Dodge/Data/CardinalPoint.hs 17;" C @@ -2565,8 +2569,8 @@ _hudElement src/Dodge/Data/HUD.hs 46;" f _humanoidAI src/Dodge/Data/Creature/Misc.hs 80;" f _iaLoaded src/Dodge/Data/Item/Use/Consumption.hs 22;" f _iaMax src/Dodge/Data/Item/Use/Consumption.hs 21;" f -_iatOrient src/Dodge/Data/ComposedItem.hs 53;" f -_iatType src/Dodge/Data/ComposedItem.hs 52;" f +_iatOrient src/Dodge/Data/ComposedItem.hs 55;" f +_iatType src/Dodge/Data/ComposedItem.hs 54;" f _ibtAmmoMag src/Dodge/Data/Item/Combine.hs 22;" f _ibtAttach src/Dodge/Data/Item/Combine.hs 21;" f _ibtBulletMod src/Dodge/Data/Item/Combine.hs 24;" f @@ -2662,9 +2666,9 @@ _lsID src/Dodge/Data/LightSource.hs 24;" f _lsParam src/Dodge/Data/LightSource.hs 25;" f _lsPos src/Dodge/Data/LightSource.hs 17;" f _lsRad src/Dodge/Data/LightSource.hs 18;" f -_luChildUpdate src/Dodge/Data/ComposedItem.hs 64;" f -_luLinkType src/Dodge/Data/ComposedItem.hs 62;" f -_luParentUpdate src/Dodge/Data/ComposedItem.hs 63;" f +_luChildUpdate src/Dodge/Data/ComposedItem.hs 66;" f +_luLinkType src/Dodge/Data/ComposedItem.hs 64;" f +_luParentUpdate src/Dodge/Data/ComposedItem.hs 65;" f _lwID src/Dodge/Data/LinearShockwave.hs 15;" f _lwPoints src/Dodge/Data/LinearShockwave.hs 16;" f _lwPos src/Dodge/Data/LinearShockwave.hs 14;" f @@ -2803,6 +2807,7 @@ _pictureShaders src/Data/Preload/Render.hs 28;" f _piercedPoints src/Dodge/Data/Creature/State.hs 30;" f _pjuCID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 31;" f _pjuControllerID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" f +_pjuDetonatorID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 37;" f _pjuEnd src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" f _pjuReduceSpin src/Dodge/Data/Item/Use/Consumption/Ammo.hs 33;" f _pjuScreenID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 34;" f @@ -3006,7 +3011,7 @@ _shaderVAO src/Shader/Data.hs 54;" f _shapeEBO src/Data/Preload/Render.hs 26;" f _shapeHalfSize src/Shape/Data.hs 18;" f _shapeShader src/Data/Preload/Render.hs 25;" f -_shellPayload src/Dodge/Data/Item/Combine.hs 75;" f +_shellPayload src/Dodge/Data/Item/Combine.hs 77;" f _shockwaves src/Dodge/Data/LWorld.hs 115;" f _shrinkGunStatus src/Dodge/Data/Item/Params.hs 18;" f _siColor src/Dodge/Data/SelectionList.hs 49;" f @@ -3140,8 +3145,8 @@ _tractorBeams src/Dodge/Data/LWorld.hs 119;" f _trieChildren src/SimpleTrie.hs 11;" f _trieMVal src/SimpleTrie.hs 10;" f _triggers src/Dodge/Data/LWorld.hs 129;" f -_tryLeftLink src/Dodge/Data/ComposedItem.hs 57;" f -_tryRightLink src/Dodge/Data/ComposedItem.hs 58;" f +_tryLeftLink src/Dodge/Data/ComposedItem.hs 59;" f +_tryRightLink src/Dodge/Data/ComposedItem.hs 60;" f _ttDeathEffect src/Dodge/Data/Terminal.hs 84;" f _ttTriggerID src/Dodge/Data/Terminal.hs 83;" f _tuDir src/Dodge/Data/Machine.hs 61;" f @@ -3256,9 +3261,9 @@ _wpMaxCharge src/Dodge/Data/Item/Use/Consumption.hs 34;" f _wsBlock src/Dodge/Data/Wall.hs 52;" f _wsDoor src/Dodge/Data/Wall.hs 50;" f _wsMachine src/Dodge/Data/Wall.hs 51;" f -_xNum src/Dodge/Data/Item/Combine.hs 118;" f -_xNum src/Dodge/Data/Item/Combine.hs 128;" f -_xNum src/Dodge/Data/Item/Combine.hs 150;" f +_xNum src/Dodge/Data/Item/Combine.hs 120;" f +_xNum src/Dodge/Data/Item/Combine.hs 130;" f +_xNum src/Dodge/Data/Item/Combine.hs 152;" f aDroneWithItemParams src/Dodge/Item/Weapon/Drone.hs 30;" f aFlame src/Dodge/Gas.hs 18;" f aFlameParticle src/Dodge/Flame.hs 21;" f @@ -3325,7 +3330,7 @@ airlockDoubleDoor src/Dodge/Room/Airlock.hs 54;" f airlockSimple src/Dodge/Room/Airlock.hs 66;" f airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 60;" f -allInvLocs src/Dodge/Item/Grammar.hs 245;" f +allInvLocs src/Dodge/Item/Grammar.hs 250;" f allVisibleWalls src/Dodge/Base/Collide.hs 132;" f alongSegBy src/Geometry.hs 43;" f alteRifle src/Dodge/Item/Held/Cane.hs 65;" f @@ -3399,7 +3404,7 @@ attachTree src/Dodge/Tree/Compose.hs 38;" f attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 66;" f attribSize src/Shader/Compile.hs 306;" f augInvDirectSelect src/Dodge/Inventory.hs 191;" f -augmentedHUD src/Dodge/Item/Scope.hs 53;" f +augmentedHUD src/Dodge/Item/Scope.hs 54;" f autoAmr src/Dodge/Item/Held/Rod.hs 49;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 362;" f autoCrit src/Dodge/Creature/AutoCrit.hs 12;" f @@ -3426,7 +3431,7 @@ barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 384;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f -baseCI src/Dodge/Item/Grammar.hs 118;" f +baseCI src/Dodge/Item/Grammar.hs 123;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 294;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 45;" f @@ -3443,7 +3448,7 @@ basicBulDams src/Dodge/Item/Weapon/Bullet.hs 23;" f basicCrPict src/Dodge/Creature/Picture.hs 26;" f basicCrShape src/Dodge/Creature/Picture.hs 34;" f basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f -basicItemDisplay src/Dodge/Item/Display.hs 39;" f +basicItemDisplay src/Dodge/Item/Display.hs 43;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f basicMuzFlare src/Dodge/HeldUse.hs 278;" f @@ -3505,8 +3510,8 @@ bufferPokedVBO src/Shader/Bind.hs 19;" f bufferShaderLayers src/Shader/Bind.hs 36;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 110;" f bulletBeltPack src/Dodge/Item/Equipment.hs 92;" f -bulletModule src/Dodge/Item/Scope.hs 36;" f -bulletPayloadModule src/Dodge/Item/Scope.hs 50;" f +bulletModule src/Dodge/Item/Scope.hs 37;" f +bulletPayloadModule src/Dodge/Item/Scope.hs 51;" f bulletSynthesizer src/Dodge/Item/Ammo.hs 122;" f bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f burstRifle src/Dodge/Item/Held/Cane.hs 83;" f @@ -3713,7 +3718,7 @@ createNewArc src/Dodge/Tesla.hs 81;" f createNewArc src/Dodge/Tesla/Arc.hs 90;" f createPathGrid src/Dodge/Room/Path.hs 21;" f createProjectile src/Dodge/HeldUse.hs 603;" f -createShell src/Dodge/Projectile/Create.hs 19;" f +createShell src/Dodge/Projectile/Create.hs 22;" f createShieldWall src/Dodge/Euse.hs 107;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 117;" f createWall src/Dodge/Wall/Create.hs 8;" f @@ -3806,7 +3811,7 @@ debugMenuOptions src/Dodge/Menu.hs 119;" f debugOn src/Dodge/Data/Config.hs 151;" f debugSelectCreatureList src/Dodge/Debug.hs 86;" f debugSelectCreatureMessage src/Dodge/Debug.hs 77;" f -decTimMvVel src/Dodge/Projectile/Update.hs 145;" f +decTimMvVel src/Dodge/Projectile/Update.hs 146;" f decodedtmap src/Dodge/Terminal.hs 205;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f decomposeTree src/Dodge/Tree/Compose.hs 57;" f @@ -3909,7 +3914,7 @@ destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 21;" f destroyMount src/Dodge/Block.hs 104;" f destroyMounts src/Dodge/Block.hs 101;" f -destroyProjectile src/Dodge/Projectile/Update.hs 62;" f +destroyProjectile src/Dodge/Projectile/Update.hs 63;" f detV src/Geometry/Vector.hs 93;" f detector src/Dodge/Item/Held/Utility.hs 41;" f detectorColor src/Dodge/Item/Draw/SPic.hs 430;" f @@ -3934,7 +3939,7 @@ displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 39;" f displayFreeSlots src/Dodge/DisplayInventory.hs 226;" f displayIndents src/Dodge/DisplayInventory.hs 123;" f -displayPulse src/Dodge/Item/Display.hs 98;" f +displayPulse src/Dodge/Item/Display.hs 104;" f displaySectionsSizes src/Dodge/DisplayInventory.hs 118;" f displayTerminalLineString src/Dodge/Update.hs 447;" f dist src/Geometry/Vector.hs 179;" f @@ -4019,7 +4024,7 @@ doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f -doThrust src/Dodge/Projectile/Update.hs 74;" f +doThrust src/Dodge/Projectile/Update.hs 75;" f doTimeScroll src/Dodge/Update.hs 205;" f doTmTm src/Dodge/TmTm.hs 6;" f doTmWdWd src/Dodge/WorldEffect.hs 101;" f @@ -4226,7 +4231,7 @@ expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 195;" f expireAndDamageFL src/Dodge/Flame.hs 47;" f -explodeShell src/Dodge/Projectile/Update.hs 157;" f +explodeShell src/Dodge/Projectile/Update.hs 158;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 410;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 29;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f @@ -4348,10 +4353,10 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAmmoLinks src/Dodge/Item/Grammar.hs 87;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 91;" f getArguments src/Dodge/Update/Scroll.hs 215;" f getArguments' src/Dodge/Update/Scroll.hs 203;" f -getAutoSpringLinks src/Dodge/Item/Grammar.hs 82;" f +getAutoSpringLinks src/Dodge/Item/Grammar.hs 86;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulletType src/Dodge/HeldUse.hs 409;" f getCommands src/Dodge/Terminal.hs 117;" f @@ -4473,8 +4478,8 @@ hitEffFromBul src/Dodge/Bullet.hs 158;" f hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 394;" f holdForm src/Dodge/Creature/Boid.hs 136;" f holsterWeapon src/Dodge/Creature/Volition.hs 14;" f -homingDrawType src/Dodge/Projectile/Create.hs 12;" f -homingModule src/Dodge/Item/Scope.hs 33;" f +homingDrawType src/Dodge/Projectile/Create.hs 15;" f +homingModule src/Dodge/Item/Scope.hs 34;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 63;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 41;" f @@ -4546,16 +4551,16 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 329;" f interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 226;" f +invAdj src/Dodge/Item/Grammar.hs 231;" f invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 220;" f invHead src/Dodge/Render/HUD.hs 391;" f invItemLocUpdate src/Dodge/Creature/State.hs 179;" f -invLDT src/Dodge/Item/Grammar.hs 206;" f +invLDT src/Dodge/Item/Grammar.hs 211;" f invRootItemEffs src/Dodge/Creature/State.hs 172;" f -invRootMap src/Dodge/Item/Grammar.hs 215;" f -invRootTrees src/Dodge/Item/Grammar.hs 236;" f +invRootMap src/Dodge/Item/Grammar.hs 220;" f +invRootTrees src/Dodge/Item/Grammar.hs 241;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 22;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 166;" f @@ -4599,30 +4604,30 @@ isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itDim src/Dodge/Item/InvSize.hs 20;" f itInvHeight src/Dodge/Item/InvSize.hs 11;" f -itemBaseConnections src/Dodge/Item/Grammar.hs 121;" f -itemBaseName src/Dodge/Item/Display.hs 50;" f +itemBaseConnections src/Dodge/Item/Grammar.hs 126;" f +itemBaseName src/Dodge/Item/Display.hs 55;" f itemBlips src/Dodge/RadarSweep.hs 75;" f itemCombinations src/Dodge/Combine/Combinations.hs 55;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 60;" f itemDetectorEffect src/Dodge/HeldUse.hs 315;" f -itemDisplay src/Dodge/Item/Display.hs 16;" f -itemDisplayPad src/Dodge/Item/Display.hs 34;" f +itemDisplay src/Dodge/Item/Display.hs 20;" f +itemDisplayPad src/Dodge/Item/Display.hs 38;" f itemEquipPict src/Dodge/Item/Draw.hs 16;" f itemFromAmmoMag src/Dodge/Item.hs 28;" f itemFromAttachType src/Dodge/Item.hs 37;" f itemFromBase src/Dodge/Item.hs 17;" f -itemFromEquipType src/Dodge/Item.hs 47;" f +itemFromEquipType src/Dodge/Item.hs 48;" f itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 13;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemNumberDisplay src/Dodge/Item/Display.hs 83;" f +itemNumberDisplay src/Dodge/Item/Display.hs 88;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f itemSPic src/Dodge/Item/Draw/SPic.hs 34;" f itemScroll src/Dodge/Update/Scroll.hs 66;" f -itemString src/Dodge/Item/Display.hs 47;" f +itemString src/Dodge/Item/Display.hs 51;" f itemToBreakLists src/Dodge/Item/Grammar.hs 50;" f -itemToFunction src/Dodge/Item/Grammar.hs 93;" f +itemToFunction src/Dodge/Item/Grammar.hs 97;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 22;" f itemUpdate src/Dodge/Creature/State.hs 429;" f iterateUntil src/MonadHelp.hs 23;" f @@ -4633,7 +4638,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 18;" f itmUsageInfo src/Dodge/Item/Info.hs 185;" f jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 196;" f +joinItemsInList src/Dodge/Item/Grammar.hs 201;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f jsps src/Dodge/LevelGen/PlacementHelper.hs 36;" f @@ -4666,7 +4671,7 @@ lasTunnel src/Dodge/Room/LasTurret.hs 125;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 166;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 38;" f laser src/Dodge/Item/Held/BatteryGuns.hs 48;" f -laserLinkTest src/Dodge/Item/Grammar.hs 127;" f +laserLinkTest src/Dodge/Item/Grammar.hs 132;" f lastMap src/Dodge/DoubleTree.hs 174;" f launcher src/Dodge/Item/Held/Launcher.hs 12;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f @@ -4684,9 +4689,9 @@ ldtToIM src/Dodge/DoubleTree.hs 143;" f ldtToIndentList src/Dodge/DoubleTree.hs 146;" f ldtToLoc src/Dodge/DoubleTree.hs 187;" f left src/DoubleStack.hs 16;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 166;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 171;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 180;" f +leftRightCombine src/Dodge/Item/Grammar.hs 185;" f legsSPic src/Dodge/Item/Draw/SPic.hs 454;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4714,8 +4719,8 @@ listCursorChooseBorderScale src/Dodge/Render/List.hs 135;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 188;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 346;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f -llleft src/Dodge/Item/Grammar.hs 130;" f -llright src/Dodge/Item/Grammar.hs 136;" f +llleft src/Dodge/Item/Grammar.hs 135;" f +llright src/Dodge/Item/Grammar.hs 141;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 380;" f @@ -4851,7 +4856,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 588;" f maybeOpenTerminal src/Dodge/Update.hs 122;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f -maybeWarmupStatus src/Dodge/Item/Display.hs 104;" f +maybeWarmupStatus src/Dodge/Item/Display.hs 110;" f mcApplyDamage src/Dodge/Machine/Update.hs 108;" f mcKillBut src/Dodge/Machine/Destroy.hs 34;" f mcKillTerm src/Dodge/Machine/Destroy.hs 26;" f @@ -5107,7 +5112,7 @@ pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 42;" f pistolCrit src/Dodge/Creature/PistolCrit.hs 12;" f pistolerRoom src/Dodge/Room/Room.hs 321;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 115;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 116;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f @@ -5354,7 +5359,7 @@ 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 256;" f -reduceSpinBy src/Dodge/Projectile/Update.hs 142;" f +reduceSpinBy src/Dodge/Projectile/Update.hs 143;" 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 @@ -5370,7 +5375,8 @@ reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 442;" f reloadLevelStart src/Dodge/Save.hs 71;" f reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 440;" f rememberSounds src/Dodge/Creature/Perception.hs 177;" f -remoteScreen src/Dodge/Item/Scope.hs 56;" f +remoteDetonator src/Dodge/Item/Scope.hs 61;" f +remoteScreen src/Dodge/Item/Scope.hs 57;" f remoteShellShape src/Dodge/Projectile/Draw.hs 42;" f removeAmmoFromMag src/Dodge/HeldUse.hs 396;" f removeDot src/ShortShow.hs 30;" f @@ -5417,7 +5423,7 @@ rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 72;" f rifle src/Dodge/Item/Held/Cane.hs 55;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 173;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 178;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5625,7 +5631,7 @@ shatterGunSPic src/Dodge/Item/Draw/SPic.hs 283;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f shellCollisionCheck src/Dodge/Projectile/Update.hs 50;" f shellMag src/Dodge/Item/Ammo.hs 61;" f -shellModule src/Dodge/Item/Scope.hs 42;" f +shellModule src/Dodge/Item/Scope.hs 43;" f shellShape src/Dodge/Projectile/Draw.hs 27;" f shellTrailCloud src/Dodge/WorldEvent/Cloud.hs 65;" f shieldWall src/Dodge/Euse.hs 87;" f @@ -5669,8 +5675,8 @@ shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f shoulderHeight src/Dodge/Item/HeldOffset.hs 81;" f shoulderSH src/Dodge/Creature/Picture.hs 139;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f -showAttachItem src/Dodge/Item/Display.hs 64;" f -showEquipItem src/Dodge/Item/Display.hs 78;" f +showAttachItem src/Dodge/Item/Display.hs 69;" f +showEquipItem src/Dodge/Item/Display.hs 80;" f showInt src/Dodge/Item/Info.hs 30;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showManObj src/Dodge/TestString.hs 77;" f @@ -5759,7 +5765,7 @@ spreadCenter src/Dodge/Base.hs 165;" f spreadFromCenter src/Dodge/Base.hs 154;" f spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 12;" f spreadOut src/Dodge/Creature/Boid.hs 157;" f -springLinkTest src/Dodge/Item/Grammar.hs 148;" f +springLinkTest src/Dodge/Item/Grammar.hs 153;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f square src/Geometry/Polygon.hs 46;" f @@ -5785,7 +5791,7 @@ ssfold src/FoldableHelp.hs 105;" f stackPicturesAt src/Dodge/Render/List.hs 98;" f stackPicturesAtOff src/Dodge/Render/List.hs 101;" f stackText src/Picture/Base.hs 188;" f -stackedInventory src/Dodge/Creature.hs 296;" f +stackedInventory src/Dodge/Creature.hs 297;" f startCr src/Dodge/Creature.hs 91;" f startCrafts src/Dodge/Room/Start.hs 92;" f startDrag src/Dodge/Update/Input/InGame.hs 257;" f @@ -5853,7 +5859,7 @@ targetYouCognizant src/Dodge/Creature/ChooseTarget.hs 13;" f targetYouLOS src/Dodge/Creature/ChooseTarget.hs 7;" f targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 194;" f targetYouWhenCognizant src/Dodge/Creature/SetTarget.hs 9;" f -targetingScope src/Dodge/Item/Scope.hs 23;" f +targetingScope src/Dodge/Item/Scope.hs 24;" f telRoomLev src/Dodge/Room/Teleport.hs 14;" f teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 390;" f termButton src/Dodge/Placement/Instance/Terminal.hs 51;" f @@ -5872,7 +5878,7 @@ teslaParams src/Dodge/Item/Held/BatteryGuns.hs 37;" f teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f testCrossWalls src/Dodge/Room/Path.hs 47;" f testEvent src/Dodge/Event/Test.hs 10;" f -testInventory src/Dodge/Creature.hs 277;" f +testInventory src/Dodge/Creature.hs 278;" f testStringInit src/Dodge/TestString.hs 28;" f text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f @@ -5917,7 +5923,7 @@ toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f toFloatVAs src/Shader/Compile.hs 211;" f toLabel src/Dodge/Cleat.hs 16;" f -toLasgunUpdate src/Dodge/Item/Grammar.hs 141;" f +toLasgunUpdate src/Dodge/Item/Grammar.hs 146;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f toTopLeft src/Dodge/Render/List.hs 219;" f @@ -6011,7 +6017,7 @@ tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 26;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 42;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 88;" f -trySpinByCID src/Dodge/Projectile/Update.hs 97;" f +trySpinByCID src/Dodge/Projectile/Update.hs 98;" f trySynthBullet src/Dodge/Creature/State.hs 204;" f tryUseParent src/Dodge/Creature/State.hs 197;" f turnTo src/Dodge/Movement/Turn.hs 4;" f @@ -6193,16 +6199,16 @@ useLocation src/Dodge/Creature/Impulse/UseItem.hs 49;" f useMagShield src/Dodge/Euse.hs 46;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 17;" f -useRewindGun src/Dodge/HeldUse.hs 665;" f +useRewindGun src/Dodge/HeldUse.hs 667;" f useRewindGun src/Dodge/Luse.hs 40;" f useRoomPosCond src/Dodge/PlacementSpot.hs 178;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 181;" f useSelectedItem src/Dodge/Creature/Impulse/UseItem.hs 20;" f -useStopWatch src/Dodge/HeldUse.hs 646;" f +useStopWatch src/Dodge/HeldUse.hs 648;" f useStopWatch src/Dodge/Luse.hs 21;" f useTimeCheck src/Dodge/HeldUse.hs 63;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 127;" f -useTimeScrollGun src/Dodge/HeldUse.hs 654;" f +useTimeScrollGun src/Dodge/HeldUse.hs 656;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f useUpdate src/Dodge/Creature/State.hs 433;" f @@ -6330,7 +6336,7 @@ zipArcs src/Dodge/Tesla.hs 103;" f zipArcs src/Dodge/Tesla/Arc.hs 110;" f zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 118;" f -zipWithDefaults src/Dodge/Item/Display.hs 27;" f +zipWithDefaults src/Dodge/Item/Display.hs 31;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f zoneClouds src/Dodge/Update.hs 444;" f zoneCreature src/Dodge/Zoning/Creature.hs 52;" f @@ -6356,5 +6362,5 @@ zoomFloatingCamera src/Dodge/Update/Camera.hs 64;" f zoomFromItem src/Dodge/Update/Camera.hs 172;" f zoomInLongGun src/Dodge/Update/Scroll.hs 104;" f zoomOutLongGun src/Dodge/Update/Scroll.hs 112;" f -zoomScope src/Dodge/Item/Scope.hs 18;" f +zoomScope src/Dodge/Item/Scope.hs 19;" f zoomSpeed src/Dodge/Update/Scroll.hs 101;" f