From b7d949c0353143ac4b7fa2cc67731a3064da24d2 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 30 Sep 2024 21:11:56 +0100 Subject: [PATCH] Draw cursor when targeting with HUD --- ghcidOutput | 21 +--- src/Dodge/Creature/Picture.hs | 2 +- src/Dodge/Data/ComposedItem.hs | 1 - src/Dodge/Item/Draw.hs | 6 +- src/Dodge/Item/Draw/SPic.hs | 22 +++- src/Dodge/Item/Grammar.hs | 59 ++--------- src/Dodge/Machine/Draw.hs | 5 +- src/Dodge/Render/ShapePicture.hs | 23 +++-- src/Dodge/Targeting/Draw.hs | 58 +++-------- src/Dodge/WorldEffect.hs | 2 +- tags | 166 +++++++++++++++---------------- 11 files changed, 146 insertions(+), 219 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index bcce37e1a..091ac7c87 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1,20 +1 @@ -/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:39:1-25: warning: [-Wunused-top-binds] - Defined but not used: ‘basePartiallyComposedItem’ - | -39 | basePartiallyComposedItem itm = case itm ^. itType of - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:111:1-16: warning: [-Wunused-top-binds] - Defined but not used: ‘ammoComposedItem’ - | -111 | ammoComposedItem itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do - | ^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:165:1-6: warning: [-Wunused-top-binds] - Defined but not used: ‘invLDT’ - | -165 | invLDT = - | ^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Data/ComposedItem.hs:13:1-43: warning: [-Wunused-imports] - The import of ‘Dodge.Data.Item.Use.Consumption.Ammo’ is redundant - | -13 | import Dodge.Data.Item.Use.Consumption.Ammo - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +All good (607 modules, at 21:11:41) diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 4de39a3b1..01da4f4a6 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -173,4 +173,4 @@ shoulderSH = translateSHz 20 drawEquipment :: Creature -> SPic {-# INLINE drawEquipment #-} -drawEquipment cr = foldMap (itemEquipPict cr) (invLDT' $ _crInv cr) +drawEquipment cr = foldMap (itemEquipPict cr . fmap (\(a,b,_) -> (a,b))) (invLDT'' $ _crInv cr) diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 252831f0b..95cfb31bc 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -10,7 +10,6 @@ import Data.Aeson import Data.Aeson.TH -- it would be nice not to have to import the following... import Dodge.Data.Item -import Dodge.Data.Item.Use.Consumption.Ammo import Geometry.Data import Linear.Quaternion (Quaternion (..)) diff --git a/src/Dodge/Item/Draw.hs b/src/Dodge/Item/Draw.hs index 942d568c3..aed6aba07 100644 --- a/src/Dodge/Item/Draw.hs +++ b/src/Dodge/Item/Draw.hs @@ -16,16 +16,16 @@ import Dodge.Item.Draw.SPic import Dodge.Item.HeldOffset import ShapePicture -itemEquipPict :: Creature -> LabelDoubleTree ComposeLinkType ComposedItem +itemEquipPict :: Creature -> LabelDoubleTree ItemLink ComposedItem -> SPic itemEquipPict cr itmtree = case itm ^. itUse of UseHeld{} | itm ^? itLocation . ilIsRoot == Just True - -> overPosSP (heldItemOffset itm cr) (itemSPic itmtree) + -> overPosSP (heldItemOffset itm cr) (itemTreeSPic itmtree) ituse -> fromMaybe mempty $ do attachpos <- ituse ^? equipEffect . eeAttachPos i <- itm ^? itLocation . ilInvID epos <- cr ^? crInvEquipped . ix i - return $ equipPosition epos cr attachpos (itemSPic itmtree) + return $ equipPosition epos cr attachpos (itemSPic itm) where itm = itmtree ^. ldtValue . _1 diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 3c574b785..600ef4c29 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -1,7 +1,10 @@ module Dodge.Item.Draw.SPic ( itemSPic, + itemTreeSPic, ) where +import Data.Maybe +import qualified Linear.Quaternion as Q import Dodge.Data.ComposedItem import Dodge.Data.DoubleTree import Color @@ -26,8 +29,19 @@ import ShapePicture -- hit <- itm ^? itType . iyBase . ibtHeld -- return mempty -itemSPic :: LabelDoubleTree ComposeLinkType ComposedItem -> SPic -itemSPic itmtree = case it ^. itType of +itemTreeSPic :: LabelDoubleTree ItemLink ComposedItem -> SPic +itemTreeSPic (LDT (itm,_) l r) = itemSPic itm + <> foldMap (itemRotTreeSPic itm) (l <> r) + +itemRotTreeSPic :: Item -> (ItemLink,LabelDoubleTree ItemLink ComposedItem) -> SPic +itemRotTreeSPic par (il,t) = fromMaybe mempty $ do + (p,q) <- _iatOrient il par itm + return $ (translateSP p $ overPosSP (Q.rotate q) $ itemTreeSPic t) + where + itm = t ^. ldtValue . _1 + +itemSPic :: Item -> SPic +itemSPic it = case it ^. itType of CRAFT _ -> defSPic HELD ht -> heldItemSPic ht it LEFT lt -> leftItemSPic lt it @@ -37,8 +51,6 @@ itemSPic itmtree = case it ^. itType of AMMOMAG {} -> defSPic TARGETING {} -> defSPic BULLETMOD {} -> defSPic - where - it = itmtree ^. ldtValue . _1 equipItemSPic :: EquipItemType -> Item -> SPic equipItemSPic et _ = case et of @@ -531,3 +543,5 @@ keyPic = legsSPic :: Color -> SPic legsSPic col = noPic $ translateSH (V3 0 4 0) $ colorSH col $ upperPrismPolyST 3 $ rectWH 2 2 + + diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 2e472561f..df774f58e 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -1,5 +1,6 @@ module Dodge.Item.Grammar ( invLDT', + invLDT'', invTrees, invIndentIM, invAdj, @@ -21,9 +22,7 @@ import Dodge.DoubleTree import ListHelp -useBreakListsLinkTest :: [(ItemStructuralFunction,a)] - -> [(ItemStructuralFunction,a)] - -> LinkTest a +useBreakListsLinkTest :: [(ItemStructuralFunction,a)] -> [(ItemStructuralFunction,a)] -> LinkTest a useBreakListsLinkTest llist rlist = LTest ltest rtest where ltest (_,sf,_) = do @@ -35,35 +34,13 @@ useBreakListsLinkTest llist rlist = LTest ltest rtest (_,linktype) <- safeHead xs return $ LUpdate linktype (set _3 (useBreakListsLinkTest llist (tail xs))) id -basePartiallyComposedItem :: Item -> PartiallyComposedItem ComposeLinkType -basePartiallyComposedItem itm = case itm ^. itType of - HELD _ -> (itm, WeaponPlatformSF, useBreakListsLinkTest - (map (\(i,a) -> (AmmoMagSF a,AmmoInLink i a)) (IM.toList $ itm ^. itUse . heldAmmoTypes)) - [(WeaponTargetingSF,WeaponTargetingLink), (WeaponScopeSF,WeaponScopeLink)] - ) - AMMOMAG _ -> ammoComposedItem itm - TARGETING {} -> (itm,WeaponTargetingSF, useBreakListsLinkTest [(AugmentedHUDSF,AugmentedHUDLink)] []) - ATTACH ZOOMSCOPE -> (itm,WeaponScopeSF, LTest (const Nothing) (const Nothing)) - ATTACH HOMINGMODULE -> (itm,AmmoTargetingSF ProjectileAmmo, LTest (const Nothing) (const Nothing)) - ATTACH AUGMENTEDHUD -> nolinks AugmentedHUDSF - BULLETMOD BulletModTrajectory {} -> nolinks $ AmmoTargetingSF BulletAmmo - BULLETMOD BulletModPayload {} -> nolinks $ AmmoPayloadSF BulletAmmo - BULLETMOD BulletModEffect {} -> nolinks $ AmmoEffectSF BulletAmmo - ATTACH REMOTESCREEN -> nolinks RemoteScreenSF - ATTACH BULLETSYNTHESIZER -> (itm,AmmoModifierSF BulletAmmo, LTest (const Nothing) (const Nothing)) - LEFT {} -> isolate - EQUIP {} -> isolate - CONSUMABLE {} -> isolate - CRAFT {} -> isolate --- _ -> - where - nolinks x = (itm,x, LTest (const Nothing) (const Nothing)) - isolate = (itm,UncomposableIsolateSF, LTest (const Nothing) (const Nothing)) basePartiallyComposedItem' :: Item -> PartiallyComposedItem ItemLink basePartiallyComposedItem' itm = case itm ^. itType of HELD _ -> (itm, WeaponPlatformSF, useBreakListsLinkTest - (map (\(i,a) -> (AmmoMagSF a, ILink (AmmoInLink i a) (c (V3 5 2 0) lhs))) + (map (\(i,a) -> (AmmoMagSF a, ILink (AmmoInLink i a) (c (V3 7 (-2) 0) rhs + ) + )) (IM.toList $ itm ^. itUse . heldAmmoTypes)) [noa WeaponTargetingSF WeaponTargetingLink, noa WeaponScopeSF WeaponScopeLink] ) @@ -85,8 +62,7 @@ basePartiallyComposedItem' itm = case itm ^. itType of where noa x y = (x, ILink y (const (const Nothing))) c x y _ _ = Just (x,y) - lhs = Q.axisAngle (V3 1 0 0) pi --- rhs = Q.axisAngle (V3 1 0 0) 0 + rhs = Q.axisAngle (V3 1 0 0) 0 nolinks x = (itm,x, LTest (const Nothing) (const Nothing)) isolate = (itm,UncomposableIsolateSF, LTest (const Nothing) (const Nothing)) @@ -107,21 +83,6 @@ ammoComposedItem' itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do where noa x y = (x, ILink y (const (const Nothing))) -ammoComposedItem :: Item -> PartiallyComposedItem ComposeLinkType -ammoComposedItem itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do - atype <- itm ^? itUse . amagType - return (itm - , AmmoMagSF atype - , useBreakListsLinkTest - [(AmmoModifierSF atype, AmmoModLink) - ,(AmmoTargetingSF atype, AmmoTargetingLink) - ,(AmmoPayloadSF atype, AmmoPayloadLink) - ,(AmmoEffectSF atype, AmmoEffectLink) - ,(RemoteScreenSF, RemoteScreenLink) - ] - [] - ) - type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a) leftIsParentCombine :: LDTComb (PartiallyComposedItem a) a @@ -161,18 +122,12 @@ joinItemsInList f xs = snd $ h (xs, []) Nothing -> h (ys, y : z : zs) Just w -> h (w : ys, zs) -invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType (PartiallyComposedItem ComposeLinkType)] -invLDT = - joinItemsInList (leftRightCombine leftIsParentCombine rightIsParentCombine) . IM.elems - . fmap (singleLDT . basePartiallyComposedItem) - invLDT'' :: IM.IntMap Item -> [LabelDoubleTree ItemLink (PartiallyComposedItem ItemLink)] invLDT'' = joinItemsInList (leftRightCombine leftIsParentCombine rightIsParentCombine) . IM.elems . fmap (singleLDT . basePartiallyComposedItem') invLDT' :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType ComposedItem] ---invLDT' = map (fmap (\(x,y,_) -> (x,y))) . invLDT invLDT' = map (first _iatType . second (\(x,y,_) -> (x,y))) . invLDT'' -- this assumes the creature inventory is well formed, specifically the @@ -206,7 +161,7 @@ invIndentIM :: IM.IntMap Item -> IM.IntMap (Item, Int, LabelDoubleTreeNodeType C invIndentIM = IM.fromAscList . zip [0 ..] . reverse . map (over _1 (^. _1)) . concatMap ldtToIndentList . invLDT' --- returns an intmap with trees for all items, including non-roots +-- returns an intmap with trees for all root items invTrees :: IM.IntMap Item -> IM.IntMap (LabelDoubleTree ComposeLinkType Item) invTrees = IM.unions . map (ldtToIM getindex . fmap (^. _1)) . invLDT' where diff --git a/src/Dodge/Machine/Draw.hs b/src/Dodge/Machine/Draw.hs index abf91ca53..afeb3cef6 100644 --- a/src/Dodge/Machine/Draw.hs +++ b/src/Dodge/Machine/Draw.hs @@ -2,8 +2,6 @@ module Dodge.Machine.Draw ( drawMachine ) where -import Dodge.Data.ComposedItem -import Dodge.DoubleTree import Dodge.Data.Machine import Dodge.Item.Draw.SPic import Dodge.Item.HeldOffset @@ -60,10 +58,9 @@ drawBaseMachine h mc = $ _mcWidth mc drawTurret :: Turret -> Machine -> SPic -drawTurret tu mc = overPosSP (turretItemOffset itm tu mc) (itemSPic ittree) +drawTurret tu mc = overPosSP (turretItemOffset itm tu mc) (itemSPic itm) where itm = _tuWeapon tu - ittree = singleLDT (itm,UncomposableIsolateSF) sensorSPic :: (PaletteColor, DecorationShape) -> Machine -> SPic sensorSPic (pc, ds) mc = diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index 3f2d2b57a..435967df5 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -2,8 +2,10 @@ module Dodge.Render.ShapePicture ( worldSPic, ) where -import Dodge.DoubleTree +import Control.Applicative +import Dodge.Data.DoubleTree import Dodge.Data.ComposedItem +import Dodge.Item.Grammar import NewInt import Dodge.Render.List import Control.Lens @@ -37,7 +39,7 @@ worldSPic cfig u = <> foldup btSPic (filtOn _btPos _buttons) <> foldup mcSPic (filtOn _mcPos _machines) <> aimDelaySweep w - <> anyTargeting cfig w + <> anyTargeting w where w = _uvWorld u foldup = foldMap' @@ -70,9 +72,18 @@ drawSweep cr w = fromMaybe mempty $ do theinput = w ^. input mwp = mouseWorldPos theinput campos -anyTargeting :: Configuration -> World -> SPic -anyTargeting _ _ = mempty ---anyTargeting cfig w = fromMaybe mempty $ do +-- assume for now that targeting is above the root, +-- and the augmented hud is above that +anyTargeting :: World -> SPic +anyTargeting w = fromMaybe mempty $ do + cr <- w ^? cWorld . lWorld . creatures . ix 0 + itinvid <- cr ^? crManipulation . manObject . imRootItem + itmtree <- invTrees (_crInv cr) ^? ix itinvid + ttree <- lookup WeaponTargetingLink (itmtree ^. ldtRight) + _ <- lookup AugmentedHUDLink (ttree ^. ldtLeft) + <|> lookup AugmentedHUDLink (ttree ^. ldtRight) + return (mempty , drawTargeting (ttree ^. ldtValue) w) + -- tt <- cr ^? crTargeting . ctType . _Just -- return $ noShape $ drawTargeting tt cr cfig w -- where @@ -164,7 +175,7 @@ floorItemSPic :: FloorItem -> SPic floorItemSPic flit = uncurryV translateSPxy (_flItPos flit) $ rotateSP (_flItRot flit) - (itemSPic $ singleLDT ((_flIt flit),UncomposableIsolateSF)) + (itemSPic $ _flIt flit) btSPic :: Button -> SPic btSPic bt = diff --git a/src/Dodge/Targeting/Draw.hs b/src/Dodge/Targeting/Draw.hs index b7ffa4727..a63c96b40 100644 --- a/src/Dodge/Targeting/Draw.hs +++ b/src/Dodge/Targeting/Draw.hs @@ -2,8 +2,9 @@ module Dodge.Targeting.Draw ( drawTargeting, ) where ---import Data.Maybe ---import Dodge.Base +import Dodge.Base.Coordinate +import Data.Maybe +import Control.Lens import Dodge.Data.Universe import Geometry.Data --import Geometry.Vector @@ -11,40 +12,17 @@ import Geometry.Data import Picture --import ShortShow -drawTargeting :: TargetingType -> Creature -> Configuration -> World -> Picture -drawTargeting td = case td of - TargetRBCreature -> targetRBCreatureDraw - TARGETLASER -> targetSimpleDraw - TargetRBPress -> targetSimpleDraw - TargetCursor -> targetSimpleDraw - -targetSimpleDraw :: Creature -> Configuration -> World -> Picture -targetSimpleDraw = targetDraw activeTargetCursorPic - ---targetDistanceDraw cr _ w = mempty --- fromMaybe mempty $ do --- p <- cr ^? crTargeting . ctPos . _Just --- let p1 = worldPosToScreen cam p --- mwp = mouseWorldPos (w ^. input) (w ^. wCam) --- p2 = worldPosToScreen cam mwp --- thecol = if dist p mwp > 100 then red else white --- return . --- setLayer FixedCoordLayer $ --- color thecol $ --- line [p1, p2] --- <> transMidLine p1 p2 (scale 0.1 0.1 . text . shortShow $ dist p mwp) --- where --- cam = w ^. wCam - -targetDraw :: Picture -> Creature -> Configuration -> World -> Picture -targetDraw _ _ _ _ = mempty ---targetDraw f cr _ _ = mempty --- fromMaybe mempty $ do --- p <- cr ^? crTargeting . ctPos . _Just --- return . --- setLayer DebugLayer $ --- color white $ --- uncurryV translate p f +-- it would be nice to get rid of some redundant checks here +drawTargeting :: Item -> World -> Picture +drawTargeting itm w = fromMaybe mempty $ do + p <- itm ^? itUse . tgPos . _Just + let thepic = case itm ^? itUse . tgActive of + Just True -> activeTargetCursorPic + _ -> targetCursorPic + return . + setLayer FixedCoordLayer $ + color white $ + uncurryV translate (worldPosToScreen (w ^. wCam) p) thepic activeTargetCursorPic :: Picture activeTargetCursorPic = @@ -60,14 +38,6 @@ activeTargetCursorPic = -- | x > x' = min 10 (x - x') -- | otherwise = max (-10) (x - x') -targetRBCreatureDraw :: Creature -> Configuration -> World -> Picture -targetRBCreatureDraw cr = targetDraw targetCursorPic cr ---targetRBCreatureDraw cr = targetDraw thepic cr --- where --- thepic --- | _ctActive $ _crTargeting cr = activeTargetCursorPic --- | otherwise = targetCursorPic - targCorner :: Picture targCorner = line [V2 (x - y) x, V2 x x, V2 x (x - y)] where diff --git a/src/Dodge/WorldEffect.hs b/src/Dodge/WorldEffect.hs index 72416d40f..8c71c86bb 100644 --- a/src/Dodge/WorldEffect.hs +++ b/src/Dodge/WorldEffect.hs @@ -40,7 +40,7 @@ doWdWd we = case we of cr <- w ^? cWorld . lWorld . creatures . ix crid --it <- getItem itid w itRef <- cr ^? crManipulation . manObject . imSelectedItem - it <- invTrees (_crInv cr) ^? ix itRef + it <- invTrees (_crInv cr) ^? ix itRef -- note this probably doesn't always work, invTrees probably only returns rooted trees return $ doItCrWdWd f it cr w WdWdFromItCrixWdWd it crid f -> \w -> fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid diff --git a/tags b/tags index db767a243..6032fe527 100644 --- a/tags +++ b/tags @@ -72,22 +72,22 @@ Ambush src/Dodge/Data/ActionPlan.hs 178;" C Ammo src/Dodge/Data/Ammo.hs 4;" m Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 6;" m Ammo src/Dodge/Item/Ammo.hs 1;" m -AmmoEffectLink src/Dodge/Data/ComposedItem.hs 22;" C -AmmoEffectSF src/Dodge/Data/ComposedItem.hs 40;" C -AmmoInLink src/Dodge/Data/ComposedItem.hs 18;" C -AmmoMagSF src/Dodge/Data/ComposedItem.hs 34;" C +AmmoEffectLink src/Dodge/Data/ComposedItem.hs 21;" C +AmmoEffectSF src/Dodge/Data/ComposedItem.hs 39;" C +AmmoInLink src/Dodge/Data/ComposedItem.hs 17;" C +AmmoMagSF src/Dodge/Data/ComposedItem.hs 33;" C AmmoMagType src/Dodge/Data/Item/Combine.hs 89;" t AmmoMagUse src/Dodge/Data/Item/Use.hs 65;" C -AmmoModLink src/Dodge/Data/ComposedItem.hs 19;" C -AmmoModifierSF src/Dodge/Data/ComposedItem.hs 37;" C +AmmoModLink src/Dodge/Data/ComposedItem.hs 18;" C +AmmoModifierSF src/Dodge/Data/ComposedItem.hs 36;" C AmmoParams src/Dodge/Data/Item/Use.hs 122;" t AmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 1;" m -AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 21;" C -AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 39;" C +AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 20;" C +AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 38;" C AmmoPosition src/Dodge/Item/AmmoPosition.hs 8;" t AmmoPosition src/Dodge/Item/AmmoPosition.hs 2;" m -AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 20;" C -AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 38;" C +AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 19;" C +AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 37;" C AmmoType src/Dodge/Data/Ammo.hs 30;" t AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" t Amount src/Dodge/Item/Amount.hs 1;" m @@ -146,8 +146,8 @@ AttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" C Attracting src/Dodge/Data/Item/Params.hs 46;" C Audition src/Dodge/Creature/Perception/Data.hs 48;" t Audition src/Dodge/Data/Creature/Perception.hs 47;" t -AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 26;" C -AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 33;" C +AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 25;" C +AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 32;" C AutoAI src/Dodge/Data/Creature/Misc.hs 57;" C AutoCrit src/Dodge/Creature/AutoCrit.hs 1;" m AutoDoor src/Dodge/LevelGen/AutoDoor.hs 5;" m @@ -457,8 +457,8 @@ CombineInventoryChange src/Dodge/Data/World.hs 34;" C Common src/Dodge/Zoning/Common.hs 1;" m Compile src/Shader/Compile.hs 1;" m Compose src/Dodge/Tree/Compose.hs 4;" m -ComposeLinkType src/Dodge/Data/ComposedItem.hs 17;" t -ComposedItem src/Dodge/Data/ComposedItem.hs 44;" t +ComposeLinkType src/Dodge/Data/ComposedItem.hs 16;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 43;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -1169,7 +1169,7 @@ Huge src/Shape/Data.hs 28;" C Humanoid src/Dodge/Data/Creature/Misc.hs 65;" C Humanoid src/Dodge/Humanoid.hs 1;" m HumanoidAI src/Dodge/Data/Creature/Misc.hs 48;" t -ILink src/Dodge/Data/ComposedItem.hs 46;" C +ILink src/Dodge/Data/ComposedItem.hs 45;" C INCENDBUL src/Dodge/Combine/Data.hs 202;" C INCENDIARYMODULE src/Dodge/Combine/Data.hs 64;" C INCENDLAS src/Dodge/Combine/Data.hs 213;" C @@ -1292,14 +1292,14 @@ ItemBaseType src/Dodge/Combine/Data.hs 81;" t ItemClust src/Dodge/Combine/Graph.hs 17;" C ItemDimension src/Dodge/Data/Item/Misc.hs 13;" t ItemFamily src/Dodge/Item/Family.hs 3;" t -ItemLink src/Dodge/Data/ComposedItem.hs 46;" t +ItemLink src/Dodge/Data/ComposedItem.hs 45;" t ItemLocation src/Dodge/Data/Item/Location.hs 27;" t ItemModuleType src/Dodge/Combine/Data.hs 197;" t ItemParams src/Dodge/Data/Item/Params.hs 16;" t ItemParams src/Dodge/Tesla/ItemParams.hs 1;" m ItemScrollTimeFlow src/Dodge/Data/World.hs 62;" C ItemSpace src/Dodge/Inventory/ItemSpace.hs 1;" m -ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 29;" t +ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 28;" t ItemTweaks src/Dodge/Data/Item/Tweak.hs 13;" t ItemType src/Dodge/Combine/Data.hs 12;" t ItemType src/Dodge/Data/Item/Combine.hs 15;" t @@ -1338,7 +1338,7 @@ LBoost src/Dodge/Data/Item/HeldUse.hs 55;" C LBranches src/TreeExtra.hs 24;" C LDT src/Dodge/Data/DoubleTree.hs 39;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 27;" C -LDTComb src/Dodge/Item/Grammar.hs 108;" t +LDTComb src/Dodge/Item/Grammar.hs 87;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 25;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 26;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 23;" C @@ -1358,12 +1358,12 @@ LRewind src/Dodge/Data/Item/HeldUse.hs 49;" C LS src/Dodge/Data/LightSource.hs 34;" C LSParam src/Dodge/Data/LightSource.hs 27;" t LShrink src/Dodge/Data/Item/HeldUse.hs 52;" C -LTest src/Dodge/Data/ComposedItem.hs 51;" C +LTest src/Dodge/Data/ComposedItem.hs 50;" C LTimePause src/Dodge/Data/Item/HeldUse.hs 50;" C LTimeScroll src/Dodge/Data/Item/HeldUse.hs 51;" C LTree src/TreeExtra.hs 23;" t LUnsafeBlink src/Dodge/Data/Item/HeldUse.hs 54;" C -LUpdate src/Dodge/Data/ComposedItem.hs 56;" C +LUpdate src/Dodge/Data/ComposedItem.hs 55;" C LWorld src/Dodge/Data/LWorld.hs 98;" t LWorld src/Dodge/Data/LWorld.hs 6;" m LabLink src/Dodge/Data/Room.hs 45;" C @@ -1439,8 +1439,8 @@ LinearShockwave src/Dodge/Data/LinearShockwave.hs 13;" t LinearShockwave src/Dodge/Data/LinearShockwave.hs 6;" m Link src/Dodge/Room/Link.hs 6;" m LinkDecoration src/Dodge/Debug/LinkDecoration.hs 1;" m -LinkTest src/Dodge/Data/ComposedItem.hs 51;" t -LinkUpdate src/Dodge/Data/ComposedItem.hs 56;" t +LinkTest src/Dodge/Data/ComposedItem.hs 50;" t +LinkUpdate src/Dodge/Data/ComposedItem.hs 55;" t List src/Dodge/Combine/List.hs 1;" m List src/Dodge/Render/List.hs 1;" m ListDisplayParams src/Dodge/Data/SelectionList.hs 18;" t @@ -1887,7 +1887,7 @@ ParamMID src/Dodge/Data/Item/Params.hs 54;" C Parameters src/Shader/Parameters.hs 1;" m Parameters src/Shape/Parameters.hs 1;" m Params src/Dodge/Data/Item/Params.hs 6;" m -PartiallyComposedItem src/Dodge/Data/ComposedItem.hs 43;" t +PartiallyComposedItem src/Dodge/Data/ComposedItem.hs 42;" t PassKey src/Dodge/Item/PassKey.hs 1;" m PassthroughLockKeyLists src/Dodge/Annotation/Data.hs 19;" C Path src/Dodge/Path.hs 2;" m @@ -2124,8 +2124,8 @@ Remote src/Dodge/Item/Weapon/Remote.hs 1;" m RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C RemoteScope src/Dodge/Data/Item/Attachment.hs 23;" C RemoteScope src/Dodge/Item/Attachment/Data.hs 26;" C -RemoteScreenLink src/Dodge/Data/ComposedItem.hs 25;" C -RemoteScreenSF src/Dodge/Data/ComposedItem.hs 35;" C +RemoteScreenLink src/Dodge/Data/ComposedItem.hs 24;" C +RemoteScreenSF src/Dodge/Data/ComposedItem.hs 34;" C RemoveCreatureEndo src/Dodge/RemoveCreatureEndo.hs 3;" m RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C RemoveShieldWall src/Dodge/Data/ItEffect.hs 43;" C @@ -2688,7 +2688,7 @@ TwoHandUnder src/Dodge/Data/Item/Use.hs 193;" C Type src/Dodge/Data/Damage/Type.hs 6;" m Typical src/Shape/Data.hs 36;" C UPtLayer src/Dodge/Picture/Layer/Data.hs 16;" C -UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 36;" C +UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 35;" C Uncursed src/Dodge/Data/Item/CurseStatus.hs 12;" C Uncursed src/Dodge/Item/Data.hs 8;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C @@ -2850,11 +2850,11 @@ WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 33;" C WdYouPos src/Dodge/Data/WorldEffect.hs 41;" C Weapon src/Dodge/Default/Weapon.hs 1;" m Weapon src/Dodge/Item/Weapon.hs 2;" m -WeaponPlatformSF src/Dodge/Data/ComposedItem.hs 30;" C -WeaponScopeLink src/Dodge/Data/ComposedItem.hs 23;" C -WeaponScopeSF src/Dodge/Data/ComposedItem.hs 31;" C -WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 24;" C -WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 32;" C +WeaponPlatformSF src/Dodge/Data/ComposedItem.hs 29;" C +WeaponScopeLink src/Dodge/Data/ComposedItem.hs 22;" C +WeaponScopeSF src/Dodge/Data/ComposedItem.hs 30;" C +WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 23;" C +WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 31;" C Weapons src/Dodge/Item/Held/Weapons.hs 1;" m West src/Dodge/Data/CardinalPoint.hs 7;" C WinScale src/Dodge/Base/WinScale.hs 1;" m @@ -3433,8 +3433,8 @@ _hudElement src/Dodge/Data/HUD.hs 36;" f _humanoidAI src/Dodge/Data/Creature/Misc.hs 69;" f _iaLoaded src/Dodge/Data/Item/Use/Consumption.hs 22;" f _iaMax src/Dodge/Data/Item/Use/Consumption.hs 21;" f -_iatOrient src/Dodge/Data/ComposedItem.hs 48;" f -_iatType src/Dodge/Data/ComposedItem.hs 47;" f +_iatOrient src/Dodge/Data/ComposedItem.hs 47;" f +_iatType src/Dodge/Data/ComposedItem.hs 46;" f _ibtAmmoMag src/Dodge/Data/Item/Combine.hs 22;" f _ibtAttach src/Dodge/Data/Item/Combine.hs 21;" f _ibtBulletMod src/Dodge/Data/Item/Combine.hs 24;" f @@ -3574,9 +3574,9 @@ _lsParam src/Dodge/Data/LightSource.hs 36;" f _lsPict src/Dodge/Data/LightSource.hs 38;" f _lsPos src/Dodge/Data/LightSource.hs 28;" f _lsRad src/Dodge/Data/LightSource.hs 29;" f -_luChildUpdate src/Dodge/Data/ComposedItem.hs 59;" f -_luLinkType src/Dodge/Data/ComposedItem.hs 57;" f -_luParentUpdate src/Dodge/Data/ComposedItem.hs 58;" f +_luChildUpdate src/Dodge/Data/ComposedItem.hs 58;" f +_luLinkType src/Dodge/Data/ComposedItem.hs 56;" f +_luParentUpdate src/Dodge/Data/ComposedItem.hs 57;" f _lwID src/Dodge/Data/LinearShockwave.hs 15;" f _lwPoints src/Dodge/Data/LinearShockwave.hs 16;" f _lwPos src/Dodge/Data/LinearShockwave.hs 14;" f @@ -4134,8 +4134,8 @@ _tractorBeams src/Dodge/Data/LWorld.hs 122;" f _trieChildren src/SimpleTrie.hs 7;" f _trieMVal src/SimpleTrie.hs 6;" f _triggers src/Dodge/Data/LWorld.hs 131;" f -_tryLeftLink src/Dodge/Data/ComposedItem.hs 52;" f -_tryRightLink src/Dodge/Data/ComposedItem.hs 53;" f +_tryLeftLink src/Dodge/Data/ComposedItem.hs 51;" f +_tryRightLink src/Dodge/Data/ComposedItem.hs 52;" f _ttDeathEffect src/Dodge/Data/Terminal.hs 82;" f _ttTriggerID src/Dodge/Data/Terminal.hs 81;" f _tuDir src/Dodge/Data/Machine.hs 61;" f @@ -4341,7 +4341,7 @@ addSideEffect src/Dodge/Concurrent.hs 32;" f addSouthPillars src/Dodge/Room/LongDoor.hs 87;" f addTermSignal src/Dodge/Event/Input.hs 34;" f addTile src/Dodge/Room/AddTile.hs 11;" f -addTinClip src/Dodge/Item/Draw/SPic.hs 304;" f +addTinClip src/Dodge/Item/Draw/SPic.hs 316;" f addToTrunk src/Dodge/Layout/Tree/Polymorphic.hs 116;" f addToTrunk src/Dodge/Tree/Polymorphic.hs 129;" f addToTrunk src/TreeHelp.hs 156;" f @@ -4370,7 +4370,7 @@ airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 52;" f allVisibleWalls src/Dodge/Base/Collide.hs 131;" f alongSegBy src/Geometry.hs 43;" f -ammoComposedItem src/Dodge/Item/Grammar.hs 93;" f +ammoComposedItem' src/Dodge/Item/Grammar.hs 70;" f amr src/Dodge/Item/Held/Rod.hs 46;" f amr src/Dodge/Item/Weapon/BulletGun/Rod.hs 56;" f anItemFindPulse src/Dodge/Item/Weapon/UseEffect.hs 25;" f @@ -4480,10 +4480,10 @@ azure src/Color.hs 22;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f backpackCombinations src/Dodge/Combine/Combinations.hs 25;" f -backpackShape src/Dodge/Item/Draw/SPic.hs 73;" f +backpackShape src/Dodge/Item/Draw/SPic.hs 85;" f backspaceInputted src/Dodge/Update/Input/Text.hs 26;" f bangCone src/Dodge/Item/Held/Cone.hs 11;" f -bangConeShape src/Dodge/Item/Draw/SPic.hs 234;" f +bangConeShape src/Dodge/Item/Draw/SPic.hs 246;" f bangEchoS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 370;" f bangRod src/Dodge/Item/Held/Rod.hs 18;" f bangRod src/Dodge/Item/Weapon/BulletGun/Rod.hs 18;" f @@ -4493,21 +4493,20 @@ bangStick src/Dodge/Item/Weapon/BulletGun/Stick.hs 17;" f bangStickSoundChoice src/Dodge/HeldUse/BulletWeapon.hs 226;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f -baseAMRShape src/Dodge/Item/Draw/SPic.hs 448;" f +baseAMRShape src/Dodge/Item/Draw/SPic.hs 460;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseBlockPane src/Dodge/Placements/Wall.hs 63;" f baseBlockPane src/Dodge/Room/Placement.hs 93;" f -baseCaneShape src/Dodge/Item/Draw/SPic.hs 254;" f +baseCaneShape src/Dodge/Item/Draw/SPic.hs 266;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 38;" f -basePartiallyComposedItem src/Dodge/Item/Grammar.hs 38;" f -basePartiallyComposedItem' src/Dodge/Item/Grammar.hs 63;" f -baseRifleShape src/Dodge/Item/Draw/SPic.hs 257;" f -baseRodShape src/Dodge/Item/Draw/SPic.hs 445;" f -baseSMGShape src/Dodge/Item/Draw/SPic.hs 416;" f +basePartiallyComposedItem' src/Dodge/Item/Grammar.hs 40;" f +baseRifleShape src/Dodge/Item/Draw/SPic.hs 269;" f +baseRodShape src/Dodge/Item/Draw/SPic.hs 457;" f +baseSMGShape src/Dodge/Item/Draw/SPic.hs 428;" f baseShoulder src/Dodge/Creature/Picture.hs 159;" f -baseStickShape src/Dodge/Item/Draw/SPic.hs 231;" f -baseStickShapeX src/Dodge/Item/Draw/SPic.hs 226;" f +baseStickShape src/Dodge/Item/Draw/SPic.hs 243;" f +baseStickShapeX src/Dodge/Item/Draw/SPic.hs 238;" f baseStickSpread src/Dodge/Item/Held/Stick.hs 32;" f baseStickSpread src/Dodge/Item/Weapon/BulletGun/Stick.hs 46;" f baseWindowPane src/Dodge/Placements/Wall.hs 73;" f @@ -4969,7 +4968,7 @@ dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 448;" f dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 316;" f defDamageMaterial src/Dodge/Material/Damage.hs 17;" f defLSPic src/Dodge/LightSource/Draw.hs 11;" f -defSPic src/Dodge/Item/Draw/SPic.hs 240;" f +defSPic src/Dodge/Item/Draw/SPic.hs 252;" f defaultAimMvType src/Dodge/Default/Creature.hs 122;" f defaultAimParams src/Dodge/Default/Item/Held/AimParams.hs 4;" f defaultAimParams src/Dodge/Default/Item/Use/AimParams.hs 6;" f @@ -5088,7 +5087,7 @@ destroyMount src/Dodge/Block.hs 98;" f destroyMounts src/Dodge/Block.hs 95;" f destroyProjectile src/Dodge/Projectile/Update.hs 62;" f detV src/Geometry/Vector.hs 93;" f -detectorColor src/Dodge/Item/Draw/SPic.hs 508;" f +detectorColor src/Dodge/Item/Draw/SPic.hs 520;" f detectorEffect src/Dodge/Item/Weapon/Radar.hs 19;" f detectorInfo src/Dodge/Item/Info.hs 195;" f determineInvSelCursorWidth src/Dodge/ListDisplayParams.hs 54;" f @@ -5368,7 +5367,7 @@ eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f equipAimSpeed src/Dodge/Creature/Action/Movement.hs 109;" f equipInfo src/Dodge/Item/Info.hs 107;" f -equipItemSPic src/Dodge/Item/Draw/SPic.hs 43;" f +equipItemSPic src/Dodge/Item/Draw/SPic.hs 55;" f equipPosition src/Dodge/Item/Draw.hs 32;" f equipPosition src/Dodge/Item/Equipment/Shape.hs 15;" f equipSiteInfo src/Dodge/Item/Info.hs 225;" f @@ -5453,12 +5452,12 @@ flameTorrent src/Dodge/Item/Held/SprayGuns.hs 40;" f flameTorrent src/Dodge/Item/Weapon/SprayGuns.hs 38;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 56;" f flameWall src/Dodge/Item/Weapon/SprayGuns.hs 54;" f -flamerPic src/Dodge/Item/Draw/SPic.hs 419;" f +flamerPic src/Dodge/Item/Draw/SPic.hs 431;" f flareCircleAt src/Dodge/WorldEvent/Flash.hs 46;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 49;" f flatLookupItems src/Dodge/Combine.hs 29;" f flatShield src/Dodge/Item/Held/Utility.hs 9;" f -flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 492;" f +flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 504;" f flatV2 src/Picture/Data.hs 65;" f flatV3 src/Picture/Data.hs 68;" f flatV4 src/Picture/Data.hs 71;" f @@ -5650,7 +5649,7 @@ hasLOSIndirect src/Dodge/Base/Collide.hs 214;" f hat src/Dodge/Item/Equipment.hs 104;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 117;" f -headLampShape src/Dodge/Item/Draw/SPic.hs 498;" f +headLampShape src/Dodge/Item/Draw/SPic.hs 510;" f headMap src/Dodge/DoubleTree.hs 117;" f heal src/Dodge/Item/Consumable.hs 17;" f heal25 src/Dodge/Item/Consumable.hs 14;" f @@ -5665,7 +5664,7 @@ heldEffect src/Dodge/HeldUse.hs 45;" f heldEffectMuzzles src/Dodge/HeldUse.hs 48;" f heldInfo src/Dodge/Item/Info.hs 48;" f heldItemOffset src/Dodge/Item/HeldOffset.hs 24;" f -heldItemSPic src/Dodge/Item/Draw/SPic.hs 160;" f +heldItemSPic src/Dodge/Item/Draw/SPic.hs 172;" f heldPositionInfo src/Dodge/Item/Info.hs 212;" f helpCommand src/Dodge/Terminal.hs 64;" f helpPoly3D src/Polyhedra.hs 124;" f @@ -5775,22 +5774,21 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 315;" f interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 175;" f +invAdj src/Dodge/Item/Grammar.hs 149;" f invDimColor src/Dodge/DisplayInventory.hs 139;" f invDimColor src/Dodge/Inventory/Color.hs 4;" f invDisplayParams src/Dodge/ListDisplayParams.hs 29;" f invHead src/Dodge/Render/HUD.hs 314;" f -invIndentIM src/Dodge/Item/Grammar.hs 187;" f -invLDT src/Dodge/Item/Grammar.hs 147;" f -invLDT' src/Dodge/Item/Grammar.hs 157;" f -invLDT'' src/Dodge/Item/Grammar.hs 152;" f -invRootMap src/Dodge/Item/Grammar.hs 164;" f +invIndentIM src/Dodge/Item/Grammar.hs 161;" f +invLDT' src/Dodge/Item/Grammar.hs 131;" f +invLDT'' src/Dodge/Item/Grammar.hs 126;" f +invRootMap src/Dodge/Item/Grammar.hs 138;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 34;" f invSelectionItem' src/Dodge/Inventory/SelectionList.hs 16;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 242;" f invSize src/Dodge/Inventory/CheckSlots.hs 41;" f -invTrees src/Dodge/Item/Grammar.hs 192;" f +invTrees src/Dodge/Item/Grammar.hs 166;" f inventoryExtra src/Dodge/Render/HUD.hs 218;" f inventoryExtraH src/Dodge/Render/HUD.hs 222;" f inventoryX src/Dodge/Creature.hs 115;" f @@ -5855,8 +5853,10 @@ itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f itemInvSideEffect src/Dodge/Creature/State.hs 254;" f itemNumberDisplay src/Dodge/Item/Display.hs 110;" f itemRooms src/Dodge/LockAndKey.hs 39;" f -itemSPic src/Dodge/Item/Draw/SPic.hs 29;" f +itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 35;" f +itemSPic src/Dodge/Item/Draw/SPic.hs 43;" f itemString src/Dodge/Item/Display.hs 57;" f +itemTreeSPic src/Dodge/Item/Draw/SPic.hs 31;" f itemUpdate src/Dodge/Creature/State.hs 327;" f itemUseEffect src/Dodge/Creature/Impulse/UseItem.hs 35;" f iterateUntil src/MonadHelp.hs 23;" f @@ -5871,7 +5871,7 @@ jShape src/Dodge/Placement/Instance/LightSource.hs 86;" f jShape src/Dodge/Placements/LightSource.hs 43;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f jetPack src/Dodge/Item/Equipment.hs 91;" f -joinItemsInList src/Dodge/Item/Grammar.hs 138;" f +joinItemsInList src/Dodge/Item/Grammar.hs 117;" f jps0' src/Dodge/LevelGen/Data.hs 60;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/Data.hs 63;" f @@ -5892,7 +5892,7 @@ keyCard src/Dodge/Item/PassKey.hs 8;" f keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 69;" f keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 57;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f -keyPic src/Dodge/Item/Draw/SPic.hs 514;" f +keyPic src/Dodge/Item/Draw/SPic.hs 526;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f killBulletUpdate src/Dodge/WorldEvent/HitEffect.hs 30;" f killParticleUpdate src/Dodge/Particle/Update.hs 9;" f @@ -5912,7 +5912,7 @@ lasBeamCombine src/Dodge/Beam.hs 31;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 112;" f lasDronesPic src/Dodge/Item/Weapon/Drone.hs 22;" f lasGun src/Dodge/Item/Held/BatteryGuns.hs 46;" f -lasGunPic src/Dodge/Item/Draw/SPic.hs 461;" f +lasGunPic src/Dodge/Item/Draw/SPic.hs 473;" f lasRayAt src/Dodge/Beam.hs 62;" f lasSensorTurretTest src/Dodge/Room/LasTurret.hs 105;" f lasTunnel src/Dodge/Room/LasTurret.hs 124;" f @@ -5924,7 +5924,7 @@ latchkey src/Dodge/Item/Held/Utility.hs 23;" f latchkey src/Dodge/Item/PassKey.hs 14;" f launcher src/Dodge/Item/Held/Launcher.hs 12;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f -launcherPic src/Dodge/Item/Draw/SPic.hs 435;" f +launcherPic src/Dodge/Item/Draw/SPic.hs 447;" f launcherSound src/Dodge/SoundLogic/Synonyms.hs 4;" f launcherX src/Dodge/Item/Held/Launcher.hs 38;" f layerNum src/Picture/Data.hs 31;" f @@ -5936,11 +5936,11 @@ ldtToIM src/Dodge/DoubleTree.hs 90;" f ldtToIndentList src/Dodge/DoubleTree.hs 93;" f left src/DoubleStack.hs 16;" f leftInfo src/Dodge/Item/Info.hs 96;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 110;" f -leftItemSPic src/Dodge/Item/Draw/SPic.hs 76;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 89;" f +leftItemSPic src/Dodge/Item/Draw/SPic.hs 88;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 122;" f -legsSPic src/Dodge/Item/Draw/SPic.hs 532;" f +leftRightCombine src/Dodge/Item/Grammar.hs 101;" f +legsSPic src/Dodge/Item/Draw/SPic.hs 544;" f liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f liShape src/Dodge/Placements/LightSource.hs 55;" f light src/Color.hs 100;" f @@ -6184,8 +6184,8 @@ miniGunCrit src/Dodge/Creature.hs 62;" f miniGunUse src/Dodge/Item/Weapon/BulletGun/Cane.hs 113;" f miniGunX src/Dodge/Item/Held/Cane.hs 83;" f miniGunX src/Dodge/Item/Weapon/BulletGun/Cane.hs 120;" f -miniGunXPict src/Dodge/Item/Draw/SPic.hs 395;" f -miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 389;" f +miniGunXPict src/Dodge/Item/Draw/SPic.hs 407;" f +miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 401;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 510;" f miniTree2 src/Dodge/Room/Room.hs 108;" f minimumOn src/FoldlHelp.hs 12;" f @@ -6823,7 +6823,7 @@ rhombus src/Polyhedra.hs 71;" f rifle src/Dodge/Item/Held/Cane.hs 51;" f rifle src/Dodge/Item/Weapon/BulletGun/Cane.hs 77;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 116;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 95;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -7046,7 +7046,7 @@ shapeVerxAttributes src/Shape/Parameters.hs 13;" f shapeVerxSize src/Shape/Parameters.hs 10;" f shardShape src/Dodge/Block/Debris.hs 181;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f -shatterGunSPic src/Dodge/Item/Draw/SPic.hs 243;" f +shatterGunSPic src/Dodge/Item/Draw/SPic.hs 255;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f shellCollisionCheck src/Dodge/Projectile/Update.hs 51;" f shellCollisionEffect src/Dodge/Projectile/Update.hs 47;" f @@ -7362,7 +7362,7 @@ terminalShape src/Dodge/Machine/Draw.hs 31;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 76;" f teslaBeamCombine src/Dodge/Beam.hs 48;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 27;" f -teslaGunPic src/Dodge/Item/Draw/SPic.hs 451;" f +teslaGunPic src/Dodge/Item/Draw/SPic.hs 463;" f teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f testCrossWalls src/Dodge/Room/Path.hs 47;" f testEvent src/Dodge/Event/Test.hs 10;" f @@ -7439,14 +7439,14 @@ topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismIndices src/Shader/Poke.hs 402;" f topTestPart src/Dodge/TestString.hs 34;" f torch src/Dodge/Item/Held/Utility.hs 26;" f -torchShape src/Dodge/Item/Draw/SPic.hs 207;" f +torchShape src/Dodge/Item/Draw/SPic.hs 219;" f torqueCr src/Dodge/WorldEffect.hs 70;" f torso src/Dodge/Creature/Picture.hs 133;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 232;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 73;" f -tractorGunPic src/Dodge/Item/Draw/SPic.hs 489;" f +tractorGunPic src/Dodge/Item/Draw/SPic.hs 501;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 124;" f @@ -7711,7 +7711,7 @@ upperPrismPolySU src/Shape.hs 112;" f upperPrismPolyTS src/Shape.hs 118;" f upperRounded src/Shape.hs 181;" f useAmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 17;" f -useBreakListsLinkTest src/Dodge/Item/Grammar.hs 24;" f +useBreakListsLinkTest src/Dodge/Item/Grammar.hs 25;" f useBulletPayload src/Dodge/Bullet.hs 105;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f @@ -7773,7 +7773,7 @@ visionCheck src/Dodge/Creature/Perception.hs 152;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 8;" f volleyGun src/Dodge/Item/Held/Cane.hs 32;" f volleyGun src/Dodge/Item/Weapon/BulletGun/Cane.hs 43;" f -volleyGunShape src/Dodge/Item/Draw/SPic.hs 377;" f +volleyGunShape src/Dodge/Item/Draw/SPic.hs 389;" f waistSP src/Dodge/Creature/HandPos.hs 199;" f walkNozzle src/Dodge/HeldUse.hs 207;" f walkableNodeNear src/Dodge/Path.hs 48;" f