diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index 5cd0be93e..5e2acfd0c 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -18,25 +18,25 @@ import qualified IntMapHelp as IM useItem :: Int -> PressType -> World -> Maybe World useItem invid pt w = fmap (worldEventFlags . at InventoryChange ?~ ()) $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 - itmloc <- allInvLocs (_crInv cr) ^? ix invid . _2 - useItemLoc cr itmloc pt w + itmloc <- invIndents (_crInv cr) ^? ix invid . _2 + useItemLoc cr (itmloc) pt w -useItemLoc :: Creature -> LocationLDT ItemLink OItem -> PressType -> World -> Maybe World +useItemLoc :: Creature -> LocationDT OItem -> PressType -> World -> Maybe World useItemLoc cr loc pt w | HeldPlatformSF <- sf - , fromMaybe False $ loc ^? locLDT . ldtValue . _1 . itLocation . ilIsAttached + , fromMaybe False $ loc ^? locDT . dtValue . _1 . itLocation . ilIsAttached , Aiming{} <- cr ^. crStance . posture = - return $ gadgetEffect pt (locLDTToLocDT loc) cr w + return $ gadgetEffect pt loc cr w | LaserWeaponSF <- sf - , fromMaybe False $ loc ^? locLDT . ldtValue . _1 . itLocation . ilIsAttached + , fromMaybe False $ loc ^? locDT . dtValue . _1 . itLocation . ilIsAttached , Aiming{} <- cr ^. crStance . posture = - return $ gadgetEffect pt (locLDTToLocDT loc) cr w + return $ gadgetEffect pt (loc) cr w | GadgetPlatformSF <- sf = - return $ gadgetEffect pt (locLDTToLocDT loc) cr w + return $ gadgetEffect pt (loc) cr w | UnderBarrelPlatformSF <- sf - , fromMaybe False $ loc ^? locLDT . ldtValue . _1 . itLocation . ilIsAttached + , fromMaybe False $ loc ^? locDT . dtValue . _1 . itLocation . ilIsAttached , Aiming{} <- cr ^. crStance . posture = - return $ gadgetEffect pt (locLDTToLocDT loc) cr w + return $ gadgetEffect pt (loc) cr w | RemoteDetonatorSF <- sf , pt == InitialPress = return $ activateDetonator ldt w @@ -53,12 +53,12 @@ useItemLoc cr loc pt w , pt == InitialPress , Just invid' <- itm ^? itLocation . ilInvID = return $ toggleEquipmentAt invid' cr w - | otherwise = (\loc' -> useItemLoc cr loc' pt w) =<< locUp loc + | otherwise = (\loc' -> useItemLoc cr loc' pt w) =<< locUp' loc -- ie try location above where - sf = loc ^. locLDT . ldtValue . _2 - ldt = loc ^. locLDT - itm = ldt ^. ldtValue . _1 + sf = loc ^. locDT . dtValue . _2 + ldt = loc ^. locDT + itm = ldt ^. dtValue . _1 --chooseUseLocation :: LocationLDT ItemLink OItem -> LocationLDT ItemLink OItem --chooseUseLocation loc @@ -78,9 +78,9 @@ useItemLoc cr loc pt w -- MapperSF -> True -- _ -> False -activateDetonator :: LDTree ItemLink OItem -> World -> World +activateDetonator :: DTree OItem -> World -> World activateDetonator det = fromMaybe id $ do - pjid <- det ^? ldtValue . _1 . itUse . uaParams . apProjectiles . ix 0 + pjid <- det ^? dtValue . _1 . itUse . uaParams . apProjectiles . ix 0 return $ cWorld . lWorld . projectiles . ix pjid . pjTimer .~ 0 toggleEquipmentAt :: Int -> Creature -> World -> World diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 128febb61..dff1d143d 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -147,18 +147,18 @@ invRootItemEffs :: Creature -> World -> World invRootItemEffs cr = appEndo $ foldMap - (reduceLocLDT (Endo . invItemLocUpdate cr) . LocLDT TopLDT) - (invLDT' (_crInv cr)) + (reduceLocDT (Endo . invItemLocUpdate cr) . LocDT TopDT) + (invDT' (_crInv cr)) -invItemLocUpdate :: Creature -> LocationLDT ItemLink OItem -> World -> World +invItemLocUpdate :: Creature -> LocationDT OItem -> World -> World invItemLocUpdate cr loc w = doAnyEquipmentEffect loc cr $ case itm ^. itType of ATTACH BULLETSYNTH -> trySynthBullet loc w - EQUIP WRIST_ECG | haspulse -> tryUseParent (locLDTToLocDT loc) w + EQUIP WRIST_ECG | haspulse -> tryUseParent (loc) w COPIER _ -> copierItemUpdate itm cr w HELD FLATSHIELD -> rootNotrootEff createShieldWall removeShieldWall itm cr w HELD MINIGUNX{} -> coolMinigun itm w HELD MACHINEPISTOL{} -> coolMachinePistol cr itm w - HELD LASER | loc ^. locLDT . ldtValue . _2 == WeaponTargetingSF + HELD LASER | loc ^. locDT . dtValue . _2 == WeaponTargetingSF , itm ^? itLocation . ilIsAttached == Just True -> shineTargetLaser cr loc w HELD TORCH | itm ^? itLocation . ilIsAttached == Just True -> shineTorch cr loc w @@ -171,7 +171,7 @@ invItemLocUpdate cr loc w = doAnyEquipmentEffect loc cr $ case itm ^. itType of haspulse = w ^? cWorld . lWorld . creatures . ix 0 . crType . avatarPulse . pulseProgress == Just 0 - itm = loc ^. locLDT . ldtValue . _1 + itm = loc ^. locDT . dtValue . _1 coolMinigun :: Item -> World -> World coolMinigun itm @@ -219,9 +219,9 @@ copierItemUpdate itm cr w = fromMaybe w $ do v <- getItemValue itm' w cr return $ w & pointerToItem itm . itUse . uValue .~ v -doAnyEquipmentEffect :: LocationLDT ItemLink OItem -> Creature -> World -> World +doAnyEquipmentEffect :: LocationDT OItem -> Creature -> World -> World doAnyEquipmentEffect loc cr = maybe id (equipBackgroundEffect loc cr) - $ loc ^? locLDT . ldtValue . _1 . itLocation . ilEquipSite . _Just + $ loc ^? locDT . dtValue . _1 . itLocation . ilEquipSite . _Just tryUseParent :: LocationDT OItem -> World -> World tryUseParent loc w = fromMaybe w $ do @@ -229,13 +229,13 @@ tryUseParent loc w = fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 return $ gadgetEffect InitialPress t cr w -trySynthBullet :: LocationLDT ItemLink OItem -> World -> World +trySynthBullet :: LocationDT OItem -> World -> World trySynthBullet loc w = fromMaybe w $ do i <- itm ^? itLocation . ilInvID x <- itm ^? itUse . uaParams . apInt if x < 100 then do - bat <- loc ^? locLDT . ldtLeft . ix 0 . _2 . ldtValue . _1 + bat <- loc ^? locDT . dtLeft . ix 0 . dtValue . _1 j <- bat ^? itLocation . ilInvID y <- bat ^. itConsumables guard $ y > 0 @@ -257,7 +257,7 @@ trySynthBullet loc w = fromMaybe w $ do . _Just -~ 1 else do - mag <- loc ^? locLdtContext . cldtParent . _1 + mag <- loc ^? locDtContext . cdtParent . _1 j <- mag ^? itLocation . ilInvID y <- mag ^. itConsumables ymax <- maxAmmo mag @@ -280,24 +280,24 @@ trySynthBullet loc w = fromMaybe w $ do . _Just +~ 1 where - itm = loc ^. locLDT . ldtValue . _1 + itm = loc ^. locDT . dtValue . _1 -drawARHUD :: LocationLDT ItemLink OItem -> World -> World -drawARHUD (LocLDT con _) w = fromMaybe w $ do - itm <- con ^? cldtParent . _1 +drawARHUD :: LocationDT OItem -> World -> World +drawARHUD (LocDT con _) w = fromMaybe w $ do + itm <- con ^? cdtParent . _1 return $ w & cWorld . lWorld . flares <>~ fold (drawTargetingAR itm w <|> drawMapperAR itm w) -shineTargetLaser :: Creature -> LocationLDT ItemLink OItem -> World -> World +shineTargetLaser :: Creature -> LocationDT OItem -> World -> World shineTargetLaser cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do guard (crIsAiming cr) -- (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) - (_, mag) <- find (isammolink . (^. _2 . ldtValue . _2)) (itmtree ^. ldtLeft) - i <- mag ^. ldtValue . _1 . itConsumables + ( mag) <- find (isammolink . (^. dtValue . _2)) (itmtree ^. dtLeft) + i <- mag ^. dtValue . _1 . itConsumables guard $ i >= x - maginvid <- mag ^? ldtValue . _1 . itLocation . ilInvID + maginvid <- mag ^? dtValue . _1 . itLocation . ilInvID return $ w & worldEventFlags . at InventoryChange ?~ () @@ -316,33 +316,33 @@ shineTargetLaser cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ d , _lpType = TargetingLaser (_itID itm) } where - o = locOrient (locLDTToLocDT loc) cr - itmtree = loc ^. locLDT + o = locOrient (loc) cr + itmtree = loc ^. locDT (p, q) = o `Q.comp` (V3 5 0 0, Q.qID) x = 1 isammolink AmmoMagSF{} = True isammolink _ = False pos = _crPos cr + xyV3 (rotate3 cdir p) cdir = _crDir cr - itm = itmtree ^. ldtValue . _1 + itm = itmtree ^. dtValue . _1 pointittarg = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itTargeting cid = _crID cr invid = _ilInvID $ _itLocation itm col = blue -- mixColors reloadFrac (1-reloadFrac) blue red -shineTorch :: Creature -> LocationLDT ItemLink OItem -> World -> World +shineTorch :: Creature -> LocationDT OItem -> World -> World shineTorch cr loc = fromMaybe id $ do - (_, mag) <- find (isammolink . (^. _2 . ldtValue . _2)) (itmtree ^. ldtLeft) - i <- mag ^. ldtValue . _1 . itConsumables + ( mag) <- find (isammolink . (^. dtValue . _2)) (itmtree ^. dtLeft) + i <- mag ^. dtValue . _1 . itConsumables guard $ crIsAiming cr guard $ i >= x - invid <- mag ^? ldtValue . _1 . itLocation . ilInvID + invid <- mag ^? dtValue . _1 . itLocation . ilInvID return $ (cWorld . lWorld . lights .:~ LSParam pos 250 0.7) . (cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itConsumables . _Just -~ x) where - itmtree = loc ^. locLDT - (p, q) = locOrient (locLDTToLocDT loc) cr + itmtree = loc ^. locDT + (p, q) = locOrient (loc) cr x = 10 isammolink AmmoMagSF{} = True isammolink _ = False diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index de9b95864..6feee591d 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -24,7 +24,6 @@ module Dodge.Creature.Test ( crSafeDistFromTarg, ) where -import Dodge.DoubleTree import Dodge.Item.Grammar import Dodge.Creature.Radius import Dodge.Data.Equipment.Misc @@ -97,8 +96,8 @@ crInAimStance as cr = crIsAiming cr && mitstance == Just as mitstance = do i <- cr ^? crManipulation . manObject . imRootSelectedItem --itm <- invRootTrees' (cr ^. crInv) ^? ix i - itm <- fmap (fmap (\(a,b,_) -> (a,b))) $ invRootTrees (cr ^. crInv) ^? ix i - return $ aimStance $ ldtToDT itm + itm <- fmap (fmap (\(a,b,_) -> (a,b))) $ invIMDT (cr ^. crInv) ^? ix i + return $ aimStance $ itm --cr ^? crInv . ix i . itUse . heldAim . aimStance oneH :: Creature -> Bool diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index 5f9f5608d..838059c2a 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -162,7 +162,7 @@ updateDisplaySections w cfig = invitems = IM.map (uncurry (invSelectionItem w)) - (allInvLocs' $ _crInv cr) + (invIndents $ _crInv cr) filterSectionsPair :: Bool -> -- check for whether filter is in focus, changes string at the end diff --git a/src/Dodge/DoubleTree.hs b/src/Dodge/DoubleTree.hs index 75526a5ab..a6a7773a2 100644 --- a/src/Dodge/DoubleTree.hs +++ b/src/Dodge/DoubleTree.hs @@ -309,6 +309,12 @@ locLeftmost loc = maybe loc locLeftmost $ alaf First foldMap Just $ locGoLeft lo locRightmost :: LocationLDT b a -> LocationLDT b a locRightmost loc = maybe loc locRightmost $ alaf Last foldMap Just $ locGoRight loc +locDTLeftmost :: LocationDT a -> LocationDT a +locDTLeftmost loc = maybe loc locDTLeftmost $ alaf First foldMap Just $ locDTGoLeft loc + +locDTRightmost :: LocationDT a -> LocationDT a +locDTRightmost loc = maybe loc locDTRightmost $ alaf Last foldMap Just $ locDTGoRight loc + -- should probably do tests for these locGoLeft :: LocationLDT b a -> [LocationLDT b a] locGoLeft (LocLDT c (LDT v l r)) = @@ -319,6 +325,16 @@ locGoRight :: LocationLDT b a -> [LocationLDT b a] locGoRight (LocLDT c (LDT v l r)) = [LocLDT (RightwardLDT c l closel v link closer) t | (closel, (link, t), closer) <- locGoHelp id r] +-- should probably do tests for these +locDTGoLeft :: LocationDT a -> [LocationDT a] +locDTGoLeft (LocDT c (DT v l r)) = + [LocDT (LeftwardDT c closel v closer r) t | (closel, t, closer) <- locDTGoHelp id l] + +-- should probably do tests for these +locDTGoRight :: LocationDT a -> [LocationDT a] +locDTGoRight (LocDT c (DT v l r)) = + [LocDT (RightwardDT c l closel v closer) t | (closel, ( t), closer) <- locDTGoHelp id r] + -- this seems like it might be very inefficient for large lists -- difference lists? locGoHelp :: (a -> b) -> [a] -> [([a], b, [a])] @@ -327,6 +343,14 @@ locGoHelp f = go [] go cleft (y : ys) = (cleft, f y, ys) : go (cleft <> [y]) ys go _ [] = [] +-- this seems like it might be very inefficient for large lists +-- difference lists? +locDTGoHelp :: (a -> b) -> [a] -> [([a], b, [a])] +locDTGoHelp f = go [] + where + go cleft (y : ys) = (cleft, f y, ys) : go (cleft <> [y]) ys + go _ [] = [] + -- Propgates a value (of type c) down the branches of the ContextLDT. -- The value is updated according a "left" or "right" function (lf or rf), -- that acts on the parent value, the link, and the child value. @@ -370,3 +394,47 @@ reduceLocLDT :: Monoid m => (LocationLDT b a -> m) -> LocationLDT b a -> m reduceLocLDT f x = foldMap (reduceLocLDT f) (locGoLeft x) <> f x <> foldMap (reduceLocLDT f) (locGoRight x) + +reduceLocDT :: Monoid m => (LocationDT a -> m) -> LocationDT a -> m +reduceLocDT f x = + foldMap (reduceLocDT f) (locDTGoLeft x) <> f x + <> foldMap (reduceLocDT f) (locDTGoRight x) + +-- Propgates a value (of type c) down the branches of the ContextLDT. +-- The value is updated according a "left" or "right" function (lf or rf), +-- that acts on the parent value and the child value. +-- For each context node, the updated value is used to update a final value (of type d). +cdtPropagateFold :: + (c -> a -> a -> c) -> + (c -> a -> a -> c) -> + (c -> LocationDT a -> d -> d) -> + c -> + LocationDT a -> + d -> + d +cdtPropagateFold lf rf up x loc = + alaf + Endo + foldMap + ( \(LocDT con' t') -> + cdtPropagateFold + lf + rf + up + (lf x (_cdtParent con') (_dtValue t')) + (LocDT con' t') + ) + (locDTGoLeft loc) + . alaf + Endo + foldMap + ( \(LocDT con' t') -> + cdtPropagateFold + lf + rf + up + (rf x (_cdtParent con') (_dtValue t')) + (LocDT con' t') + ) + (locDTGoRight loc) + . up x loc diff --git a/src/Dodge/Euse.hs b/src/Dodge/Euse.hs index 143dc2d72..ac24af730 100644 --- a/src/Dodge/Euse.hs +++ b/src/Dodge/Euse.hs @@ -12,7 +12,7 @@ import Dodge.Wall.Move import Geometry import LensHelp -equipBackgroundEffect :: LocationLDT ItemLink OItem -> Creature -> EquipSite +equipBackgroundEffect :: LocationDT OItem -> Creature -> EquipSite -> World -> World equipBackgroundEffect loc cr = case eo of EQUIP (MAGSHIELD mt) -> const $ useMagShield mt itm cr @@ -20,7 +20,7 @@ equipBackgroundEffect loc cr = case eo of EQUIP HEADLAMP -> const $ createHeadLamp itm cr _ -> const id where - itm = loc ^. locLDT . ldtValue . _1 + itm = loc ^. locDT . dtValue . _1 eo = itm ^. itType -- this should probably drain energy diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 2af4ad956..ca450b945 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -107,7 +107,6 @@ hammerCheck f pt loc cr w = case itemTriggerType loc of NoTrigger -> f loc cr w _ -> w where - tree = loc ^. locDT it = loc ^. locDT . dtValue . _1 cid = _crID cr -- the following is unsafe, but if ilInvID isn't correctly set we probably diff --git a/src/Dodge/Inventory/Location.hs b/src/Dodge/Inventory/Location.hs index 45fe7fcb5..3eb37d6a8 100644 --- a/src/Dodge/Inventory/Location.hs +++ b/src/Dodge/Inventory/Location.hs @@ -54,7 +54,7 @@ crSetRoots cid w = fromMaybe w $ do dropMissing preserveMissing (zipWithMatched f) - (invRootTrees inv) + (invIMDT inv) where f _ _ = itLocation . ilIsRoot .~ True diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index e9fea5bb0..bb584f3cb 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -29,7 +29,7 @@ import NewInt import Padding import Picture.Base -invSelectionItem :: World -> Int -> LocationLDT ItemLink CItem -> SelectionItem () +invSelectionItem :: World -> Int -> LocationDT OItem -> SelectionItem () invSelectionItem w indent loc = SelectionItem { _siPictures = itemDisplay w cr ci @@ -41,7 +41,8 @@ invSelectionItem w indent loc = , _siPayload = () } where - ci = loc ^. locLDT . ldtValue + ci = (a,b) + (a,b,_) = loc ^. locDT . dtValue cr = w ^?! cWorld . lWorld . creatures . ix 0 -- note the convoluted display of the hotkey/equipment, this was done to avoid a diff --git a/src/Dodge/Inventory/Swap.hs b/src/Dodge/Inventory/Swap.hs index cafe195c3..11c963da1 100644 --- a/src/Dodge/Inventory/Swap.hs +++ b/src/Dodge/Inventory/Swap.hs @@ -65,15 +65,15 @@ checkConnection :: SoundOrigin -> SoundID -> Int -> Int -> World -> World checkConnection so s i j w = fromMaybe w $ do inv <- w ^? cWorld . lWorld . creatures . ix 0 . crInv cpos <- w ^? cWorld . lWorld . creatures . ix 0 . crPos - let locs = allInvLocs inv + let locs = invIndents inv -- why indents? iit <- locs ^? ix i . _2 jit <- locs ^? ix j . _2 guard $ isConnected iit || isConnected jit return $ soundStart so cpos s Nothing w -isConnected :: LocationLDT b a -> Bool -isConnected x = case x ^. locLdtContext of - TopLDT -> - not (null $ x ^. locLDT . ldtRight) - || not (null $ x ^. locLDT . ldtLeft) +isConnected :: LocationDT a -> Bool +isConnected x = case x ^. locDtContext of + TopDT -> + not (null $ x ^. locDT . dtRight) + || not (null $ x ^. locDT . dtLeft) _ -> True diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 428edf8fb..b9614a90f 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -2,14 +2,14 @@ module Dodge.Item.Grammar ( invDT, invLDT, - invLDT', + invDT', invAdj, invRootMap, - invRootTrees, - invRootTrees', +-- invRootTrees, + invIMDT, baseCI, - allInvLocs, - allInvLocs', + invIndents, +-- allInvLocs, ) where import Dodge.Item.Orientation @@ -256,8 +256,11 @@ invDT = fmap ldtToDT . joinItemsInList tryAttachItems . IM.elems . fmap (singleLDT . baseCI) -invLDT' :: IM.IntMap Item -> [LDTree ItemLink OItem] -invLDT' = fmap propagateOrientation . invLDT +--invLDT' :: IM.IntMap Item -> [LDTree ItemLink OItem] +--invLDT' = fmap propagateOrientation . invLDT + +invDT' :: IM.IntMap Item -> [DTree OItem] +invDT' = fmap propagateOrientation' . invDT -- this assumes the creature inventory is well formed, specifically the -- location ids @@ -283,57 +286,84 @@ invAdj = IM.unions . map g . invLDT (error ("invAdj item " ++ show (_itID itm) ++ " location: " ++ show (itm ^? itLocation))) $ itm ^? itLocation . ilInvID --- returns an intmap with trees for (only!) root items, indexed by inventory position -invRootTrees :: IM.IntMap Item -> IM.IntMap (LDTree ItemLink OItem) -invRootTrees = fmap propagateOrientation . IM.fromDistinctAscList . reverse . map getid . invLDT - where - getid :: LDTree ItemLink CItem -> (Int, LDTree ItemLink CItem) - getid t = (t ^?! ldtValue . _1 . itLocation . ilInvID, t) +---- returns an intmap with trees for (only!) root items, indexed by inventory position +--invRootTrees :: IM.IntMap Item -> IM.IntMap (LDTree ItemLink OItem) +--invRootTrees = fmap propagateOrientation . IM.fromDistinctAscList . reverse . map getid . invLDT +-- where +-- getid :: LDTree ItemLink CItem -> (Int, LDTree ItemLink CItem) +-- getid t = (t ^?! ldtValue . _1 . itLocation . ilInvID, t) -invRootTrees' :: IM.IntMap Item -> IM.IntMap (LDTree ItemLink CItem) -invRootTrees' = IM.fromDistinctAscList . reverse . map getid . invLDT +invIMDT :: IM.IntMap Item -> IM.IntMap (DTree OItem) +invIMDT = fmap propagateOrientation' . IM.fromDistinctAscList . reverse . map getid . invDT where - getid :: LDTree ItemLink CItem -> (Int, LDTree ItemLink CItem) - getid t = (t ^?! ldtValue . _1 . itLocation . ilInvID, t) + getid :: DTree CItem -> (Int, DTree CItem) + getid t = (t ^?! dtValue . _1 . itLocation . ilInvID, t) --- returns an intmap with indents and locations for all items -allInvLocs :: IM.IntMap Item -> IM.IntMap (Int, LocationLDT ItemLink OItem) -allInvLocs inv = foldMap (f . LocLDT TopLDT) (IM.elems (invRootTrees inv)) mempty +--invRootTrees' :: IM.IntMap Item -> IM.IntMap (LDTree ItemLink CItem) +--invRootTrees' = IM.fromDistinctAscList . reverse . map getid . invLDT +-- where +-- getid :: LDTree ItemLink CItem -> (Int, LDTree ItemLink CItem) +-- getid t = (t ^?! ldtValue . _1 . itLocation . ilInvID, t) + +invIndents :: IM.IntMap Item -> IM.IntMap (Int, LocationDT OItem) +invIndents inv = foldMap (f . LocDT TopDT) (IM.elems (invIMDT inv)) mempty where - f t = cldtPropagateFold h h g 0 t id - h x _ _ _ = x + 1 + f t = cdtPropagateFold h h g 0 t id + h x _ _ = x + 1 g :: Int -> - LocationLDT ItemLink OItem -> - ( IM.IntMap (Int, LocationLDT ItemLink OItem) -> - IM.IntMap (Int, LocationLDT ItemLink OItem) + LocationDT OItem -> + ( IM.IntMap (Int, LocationDT OItem) -> + IM.IntMap (Int, LocationDT OItem) ) -> - IM.IntMap (Int, LocationLDT ItemLink OItem) -> - IM.IntMap (Int, LocationLDT ItemLink OItem) + IM.IntMap (Int, LocationDT OItem) -> + IM.IntMap (Int, LocationDT OItem) g x ldt = (.) ( IM.insert - (ldt ^?! locLDT . ldtValue . _1 . itLocation . ilInvID) + (ldt ^?! locDT . dtValue . _1 . itLocation . ilInvID) (x, ldt) ) --- returns an intmap with indents and locations for all items -allInvLocs' :: IM.IntMap Item -> IM.IntMap (Int, LocationLDT ItemLink CItem) -allInvLocs' inv = foldMap (f . LocLDT TopLDT) (IM.elems (invRootTrees' inv)) mempty - where - f t = cldtPropagateFold h h g 0 t id - h x _ _ _ = x + 1 - g :: - Int -> - LocationLDT ItemLink CItem -> - ( IM.IntMap (Int, LocationLDT ItemLink CItem) -> - IM.IntMap (Int, LocationLDT ItemLink CItem) - ) -> - IM.IntMap (Int, LocationLDT ItemLink CItem) -> - IM.IntMap (Int, LocationLDT ItemLink CItem) - g x ldt = - (.) - ( IM.insert - (ldt ^?! locLDT . ldtValue . _1 . itLocation . ilInvID) - (x, ldt) - ) + +---- returns an intmap with indents and locations for all items +--allInvLocs :: IM.IntMap Item -> IM.IntMap (Int, LocationLDT ItemLink OItem) +--allInvLocs inv = foldMap (f . LocLDT TopLDT) (IM.elems (invRootTrees inv)) mempty +-- where +-- f t = cldtPropagateFold h h g 0 t id +-- h x _ _ _ = x + 1 +-- g :: +-- Int -> +-- LocationLDT ItemLink OItem -> +-- ( IM.IntMap (Int, LocationLDT ItemLink OItem) -> +-- IM.IntMap (Int, LocationLDT ItemLink OItem) +-- ) -> +-- IM.IntMap (Int, LocationLDT ItemLink OItem) -> +-- IM.IntMap (Int, LocationLDT ItemLink OItem) +-- g x ldt = +-- (.) +-- ( IM.insert +-- (ldt ^?! locLDT . ldtValue . _1 . itLocation . ilInvID) +-- (x, ldt) +-- ) + +---- returns an intmap with indents and locations for all items +--allInvLocs' :: IM.IntMap Item -> IM.IntMap (Int, LocationLDT ItemLink CItem) +--allInvLocs' inv = foldMap (f . LocLDT TopLDT) (IM.elems (invRootTrees' inv)) mempty +-- where +-- f t = cldtPropagateFold h h g 0 t id +-- h x _ _ _ = x + 1 +-- g :: +-- Int -> +-- LocationLDT ItemLink CItem -> +-- ( IM.IntMap (Int, LocationLDT ItemLink CItem) -> +-- IM.IntMap (Int, LocationLDT ItemLink CItem) +-- ) -> +-- IM.IntMap (Int, LocationLDT ItemLink CItem) -> +-- IM.IntMap (Int, LocationLDT ItemLink CItem) +-- g x ldt = +-- (.) +-- ( IM.insert +-- (ldt ^?! locLDT . ldtValue . _1 . itLocation . ilInvID) +-- (x, ldt) +-- ) diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index d6a7f6d50..80a2a1325 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -1,6 +1,7 @@ module Dodge.Item.Orientation ( orientAttachment, propagateOrientation, + propagateOrientation', ) where import Dodge.Data.ComposedItem diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 67720179e..9e3d87bd9 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -94,11 +94,11 @@ drawRootCursor w sss msel ldp cfig = fromMaybe mempty $ do getRootItemBounds :: Int -> IM.IntMap Item -> Maybe (Int, Int) getRootItemBounds i inv = do - let ia = allInvLocs inv + let ia = invIndents inv -- why indents? why OItem? itm <- ia ^? ix i . _2 - let root = locToTop itm - x <- locRightmost root ^? locLDT . ldtValue . _1 . itLocation . ilInvID - y <- locLeftmost root ^? locLDT . ldtValue . _1 . itLocation . ilInvID + let root = locToTop' itm + x <- locDTRightmost root ^? locDT . dtValue . _1 . itLocation . ilInvID + y <- locDTLeftmost root ^? locDT . dtValue . _1 . itLocation . ilInvID return (x, y) drawMouseOver :: Configuration -> World -> Picture diff --git a/src/Dodge/WorldEffect.hs b/src/Dodge/WorldEffect.hs index 251b53bab..f847408d1 100644 --- a/src/Dodge/WorldEffect.hs +++ b/src/Dodge/WorldEffect.hs @@ -5,7 +5,7 @@ module Dodge.WorldEffect ( lineOutputTerminal, ) where -import Dodge.DoubleTree +--import Dodge.DoubleTree import Dodge.Item.Grammar import Dodge.Creature.Impulse.UseItem import Dodge.BlBl @@ -46,8 +46,8 @@ doWdWd we = case we of WdWdBurstFireRepetition cid invid -> \w -> fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix cid --itree <- allInvLocs (cr ^. crInv) ^? ix invid . _2 . locLDT - loc <- allInvLocs (cr ^. crInv) ^? ix invid . _2 - return $ heldEffectMuzzles (locLDTToLocDT loc) cr w + loc <- invIndents (cr ^. crInv) ^? ix invid . _2 + return $ heldEffectMuzzles (loc) cr w accessTerminal :: Maybe Int -> World -> World accessTerminal mtmid w = fromMaybe w $ do diff --git a/tags b/tags index 547c5c914..c7919dd9a 100644 --- a/tags +++ b/tags @@ -969,7 +969,7 @@ Kill src/Dodge/Data/ActionPlan.hs 198;" C LASER src/Dodge/Data/Item/Combine.hs 168;" C LDT src/Dodge/Data/DoubleTree.hs 34;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 29;" C -LDTComb src/Dodge/Item/Grammar.hs 197;" t +LDTComb src/Dodge/Item/Grammar.hs 196;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 27;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 28;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 25;" C @@ -3293,7 +3293,7 @@ aRadarPulse src/Dodge/RadarSweep.hs 19;" f aShape src/Dodge/Placement/Instance/LightSource.hs 107;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 51;" f +accessTerminal src/Dodge/WorldEffect.hs 52;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 81;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 85;" f @@ -3348,8 +3348,7 @@ airlockDoor src/Dodge/Room/Airlock.hs 51;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 54;" f airlockSimple src/Dodge/Room/Airlock.hs 66;" f airlockZ src/Dodge/Room/Airlock.hs 91;" f -allInvLocs src/Dodge/Item/Grammar.hs 300;" f -allInvLocs' src/Dodge/Item/Grammar.hs 321;" f +allInvLocs src/Dodge/Item/Grammar.hs 329;" f allVisibleWalls src/Dodge/Base/Collide.hs 132;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f @@ -3365,21 +3364,21 @@ angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f anythingHitCirc src/Dodge/Base/Collide.hs 247;" f -applyCME src/Dodge/HeldUse.hs 397;" f +applyCME src/Dodge/HeldUse.hs 395;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 13;" f applyEventIO src/Loop.hs 89;" f applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 16;" f -applyInvLock src/Dodge/HeldUse.hs 464;" f +applyInvLock src/Dodge/HeldUse.hs 462;" f applyMagnetsToBul src/Dodge/Bullet.hs 30;" f applyPastDamages src/Dodge/Creature/State.hs 132;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 22;" f applyPosition src/Sound.hs 111;" f -applyRecoil src/Dodge/HeldUse.hs 496;" f +applyRecoil src/Dodge/HeldUse.hs 494;" f applyResFactor src/Dodge/Data/Config.hs 110;" f applySetTerminalString src/Dodge/Debug/Terminal.hs 81;" f -applySidePush src/Dodge/HeldUse.hs 598;" f -applySoundCME src/Dodge/HeldUse.hs 486;" f +applySidePush src/Dodge/HeldUse.hs 596;" f +applySoundCME src/Dodge/HeldUse.hs 484;" f applyTerminalCommand src/Dodge/Debug/Terminal.hs 28;" f applyTerminalCommandArguments src/Dodge/Debug/Terminal.hs 42;" f applyTerminalString src/Dodge/Debug/Terminal.hs 22;" f @@ -3387,7 +3386,7 @@ applyToNode src/TreeHelp.hs 64;" f applyToRandomNode src/TreeHelp.hs 150;" f applyToSubforest src/TreeHelp.hs 77;" f applyToSubtree src/TreeHelp.hs 70;" f -applyTorqueCME src/Dodge/HeldUse.hs 609;" f +applyTorqueCME src/Dodge/HeldUse.hs 607;" f applyWorldConfig src/Dodge/Config/Update.hs 38;" f aquamarine src/Color.hs 23;" f arHUD src/Dodge/Item/Scope.hs 134;" f @@ -3450,7 +3449,7 @@ barrel src/Dodge/Creature/Inanimate.hs 17;" f barrelShape src/Dodge/Render/ShapePicture.hs 46;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 405;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f -baseCI src/Dodge/Item/Grammar.hs 194;" f +baseCI src/Dodge/Item/Grammar.hs 193;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 311;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 45;" f @@ -3461,7 +3460,7 @@ baseSMGShape src/Dodge/Item/Draw/SPic.hs 382;" f baseShoulder src/Dodge/Creature/Picture.hs 125;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 288;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 281;" f -baseStickSpread src/Dodge/HeldUse.hs 292;" f +baseStickSpread src/Dodge/HeldUse.hs 290;" f baseTriggerType src/Dodge/Item/TriggerType.hs 5;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 128;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 38;" f @@ -3471,7 +3470,7 @@ basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f -basicMuzFlare src/Dodge/HeldUse.hs 750;" f +basicMuzFlare src/Dodge/HeldUse.hs 746;" f basicTerminal src/Dodge/Terminal.hs 35;" f battery src/Dodge/Item/Ammo.hs 62;" f batteryPack src/Dodge/Item/Equipment.hs 46;" f @@ -3479,8 +3478,8 @@ belowNumX src/Dodge/Combine/Graph.hs 86;" f beltMag src/Dodge/Item/Ammo.hs 38;" f bfsNodePoints src/Dodge/Path.hs 58;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 218;" f -bgateCalc src/Dodge/Inventory/SelectionList.hs 114;" f -bgunSound src/Dodge/HeldUse.hs 552;" f +bgateCalc src/Dodge/Inventory/SelectionList.hs 115;" f +bgunSound src/Dodge/HeldUse.hs 550;" f bindFBO src/Render.hs 244;" f bingate src/Dodge/Item/Scope.hs 109;" f black src/Color.hs 27;" f @@ -3536,7 +3535,7 @@ branchWith src/Dodge/Room/Room.hs 67;" f bright src/Color.hs 120;" f brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 106;" f -btText src/Dodge/Inventory/SelectionList.hs 233;" f +btText src/Dodge/Inventory/SelectionList.hs 234;" f bufferEBO src/Shader/Bind.hs 28;" f bufferPokedVBO src/Shader/Bind.hs 19;" f bufferShaderLayers src/Shader/Bind.hs 36;" f @@ -3622,7 +3621,7 @@ clampPath src/Dodge/Room/Procedural.hs 166;" f clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 549;" f clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 663;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 531;" f -cldtPropagateFold src/Dodge/DoubleTree.hs 334;" f +cldtPropagateFold src/Dodge/DoubleTree.hs 352;" f cleanUpPreload src/Preload.hs 10;" f cleanUpRenderPreload src/Preload/Render.hs 217;" f cleanUpSoundPreload src/Preload.hs 15;" f @@ -3636,9 +3635,9 @@ clicker src/Dodge/Item/Scope.hs 82;" f clipV src/Geometry/Vector.hs 47;" f clipZoom src/Dodge/Update/Camera.hs 222;" f clockCycle src/Dodge/Clock.hs 9;" f -closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 219;" f -closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 204;" f -closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 239;" f +closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 220;" f +closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 205;" f +closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 240;" f closeObjectInfo src/Dodge/Render/HUD.hs 224;" f closestCreatureID src/Dodge/Debug.hs 116;" f closestPointOnLine src/Geometry/Intersect.hs 251;" f @@ -3716,24 +3715,24 @@ corridorBoss src/Dodge/LockAndKey.hs 133;" f corridorN src/Dodge/Room/Corridor.hs 52;" f corridorWallN src/Dodge/Room/Corridor.hs 71;" f crAdd src/Dodge/Room/RezBox.hs 104;" f -crAwayFromPost src/Dodge/Creature/Test.hs 83;" f +crAwayFromPost src/Dodge/Creature/Test.hs 82;" f crBlips src/Dodge/RadarSweep.hs 87;" f crCamouflage src/Dodge/Creature/Picture.hs 31;" f -crCanSeeCr src/Dodge/Creature/Test.hs 52;" f +crCanSeeCr src/Dodge/Creature/Test.hs 51;" f crCrSpring src/Dodge/Update.hs 814;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 57;" f crDexterity src/Dodge/Creature/Statistics.hs 14;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 38;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 52;" f -crHasTarget src/Dodge/Creature/Test.hs 65;" f -crHasTargetLOS src/Dodge/Creature/Test.hs 68;" f +crHasTarget src/Dodge/Creature/Test.hs 64;" f +crHasTargetLOS src/Dodge/Creature/Test.hs 67;" f crHit src/Dodge/WorldEvent/ThingsHit.hs 64;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 32;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 14;" f -crInAimStance src/Dodge/Creature/Test.hs 94;" f +crInAimStance src/Dodge/Creature/Test.hs 93;" f crIntelligence src/Dodge/Creature/Statistics.hs 34;" f -crIsAiming src/Dodge/Creature/Test.hs 60;" f -crIsArmouredFrom src/Dodge/Creature/Test.hs 116;" f +crIsAiming src/Dodge/Creature/Test.hs 59;" f +crIsArmouredFrom src/Dodge/Creature/Test.hs 115;" f crMass src/Dodge/Creature/Mass.hs 5;" f crMaterial src/Dodge/Creature/Material.hs 8;" f crMaxHP src/Dodge/Creature/MaxHP.hs 6;" f @@ -3741,15 +3740,15 @@ crMvAbsolute src/Dodge/Creature/Impulse/Movement.hs 27;" f crMvBy src/Dodge/Creature/Impulse/Movement.hs 20;" f crMvForward src/Dodge/Creature/Impulse/Movement.hs 41;" f crMvType src/Dodge/Creature/MoveType.hs 6;" f -crNearPoint src/Dodge/Creature/Test.hs 142;" f +crNearPoint src/Dodge/Creature/Test.hs 141;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 23;" f crOnWall src/Dodge/WallCreatureCollisions.hs 86;" f crRad src/Dodge/Creature/Radius.hs 7;" f -crSafeDistFromTarg src/Dodge/Creature/Test.hs 73;" f +crSafeDistFromTarg src/Dodge/Creature/Test.hs 72;" f crSetRoots src/Dodge/Inventory/Location.hs 48;" f crShape src/Dodge/Creature/Shape.hs 8;" f crSpring src/Dodge/Update.hs 809;" f -crStratConMatches src/Dodge/Creature/Test.hs 78;" f +crStratConMatches src/Dodge/Creature/Test.hs 77;" f crStrength src/Dodge/Creature/Statistics.hs 24;" f crUpdate src/Dodge/Creature/State.hs 64;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f @@ -3769,14 +3768,14 @@ createItemYou src/Dodge/Inventory/Add.hs 95;" f createLightMap src/Render.hs 26;" f createNewArc src/Dodge/Tesla/Arc.hs 90;" f createPathGrid src/Dodge/Room/Path.hs 21;" f -createProjectile src/Dodge/HeldUse.hs 1322;" f -createProjectileR src/Dodge/HeldUse.hs 1271;" f +createProjectile src/Dodge/HeldUse.hs 1317;" f +createProjectileR src/Dodge/HeldUse.hs 1266;" f createShell src/Dodge/Projectile/Create.hs 22;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 39;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 117;" f createWall src/Dodge/Wall/Create.hs 8;" f creatureDisplayText src/Dodge/Creature/Picture/Awareness.hs 11;" f -creatureShootLaser src/Dodge/HeldUse.hs 868;" f +creatureShootLaser src/Dodge/HeldUse.hs 864;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 52;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 73;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 62;" f @@ -3847,7 +3846,7 @@ dark src/Color.hs 108;" f darkenBackground src/Dodge/Render/MenuScreen.hs 52;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f -dbwMuzzles src/Dodge/HeldUse.hs 295;" f +dbwMuzzles src/Dodge/HeldUse.hs 293;" f deZoneIX src/Dodge/Zoning/Base.hs 89;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f deadEndRoom src/Dodge/Room/Room.hs 235;" f @@ -3965,7 +3964,7 @@ detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 451;" f detectorEffect src/Dodge/Item/Weapon/Radar.hs 20;" f detectorInfo src/Dodge/Item/Info.hs 224;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1240;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1236;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 204;" f @@ -3984,7 +3983,7 @@ displayControls src/Dodge/Menu.hs 223;" f displayFrameTicks src/Dodge/Render/Picture.hs 45;" f displayFreeSlots src/Dodge/DisplayInventory.hs 198;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f -displayPulse src/Dodge/Inventory/SelectionList.hs 175;" f +displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f displayTerminalLineString src/Dodge/Update.hs 452;" f dist src/Geometry/Vector.hs 190;" f dist3 src/Geometry/Vector3D.hs 101;" f @@ -4015,8 +4014,8 @@ doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f doDamage src/Dodge/Creature/State.hs 128;" f -doDeathToggle src/Dodge/WorldEffect.hs 90;" f -doDeathTriggers src/Dodge/WorldEffect.hs 85;" f +doDeathToggle src/Dodge/WorldEffect.hs 91;" f +doDeathTriggers src/Dodge/WorldEffect.hs 86;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 37;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 62;" f @@ -4030,9 +4029,9 @@ doDrag src/Dodge/Update/Input/InGame.hs 107;" f doDrawing src/Dodge/Render.hs 35;" f doDrawing' src/Dodge/Render.hs 46;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 1191;" f +doGenFloat src/Dodge/HeldUse.hs 1187;" f doGravityPU src/Dodge/Projectile/Update.hs 50;" f -doHeldUseEffect src/Dodge/HeldUse.hs 326;" f +doHeldUseEffect src/Dodge/HeldUse.hs 324;" f doInPlacements src/Dodge/Layout.hs 92;" f doIndividualPlacements src/Dodge/Layout.hs 117;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 28;" f @@ -4066,7 +4065,7 @@ doSectionSize src/Dodge/DisplayInventory.hs 217;" f doSideEffects appDodge/Main.hs 120;" f doStep src/Dodge/ArcStep.hs 9;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 166;" f -doTerminalBootProgram src/Dodge/WorldEffect.hs 93;" f +doTerminalBootProgram src/Dodge/WorldEffect.hs 94;" f doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -4074,13 +4073,13 @@ doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 149;" f doTimeScroll src/Dodge/Update.hs 202;" f doTmTm src/Dodge/TmTm.hs 6;" f -doTmWdWd src/Dodge/WorldEffect.hs 98;" f +doTmWdWd src/Dodge/WorldEffect.hs 99;" f doWallRotate src/Dodge/Update/Camera.hs 212;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 37;" f doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f -doWdWd src/Dodge/WorldEffect.hs 26;" f +doWdWd src/Dodge/WorldEffect.hs 27;" f doWorldEvents src/Dodge/Update.hs 432;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f @@ -4224,7 +4223,7 @@ drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f dropAll src/Dodge/Creature/State.hs 125;" f dropExcept src/Dodge/Creature/Action.hs 166;" f -dropInventoryPath src/Dodge/HeldUse.hs 1415;" f +dropInventoryPath src/Dodge/HeldUse.hs 1410;" f dropItem src/Dodge/Creature/Action.hs 172;" f dropper src/Dodge/Item/Scope.hs 76;" f drumMag src/Dodge/Item/Ammo.hs 33;" f @@ -4272,7 +4271,7 @@ endCombineRegex src/Dodge/Update/Input/InGame.hs 267;" f endRegex src/Dodge/Update/Input/InGame.hs 254;" f energyBallAt src/Dodge/EnergyBall.hs 64;" f enterCombineInv src/Dodge/DisplayInventory.hs 323;" f -epText src/Dodge/Inventory/SelectionList.hs 75;" f +epText src/Dodge/Inventory/SelectionList.hs 76;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 5;" f eqSiteToPositions src/Dodge/Inventory/RBList.hs 77;" f @@ -4308,8 +4307,8 @@ extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f extendAway src/Dodge/Placement/Instance/LightSource.hs 200;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f extraPics src/Dodge/Render/ShapePicture.hs 73;" f -extraWeaponLinks src/Dodge/Item/Grammar.hs 126;" f -extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 135;" f +extraWeaponLinks src/Dodge/Item/Grammar.hs 125;" f +extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 134;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 65;" f facesToVF src/Polyhedra/Geodesic.hs 69;" f @@ -4341,7 +4340,7 @@ firstWorldLoad appDodge/Main.hs 77;" f fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 38;" f -flameMuzzles src/Dodge/HeldUse.hs 298;" f +flameMuzzles src/Dodge/HeldUse.hs 296;" f flameShield src/Dodge/Item/Equipment.hs 33;" f flameSize src/Dodge/Flame/Size.hs 5;" f flameSpitter src/Dodge/Item/Held/SprayGuns.hs 23;" f @@ -4349,7 +4348,7 @@ flameThrower src/Dodge/Item/Held/SprayGuns.hs 64;" f flameTorrent src/Dodge/Item/Held/SprayGuns.hs 32;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 48;" f flamerPic src/Dodge/Item/Draw/SPic.hs 385;" f -flareCircleAt src/Dodge/HeldUse.hs 731;" f +flareCircleAt src/Dodge/HeldUse.hs 727;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 39;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f @@ -4409,14 +4408,14 @@ fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f g src/ShortShow.hs 33;" f gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f -gadgetEffect src/Dodge/HeldUse.hs 46;" f +gadgetEffect src/Dodge/HeldUse.hs 45;" f gameOverMenu src/Dodge/Menu.hs 187;" f gameRoomFromRoom src/Dodge/Layout.hs 161;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 158;" f gameplayMenu src/Dodge/Menu.hs 134;" f gameplayMenuOptions src/Dodge/Menu.hs 137;" f -gasType src/Dodge/HeldUse.hs 1147;" f +gasType src/Dodge/HeldUse.hs 1143;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 22;" f generateGraphs src/Dodge/LevelGen.hs 39;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f @@ -4428,14 +4427,14 @@ geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f getAimZoom src/Dodge/Update/Camera.hs 135;" f -getAmmoLinks src/Dodge/Item/Grammar.hs 142;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 141;" f getArguments src/Dodge/Update/Scroll.hs 178;" f getArguments' src/Dodge/Update/Scroll.hs 166;" f -getAttachedSFLink src/Dodge/HeldUse.hs 803;" f -getAutoSpringLinks src/Dodge/Item/Grammar.hs 121;" f +getAttachedSFLink src/Dodge/HeldUse.hs 799;" f +getAutoSpringLinks src/Dodge/Item/Grammar.hs 120;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 171;" f -getBulletType src/Dodge/HeldUse.hs 931;" f +getBulletType src/Dodge/HeldUse.hs 927;" f getCloseObj src/Dodge/Update/Input/InGame.hs 515;" f getCommands src/Dodge/Terminal.hs 117;" f getCommandsHelp src/Dodge/Terminal.hs 75;" f @@ -4443,17 +4442,17 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 45;" f getDamageCoding src/Dodge/Terminal.hs 177;" f getDistortions src/Dodge/Render.hs 411;" f getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1310;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1305;" f getInventoryPath src/Dodge/Inventory/Path.hs 8;" f -getItemValue src/Dodge/Inventory/SelectionList.hs 143;" f -getLaserColor src/Dodge/HeldUse.hs 747;" f -getLaserDamage src/Dodge/HeldUse.hs 744;" f -getLaserPhaseV src/Dodge/HeldUse.hs 741;" f +getItemValue src/Dodge/Inventory/SelectionList.hs 144;" f +getLaserColor src/Dodge/HeldUse.hs 743;" f +getLaserDamage src/Dodge/HeldUse.hs 740;" f +getLaserPhaseV src/Dodge/HeldUse.hs 737;" f getLinksOfType src/Dodge/RoomLink.hs 39;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 11;" f getMenuMouseContext src/Dodge/Update.hs 392;" f getNodePos src/Dodge/Path.hs 31;" f -getPJStabiliser src/Dodge/HeldUse.hs 1297;" f +getPJStabiliser src/Dodge/HeldUse.hs 1292;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 8;" f getRootItemBounds src/Dodge/Render/HUD.hs 95;" f @@ -4463,7 +4462,7 @@ getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 126;" f getTiles src/Dodge/Layout.hs 208;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f -getVolleyBurst src/Dodge/HeldUse.hs 123;" f +getVolleyBurst src/Dodge/HeldUse.hs 121;" f getWallSPic src/Dodge/Render/Walls.hs 51;" f getWindowSize src/Dodge/WindowSize.hs 5;" f gimbal src/Dodge/Item/Scope.hs 153;" f @@ -4513,7 +4512,7 @@ hackOutline src/Dodge/Render/Outline.hs 5;" f halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 38;" f -hammerCheck src/Dodge/HeldUse.hs 64;" f +hammerCheck src/Dodge/HeldUse.hs 63;" f handHandleOrient src/Dodge/Item/HeldOffset.hs 62;" f handOrient src/Dodge/Item/HeldOffset.hs 38;" f handleEvent src/Dodge/Event.hs 27;" f @@ -4530,7 +4529,7 @@ handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f hasButtonLOS src/Dodge/Base/Collide.hs 211;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f -hasFrontArmour src/Dodge/Creature/Test.hs 119;" f +hasFrontArmour src/Dodge/Creature/Test.hs 118;" f hasLOS src/Dodge/Base/Collide.hs 204;" f hasLOSIndirect src/Dodge/Base/Collide.hs 219;" f hat src/Dodge/Item/Equipment.hs 76;" f @@ -4546,20 +4545,20 @@ healthTest src/Dodge/Room/LasTurret.hs 95;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f heldAimStance src/Dodge/Item/AimStance.hs 23;" f heldAimZoom src/Dodge/Update/Camera.hs 140;" f -heldEffect src/Dodge/HeldUse.hs 61;" f -heldEffectMuzzles src/Dodge/HeldUse.hs 128;" f +heldEffect src/Dodge/HeldUse.hs 60;" f +heldEffectMuzzles src/Dodge/HeldUse.hs 126;" f heldHandlePos src/Dodge/Item/HeldOffset.hs 89;" f heldInfo src/Dodge/Item/Info.hs 90;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 18;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 177;" f -heldItemInvLock src/Dodge/HeldUse.hs 479;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1028;" f -heldItemMuzzles src/Dodge/HeldUse.hs 157;" f -heldItemRifling src/Dodge/HeldUse.hs 1072;" f +heldItemInvLock src/Dodge/HeldUse.hs 477;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1024;" f +heldItemMuzzles src/Dodge/HeldUse.hs 155;" f +heldItemRifling src/Dodge/HeldUse.hs 1068;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 223;" f heldItemWeight src/Dodge/Creature/Statistics.hs 71;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f -heldTorqueAmount src/Dodge/HeldUse.hs 625;" f +heldTorqueAmount src/Dodge/HeldUse.hs 623;" f heldTriggerType src/Dodge/BaseTriggerType.hs 23;" f helpCommand src/Dodge/Terminal.hs 66;" f helpPoly3D src/Polyhedra.hs 125;" f @@ -4575,9 +4574,9 @@ holdForm src/Dodge/Creature/Boid.hs 137;" f holsterWeapon src/Dodge/Creature/Volition.hs 14;" f homingModule src/Dodge/Item/Scope.hs 48;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f -hotkeyToChar src/Dodge/Inventory/SelectionList.hs 184;" f +hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 75;" f -hotkeyToString src/Dodge/Inventory/SelectionList.hs 181;" f +hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f humanoidAIList src/Dodge/Humanoid.hs 182;" f iShape src/Dodge/Placement/Instance/LightSource.hs 73;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f @@ -4645,21 +4644,22 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 311;" f interweave src/Justify.hs 17;" f introScan src/Dodge/Item/Scope.hs 57;" f -introScanValue src/Dodge/Inventory/SelectionList.hs 79;" f +introScanValue src/Dodge/Inventory/SelectionList.hs 80;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 277;" f +invAdj src/Dodge/Item/Grammar.hs 279;" f invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f -invDT src/Dodge/Item/Grammar.hs 254;" f +invDT src/Dodge/Item/Grammar.hs 253;" f +invDT' src/Dodge/Item/Grammar.hs 261;" f invDimColor src/Dodge/DisplayInventory.hs 192;" f invHead src/Dodge/Render/HUD.hs 405;" f +invIMDT src/Dodge/Item/Grammar.hs 295;" f +invIndents src/Dodge/Item/Grammar.hs 307;" f invItemLocUpdate src/Dodge/Creature/State.hs 153;" f -invLDT src/Dodge/Item/Grammar.hs 249;" f -invLDT' src/Dodge/Item/Grammar.hs 259;" f +invLDT src/Dodge/Item/Grammar.hs 248;" f invRootItemEffs src/Dodge/Creature/State.hs 146;" f -invRootMap src/Dodge/Item/Grammar.hs 266;" f -invRootTrees src/Dodge/Item/Grammar.hs 287;" f -invRootTrees' src/Dodge/Item/Grammar.hs 293;" f +invRootMap src/Dodge/Item/Grammar.hs 268;" f +invRootTrees src/Dodge/Item/Grammar.hs 289;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f invSetSelection src/Dodge/Inventory.hs 185;" f invSetSelectionPos src/Dodge/Inventory.hs 193;" f @@ -4676,8 +4676,8 @@ invertIntMap src/Multiset.hs 67;" f invertInventoryToMap src/Dodge/Combine.hs 57;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f -isAmmoIntLink src/Dodge/HeldUse.hs 757;" f -isAnimate src/Dodge/Creature/Test.hs 145;" f +isAmmoIntLink src/Dodge/HeldUse.hs 753;" f +isAnimate src/Dodge/Creature/Test.hs 144;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 74;" f isElectrical src/Dodge/Machine/Update.hs 80;" f @@ -4713,10 +4713,10 @@ itemBlips src/Dodge/RadarSweep.hs 93;" f itemBulkiness src/Dodge/Creature/YourControl.hs 172;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 61;" f -itemDetectorEffect src/Dodge/HeldUse.hs 812;" f -itemDisplay src/Dodge/Inventory/SelectionList.hs 49;" f +itemDetectorEffect src/Dodge/HeldUse.hs 808;" f +itemDisplay src/Dodge/Inventory/SelectionList.hs 50;" f itemEquipPict src/Dodge/Item/Draw.hs 19;" f -itemExternalValue src/Dodge/Inventory/SelectionList.hs 84;" f +itemExternalValue src/Dodge/Inventory/SelectionList.hs 85;" f itemFromAmmoMag src/Dodge/Item.hs 41;" f itemFromAttachType src/Dodge/Item.hs 50;" f itemFromBase src/Dodge/Item.hs 18;" f @@ -4725,20 +4725,20 @@ itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 20;" f itemInternalValue src/Dodge/Item/Display.hs 34;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemInvLock src/Dodge/HeldUse.hs 474;" f -itemMuzzles src/Dodge/HeldUse.hs 142;" f +itemInvLock src/Dodge/HeldUse.hs 472;" f +itemMuzzles src/Dodge/HeldUse.hs 140;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f itemSPic src/Dodge/Item/Draw/SPic.hs 33;" f itemScan src/Dodge/Item/Scope.hs 63;" f itemScroll src/Dodge/Update/Scroll.hs 52;" f -itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 120;" f -itemScrollValue src/Dodge/Inventory/SelectionList.hs 147;" f -itemSidePush src/Dodge/HeldUse.hs 420;" f +itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 121;" f +itemScrollValue src/Dodge/Inventory/SelectionList.hs 148;" f +itemSidePush src/Dodge/HeldUse.hs 418;" f itemString src/Dodge/Item/Display.hs 56;" f -itemToBreakLists src/Dodge/Item/Grammar.hs 56;" f -itemToBreakLists' src/Dodge/Item/Grammar.hs 65;" f -itemToFunction src/Dodge/Item/Grammar.hs 148;" f +itemToBreakLists src/Dodge/Item/Grammar.hs 55;" f +itemToBreakLists' src/Dodge/Item/Grammar.hs 64;" f +itemToFunction src/Dodge/Item/Grammar.hs 147;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 24;" f itemTriggerType src/Dodge/BaseTriggerType.hs 15;" f itemWeight src/Dodge/Creature/Statistics.hs 66;" f @@ -4750,7 +4750,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 239;" f +joinItemsInList src/Dodge/Item/Grammar.hs 238;" f joystick src/Dodge/Item/Scope.hs 149;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f @@ -4800,10 +4800,10 @@ ldtToIM src/Dodge/DoubleTree.hs 219;" f ldtToIndentList src/Dodge/DoubleTree.hs 222;" f ldtToLoc src/Dodge/DoubleTree.hs 268;" f left src/DoubleStack.hs 16;" f -leftChildList src/Dodge/Item/Grammar.hs 213;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 199;" f +leftChildList src/Dodge/Item/Grammar.hs 212;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 198;" f leftPad src/Padding.hs 15;" f -leftRightCombine src/Dodge/Item/Grammar.hs 225;" f +leftRightCombine src/Dodge/Item/Grammar.hs 224;" f legsSPic src/Dodge/Item/Draw/SPic.hs 475;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4818,7 +4818,7 @@ lineCol src/Picture/Base.hs 230;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 126;" f -lineOutputTerminal src/Dodge/WorldEffect.hs 73;" f +lineOutputTerminal src/Dodge/WorldEffect.hs 74;" f lineSplit src/Justify.hs 26;" f lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 148;" f @@ -4837,7 +4837,7 @@ lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 394;" f lnkPosDir src/Dodge/RoomLink.hs 97;" f loadDodgeConfig src/Dodge/Config/Load.hs 9;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f -loadMuzzle src/Dodge/HeldUse.hs 670;" f +loadMuzzle src/Dodge/HeldUse.hs 667;" f loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f @@ -4845,7 +4845,10 @@ loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f loadingScreen src/Dodge/Concurrent.hs 56;" f loadingScreen src/Dodge/Menu/Loading.hs 8;" f loadme src/Dodge/Debug/Terminal.hs 139;" f -locGoHelp src/Dodge/DoubleTree.hs 324;" f +locDTGoHelp src/Dodge/DoubleTree.hs 342;" f +locDTGoLeft src/Dodge/DoubleTree.hs 323;" f +locDTGoRight src/Dodge/DoubleTree.hs 328;" f +locGoHelp src/Dodge/DoubleTree.hs 334;" f locGoLeft src/Dodge/DoubleTree.hs 313;" f locGoRight src/Dodge/DoubleTree.hs 318;" f locLDTToLocDT src/Dodge/DoubleTree.hs 19;" f @@ -4884,7 +4887,7 @@ machineAddSound src/Dodge/Machine.hs 49;" f machinePistol src/Dodge/Item/Held/Stick.hs 52;" f machineUpdateDeathEff src/Dodge/Machine.hs 34;" f machineUpdateLiveDieEff src/Dodge/Machine.hs 16;" f -magAmmoParams src/Dodge/HeldUse.hs 952;" f +magAmmoParams src/Dodge/HeldUse.hs 948;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 11;" f magShield src/Dodge/Item/Equipment.hs 27;" f magV src/Geometry/Vector.hs 171;" f @@ -4899,7 +4902,7 @@ makeAttach src/Dodge/Item/Attach.hs 10;" f makeBlip src/Dodge/RadarSweep.hs 69;" f makeBlockDebris src/Dodge/Block/Debris.hs 28;" f makeBoolOption src/Dodge/Menu/OptionType.hs 8;" f -makeBullet src/Dodge/HeldUse.hs 1009;" f +makeBullet src/Dodge/HeldUse.hs 1005;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeByteStringShaderUsingVAO src/Shader/Compile.hs 128;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f @@ -4925,7 +4928,7 @@ makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 11;" f makeGrid src/Grid.hs 46;" f makeIntInterval src/Dodge/Zoning/Base.hs 35;" f makeMovingEB src/Dodge/EnergyBall.hs 74;" f -makeMuzzleFlare src/Dodge/HeldUse.hs 691;" f +makeMuzzleFlare src/Dodge/HeldUse.hs 687;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 35;" f makePathBetweenPs src/Dodge/Path.hs 54;" f @@ -4980,11 +4983,11 @@ mcProximitySensorUpdate src/Dodge/Machine/Update.hs 130;" f mcSPic src/Dodge/Render/ShapePicture.hs 111;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 93;" f mcSensorUpdate src/Dodge/Machine/Update.hs 125;" f -mcShootAuto src/Dodge/HeldUse.hs 1202;" f -mcShootLaser src/Dodge/HeldUse.hs 1195;" f +mcShootAuto src/Dodge/HeldUse.hs 1198;" f +mcShootLaser src/Dodge/HeldUse.hs 1191;" f mcTriggerVal src/Dodge/Machine/Update.hs 99;" f mcTypeUpdate src/Dodge/Machine/Update.hs 28;" f -mcUseHeld src/Dodge/HeldUse.hs 1116;" f +mcUseHeld src/Dodge/HeldUse.hs 1112;" f mcUseItem src/Dodge/Machine/Update.hs 85;" f medkit src/Dodge/Item/Consumable.hs 8;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f @@ -5077,7 +5080,7 @@ multiArrow src/Picture/Composite.hs 11;" f multiLookupTrie src/SimpleTrie.hs 34;" f multiLookupTrieI src/SimpleTrie.hs 43;" f muout src/Dodge/RoomLink.hs 129;" f -muzFlareAt src/Dodge/HeldUse.hs 717;" f +muzFlareAt src/Dodge/HeldUse.hs 713;" f mvButton src/Dodge/Placement/PlaceSpot.hs 176;" f mvCr src/Dodge/Placement/PlaceSpot.hs 186;" f mvFS src/Dodge/Placement/PlaceSpot.hs 189;" f @@ -5138,7 +5141,7 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 683;" f onEquipWristShield src/Dodge/Equipment.hs 37;" f onRemoveWristShield src/Dodge/Equipment.hs 24;" f onXY src/Geometry/Vector3D.hs 130;" f -oneH src/Dodge/Creature/Test.hs 104;" f +oneH src/Dodge/Creature/Test.hs 103;" f openConsole src/Dodge/Update.hs 131;" f optionMenu src/Dodge/Menu.hs 108;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 52;" f @@ -5153,9 +5156,9 @@ orderAroundFirst src/Geometry/Polygon.hs 82;" f orderAroundFirstReverse src/Geometry/Polygon.hs 78;" f orderPolygon src/Geometry/Polygon.hs 87;" f orderPolygonAround src/Geometry/Polygon.hs 70;" f -orientAttachment src/Dodge/Item/Orientation.hs 31;" f -orientByParentChSF src/Dodge/Item/Orientation.hs 24;" f -orientChild src/Dodge/Item/Orientation.hs 13;" f +orientAttachment src/Dodge/Item/Orientation.hs 32;" f +orientByParentChSF src/Dodge/Item/Orientation.hs 25;" f +orientChild src/Dodge/Item/Orientation.hs 14;" f orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f outLink src/Dodge/RoomLink.hs 105;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f @@ -5376,8 +5379,8 @@ propSPic src/Dodge/Prop/Draw.hs 15;" f propSetToggleAnd src/Dodge/Prop/Update.hs 41;" f propUpdateIf src/Dodge/Prop/Update.hs 25;" f propUpdatePosition src/Dodge/Prop/Update.hs 30;" f -propagateOrientation src/Dodge/Item/Orientation.hs 42;" f -propagateOrientation' src/Dodge/Item/Orientation.hs 48;" f +propagateOrientation src/Dodge/Item/Orientation.hs 43;" f +propagateOrientation' src/Dodge/Item/Orientation.hs 49;" f ps0 src/Dodge/LevelGen/PlacementHelper.hs 51;" f ps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 79;" f ps0PushPSw src/Dodge/LevelGen/PlacementHelper.hs 83;" f @@ -5473,7 +5476,7 @@ randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 195;" f readSaveSlot src/Dodge/Save.hs 45;" f -recoilAmount src/Dodge/HeldUse.hs 504;" f +recoilAmount src/Dodge/HeldUse.hs 502;" f rectNSWE src/Geometry/Polygon.hs 13;" f rectVV src/Geometry/Polygon.hs 38;" f rectWH src/Geometry/Polygon.hs 17;" f @@ -5481,7 +5484,8 @@ rectXH src/Geometry/Polygon.hs 32;" f rectXY src/Geometry/Polygon.hs 35;" f rectanglePairs src/Dodge/LevelGen/DoorPane.hs 7;" f red src/Color.hs 14;" f -reduceLocLDT src/Dodge/DoubleTree.hs 369;" f +reduceLocDT src/Dodge/DoubleTree.hs 392;" f +reduceLocLDT src/Dodge/DoubleTree.hs 387;" f reflDirWall src/Dodge/Base/Wall.hs 16;" f reflVelWall src/Dodge/Base/Wall.hs 24;" f reflVelWallDamp src/Dodge/Base/Wall.hs 20;" f @@ -5500,7 +5504,7 @@ rememberSounds src/Dodge/Creature/Perception.hs 178;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f remoteScreen src/Dodge/Item/Scope.hs 139;" f removeAimPosture src/Dodge/Creature/YourControl.hs 147;" f -removeAmmoFromMag src/Dodge/HeldUse.hs 919;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 915;" f removeDot src/ShortShow.hs 29;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f @@ -5545,8 +5549,8 @@ rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 72;" f rifle src/Dodge/Item/Held/Cane.hs 19;" f right src/DoubleStack.hs 16;" f -rightChildList src/Dodge/Item/Grammar.hs 219;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 206;" f +rightChildList src/Dodge/Item/Grammar.hs 218;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 205;" f rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5781,15 +5785,15 @@ shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f shineTargetLaser src/Dodge/Creature/State.hs 293;" f shineTorch src/Dodge/Creature/State.hs 333;" f -shootBullet src/Dodge/HeldUse.hs 994;" f -shootBullets src/Dodge/HeldUse.hs 984;" f +shootBullet src/Dodge/HeldUse.hs 990;" f +shootBullets src/Dodge/HeldUse.hs 980;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f -shootLaser src/Dodge/HeldUse.hs 898;" f +shootLaser src/Dodge/HeldUse.hs 894;" f shootOutPassage src/Dodge/Room/RezBox.hs 74;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f -shootTeslaArc src/Dodge/HeldUse.hs 1221;" f +shootTeslaArc src/Dodge/HeldUse.hs 1217;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f -shootTractorBeam src/Dodge/HeldUse.hs 845;" f +shootTractorBeam src/Dodge/HeldUse.hs 841;" f shootersRoom src/Dodge/Room/Room.hs 315;" f shootersRoom' src/Dodge/Room/Room.hs 280;" f shootersRoom1 src/Dodge/Room/Room.hs 305;" f @@ -6056,7 +6060,7 @@ tinitusS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 555;" f titleOptionsMenu src/Dodge/Menu.hs 102;" f titleOptionsNoWrite src/Dodge/Menu.hs 105;" f tmUpdate src/Dodge/Update.hs 455;" f -toBinary src/Dodge/Inventory/SelectionList.hs 137;" f +toBinary src/Dodge/Inventory/SelectionList.hs 138;" f toBothLnk src/Dodge/RoomLink.hs 121;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f @@ -6086,12 +6090,12 @@ topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 57;" f torch src/Dodge/Item/Held/Utility.hs 23;" f torchShape src/Dodge/Item/Draw/SPic.hs 267;" f -torqueAmount src/Dodge/HeldUse.hs 620;" f -torqueCr src/Dodge/WorldEffect.hs 66;" f +torqueAmount src/Dodge/HeldUse.hs 618;" f +torqueCr src/Dodge/WorldEffect.hs 67;" f torso src/Dodge/Creature/Picture.hs 99;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f -tractorBeamAt src/Dodge/HeldUse.hs 857;" f +tractorBeamAt src/Dodge/HeldUse.hs 853;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 60;" f tractorGunPic src/Dodge/Item/Draw/SPic.hs 435;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f @@ -6136,7 +6140,7 @@ treeMaxDepthFromTrunk src/Dodge/Layout/Generate.hs 21;" f treePath src/Dodge/Tree/GenerateStructure.hs 13;" f treePaths src/TreeHelp.hs 138;" f treePost src/TreeHelp.hs 45;" f -treeToPotentialFunction src/Dodge/Item/Grammar.hs 182;" f +treeToPotentialFunction src/Dodge/Item/Grammar.hs 181;" f triLootRoom src/Dodge/Room/Treasure.hs 22;" f triggerDoorRoom src/Dodge/Room/Door.hs 30;" f triggerSwitch src/Dodge/Placement/Instance/Button.hs 47;" f @@ -6145,7 +6149,7 @@ triggerSwitchSPicLight src/Dodge/Placement/Instance/Button.hs 31;" f truncFaces src/Polyhedra/Geodesic.hs 53;" f truncate src/Polyhedra/Geodesic.hs 38;" f trunkDepth src/TreeHelp.hs 161;" f -tryAttachItems src/Dodge/Item/Grammar.hs 36;" f +tryAttachItems src/Dodge/Item/Grammar.hs 35;" f tryClickUse src/Dodge/Creature/YourControl.hs 221;" f tryCombine src/Dodge/Update/Input/InGame.hs 526;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 125;" f @@ -6169,8 +6173,8 @@ turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f tweenAngles src/Geometry/Vector.hs 195;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f -twists src/Dodge/Creature/Test.hs 110;" f -twoFlat src/Dodge/Creature/Test.hs 107;" f +twists src/Dodge/Creature/Test.hs 109;" f +twoFlat src/Dodge/Creature/Test.hs 106;" f twoFlatHRot src/Dodge/Item/HeldOffset.hs 81;" f twoHandTwistAmount src/Dodge/Creature/YourControl.hs 150;" f twoRoomPoss src/Dodge/PlacementSpot.hs 147;" f @@ -6178,7 +6182,7 @@ twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 533;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 583;" f twoStepSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 575;" f ubyteSize src/Shader/Parameters.hs 13;" f -ugateCalc src/Dodge/Inventory/SelectionList.hs 108;" f +ugateCalc src/Dodge/Inventory/SelectionList.hs 109;" f uncurryV src/Geometry/Data.hs 66;" f underBarrelSlot src/Dodge/Item/Scope.hs 159;" f unfoldrMID src/MonadHelp.hs 33;" f @@ -6329,24 +6333,24 @@ upperRounded src/Shape.hs 185;" f useBulletPayload src/Dodge/Bullet.hs 113;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f -useGasParams src/Dodge/HeldUse.hs 1121;" f +useGasParams src/Dodge/HeldUse.hs 1117;" f useHotkey src/Dodge/Creature/YourControl.hs 70;" f -useInventoryPath src/Dodge/HeldUse.hs 1446;" f +useInventoryPath src/Dodge/HeldUse.hs 1441;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 18;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 24;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 244;" f -useLoadedAmmo src/Dodge/HeldUse.hs 761;" f +useLoadedAmmo src/Dodge/HeldUse.hs 757;" f useMagShield src/Dodge/Euse.hs 27;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1406;" f +useRewindGun src/Dodge/HeldUse.hs 1401;" f useRewindGun src/Dodge/Luse.hs 40;" f useRoomPosCond src/Dodge/PlacementSpot.hs 178;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 181;" f -useStopWatch src/Dodge/HeldUse.hs 1387;" f +useStopWatch src/Dodge/HeldUse.hs 1382;" f useStopWatch src/Dodge/Luse.hs 21;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 127;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1395;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1390;" f useTimeScrollGun src/Dodge/Luse.hs 29;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 196;" f @@ -6370,7 +6374,7 @@ verticalLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 38;" f verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 24;" f -vgunMuzzles src/Dodge/HeldUse.hs 315;" f +vgunMuzzles src/Dodge/HeldUse.hs 313;" f viewBoundaries src/Dodge/Debug/Picture.hs 304;" f viewClipBounds src/Dodge/Debug/Picture.hs 313;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 186;" f @@ -6382,7 +6386,7 @@ vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 345;" f waistSP src/Dodge/Creature/HandPos.hs 173;" f -walkNozzle src/Dodge/HeldUse.hs 827;" f +walkNozzle src/Dodge/HeldUse.hs 823;" f walkableNodeNear src/Dodge/Path.hs 48;" f wallBlips src/Dodge/RadarSweep.hs 98;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 52;" f @@ -6390,7 +6394,7 @@ wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f wallsFromRooms src/Dodge/Layout.hs 146;" f wallsToDraw src/Dodge/Render/Walls.hs 17;" f -warmupSound src/Dodge/HeldUse.hs 1440;" f +warmupSound src/Dodge/HeldUse.hs 1435;" f warningRooms src/Dodge/Room/Warning.hs 28;" f wasdAim src/Dodge/Creature/YourControl.hs 126;" f wasdDir src/Dodge/WASD.hs 17;" f