diff --git a/ghcidOutput b/ghcidOutput index baeaf316e..d22008bf2 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1,94 @@ -All good (615 modules, at 22:49:00) +/home/justin/Haskell/loop/src/Dodge/Default/Item/Use/AimParams.hs:16:26-45: error: + • Couldn't match expected type ‘Muzzle’ + with actual type ‘Int -> Muzzle’ + • Probable cause: ‘Muzzle’ is applied to too few arguments + In the expression: Muzzle (V2 20 0) 0 0 + In the ‘_aimMuzzles’ field of a record + In the expression: + AimParams + {_aimWeight = 0, _aimTurnSpeed = 1, _aimRange = 0, + _aimZoom = defaultItZoom, _aimStance = OneHand, + _aimHandlePos = V2 3 0, _aimMuzzles = [Muzzle (V2 20 0) 0 0]} + | +16 | , _aimMuzzles = [Muzzle (V2 20 0) 0 0] + | ^^^^^^^^^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:345:12-14: warning: [-Wunused-matches] + Defined but not used: ‘eff’ + | +345 | useAllAmmo eff item cr w = error "use all ammo" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:345:16-19: warning: [-Wunused-matches] + Defined but not used: ‘item’ + | +345 | useAllAmmo eff item cr w = error "use all ammo" + | ^^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:345:21-22: warning: [-Wunused-matches] + Defined but not used: ‘cr’ + | +345 | useAllAmmo eff item cr w = error "use all ammo" + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:345:24: warning: [-Wunused-matches] + Defined but not used: ‘w’ + | +345 | useAllAmmo eff item cr w = error "use all ammo" + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:671:17-19: warning: [-Wunused-matches] + Defined but not used: ‘eff’ + | +671 | duplicateLoaded eff it cr w = error "duplicateLoaded" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:671:21-22: warning: [-Wunused-matches] + Defined but not used: ‘it’ + | +671 | duplicateLoaded eff it cr w = error "duplicateLoaded" + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:671:24-25: warning: [-Wunused-matches] + Defined but not used: ‘cr’ + | +671 | duplicateLoaded eff it cr w = error "duplicateLoaded" + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:671:27: warning: [-Wunused-matches] + Defined but not used: ‘w’ + | +671 | duplicateLoaded eff it cr w = error "duplicateLoaded" + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:681:21: warning: [-Wunused-matches] + Defined but not used: ‘n’ + | +681 | duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:681:23-25: warning: [-Wunused-matches] + Defined but not used: ‘eff’ + | +681 | duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:681:27-29: warning: [-Wunused-matches] + Defined but not used: ‘itm’ + | +681 | duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:681:31-32: warning: [-Wunused-matches] + Defined but not used: ‘cr’ + | +681 | duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:681:34: warning: [-Wunused-matches] + Defined but not used: ‘w’ + | +681 | duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:697:24-26: warning: [-Wunused-matches] + Defined but not used: ‘eff’ + | +697 | duplicateLoadedBarrels eff itm cr = error "duplicateLoadedBarrels" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:697:28-30: warning: [-Wunused-matches] + Defined but not used: ‘itm’ + | +697 | duplicateLoadedBarrels eff itm cr = error "duplicateLoadedBarrels" + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:697:32-33: warning: [-Wunused-matches] + Defined but not used: ‘cr’ + | +697 | duplicateLoadedBarrels eff itm cr = error "duplicateLoadedBarrels" + | ^^ diff --git a/src/Dodge/Bullet.hs b/src/Dodge/Bullet.hs index 21ecaf5f6..23e1f8e2a 100644 --- a/src/Dodge/Bullet.hs +++ b/src/Dodge/Bullet.hs @@ -3,6 +3,8 @@ module Dodge.Bullet ( shootBullet, ) where +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Linear import Dodge.Item.Weapon.Bullet import System.Random @@ -56,9 +58,12 @@ updateBulVel bt = case _buTrajectory bt of where t = _buTimer bt -shootBullet :: [Item] -> Item -> Creature -> World -> World -shootBullet ams it cr w = fromMaybe (error "cannot find bullet ammo when expected to") $ do - thebullet <- ams ^? ix 0 . itUse . amagParams . ampBullet +shootBullet :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World +shootBullet itm cr w = fromMaybe (error "cannot find bullet ammo when expected to") $ do + atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 + leftitms <- itm ^? ldtLeft + mag <- lookup (AmmoInLink atype) leftitms + thebullet <- mag ^? ldtValue . itUse . amagParams . ampBullet return $ w & cWorld . lWorld . instantBullets .:~ ( thebullet & buPos .~ _crPos cr @@ -67,6 +72,7 @@ shootBullet ams it cr w = fromMaybe (error "cannot find bullet ammo when expecte & buDrag *~ _rifling (_heldParams $ _itUse it) ) where + it = itm ^. ldtValue sp = _crPos cr +.+ (muzlength ^?! _head . _x) *.* unitVectorAtAngle dir dir = _crDir cr muzvel = _muzVel $ _heldParams $ _itUse it diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index 5f229df44..60a64c7be 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -5,6 +5,9 @@ module Dodge.Creature.Impulse.UseItem ( useItemHotkey, ) where +import Dodge.Item.Grammar +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Control.Lens import Control.Monad import Data.Foldable @@ -23,7 +26,7 @@ useItemRightClick :: Creature -> World -> World useItemRightClick cr' w = fromMaybe (f w) $ do cr <- w ^? cWorld . lWorld . creatures . ix (_crID cr') itRef <- cr ^? crManipulation . manObject . inInventory . ispItem - it <- cr ^? crInv . ix itRef + it <- invTrees (_crInv cr) ^? ix itRef return $ itemEffect cr it w & worldEventFlags . at InventoryChange ?~ () @@ -31,24 +34,20 @@ useItemRightClick cr' w = fromMaybe (f w) $ do where f = cWorld . lWorld . creatures . ix (_crID cr') . crHammerPosition .~ HammerDown -getAmmoMags :: Item -> Creature -> [Item] -getAmmoMags itm cr = fromMaybe [] $ do - i <- itm ^? itLocation . ipInvID - return $ cr ^.. crInv . dropping (i + 1) traverse - -itemEffect :: Creature -> Item -> World -> World -itemEffect cr it w = case it ^. itUse of +itemEffect :: Creature -> LabelDoubleTree ComposeLinkType Item -> World -> World +itemEffect cr it w = case it ^. ldtValue . itUse of HeldUse{_heldUse = eff, _heldMods = usemods} -> - foldl' (&) (useHeld eff) (useMod usemods) (getAmmoMags it cr) it cr w - & pointerToItem it . itUse . heldHammer .~ HammerDown + foldl' (&) (useHeld eff) (useMod usemods) it cr w + & pointerToItem itm . itUse . heldHammer .~ HammerDown LeftUse{} -> doequipmentchange EquipUse{} -> doequipmentchange -- ConsumeUse will cause problems if the item is not selected - (ConsumeUse eff) -> useC eff it cr $ rmInvItem (_crID cr) itRef w + (ConsumeUse eff) -> useC eff (_ldtValue it) cr $ rmInvItem (_crID cr) itRef w CraftUse{} -> w AttachUse{} -> w AmmoMagUse{} -> w where + itm = it ^. ldtValue itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change hammerTest f = case _crHammerPosition cr of HammerUp -> f w & setuhamdown diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 14377b9fa..df3db8458 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -13,6 +13,7 @@ import Dodge.Data.Item.Use.Consumption.Ammo data ComposeLinkType = AmmoInLink AmmoType | AmmoModLink + deriving (Eq,Ord,Show,Read) data ComposedItem = WeaponCI | WeaponScopeCI @@ -23,3 +24,4 @@ data ComposedItem = WeaponCI makeLenses ''ComposedItem deriveJSON defaultOptions ''ComposedItem +deriveJSON defaultOptions ''ComposeLinkType diff --git a/src/Dodge/Data/DoubleTree.hs b/src/Dodge/Data/DoubleTree.hs index 2efd4c361..63da1f438 100644 --- a/src/Dodge/Data/DoubleTree.hs +++ b/src/Dodge/Data/DoubleTree.hs @@ -49,4 +49,6 @@ instance Functor (LabelDoubleTree b) where fmap f (LDT x l r) = LDT (f x) (fmap (second $ fmap f) l) (fmap (second $ fmap f) r) makeLenses ''DoubleTree +makeLenses ''LabelDoubleTree deriveJSON defaultOptions ''DoubleTree +deriveJSON defaultOptions ''LabelDoubleTree diff --git a/src/Dodge/Data/WorldEffect.hs b/src/Dodge/Data/WorldEffect.hs index 805cf8b92..1b4debacb 100644 --- a/src/Dodge/Data/WorldEffect.hs +++ b/src/Dodge/Data/WorldEffect.hs @@ -5,6 +5,8 @@ module Dodge.Data.WorldEffect where +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Data.Aeson import Data.Aeson.TH import Dodge.Data.CreatureEffect @@ -30,7 +32,7 @@ data WdWd | TorqueCr Float Int | WdWdNegateTrig Int | WdWdFromItixCrixWdWd Int Int ItCrWdWd - | WdWdFromItCrixWdWd Item Int ItCrWdWd + | WdWdFromItCrixWdWd (LabelDoubleTree ComposeLinkType Item) Int ItCrWdWd --deriving (Eq, Show, Read) --, Generic) --h--deriving (Eq, Show, Read) --Generic, Flat) diff --git a/src/Dodge/DoubleTree.hs b/src/Dodge/DoubleTree.hs index 5fe6917bf..787aaad71 100644 --- a/src/Dodge/DoubleTree.hs +++ b/src/Dodge/DoubleTree.hs @@ -31,12 +31,12 @@ dtToUpDownAdj f (DT x l r) = IM.insert (f x) (map g l , map g r) where g = f . _dtValue -ldtToIndentList :: LabelDoubleTree b a -> [(a,Int,LabelDoubleTreeNodeType b)] -ldtToIndentList = ldtIL LDTRootNode - ldtToIM :: (a -> Int) -> LabelDoubleTree b a -> IM.IntMap (LabelDoubleTree b a) ldtToIM f t@(LDT x l r) = IM.insert (f x) t $ IM.unions $ map (ldtToIM f . snd) $ l <> r +ldtToIndentList :: LabelDoubleTree b a -> [(a,Int,LabelDoubleTreeNodeType b)] +ldtToIndentList = ldtIL LDTRootNode + ldtIL :: LabelDoubleTreeNodeType b -> LabelDoubleTree b a -> [(a,Int,LabelDoubleTreeNodeType b)] ldtIL nt (LDT x l r) = map doindent (concat diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 7c34263a7..72d636f36 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -1,5 +1,7 @@ module Dodge.HeldUse where +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Color import Data.Maybe import Data.Traversable @@ -25,7 +27,9 @@ import LensHelp import RandomHelp import Sound.Data -useMod :: HeldMod -> [([Item] -> Item -> Creature -> World -> World) -> [Item] -> Item -> Creature -> World -> World] +useMod :: HeldMod -> + [(LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World) + -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World] useMod hm = case hm of HeldModNothing -> [] PoisonSprayerMod -> @@ -358,71 +362,74 @@ mcUseHeld hit = case hit of LASGUN -> mcShootLaser _ -> \_ _ -> id -useHeld :: Huse -> [Item] -> Item -> Creature -> World -> World +useHeld :: Huse -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World useHeld hu = case hu of - HeldDoNothing -> const . const $ const id + HeldDoNothing -> const $ const id HeldUseAmmoParams -> shootBullet HeldOverNozzlesUseGasParams -> overNozzles useGasParams HeldPJCreation -> usePjCreation HeldPJCreationX _ -> usePjCreationX HeldFireRemoteShell -> fireRemoteShell - HeldDetectorEffect dt -> const $ detectorEffect dt - HeldTeslaArc -> shootTeslaArc - HeldLaser -> shootLaser - HeldCircleLaser -> const circleLaser - HeldDualLaser -> const shootDualLaser - HeldTractor -> const aTractorBeam + HeldDetectorEffect dt -> detectorEffect dt . _ldtValue + HeldTeslaArc -> shootTeslaArc . _ldtValue + HeldLaser -> shootLaser . _ldtValue + HeldCircleLaser -> circleLaser . _ldtValue + HeldDualLaser -> shootDualLaser . _ldtValue + HeldTractor -> aTractorBeam . _ldtValue -- HeldSonicWave -> aSonicWave - HeldForceField -> const useForceFieldGun - HeldShatter -> const shootShatter - HeldExplodeRemoteShell itid pjid -> const $ const $ const $ explodeRemoteRocket itid pjid + HeldForceField -> useForceFieldGun . _ldtValue + HeldShatter -> shootShatter . _ldtValue + HeldExplodeRemoteShell itid pjid -> const $ const $ explodeRemoteRocket itid pjid -usePjCreation :: [Item] -> Item -> Creature -> World -> World -usePjCreation ams itm cr = fromMaybe id $ do - apm <- ams ^? ix 0 - muz <- itm ^? itUse . heldAim . aimMuzzles . ix 0 - return $ createProjectile apm muz itm cr +usePjCreation :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World +usePjCreation itm cr = fromMaybe id $ do + atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 + leftitms <- itm ^? ldtLeft + mag <- lookup (AmmoInLink atype) leftitms + apm <- mag ^? ldtValue + muz <- itm ^? ldtValue . itUse . heldAim . aimMuzzles . ix 0 + return $ createProjectile apm muz (_ldtValue itm) cr -usePjCreationX :: [Item] -> Item -> Creature -> World -> World -usePjCreationX ams itm cr = fromMaybe id $ do - muzs <- itm ^? itUse . heldAim . aimMuzzles - return $ foldr - f id (zip muzs ams) - where - f (muz,am) = (createProjectile am muz itm cr .) +usePjCreationX :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World +usePjCreationX itm cr = undefined +--usePjCreationX ams itm cr = fromMaybe id $ do +-- muzs <- itm ^? itUse . heldAim . aimMuzzles +-- return $ foldr +-- f id (zip muzs ams) +-- where +-- f (muz,am) = (createProjectile am muz itm cr .) overNozzles :: - (Nozzle -> [Item] -> Item -> Creature -> World -> World) -> - [Item] -> - Item -> + (Nozzle -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World) -> + LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World overNozzles = overNozzles' . overNozzle overNozzles' :: - ([Item] -> Item -> Creature -> World -> Nozzle -> (World, Nozzle)) -> - [Item] -> - Item -> + (LabelDoubleTree ComposeLinkType Item -> Creature -> World -> Nozzle -> (World, Nozzle)) -> + LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World -overNozzles' eff ams it cr w = neww & cWorld . lWorld . creatures . ix cid . crInv . ix i . itParams . sprayNozzles .~ newNozzles +overNozzles' eff itm cr w = neww + & cWorld . lWorld . creatures . ix cid . crInv . ix i . itParams . sprayNozzles .~ newNozzles where + it = itm ^. ldtValue cid = _crID cr i = w ^?! cWorld . lWorld . creatures . ix cid . crManipulation . manObject . inInventory . ispItem - (neww, newNozzles) = mapAccumR (eff ams it cr) w $ _sprayNozzles (_itParams it) + (neww, newNozzles) = mapAccumR (eff itm cr) w $ _sprayNozzles (_itParams it) overNozzle :: - (Nozzle -> [Item] -> Item -> Creature -> World -> World) -> - [Item] -> - Item -> + (Nozzle -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World) -> + LabelDoubleTree ComposeLinkType Item -> Creature -> World -> Nozzle -> (World, Nozzle) -overNozzle eff ams it cr w nz = - ( eff nz ams it (cr & crDir +~ wa + na) w & randGen .~ g +overNozzle eff itm cr w nz = + ( eff nz itm (cr & crDir +~ wa + na) w & randGen .~ g , nz & nzCurrentWalkAngle .~ wa ) where @@ -441,8 +448,8 @@ getAmmoMagazine itm cr = do guard $ amtype == magtype return mag -useGasParams :: Nozzle -> [Item] -> Item -> Creature -> World -> World -useGasParams nz ams _ cr = +useGasParams :: Nozzle -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World +useGasParams nz itm cr = createGas gastype (_nzPressure nz) @@ -450,35 +457,41 @@ useGasParams nz ams _ cr = dir cr where - gastype = fromMaybe (error "cannot find gas ammo") $ ams ^? ix 0 . itUse . amagParams . ampCreateGas + gastype = fromMaybe (error "cannot find gas ammo") $ do + atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 + leftitms <- itm ^? ldtLeft + mag <- lookup (AmmoInLink atype) leftitms + mag ^? ldtValue . itUse . amagParams . ampCreateGas dir = _crDir cr pos = _crPos cr +.+ (_nzLength nz *.* unitVectorAtAngle (_crDir cr)) -fireRemoteShell :: [Item] -> Item -> Creature -> World -> World -fireRemoteShell ams it cr w = - set - (cWorld . lWorld . creatures . ix cid . crInv . ix j . itUse . heldUse) - (HeldExplodeRemoteShell itid i) - $ addRemRocket w - where - itid = _itID it - i = IM.newKey $ w ^. cWorld . lWorld . props - cid = _crID cr - apm = fromMaybe (error "cannot find shell ammo projectile") $ do - ams ^? ix 0 - addRemRocket = - makeShell apm - -- the following is unsafe! - (it ^?! itUse . heldAim . aimMuzzles . ix 0) - it - cr - [ PJRemoteShellCollisionCheck - , PJSetScope itid - , PJDecTimMvVel - , PJThrust 330 0 - , PJRemoteDirection 340 0 cid itid - ] - j = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change +fireRemoteShell :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World +fireRemoteShell it cr w = undefined +--fireRemoteShell :: [Item] -> Item -> Creature -> World -> World +--fireRemoteShell ams it cr w = +-- set +-- (cWorld . lWorld . creatures . ix cid . crInv . ix j . itUse . heldUse) +-- (HeldExplodeRemoteShell itid i) +-- $ addRemRocket w +-- where +-- itid = _itID it +-- i = IM.newKey $ w ^. cWorld . lWorld . props +-- cid = _crID cr +-- apm = fromMaybe (error "cannot find shell ammo projectile") $ do +-- ams ^? ix 0 +-- addRemRocket = +-- makeShell apm +-- -- the following is unsafe! +-- (it ^?! itUse . heldAim . aimMuzzles . ix 0) +-- it +-- cr +-- [ PJRemoteShellCollisionCheck +-- , PJSetScope itid +-- , PJDecTimMvVel +-- , PJThrust 330 0 +-- , PJRemoteDirection 340 0 cid itid +-- ] +-- j = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change caneStickSoundChoice :: Item -> SoundID caneStickSoundChoice _ = tap3S @@ -511,8 +524,8 @@ mcShootLaser it mc = cWorld . lWorld . lasers .:~ lasRayAt (_lasColor $ _itParam dam = _lasDamage $ _itParams it -- | assumes that the item is held -shootTeslaArc :: [Item] -> Item -> Creature -> World -> World -shootTeslaArc _ it cr w = +shootTeslaArc :: Item -> Creature -> World -> World +shootTeslaArc it cr w = w' & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef . itParams .~ ip where diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index f63b65407..442072201 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -103,6 +103,16 @@ invAdj = IM.unions . fmap (dtToUpDownAdj getid . ldtToDT) . invLDT invIndentIM :: IM.IntMap Item -> IM.IntMap (Item,Int, LabelDoubleTreeNodeType ComposeLinkType ) invIndentIM = IM.fromAscList . zip [0..] . reverse . map (over _1 cisToItem) . concatMap ldtToIndentList . invLDT +--invTrees :: IM.IntMap Item -> [(LabelDoubleTree ComposeLinkType Item)] +invTrees :: IM.IntMap Item -> IM.IntMap (LabelDoubleTree ComposeLinkType Item) +--invTrees = map (ldtToIM getindex) . map (fmap cisToItem) . invLDT +--invTrees = map (ldtToIM getindex) . map (fmap cisToItem) . invLDT +invTrees = IM.unions . map (ldtToIM getindex) . map (fmap cisToItem) . invLDT + where + getindex :: Item -> Int + getindex i = fromMaybe (error "in invTrees try to get non-inventory item tree") $ + i ^? itLocation . ipInvID + --indentInv :: IM.IntMap Item -> [String] --indentInv = concat . fmap (flattenDT . indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap const "") -- . joinItemsInList joinItems diff --git a/src/Dodge/Item/Weapon/BatteryGuns.hs b/src/Dodge/Item/Weapon/BatteryGuns.hs index b36248f2d..5c17da515 100644 --- a/src/Dodge/Item/Weapon/BatteryGuns.hs +++ b/src/Dodge/Item/Weapon/BatteryGuns.hs @@ -74,8 +74,8 @@ import Picture -- x' = _lasCycle $ _itParams it -shootLaser :: [Item] -> Item -> Creature -> World -> World -shootLaser _ it cr = +shootLaser :: Item -> Creature -> World -> World +shootLaser it cr = cWorld . lWorld . lasers .:~ lasRayAt (_lasColor $ _itParams it) diff --git a/src/Dodge/Item/Weapon/TriggerType.hs b/src/Dodge/Item/Weapon/TriggerType.hs index ed609eba5..650edf9df 100644 --- a/src/Dodge/Item/Weapon/TriggerType.hs +++ b/src/Dodge/Item/Weapon/TriggerType.hs @@ -6,7 +6,7 @@ Weapon effects when pulling the trigger. module Dodge.Item.Weapon.TriggerType ( useAmmoAmount, useAllAmmo, - useAmmoUpTo, +-- useAmmoUpTo, lockInvFor, withFlare, withMuzFlare, @@ -61,6 +61,8 @@ module Dodge.Item.Weapon.TriggerType ( repeatTransformed, ) where +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Dodge.Creature.HandPos import Data.Foldable import Data.Maybe @@ -79,31 +81,30 @@ import qualified SDL import Sound.Data type ChainEffect = - ([Item] -> Item -> Creature -> World -> World) -> - [Item] -> - Item -> + (LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World) -> + LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World lockInvFor :: Int -> ChainEffect -lockInvFor i f ams it cr = - f ams it cr . (cWorld . lWorld . delayedEvents .:~ (i, UnlockInv (_crID cr))) +lockInvFor i f it cr = + f it cr . (cWorld . lWorld . delayedEvents .:~ (i, UnlockInv (_crID cr))) . lockInv (_crID cr) repeatTransformed :: [(Item -> Item,Creature -> Creature)] -> ChainEffect -repeatTransformed xs f ams itm cr w = foldr g w xs +repeatTransformed xs f itm cr w = foldr g w xs where - g (fit,fcr) = f ams (fit itm) (fcr cr) + g (fit,fcr) = f (over ldtValue fit itm) (fcr cr) trigDoAlso :: (Item -> Item) -> (Creature -> Creature) -> (Item -> Creature -> World -> World) -> ChainEffect -trigDoAlso fit fcr f g ams itm cr = g ams itm cr . f (fit itm) (fcr cr) +trigDoAlso fit fcr f g itm cr = g itm cr . f (fit $ itm ^. ldtValue) (fcr cr) -- Note that this uses the "base" creature and item values --trigDoAlso :: @@ -112,8 +113,8 @@ trigDoAlso fit fcr f g ams itm cr = g ams itm cr . f (fit itm) (fcr cr) --trigDoAlso afterEff eff item cr = afterEff item cr . eff item cr withSmoke :: Int -> Point4 -> Float -> Int -> Float -> ChainEffect -withSmoke num col rad t alt eff ams item cr w = - eff ams item cr $ +withSmoke num col rad t alt eff item cr w = + eff item cr $ foldl' (flip $ smokeCloudAt col rad t alt . (+.+.+ pos) . (* 8)) w ps where dir = _crDir cr @@ -121,8 +122,8 @@ withSmoke num col rad t alt eff ams item cr w = ps = replicateM num randOnUnitSphere & evalState $ _randGen w withThinSmokeI :: ChainEffect -withThinSmokeI eff ams item cr w = - eff ams item cr $ +withThinSmokeI eff item cr w = + eff item cr $ foldl' (flip $ makeThinSmokeAt . (+.+.+ pos) . (* 8)) w ps where dir = _crDir cr @@ -130,8 +131,8 @@ withThinSmokeI eff ams item cr w = ps = replicateM 5 randOnUnitSphere & evalState $ _randGen w withThickSmokeI :: ChainEffect -withThickSmokeI eff ams item cr w = - eff ams item cr $ +withThickSmokeI eff item cr w = + eff item cr $ foldl' (flip $ makeThickSmokeAt . (+.+.+ pos) . (* 8)) w ps where dir = _crDir cr @@ -141,13 +142,13 @@ withThickSmokeI eff ams item cr w = -- TODO create a trigger that does different things on first and continued -- fire. ammoCheckI :: ChainEffect -ammoCheckI eff ams itm cr w = fromMaybe (failsound w) $ do - x <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded +ammoCheckI eff itm cr w = fromMaybe (failsound w) $ do + atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 + leftitms <- itm ^? ldtLeft + mag <- lookup (AmmoInLink atype) leftitms + x <- mag ^? ldtValue . itUse . amagLoadStatus . iaLoaded guard $ x > 0 - matype <- ams ^? ix 0 . itUse . amagType - iatype <- itm ^? itUse . heldAmmoTypes . ix 0 - guard $ matype == iatype - return $ eff ams itm cr $ w -- & cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading + return $ eff itm cr $ w -- & cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading where failsound = case w ^? input . mouseButtons . ix SDL.ButtonLeft of Just 0 -> soundStart (CrWeaponSound (_crID cr) 0) (_crPos cr) click1S Nothing @@ -169,7 +170,7 @@ rateIncAB :: -- | Extra effect on continued fire ChainEffect -> ChainEffect -rateIncAB exeffFirst exeffCont eff ams item cr w +rateIncAB exeffFirst exeffCont eff item cr w | repeatFire = w & pointItem @@ -177,7 +178,7 @@ rateIncAB exeffFirst exeffCont eff ams item cr w -- . itUseAmmo 1 . (itUse . heldDelay . rateTime .~ currentRate) ) - & exeffCont eff ams item cr + & exeffCont eff item cr | firstFire = w & pointItem @@ -185,17 +186,18 @@ rateIncAB exeffFirst exeffCont eff ams item cr w -- . itUseAmmo 1 . (itUse . heldDelay . rateTime .~ startRate) ) - & exeffFirst eff ams item cr + & exeffFirst eff item cr | otherwise = w where - fastRate = _rateMinMax . _heldDelay $ _itUse item - startRate = _rateMaxMax . _heldDelay $ _itUse item + item' = _ldtValue item + fastRate = _rateMinMax . _heldDelay $ _itUse item' + startRate = _rateMaxMax . _heldDelay $ _itUse item' cid = _crID cr itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change pointItem = cWorld . lWorld . creatures . ix cid . crInv . ix itRef - currentRate = _rateMax (_heldDelay (_itUse item)) - repeatFire = crWeaponReady cr && _rateTime (_heldDelay (_itUse item)) == 1 - firstFire = crWeaponReady cr && _rateTime (_heldDelay (_itUse item)) == 0 + currentRate = _rateMax (_heldDelay (_itUse item')) + repeatFire = crWeaponReady cr && _rateTime (_heldDelay (_itUse item')) == 1 + firstFire = crWeaponReady cr && _rateTime (_heldDelay (_itUse item')) == 0 -- | Apply effect after a warm up. @@ -204,7 +206,7 @@ withWarmUp :: -- | warm up sound id SoundID -> ChainEffect -withWarmUp soundID f ams item cr w +withWarmUp soundID f item cr w | curWarmUp < maxWarmUp && crWeaponReady cr = w & pointertoitem . itUse . heldDelay . warmTime +~ 2 @@ -212,24 +214,25 @@ withWarmUp soundID f ams item cr w | otherwise = w & pointertoitem . itUse . heldDelay . warmTime .~ maxWarmUp - & f ams item cr + & f item cr where + item' = _ldtValue item cid = _crID cr itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change pointertoitem = cWorld . lWorld . creatures . ix cid . crInv . ix itRef - curWarmUp = _warmTime . _heldDelay $ _itUse item - maxWarmUp = _warmMax . _heldDelay $ _itUse item + curWarmUp = _warmTime . _heldDelay $ _itUse item' + maxWarmUp = _warmMax . _heldDelay $ _itUse item' withSoundItemChoiceStart :: (Item -> SoundID) -> ChainEffect -withSoundItemChoiceStart soundf f ams it cr = +withSoundItemChoiceStart soundf f it cr = soundMultiFrom [CrWeaponSound cid 0, CrWeaponSound cid 1, CrWeaponSound cid 2] (_crPos cr) - (soundf it) + (soundf $ _ldtValue it) Nothing - . f ams it cr + . f it cr where cid = _crID cr @@ -240,9 +243,9 @@ withSoundStart :: -- | Sound id SoundID -> ChainEffect -withSoundStart soundid f ams item cr = +withSoundStart soundid f item cr = soundMultiFrom [CrWeaponSound cid j | j <- [0..3]] (_crPos cr) soundid Nothing - . f ams item cr + . f item cr where cid = _crID cr @@ -253,9 +256,9 @@ withSoundContinue :: -- | Sound id SoundID -> ChainEffect -withSoundContinue soundid f ams item cr = +withSoundContinue soundid f item cr = soundContinue (CrWeaponSound cid 0) (_crPos cr) soundid Nothing - . f ams item cr + . f item cr where cid = _crID cr @@ -268,9 +271,9 @@ withSoundForI :: -- | Frames to play Int -> ChainEffect -withSoundForI soundid playTime f ams item cr = +withSoundForI soundid playTime f item cr = soundContinue (CrWeaponSound (_crID cr) 0) (_crPos cr) soundid (Just playTime) - . f ams item cr + . f item cr {- | Adds a sound to a creature based world effect. The sound is emitted from the creature's position. @@ -283,24 +286,24 @@ withSoundForVol :: -- | Frames to play Int -> ChainEffect -withSoundForVol vol soundid playTime f ams item cr = +withSoundForVol vol soundid playTime f item cr = soundContinueVol vol (CrWeaponSound (_crID cr) 0) (_crPos cr) soundid (Just playTime) - . f ams item cr + . f item cr afterRecoil :: -- | Recoil amount Float -> ChainEffect -afterRecoil recoilAmount eff ams item cr = eff ams item (pushback cr) . over (cWorld . lWorld . creatures . ix cid) pushback +afterRecoil recoilAmount eff item cr = eff item (pushback cr) . over (cWorld . lWorld . creatures . ix cid) pushback where cid = _crID cr pushback = over crPos (+.+ rotateV (_crDir cr) (V2 ((- recoilAmount) / _crMass cr) 0)) withRecoil :: ChainEffect -withRecoil eff ams it cr = eff ams it cr . over (cWorld . lWorld . creatures . ix cid) pushback +withRecoil eff it cr = eff it cr . over (cWorld . lWorld . creatures . ix cid) pushback where cid = _crID cr - recoilAmount = fromMaybe 0 $ it ^? itUse . heldParams . recoil + recoilAmount = fromMaybe 0 $ it ^? ldtValue . itUse . heldParams . recoil pushback = over crPos (+.+ rotateV (_crDir cr) (V2 ((- recoilAmount) / _crMass cr) 0)) {- | Pushes a creature sideways by a random amount. @@ -310,8 +313,8 @@ withSidePushI :: -- | Maximal possible side push amount Float -> ChainEffect -withSidePushI maxSide eff ams item cr w = - eff ams item (push cr) $ +withSidePushI maxSide eff item cr w = + eff item (push cr) $ w & cWorld . lWorld . creatures . ix cid %~ push & randGen .~ g @@ -329,8 +332,8 @@ withSidePushAfterI :: -- | Maximal possible side push amount Float -> ChainEffect -withSidePushAfterI maxSide eff ams item cr w = - over (cWorld . lWorld . creatures . ix cid) push . eff ams item cr $ +withSidePushAfterI maxSide eff item cr w = + over (cWorld . lWorld . creatures . ix cid) push . eff item cr $ w & randGen .~ g where @@ -339,27 +342,32 @@ withSidePushAfterI maxSide eff ams item cr w = (pushAmount, g) = randomR (- maxSide, maxSide) $ _randGen w useAllAmmo :: ChainEffect -useAllAmmo eff ams item cr w = fromMaybe w $ do - let invids = ams ^.. traverse . itLocation . ipInvID - return . eff ams item cr $ foldl' f w invids - where - f w' invid = w' & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid - . itUse . amagLoadStatus . iaLoaded .~ 0 +useAllAmmo eff item cr w = error "use all ammo" +--useAllAmmo eff ams item cr w = fromMaybe w $ do +-- let invids = ams ^.. traverse . itLocation . ipInvID +-- return . eff ams item cr $ foldl' f w invids +-- where +-- f w' invid = w' & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid +-- . itUse . amagLoadStatus . iaLoaded .~ 0 -useAmmoUpTo :: Int -> ChainEffect -useAmmoUpTo amAmount eff ams itm cr = fromMaybe id $ do - _ <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded - invid <- ams ^? ix 0 . itLocation . ipInvID - return $ eff ams itm cr - . ( cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itUse . amagLoadStatus . iaLoaded - %~ (max 0 . subtract amAmount) - ) +--useAmmoUpTo :: Int -> ChainEffect +--useAmmoUpTo amAmount eff ams itm cr = fromMaybe id $ do +-- _ <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded +-- invid <- ams ^? ix 0 . itLocation . ipInvID +-- return $ eff ams itm cr +-- . ( cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itUse . amagLoadStatus . iaLoaded +-- %~ (max 0 . subtract amAmount) +-- ) useAmmoAmount :: Int -> ChainEffect -useAmmoAmount amAmount eff ams item cr = fromMaybe id $ do - invid <- ams ^? ix 0 . itLocation . ipInvID - return $ eff ams item cr - . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itUse . amagLoadStatus . iaLoaded -~ amAmount) +useAmmoAmount amAmount eff item cr = fromMaybe id $ do + atype <- item ^? ldtValue . itUse . heldAmmoTypes . ix 0 + leftitms <- item ^? ldtLeft + mag <- lookup (AmmoInLink atype) leftitms + magid <- mag ^? ldtValue . itLocation . ipInvID +-- invid <- ams ^? ix 0 . itLocation . ipInvID + return $ eff item cr + . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix magid . itUse . amagLoadStatus . iaLoaded -~ amAmount) -- . crInv . ix itRef . itUse . heldConsumption . laSource @@ -367,19 +375,19 @@ useAmmoAmount amAmount eff ams item cr = fromMaybe id $ do Applies a world effect after an item use cooldown check. -} useTimeCheck :: ChainEffect -useTimeCheck f ams item cr w = case item ^? itUse . heldDelay . rateTime of - Just 0 -> f ams item cr $ setUseTime w +useTimeCheck f item cr w = case item ^? ldtValue . itUse . heldDelay . rateTime of + Just 0 -> f item cr $ setUseTime w _ -> w where cid = _crID cr setUseTime = cWorld . lWorld . creatures . ix cid . crInv . ix itRef . itUse . heldDelay . rateTime +~ userate itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change - userate = fromMaybe 0 $ item ^? itUse . heldDelay . rateMax + userate = fromMaybe 0 $ item ^? ldtValue . itUse . heldDelay . rateMax -- | Applies a world effect after a hammer position check. blCheck :: ChainEffect -blCheck f ams it cr w = case w ^? input . mouseButtons . ix SDL.ButtonLeft of - Just 0 -> f ams it cr w +blCheck f it cr w = case w ^? input . mouseButtons . ix SDL.ButtonLeft of + Just 0 -> f it cr w _ -> w {- | Applies a world effect after a hammer position check. @@ -423,56 +431,56 @@ shootL f item cr w -- reloadCondition = _laLoaded (_itConsumption item) == 0 withItem :: (Item -> ChainEffect) -> ChainEffect -withItem g f ams it = g it f ams it +withItem g f it = g (_ldtValue it) f it -- not ideal withItemUpdateFirst :: (Item -> Item) -> ChainEffect -withItemUpdateFirst up f ams it cr = f ams (up it) cr . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef %~ up) +withItemUpdateFirst up f it cr = f (over ldtValue up it) cr . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef %~ up) where itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change withItemUpdate :: (Item -> Item) -> (Item -> ChainEffect) -> ChainEffect -withItemUpdate up g f ams it cr = g it f ams it cr . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef %~ up) +withItemUpdate up g f it cr = g (_ldtValue it) f it cr . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef %~ up) where itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change withTempLight :: Int -> Float -> V3 Float -> ChainEffect -withTempLight time rad col eff ams item cr = - eff ams item cr +withTempLight time rad col eff item cr = + eff item cr . over (cWorld . lWorld . tempLightSources) (theTLS :) where theTLS = tlsTimeRadColPos time rad col (V3 x y 10) V2 x y = _crPos cr +.+ 15 *.* unitVectorAtAngle (_crDir cr) modClock :: Int -> ChainEffect -> ChainEffect -modClock n chainEff eff ams it cr w - | (w ^. cWorld . lWorld . lClock) `mod` n == 0 = chainEff eff ams it cr w - | otherwise = eff ams it cr w +modClock n chainEff eff it cr w + | (w ^. cWorld . lWorld . lClock) `mod` n == 0 = chainEff eff it cr w + | otherwise = eff it cr w withFlare :: ChainEffect -withFlare f ams it cr = +withFlare f it cr = makeTlsTimeRadColPos 2 100 (V3 1 1 0.5) (cpos `v2z` 20) -- . muzFlareAt (V4 5 5 0 2) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir - . f ams it cr + . f it cr where cdir = _crDir cr cpos = _crPos cr withMuzFlare :: ChainEffect -withMuzFlare f ams itm cr = +withMuzFlare f itm cr = makeTlsTimeRadColPos 2 100 (V3 1 1 0.5) (cpos `v2z` 20) -- . muzFlareAt (V4 5 5 0 2) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir . muzFlareAt (V4 10 10 1 3) (cpos `v2z` 20) cdir - . f ams itm cr + . f itm cr where cdir = _crDir cr - cpos = _crPos cr + rotateV (_crDir cr) (_mzPos brl + aimingWeaponZeroPos cr itm) - brl = itm ^?! itUse . heldAim . aimMuzzles . ix 0 + cpos = _crPos cr + rotateV (_crDir cr) (_mzPos brl + aimingWeaponZeroPos cr (_ldtValue itm)) + brl = itm ^?! ldtValue . itUse . heldAim . aimMuzzles . ix 0 --muzzleOffset :: Creature -> Item -> Point3 --muzzleOffset cr it = V3 (holdOffset + 5 + _aimMuzPos dimPort - _aimHandlePos dimPort) 0 0 @@ -486,7 +494,7 @@ withCrPos :: (Point3 -> World -> World) -> ChainEffect withCrPos = withCrPosShift (V2 0 0) withCrPosShift :: Point2 -> (Point3 -> World -> World) -> ChainEffect -withCrPosShift p g f ams it cr = g thepos . f ams it cr +withCrPosShift p g f it cr = g thepos . f it cr where thepos = (_crPos cr +.+ rotateV (_crDir cr) p) `v2z` 20 @@ -495,7 +503,7 @@ withRandomDirI :: -- | Max possible rotation Float -> ChainEffect -withRandomDirI acc f ams it cr w = f ams it (cr & crDir +~ a) $ set randGen g w +withRandomDirI acc f it cr w = f it (cr & crDir +~ a) $ set randGen g w where (a, g) = randomR (- acc, acc) $ _randGen w @@ -503,73 +511,73 @@ withOldDir :: -- | The fraction of the old direction Float -> ChainEffect -withOldDir aFrac eff ams item cr = - eff ams item (cr & crDir %~ tweenAngles aFrac (_crOldDir cr)) +withOldDir aFrac eff item cr = + eff item (cr & crDir %~ tweenAngles aFrac (_crOldDir cr)) withRandomItemUpdate :: State StdGen (Item -> Item) -> ChainEffect -withRandomItemUpdate randItUp eff ams it cr w = eff ams (f it) cr $ w & randGen .~ g +withRandomItemUpdate randItUp eff it cr w = eff (over ldtValue f it) cr $ w & randGen .~ g where (f, g) = runState randItUp (_randGen w) withRandomItemParams :: State StdGen (ItemParams -> ItemParams) -> ChainEffect -withRandomItemParams rip eff ams it cr w = eff ams (it & itParams %~ f) cr $ w & randGen .~ g +withRandomItemParams rip eff it cr w = eff (it & ldtValue . itParams %~ f) cr $ w & randGen .~ g where (f, g) = runState rip (_randGen w) withRandomItem :: State StdGen (Item -> Item) -> ChainEffect -withRandomItem rip eff ams it cr w = eff ams (f it) cr $ w & randGen .~ g +withRandomItem rip eff it cr w = eff (over ldtValue f it) cr $ w & randGen .~ g where (f, g) = runState rip (_randGen w) withPositionOffset :: (Item -> Creature -> World -> (Point2, Float)) -> ChainEffect -withPositionOffset h f ams it cr w = f ams it (cr & crPos .+.+~ p & crDir +~ a) w +withPositionOffset h f it cr w = f it (cr & crPos .+.+~ p & crDir +~ a) w where - (p, a) = h it cr w + (p, a) = h (_ldtValue it) cr w withPositionWallCheck :: (Item -> Creature -> World -> Point2) -> ChainEffect -withPositionWallCheck h f ams it cr w - | hasLOS p (_crPos cr) w = f ams it (cr & crPos .~ p) w +withPositionWallCheck h f it cr w + | hasLOS p (_crPos cr) w = f it (cr & crPos .~ p) w | otherwise = w where - p = h it cr w + p = h (_ldtValue it) cr w withPosDirWallCheck :: (Item -> Creature -> World -> (Point2, Float)) -> ChainEffect -withPosDirWallCheck h f ams it cr w - | hasLOS p (_crPos cr) w = f ams it (cr & crPos .~ p & crDir .~ a) w +withPosDirWallCheck h f it cr w + | hasLOS p (_crPos cr) w = f it (cr & crPos .~ p & crDir .~ a) w | otherwise = w where - (p, a) = h it cr w + (p, a) = h (_ldtValue it) cr w -- | Apply the effect to a translated creature. withRandomOffset :: ChainEffect -withRandomOffset f ams item cr w = f ams item (cr & crPos %~ (+.+ offV)) $ set randGen g w +withRandomOffset f item cr w = f item (cr & crPos %~ (+.+ offV)) $ set randGen g w where (offsetVal, g) = randomR (- offsetAmount, offsetAmount) $ _randGen w offV = rotateV (_crDir cr) (V2 0 offsetVal) - offsetAmount = fromMaybe 0 $ item ^? itUse . heldParams . randomOffset + offsetAmount = fromMaybe 0 $ item ^? ldtValue . itUse . heldParams . randomOffset -- | Rotates a creature torqueBefore :: -- | Max possible rotation Float -> ChainEffect -torqueBefore torque feff ams item cr w +torqueBefore torque feff item cr w | cid == 0 = - feff ams item (cr & crDir +~ rot) $ + feff item (cr & crDir +~ rot) $ w & randGen .~ g & cWorld . lWorld . creatures . ix cid . crDir +~ rot & wCam . camRot +~ rot & rotateScope - | otherwise = feff ams item cr $ set randGen g $ over (cWorld . lWorld . creatures . ix cid . crDir) (+ rot) w + | otherwise = feff item cr $ set randGen g $ over (cWorld . lWorld . creatures . ix cid . crDir) (+ rot) w where cid = _crID cr (rot, g) = randomR (- torque, torque) $ _randGen w @@ -586,15 +594,15 @@ torqueBeforeAtLeast :: -- | Extra possible rotation Float -> ChainEffect -torqueBeforeAtLeast minTorque exTorque feff ams item cr w +torqueBeforeAtLeast minTorque exTorque feff item cr w | cid == 0 = - feff ams item (cr & crDir +~ rot') $ + feff item (cr & crDir +~ rot') $ w & randGen .~ g & cWorld . lWorld . creatures . ix cid . crDir +~ rot' & wCam . camRot +~ rot' & rotateScope - | otherwise = feff ams item cr $ set randGen g $ over (cWorld . lWorld . creatures . ix cid . crDir) (+ rot') w + | otherwise = feff item cr $ set randGen g $ over (cWorld . lWorld . creatures . ix cid . crDir) (+ rot') w where cid = _crID cr (rot, g) = randomR (- exTorque, exTorque) $ _randGen w @@ -607,11 +615,11 @@ torqueBeforeAtLeast minTorque exTorque feff ams item cr w -- | Rotate a randomly creature after applying an effect. withTorqueAfter :: ChainEffect -withTorqueAfter feff ams item cr w +withTorqueAfter feff item cr w -- | cid == 0 = rotateScope . set randGen g $ over (wCam . camRot) (+ rot) $ feff item cr w -- | otherwise = set randGen g $ over (cWorld . lWorld . creatures . ix cid . crDir) (+ rot) $ feff item cr w | cid == 0 = w - & feff ams item cr + & feff item cr & wCam . camRot +~ rot & rotateScope & randGen .~ g @@ -621,7 +629,7 @@ withTorqueAfter feff ams item cr w where cid = _crID cr (rot, g) = randomR (- torque, torque) $ _randGen w - torque = fromMaybe 0 $ item ^? itUse . heldParams . torqueAfter + torque = fromMaybe 0 $ item ^? ldtValue . itUse . heldParams . torqueAfter rotateScope = fromMaybe id $ do i <- yourScopeInvID w return $ cWorld . lWorld . creatures . ix cid . crInv . ix i . itUse . attachParams . scrollAttachParams . opticPos %~ rotateV rot @@ -631,9 +639,9 @@ sideEffectOnFrame :: Int -> (Item -> Creature -> WdWd) -> ChainEffect -sideEffectOnFrame i sf f ams it cr w = - f ams it cr w - & cWorld . lWorld . delayedEvents .:~ (i, sf it cr) +sideEffectOnFrame i sf f it cr w = + f it cr w + & cWorld . lWorld . delayedEvents .:~ (i, sf (_ldtValue it) cr) torqueSideEffect :: Float -> Item -> Creature -> World -> World torqueSideEffect torque _ cr w @@ -649,10 +657,10 @@ torqueSideEffect torque _ cr w -- pump the updated creature into the chain in later frames repeatOnFrames :: [Int] -> HeldMod -> ChainEffect --repeatOnFrames is hm f it cr w = f it cr w -repeatOnFrames is hm f ams it cr w = - f ams it cr $ +repeatOnFrames is hm f it cr w = + f it cr $ w - & cWorld . lWorld . delayedEvents .++~ (is <&> (,WdWdFromItCrixWdWd (it & itUse . heldMods .~ hm) (_crID cr) ItCrWdItemEffect)) + & cWorld . lWorld . delayedEvents .++~ (is <&> (,WdWdFromItCrixWdWd (it & ldtValue . itUse . heldMods .~ hm) (_crID cr) ItCrWdItemEffect)) -- where -- f' = fromMaybe w' $ do @@ -660,42 +668,47 @@ repeatOnFrames is hm f ams it cr w = -- return $ f it cr' w' duplicateLoaded :: ChainEffect -duplicateLoaded eff ams it cr w = foldr f w (take numbul [1::Int .. ]) - where - f _ = eff ams it cr - numbul = fromMaybe 0 $ do - i <- ams ^? ix 0 . itLocation . ipInvID - cr ^? crInv . ix i . itUse . amagLoadStatus . iaLoaded +duplicateLoaded eff it cr w = error "duplicateLoaded" +--duplicateLoaded :: ChainEffect +--duplicateLoaded eff ams it cr w = foldr f w (take numbul [1::Int .. ]) +-- where +-- f _ = eff ams it cr +-- numbul = fromMaybe 0 $ do +-- i <- ams ^? ix 0 . itLocation . ipInvID +-- cr ^? crInv . ix i . itUse . amagLoadStatus . iaLoaded duplicateNumBarrels :: Int -> ChainEffect -duplicateNumBarrels n eff ams itm cr w = foldr f w (take n $ itm ^?! itUse . heldAim . aimMuzzles) - where - f brl w' = - eff ams - itm - ( cr & crPos +~ rotateV (_crDir cr) (_mzPos brl + aimingWeaponZeroPos cr itm) - & crDir +~ (_mzRot brl + a) - ) - (w' & randGen .~ g) - where - inacc = _mzInaccuracy brl - (a,g) = randomR (-inacc,inacc) $ _randGen w' +duplicateNumBarrels n eff itm cr w = error "duplicateNumBarrels" +--duplicateNumBarrels :: Int -> ChainEffect +--duplicateNumBarrels n eff ams itm cr w = foldr f w (take n $ itm ^?! itUse . heldAim . aimMuzzles) +-- where +-- f brl w' = +-- eff ams +-- itm +-- ( cr & crPos +~ rotateV (_crDir cr) (_mzPos brl + aimingWeaponZeroPos cr itm) +-- & crDir +~ (_mzRot brl + a) +-- ) +-- (w' & randGen .~ g) +-- where +-- inacc = _mzInaccuracy brl +-- (a,g) = randomR (-inacc,inacc) $ _randGen w' duplicateLoadedBarrels :: ChainEffect -duplicateLoadedBarrels eff ams itm cr = duplicateNumBarrels numbul eff ams itm cr - where - numbul :: Int - numbul = fromMaybe 0 $ do - i <- ams ^? ix 0 . itLocation . ipInvID - cr ^? crInv . ix i . itUse . amagLoadStatus . iaLoaded +duplicateLoadedBarrels eff itm cr = error "duplicateLoadedBarrels" +-- = duplicateNumBarrels numbul eff ams itm cr +-- where +-- numbul :: Int +-- numbul = fromMaybe 0 $ do +-- i <- ams ^? ix 0 . itLocation . ipInvID +-- cr ^? crInv . ix i . itUse . amagLoadStatus . iaLoaded duplicateOffsetsFocus :: [Float] -> ChainEffect -duplicateOffsetsFocus xs eff ams item cr w = foldr f w poss +duplicateOffsetsFocus xs eff item cr w = foldr f w poss where poss :: [V2 Float] poss = map (rotateV (_crDir cr) . V2 0) xs f pos = - eff ams item $ + eff item $ cr & crPos %~ (+.+ pos) & crDir .~ thedir pos @@ -709,12 +722,12 @@ duplicateOffsetsFocus xs eff ams item cr w = foldr f w poss thedir pos = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- (_crPos cr +.+ pos)) duplicateItem :: (Item -> [Item]) -> ChainEffect -duplicateItem fit eff ams itm cr w = foldr f w (fit itm) +duplicateItem fit eff itm cr w = foldr f w (ldtValue fit itm) where - f itm' = eff ams itm' cr + f itm' = eff itm' cr duplicateOffsetsV2 :: [Point2] -> ChainEffect -duplicateOffsetsV2 xs eff ams item cr w = foldr f w poss +duplicateOffsetsV2 xs eff item cr w = foldr f w poss where poss = map (rotateV (_crDir cr)) xs - f pos = eff ams item (cr & crPos +.+.~ pos) + f pos = eff item (cr & crPos +.+.~ pos) diff --git a/src/Dodge/WorldEffect.hs b/src/Dodge/WorldEffect.hs index bf82d25a2..5616e674c 100644 --- a/src/Dodge/WorldEffect.hs +++ b/src/Dodge/WorldEffect.hs @@ -5,6 +5,9 @@ module Dodge.WorldEffect ( lineOutputTerminal, ) where +import Dodge.Item.Grammar +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Data.Foldable import qualified Data.Map.Strict as M import Data.Maybe @@ -34,13 +37,15 @@ doWdWd we = case we of WdWdNegateTrig trid -> cWorld . lWorld . triggers . ix trid %~ not WdWdFromItixCrixWdWd itid crid f -> \w -> fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid - it <- getItem itid w + --it <- getItem itid w + itRef <- cr ^? crManipulation . manObject . inInventory . ispItem + it <- invTrees (_crInv cr) ^? ix itRef return $ doItCrWdWd f it cr w WdWdFromItCrixWdWd it crid f -> \w -> fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid return $ doItCrWdWd f it cr w -doItCrWdWd :: ItCrWdWd -> Item -> Creature -> World -> World +doItCrWdWd :: ItCrWdWd -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World doItCrWdWd icww = case icww of ItCrWdId -> \_ _ -> id ItCrWdItemEffect -> flip itemEffect diff --git a/tags b/tags index be48b29c3..67d69d255 100644 --- a/tags +++ b/tags @@ -72,14 +72,14 @@ Ambush src/Dodge/Data/ActionPlan.hs 178;" C Ammo src/Dodge/Data/Ammo.hs 4;" m Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 6;" m Ammo src/Dodge/Item/Ammo.hs 1;" m -AmmoCI src/Dodge/Data/ComposedItem.hs 20;" C +AmmoCI src/Dodge/Data/ComposedItem.hs 21;" C AmmoCheckMod src/Dodge/Data/Item/HeldUse.hs 82;" C AmmoHammerTimeUseOneMod src/Dodge/Data/Item/HeldUse.hs 84;" C AmmoInLink src/Dodge/Data/ComposedItem.hs 14;" C AmmoMagType src/Dodge/Data/Item/Combine.hs 109;" t AmmoMagUse src/Dodge/Data/Item/Use.hs 58;" C AmmoModLink src/Dodge/Data/ComposedItem.hs 15;" C -AmmoModifierCI src/Dodge/Data/ComposedItem.hs 19;" C +AmmoModifierCI src/Dodge/Data/ComposedItem.hs 20;" C AmmoParams src/Dodge/Data/Item/Use.hs 84;" t AmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 1;" m AmmoPosition src/Dodge/Item/AmmoPosition.hs 8;" t @@ -383,7 +383,7 @@ Carriage src/Dodge/Data/Creature/Stance.hs 20;" t Carte src/Dodge/Render/HUD/Carte.hs 1;" m ChainAnos src/Dodge/Layout/Tree/Annotate.hs 28;" C ChainEffect src/Dodge/ChainEffect.hs 4;" t -ChainEffect src/Dodge/Item/Weapon/TriggerType.hs 81;" t +ChainEffect src/Dodge/Item/Weapon/TriggerType.hs 83;" t ChainEffect src/Dodge/ChainEffect.hs 1;" m ChainUpdates src/Dodge/Creature/ChainUpdates.hs 1;" m ChangePosture src/Dodge/Data/ActionPlan.hs 42;" C @@ -456,7 +456,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 13;" t -ComposedItem src/Dodge/Data/ComposedItem.hs 17;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 18;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m ComposedItemStructure src/Dodge/Item/Grammar.hs 17;" t Composite src/Picture/Composite.hs 1;" m @@ -2732,7 +2732,7 @@ TwoHandUnder src/Dodge/Data/Item/Use.hs 126;" C Type src/Dodge/Data/Damage/Type.hs 6;" m Typical src/Shape/Data.hs 36;" C UPtLayer src/Dodge/Picture/Layer/Data.hs 16;" C -UncomposableCI src/Dodge/Data/ComposedItem.hs 21;" C +UncomposableCI src/Dodge/Data/ComposedItem.hs 22;" C Uncursed src/Dodge/Data/Item/CurseStatus.hs 12;" C Uncursed src/Dodge/Item/Data.hs 8;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C @@ -2894,8 +2894,8 @@ WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 31;" C WdYouPos src/Dodge/Data/WorldEffect.hs 39;" C Weapon src/Dodge/Default/Weapon.hs 1;" m Weapon src/Dodge/Item/Weapon.hs 2;" m -WeaponCI src/Dodge/Data/ComposedItem.hs 17;" C -WeaponScopeCI src/Dodge/Data/ComposedItem.hs 18;" C +WeaponCI src/Dodge/Data/ComposedItem.hs 18;" C +WeaponScopeCI src/Dodge/Data/ComposedItem.hs 19;" C Weapons src/Dodge/Item/Held/Weapons.hs 1;" m West src/Dodge/Data/CardinalPoint.hs 7;" C WinScale src/Dodge/Base/WinScale.hs 1;" m @@ -4386,7 +4386,7 @@ advanceScrollAmount src/Dodge/Update.hs 297;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Action/Movement.hs 56;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -afterRecoil src/Dodge/Item/Weapon/TriggerType.hs 290;" f +afterRecoil src/Dodge/Item/Weapon/TriggerType.hs 293;" f aimDelaySweep src/Dodge/Render/ShapePicture.hs 44;" f aimStanceInfo src/Dodge/Item/Info.hs 230;" f aimTurn src/Dodge/Creature/YourControl.hs 188;" f @@ -4405,7 +4405,7 @@ airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 52;" f allVisibleWalls src/Dodge/Base/Collide.hs 131;" f alongSegBy src/Geometry.hs 43;" f -ammoCheckI src/Dodge/Item/Weapon/TriggerType.hs 143;" f +ammoCheckI src/Dodge/Item/Weapon/TriggerType.hs 144;" f ammoComposedItem src/Dodge/Item/Grammar.hs 44;" f ammoTweakStrings src/Dodge/Render/HUD.hs 284;" f amr src/Dodge/Item/Held/Rod.hs 50;" f @@ -4428,7 +4428,7 @@ applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f applyEventIO src/Loop.hs 89;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f -applyMagnetsToBul src/Dodge/Bullet.hs 44;" f +applyMagnetsToBul src/Dodge/Bullet.hs 46;" f applyModules src/Dodge/Combine/Module.hs 53;" f applyNoDamage src/Dodge/Creature/Damage.hs 11;" f applyPastDamages src/Dodge/Creature/State.hs 169;" f @@ -4520,7 +4520,7 @@ bangRod src/Dodge/Item/Weapon/BulletGun/Rod.hs 18;" f bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 478;" f bangStick src/Dodge/Item/Held/Stick.hs 16;" f bangStick src/Dodge/Item/Weapon/BulletGun/Stick.hs 17;" f -bangStickSoundChoice src/Dodge/HeldUse.hs 488;" f +bangStickSoundChoice src/Dodge/HeldUse.hs 501;" f bangStickSoundChoice src/Dodge/HeldUse/BulletWeapon.hs 226;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f @@ -4569,7 +4569,7 @@ bezierGun src/Dodge/Item/Weapon/Bezier.hs 24;" f bfsNodePoints src/Dodge/Path.hs 58;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 216;" f bindFBO src/Render.hs 244;" f -blCheck src/Dodge/Item/Weapon/TriggerType.hs 380;" f +blCheck src/Dodge/Item/Weapon/TriggerType.hs 388;" f black src/Color.hs 27;" f blank src/Picture/Base.hs 59;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 14;" f @@ -4609,7 +4609,7 @@ boosterGun src/Dodge/Item/Weapon/Booster.hs 111;" f bossKeyItems src/Dodge/LockAndKey.hs 11;" f bossRoom src/Dodge/Room/Boss.hs 59;" f bounceBall src/Dodge/Base/Collide.hs 77;" f -bounceDir src/Dodge/Bullet.hs 86;" f +bounceDir src/Dodge/Bullet.hs 92;" f bounceModule src/Dodge/Item/Craftable.hs 29;" f bouncePoint src/Dodge/Base/Collide.hs 87;" f boundPoints src/Bound.hs 10;" f @@ -4640,7 +4640,7 @@ bulletBeltPack src/Dodge/Item/Equipment.hs 74;" f bulletBodyCraft src/Dodge/Item/Craftable.hs 24;" f bulletCombinations src/Dodge/Combine/Graph.hs 35;" f bulletMagazines src/Dodge/Combine/Combinations.hs 239;" f -bulletSpawn src/Dodge/Bullet.hs 91;" f +bulletSpawn src/Dodge/Bullet.hs 97;" f bulletSynthesizer src/Dodge/Item/Ammo.hs 76;" f bulletTypes src/Dodge/TweakBullet.hs 26;" f bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f @@ -4654,7 +4654,7 @@ canAttachTargeting src/Dodge/Item/Display.hs 19;" f canHeldScrollAttach src/Dodge/HeldScroll.hs 75;" f canSee src/Dodge/Base/Collide.hs 228;" f canSeeIndirect src/Dodge/Base/Collide.hs 235;" f -caneStickSoundChoice src/Dodge/HeldUse.hs 483;" f +caneStickSoundChoice src/Dodge/HeldUse.hs 496;" f cardList src/Dodge/Base/CardinalPoint.hs 6;" f cardVec src/Dodge/Base/CardinalPoint.hs 9;" f cardinalVectors src/Dodge/FloorItem.hs 39;" f @@ -4807,8 +4807,8 @@ composeTree src/Dodge/Tree/Compose.hs 46;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 458;" f conEffects src/Dodge/Concurrent.hs 17;" f concBall src/Dodge/WorldEvent/SpawnParticle.hs 27;" f -coneRandItemParams src/Dodge/HeldUse.hs 497;" f -coneRandItemUpdate src/Dodge/HeldUse.hs 491;" f +coneRandItemParams src/Dodge/HeldUse.hs 510;" f +coneRandItemUpdate src/Dodge/HeldUse.hs 504;" f connectRoom src/Dodge/Layout/Tree/Either.hs 48;" f connectTrunk src/Dodge/Layout/Tree/Either.hs 54;" f connectionBlurb src/Dodge/Terminal.hs 100;" f @@ -4966,7 +4966,7 @@ damageSensor src/Dodge/Machine/Sensor.hs 16;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 15;" f damageSensor src/Dodge/Placements/Sensor.hs 15;" f damageStone src/Dodge/Material/Damage.hs 20;" f -damageThingHit src/Dodge/Bullet.hs 162;" f +damageThingHit src/Dodge/Bullet.hs 168;" f damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 45;" f damageUsing src/Dodge/Machine/Update.hs 151;" f damageWall src/Dodge/Wall/Damage.hs 15;" f @@ -5125,7 +5125,7 @@ deleteWallFromZones src/Dodge/Wall/Zone.hs 23;" f deleteWallID src/Dodge/Wall/Delete.hs 13;" f deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f denormalEdges src/Polyhedra.hs 135;" f -destroyAt src/Dodge/Bullet.hs 187;" f +destroyAt src/Dodge/Bullet.hs 193;" f destroyAt src/Dodge/WorldEvent/HitEffect.hs 24;" f destroyBlock src/Dodge/Block.hs 51;" f destroyDoor src/Dodge/Block.hs 79;" f @@ -5393,12 +5393,12 @@ dualBeam src/Dodge/Item/Held/BatteryGuns.hs 136;" f dualBeamPic src/Dodge/Item/Draw/SPic.hs 472;" f dualRayAt src/Dodge/Item/Weapon/BatteryGuns.hs 144;" f dummyMenuOption src/Dodge/Menu/Option.hs 81;" f -duplicateItem src/Dodge/Item/Weapon/TriggerType.hs 711;" f -duplicateLoaded src/Dodge/Item/Weapon/TriggerType.hs 662;" f -duplicateLoadedBarrels src/Dodge/Item/Weapon/TriggerType.hs 684;" f -duplicateNumBarrels src/Dodge/Item/Weapon/TriggerType.hs 670;" f -duplicateOffsetsFocus src/Dodge/Item/Weapon/TriggerType.hs 692;" f -duplicateOffsetsV2 src/Dodge/Item/Weapon/TriggerType.hs 716;" f +duplicateItem src/Dodge/Item/Weapon/TriggerType.hs 724;" f +duplicateLoaded src/Dodge/Item/Weapon/TriggerType.hs 670;" f +duplicateLoadedBarrels src/Dodge/Item/Weapon/TriggerType.hs 696;" f +duplicateNumBarrels src/Dodge/Item/Weapon/TriggerType.hs 680;" f +duplicateOffsetsFocus src/Dodge/Item/Weapon/TriggerType.hs 705;" f +duplicateOffsetsV2 src/Dodge/Item/Weapon/TriggerType.hs 729;" f ebFlicker src/Dodge/EnergyBall.hs 94;" f edgeFormatting src/Dodge/Combine/Graph.hs 119;" f edgeToPic src/Dodge/Debug/Picture.hs 392;" f @@ -5447,7 +5447,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 expandTreeBy src/Dodge/Layout/Tree/Either.hs 16;" f -expireAndDamage src/Dodge/Bullet.hs 169;" f +expireAndDamage src/Dodge/Bullet.hs 175;" f expireAndDamage src/Dodge/Particle/HitEffect/ExpireAndDamage.hs 11;" f expireAndDamageFL src/Dodge/Flame.hs 48;" f explodeRemoteRocket src/Dodge/Item/Weapon/Launcher.hs 10;" f @@ -5484,7 +5484,7 @@ findReverseEdgeList src/Polyhedra.hs 56;" f findWallFreeDropPoint src/Dodge/FloorItem.hs 47;" f findWallsInPolygon src/Dodge/LevelGen/StaticWalls/Deprecated.hs 78;" f fireLoudS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 504;" f -fireRemoteShell src/Dodge/HeldUse.hs 457;" f +fireRemoteShell src/Dodge/HeldUse.hs 468;" f fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 332;" f fireShell src/Dodge/Projectile/Create.hs 35;" f fireSound src/Dodge/SoundLogic/Synonyms.hs 4;" f @@ -5597,8 +5597,7 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAmmoMagazine src/Dodge/HeldUse.hs 435;" f -getAmmoMags src/Dodge/Creature/Impulse/UseItem.hs 34;" f +getAmmoMagazine src/Dodge/HeldUse.hs 442;" f getArguments src/Dodge/Update/Scroll.hs 147;" f getArguments' src/Dodge/Update/Scroll.hs 135;" f getAvailableListLines src/Dodge/SelectionList.hs 11;" f @@ -5677,7 +5676,7 @@ hackOutline src/Dodge/Render/Outline.hs 5;" f halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 37;" f -hammerCheckL src/Dodge/Item/Weapon/TriggerType.hs 388;" f +hammerCheckL src/Dodge/Item/Weapon/TriggerType.hs 396;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 42;" f handleKeyboardEvent src/Dodge/Event/Input.hs 22;" f @@ -5702,7 +5701,7 @@ hatCombinations src/Dodge/Combine/Combinations.hs 33;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 118;" f headLampShape src/Dodge/Item/Draw/SPic.hs 495;" f -headMap src/Dodge/DoubleTree.hs 58;" f +headMap src/Dodge/DoubleTree.hs 61;" f heal src/Dodge/Item/Consumable.hs 17;" f heal25 src/Dodge/Item/Consumable.hs 14;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 354;" f @@ -5726,7 +5725,7 @@ highBar src/Dodge/Room/Foreground.hs 89;" f highDiagonalMesh src/Dodge/Room/Foreground.hs 35;" f highMesh src/Dodge/Room/Foreground.hs 25;" f hit1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 412;" f -hitEffFromBul src/Dodge/Bullet.hs 131;" f +hitEffFromBul src/Dodge/Bullet.hs 137;" f hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 382;" f hitSound src/Dodge/SoundLogic/Synonyms.hs 4;" f holdForm src/Dodge/Creature/Boid.hs 136;" f @@ -5838,6 +5837,7 @@ invSelectionItem' src/Dodge/Inventory/SelectionList.hs 17;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 232;" f invSize src/Dodge/Inventory/CheckSlots.hs 40;" f +invTrees src/Dodge/Item/Grammar.hs 107;" f inventoryExtra src/Dodge/Render/HUD.hs 186;" f inventoryExtraH src/Dodge/Render/HUD.hs 189;" f inventoryX src/Dodge/Creature.hs 115;" f @@ -5878,7 +5878,7 @@ itBounds src/Dodge/Item/Module.hs 22;" f itSlotsTaken src/Dodge/Inventory/ItemSpace.hs 9;" f itSlotsTaken src/Dodge/Item/SlotsTaken.hs 9;" f itStackAmount src/Dodge/Item/Amount.hs 7;" f -itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 156;" f +itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 157;" f itemBaseName src/Dodge/Item/Display.hs 61;" f itemBlips src/Dodge/Item/Weapon/UseEffect.hs 38;" f itemBlips src/Dodge/RadarSweep.hs 74;" f @@ -5887,7 +5887,7 @@ itemCombinationsEdges src/Dodge/Combine/Graph.hs 55;" f itemDisplay src/Dodge/Item/Display.hs 33;" f itemDisplayPad src/Dodge/Item/Display.hs 45;" f itemEffect src/Dodge/Creature/Action/UseItem.hs 28;" f -itemEffect src/Dodge/Creature/Impulse/UseItem.hs 39;" f +itemEffect src/Dodge/Creature/Impulse/UseItem.hs 36;" f itemEquipPict src/Dodge/Item/Draw.hs 17;" f itemFromAmmoMag src/Dodge/Item.hs 29;" f itemFromAttachType src/Dodge/Item.hs 38;" f @@ -5967,8 +5967,8 @@ lasTunnelRunPast src/Dodge/Room/LasTurret.hs 165;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f lasTurret src/Dodge/Placements/Turret.hs 29;" f lasWide src/Dodge/Item/Held/BatteryGuns.hs 97;" f -lasWideRate src/Dodge/HeldUse.hs 353;" f -lastMap src/Dodge/DoubleTree.hs 62;" f +lasWideRate src/Dodge/HeldUse.hs 357;" f +lastMap src/Dodge/DoubleTree.hs 65;" f latchkey src/Dodge/Item/Held/Utility.hs 23;" f latchkey src/Dodge/Item/PassKey.hs 14;" f launcher src/Dodge/Item/Held/Launcher.hs 10;" f @@ -5979,9 +5979,10 @@ launcherX src/Dodge/Item/Held/Launcher.hs 39;" f layerNum src/Picture/Data.hs 31;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 90;" f -ldtIL src/Dodge/DoubleTree.hs 37;" f +ldtIL src/Dodge/DoubleTree.hs 40;" f ldtToDT src/Dodge/DoubleTree.hs 6;" f -ldtToIndentList src/Dodge/DoubleTree.hs 34;" f +ldtToIM src/Dodge/DoubleTree.hs 34;" f +ldtToIndentList src/Dodge/DoubleTree.hs 37;" f left src/DoubleStack.hs 16;" f leftInfo src/Dodge/Item/Info.hs 110;" f leftIsParentCombine src/Dodge/Item/Grammar.hs 59;" f @@ -6043,7 +6044,7 @@ loadingScreen src/Dodge/Menu/Loading.hs 7;" f loadme src/Dodge/Debug/Terminal.hs 135;" f lockAndKeyRoomList src/Dodge/Room/LockAndKeyList.hs 11;" f lockInv src/Dodge/Inventory/Lock.hs 6;" f -lockInvFor src/Dodge/Item/Weapon/TriggerType.hs 89;" f +lockInvFor src/Dodge/Item/Weapon/TriggerType.hs 90;" f lockRoomKeyItems src/Dodge/LockAndKey.hs 25;" f lockRoomMultiItems src/Dodge/LockAndKey.hs 14;" f lockedStart src/Dodge/Room/RunPast.hs 34;" f @@ -6104,7 +6105,7 @@ makeDefaultCorpse src/Dodge/Corpse/Make.hs 14;" f makeDoorDebris src/Dodge/Block/Debris.hs 18;" f makeEnumOption src/Dodge/Menu/OptionType.hs 13;" f makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 79;" f -makeFlak src/Dodge/Bullet.hs 117;" f +makeFlak src/Dodge/Bullet.hs 123;" f makeFlame src/Dodge/Flame.hs 131;" f makeFlame src/Dodge/Particle/Flame.hs 9;" f makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 62;" f @@ -6112,7 +6113,7 @@ makeFlamelet src/Dodge/EnergyBall.hs 16;" f makeFlamerSmokeAt src/Dodge/WorldEvent/Cloud.hs 68;" f makeFlashBall src/Dodge/EnergyBall.hs 74;" f makeFootstepSound src/Dodge/Creature/State/WalkCycle.hs 32;" f -makeFragBullets src/Dodge/Bullet.hs 102;" f +makeFragBullets src/Dodge/Bullet.hs 108;" f makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 80;" f makeGrid src/Grid.hs 46;" f makeIntInterval src/Dodge/Zoning/Base.hs 33;" f @@ -6181,10 +6182,10 @@ mcProximitySensorUpdate src/Dodge/Machine/Update.hs 104;" f mcSPic src/Dodge/Render/ShapePicture.hs 169;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 69;" f mcSensorUpdate src/Dodge/Machine/Update.hs 99;" f -mcShootLaser src/Dodge/HeldUse.hs 505;" f +mcShootLaser src/Dodge/HeldUse.hs 518;" f mcTriggerVal src/Dodge/Machine/Update.hs 75;" f mcTypeUpdate src/Dodge/Machine/Update.hs 24;" f -mcUseHeld src/Dodge/HeldUse.hs 356;" f +mcUseHeld src/Dodge/HeldUse.hs 360;" f mcUseItem src/Dodge/Machine/Update.hs 61;" f medkit src/Dodge/Item/Consumable.hs 8;" f meleeHeadingMove src/Dodge/Creature/Boid.hs 281;" f @@ -6258,7 +6259,7 @@ mntLight src/Dodge/Placement/Instance/LightSource.hs 154;" f mntLight src/Dodge/Placements/LightSource.hs 89;" f mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 159;" f mntLightLnkCond src/Dodge/Placements/LightSource.hs 94;" f -modClock src/Dodge/Item/Weapon/TriggerType.hs 447;" f +modClock src/Dodge/Item/Weapon/TriggerType.hs 455;" f modTo src/Geometry/Zone.hs 10;" f modifierKey src/Dodge/Config/KeyConfig.hs 34;" f moduleAttachPosition src/Dodge/Item/Module.hs 6;" f @@ -6283,7 +6284,7 @@ mouseCursorType src/Dodge/Render/Picture.hs 68;" f mouseOverSelectionList src/Dodge/Update/Input/ScreenLayer.hs 73;" f mousePlus src/Dodge/Render/Picture.hs 80;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f -moveBullet src/Dodge/Bullet.hs 179;" f +moveBullet src/Dodge/Bullet.hs 185;" f moveCombineSel src/Dodge/Update/Scroll.hs 55;" f moveDoorToward src/Dodge/LevelGen/MoveDoor.hs 22;" f moveDownKey src/Dodge/Config/KeyConfig.hs 19;" f @@ -6293,7 +6294,7 @@ moveLSThen src/Dodge/Placement/Instance/LightSource.hs 31;" f moveLaser src/Dodge/Item/Weapon/Laser.hs 48;" f moveLeftKey src/Dodge/Config/KeyConfig.hs 20;" f moveOldHotkey src/Dodge/Hotkey.hs 32;" f -movePenBullet src/Dodge/Bullet.hs 197;" f +movePenBullet src/Dodge/Bullet.hs 203;" f moveRightKey src/Dodge/Config/KeyConfig.hs 21;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveSelectionMapSelection src/SelectionIntMap.hs 47;" f @@ -6321,7 +6322,7 @@ multiLookupTrie src/SimpleTrie.hs 28;" f multiLookupTrieI src/SimpleTrie.hs 36;" f muout src/Dodge/RoomLink.hs 129;" f muzFlareAt src/Dodge/WorldEvent/Flash.hs 26;" f -mvBullet src/Dodge/Bullet.hs 31;" f +mvBullet src/Dodge/Bullet.hs 33;" f mvBullet src/Dodge/Particle/Bullet/Update.hs 17;" f mvBulletSlow src/Dodge/Particle/Bullet/Update.hs 31;" f mvButton src/Dodge/Placement/PlaceSpot.hs 172;" f @@ -6421,9 +6422,9 @@ overColObj src/Shape.hs 269;" f overColSH src/Shape.hs 237;" f overLnkPosDir src/Dodge/RoomLink.hs 100;" f overLnkType src/Dodge/RoomLink.hs 87;" f -overNozzle src/Dodge/HeldUse.hs 416;" f -overNozzles src/Dodge/HeldUse.hs 394;" f -overNozzles' src/Dodge/HeldUse.hs 403;" f +overNozzle src/Dodge/HeldUse.hs 424;" f +overNozzles src/Dodge/HeldUse.hs 402;" f +overNozzles' src/Dodge/HeldUse.hs 410;" f overPos src/Picture/Base.hs 303;" f overPosObj src/Shape.hs 273;" f overPosSH src/Shape.hs 257;" f @@ -6459,7 +6460,7 @@ pauseSound src/Dodge/SoundLogic.hs 41;" f pauseTime src/Dodge/Update.hs 171;" f peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f pedestalRoom src/Dodge/Room/Containing.hs 49;" f -penThing src/Dodge/Bullet.hs 210;" f +penThing src/Dodge/Bullet.hs 216;" f penWalls src/Dodge/Particle/HitEffect.hs 15;" f penWalls src/Dodge/WorldEvent/HitEffect.hs 38;" f penetrate src/Dodge/Particle/HitEffect/Penetrate.hs 12;" f @@ -6639,8 +6640,8 @@ prependTwo src/Geometry.hs 165;" f pressedMBEffects src/Dodge/Update/UsingInput.hs 27;" f pressedMBEffectsNoInventory src/Dodge/Update/UsingInput.hs 40;" f pressedMBEffectsTopInventory src/Dodge/Creature/YourControl.hs 206;" f -prettyDT src/Dodge/DoubleTree.hs 67;" f -prettyLDT src/Dodge/DoubleTree.hs 71;" f +prettyDT src/Dodge/DoubleTree.hs 70;" f +prettyLDT src/Dodge/DoubleTree.hs 74;" f primeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 422;" f printColumnTitles src/Dodge/Tree/Shift.hs 142;" f printColumns src/Dodge/Tree/Shift.hs 132;" f @@ -6791,7 +6792,7 @@ randsOnCirc src/RandomHelp.hs 118;" f randsSpread src/Dodge/RandomHelp.hs 100;" f randsSpread src/RandomHelp.hs 111;" f ratIntersectLineLine src/Geometry/Intersect.hs 195;" f -rateIncAB src/Dodge/Item/Weapon/TriggerType.hs 166;" f +rateIncAB src/Dodge/Item/Weapon/TriggerType.hs 167;" f readSaveSlot src/Dodge/Save.hs 45;" f rectNESW src/Geometry/Polygon.hs 13;" f rectNSWE src/Geometry/Polygon.hs 19;" f @@ -6841,8 +6842,8 @@ renderLayer src/Render.hs 233;" f renderLightingNoShadows src/Render.hs 48;" f renderListAt src/Dodge/Render/List.hs 160;" f renderShadows src/Render.hs 117;" f -repeatOnFrames src/Dodge/Item/Weapon/TriggerType.hs 650;" f -repeatTransformed src/Dodge/Item/Weapon/TriggerType.hs 94;" f +repeatOnFrames src/Dodge/Item/Weapon/TriggerType.hs 658;" f +repeatTransformed src/Dodge/Item/Weapon/TriggerType.hs 95;" f repeater src/Dodge/Item/Held/Cane.hs 72;" f repeater src/Dodge/Item/Weapon/BulletGun/Cane.hs 89;" f replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 160;" f @@ -7044,7 +7045,7 @@ setDepth src/Picture/Base.hs 128;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f setFallback src/Dodge/PlacementSpot.hs 127;" f setFirstPosSelectionSections src/Dodge/SelectionSections.hs 23;" f -setFromToDams src/Dodge/Bullet.hs 157;" f +setFromToDams src/Dodge/Bullet.hs 163;" f setHotkey src/Dodge/Hotkey.hs 38;" f setInLinks src/Dodge/RoomLink.hs 51;" f setInLinksByType src/Dodge/RoomLink.hs 54;" f @@ -7139,7 +7140,7 @@ shootBangCone src/Dodge/HeldUse/BulletWeapon.hs 98;" f shootBangRod src/Dodge/HeldUse/BulletWeapon.hs 185;" f shootBangstick src/Dodge/HeldUse/BulletWeapon.hs 9;" f shootBezier src/Dodge/Item/Weapon/Bezier.hs 51;" f -shootBullet src/Dodge/Bullet.hs 59;" f +shootBullet src/Dodge/Bullet.hs 61;" f shootBurstRifle src/Dodge/HeldUse/BulletWeapon.hs 164;" f shootBurstRifleRepeat src/Dodge/HeldUse/BulletWeapon.hs 176;" f shootDualLaser src/Dodge/Item/Weapon/BatteryGuns.hs 103;" f @@ -7148,7 +7149,7 @@ shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootFlameSpitter src/Dodge/HeldUse/SprayWeapon.hs 9;" f shootFlameSpitterRepeat src/Dodge/HeldUse/SprayWeapon.hs 19;" f shootFlameThrower src/Dodge/HeldUse/SprayWeapon.hs 26;" f -shootL src/Dodge/Item/Weapon/TriggerType.hs 402;" f +shootL src/Dodge/Item/Weapon/TriggerType.hs 410;" f shootLaser src/Dodge/Item/Weapon/BatteryGuns.hs 77;" f shootMachineGun src/Dodge/HeldUse/BulletWeapon.hs 218;" f shootMachinePistol src/Dodge/HeldUse/BulletWeapon.hs 62;" f @@ -7160,7 +7161,7 @@ shootRevolverXRepeat src/Dodge/HeldUse/BulletWeapon.hs 49;" f shootRifle src/Dodge/HeldUse/BulletWeapon.hs 140;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootSmgMod src/Dodge/HeldUse/BulletWeapon.hs 86;" f -shootTeslaArc src/Dodge/HeldUse.hs 514;" f +shootTeslaArc src/Dodge/HeldUse.hs 527;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f shootVolleyGun src/Dodge/HeldUse/BulletWeapon.hs 128;" f shootersRoom src/Dodge/Room/Room.hs 317;" f @@ -7197,7 +7198,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/Dodge/RandomHelp.hs 50;" f shuffleTail src/RandomHelp.hs 55;" f -sideEffectOnFrame src/Dodge/Item/Weapon/TriggerType.hs 630;" f +sideEffectOnFrame src/Dodge/Item/Weapon/TriggerType.hs 638;" f sideEffectUpdatePreload src/Dodge/PreloadData.hs 7;" f sigmoid src/Dodge/Base.hs 129;" f simpleCrSprings src/Dodge/Update.hs 639;" f @@ -7498,7 +7499,7 @@ toV3 src/Geometry/Data.hs 38;" f toV4 src/Geometry/Data.hs 40;" f toggleCombineInv src/Dodge/DisplayInventory.hs 32;" f toggleCommand src/Dodge/Terminal.hs 194;" f -toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 59;" f +toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 57;" f toggleJust src/MaybeHelp.hs 41;" f toggleMap src/Dodge/Update/Input/InGame.hs 237;" f toggleMapKey src/Dodge/Config/KeyConfig.hs 25;" f @@ -7512,10 +7513,10 @@ topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismIndices src/Shader/Poke.hs 402;" f torch src/Dodge/Item/Held/Utility.hs 26;" f torchShape src/Dodge/Item/Draw/SPic.hs 204;" f -torqueBefore src/Dodge/Item/Weapon/TriggerType.hs 560;" f -torqueBeforeAtLeast src/Dodge/Item/Weapon/TriggerType.hs 583;" f +torqueBefore src/Dodge/Item/Weapon/TriggerType.hs 568;" f +torqueBeforeAtLeast src/Dodge/Item/Weapon/TriggerType.hs 591;" f torqueCr src/Dodge/WorldEffect.hs 64;" f -torqueSideEffect src/Dodge/Item/Weapon/TriggerType.hs 638;" f +torqueSideEffect src/Dodge/Item/Weapon/TriggerType.hs 646;" f torso src/Dodge/Creature/Picture.hs 132;" f tractCr src/Dodge/TractorBeam/Update.hs 27;" f tractFlIt src/Dodge/TractorBeam/Update.hs 22;" f @@ -7579,7 +7580,7 @@ treePost src/TreeHelp.hs 45;" f triLootRoom src/Dodge/Room/Treasure.hs 22;" f triangulate src/Shader/Poke/Triangulate.hs 5;" f triangulateIndices src/Shader/Poke/Triangulate.hs 9;" f -trigDoAlso src/Dodge/Item/Weapon/TriggerType.hs 101;" f +trigDoAlso src/Dodge/Item/Weapon/TriggerType.hs 102;" f triggerDoorRoom src/Dodge/Room/Door.hs 30;" f triggerSwitch src/Dodge/Placement/Instance/Button.hs 47;" f triggerSwitch src/Dodge/Placements/Button.hs 35;" f @@ -7658,8 +7659,8 @@ updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBeams src/Dodge/Update.hs 457;" f updateBounds src/Dodge/Update/Camera.hs 264;" f -updateBulVel src/Dodge/Bullet.hs 48;" f -updateBullet src/Dodge/Bullet.hs 26;" f +updateBulVel src/Dodge/Bullet.hs 50;" f +updateBullet src/Dodge/Bullet.hs 28;" f updateBullets src/Dodge/Update.hs 425;" f updateCamera src/Dodge/Update/Camera.hs 32;" f updateCloseObjects src/Dodge/Inventory.hs 166;" f @@ -7785,37 +7786,36 @@ upperPrismPolySU src/Shape.hs 112;" f upperPrismPolyTS src/Shape.hs 118;" f upperRounded src/Shape.hs 181;" f upsProjectile src/Dodge/Projectile/Update.hs 51;" f -useAllAmmo src/Dodge/Item/Weapon/TriggerType.hs 341;" f -useAmmoAmount src/Dodge/Item/Weapon/TriggerType.hs 358;" f +useAllAmmo src/Dodge/Item/Weapon/TriggerType.hs 344;" f +useAmmoAmount src/Dodge/Item/Weapon/TriggerType.hs 362;" f useAmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 17;" f -useAmmoUpTo src/Dodge/Item/Weapon/TriggerType.hs 349;" f useC src/Dodge/Cuse.hs 6;" f useE src/Dodge/Euse.hs 24;" f useEquipment src/Dodge/Creature/State.hs 218;" f -useForceFieldGun src/Dodge/HeldUse.hs 527;" f -useGasParams src/Dodge/HeldUse.hs 444;" f -useHeld src/Dodge/HeldUse.hs 361;" f +useForceFieldGun src/Dodge/HeldUse.hs 540;" f +useGasParams src/Dodge/HeldUse.hs 451;" f +useHeld src/Dodge/HeldUse.hs 365;" f useHotKey src/Dodge/Creature/YourControl.hs 49;" f useItem src/Dodge/Creature/Action/UseItem.hs 14;" f -useItemHotkey src/Dodge/Creature/Impulse/UseItem.hs 122;" f -useItemLeftClick src/Dodge/Creature/Impulse/UseItem.hs 102;" f -useItemRightClick src/Dodge/Creature/Impulse/UseItem.hs 22;" f +useItemHotkey src/Dodge/Creature/Impulse/UseItem.hs 120;" f +useItemLeftClick src/Dodge/Creature/Impulse/UseItem.hs 100;" f +useItemRightClick src/Dodge/Creature/Impulse/UseItem.hs 24;" f useL src/Dodge/Luse.hs 13;" f useLeftItem src/Dodge/Creature/Action/UseItem.hs 38;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f useMagShield src/Dodge/Euse.hs 69;" f -useMod src/Dodge/HeldUse.hs 28;" f +useMod src/Dodge/HeldUse.hs 30;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 7;" f -usePjCreation src/Dodge/HeldUse.hs 380;" f -usePjCreationX src/Dodge/HeldUse.hs 386;" f +usePjCreation src/Dodge/HeldUse.hs 384;" f +usePjCreationX src/Dodge/HeldUse.hs 393;" f useRewindGun src/Dodge/Luse.hs 41;" f useRoomPosCond src/Dodge/PlacementSpot.hs 178;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 181;" f useShrinkGun src/Dodge/Luse.hs 59;" f useStopWatch src/Dodge/Luse.hs 24;" f useTargetPos src/Dodge/Item/Weapon/Targeting.hs 9;" f -useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 369;" f +useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 377;" f useTimeScrollGun src/Dodge/Luse.hs 32;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f useUpdate src/Dodge/Creature/State.hs 210;" f @@ -7911,36 +7911,36 @@ windowxsize src/LoadConfig.hs 12;" f windowysize src/LoadConfig.hs 13;" f withAlpha src/Color.hs 10;" f withByteString src/Shader/Compile.hs 370;" f -withCrPos src/Dodge/Item/Weapon/TriggerType.hs 485;" f -withCrPosShift src/Dodge/Item/Weapon/TriggerType.hs 488;" f -withFlare src/Dodge/Item/Weapon/TriggerType.hs 452;" f -withItem src/Dodge/Item/Weapon/TriggerType.hs 425;" f -withItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 434;" f -withItemUpdateFirst src/Dodge/Item/Weapon/TriggerType.hs 429;" f -withMuzFlare src/Dodge/Item/Weapon/TriggerType.hs 464;" f -withOldDir src/Dodge/Item/Weapon/TriggerType.hs 502;" f -withPosDirWallCheck src/Dodge/Item/Weapon/TriggerType.hs 542;" f -withPositionOffset src/Dodge/Item/Weapon/TriggerType.hs 526;" f -withPositionWallCheck src/Dodge/Item/Weapon/TriggerType.hs 533;" f -withRandomDirI src/Dodge/Item/Weapon/TriggerType.hs 494;" f -withRandomItem src/Dodge/Item/Weapon/TriggerType.hs 521;" f -withRandomItemParams src/Dodge/Item/Weapon/TriggerType.hs 516;" f -withRandomItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 509;" f -withRandomOffset src/Dodge/Item/Weapon/TriggerType.hs 552;" f -withRecoil src/Dodge/Item/Weapon/TriggerType.hs 299;" f -withSidePushAfterI src/Dodge/Item/Weapon/TriggerType.hs 328;" f -withSidePushI src/Dodge/Item/Weapon/TriggerType.hs 309;" f -withSmoke src/Dodge/Item/Weapon/TriggerType.hs 114;" f -withSoundContinue src/Dodge/Item/Weapon/TriggerType.hs 252;" f -withSoundForI src/Dodge/Item/Weapon/TriggerType.hs 265;" f -withSoundForVol src/Dodge/Item/Weapon/TriggerType.hs 278;" f -withSoundItemChoiceStart src/Dodge/Item/Weapon/TriggerType.hs 223;" f -withSoundStart src/Dodge/Item/Weapon/TriggerType.hs 239;" f -withTempLight src/Dodge/Item/Weapon/TriggerType.hs 439;" f -withThickSmokeI src/Dodge/Item/Weapon/TriggerType.hs 132;" f -withThinSmokeI src/Dodge/Item/Weapon/TriggerType.hs 123;" f -withTorqueAfter src/Dodge/Item/Weapon/TriggerType.hs 609;" f -withWarmUp src/Dodge/Item/Weapon/TriggerType.hs 203;" f +withCrPos src/Dodge/Item/Weapon/TriggerType.hs 493;" f +withCrPosShift src/Dodge/Item/Weapon/TriggerType.hs 496;" f +withFlare src/Dodge/Item/Weapon/TriggerType.hs 460;" f +withItem src/Dodge/Item/Weapon/TriggerType.hs 433;" f +withItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 442;" f +withItemUpdateFirst src/Dodge/Item/Weapon/TriggerType.hs 437;" f +withMuzFlare src/Dodge/Item/Weapon/TriggerType.hs 472;" f +withOldDir src/Dodge/Item/Weapon/TriggerType.hs 510;" f +withPosDirWallCheck src/Dodge/Item/Weapon/TriggerType.hs 550;" f +withPositionOffset src/Dodge/Item/Weapon/TriggerType.hs 534;" f +withPositionWallCheck src/Dodge/Item/Weapon/TriggerType.hs 541;" f +withRandomDirI src/Dodge/Item/Weapon/TriggerType.hs 502;" f +withRandomItem src/Dodge/Item/Weapon/TriggerType.hs 529;" f +withRandomItemParams src/Dodge/Item/Weapon/TriggerType.hs 524;" f +withRandomItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 517;" f +withRandomOffset src/Dodge/Item/Weapon/TriggerType.hs 560;" f +withRecoil src/Dodge/Item/Weapon/TriggerType.hs 302;" f +withSidePushAfterI src/Dodge/Item/Weapon/TriggerType.hs 331;" f +withSidePushI src/Dodge/Item/Weapon/TriggerType.hs 312;" f +withSmoke src/Dodge/Item/Weapon/TriggerType.hs 115;" f +withSoundContinue src/Dodge/Item/Weapon/TriggerType.hs 255;" f +withSoundForI src/Dodge/Item/Weapon/TriggerType.hs 268;" f +withSoundForVol src/Dodge/Item/Weapon/TriggerType.hs 281;" f +withSoundItemChoiceStart src/Dodge/Item/Weapon/TriggerType.hs 226;" f +withSoundStart src/Dodge/Item/Weapon/TriggerType.hs 242;" f +withTempLight src/Dodge/Item/Weapon/TriggerType.hs 447;" f +withThickSmokeI src/Dodge/Item/Weapon/TriggerType.hs 133;" f +withThinSmokeI src/Dodge/Item/Weapon/TriggerType.hs 124;" f +withTorqueAfter src/Dodge/Item/Weapon/TriggerType.hs 617;" f +withWarmUp src/Dodge/Item/Weapon/TriggerType.hs 205;" f wlDustAt src/Dodge/Wall/Dust.hs 10;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f