diff --git a/ghcidOutput b/ghcidOutput index 4f414dd8c..bcce37e1a 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1,13 +1,18 @@ -/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:9:1-39: warning: [-Wunused-imports] - The qualified import of ‘Linear.Quaternion’ is redundant - | -9 | import qualified Linear.Quaternion as Q - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:10:1-20: warning: [-Wunused-imports] - The import of ‘Geometry.Data’ is redundant +/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:39:1-25: warning: [-Wunused-top-binds] + Defined but not used: ‘basePartiallyComposedItem’ | -10 | import Geometry.Data - | ^^^^^^^^^^^^^^^^^^^^ +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 | diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 33d142ba3..4de39a3b1 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) (invLDT' $ _crInv cr) diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index b2f6421ad..252831f0b 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -41,8 +41,9 @@ data ItemStructuralFunction deriving (Eq, Ord, Show, Read) type PartiallyComposedItem lt = (Item, ItemStructuralFunction, LinkTest lt) +type ComposedItem = (Item, ItemStructuralFunction) -data ItemAttachment = IAttach +data ItemLink = ILink { _iatType :: ComposeLinkType , _iatOrient :: Item -> Item -> Maybe (Point3, Quaternion Float) } @@ -58,6 +59,7 @@ data LinkUpdate lt = LUpdate , _luChildUpdate :: PartiallyComposedItem lt -> PartiallyComposedItem lt } +makeLenses ''ItemLink makeLenses ''LinkTest makeLenses ''LinkUpdate deriveJSON defaultOptions ''ComposeLinkType diff --git a/src/Dodge/Data/DoubleTree.hs b/src/Dodge/Data/DoubleTree.hs index 3be25f944..4ad302072 100644 --- a/src/Dodge/Data/DoubleTree.hs +++ b/src/Dodge/Data/DoubleTree.hs @@ -49,6 +49,11 @@ instance Foldable DoubleTree where instance Functor (LabelDoubleTree b) where fmap f (LDT x l r) = LDT (f x) (fmap (second $ fmap f) l) (fmap (second $ fmap f) r) +instance Bifunctor LabelDoubleTree where + second = fmap + first f (LDT x l r) = LDT x (map (first f . second (first f)) l) + (map (first f . second (first f)) r) + makeLenses ''DoubleTree makeLenses ''LabelDoubleTree deriveJSON defaultOptions ''DoubleTree diff --git a/src/Dodge/Item/Draw.hs b/src/Dodge/Item/Draw.hs index 36454d994..942d568c3 100644 --- a/src/Dodge/Item/Draw.hs +++ b/src/Dodge/Item/Draw.hs @@ -16,7 +16,7 @@ import Dodge.Item.Draw.SPic import Dodge.Item.HeldOffset import ShapePicture -itemEquipPict :: Creature -> LabelDoubleTree ComposeLinkType (PartiallyComposedItem ComposeLinkType) +itemEquipPict :: Creature -> LabelDoubleTree ComposeLinkType ComposedItem -> SPic itemEquipPict cr itmtree = case itm ^. itUse of UseHeld{} | itm ^? itLocation . ilIsRoot == Just True diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index e2ebe338c..3c574b785 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -26,7 +26,7 @@ import ShapePicture -- hit <- itm ^? itType . iyBase . ibtHeld -- return mempty -itemSPic :: LabelDoubleTree ComposeLinkType (PartiallyComposedItem ComposeLinkType) -> SPic +itemSPic :: LabelDoubleTree ComposeLinkType ComposedItem -> SPic itemSPic itmtree = case it ^. itType of CRAFT _ -> defSPic HELD ht -> heldItemSPic ht it diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 0a74ccb11..2e472561f 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -1,5 +1,5 @@ module Dodge.Item.Grammar ( - invLDT, + invLDT', invTrees, invIndentIM, invAdj, @@ -9,7 +9,7 @@ module Dodge.Item.Grammar ( import qualified Linear.Quaternion as Q import Geometry.Data import Control.Applicative ---import TreeHelp +import Data.Bifunctor import LensHelp import qualified Data.IntMap.Strict as IM @@ -60,6 +60,53 @@ basePartiallyComposedItem itm = case itm ^. itType of 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))) + (IM.toList $ itm ^. itUse . heldAmmoTypes)) + [noa WeaponTargetingSF WeaponTargetingLink, noa WeaponScopeSF WeaponScopeLink] + ) + AMMOMAG _ -> ammoComposedItem' itm + TARGETING {} -> (itm,WeaponTargetingSF, useBreakListsLinkTest [noa 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 + 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 + nolinks x = (itm,x, LTest (const Nothing) (const Nothing)) + isolate = (itm,UncomposableIsolateSF, LTest (const Nothing) (const Nothing)) + +ammoComposedItem' :: Item -> PartiallyComposedItem ItemLink +ammoComposedItem' itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do + atype <- itm ^? itUse . amagType + return (itm + , AmmoMagSF atype + , useBreakListsLinkTest + [noa (AmmoModifierSF atype) AmmoModLink + ,noa (AmmoTargetingSF atype) AmmoTargetingLink + ,noa (AmmoPayloadSF atype) AmmoPayloadLink + ,noa (AmmoEffectSF atype) AmmoEffectLink + ,noa (RemoteScreenSF) RemoteScreenLink + ] + [] + ) + 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 @@ -119,12 +166,21 @@ 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 -- location ids -- consider explicitly reseting the inventory ids (but this probably really -- should be done upstream anyway in the actually creature inventory) invRootMap :: IM.IntMap Item -> IM.IntMap (Maybe Int, DoubleTree Item) -invRootMap = foldMap (dtToIntMapWithRoot (^?! itLocation . ilInvID) . fmap (^. _1) . ldtToDT) . invLDT +invRootMap = foldMap (dtToIntMapWithRoot (^?! itLocation . ilInvID) . fmap (^. _1) . ldtToDT) . invLDT'' --invRootMap = foldMap (dtToRootIntMap g . ldtToDT) . invLDT -- where @@ -136,7 +192,7 @@ invRootMap = foldMap (dtToIntMapWithRoot (^?! itLocation . ilInvID) . fmap (^. _ -- should be done upstream anyway in the actually creature inventory) invAdj :: IM.IntMap Item -> Either String (IM.IntMap (Maybe (Int, Int), [Int], [Int])) invAdj im = do - l <- mapM g $ invLDT im + l <- mapM g $ invLDT'' im return $ IM.unions l where g = dtToLRAdjEither getid . ldtToDT @@ -148,11 +204,11 @@ invAdj im = do invIndentIM :: IM.IntMap Item -> IM.IntMap (Item, Int, LabelDoubleTreeNodeType ComposeLinkType) invIndentIM = IM.fromAscList . zip [0 ..] . reverse . map (over _1 (^. _1)) - . concatMap ldtToIndentList . invLDT + . concatMap ldtToIndentList . invLDT' -- returns an intmap with trees for all items, including non-roots invTrees :: IM.IntMap Item -> IM.IntMap (LabelDoubleTree ComposeLinkType Item) -invTrees = IM.unions . map (ldtToIM getindex . fmap (^. _1)) . invLDT +invTrees = IM.unions . map (ldtToIM getindex . fmap (^. _1)) . invLDT' where getindex :: Item -> Int getindex i = diff --git a/src/Dodge/Machine/Draw.hs b/src/Dodge/Machine/Draw.hs index 900755dd9..abf91ca53 100644 --- a/src/Dodge/Machine/Draw.hs +++ b/src/Dodge/Machine/Draw.hs @@ -63,7 +63,7 @@ drawTurret :: Turret -> Machine -> SPic drawTurret tu mc = overPosSP (turretItemOffset itm tu mc) (itemSPic ittree) where itm = _tuWeapon tu - ittree = singleLDT (itm,UncomposableIsolateSF,LTest (const Nothing) (const Nothing)) + 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 3a2e3d215..3f2d2b57a 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -164,7 +164,7 @@ floorItemSPic :: FloorItem -> SPic floorItemSPic flit = uncurryV translateSPxy (_flItPos flit) $ rotateSP (_flItRot flit) - (itemSPic $ singleLDT ((_flIt flit),UncomposableIsolateSF,LTest (const Nothing) (const Nothing))) + (itemSPic $ singleLDT ((_flIt flit),UncomposableIsolateSF)) btSPic :: Button -> SPic btSPic bt = diff --git a/tags b/tags index d148bdef4..db767a243 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 20;" C -AmmoEffectSF src/Dodge/Data/ComposedItem.hs 38;" C -AmmoInLink src/Dodge/Data/ComposedItem.hs 16;" C -AmmoMagSF src/Dodge/Data/ComposedItem.hs 32;" C +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 AmmoMagType src/Dodge/Data/Item/Combine.hs 89;" t AmmoMagUse src/Dodge/Data/Item/Use.hs 65;" C -AmmoModLink src/Dodge/Data/ComposedItem.hs 17;" C -AmmoModifierSF src/Dodge/Data/ComposedItem.hs 35;" C +AmmoModLink src/Dodge/Data/ComposedItem.hs 19;" C +AmmoModifierSF src/Dodge/Data/ComposedItem.hs 37;" 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 19;" C -AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 37;" C +AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 21;" C +AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 39;" C AmmoPosition src/Dodge/Item/AmmoPosition.hs 8;" t AmmoPosition src/Dodge/Item/AmmoPosition.hs 2;" m -AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 18;" C -AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 36;" C +AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 20;" C +AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 38;" 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 24;" C -AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 31;" C +AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 26;" C +AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 33;" 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,7 +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 15;" t +ComposeLinkType src/Dodge/Data/ComposedItem.hs 17;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 44;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -1168,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 -IAttach src/Dodge/Item/Grammar.hs 23;" C +ILink src/Dodge/Data/ComposedItem.hs 46;" 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 @@ -1287,18 +1288,18 @@ Item src/Dodge/Default/Item.hs 1;" m Item src/Dodge/Item.hs 3;" m ItemAmount src/Dodge/Data/Item/Use/Amount.hs 4;" m ItemAmount src/Dodge/Data/ItemAmount.hs 4;" m -ItemAttachment src/Dodge/Item/Grammar.hs 23;" t 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 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 27;" t +ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 29;" 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 @@ -1337,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 82;" t +LDTComb src/Dodge/Item/Grammar.hs 108;" 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 @@ -1357,10 +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 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 LWorld src/Dodge/Data/LWorld.hs 98;" t LWorld src/Dodge/Data/LWorld.hs 6;" m LabLink src/Dodge/Data/Room.hs 45;" C @@ -1436,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 43;" t -LinkUpdate src/Dodge/Data/ComposedItem.hs 48;" t +LinkTest src/Dodge/Data/ComposedItem.hs 51;" t +LinkUpdate src/Dodge/Data/ComposedItem.hs 56;" 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 @@ -1884,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 41;" t +PartiallyComposedItem src/Dodge/Data/ComposedItem.hs 43;" t PassKey src/Dodge/Item/PassKey.hs 1;" m PassthroughLockKeyLists src/Dodge/Annotation/Data.hs 19;" C Path src/Dodge/Path.hs 2;" m @@ -2121,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 23;" C -RemoteScreenSF src/Dodge/Data/ComposedItem.hs 33;" C +RemoteScreenLink src/Dodge/Data/ComposedItem.hs 25;" C +RemoteScreenSF src/Dodge/Data/ComposedItem.hs 35;" C RemoveCreatureEndo src/Dodge/RemoveCreatureEndo.hs 3;" m RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C RemoveShieldWall src/Dodge/Data/ItEffect.hs 43;" C @@ -2685,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 34;" C +UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 36;" 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 @@ -2847,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 28;" C -WeaponScopeLink src/Dodge/Data/ComposedItem.hs 21;" C -WeaponScopeSF src/Dodge/Data/ComposedItem.hs 29;" C -WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 22;" C -WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 30;" C +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 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 @@ -3430,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/Item/Grammar.hs 25;" f -_iatType src/Dodge/Item/Grammar.hs 24;" f +_iatOrient src/Dodge/Data/ComposedItem.hs 48;" f +_iatType src/Dodge/Data/ComposedItem.hs 47;" 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 @@ -3571,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 51;" f -_luLinkType src/Dodge/Data/ComposedItem.hs 49;" f -_luParentUpdate src/Dodge/Data/ComposedItem.hs 50;" 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 _lwID src/Dodge/Data/LinearShockwave.hs 15;" f _lwPoints src/Dodge/Data/LinearShockwave.hs 16;" f _lwPos src/Dodge/Data/LinearShockwave.hs 14;" f @@ -4131,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 44;" f -_tryRightLink src/Dodge/Data/ComposedItem.hs 45;" f +_tryLeftLink src/Dodge/Data/ComposedItem.hs 52;" f +_tryRightLink src/Dodge/Data/ComposedItem.hs 53;" 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 @@ -4367,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 67;" f +ammoComposedItem src/Dodge/Item/Grammar.hs 93;" 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 @@ -4497,7 +4500,8 @@ baseBlockPane src/Dodge/Room/Placement.hs 93;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 254;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 38;" f -basePartiallyComposedItem src/Dodge/Item/Grammar.hs 42;" 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 @@ -5365,7 +5369,7 @@ 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 -equipPosition src/Dodge/Item/Draw.hs 31;" 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 equipSiteToPositions src/Dodge/Inventory/RBList.hs 77;" f @@ -5771,20 +5775,22 @@ 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 150;" f +invAdj src/Dodge/Item/Grammar.hs 175;" 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 162;" f -invLDT src/Dodge/Item/Grammar.hs 121;" f -invRootMap src/Dodge/Item/Grammar.hs 139;" 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 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 167;" f +invTrees src/Dodge/Item/Grammar.hs 192;" f inventoryExtra src/Dodge/Render/HUD.hs 218;" f inventoryExtraH src/Dodge/Render/HUD.hs 222;" f inventoryX src/Dodge/Creature.hs 115;" f @@ -5865,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 112;" f +joinItemsInList src/Dodge/Item/Grammar.hs 138;" 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 @@ -5930,10 +5936,10 @@ 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 84;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 110;" f leftItemSPic src/Dodge/Item/Draw/SPic.hs 76;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 96;" f +leftRightCombine src/Dodge/Item/Grammar.hs 122;" f legsSPic src/Dodge/Item/Draw/SPic.hs 532;" f liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f liShape src/Dodge/Placements/LightSource.hs 55;" f @@ -6817,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 90;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 116;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -7705,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 28;" f +useBreakListsLinkTest src/Dodge/Item/Grammar.hs 24;" f useBulletPayload src/Dodge/Bullet.hs 105;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f