diff --git a/saveSlot/seed b/saveSlot/seed deleted file mode 100644 index 2f0d3ff35..000000000 --- a/saveSlot/seed +++ /dev/null @@ -1 +0,0 @@ -7114951007332849727 \ No newline at end of file diff --git a/src/Dodge/Data/SoundOrigin.hs b/src/Dodge/Data/SoundOrigin.hs index 64d1d816d..7c7ecf99d 100644 --- a/src/Dodge/Data/SoundOrigin.hs +++ b/src/Dodge/Data/SoundOrigin.hs @@ -18,6 +18,7 @@ data SoundOrigin | CrMouth Int | CrChasm Int | CrWeaponSound Int Int + | ItemSound Int Int | CrWeaponFailSound Int | MachineSound Int | MachineAltSound Int diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 76e0dd32a..91483521d 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -8,7 +8,6 @@ module Dodge.HeldUse ( heldEffectMuzzles, ) where -import Linear (_xy) import Color import Control.Applicative import Control.Monad @@ -36,6 +35,7 @@ import Dodge.Tesla import Geometry import qualified IntMapHelp as IM import LensHelp +import Linear (_xy, _xyz) import ListHelp import NewInt import Picture.Base @@ -205,9 +205,17 @@ heldItemMuzzles itm = \case AUTORIFLE -> dbwMuzzles & ix 0 . mzPos .~ V2 25 0 BURSTRIFLE -> dbwMuzzles & ix 0 . mzPos .~ V2 25 0 & ix 0 . mzInaccuracy .~ 0.05 MINIGUNX i -> - replicate - i - (Muzzle (V2 30 0) 0 0.05 maguse1 NoFlare MuzzleShootBullet 10) + [ ( Muzzle + (V2 (30 + 40 * fromIntegral j / fromIntegral i) 0) + 0 + 0.05 + maguse1 + NoFlare + MuzzleShootBullet + 10 + ) + | j <- [0 .. i -1] + ] & ix 0 . mzFlareType .~ MiniGunFlare BANGROD -> dbwMuzzles @@ -646,27 +654,23 @@ loadMuzzle loc cr (b, w) mz = maybe (b, w) (True,) $ case mz ^. mzAmmoSlot of useLoadedAmmo loc cr mz (Just (usedammo, mag)) $ removeAmmoFromMag usedammo mid w -makeMuzzleFlare :: Muzzle -> LocationDT OItem -> Creature -> World -> World -makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of +makeMuzzleFlare :: Point3Q -> LocationDT OItem -> FlareType -> World -> World +makeMuzzleFlare (p, q) loc = \case NoFlare -> id - BasicFlare -> basicMuzFlare pos dir - NoLightFlare -> muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir + BasicFlare -> basicMuzFlare (p ^. _xy) dir + NoLightFlare -> muzFlareAt (V4 10 10 1 3) p dir MiniGunFlare -> - oddcheck (cWorld . lWorld . lights .:~ LSParam (pos `v2z` 20) 100 (V3 1 1 0.5)) - . muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir - HeavySmokeFlare -> basicMuzFlare pos dir + oddcheck (cWorld . lWorld . lights .:~ LSParam p 100 (V3 1 1 0.5)) + . muzFlareAt (V4 10 10 1 3) p dir + HeavySmokeFlare -> basicMuzFlare (p ^. _xy) dir LasGunFlare -> - flareCircleAt (getLaserColor loc) 0.8 (pos `v2z` 20) + flareCircleAt (getLaserColor loc) 0.8 p . ( cWorld . lWorld . lights - .:~ LSParam (pos `v2z` 10) 100 (xyzV4 $ getLaserColor loc) + .:~ LSParam p 100 (getLaserColor loc ^. _xyz) -- p had z=10 ) - TeslaGunFlare -> cWorld . lWorld . lights .:~ LSParam (pos `v2z` 10) 100 (V3 0 0 1) + TeslaGunFlare -> cWorld . lWorld . lights .:~ LSParam p 100 (V3 0 0 1) -- p had z=10 where - (V3 x y _, q) = - locOrient loc cr - `Q.comp` (_mzPos mz `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = (cr ^. crPos . _xy) + rotateV (_crDir cr) (V2 x y) - dir = _crDir cr + Q.qToAng q + dir = Q.qToAng q oddcheck f w | odd (w ^. cWorld . lWorld . lClock) = f w | otherwise = w @@ -722,12 +726,12 @@ useLoadedAmmo :: World -> World useLoadedAmmo loc cr mz m w = - makeMuzzleFlare mz loc cr $ case _mzEffect mz of + makeMuzzleFlare pq loc (mz ^. mzFlareType) $ case _mzEffect mz of MuzzleShootBullet -> shootBullets loc cr (mz, x, magtree) w - MuzzleLaser -> creatureShootLaser loc cr mz w - MuzzlePulseLaser -> creatureShootPulseLaser loc cr mz w - MuzzlePulseBall -> creatureShootPulseBall loc cr mz w - MuzzleTesla -> shootTeslaArc loc cr mz w + MuzzleLaser -> creatureShootLaser pq' loc (w & randGen .~ g) + MuzzlePulseLaser -> creatureShootPulseLaser pq' cr (w & randGen .~ g) + MuzzlePulseBall -> shootPulseBall pq' (w & randGen .~ g) + MuzzleTesla -> shootTeslaArc pq' loc (w & randGen .~ g) MuzzleTractor -> shootTractorBeam cr w MuzzleRLauncher -> createProjectileR pq loc magtree cr w MuzzleGLauncher -> @@ -738,7 +742,8 @@ useLoadedAmmo loc cr mz m w = (getPJStabiliser itmtree) cr w - MuzzleNozzle{} -> useGasParams mitid mz loc cr $ walkNozzle mz itm w + MuzzleNozzle{} -> useGasParams pq' mitid mz loc cr $ walkNozzle mz itm + $ w & randGen .~ g MuzzleShatter -> shootShatter itm cr w MuzzleDetector -> itemDetectorEffect @@ -754,13 +759,14 @@ useLoadedAmmo loc cr mz m w = MuzzleScroller -> useTimeScrollGun itm cr w where pq = muzzlePos loc cr mz + (pq', g) = muzzleRandPos loc cr mz `runState` (w ^. randGen) itmtree = loc ^. locDT mitid = magtree ^. dtValue . _1 . itID itm = itmtree ^. dtValue . _1 (x, magtree) = fromJust m muzzlePos :: LocationDT OItem -> Creature -> Muzzle -> Point3Q -muzzlePos m cr muz = (p1,q1) `Q.comp` pq `Q.comp` (p3,q3) +muzzlePos m cr muz = (p1, q1) `Q.comp` pq `Q.comp` (p3, q3) where pq = locOrient m cr p1 = cr ^. crPos @@ -768,6 +774,16 @@ muzzlePos m cr muz = (p1,q1) `Q.comp` pq `Q.comp` (p3,q3) p3 = addZ 0 $ muz ^. mzPos q3 = Q.qz $ muz ^. mzRot +muzzleRandPos :: LocationDT OItem -> Creature -> Muzzle -> State StdGen Point3Q +muzzleRandPos m cr muz = do + a <- state $ randomR (- inacc, inacc) + y <- case muz ^. mzRandomOffset of + 0 -> return 0 + i -> state $ randomR (- i, i) + return $ muzzlePos m cr muz `Q.comp` (V3 0 y 0, Q.qz a) + where + inacc = _mzInaccuracy muz + getAttachedSFLink :: ItemSF -> DTree OItem -> Maybe (NewInt ItmInt) getAttachedSFLink sf = (^? dtRight . folding (find f) . dtValue . _1 . itID) where @@ -822,28 +838,15 @@ tractorBeamAt pos outpos dir power = , _tbTime = 10 } -creatureShootLaser :: LocationDT OItem -> Creature -> Muzzle -> World -> World -creatureShootLaser loc cr mz w = - w - & randGen .~ g - & shootLaser - (CrWeaponSound (_crID cr) 0) - (getLaserDamage loc) - (getLaserPhaseV loc) - pos - dir - (getLaserColor loc) - where - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - dir = _crDir cr + Q.qToAng q + a - (a, g) = randomR (- inacc, inacc) $ _randGen w - inacc = _mzInaccuracy mz - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w +creatureShootLaser :: Point3Q -> LocationDT OItem -> World -> World +creatureShootLaser (p, q) loc = + shootLaser + (ItemSound (loc ^. locDT . dtValue . _1 . itID . unNInt) 0) + (getLaserDamage loc) + (getLaserPhaseV loc) + (p ^. _xy) + (Q.qToAng q) + (getLaserColor loc) shootLaser :: SoundOrigin -> @@ -854,37 +857,24 @@ shootLaser :: Color -> World -> World -shootLaser so lt pv p dir col w = - w - & cWorld . lWorld . lasers - .:~ Laser - { _lpType = lt - , _lpPhaseV = pv - , _lpPos = p - , _lpDir = dir - , _lpColor = col - } - & soundContinue so p tone440sawtoothquietS (Just 2) +shootLaser so lt pv p dir col = + ( cWorld . lWorld . lasers + .:~ Laser + { _lpType = lt + , _lpPhaseV = pv + , _lpPos = p + , _lpDir = dir + , _lpColor = col + } + ) + . soundContinue so p tone440sawtoothquietS (Just 2) -creatureShootPulseLaser :: LocationDT OItem -> Creature -> Muzzle -> World -> World -creatureShootPulseLaser loc cr mz w = - w - & randGen .~ g - & shootPulseLaser +creatureShootPulseLaser :: Point3Q -> Creature -> World -> World +creatureShootPulseLaser (p,q) cr = + shootPulseLaser (CrWeaponSound (_crID cr) 0) - pos - dir - where - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - dir = _crDir cr + Q.qToAng q + a - (a, g) = randomR (- inacc, inacc) $ _randGen w - inacc = _mzInaccuracy mz - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w + (p ^. _xy) + (Q.qToAng q) shootPulseLaser :: SoundOrigin -> Point2 -> Float -> World -> World shootPulseLaser so p dir w = @@ -899,37 +889,22 @@ shootPulseLaser so p dir w = } & soundStart so p lasPulseS Nothing -creatureShootPulseBall :: LocationDT OItem -> Creature -> Muzzle -> World -> World -creatureShootPulseBall loc cr mz w = w & randGen .~ g & shootPulseBall pos dir - where - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - dir = _crDir cr + Q.qToAng q + a - (a, g) = randomR (- inacc, inacc) $ _randGen w - inacc = _mzInaccuracy mz - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w - -shootPulseBall :: Point2 -> Float -> World -> World -shootPulseBall p dir w = +shootPulseBall :: Point3Q -> World -> World +shootPulseBall (p, q) w = w & cWorld . lWorld . pulseBalls . at i ?~ PulseBall - { _pbPos = p - , _pbVel = 3.5 * unitVectorAtAngle dir + { _pbPos = p ^. _xy + , _pbVel = 3.5 * unitVectorAtAngle (Q.qToAng q) , _pbTimer = 200 , _pbID = i } - & soundStart (PBSound i) p energyReleaseS Nothing + & soundStart (PBSound i) (p ^. _xy) energyReleaseS Nothing where i = IM.newKey $ w ^. cWorld . lWorld . pulseBalls removeAmmoFromMag :: Int -> Int -> World -> World -removeAmmoFromMag x magid = - cWorld . lWorld . items . ix magid . itConsumables . _Just -~ x +removeAmmoFromMag x magid = cWorld . lWorld . items . ix magid . itConsumables . _Just -~ x getBulletType :: DTree OItem -> Maybe Bullet getBulletType magtree = @@ -995,22 +970,13 @@ shootBullets loc cr (mz, x, magtree) w = fromMaybe w $ do return $ foldl' (&) w (replicate x (shootBullet thebullet loc cr mz)) shootBullet :: Bullet -> LocationDT OItem -> Creature -> Muzzle -> World -> World -shootBullet bu loc cr mz w = makeBullet bu itm bulpos dir . (randGen .~ g) $ w +shootBullet bu loc cr mz w = makeBullet bu itm pq . (randGen .~ g) $ w where - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) + (pq, g) = muzzleRandPos loc cr mz `runState` (w ^. randGen) itm = loc ^. locDT . dtValue . _1 - bulpos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - (a, g) = randomR (- inacc, inacc) $ _randGen w - dir = _crDir cr + Q.qToAng q + a - inacc = _mzInaccuracy mz - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w -makeBullet :: Bullet -> Item -> Point2 -> Float -> World -> World -makeBullet thebullet itm bulpos dir w = +makeBullet :: Bullet -> Item -> Point3Q -> World -> World +makeBullet thebullet itm (p, q) w = w & randGen .~ g'' & cWorld . lWorld . bullets .:~ ( thebullet @@ -1020,6 +986,8 @@ makeBullet thebullet itm bulpos dir w = & buDrag *~ drag ) where + bulpos = p ^. _xy + dir = Q.qToAng q g = _randGen w (drag, g') = case heldItemRifling (_ibtHeld $ _itType itm) of --unsafe ConstFloat x -> (x, g) @@ -1120,33 +1088,26 @@ mcUseHeld hit = case hit of _ -> mcShootAuto useGasParams :: + Point3Q -> NewInt ItmInt -> Muzzle -> LocationDT OItem -> Creature -> World -> World -useGasParams (NInt magitid) mz loc cr w = +useGasParams pq (NInt magitid) mz loc cr w = w - & createGas gastype pressure pos dir cr - & randGen .~ g' + & createGas gastype pressure (pq ^. _1 . _xy) dir cr + & randGen .~ g where itm = loc ^. locDT . dtValue . _1 (pressure, g) = doGenFloat (_nzPressure $ _mzEffect mz) (_randGen w) gastype = fromMaybe (error "cannot find gas ammo") $ do hit <- itm ^? itType . ibtHeld - fueltype <- w ^? cWorld . lWorld . items . ix magitid >>= magAmmoParams >>= (^? ampCreateGas) + fueltype <- w ^? cWorld . lWorld . items . ix magitid + >>= magAmmoParams >>= (^? ampCreateGas) gasType hit fueltype - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - (a, g') = randomR (- inacc, inacc) g - inacc = _mzInaccuracy mz - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w - dir = _crDir cr + Q.qToAng q + a + _nzAngle (_itParams itm) + dir = Q.qToAng (pq ^. _2) + _nzAngle (_itParams itm) gasType :: HeldItemType -> GasFuel -> Maybe GasCreate gasType hit _ = case hit of @@ -1210,30 +1171,24 @@ mcShootAuto itm mc w w & cWorld . lWorld . items . ix i . itTimeLastUsed .~ w ^. cWorld . lWorld . lClock - & makeBullet defaultBullet itm pos dir + -- & makeBullet defaultBullet itm pos dir | otherwise = w where lastused = itm ^. itTimeLastUsed - pos = _mcPos mc +.+ 20 *.* unitVectorAtAngle dir - dir = mc ^?! mcType . _McTurret . tuDir + +-- pos = _mcPos mc +.+ 20 *.* unitVectorAtAngle dir +-- dir = mc ^?! mcType . _McTurret . tuDir -- | assumes that the item is held -shootTeslaArc :: LocationDT OItem -> Creature -> Muzzle -> World -> World -shootTeslaArc loc cr mz w = +shootTeslaArc :: Point3Q -> LocationDT OItem -> World -> World +shootTeslaArc (p, q) loc w = w' & cWorld . lWorld . items . ix itid . itParams .~ ip - & soundContinue (CrWeaponSound (_crID cr) 0) pos elecCrackleS (Just 2) + & soundContinue (ItemSound itid 0) pos elecCrackleS (Just 2) where itm = loc ^. locDT . dtValue . _1 itid = itm ^. itID . unNInt - (w', ip) = makeTeslaArc (itm ^. itParams) pos dir w - (V3 x y _, q) = - locOrient loc cr - `Q.comp` ((_mzPos mz + V2 0 offset) `v2z` 0, Q.axisAngle (V3 0 0 1) (_mzRot mz)) - pos = cr ^. crPos . _xy + rotateV (_crDir cr) (V2 x y) - dir = _crDir cr + Q.qToAng q - offset = case mz ^. mzRandomOffset of - 0 -> 0 - i -> fst . randomR (- i, i) $ _randGen w + (w', ip) = makeTeslaArc (itm ^. itParams) pos (Q.qToAng q) w + pos = p ^. _xy determineProjectileTracking :: DTree OItem -> DTree OItem -> RocketHoming determineProjectileTracking magtree itmtree = @@ -1265,7 +1220,7 @@ determineProjectileTracking magtree itmtree = _ -> False createProjectileR :: - Point3Q -> + Point3Q -> LocationDT OItem -> DTree OItem -> Creature -> @@ -1323,18 +1278,17 @@ createProjectile :: Creature -> World -> World -createProjectile x pjtype mtree stab cr w = fromMaybe (failsound w) $ do +createProjectile x pjtype mtree stab cr w = fromMaybe w $ do magitid <- mtree ^? dtValue . _1 . itID . unNInt ammoitem <- w ^? cWorld . lWorld . items . ix magitid - let rdetonate = - (^. dtValue . _1 . itID) <$> find isrdet (mtree ^. dtLeft) - rscreen = - (^. dtValue . _1 . itID) <$> find isrscreen (mtree ^. dtLeft) + let rdetonate = getmid isrdet + rscreen = getmid isrscreen aparams <- ((mtree ^? dtLeft) >>= find isampay >>= (^? dtValue . _1 . itType . ibtAttach . shellPayload)) <|> magAmmoParams ammoitem ^? _Just . ampPayload - return . makesound $ createShell x rdetonate rscreen stab pjtype aparams cr w + return $ createShell x rdetonate rscreen stab pjtype aparams cr w where + getmid t = find t (mtree ^. dtLeft) <&> (^. dtValue . _1 . itID) isrdet :: DTree OItem -> Bool isrdet y = case y ^. dtValue . _2 of RemoteDetonatorSF{} -> True @@ -1348,17 +1302,6 @@ createProjectile x pjtype mtree stab cr w = fromMaybe (failsound w) $ do AmmoPayloadSF{} -> True _ -> False - -- the sound should be moved to the projectile firing - makesound = - soundMultiFrom - [CrWeaponSound (_crID cr) j | j <- [0 .. 3]] - (cr ^. crPos . _xy) - tap4S - Nothing - failsound w' = case w' ^? input . mouseButtons . ix SDL.ButtonLeft of - Just 0 -> soundStart (CrWeaponSound (_crID cr) 0) (cr ^. crPos . _xy) click1S Nothing w' - _ -> soundContinue (CrWeaponSound (_crID cr) 0) (cr ^. crPos . _xy) click1S Nothing w' - ---- need to add these to muzzle flare? --makeMuzzleSmoke :: Muzzle -> Item -> Creature -> World -> World --makeMuzzleSmoke mz itm cr w = case mz ^. mzFlareType of diff --git a/src/Dodge/StartNewGame.hs b/src/Dodge/StartNewGame.hs index a933beb8a..a8bec6cbb 100644 --- a/src/Dodge/StartNewGame.hs +++ b/src/Dodge/StartNewGame.hs @@ -27,8 +27,8 @@ startSeedGame _ i u = startSeedGameConc :: Int -> PreloadData -> IO (Universe -> Maybe Universe) startSeedGameConc seed pdata = do w <- generateWorldFromSeed (pdata ^?! renderData) seed - createDirectoryIfMissing True "saveSlot" - writeFile "saveSlot/seed" $ show seed + createDirectoryIfMissing True "generated/saveSlot" + writeFile "generated/saveSlot/seed" $ show seed return $ Just . saveWorldInSlot (LevelStartSlot 0) diff --git a/tags b/tags index 6f90177ae..27344ca17 100644 --- a/tags +++ b/tags @@ -107,7 +107,7 @@ BackdropCursor src/Dodge/Data/SelectionList.hs 21;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 15;" C Bark src/Dodge/Data/ActionPlan.hs 40;" C BarrelCrit src/Dodge/Data/Creature/Misc.hs 73;" C -BarrelHiss src/Dodge/Data/SoundOrigin.hs 33;" C +BarrelHiss src/Dodge/Data/SoundOrigin.hs 34;" C BarrelType src/Dodge/Data/Creature/Misc.hs 87;" t Barreloid src/Dodge/Data/Creature/Misc.hs 83;" C BasicBeamDraw src/Dodge/Data/Beam.hs 34;" C @@ -135,7 +135,7 @@ BlShConst src/Dodge/Data/Block.hs 47;" C BlShMempty src/Dodge/Data/Block.hs 46;" C Block src/Dodge/Data/Block.hs 23;" t BlockDebris src/Dodge/Data/Prop.hs 46;" C -BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 31;" C +BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 32;" C BlockDraw src/Dodge/Data/Block.hs 38;" t BlockDrawBlSh src/Dodge/Data/Block.hs 40;" C BlockDrawColHeightPoss src/Dodge/Data/Block.hs 42;" C @@ -175,7 +175,7 @@ Button src/Dodge/Data/Button.hs 30;" t ButtonAccessTerminal src/Dodge/Data/Button.hs 28;" C ButtonEvent src/Dodge/Data/Button.hs 15;" t ButtonPress src/Dodge/Data/Button.hs 16;" C -ButtonSound src/Dodge/Data/SoundOrigin.hs 37;" C +ButtonSound src/Dodge/Data/SoundOrigin.hs 38;" C ButtonSwitch src/Dodge/Data/Button.hs 21;" C CAMERA src/Dodge/Data/Item/Combine.hs 76;" C CAN src/Dodge/Data/Item/Combine.hs 57;" C @@ -264,7 +264,7 @@ CrGroupID src/Dodge/Data/Creature/State.hs 31;" C CrGroupParams src/Dodge/Data/CrGroupParams.hs 14;" t CrGroupUpdate src/Dodge/Data/CrGroupParams.hs 22;" t CrHP src/Dodge/Data/Creature.hs 70;" t -CrHitSound src/Dodge/Data/SoundOrigin.hs 32;" C +CrHitSound src/Dodge/Data/SoundOrigin.hs 33;" C CrID src/Dodge/Data/CrWlID.hs 12;" C CrImp src/Dodge/Data/CreatureEffect.hs 23;" t CrInt src/Dodge/Data/Item/Location.hs 21;" t @@ -283,7 +283,7 @@ CrWdBFSThenReturn src/Dodge/Data/CreatureEffect.hs 60;" C CrWdImp src/Dodge/Data/CreatureEffect.hs 14;" t CrWdWd src/Dodge/Data/CreatureEffect.hs 17;" t CrWdWdId src/Dodge/Data/CreatureEffect.hs 17;" C -CrWeaponFailSound src/Dodge/Data/SoundOrigin.hs 21;" C +CrWeaponFailSound src/Dodge/Data/SoundOrigin.hs 22;" C CrWeaponSound src/Dodge/Data/SoundOrigin.hs 20;" C CrWlID src/Dodge/Data/CrWlID.hs 12;" t Cr_awareness src/Dodge/Data/Config.hs 72;" C @@ -318,7 +318,7 @@ DTTopNode src/Dodge/Data/DoubleTree.hs 18;" C DTree src/Dodge/Data/DoubleTree.hs 31;" t DamSensor src/Dodge/Data/Machine/Sensor.hs 21;" C Damage src/Dodge/Data/Damage.hs 19;" t -DamageHitSound src/Dodge/Data/SoundOrigin.hs 41;" C +DamageHitSound src/Dodge/Data/SoundOrigin.hs 42;" C DamageLaser src/Dodge/Data/Laser.hs 17;" C DamageSensor src/Dodge/Data/Machine/Sensor.hs 21;" t DamageType src/Dodge/Data/Damage/Type.hs 3;" t @@ -383,7 +383,7 @@ DudPayload src/Dodge/Data/Payload.hs 13;" C Dungeon src/Dodge/Data/Scenario.hs 66;" C Dust src/Dodge/Data/Cloud.hs 29;" t EBO src/Shader/Data.hs 88;" t -EBSound src/Dodge/Data/SoundOrigin.hs 40;" C +EBSound src/Dodge/Data/SoundOrigin.hs 41;" C ECW src/Dodge/Material/Damage.hs 12;" t ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 158;" C EQUIP src/Dodge/Data/Item/Combine.hs 18;" C @@ -418,7 +418,7 @@ Escape src/Dodge/Data/Scenario.hs 10;" C Essential src/Shape/Data.hs 34;" C ExamineInventory src/Dodge/Data/HUD.hs 18;" C Explore src/Dodge/Data/Scenario.hs 4;" C -Explosion src/Dodge/Data/SoundOrigin.hs 38;" C +Explosion src/Dodge/Data/SoundOrigin.hs 39;" C ExplosionPayload src/Dodge/Data/Payload.hs 11;" C Explosive src/Dodge/Data/Damage.hs 29;" C ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 16;" C @@ -448,9 +448,9 @@ FixedSelectionWidth src/Dodge/Data/SelectionList.hs 39;" C FlIt src/Dodge/Data/FloorItem.hs 15;" C Flame src/Dodge/Data/Flame.hs 13;" t FlameBeamCombine src/Dodge/Data/Beam.hs 39;" C -FlameSound src/Dodge/Data/SoundOrigin.hs 28;" C +FlameSound src/Dodge/Data/SoundOrigin.hs 29;" C FlameletBall src/Dodge/Data/EnergyBall/Type.hs 14;" C -Flamer src/Dodge/Data/SoundOrigin.hs 26;" C +Flamer src/Dodge/Data/SoundOrigin.hs 27;" C Flaming src/Dodge/Data/Damage.hs 25;" C Flank src/Dodge/Data/ActionPlan.hs 177;" C FlareType src/Dodge/Data/Muzzle.hs 28;" t @@ -476,7 +476,7 @@ FloorItem src/Dodge/Data/FloorItem.hs 15;" t Flying src/Dodge/Data/Creature/Stance.hs 31;" C FollowImpulses src/Dodge/Data/ActionPlan.hs 182;" C FootForward src/Dodge/Data/Creature/Stance.hs 35;" t -FootstepSound src/Dodge/Data/SoundOrigin.hs 30;" C +FootstepSound src/Dodge/Data/SoundOrigin.hs 31;" C ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 14;" t FromEdge src/Dodge/Data/Room.hs 49;" C @@ -513,7 +513,7 @@ GetTo src/Dodge/Data/ActionPlan.hs 189;" C GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 43;" C Glass src/Dodge/Data/Material.hs 11;" C -GlassBreakSound src/Dodge/Data/SoundOrigin.hs 34;" C +GlassBreakSound src/Dodge/Data/SoundOrigin.hs 35;" C Goal src/Dodge/Data/ActionPlan.hs 196;" t GoesOnBack src/Dodge/Data/Equipment/Misc.hs 14;" C GoesOnChest src/Dodge/Data/Equipment/Misc.hs 13;" C @@ -631,6 +631,7 @@ ItemScroll src/Dodge/Data/Item.hs 38;" t ItemScrollInt src/Dodge/Data/Item.hs 40;" C ItemScrollIntRange src/Dodge/Data/Item.hs 41;" C ItemScrollTimeFlow src/Dodge/Data/World.hs 64;" C +ItemSound src/Dodge/Data/SoundOrigin.hs 21;" C ItemTargeting src/Dodge/Data/Item.hs 43;" t ItemType src/Dodge/Data/Item/Combine.hs 16;" t ItemUse src/Dodge/Data/Item/Use.hs 30;" t @@ -667,7 +668,7 @@ LampCrit src/Dodge/Data/Creature/Misc.hs 74;" C Large src/Shape/Data.hs 29;" C LasBeamCombine src/Dodge/Data/Beam.hs 40;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C -LasSound src/Dodge/Data/SoundOrigin.hs 29;" C +LasSound src/Dodge/Data/SoundOrigin.hs 30;" C Laser src/Dodge/Data/Laser.hs 21;" t LaserSensor src/Dodge/Data/Machine/Sensor.hs 15;" C LaserType src/Dodge/Data/Laser.hs 16;" t @@ -731,9 +732,9 @@ MPO src/Dodge/Base/Collide.hs 89;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 11;" C Machine src/Dodge/Data/Machine.hs 30;" t -MachineAltSound src/Dodge/Data/SoundOrigin.hs 23;" C +MachineAltSound src/Dodge/Data/SoundOrigin.hs 24;" C MachinePart src/Dodge/Data/Wall/Structure.hs 15;" C -MachineSound src/Dodge/Data/SoundOrigin.hs 22;" C +MachineSound src/Dodge/Data/SoundOrigin.hs 23;" C MachineType src/Dodge/Data/Machine.hs 44;" t MagBelow src/Dodge/Data/Muzzle.hs 22;" C Magnet src/Dodge/Data/Magnet.hs 23;" t @@ -756,7 +757,7 @@ Manipulator src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 17;" C MapperInventory src/Dodge/Data/HUD.hs 19;" C MapperSF src/Dodge/Data/ComposedItem.hs 39;" C Material src/Dodge/Data/Material.hs 11;" t -MaterialSound src/Dodge/Data/SoundOrigin.hs 35;" C +MaterialSound src/Dodge/Data/SoundOrigin.hs 36;" C Maybe' src/MaybeHelp.hs 13;" t McDamSensor src/Dodge/Data/Machine.hs 47;" C McProxSensor src/Dodge/Data/Machine.hs 48;" C @@ -971,10 +972,10 @@ P2Ac src/Dodge/Data/CreatureEffect.hs 53;" t P2Imp src/Dodge/Data/CreatureEffect.hs 28;" t P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C -PBSound src/Dodge/Data/SoundOrigin.hs 42;" C +PBSound src/Dodge/Data/SoundOrigin.hs 43;" C PIPE src/Dodge/Data/Item/Combine.hs 51;" C PISTOL src/Dodge/Data/Item/Combine.hs 144;" C -PJStabiliser src/Dodge/Projectile/Create.hs 17;" t +PJStabiliser src/Dodge/Projectile/Create.hs 16;" t PLANK src/Dodge/Data/Item/Combine.hs 60;" C PLATE src/Dodge/Data/Item/Combine.hs 70;" C PLUS src/Dodge/Data/GenParams.hs 20;" C @@ -1225,7 +1226,7 @@ ShapeProp src/Dodge/Data/Prop.hs 32;" C ShapeType src/Shape/Data.hs 16;" t Shattering src/Dodge/Data/Damage.hs 24;" C Shell src/Dodge/Data/Projectile.hs 17;" C -ShellSound src/Dodge/Data/SoundOrigin.hs 27;" C +ShellSound src/Dodge/Data/SoundOrigin.hs 28;" C ShieldGroup src/Dodge/Data/Creature/State.hs 32;" C Shockwave src/Dodge/Data/Shockwave.hs 17;" t ShockwaveDirection src/Dodge/Data/Shockwave.hs 14;" t @@ -1286,8 +1287,8 @@ SpawnedBy src/Dodge/Data/Creature/State.hs 19;" C SplashOptions src/Dodge/Data/Universe.hs 72;" C SplitBeamCombine src/Dodge/Data/Beam.hs 42;" C SpreadGunAI src/Dodge/Data/Creature/Misc.hs 42;" C -StabOrthReduce src/Dodge/Projectile/Create.hs 18;" C -StabSpinIncrease src/Dodge/Projectile/Create.hs 19;" C +StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C +StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C Stance src/Dodge/Data/Creature/Stance.hs 17;" t StandaloneWall src/Dodge/Data/Wall/Structure.hs 13;" C Standing src/Dodge/Data/Creature/Stance.hs 29;" C @@ -1335,13 +1336,13 @@ TSright src/Dodge/Data/Input.hs 58;" C TStab src/Dodge/Data/Input.hs 56;" C TSup src/Dodge/Data/Input.hs 59;" C TUBE src/Dodge/Data/Item/Combine.hs 52;" C -Tap src/Dodge/Data/SoundOrigin.hs 39;" C +Tap src/Dodge/Data/SoundOrigin.hs 40;" C TargetCursor src/Dodge/Data/Item/Targeting.hs 14;" C TargetRBCreature src/Dodge/Data/Item/Targeting.hs 13;" C TargetRBPress src/Dodge/Data/Item/Targeting.hs 12;" C TargetingLaser src/Dodge/Data/Laser.hs 18;" C TargetingType src/Dodge/Data/Item/Targeting.hs 11;" t -TeleSound src/Dodge/Data/SoundOrigin.hs 36;" C +TeleSound src/Dodge/Data/SoundOrigin.hs 37;" C TermSignal src/Dodge/Data/Input.hs 51;" t Terminal src/Dodge/Data/Terminal.hs 21;" t TerminalDeactivated src/Dodge/Data/Terminal/Status.hs 12;" C @@ -1351,7 +1352,7 @@ TerminalLineRead src/Dodge/Data/Terminal/Status.hs 13;" C TerminalLineString src/Dodge/Data/Terminal.hs 36;" t TerminalOff src/Dodge/Data/Terminal/Status.hs 11;" C TerminalPressTo src/Dodge/Data/Terminal/Status.hs 15;" C -TerminalSound src/Dodge/Data/SoundOrigin.hs 24;" C +TerminalSound src/Dodge/Data/SoundOrigin.hs 25;" C TerminalStatus src/Dodge/Data/Terminal/Status.hs 10;" t TerminalTextInput src/Dodge/Data/Terminal/Status.hs 14;" C TerminalToggle src/Dodge/Data/Terminal.hs 44;" t @@ -1484,7 +1485,7 @@ WallDraw src/Dodge/Data/Wall.hs 47;" t WallObstacle src/Dodge/Data/PathGraph.hs 52;" C WallP src/Dodge/LevelGen/StaticWalls.hs 23;" t WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t -WallSound src/Dodge/Data/SoundOrigin.hs 25;" C +WallSound src/Dodge/Data/SoundOrigin.hs 26;" C WallStructure src/Dodge/Data/Wall/Structure.hs 12;" t WallWire src/Dodge/Data/Room.hs 55;" C Walls_info src/Dodge/Data/Config.hs 75;" C @@ -2631,21 +2632,21 @@ angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 122;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f anythingHitCirc src/Dodge/Base/Collide.hs 337;" f -applyCME src/Dodge/HeldUse.hs 362;" f +applyCME src/Dodge/HeldUse.hs 370;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyEventIO src/Loop.hs 89;" f applyGravityPU src/Dodge/Projectile/Update.hs 44;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 17;" f -applyInvLock src/Dodge/HeldUse.hs 421;" f +applyInvLock src/Dodge/HeldUse.hs 429;" f applyMagnetsToBul src/Dodge/Bullet.hs 32;" f applyPastDamages src/Dodge/Creature/State.hs 49;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 23;" f applyPosition src/Sound.hs 111;" f -applyRecoil src/Dodge/HeldUse.hs 452;" f +applyRecoil src/Dodge/HeldUse.hs 460;" f applyResFactor src/Dodge/Data/Config.hs 110;" f applySetTerminalString src/Dodge/Debug/Terminal.hs 83;" f -applySidePush src/Dodge/HeldUse.hs 552;" f -applySoundCME src/Dodge/HeldUse.hs 442;" f +applySidePush src/Dodge/HeldUse.hs 560;" f +applySoundCME src/Dodge/HeldUse.hs 450;" f applyTerminalCommand src/Dodge/Debug/Terminal.hs 28;" f applyTerminalCommandArguments src/Dodge/Debug/Terminal.hs 44;" f applyTerminalString src/Dodge/Debug/Terminal.hs 22;" f @@ -2653,7 +2654,7 @@ applyToNode src/TreeHelp.hs 65;" f applyToRandomNode src/TreeHelp.hs 151;" f applyToSubforest src/TreeHelp.hs 78;" f applyToSubtree src/TreeHelp.hs 71;" f -applyTorqueCME src/Dodge/HeldUse.hs 563;" f +applyTorqueCME src/Dodge/HeldUse.hs 571;" f applyWorldConfig src/Dodge/Config.hs 55;" f aquamarine src/Color.hs 23;" f arHUD src/Dodge/Item/Scope.hs 134;" f @@ -2724,7 +2725,7 @@ baseSMGShape src/Dodge/Item/Draw/SPic.hs 391;" f baseShoulder src/Dodge/Creature/Picture.hs 116;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 300;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 292;" f -baseStickSpread src/Dodge/HeldUse.hs 312;" f +baseStickSpread src/Dodge/HeldUse.hs 320;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 128;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 38;" f basicCrPict src/Dodge/Creature/Picture.hs 30;" f @@ -2733,7 +2734,7 @@ basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 14;" f -basicMuzFlare src/Dodge/HeldUse.hs 707;" f +basicMuzFlare src/Dodge/HeldUse.hs 711;" f battery src/Dodge/Item/Ammo.hs 63;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f belowNumX src/Dodge/Combine/Graph.hs 86;" f @@ -2741,7 +2742,7 @@ beltMag src/Dodge/Item/Ammo.hs 39;" f bfsNodePoints src/Dodge/Path.hs 58;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 219;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 118;" f -bgunSound src/Dodge/HeldUse.hs 507;" f +bgunSound src/Dodge/HeldUse.hs 515;" f bindFBO src/Render.hs 245;" f bingate src/Dodge/Item/Scope.hs 109;" f black src/Color.hs 27;" f @@ -3036,16 +3037,15 @@ createHeadLamp src/Dodge/Euse.hs 58;" f createItemYou src/Dodge/Inventory/Add.hs 61;" f createLightMap src/Render.hs 26;" f createPathGrid src/Dodge/Room/Path.hs 20;" f -createProjectile src/Dodge/HeldUse.hs 1320;" f -createProjectileR src/Dodge/HeldUse.hs 1269;" f -createShell src/Dodge/Projectile/Create.hs 22;" f +createProjectile src/Dodge/HeldUse.hs 1285;" f +createProjectileR src/Dodge/HeldUse.hs 1234;" f +createShell src/Dodge/Projectile/Create.hs 21;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 40;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 124;" f createWall src/Dodge/Wall/Create.hs 8;" f creatureDisplayText src/Dodge/Creature/Picture/Awareness.hs 12;" f -creatureShootLaser src/Dodge/HeldUse.hs 827;" f -creatureShootPulseBall src/Dodge/HeldUse.hs 904;" f -creatureShootPulseLaser src/Dodge/HeldUse.hs 871;" f +creatureShootLaser src/Dodge/HeldUse.hs 845;" f +creatureShootPulseLaser src/Dodge/HeldUse.hs 876;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 54;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 75;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 64;" f @@ -3109,7 +3109,7 @@ dark src/Color.hs 108;" f darkenBackground src/Dodge/Render/MenuScreen.hs 32;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f -dbwMuzzles src/Dodge/HeldUse.hs 315;" f +dbwMuzzles src/Dodge/HeldUse.hs 323;" f deZoneIX src/Dodge/Zoning/Base.hs 89;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f deadEndRoom src/Dodge/Room/Room.hs 246;" f @@ -3216,7 +3216,7 @@ detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 453;" f detectorInfo src/Dodge/Item/Info.hs 224;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1240;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1205;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 205;" f @@ -3276,9 +3276,9 @@ doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f doDrawing' src/Dodge/Render.hs 45;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 1196;" f +doGenFloat src/Dodge/HeldUse.hs 1166;" f doGravityPU src/Dodge/Projectile/Update.hs 38;" f -doHeldUseEffect src/Dodge/HeldUse.hs 344;" f +doHeldUseEffect src/Dodge/HeldUse.hs 352;" f doInPlacements src/Dodge/Layout.hs 82;" f doIndividualPlacements src/Dodge/Layout.hs 96;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f @@ -3467,7 +3467,7 @@ drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 285;" f dropAll src/Dodge/Creature/Update.hs 129;" f dropExcept src/Dodge/Creature/Action.hs 168;" f -dropInventoryPath src/Dodge/HeldUse.hs 1408;" f +dropInventoryPath src/Dodge/HeldUse.hs 1360;" f dropItem src/Dodge/Creature/Action.hs 175;" f dropper src/Dodge/Item/Scope.hs 76;" f drumMag src/Dodge/Item/Ammo.hs 34;" f @@ -3544,7 +3544,7 @@ expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 187;" f -explodeShell src/Dodge/Projectile/Update.hs 320;" f +explodeShell src/Dodge/Projectile/Update.hs 321;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 556;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 25;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f @@ -3580,7 +3580,7 @@ firstWorldLoad appDodge/Main.hs 77;" f fixedCoordPictures src/Dodge/Render/Picture.hs 18;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 38;" f -flameMuzzles src/Dodge/HeldUse.hs 318;" f +flameMuzzles src/Dodge/HeldUse.hs 326;" f flameShield src/Dodge/Item/Equipment.hs 33;" f flameSize src/Dodge/Flame/Size.hs 5;" f flameSpitter src/Dodge/Item/Held/SprayGuns.hs 23;" f @@ -3588,7 +3588,7 @@ flameThrower src/Dodge/Item/Held/SprayGuns.hs 64;" f flameTorrent src/Dodge/Item/Held/SprayGuns.hs 32;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 48;" f flamerPic src/Dodge/Item/Draw/SPic.hs 394;" f -flareCircleAt src/Dodge/HeldUse.hs 688;" f +flareCircleAt src/Dodge/HeldUse.hs 692;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 38;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f @@ -3655,7 +3655,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 144;" f gameplayMenu src/Dodge/Menu.hs 155;" f gameplayMenuOptions src/Dodge/Menu.hs 158;" f -gasType src/Dodge/HeldUse.hs 1153;" f +gasType src/Dodge/HeldUse.hs 1123;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 149;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f @@ -3668,11 +3668,11 @@ geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f getAimZoom src/Dodge/Update/Camera.hs 143;" f getAmmoLinks src/Dodge/Item/Grammar.hs 104;" f -getAttachedSFLink src/Dodge/HeldUse.hs 773;" f +getAttachedSFLink src/Dodge/HeldUse.hs 791;" f getAutoSpringLinks src/Dodge/Item/Grammar.hs 85;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 172;" f -getBulletType src/Dodge/HeldUse.hs 936;" f +getBulletType src/Dodge/HeldUse.hs 913;" f getCloseObj src/Dodge/Update/Input/InGame.hs 533;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f @@ -3680,17 +3680,17 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 323;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 310;" f getDistortions src/Dodge/Render.hs 435;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1308;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1273;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 147;" f -getLaserColor src/Dodge/HeldUse.hs 704;" f -getLaserDamage src/Dodge/HeldUse.hs 701;" f -getLaserPhaseV src/Dodge/HeldUse.hs 698;" f +getLaserColor src/Dodge/HeldUse.hs 708;" f +getLaserDamage src/Dodge/HeldUse.hs 705;" f +getLaserPhaseV src/Dodge/HeldUse.hs 702;" f getLinksOfType src/Dodge/RoomLink.hs 41;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f getMenuMouseContext src/Dodge/Update.hs 372;" f getNodePos src/Dodge/Path.hs 31;" f -getPJStabiliser src/Dodge/HeldUse.hs 1295;" f +getPJStabiliser src/Dodge/HeldUse.hs 1260;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomsFromInts src/Dodge/Room/Tutorial.hs 306;" f @@ -3786,14 +3786,14 @@ heldHandlePos src/Dodge/Item/HeldOffset.hs 89;" f heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 19;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 194;" f -heldItemInvLock src/Dodge/HeldUse.hs 435;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1033;" f +heldItemInvLock src/Dodge/HeldUse.hs 443;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1003;" f heldItemMuzzles src/Dodge/HeldUse.hs 176;" f -heldItemRifling src/Dodge/HeldUse.hs 1076;" f +heldItemRifling src/Dodge/HeldUse.hs 1046;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 233;" f heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f -heldTorqueAmount src/Dodge/HeldUse.hs 579;" f +heldTorqueAmount src/Dodge/HeldUse.hs 587;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f helpPara src/Dodge/Terminal.hs 90;" f helpPoly3D src/Polyhedra.hs 125;" f @@ -3905,7 +3905,7 @@ invertIntMap src/Multiset.hs 67;" f invertInventoryToMap src/Dodge/Combine.hs 56;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f -isAmmoIntLink src/Dodge/HeldUse.hs 714;" f +isAmmoIntLink src/Dodge/HeldUse.hs 718;" f isAnimate src/Dodge/Creature/Test.hs 132;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f @@ -3949,7 +3949,7 @@ itemBlips src/Dodge/RadarSweep.hs 94;" f itemBulkiness src/Dodge/Creature/YourControl.hs 188;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 61;" f -itemDetectorEffect src/Dodge/HeldUse.hs 779;" f +itemDetectorEffect src/Dodge/HeldUse.hs 797;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 50;" f itemEquipPict src/Dodge/Item/Draw.hs 18;" f itemExternalValue src/Dodge/Inventory/SelectionList.hs 85;" f @@ -3961,7 +3961,7 @@ itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 20;" f itemInternalValue src/Dodge/Item/Display.hs 34;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemInvLock src/Dodge/HeldUse.hs 430;" f +itemInvLock src/Dodge/HeldUse.hs 438;" f itemMuzzles src/Dodge/HeldUse.hs 162;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f @@ -3975,7 +3975,7 @@ itemShapeMaxX src/Dodge/Item/Orientation.hs 47;" f itemShapeMaxY src/Dodge/Item/Orientation.hs 50;" f itemShapeMaxZ src/Dodge/Item/Orientation.hs 53;" f itemShapeMin src/Dodge/Item/Orientation.hs 62;" f -itemSidePush src/Dodge/HeldUse.hs 378;" f +itemSidePush src/Dodge/HeldUse.hs 386;" f itemString src/Dodge/Item/Display.hs 56;" f itemToFunction src/Dodge/Item/Grammar.hs 107;" f itemTreeSPic src/Dodge/Item/Draw/SPicTree.hs 13;" f @@ -4079,7 +4079,7 @@ lnkBothAnd src/Dodge/Room/Procedural.hs 124;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 387;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f -loadMuzzle src/Dodge/HeldUse.hs 623;" f +loadMuzzle src/Dodge/HeldUse.hs 631;" f loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f @@ -4131,7 +4131,7 @@ machineAddSound src/Dodge/Machine.hs 50;" f machinePistol src/Dodge/Item/Held/Stick.hs 52;" f machineUpdateDeathEff src/Dodge/Machine.hs 35;" f machineUpdateLiveDieEff src/Dodge/Machine.hs 17;" f -magAmmoParams src/Dodge/HeldUse.hs 957;" f +magAmmoParams src/Dodge/HeldUse.hs 934;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 11;" f magShield src/Dodge/Item/Equipment.hs 27;" f magV src/Geometry/Vector.hs 172;" f @@ -4146,7 +4146,7 @@ makeAttach src/Dodge/Item/Attach.hs 10;" f makeBlip src/Dodge/RadarSweep.hs 70;" f makeBlockDebris src/Dodge/Block/Debris.hs 34;" f makeBoolOption src/Dodge/Menu/OptionType.hs 8;" f -makeBullet src/Dodge/HeldUse.hs 1014;" f +makeBullet src/Dodge/HeldUse.hs 982;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f @@ -4168,7 +4168,7 @@ makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 11;" f makeGrid src/Grid.hs 46;" f makeIntInterval src/Dodge/Zoning/Base.hs 35;" f makeMovingEB src/Dodge/EnergyBall.hs 60;" f -makeMuzzleFlare src/Dodge/HeldUse.hs 649;" f +makeMuzzleFlare src/Dodge/HeldUse.hs 657;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 35;" f makePathBetweenPs src/Dodge/Path.hs 54;" f @@ -4224,11 +4224,11 @@ mcProxSensorUpdate src/Dodge/Machine/Update.hs 139;" f mcProxTest src/Dodge/Machine/Update.hs 203;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 171;" f mcSPic src/Dodge/Render/ShapePicture.hs 135;" f -mcShootAuto src/Dodge/HeldUse.hs 1207;" f -mcShootLaser src/Dodge/HeldUse.hs 1200;" f +mcShootAuto src/Dodge/HeldUse.hs 1177;" f +mcShootLaser src/Dodge/HeldUse.hs 1170;" f mcTriggerVal src/Dodge/Machine/Update.hs 110;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f -mcUseHeld src/Dodge/HeldUse.hs 1119;" f +mcUseHeld src/Dodge/HeldUse.hs 1089;" f mcUseItem src/Dodge/Machine/Update.hs 89;" f megaBattery src/Dodge/Item/Ammo.hs 55;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f @@ -4318,8 +4318,9 @@ multiArrow src/Picture/Composite.hs 11;" f multiLookupTrie src/SimpleTrie.hs 57;" f multiLookupTrieI src/SimpleTrie.hs 66;" f muout src/Dodge/RoomLink.hs 144;" f -muzFlareAt src/Dodge/HeldUse.hs 675;" f -muzzlePos src/Dodge/HeldUse.hs 764;" f +muzFlareAt src/Dodge/HeldUse.hs 679;" f +muzzlePos src/Dodge/HeldUse.hs 767;" f +muzzleRandPos src/Dodge/HeldUse.hs 776;" f mvButton src/Dodge/Placement/PlaceSpot.hs 181;" f mvCr src/Dodge/Placement/PlaceSpot.hs 187;" f mvFS src/Dodge/Placement/PlaceSpot.hs 193;" f @@ -4720,7 +4721,7 @@ randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 216;" f readSaveSlot src/Dodge/Save.hs 45;" f -recoilAmount src/Dodge/HeldUse.hs 460;" f +recoilAmount src/Dodge/HeldUse.hs 468;" f rectNSWE src/Geometry/Polygon.hs 14;" f rectVV src/Geometry/Polygon.hs 39;" f rectWH src/Geometry/Polygon.hs 18;" f @@ -4750,7 +4751,7 @@ rememberSounds src/Dodge/Creature/Perception.hs 178;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f remoteScreen src/Dodge/Item/Scope.hs 139;" f removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f -removeAmmoFromMag src/Dodge/HeldUse.hs 932;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 910;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeLights src/Dodge/Room/Tutorial.hs 224;" f @@ -5034,16 +5035,16 @@ shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f shineTargetLaser src/Dodge/Creature/State.hs 201;" f shineTorch src/Dodge/Creature/State.hs 238;" f -shootBullet src/Dodge/HeldUse.hs 999;" f -shootBullets src/Dodge/HeldUse.hs 989;" f +shootBullet src/Dodge/HeldUse.hs 976;" f +shootBullets src/Dodge/HeldUse.hs 966;" f shootFirstMiss src/Dodge/Creature/Volition.hs 34;" f -shootLaser src/Dodge/HeldUse.hs 850;" f -shootPulseBall src/Dodge/HeldUse.hs 918;" f -shootPulseLaser src/Dodge/HeldUse.hs 891;" f +shootLaser src/Dodge/HeldUse.hs 855;" f +shootPulseBall src/Dodge/HeldUse.hs 896;" f +shootPulseLaser src/Dodge/HeldUse.hs 883;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 1223;" f +shootTeslaArc src/Dodge/HeldUse.hs 1194;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f -shootTractorBeam src/Dodge/HeldUse.hs 806;" f +shootTractorBeam src/Dodge/HeldUse.hs 824;" f shootersRoom src/Dodge/Room/Room.hs 324;" f shootersRoom' src/Dodge/Room/Room.hs 291;" f shootersRoom1 src/Dodge/Room/Room.hs 314;" f @@ -5336,12 +5337,12 @@ topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 41;" f torchShape src/Dodge/Item/Draw/SPic.hs 276;" f -torqueAmount src/Dodge/HeldUse.hs 574;" f +torqueAmount src/Dodge/HeldUse.hs 582;" f torqueCr src/Dodge/WorldEffect.hs 72;" f torso src/Dodge/Creature/Picture.hs 102;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f -tractorBeamAt src/Dodge/HeldUse.hs 818;" f +tractorBeamAt src/Dodge/HeldUse.hs 836;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 53;" f tractorGunPic src/Dodge/Item/Draw/SPic.hs 437;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f @@ -5581,21 +5582,21 @@ upperPrismPolySU src/Shape.hs 114;" f upperPrismPolyTS src/Shape.hs 120;" f upperRounded src/Shape.hs 185;" f useBulletPayload src/Dodge/Bullet.hs 116;" f -useGasParams src/Dodge/HeldUse.hs 1124;" f +useGasParams src/Dodge/HeldUse.hs 1094;" f useHotkey src/Dodge/Creature/YourControl.hs 77;" f -useInventoryPath src/Dodge/HeldUse.hs 1439;" f +useInventoryPath src/Dodge/HeldUse.hs 1391;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 255;" f -useLoadedAmmo src/Dodge/HeldUse.hs 717;" f +useLoadedAmmo src/Dodge/HeldUse.hs 721;" f useMagShield src/Dodge/Euse.hs 30;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1399;" f +useRewindGun src/Dodge/HeldUse.hs 1351;" f useRoomPosCond src/Dodge/PlacementSpot.hs 180;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 183;" f -useStopWatch src/Dodge/HeldUse.hs 1380;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1388;" f +useStopWatch src/Dodge/HeldUse.hs 1332;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1340;" f useUnusedLnk src/Dodge/PlacementSpot.hs 171;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 202;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 209;" f @@ -5618,7 +5619,7 @@ verticalLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 38;" f verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 24;" f -vgunMuzzles src/Dodge/HeldUse.hs 334;" f +vgunMuzzles src/Dodge/HeldUse.hs 342;" f viewBoundaries src/Dodge/Debug/Picture.hs 321;" f viewClipBounds src/Dodge/Debug/Picture.hs 330;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 194;" f @@ -5629,7 +5630,7 @@ visionCheck src/Dodge/Creature/Perception.hs 153;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 357;" f -walkNozzle src/Dodge/HeldUse.hs 794;" f +walkNozzle src/Dodge/HeldUse.hs 812;" f walkableNodeNear src/Dodge/Path.hs 48;" f wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 53;" f @@ -5638,7 +5639,7 @@ wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f wallToSurface src/Dodge/Base/Collide.hs 171;" f wallsFromRooms src/Dodge/Layout.hs 132;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f -warmupSound src/Dodge/HeldUse.hs 1433;" f +warmupSound src/Dodge/HeldUse.hs 1385;" f warningRooms src/Dodge/Room/Warning.hs 30;" f wasdAim src/Dodge/Creature/YourControl.hs 133;" f wasdDir src/Dodge/WASD.hs 17;" f