diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 63d11c110..139cf96de 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -246,8 +246,9 @@ inventoryX c = case c of , rLauncher , megaShellMag , homingModule + , smokeReducer , remoteScreen - , remoteController + , joystick , remoteDetonator , rLauncherX 3 , megaShellMag diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index d5084d444..4a53ba651 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -2,6 +2,7 @@ module Dodge.Creature.Impulse.UseItem ( useSelectedItem, ) where +import Data.Foldable (foldl') import Dodge.DoubleTree import Control.Lens import Control.Monad @@ -20,9 +21,7 @@ import qualified IntMapHelp as IM useSelectedItem :: Int -> World -> World useSelectedItem crid w = (worldEventFlags . at InventoryChange ?~ ()) . fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid - itRef <- cr ^? crManipulation . manObject . imRootSelectedItem invid <- cr ^? crManipulation . manObject . imSelectedItem - itmtree <- invRootTrees (_crInv cr) ^? ix itRef itmloc <- allInvLocs (_crInv cr) ^? ix invid . _2 let usedloc = case useLocation itmloc of UseFromLocation -> itmloc ^. locLDT @@ -31,13 +30,15 @@ useSelectedItem crid w = (worldEventFlags . at InventoryChange ?~ ()) . fromMayb case usedloc ^. ldtValue . _2 of HeldPlatformSF -> return $ - heldEffect (bimap _iatType fst3 itmtree) cr w + heldEffect (bimap _iatType fst3 usedloc) cr w & pointerToItem itm . itUse . heldHammer .~ HammerDown GadgetPlatformSF -> return $ - heldEffect (bimap _iatType fst3 itmtree) cr w + heldEffect (bimap _iatType fst3 usedloc) cr w & pointerToItem itm . itUse . heldHammer .~ HammerDown - --EquipmentPlatformSF -> do + RemoteDetonatorSF -> do + guard (_crHammerPosition cr == HammerUp) + return $ activateDetonator usedloc cr w _ | isJust $ itm ^? itUse . uequipEffect -> do guard (_crHammerPosition cr == HammerUp) invid' <- itm ^? itLocation . ilInvID @@ -46,11 +47,24 @@ useSelectedItem crid w = (worldEventFlags . at InventoryChange ?~ ()) . fromMayb where fst3 (x,_,_) = x +activateDetonator + :: LabelDoubleTree ItemLink ComposedItem -> Creature -> World + -> World +activateDetonator det _ w = (foldl' remoteDetonate w + $ det ^. ldtValue . _1 . itUse . uaParams . apProjectiles) + & pointerToItemID (det ^. ldtValue . _1 . itID) . itUse . uaParams . apProjectiles .~ [] + +remoteDetonate :: World -> Int -> World +remoteDetonate w pjid = w + & cWorld . lWorld . projectiles . ix pjid . prjTimer .~ 0 + useLocation :: LocationLDT ItemLink ComposedItem -> UseFocus useLocation loc | isJust $ loc ^? locLDT . ldtValue . _1 . itUse . uequipEffect = UseFromLocation | isJust $ loc ^? locLDT . ldtValue . _1 . itUse . uaParams . apLinkedProjectile . _Just = UseFromLocation + | isJust $ loc ^? locLDT . ldtValue . _1 . itUse . uaParams . apProjectiles . ix 0 + = UseFromLocation | otherwise = UseFromRoot toggleEquipmentAt :: Int -> Creature -> World -> World diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 5fe18a5cd..9a6da1311 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -21,9 +21,10 @@ data ComposeLinkType | AmmoEffectLink | WeaponScopeLink | WeaponTargetingLink - | RemoteControllerLink + | JoystickLink | RemoteScreenLink | RemoteDetonatorLink + | SmokeReducerLink | AugmentedHUDLink | FunctionChangeLink | MakeAutoLink @@ -39,8 +40,9 @@ data ItemStructuralFunction | AugmentedHUDSF | AmmoMagSF AmmoType | RemoteScreenSF - | RemoteControllerSF + | JoystickSF | RemoteDetonatorSF + | SmokeReducerSF | UncomposableIsolateSF | AmmoModifierSF AmmoType | AmmoTargetingSF AmmoType diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 1f99a2462..d1b88870e 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -70,8 +70,9 @@ data AttachType = ZOOMSCOPE | BULLETSYNTH | REMOTESCREEN - | REMOTECONTROLLER + | JOYSTICK | REMOTEDETONATOR + | SMOKEREDUCER | HOMINGMODULE | AUGMENTEDHUD | SHELLPAYLOAD {_shellPayload :: Payload} diff --git a/src/Dodge/Data/Item/Use.hs b/src/Dodge/Data/Item/Use.hs index 162fa4a0b..fd5c796fb 100644 --- a/src/Dodge/Data/Item/Use.hs +++ b/src/Dodge/Data/Item/Use.hs @@ -70,6 +70,8 @@ data TriggerType = AutoTrigger | HammerTrigger data AttachParams = APLinkProjectile {_apLinkedProjectile :: Maybe Int} + | APProjectiles + {_apProjectiles :: [Int]} | APInt {_apInt :: Int} | APNothing deriving (Eq, Show, Read) diff --git a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs index fbfed636d..68b201c75 100644 --- a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs +++ b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs @@ -27,11 +27,12 @@ data ProjectileHoming deriving (Show, Eq, Ord, Read) --Generic, Flat) data ProjectileUpdate - = ThrustPU {_pjuStart :: Int, _pjuEnd :: Int} + = ThrustPU {_pjuStart :: Int, _pjuEnd :: Int, _pjuSmokeless :: Bool} | StartSpinPU {_pjuTime :: Int, _pjuCID :: Int, _pjuSpinAmound :: Int} | RemoteDirectionPU {_pjuStart :: Int, _pjuEnd :: Int, _pjuControllerID :: ProjectileHoming} | ReduceSpinPU {_pjuReduceSpin :: Float} - | DestroyPU {_pjuScreenID :: Maybe (NewInt ItmInt), _pjuTimer :: Int} + | DestroyPU {_pjuScreenID :: Maybe (NewInt ItmInt) + ,_pjuTimer :: Int} | TimePU | CollisionEffectPU {_pjuControlID :: Maybe (NewInt ItmInt) ,_pjuDetonatorID :: Maybe (NewInt ItmInt) diff --git a/src/Dodge/Data/Projectile.hs b/src/Dodge/Data/Projectile.hs index 9e9b83a78..f22bb43f7 100644 --- a/src/Dodge/Data/Projectile.hs +++ b/src/Dodge/Data/Projectile.hs @@ -11,6 +11,11 @@ import Data.Aeson.TH import Dodge.Data.Item.Use.Consumption.Ammo import Geometry.Data +data ProjectileType + = Grenade + | Rocket + deriving (Eq, Ord, Show, Read) --Generic, Flat) + data Projectile = Shell { _prjPos :: Point2 @@ -25,8 +30,10 @@ data Projectile , _prjZ :: Float , _prjZVel :: Float , _prjUpdates :: [ProjectileUpdate] + , _prjType :: ProjectileType } deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''Projectile +deriveJSON defaultOptions ''ProjectileType deriveJSON defaultOptions ''Projectile diff --git a/src/Dodge/EnergyBall.hs b/src/Dodge/EnergyBall.hs index 6ce992bf9..728951553 100644 --- a/src/Dodge/EnergyBall.hs +++ b/src/Dodge/EnergyBall.hs @@ -52,7 +52,7 @@ updateEnergyBall w eb ) where p = eb ^. ebPos + eb ^. ebVel - (bp,bv) = fromMaybe (p,eb^.ebVel) $ bouncePoint (const True) 0.5 (eb ^. ebPos) p w + (bp,bv) = fromMaybe (p,eb^.ebVel) $ bouncePoint (const True) 0 (eb ^. ebPos) p w -- (bp,bv) = fromMaybe (p,eb^.ebVel) $ bouncePoint (const True) 0.5 (eb ^. ebPos) p w incBallAt :: Point2 -> World -> World diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 7ffaa500d..2d1cc2dca 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -594,11 +594,16 @@ determineProjectileTracking :: LabelDoubleTree ComposeLinkType Item -> LabelDoubleTree ComposeLinkType Item -> ProjectileHoming -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 - targetingtree <- lookup WeaponTargetingLink (itmtree ^. ldtRight) -- left or right for these +determineProjectileTracking magtree itmtree = fromMaybe NoHoming $ + finddronecontrols <|> findexternaltracking + where + finddronecontrols = do + screen <- lookup RemoteScreenLink (magtree ^. ldtLeft) + _ <- lookup JoystickLink (screen ^. ldtLeft) + return $ HomeUsingRemoteScreen (screen ^. ldtValue . itID) + findexternaltracking = do + _ <- lookup AmmoTargetingLink (magtree ^. ldtLeft) + targetingtree <- lookup WeaponTargetingLink (itmtree ^. ldtRight) return $ HomeUsingTargeting (targetingtree ^. ldtValue . itID) createProjectile :: @@ -616,10 +621,11 @@ createProjectile magtree muz itmtree cr = fromMaybe failsound $ do lookup RemoteDetonatorLink (magtree ^. ldtLeft) rscreen = fmap (^. ldtValue . itID) $ lookup RemoteScreenLink (magtree ^. ldtLeft) + issmokeless = isJust $ lookup SmokeReducerLink (magtree ^. ldtLeft) aparams <- ((magtree ^? ldtLeft) >>= lookup AmmoPayloadLink >>= (^? ldtValue . itType . ibtAttach . shellPayload)) <|> ammoitem ^? itConsumables . magParams . ampPayload return $ - createShell homing rdetonate rscreen aparams muz cr + createGShell homing rdetonate rscreen issmokeless Rocket aparams muz cr . startthesound where -- the sound should be moved to the projectile firing @@ -651,7 +657,7 @@ createGProjectile magtree muz itmtree cr = fromMaybe failsound $ do aparams <- ((magtree ^? ldtLeft) >>= lookup AmmoPayloadLink >>= (^? ldtValue . itType . ibtAttach . shellPayload)) <|> ammoitem ^? itConsumables . magParams . ampPayload return $ - createGShell homing rdetonate rscreen aparams muz cr + createGShell homing rdetonate rscreen False Grenade 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 555221f55..d0fe8a4cf 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -39,8 +39,9 @@ itemFromAttachType at = case at of ZOOMSCOPE -> zoomScope BULLETSYNTH -> bulletSynthesizer REMOTESCREEN -> remoteScreen - REMOTECONTROLLER -> remoteController + JOYSTICK -> joystick REMOTEDETONATOR -> remoteDetonator + SMOKEREDUCER -> smokeReducer -- ROCKETHOMER -> rocketHomer HOMINGMODULE -> homingModule AUGMENTEDHUD -> augmentedHUD diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index b96205e9a..b9e5454ec 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -72,8 +72,9 @@ showAttachItem t = case t of ZOOMSCOPE -> "ZOOMSCOPE" BULLETSYNTH -> "BSYNTH" REMOTESCREEN -> "REM.SCREEN" - REMOTECONTROLLER -> "REM.CONTR0LR" + JOYSTICK -> "JOYSTICK" REMOTEDETONATOR -> "REM.DETONATR" + SMOKEREDUCER -> "SMOKE.REDUCR" HOMINGMODULE -> "HOMING MOD" AUGMENTEDHUD -> "AUGMENTED HUD" SHELLPAYLOAD x -> show x @@ -99,6 +100,7 @@ itemNumberDisplay cr ci | 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] + | UseAttach (APProjectiles x) <- ci ^. _1 . itUse = [show x] | 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 28b34ce23..62a7e166b 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -67,7 +67,6 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of let screenanddet = case atype of LauncherAmmo -> [ (RemoteScreenSF, RemoteScreenLink) , (RemoteDetonatorSF, RemoteDetonatorLink) - , (RemoteControllerSF, RemoteControllerLink) ] _ -> [] return @@ -76,9 +75,13 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of , (AmmoTargetingSF atype, AmmoTargetingLink) , (AmmoPayloadSF atype, AmmoPayloadLink) , (AmmoEffectSF atype, AmmoEffectLink) + , (SmokeReducerSF, SmokeReducerLink) ] <> screenanddet , [] ) + (_, RemoteScreenSF) -> + ( [(JoystickSF, JoystickLink)] + , []) (_, WeaponTargetingSF) -> (getAmmoLinks itm ++ [(AugmentedHUDSF, AugmentedHUDLink)], []) (ATTACH BULLETSYNTH, _) -> ([(AmmoMagSF ElectricalAmmo, AmmoInLink 0 ElectricalAmmo)], []) @@ -107,8 +110,9 @@ itemToFunction itm = case itm ^. itType of AmmoMagSF amtype AMMOMAG{} -> maybe UncomposableIsolateSF AmmoMagSF $ itm ^? itConsumables . magType ATTACH REMOTESCREEN -> RemoteScreenSF - ATTACH REMOTECONTROLLER -> RemoteControllerSF + ATTACH JOYSTICK -> JoystickSF ATTACH REMOTEDETONATOR -> RemoteDetonatorSF + ATTACH SMOKEREDUCER -> SmokeReducerSF ATTACH BULLETSYNTH -> AmmoModifierSF BulletAmmo ATTACH ZOOMSCOPE -> WeaponScopeSF ATTACH HOMINGMODULE -> AmmoTargetingSF LauncherAmmo diff --git a/src/Dodge/Item/InventoryColor.hs b/src/Dodge/Item/InventoryColor.hs index 1606aa6d9..4863818fd 100644 --- a/src/Dodge/Item/InventoryColor.hs +++ b/src/Dodge/Item/InventoryColor.hs @@ -18,8 +18,9 @@ itemInvColor ci = case ci ^. _2 of AugmentedHUDSF -> rose AmmoMagSF{} -> red RemoteScreenSF -> azure - RemoteControllerSF -> azure + JoystickSF -> azure RemoteDetonatorSF -> azure + SmokeReducerSF -> azure UncomposableIsolateSF -> greyN 0.5 AmmoModifierSF{} -> orange AmmoTargetingSF{} -> green diff --git a/src/Dodge/Item/Scope.hs b/src/Dodge/Item/Scope.hs index d7f75e537..da2df8761 100644 --- a/src/Dodge/Item/Scope.hs +++ b/src/Dodge/Item/Scope.hs @@ -3,13 +3,14 @@ module Dodge.Item.Scope ( zoomScope, targetingScope, remoteScreen, - remoteController, + joystick, remoteDetonator, homingModule, -- bulletTargetingModule, augmentedHUD, bulletModule, bulletPayloadModule, + smokeReducer, ) where import Dodge.Item.Attach @@ -61,8 +62,11 @@ remoteScreen = makeAttach REMOTESCREEN remoteDetonator :: Item remoteDetonator = makeAttach REMOTEDETONATOR - & itUse . uaParams .~ APLinkProjectile Nothing + & itUse . uaParams .~ APProjectiles [] -remoteController :: Item -remoteController = makeAttach REMOTECONTROLLER - & itUse . uaParams .~ APLinkProjectile Nothing +joystick :: Item +joystick = makeAttach JOYSTICK +-- & itUse . uaParams .~ APLinkProjectile Nothing + +smokeReducer :: Item +smokeReducer = makeAttach SMOKEREDUCER diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index 9021443c1..6b023339b 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -1,5 +1,5 @@ module Dodge.Projectile.Create ( - createShell, +-- createShell, createGShell, ) where @@ -23,8 +23,10 @@ homingDrawType ht = case ht of createShell :: ProjectileHoming -> Maybe (NewInt ItmInt) -> Maybe (NewInt ItmInt) + -> Bool + -> ProjectileType -> Payload -> Muzzle -> Creature -> World -> World -createShell homing mdetonator mscreen payload muz cr w = w +createShell homing mdetonator mscreen smokestatus pjtype payload muz cr w = w & updatescreen & updatedetonator & cWorld . lWorld . projectiles . at i @@ -39,27 +41,30 @@ createShell homing mdetonator mscreen payload muz cr w = w , _prjDir = dir , _prjSpin = 0 , _prjPayload = payload - , _prjTimer = 350 + , _prjTimer = lifespan , _prjUpdates = [ CollisionEffectPU (homing ^? phRemoteID) mdetonator mscreen , TimePU , StartSpinPU 335 (_crID cr) spinamount - , RemoteDirectionPU (350 - thrustdelay) 0 homing - , ThrustPU (350 - thrustdelay) 0 + , RemoteDirectionPU (lifespan - thrustdelay) 0 homing + , ThrustPU (lifespan - thrustdelay) 0 smokestatus , ReduceSpinPU (1 - spindrag * 2 / 200) ] + , _prjType = pjtype } where + lifespan = 350 spindrag = 1 spinamount = 2 thrustdelay = 20 updatedetonator = fromMaybe id $ do screenid <- mdetonator return $ pointerToItemID screenid . itUse . uaParams - . apLinkedProjectile - ?~ i + . apProjectiles + .:~ i updatescreen = fromMaybe id $ do - screenid <- homing ^? phRemoteID + --screenid <- homing ^? phRemoteID + screenid <- mscreen return $ pointerToItemID screenid . itUse . uaParams . apLinkedProjectile ?~ i @@ -71,8 +76,10 @@ createShell homing mdetonator mscreen payload muz cr w = w createGShell :: ProjectileHoming -> Maybe (NewInt ItmInt) -> Maybe (NewInt ItmInt) + -> Bool + -> ProjectileType -> Payload -> Muzzle -> Creature -> World -> World -createGShell homing mdetonator mscreen payload muz cr w = w +createGShell homing mdetonator mscreen smokestatus pjtype payload muz cr w = w & updatescreen & updatedetonator & cWorld . lWorld . projectiles . at i @@ -80,34 +87,44 @@ createGShell homing mdetonator mscreen payload muz cr w = w { _prjPos = pos , _prjZ = 20 , _prjZVel = 5 - , _prjVel = rotateV dir (V2 4 0) + cr ^. crPos - cr ^. crOldPos + , _prjVel = rotateV dir (V2 speed 0) + cr ^. crPos - cr ^. crOldPos , _prjDraw = homingDrawType homing , _prjID = i , _prjAcc = rotateV dir (V2 3 0) , _prjDir = dir , _prjSpin = 0 , _prjPayload = payload - , _prjTimer = 350 + , _prjTimer = lifespan , _prjUpdates = [ CollisionEffectPU (homing ^? phRemoteID) mdetonator mscreen , TimePU - , StartSpinPU 335 (_crID cr) spinamount - , RemoteDirectionPU (350 - thrustdelay) 0 homing + , StartSpinPU (lifespan - 15) (_crID cr) spinamount + , RemoteDirectionPU (lifespan - thrustdelay) 0 homing , ReduceSpinPU (1 - spindrag * 2 / 200) - , ApplyGravityPU - ] + ] <> thrustorgrav + , _prjType = pjtype } where + speed = case pjtype of + Grenade -> 4 + Rocket -> 1 + lifespan = case pjtype of + Grenade -> 150 + Rocket -> 350 + thrustorgrav = case pjtype of + Grenade -> [ApplyGravityPU] + Rocket -> [ThrustPU (lifespan - thrustdelay) 0 smokestatus] spindrag = 1 spinamount = 2 thrustdelay = 20 updatedetonator = fromMaybe id $ do screenid <- mdetonator return $ pointerToItemID screenid . itUse . uaParams - . apLinkedProjectile - ?~ i + . apProjectiles + .:~ i updatescreen = fromMaybe id $ do - screenid <- homing ^? phRemoteID + --screenid <- homing ^? phRemoteID + screenid <- mscreen return $ pointerToItemID screenid . itUse . uaParams . apLinkedProjectile ?~ i diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index aaa18feef..5c78ff0fe 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -3,6 +3,7 @@ module Dodge.Projectile.Update ( updateProjectile, ) where +import Data.List (delete) import LensHelp import Control.Monad import Data.Foldable @@ -28,8 +29,8 @@ upProjectile pu pj = case pu of CollisionEffectPU mcontrolid mdetonatorid mscreenid -> shellCollisionCheck mcontrolid mdetonatorid mscreenid pj TimePU -> decTimMvVel pj - ThrustPU st et - | act st et -> doThrust pj + ThrustPU st et smoke + | act st et -> doThrust pj smoke | otherwise -> id StartSpinPU t cid spinamount | time == t -> trySpinByCID cid spinamount pj @@ -100,20 +101,22 @@ destroyProjectile mitid pjid w = guard $ itm == pjid return $ pointerToItemLocation loc . itUse . uaParams . apLinkedProjectile .~ Nothing -doThrust :: Projectile -> World -> World -doThrust pj w = +doThrust :: Projectile -> Bool -> World -> World +doThrust pj smoke w = w & randGen .~ g & cWorld . lWorld . projectiles . ix i . prjVel %~ (\v -> accel +.+ frict *.* v) & soundContinue (ShellSound i) newPos missileLaunchS (Just 1) & makeFlamelet (oldPos -.- vel) (vel +.+ rotateV (pi + sparkD) accel) 3 10 & shellTrailCloud - trailage + lifetime trailfadetime (addZ 20 (oldPos +.+ r1 +.+ 30 *.* normalizeV (oldPos -.- newPos))) where - trailage = fst . randomR (300, 500) $ _randGen w - trailfadetime = fst . randomR (100, 300) $ _randGen w + lifetime = fst . randomR lt $ _randGen w + lt | smoke = (50, 200) + | otherwise = (300,500) + trailfadetime = fst . randomR (100,300) $ _randGen w accel = _prjAcc pj i = _prjID pj oldPos = _prjPos pj @@ -198,7 +201,7 @@ explodeShell controlid mdetid screenid pj w = where updatedetonator = fromMaybe id $ do detid <- mdetid - return $ pointerToItemID detid . itUse . uaParams . apLinkedProjectile %~ deleteif + return $ pointerToItemID detid . itUse . uaParams . apProjectiles %~ delete pjid deleteif (Just x) | x == pjid = Nothing deleteif x = x updatecontroller = fromMaybe id $ do diff --git a/src/Dodge/WorldEvent/Explosion.hs b/src/Dodge/WorldEvent/Explosion.hs index 25ea9d3bf..5d61439a6 100644 --- a/src/Dodge/WorldEvent/Explosion.hs +++ b/src/Dodge/WorldEvent/Explosion.hs @@ -84,6 +84,6 @@ makeExplosionAt p vel w = fVs' = zipWith (+.+) fVs $ map inversePushOut fPs' sizes = randomRs (2, 9) $ _randGen w times = randomRs (15, 20) $ _randGen w - mF q v size time = makeFlamelet (q - (v + 2* vel)) (v + vel) size time + mF q v size time = makeFlamelet (q - (2*v + 2* vel)) (v + vel) size time newFs = zipWith3 (mF p) (zipWith (+) fPs' (fmap (3 *.*) fVs')) sizes times addFlames w' = foldl' (flip ($)) w' newFs diff --git a/src/Geometry/Intersect.hs b/src/Geometry/Intersect.hs index ca96bbb9f..1d9a18c8a 100644 --- a/src/Geometry/Intersect.hs +++ b/src/Geometry/Intersect.hs @@ -301,6 +301,7 @@ inSegArea a b c = param >= 0 && param <= dotV (b -.- a) (b -.- a) param = dotV (b -.- a) (c -.- a) -- I suspect that this may not be correct... +-- it should probably use closestPointOnSeg intersectCircSeg :: Point2 -> Float -> Point2 -> Point2 -> [Point2] intersectCircSeg c r a b | y < 0 = [] diff --git a/tags b/tags index 151920ac8..b0818e5b7 100644 --- a/tags +++ b/tags @@ -20,19 +20,20 @@ <$> 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 134;" C +ALTERIFLE src/Dodge/Data/Item/Combine.hs 135;" C AMMOMAG src/Dodge/Data/Item/Combine.hs 22;" C -AMR src/Dodge/Data/Item/Combine.hs 139;" C +AMR src/Dodge/Data/Item/Combine.hs 140;" C ANTIMATTER src/Dodge/Data/Item/Combine.hs 46;" C -APInt src/Dodge/Data/Item/Use.hs 73;" C +APInt src/Dodge/Data/Item/Use.hs 75;" C APLinkProjectile src/Dodge/Data/Item/Use.hs 71;" C -APNothing src/Dodge/Data/Item/Use.hs 74;" C +APNothing src/Dodge/Data/Item/Use.hs 76;" C +APProjectiles src/Dodge/Data/Item/Use.hs 73;" C AQUAMARINE src/Color/Data.hs 24;" C ATTACH src/Dodge/Data/Item/Combine.hs 21;" 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 +AUGMENTEDHUD src/Dodge/Data/Item/Combine.hs 77;" C +AUTOAMR src/Dodge/Data/Item/Combine.hs 141;" C +AUTOPISTOL src/Dodge/Data/Item/Combine.hs 127;" C +AUTORIFLE src/Dodge/Data/Item/Combine.hs 136;" C AZURE src/Color/Data.hs 23;" C AccessTerminal src/Dodge/Data/WorldEffect.hs 27;" C Action src/Dodge/Data/ActionPlan.hs 78;" t @@ -44,9 +45,9 @@ Add src/Dodge/Inventory/Add.hs 1;" m AddGoal src/Dodge/Data/ActionPlan.hs 45;" C AesonHelp src/AesonHelp.hs 1;" m AimAt src/Dodge/Data/ActionPlan.hs 84;" C -AimParams src/Dodge/Data/Item/Use.hs 117;" t +AimParams src/Dodge/Data/Item/Use.hs 119;" t AimParams src/Dodge/Default/Item/Use/AimParams.hs 1;" m -AimStance src/Dodge/Data/Item/Use.hs 186;" t +AimStance src/Dodge/Data/Item/Use.hs 188;" t Aiming src/Dodge/Data/Creature/Stance.hs 39;" C AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C Airlock src/Dodge/Room/Airlock.hs 4;" m @@ -56,19 +57,19 @@ 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 48;" C +AmmoEffectSF src/Dodge/Data/ComposedItem.hs 50;" C AmmoInLink src/Dodge/Data/ComposedItem.hs 16;" C AmmoMag src/Dodge/Data/Item.hs 34;" C -AmmoMagSF src/Dodge/Data/ComposedItem.hs 40;" C -AmmoMagType src/Dodge/Data/Item/Combine.hs 80;" t +AmmoMagSF src/Dodge/Data/ComposedItem.hs 41;" C +AmmoMagType src/Dodge/Data/Item/Combine.hs 81;" t AmmoModLink src/Dodge/Data/ComposedItem.hs 18;" C -AmmoModifierSF src/Dodge/Data/ComposedItem.hs 45;" C -AmmoParams src/Dodge/Data/Item/Use.hs 110;" t +AmmoModifierSF src/Dodge/Data/ComposedItem.hs 47;" C +AmmoParams src/Dodge/Data/Item/Use.hs 112;" t AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 20;" C -AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 47;" C -AmmoPerShot src/Dodge/Data/Item/Use.hs 160;" t +AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 49;" C +AmmoPerShot src/Dodge/Data/Item/Use.hs 162;" t AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 19;" C -AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 46;" C +AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 48;" C AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 43;" t AnRoom src/Dodge/Annotation/Data.hs 18;" C AnTree src/Dodge/Annotation/Data.hs 19;" C @@ -100,8 +101,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 27;" C -AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 39;" C +AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 28;" C +AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 40;" 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 @@ -111,26 +112,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 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 +BANGCONE src/Dodge/Data/Item/Combine.hs 129;" C +BANGROD src/Dodge/Data/Item/Combine.hs 138;" C +BANGSTICK src/Dodge/Data/Item/Combine.hs 121;" C +BATTERY src/Dodge/Data/Item/Combine.hs 86;" C +BATTERYPACK src/Dodge/Data/Item/Combine.hs 110;" C +BELTMAG src/Dodge/Data/Item/Combine.hs 84;" C BLACK src/Color/Data.hs 28;" C -BLINKER src/Dodge/Data/Item/Combine.hs 160;" C -BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 161;" C -BLOWTORCH src/Dodge/Data/Item/Combine.hs 146;" C +BLINKER src/Dodge/Data/Item/Combine.hs 161;" C +BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 162;" C +BLOWTORCH src/Dodge/Data/Item/Combine.hs 147;" C BLUE src/Color/Data.hs 17;" C -BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 129;" C +BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 130;" C BLUNT src/Dodge/Data/Damage/Type.hs 13;" C BQuad src/Geometry/Bezier.hs 9;" t -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 +BRAINHAT src/Dodge/Data/Item/Combine.hs 101;" C +BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 109;" C +BULLETBELTPACK src/Dodge/Data/Item/Combine.hs 108;" 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 136;" C +BURSTRIFLE src/Dodge/Data/Item/Combine.hs 137;" 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 @@ -146,7 +147,7 @@ Base src/Picture/Base.hs 4;" m BasicBeamDraw src/Dodge/Data/Beam.hs 34;" C BasicBulletTrajectory src/Dodge/Data/Bullet.hs 50;" C BasicBulletTrajectoryType src/Dodge/Data/Bullet.hs 57;" C -BasicFlare src/Dodge/Data/Item/Use.hs 130;" C +BasicFlare src/Dodge/Data/Item/Use.hs 132;" C BatteryGuns src/Dodge/Item/Held/BatteryGuns.hs 1;" m BatteryGuns src/Dodge/Item/Weapon/BatteryGuns.hs 1;" m Beam src/Dodge/Data/Beam.hs 18;" t @@ -156,7 +157,7 @@ BeamCombine src/Dodge/Data/Beam.hs 47;" C BeamCombineType src/Dodge/Data/Beam.hs 38;" t BeamDraw src/Dodge/Data/Beam.hs 33;" t BeamDrawColor src/Dodge/Data/Beam.hs 35;" C -BeamShooterParams src/Dodge/Data/Item/Use.hs 91;" C +BeamShooterParams src/Dodge/Data/Item/Use.hs 93;" 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 @@ -227,9 +228,9 @@ BulletMod src/Dodge/Data/Item/BulletMod.hs 10;" t BulletMod src/Dodge/Data/Item/BulletMod.hs 3;" m BulletModEffect src/Dodge/Data/Item/BulletMod.hs 13;" C BulletModPayload src/Dodge/Data/Item/BulletMod.hs 12;" C -BulletParams src/Dodge/Data/Item/Use.hs 111;" C +BulletParams src/Dodge/Data/Item/Use.hs 113;" C BulletPayload src/Dodge/Data/Bullet.hs 41;" t -BulletShooterParams src/Dodge/Data/Item/Use.hs 95;" C +BulletShooterParams src/Dodge/Data/Item/Use.hs 97;" C BulletTrajectory src/Dodge/Data/Bullet.hs 49;" t BulletTrajectoryType src/Dodge/Data/Bullet.hs 56;" t Button src/Dodge/Data/Button.hs 48;" t @@ -246,13 +247,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 86;" C +CHEMFUELPOUCH src/Dodge/Data/Item/Combine.hs 87;" 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 166;" C +CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 167;" 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 @@ -340,7 +341,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 53;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 55;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -354,7 +355,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 89;" t +ConsumableItemType src/Dodge/Data/Item/Combine.hs 90;" 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 @@ -437,9 +438,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 159;" C +DETECTOR src/Dodge/Data/Item/Combine.hs 160;" C DPoint2 src/Geometry/Data.hs 34;" t -DRUMMAG src/Dodge/Data/Item/Combine.hs 82;" C +DRUMMAG src/Dodge/Data/Item/Combine.hs 83;" C DS src/DoubleStack.hs 3;" t DT src/Dodge/Data/DoubleTree.hs 30;" C DTBottomNode src/Dodge/Data/DoubleTree.hs 20;" C @@ -493,7 +494,7 @@ 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 54;" C -DefaultHeldParams src/Dodge/Data/Item/Use.hs 78;" C +DefaultHeldParams src/Dodge/Data/Item/Use.hs 80;" C DefaultLightSourceDraw src/Dodge/Data/LightSource.hs 13;" C DefaultRoomType src/Dodge/Data/Room.hs 31;" C DefaultTerminal src/Dodge/Data/Terminal.hs 54;" C @@ -504,7 +505,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 164;" t +Detector src/Dodge/Data/Item/Combine.hs 165;" t Dirt src/Dodge/Data/Material.hs 11;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t Display src/Dodge/Item/Display.hs 2;" m @@ -598,13 +599,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 138;" C +ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 139;" 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 91;" C +EXPLOSIVES src/Dodge/Data/Item/Combine.hs 92;" 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 @@ -633,7 +634,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 94;" t +EquipItemType src/Dodge/Data/Item/Combine.hs 95;" 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 @@ -643,7 +644,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 34;" C +EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 35;" C Escape src/Dodge/Data/Scenario.hs 10;" C EscapeMenuOption src/Dodge/Data/Universe.hs 74;" t Essential src/Shape/Data.hs 34;" C @@ -662,16 +663,16 @@ ExternallyGeneratedSounds src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 2;" 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 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 +FLAMESHIELD src/Dodge/Data/Item/Combine.hs 97;" C +FLAMESPITTER src/Dodge/Data/Item/Combine.hs 143;" C +FLAMETHROWER src/Dodge/Data/Item/Combine.hs 144;" C +FLAMETORRENT src/Dodge/Data/Item/Combine.hs 145;" C +FLAMEWALL src/Dodge/Data/Item/Combine.hs 146;" C FLAMING src/Dodge/Data/Damage/Type.hs 18;" C -FLATSHIELD src/Dodge/Data/Item/Combine.hs 157;" C -FRONTARMOUR src/Dodge/Data/Item/Combine.hs 97;" C +FLATSHIELD src/Dodge/Data/Item/Combine.hs 158;" C +FRONTARMOUR src/Dodge/Data/Item/Combine.hs 98;" C FUELCELL src/Dodge/Data/Item/Combine.hs 65;" C -FUELPACK src/Dodge/Data/Item/Combine.hs 106;" C +FUELPACK src/Dodge/Data/Item/Combine.hs 107;" 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 @@ -689,7 +690,7 @@ FlameBeamCombine src/Dodge/Data/Beam.hs 39;" C FlameSound src/Dodge/Data/SoundOrigin.hs 27;" C Flamer src/Dodge/Data/SoundOrigin.hs 25;" C Flank src/Dodge/Data/ActionPlan.hs 177;" C -FlareType src/Dodge/Data/Item/Use.hs 128;" t +FlareType src/Dodge/Data/Item/Use.hs 130;" t FlashBall src/Dodge/Data/Bullet.hs 32;" C FlatFaces src/Shape/Data.hs 17;" C FlatShieldParams src/Dodge/Data/Item/Params.hs 19;" C @@ -736,15 +737,15 @@ 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 28;" C -FunctionChangeSF src/Dodge/Data/ComposedItem.hs 49;" C +FunctionChangeLink src/Dodge/Data/ComposedItem.hs 29;" C +FunctionChangeSF src/Dodge/Data/ComposedItem.hs 51;" C GEqC src/SameConstr.hs 20;" c GLASSSHARD src/Dodge/Data/Item/Combine.hs 38;" C -GLAUNCHER src/Dodge/Data/Item/Combine.hs 153;" C +GLAUNCHER src/Dodge/Data/Item/Combine.hs 154;" C GLHelp src/GLHelp.hs 1;" m -GRAPECANNON src/Dodge/Data/Item/Combine.hs 130;" C +GRAPECANNON src/Dodge/Data/Item/Combine.hs 131;" C GREEN src/Color/Data.hs 16;" C -GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 35;" C +GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 36;" C GameOverOptions src/Dodge/Data/Universe.hs 70;" C GameRoom src/Dodge/GameRoom.hs 15;" t GameRoom src/Dodge/GameRoom.hs 8;" m @@ -753,8 +754,8 @@ GasAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 49;" C GasCloud src/Dodge/Data/Cloud.hs 31;" C GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 60;" t GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 57;" t -GasParams src/Dodge/Data/Item/Use.hs 113;" C -GasSprayParams src/Dodge/Data/Item/Use.hs 79;" C +GasParams src/Dodge/Data/Item/Use.hs 115;" C +GasSprayParams src/Dodge/Data/Item/Use.hs 81;" C GenCr src/Dodge/Data/Creature/State.hs 31;" C GenFloat src/Dodge/Data/GenFloat.hs 11;" t GenFloat src/Dodge/Data/GenFloat.hs 5;" m @@ -795,11 +796,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 101;" C -HEADLAMP src/Dodge/Data/Item/Combine.hs 102;" C +HAT src/Dodge/Data/Item/Combine.hs 102;" C +HEADLAMP src/Dodge/Data/Item/Combine.hs 103;" 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 75;" C +HOMINGMODULE src/Dodge/Data/Item/Combine.hs 76;" 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 @@ -817,13 +818,13 @@ HammerUp src/Dodge/Data/Hammer.hs 20;" C HandPos src/Dodge/Creature/HandPos.hs 1;" m HardQuit src/Dodge/Data/Universe.hs 68;" C HasHammer src/Dodge/Data/Hammer.hs 14;" C -HeavySmokeFlare src/Dodge/Data/Item/Use.hs 133;" C +HeavySmokeFlare src/Dodge/Data/Item/Use.hs 135;" 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 119;" t +HeldItemType src/Dodge/Data/Item/Combine.hs 120;" t HeldOffset src/Dodge/Item/HeldOffset.hs 1;" m -HeldParams src/Dodge/Data/Item/Use.hs 77;" t -HeldPlatformSF src/Dodge/Data/ComposedItem.hs 33;" C +HeldParams src/Dodge/Data/Item/Use.hs 79;" t +HeldPlatformSF src/Dodge/Data/ComposedItem.hs 34;" C HeldScroll src/Dodge/HeldScroll.hs 1;" m HeldUse src/Dodge/Data/Item/HeldUse.hs 6;" m HeldUse src/Dodge/HeldUse.hs 4;" m @@ -851,11 +852,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 55;" C +ILink src/Dodge/Data/ComposedItem.hs 57;" C IMSS src/Dodge/Data/SelectionList.hs 36;" t -INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 99;" C +INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 100;" C IRONBAR src/Dodge/Data/Item/Combine.hs 57;" C -ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 165;" C +ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 166;" C ImmediateEffect src/Loop/Data.hs 8;" C Importance src/Shape/Data.hs 34;" t Important src/Shape/Data.hs 35;" C @@ -927,19 +928,19 @@ ItEffect src/Dodge/ItEffect.hs 2;" m ItID src/Dodge/Data/Item.hs 29;" t ItInvEffect src/Dodge/Data/Item/Effect.hs 19;" t ItTargeting src/Dodge/Data/Item.hs 56;" C -ItZoom src/Dodge/Data/Item/Use.hs 193;" t +ItZoom src/Dodge/Data/Item/Use.hs 195;" t Item src/Dodge/Data/Item.hs 41;" t Item src/Dodge/Data/Item.hs 4;" m 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 55;" t +ItemLink src/Dodge/Data/ComposedItem.hs 57;" 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 32;" t +ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 33;" 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 @@ -947,18 +948,21 @@ 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 105;" C +JOYSTICK src/Dodge/Data/Item/Combine.hs 73;" C +JUMPLEGS src/Dodge/Data/Item/Combine.hs 106;" C JoinClust src/Dodge/Combine/Graph.hs 21;" C +JoystickLink src/Dodge/Data/ComposedItem.hs 24;" C +JoystickSF src/Dodge/Data/ComposedItem.hs 43;" 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 158;" C +KEYCARD src/Dodge/Data/Item/Combine.hs 159;" C Kill src/Dodge/Data/ActionPlan.hs 198;" C -LASER src/Dodge/Data/Item/Combine.hs 149;" C +LASER src/Dodge/Data/Item/Combine.hs 150;" C LASERING src/Dodge/Data/Damage/Type.hs 19;" C LDT src/Dodge/Data/DoubleTree.hs 40;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 28;" C -LDTComb src/Dodge/Item/Grammar.hs 171;" t +LDTComb src/Dodge/Item/Grammar.hs 175;" 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 +973,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 60;" C -LUpdate src/Dodge/Data/ComposedItem.hs 65;" C +LTest src/Dodge/Data/ComposedItem.hs 62;" C +LUpdate src/Dodge/Data/ComposedItem.hs 67;" 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 @@ -986,7 +990,7 @@ Lampoid src/Dodge/Data/Creature/Misc.hs 83;" C Lampoid src/Dodge/Lampoid.hs 1;" m Large src/Shape/Data.hs 29;" C LasBeamCombine src/Dodge/Data/Beam.hs 40;" C -LasGunFlare src/Dodge/Data/Item/Use.hs 134;" C +LasGunFlare src/Dodge/Data/Item/Use.hs 136;" C LasSound src/Dodge/Data/SoundOrigin.hs 28;" C LasTurret src/Dodge/Room/LasTurret.hs 1;" m Laser src/Dodge/Data/Laser.hs 30;" t @@ -1027,8 +1031,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 60;" t -LinkUpdate src/Dodge/Data/ComposedItem.hs 65;" t +LinkTest src/Dodge/Data/ComposedItem.hs 62;" t +LinkUpdate src/Dodge/Data/ComposedItem.hs 67;" 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 +1067,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 125;" C +MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 126;" C MAGENTA src/Color/Data.hs 20;" C MAGNET src/Dodge/Data/Item/Combine.hs 45;" C -MAGSHIELD src/Dodge/Data/Item/Combine.hs 95;" C +MAGSHIELD src/Dodge/Data/Item/Combine.hs 96;" 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 90;" C +MEDKIT src/Dodge/Data/Item/Combine.hs 91;" 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 131;" C +MINIGUNX src/Dodge/Data/Item/Combine.hs 132;" 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 +1112,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 29;" C -MakeAutoSF src/Dodge/Data/ComposedItem.hs 50;" C +MakeAutoLink src/Dodge/Data/ComposedItem.hs 30;" C +MakeAutoSF src/Dodge/Data/ComposedItem.hs 52;" 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 @@ -1156,7 +1160,7 @@ Metapysics src/Dodge/Data/Scenario.hs 17;" t Military src/Dodge/Data/Scenario.hs 45;" C Mine src/Dodge/Data/Scenario.hs 64;" C MiniGunAI src/Dodge/Data/Creature/Misc.hs 58;" C -MiniGunFlare src/Dodge/Data/Item/Use.hs 132;" C +MiniGunFlare src/Dodge/Data/Item/Use.hs 134;" C Misc src/Dodge/Data/Creature/Misc.hs 6;" m Misc src/Dodge/Data/Equipment/Misc.hs 6;" m Misc src/Dodge/Data/Item/Misc.hs 6;" m @@ -1190,23 +1194,23 @@ Music src/Music.hs 1;" m MusicData src/Music.hs 7;" t MustBeHeld src/Dodge/Data/Item/Use.hs 63;" C Mute src/Dodge/Data/Creature/Misc.hs 28;" C -Muzzle src/Dodge/Data/Item/Use.hs 165;" t -MuzzleBlink src/Dodge/Data/Item/Use.hs 153;" C -MuzzleDetector src/Dodge/Data/Item/Use.hs 152;" C -MuzzleEffect src/Dodge/Data/Item/Use.hs 138;" t +Muzzle src/Dodge/Data/Item/Use.hs 167;" t +MuzzleBlink src/Dodge/Data/Item/Use.hs 155;" C +MuzzleDetector src/Dodge/Data/Item/Use.hs 154;" C +MuzzleEffect src/Dodge/Data/Item/Use.hs 140;" t MuzzleEffect src/Dodge/Data/MuzzleEffect.hs 5;" m -MuzzleGLauncher src/Dodge/Data/Item/Use.hs 144;" C -MuzzleLaser src/Dodge/Data/Item/Use.hs 140;" C -MuzzleNozzle src/Dodge/Data/Item/Use.hs 145;" C -MuzzleRLauncher src/Dodge/Data/Item/Use.hs 143;" C -MuzzleRewind src/Dodge/Data/Item/Use.hs 155;" C -MuzzleScroller src/Dodge/Data/Item/Use.hs 157;" C -MuzzleShatter src/Dodge/Data/Item/Use.hs 151;" C -MuzzleShootBullet src/Dodge/Data/Item/Use.hs 139;" C -MuzzleStopper src/Dodge/Data/Item/Use.hs 156;" C -MuzzleTesla src/Dodge/Data/Item/Use.hs 141;" C -MuzzleTractor src/Dodge/Data/Item/Use.hs 142;" C -MuzzleUnsafeBlink src/Dodge/Data/Item/Use.hs 154;" C +MuzzleGLauncher src/Dodge/Data/Item/Use.hs 146;" C +MuzzleLaser src/Dodge/Data/Item/Use.hs 142;" C +MuzzleNozzle src/Dodge/Data/Item/Use.hs 147;" C +MuzzleRLauncher src/Dodge/Data/Item/Use.hs 145;" C +MuzzleRewind src/Dodge/Data/Item/Use.hs 157;" C +MuzzleScroller src/Dodge/Data/Item/Use.hs 159;" C +MuzzleShatter src/Dodge/Data/Item/Use.hs 153;" C +MuzzleShootBullet src/Dodge/Data/Item/Use.hs 141;" C +MuzzleStopper src/Dodge/Data/Item/Use.hs 158;" C +MuzzleTesla src/Dodge/Data/Item/Use.hs 143;" C +MuzzleTractor src/Dodge/Data/Item/Use.hs 144;" C +MuzzleUnsafeBlink src/Dodge/Data/Item/Use.hs 156;" C MvForward src/Dodge/Data/ActionPlan.hs 35;" C MvTurnToward src/Dodge/Data/ActionPlan.hs 34;" C MvWalking src/Dodge/Data/Creature/Misc.hs 39;" C @@ -1229,7 +1233,7 @@ NewSideEffect src/Dodge/Data/Universe.hs 63;" C NextArcStep src/Dodge/Data/ArcStep.hs 21;" t Ngon src/Dodge/Room/Ngon.hs 1;" m NoAction src/Dodge/Data/ActionPlan.hs 152;" C -NoAmmoParams src/Dodge/Data/Item/Use.hs 114;" C +NoAmmoParams src/Dodge/Data/Item/Use.hs 116;" C NoArguments src/Dodge/Data/Terminal.hs 95;" C NoBeamCombine src/Dodge/Data/Beam.hs 43;" C NoConcurrentEffect src/Loop/Data.hs 7;" C @@ -1244,14 +1248,14 @@ NoDropEffect src/Dodge/Data/Item/Effect.hs 28;" C NoEquipParams src/Dodge/Data/Item/Use/Equipment.hs 36;" C NoEscapeMenuOption src/Dodge/Data/Universe.hs 77;" C NoFaction src/Dodge/Data/Creature/State.hs 40;" C -NoFlare src/Dodge/Data/Item/Use.hs 129;" C +NoFlare src/Dodge/Data/Item/Use.hs 131;" C NoHammer src/Dodge/Data/Hammer.hs 13;" C NoHeldUseEffect src/Dodge/Data/Item/Use.hs 52;" C NoHoming src/Dodge/Data/Item/Use/Consumption/Ammo.hs 24;" C NoIntImp src/Dodge/Data/CreatureEffect.hs 20;" C NoInvEffect src/Dodge/Data/Item/Effect.hs 20;" C NoItTargeting src/Dodge/Data/Item.hs 55;" C -NoLightFlare src/Dodge/Data/Item/Use.hs 131;" C +NoLightFlare src/Dodge/Data/Item/Use.hs 133;" C NoLighting src/Dodge/Data/Config.hs 104;" C NoMouseContext src/Dodge/Data/Input.hs 20;" C NoMvType src/Dodge/Data/Creature/Misc.hs 38;" C @@ -1331,7 +1335,7 @@ OnSpecial src/Dodge/Data/Equipment/Misc.hs 28;" C OnTurret src/Dodge/Data/Item/Location.hs 37;" C OnceSound src/Dodge/Data/SoundOrigin.hs 16;" C OneArgument src/Dodge/Data/Terminal.hs 96;" C -OneHand src/Dodge/Data/Item/Use.hs 190;" C +OneHand src/Dodge/Data/Item/Use.hs 192;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 14;" C OnwardList src/Dodge/Annotation/Data.hs 16;" C Opacity src/Dodge/Data/Wall.hs 38;" t @@ -1365,14 +1369,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 124;" C +PISTOL src/Dodge/Data/Item/Combine.hs 125;" 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 154;" C +POISONSPRAYER src/Dodge/Data/Item/Combine.hs 155;" C PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 66;" C -POWERLEGS src/Dodge/Data/Item/Combine.hs 103;" C +POWERLEGS src/Dodge/Data/Item/Combine.hs 104;" 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 @@ -1471,7 +1475,7 @@ Projectile src/Dodge/Data/Projectile.hs 6;" m Projectile src/Dodge/Projectile.hs 1;" m ProjectileDraw src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" t ProjectileHoming src/Dodge/Data/Item/Use/Consumption/Ammo.hs 23;" t -ProjectileParams src/Dodge/Data/Item/Use.hs 112;" C +ProjectileParams src/Dodge/Data/Item/Use.hs 114;" C ProjectileUpdate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 29;" t Prop src/Dodge/Data/Prop.hs 18;" t Prop src/Dodge/Data/Prop.hs 6;" m @@ -1538,14 +1542,13 @@ 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 121;" C +REWINDER src/Dodge/Data/Item/Combine.hs 122;" C RGBA src/Color/Data.hs 31;" t -RIFLE src/Dodge/Data/Item/Combine.hs 133;" C -RLAUNCHER src/Dodge/Data/Item/Combine.hs 151;" C -RLAUNCHERX src/Dodge/Data/Item/Combine.hs 152;" C +RIFLE src/Dodge/Data/Item/Combine.hs 134;" C +RLAUNCHER src/Dodge/Data/Item/Combine.hs 152;" C +RLAUNCHERX src/Dodge/Data/Item/Combine.hs 153;" C ROSE src/Color/Data.hs 21;" C RPLinkStatus src/Dodge/Data/Room.hs 55;" t RProps src/Dodge/Layout/Generate.hs 13;" C @@ -1579,13 +1582,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 -RemoteControllerLink src/Dodge/Data/ComposedItem.hs 24;" C -RemoteControllerSF src/Dodge/Data/ComposedItem.hs 42;" C RemoteDetonatorLink src/Dodge/Data/ComposedItem.hs 26;" C -RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 43;" C +RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 44;" C RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C RemoteScreenLink src/Dodge/Data/ComposedItem.hs 25;" C -RemoteScreenSF src/Dodge/Data/ComposedItem.hs 41;" C +RemoteScreenSF src/Dodge/Data/ComposedItem.hs 42;" 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 @@ -1639,16 +1640,17 @@ 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 155;" C +SHATTERGUN src/Dodge/Data/Item/Combine.hs 156;" C SHATTERING src/Dodge/Data/Damage/Type.hs 17;" 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 +SHELLMAG src/Dodge/Data/Item/Combine.hs 85;" C +SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 78;" C +SMG src/Dodge/Data/Item/Combine.hs 128;" C +SMOKEREDUCER src/Dodge/Data/Item/Combine.hs 75;" C +SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 142;" C SOUNDSENSOR src/Dodge/Data/Item/Combine.hs 59;" C -SPARKGUN src/Dodge/Data/Item/Combine.hs 147;" C +SPARKGUN src/Dodge/Data/Item/Combine.hs 148;" C SPARKING src/Dodge/Data/Damage/Type.hs 15;" C -SPEEDLEGS src/Dodge/Data/Item/Combine.hs 104;" C +SPEEDLEGS src/Dodge/Data/Item/Combine.hs 105;" 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 @@ -1761,6 +1763,8 @@ SkiffBaySS src/Dodge/Data/Scenario.hs 108;" C SleepingQuatersSS src/Dodge/Data/Scenario.hs 90;" C Small src/Shape/Data.hs 31;" C SmokeCloud src/Dodge/Data/Cloud.hs 30;" C +SmokeReducerLink src/Dodge/Data/ComposedItem.hs 27;" C +SmokeReducerSF src/Dodge/Data/ComposedItem.hs 45;" C SmoothScroll src/Dodge/SmoothScroll.hs 1;" m SocialUpheaval src/Dodge/Data/Scenario.hs 27;" C SolarGovernment src/Dodge/Data/Scenario.hs 53;" C @@ -1840,16 +1844,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 148;" C +TESLAGUN src/Dodge/Data/Item/Combine.hs 149;" 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 123;" C -TIMESTOPPER src/Dodge/Data/Item/Combine.hs 122;" C +TIMESCROLLER src/Dodge/Data/Item/Combine.hs 124;" C +TIMESTOPPER src/Dodge/Data/Item/Combine.hs 123;" C TIN src/Dodge/Data/Item/Combine.hs 35;" C -TINMAG src/Dodge/Data/Item/Combine.hs 81;" C +TINMAG src/Dodge/Data/Item/Combine.hs 82;" C TO src/Shader/Data.hs 59;" t -TORCH src/Dodge/Data/Item/Combine.hs 156;" C -TRACTORGUN src/Dodge/Data/Item/Combine.hs 150;" C +TORCH src/Dodge/Data/Item/Combine.hs 157;" C +TRACTORGUN src/Dodge/Data/Item/Combine.hs 151;" 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 @@ -1916,7 +1920,7 @@ TeslaArc src/Dodge/Data/TeslaArc.hs 15;" t TeslaArc src/Dodge/Data/TeslaArc.hs 6;" m TeslaBall src/Dodge/Data/Bullet.hs 31;" C TeslaBeamCombine src/Dodge/Data/Beam.hs 41;" C -TeslaGunFlare src/Dodge/Data/Item/Use.hs 135;" C +TeslaGunFlare src/Dodge/Data/Item/Use.hs 137;" C Test src/Dodge/Creature/Test.hs 8;" m Test src/Dodge/Event/Test.hs 1;" m Test src/Picture/Test.hs 1;" m @@ -1973,7 +1977,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 38;" C +TriggerSF src/Dodge/Data/ComposedItem.hs 39;" 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 @@ -1987,13 +1991,13 @@ Turret src/Dodge/Data/Machine.hs 57;" t Turret src/Dodge/Placement/Instance/Turret.hs 1;" m TurretInt src/Dodge/Data/Item/Location.hs 21;" t TwistGoal src/Dodge/Data/Scenario.hs 15;" C -TwoHandFlat src/Dodge/Data/Item/Use.hs 189;" C -TwoHandOver src/Dodge/Data/Item/Use.hs 188;" C -TwoHandUnder src/Dodge/Data/Item/Use.hs 187;" C +TwoHandFlat src/Dodge/Data/Item/Use.hs 191;" C +TwoHandOver src/Dodge/Data/Item/Use.hs 190;" C +TwoHandUnder src/Dodge/Data/Item/Use.hs 189;" 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 44;" C +UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 46;" 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 @@ -2025,7 +2029,7 @@ UseBulletMod src/Dodge/Data/Item/Use.hs 48;" C UseCondition src/Dodge/Data/Item/Use.hs 62;" t UseDelay src/Dodge/Data/Item/HeldDelay.hs 13;" t UseEquip src/Dodge/Data/Item/Use.hs 44;" C -UseExactly src/Dodge/Data/Item/Use.hs 161;" C +UseExactly src/Dodge/Data/Item/Use.hs 163;" C UseFocus src/Dodge/Data/Item/Use.hs 57;" t UseFromLocation src/Dodge/Data/Item/Use.hs 59;" C UseFromRoot src/Dodge/Data/Item/Use.hs 58;" C @@ -2038,7 +2042,7 @@ UseNothing src/Dodge/Data/Item/Use.hs 46;" C UseScope src/Dodge/Data/Item/Use.hs 47;" C UseSelf src/Dodge/Data/ActionPlan.hs 157;" C UseTarget src/Dodge/Data/ActionPlan.hs 154;" C -UseUpTo src/Dodge/Data/Item/Use.hs 162;" C +UseUpTo src/Dodge/Data/Item/Use.hs 164;" C UseableAnytime src/Dodge/Data/Item/Use.hs 64;" C UsedInLink src/Dodge/Data/Room.hs 61;" C UsedOutLink src/Dodge/Data/Room.hs 56;" C @@ -2048,7 +2052,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 132;" C +VOLLEYGUN src/Dodge/Data/Item/Combine.hs 133;" C Vector src/Geometry/Vector.hs 3;" m Vector3D src/Geometry/Vector3D.hs 2;" m VertexAttribute src/Shader/Data.hs 68;" t @@ -2063,12 +2067,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 167;" C +WALLDETECTOR src/Dodge/Data/Item/Combine.hs 168;" 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 98;" C -WRIST_ECG src/Dodge/Data/Item/Combine.hs 110;" C +WRISTARMOUR src/Dodge/Data/Item/Combine.hs 99;" C +WRIST_ECG src/Dodge/Data/Item/Combine.hs 111;" 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 @@ -2125,9 +2129,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 36;" C +WeaponScopeSF src/Dodge/Data/ComposedItem.hs 37;" C WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 23;" C -WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 37;" C +WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 38;" 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 @@ -2160,13 +2164,13 @@ Zoning src/Dodge/Zoning.hs 1;" m __Just' src/MaybeHelp.hs 13;" f _actAction src/Dodge/Data/ActionPlan.hs 81;" f _actLabel src/Dodge/Data/ActionPlan.hs 80;" f -_aimHandlePos src/Dodge/Data/Item/Use.hs 123;" f -_aimMuzzles src/Dodge/Data/Item/Use.hs 124;" f -_aimRange src/Dodge/Data/Item/Use.hs 120;" f -_aimStance src/Dodge/Data/Item/Use.hs 122;" f -_aimTurnSpeed src/Dodge/Data/Item/Use.hs 119;" f -_aimWeight src/Dodge/Data/Item/Use.hs 118;" f -_aimZoom src/Dodge/Data/Item/Use.hs 121;" f +_aimHandlePos src/Dodge/Data/Item/Use.hs 125;" f +_aimMuzzles src/Dodge/Data/Item/Use.hs 126;" f +_aimRange src/Dodge/Data/Item/Use.hs 122;" f +_aimStance src/Dodge/Data/Item/Use.hs 124;" f +_aimTurnSpeed src/Dodge/Data/Item/Use.hs 121;" f +_aimWeight src/Dodge/Data/Item/Use.hs 120;" f +_aimZoom src/Dodge/Data/Item/Use.hs 123;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 21;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 24;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 28;" f @@ -2178,14 +2182,15 @@ _allocRemoveID src/Dodge/Data/RightButtonOptions.hs 34;" f _allocSwapID src/Dodge/Data/RightButtonOptions.hs 30;" f _alphaDivideShader src/Data/Preload/Render.hs 18;" f _ambushTarget src/Dodge/Data/ActionPlan.hs 178;" f -_ampBullet src/Dodge/Data/Item/Use.hs 111;" f -_ampCreateGas src/Dodge/Data/Item/Use.hs 113;" f -_ampPayload src/Dodge/Data/Item/Use.hs 112;" f +_ampBullet src/Dodge/Data/Item/Use.hs 113;" f +_ampCreateGas src/Dodge/Data/Item/Use.hs 115;" f +_ampPayload src/Dodge/Data/Item/Use.hs 114;" f _apAction src/Dodge/Data/ActionPlan.hs 20;" f _apGoal src/Dodge/Data/ActionPlan.hs 22;" f _apImpulse src/Dodge/Data/ActionPlan.hs 19;" f -_apInt src/Dodge/Data/Item/Use.hs 73;" f +_apInt src/Dodge/Data/Item/Use.hs 75;" f _apLinkedProjectile src/Dodge/Data/Item/Use.hs 72;" f +_apProjectiles src/Dodge/Data/Item/Use.hs 74;" f _apStrategy src/Dodge/Data/ActionPlan.hs 21;" f _arLoaded src/Dodge/Data/Item/Use/Consumption.hs 28;" f _arMax src/Dodge/Data/Item/Use/Consumption.hs 29;" f @@ -2259,9 +2264,9 @@ _buPayload src/Dodge/Data/Bullet.hs 19;" f _buPos src/Dodge/Data/Bullet.hs 23;" f _buVel src/Dodge/Data/Bullet.hs 21;" f _buWidth src/Dodge/Data/Bullet.hs 25;" f -_bulGunSound src/Dodge/Data/Item/Use.hs 85;" f -_bulGunSound src/Dodge/Data/Item/Use.hs 92;" f -_bulGunSound src/Dodge/Data/Item/Use.hs 102;" f +_bulGunSound src/Dodge/Data/Item/Use.hs 87;" f +_bulGunSound src/Dodge/Data/Item/Use.hs 94;" f +_bulGunSound src/Dodge/Data/Item/Use.hs 104;" f _bullets src/Dodge/Data/LWorld.hs 106;" f _buttons src/Dodge/Data/LWorld.hs 135;" f _cClock src/Dodge/Data/CWorld.hs 28;" f @@ -2525,7 +2530,7 @@ _fullscreenShader src/Data/Preload/Render.hs 20;" f _futureWorlds src/Dodge/Data/World.hs 65;" f _futureWorlds src/Dodge/Data/World.hs 71;" f _gameplay_rotate_to_wall src/Dodge/Data/Config.hs 55;" f -_gasCreation src/Dodge/Data/Item/Use.hs 80;" f +_gasCreation src/Dodge/Data/Item/Use.hs 82;" f _genPlacements src/Dodge/Data/GenWorld.hs 25;" f _genRooms src/Dodge/Data/GenWorld.hs 26;" f _getAttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" f @@ -2574,8 +2579,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 57;" f -_iatType src/Dodge/Data/ComposedItem.hs 56;" f +_iatOrient src/Dodge/Data/ComposedItem.hs 59;" f +_iatType src/Dodge/Data/ComposedItem.hs 58;" 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 @@ -2625,9 +2630,9 @@ _itType src/Dodge/Data/Item.hs 46;" f _itUse src/Dodge/Data/Item.hs 42;" f _itUseCondition src/Dodge/Data/Item.hs 43;" f _itemLocations src/Dodge/Data/LWorld.hs 100;" f -_izFac src/Dodge/Data/Item/Use.hs 196;" f -_izMax src/Dodge/Data/Item/Use.hs 194;" f -_izMin src/Dodge/Data/Item/Use.hs 195;" f +_izFac src/Dodge/Data/Item/Use.hs 198;" f +_izMax src/Dodge/Data/Item/Use.hs 196;" f +_izMin src/Dodge/Data/Item/Use.hs 197;" f _killTarget src/Dodge/Data/ActionPlan.hs 198;" f _lClock src/Dodge/Data/LWorld.hs 143;" f _lTestInt src/Dodge/Data/LWorld.hs 145;" f @@ -2671,9 +2676,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 68;" f -_luLinkType src/Dodge/Data/ComposedItem.hs 66;" f -_luParentUpdate src/Dodge/Data/ComposedItem.hs 67;" f +_luChildUpdate src/Dodge/Data/ComposedItem.hs 70;" f +_luLinkType src/Dodge/Data/ComposedItem.hs 68;" f +_luParentUpdate src/Dodge/Data/ComposedItem.hs 69;" 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 @@ -2753,20 +2758,20 @@ _mtLabel src/Dodge/Tree/Compose/Data.hs 8;" f _mtTree src/Dodge/Data/MetaTree.hs 10;" f _mtTree src/Dodge/Tree/Compose/Data.hs 8;" f _musicData src/Data/Preload.hs 13;" f -_muzVel src/Dodge/Data/Item/Use.hs 96;" f +_muzVel src/Dodge/Data/Item/Use.hs 98;" f _mvAimSpeed src/Dodge/Data/Creature/Misc.hs 44;" f _mvSpeed src/Dodge/Data/Creature/Misc.hs 39;" f _mvToPoint src/Dodge/Data/Creature.hs 81;" f _mvTurnJit src/Dodge/Data/Creature/Misc.hs 43;" f _mvTurnRad src/Dodge/Data/Creature/Misc.hs 42;" f -_mzAmmoPerShot src/Dodge/Data/Item/Use.hs 172;" f -_mzAmmoSlot src/Dodge/Data/Item/Use.hs 169;" f -_mzEffect src/Dodge/Data/Item/Use.hs 171;" f -_mzFlareType src/Dodge/Data/Item/Use.hs 170;" f -_mzFrame src/Dodge/Data/Item/Use.hs 173;" f -_mzInaccuracy src/Dodge/Data/Item/Use.hs 168;" f -_mzPos src/Dodge/Data/Item/Use.hs 166;" f -_mzRot src/Dodge/Data/Item/Use.hs 167;" f +_mzAmmoPerShot src/Dodge/Data/Item/Use.hs 174;" f +_mzAmmoSlot src/Dodge/Data/Item/Use.hs 171;" f +_mzEffect src/Dodge/Data/Item/Use.hs 173;" f +_mzFlareType src/Dodge/Data/Item/Use.hs 172;" f +_mzFrame src/Dodge/Data/Item/Use.hs 175;" f +_mzInaccuracy src/Dodge/Data/Item/Use.hs 170;" f +_mzPos src/Dodge/Data/Item/Use.hs 168;" f +_mzRot src/Dodge/Data/Item/Use.hs 169;" f _newArcStep src/Dodge/Data/Item/Params.hs 25;" f _nodeMetaTree src/Dodge/Data/MetaTree.hs 14;" f _nodeMetaTree src/Dodge/Tree/Compose/Data.hs 9;" f @@ -2776,10 +2781,10 @@ _nodesSearched src/Dodge/Data/Creature/Memory.hs 15;" f _numLinkEW src/Dodge/Data/Room.hs 33;" f _numLinkNS src/Dodge/Data/Room.hs 34;" f _numberFloorVerxs src/Dodge/Data/CWorld.hs 32;" f -_nzCurrentWalkAngle src/Dodge/Data/Item/Use.hs 148;" f -_nzMaxWalkAngle src/Dodge/Data/Item/Use.hs 147;" f -_nzPressure src/Dodge/Data/Item/Use.hs 146;" f -_nzWalkSpeed src/Dodge/Data/Item/Use.hs 149;" f +_nzCurrentWalkAngle src/Dodge/Data/Item/Use.hs 150;" f +_nzMaxWalkAngle src/Dodge/Data/Item/Use.hs 149;" f +_nzPressure src/Dodge/Data/Item/Use.hs 148;" f +_nzWalkSpeed src/Dodge/Data/Item/Use.hs 151;" f _offPathFromEdges src/Dodge/Data/Room.hs 74;" f _oldMagnets src/Dodge/Data/LWorld.hs 125;" f _onPathFromEdges src/Dodge/Data/Room.hs 73;" f @@ -2818,6 +2823,7 @@ _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 _pjuScreenID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 38;" f +_pjuSmokeless src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" f _pjuSpinAmound src/Dodge/Data/Item/Use/Consumption/Ammo.hs 31;" f _pjuStart src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" f _pjuTime src/Dodge/Data/Item/Use/Consumption/Ammo.hs 31;" f @@ -2912,8 +2918,8 @@ _pyFaces src/Polyhedra/Data.hs 14;" f _radarBlips src/Dodge/Data/LWorld.hs 112;" f _radarSweeps src/Dodge/Data/LWorld.hs 107;" f _randGen src/Dodge/Data/World.hs 41;" f -_randomOffset src/Dodge/Data/Item/Use.hs 83;" f -_randomOffset src/Dodge/Data/Item/Use.hs 100;" f +_randomOffset src/Dodge/Data/Item/Use.hs 85;" f +_randomOffset src/Dodge/Data/Item/Use.hs 102;" f _rateMax src/Dodge/Data/Item/HeldDelay.hs 16;" f _rateTime src/Dodge/Data/Item/HeldDelay.hs 17;" f _rbColor src/Dodge/Data/RadarBlip.hs 15;" f @@ -2923,13 +2929,13 @@ _rbPos src/Dodge/Data/RadarBlip.hs 19;" f _rbRad src/Dodge/Data/RadarBlip.hs 18;" f _rbTime src/Dodge/Data/RadarBlip.hs 16;" f _rboBaseBloom src/Data/Preload/Render.hs 38;" f -_recoil src/Dodge/Data/Item/Use.hs 81;" f -_recoil src/Dodge/Data/Item/Use.hs 98;" f +_recoil src/Dodge/Data/Item/Use.hs 83;" f +_recoil src/Dodge/Data/Item/Use.hs 100;" f _renderData src/Data/Preload.hs 11;" f _reverseAmount src/Dodge/Data/World.hs 64;" f _reverseAmount src/Dodge/Data/World.hs 70;" f _reverseAmount src/Dodge/Data/World.hs 74;" f -_rifling src/Dodge/Data/Item/Use.hs 97;" f +_rifling src/Dodge/Data/Item/Use.hs 99;" f _rlDir src/Dodge/Data/Room.hs 26;" f _rlPos src/Dodge/Data/Room.hs 25;" f _rlType src/Dodge/Data/Room.hs 24;" f @@ -3018,7 +3024,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 77;" f +_shellPayload src/Dodge/Data/Item/Combine.hs 78;" 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 @@ -3036,8 +3042,8 @@ _siWidth src/Dodge/Data/SelectionList.hs 47;" f _siWidth src/Dodge/Data/SelectionList.hs 56;" f _sideEffect src/Loop/Data.hs 13;" f _sideImpulses src/Dodge/Data/ActionPlan.hs 170;" f -_sidePush src/Dodge/Data/Item/Use.hs 84;" f -_sidePush src/Dodge/Data/Item/Use.hs 101;" f +_sidePush src/Dodge/Data/Item/Use.hs 86;" f +_sidePush src/Dodge/Data/Item/Use.hs 103;" f _silhouetteEBO src/Data/Preload/Render.hs 27;" f _skColor src/Dodge/Data/Spark.hs 17;" f _skDamageType src/Dodge/Data/Spark.hs 21;" f @@ -3146,14 +3152,14 @@ _toPlaySoundVolume src/Sound/Data.hs 43;" f _toPlaySoundVolumeFraction src/Sound/Data.hs 44;" f _toPlaySounds src/Dodge/Data/World.hs 42;" f _topBoxSize src/Shape/Data.hs 17;" f -_torqueAfter src/Dodge/Data/Item/Use.hs 82;" f -_torqueAfter src/Dodge/Data/Item/Use.hs 99;" f +_torqueAfter src/Dodge/Data/Item/Use.hs 84;" f +_torqueAfter src/Dodge/Data/Item/Use.hs 101;" f _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 61;" f -_tryRightLink src/Dodge/Data/ComposedItem.hs 62;" f +_tryLeftLink src/Dodge/Data/ComposedItem.hs 63;" f +_tryRightLink src/Dodge/Data/ComposedItem.hs 64;" 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 @@ -3178,11 +3184,11 @@ _unST src/Dodge/Tree/Compose/Data.hs 12;" f _unTO src/Shader/Data.hs 59;" f _unputTerminal src/Dodge/Data/GenWorld.hs 36;" f _useAheadPos src/Dodge/Data/ActionPlan.hs 161;" f -_useExactly src/Dodge/Data/Item/Use.hs 161;" f +_useExactly src/Dodge/Data/Item/Use.hs 163;" f _useMvTargetPos src/Dodge/Data/ActionPlan.hs 164;" f _useSelf src/Dodge/Data/ActionPlan.hs 158;" f _useTarget src/Dodge/Data/ActionPlan.hs 155;" f -_useUpTo src/Dodge/Data/Item/Use.hs 162;" f +_useUpTo src/Dodge/Data/Item/Use.hs 164;" f _uvCanContinue src/Dodge/Data/Universe.hs 38;" f _uvConfig src/Dodge/Data/Universe.hs 36;" f _uvDebug src/Dodge/Data/Universe.hs 43;" f @@ -3234,10 +3240,10 @@ _walls src/Dodge/Data/LWorld.hs 120;" f _warmMax src/Dodge/Data/Item/HeldDelay.hs 27;" f _warmSound src/Dodge/Data/Item/HeldDelay.hs 28;" f _warmTime src/Dodge/Data/Item/HeldDelay.hs 26;" f -_weaponInvLock src/Dodge/Data/Item/Use.hs 88;" f -_weaponInvLock src/Dodge/Data/Item/Use.hs 105;" f -_weaponRepeat src/Dodge/Data/Item/Use.hs 89;" f -_weaponRepeat src/Dodge/Data/Item/Use.hs 106;" f +_weaponInvLock src/Dodge/Data/Item/Use.hs 90;" f +_weaponInvLock src/Dodge/Data/Item/Use.hs 107;" f +_weaponRepeat src/Dodge/Data/Item/Use.hs 91;" f +_weaponRepeat src/Dodge/Data/Item/Use.hs 108;" f _windowPosX src/Dodge/Data/Config.hs 53;" f _windowPosY src/Dodge/Data/Config.hs 54;" f _windowShader src/Data/Preload/Render.hs 19;" f @@ -3268,9 +3274,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 120;" f -_xNum src/Dodge/Data/Item/Combine.hs 130;" f -_xNum src/Dodge/Data/Item/Combine.hs 152;" f +_xNum src/Dodge/Data/Item/Combine.hs 121;" f +_xNum src/Dodge/Data/Item/Combine.hs 131;" f +_xNum src/Dodge/Data/Item/Combine.hs 153;" f aDroneWithItemParams src/Dodge/Item/Weapon/Drone.hs 30;" f aFlame src/Dodge/Gas.hs 18;" f aFlameParticle src/Dodge/Flame.hs 21;" f @@ -3337,7 +3343,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 252;" f +allInvLocs src/Dodge/Item/Grammar.hs 256;" f allVisibleWalls src/Dodge/Base/Collide.hs 132;" f alongSegBy src/Geometry.hs 43;" f alteRifle src/Dodge/Item/Held/Cane.hs 65;" f @@ -3412,7 +3418,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 55;" f +augmentedHUD src/Dodge/Item/Scope.hs 56;" 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 @@ -3439,7 +3445,7 @@ barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 388;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f -baseCI src/Dodge/Item/Grammar.hs 125;" f +baseCI src/Dodge/Item/Grammar.hs 129;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 295;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 45;" f @@ -3518,8 +3524,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 38;" f -bulletPayloadModule src/Dodge/Item/Scope.hs 52;" f +bulletModule src/Dodge/Item/Scope.hs 39;" f +bulletPayloadModule src/Dodge/Item/Scope.hs 53;" 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 @@ -3718,8 +3724,8 @@ createArc src/Dodge/Tesla/Arc.hs 81;" f createBarrelSpark src/Dodge/Spark.hs 44;" f createFlIt src/Dodge/Placement/PlaceSpot.hs 180;" f createForceField src/Dodge/ForceField.hs 7;" f -createGProjectile src/Dodge/HeldUse.hs 636;" f -createGShell src/Dodge/Projectile/Create.hs 71;" f +createGProjectile src/Dodge/HeldUse.hs 642;" f +createGShell src/Dodge/Projectile/Create.hs 73;" f createGas src/Dodge/Gas.hs 8;" f createHeadLamp src/Dodge/Euse.hs 132;" f createItemYou src/Dodge/Inventory/Add.hs 95;" f @@ -3727,7 +3733,7 @@ createLightMap src/Render.hs 26;" f 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 604;" f +createProjectile src/Dodge/HeldUse.hs 609;" f createShell src/Dodge/Projectile/Create.hs 23;" f createShieldWall src/Dodge/Euse.hs 107;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 117;" f @@ -3821,7 +3827,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 174;" f +decTimMvVel src/Dodge/Projectile/Update.hs 176;" f decodedtmap src/Dodge/Terminal.hs 205;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f decomposeTree src/Dodge/Tree/Compose.hs 57;" f @@ -3949,7 +3955,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 105;" f +displayPulse src/Dodge/Item/Display.hs 107;" f displaySectionsSizes src/Dodge/DisplayInventory.hs 118;" f displayTerminalLineString src/Dodge/Update.hs 447;" f dist src/Geometry/Vector.hs 179;" f @@ -4245,7 +4251,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 186;" f +explodeShell src/Dodge/Projectile/Update.hs 188;" 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 @@ -4349,7 +4355,7 @@ fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f fuseWall src/Dodge/LevelGen/StaticWalls.hs 165;" f fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f g src/ShortShow.hs 34;" f -gLauncher src/Dodge/Item/Held/Launcher.hs 29;" f +gLauncher src/Dodge/Item/Held/Launcher.hs 30;" f gRandify src/Dodge/Randify.hs 8;" f gameOverMenu src/Dodge/Menu.hs 184;" f gameRoomFromRoom src/Dodge/Layout.hs 161;" f @@ -4368,10 +4374,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 92;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 95;" f getArguments src/Dodge/Update/Scroll.hs 215;" f getArguments' src/Dodge/Update/Scroll.hs 203;" f -getAutoSpringLinks src/Dodge/Item/Grammar.hs 87;" f +getAutoSpringLinks src/Dodge/Item/Grammar.hs 90;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulletType src/Dodge/HeldUse.hs 410;" f getCommands src/Dodge/Terminal.hs 117;" f @@ -4495,7 +4501,7 @@ 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 16;" f -homingModule src/Dodge/Item/Scope.hs 35;" f +homingModule src/Dodge/Item/Scope.hs 36;" 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 @@ -4549,8 +4555,9 @@ insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 117;" f insertWithNewKeys src/IntMapHelp.hs 70;" f internalCreatureUpdate src/Dodge/Creature/State.hs 123;" f interpWith src/Dodge/Creature/Boid.hs 10;" f -intersectCircSeg src/Geometry/Intersect.hs 303;" f -intersectCircSegFirst src/Geometry/Intersect.hs 314;" f +intersectCircSeg src/Geometry/Intersect.hs 305;" f +intersectCircSegFirst src/Geometry/Intersect.hs 323;" f +intersectCircSegTest src/Geometry/Intersect.hs 316;" f intersectLineLine' src/Geometry/Intersect.hs 15;" f intersectLinefromScreen src/Dodge/Debug/Picture.hs 96;" f intersectSegBezquad src/Geometry/Intersect.hs 236;" f @@ -4567,16 +4574,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 233;" f +invAdj src/Dodge/Item/Grammar.hs 237;" 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 392;" f invItemLocUpdate src/Dodge/Creature/State.hs 179;" f -invLDT src/Dodge/Item/Grammar.hs 213;" f +invLDT src/Dodge/Item/Grammar.hs 217;" f invRootItemEffs src/Dodge/Creature/State.hs 172;" f -invRootMap src/Dodge/Item/Grammar.hs 222;" f -invRootTrees src/Dodge/Item/Grammar.hs 243;" f +invRootMap src/Dodge/Item/Grammar.hs 226;" f +invRootTrees src/Dodge/Item/Grammar.hs 247;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 22;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 166;" f @@ -4620,7 +4627,7 @@ isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itDim src/Dodge/Item/InvSize.hs 21;" f itInvHeight src/Dodge/Item/InvSize.hs 11;" f -itemBaseConnections src/Dodge/Item/Grammar.hs 128;" f +itemBaseConnections src/Dodge/Item/Grammar.hs 132;" f itemBaseName src/Dodge/Item/Display.hs 56;" f itemBlips src/Dodge/RadarSweep.hs 75;" f itemCombinations src/Dodge/Combine/Combinations.hs 55;" f @@ -4632,18 +4639,18 @@ 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 49;" f +itemFromEquipType src/Dodge/Item.hs 50;" 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 89;" f +itemNumberDisplay src/Dodge/Item/Display.hs 90;" 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 52;" f itemToBreakLists src/Dodge/Item/Grammar.hs 50;" f -itemToFunction src/Dodge/Item/Grammar.hs 98;" f +itemToFunction src/Dodge/Item/Grammar.hs 101;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 22;" f itemUpdate src/Dodge/Creature/State.hs 429;" f iterateUntil src/MonadHelp.hs 23;" f @@ -4654,7 +4661,8 @@ itmSpaceInfo src/Dodge/Item/Info.hs 18;" f itmUsageInfo src/Dodge/Item/Info.hs 186;" f jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 203;" f +joinItemsInList src/Dodge/Item/Grammar.hs 207;" f +joystick src/Dodge/Item/Scope.hs 67;" 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 @@ -4687,7 +4695,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 134;" f +laserLinkTest src/Dodge/Item/Grammar.hs 138;" f lastMap src/Dodge/DoubleTree.hs 174;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f @@ -4702,9 +4710,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 173;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 177;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 187;" f +leftRightCombine src/Dodge/Item/Grammar.hs 191;" f legsSPic src/Dodge/Item/Draw/SPic.hs 458;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4732,8 +4740,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 137;" f -llright src/Dodge/Item/Grammar.hs 143;" f +llleft src/Dodge/Item/Grammar.hs 141;" f +llright src/Dodge/Item/Grammar.hs 147;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 381;" f @@ -4869,7 +4877,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 592;" 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 111;" f +maybeWarmupStatus src/Dodge/Item/Display.hs 113;" 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 @@ -5125,7 +5133,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 144;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 146;" 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 @@ -5324,7 +5332,7 @@ quarterRoomSquare src/Dodge/Room/Procedural.hs 213;" f quarterRoomTri src/Dodge/Room/Procedural.hs 177;" f quitCommand src/Dodge/Terminal.hs 57;" f rLauncher src/Dodge/Item/Held/Launcher.hs 12;" f -rLauncherX src/Dodge/Item/Held/Launcher.hs 34;" f +rLauncherX src/Dodge/Item/Held/Launcher.hs 35;" f rToOnward src/Dodge/Cleat.hs 21;" f radBounds src/Dodge/Room/Foreground.hs 154;" f radToDeg src/Geometry/Vector.hs 122;" f @@ -5374,7 +5382,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 171;" f +reduceSpinBy src/Dodge/Projectile/Update.hs 173;" 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 @@ -5390,9 +5398,9 @@ 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 -remoteController src/Dodge/Item/Scope.hs 66;" f -remoteDetonator src/Dodge/Item/Scope.hs 62;" f -remoteScreen src/Dodge/Item/Scope.hs 58;" f +remoteDetonate src/Dodge/Creature/Impulse/UseItem.hs 50;" f +remoteDetonator src/Dodge/Item/Scope.hs 63;" f +remoteScreen src/Dodge/Item/Scope.hs 59;" f remoteShellShape src/Dodge/Projectile/Draw.hs 42;" f removeAmmoFromMag src/Dodge/HeldUse.hs 397;" f removeDot src/ShortShow.hs 30;" f @@ -5439,7 +5447,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 180;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 184;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5648,7 +5656,7 @@ shatterGunSPic src/Dodge/Item/Draw/SPic.hs 284;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f shellCollisionCheck src/Dodge/Projectile/Update.hs 75;" f shellMag src/Dodge/Item/Ammo.hs 61;" f -shellModule src/Dodge/Item/Scope.hs 44;" f +shellModule src/Dodge/Item/Scope.hs 45;" f shellShape src/Dodge/Projectile/Draw.hs 27;" f shellTrailCloud src/Dodge/WorldEvent/Cloud.hs 65;" f shieldWall src/Dodge/Euse.hs 87;" f @@ -5693,12 +5701,12 @@ 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 70;" f -showEquipItem src/Dodge/Item/Display.hs 81;" f +showEquipItem src/Dodge/Item/Display.hs 82;" f showInt src/Dodge/Item/Info.hs 30;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f -showManObj src/Dodge/TestString.hs 76;" f +showManObj src/Dodge/TestString.hs 79;" f showTerminalError src/Dodge/Debug/Terminal.hs 76;" f -showTimeFlow src/Dodge/TestString.hs 125;" f +showTimeFlow src/Dodge/TestString.hs 128;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f shrinkVert src/Geometry/Polygon.hs 140;" f shuffle src/RandomHelp.hs 49;" f @@ -5736,6 +5744,7 @@ smallPillar src/Dodge/Room/Pillar.hs 32;" f smallRoom src/Dodge/Room/RunPast.hs 31;" f smg src/Dodge/Item/Held/Stick.hs 72;" f smokeCloudAt src/Dodge/WorldEvent/Cloud.hs 41;" f +smokeReducer src/Dodge/Item/Scope.hs 71;" f sndV2 src/Geometry/Data.hs 52;" f sniperRifle src/Dodge/Item/Held/Rod.hs 54;" f someCrits src/Dodge/LockAndKey.hs 120;" f @@ -5782,7 +5791,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 155;" f +springLinkTest src/Dodge/Item/Grammar.hs 159;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f square src/Geometry/Polygon.hs 46;" f @@ -5808,7 +5817,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 299;" f +stackedInventory src/Dodge/Creature.hs 300;" 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 @@ -5876,7 +5885,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 25;" f +targetingScope src/Dodge/Item/Scope.hs 26;" 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 @@ -5895,7 +5904,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 280;" f +testInventory src/Dodge/Creature.hs 281;" f testStringInit src/Dodge/TestString.hs 28;" f text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f @@ -5940,7 +5949,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 148;" f +toLasgunUpdate src/Dodge/Item/Grammar.hs 152;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f toTopLeft src/Dodge/Render/List.hs 219;" f @@ -5949,7 +5958,7 @@ toV3 src/Geometry/Data.hs 38;" f toV4 src/Geometry/Data.hs 40;" f toggleCombineInv src/Dodge/DisplayInventory.hs 35;" f toggleCommand src/Dodge/Terminal.hs 196;" f -toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 56;" f +toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 63;" f toggleJust src/MaybeHelp.hs 41;" f toggleMap src/Dodge/Update/Input/InGame.hs 556;" f toggleTweakInv src/Dodge/Update/Input/InGame.hs 569;" f @@ -5960,7 +5969,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 332;" f topInvW src/Dodge/ListDisplayParams.hs 51;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 72;" f +topTestPart src/Dodge/TestString.hs 75;" f torch src/Dodge/Item/Held/Utility.hs 33;" f torchShape src/Dodge/Item/Draw/SPic.hs 253;" f torqueCr src/Dodge/WorldEffect.hs 63;" f @@ -6034,7 +6043,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 126;" f +trySpinByCID src/Dodge/Projectile/Update.hs 128;" 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 @@ -6212,20 +6221,20 @@ useGasParams src/Dodge/HeldUse.hs 506;" f useHotkey src/Dodge/Creature/YourControl.hs 54;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f useLoadedAmmo src/Dodge/HeldUse.hs 289;" f -useLocation src/Dodge/Creature/Impulse/UseItem.hs 49;" f +useLocation src/Dodge/Creature/Impulse/UseItem.hs 54;" 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 702;" f +useRewindGun src/Dodge/HeldUse.hs 708;" 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 683;" f +useStopWatch src/Dodge/HeldUse.hs 689;" 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 691;" f +useTimeScrollGun src/Dodge/HeldUse.hs 697;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f useUpdate src/Dodge/Creature/State.hs 433;" f @@ -6379,5 +6388,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 20;" f +zoomScope src/Dodge/Item/Scope.hs 21;" f zoomSpeed src/Dodge/Update/Scroll.hs 101;" f