Move towards working implementation of attachment tree ammo

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