From 597e8dd89d7a5ce508a6265f3716763c141b062d Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 6 Oct 2024 12:55:18 +0100 Subject: [PATCH] Rewrite of item color in inventory, runs slowly --- ghcidOutput | 11 ++- src/Dodge/Combine.hs | 3 +- src/Dodge/DisplayInventory.hs | 14 ++- src/Dodge/Inventory/SelectionList.hs | 17 ++-- src/Dodge/Item/Display.hs | 7 +- src/Dodge/Item/Grammar.hs | 22 ++++- src/Dodge/Item/InventoryColor.hs | 25 ++--- tags | 138 ++++++++++++++------------- 8 files changed, 139 insertions(+), 98 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index 07576a5ea..771ae6220 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1,10 @@ -All good (598 modules, at 11:19:05) +/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:12:1-30: warning: [-Wunused-imports] + The import of ‘Dodge.Data.ComposedItem’ is redundant + | +12 | import Dodge.Data.ComposedItem + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Item/InventoryColor.hs:7:1-22: warning: [-Wunused-imports] + The import of ‘Dodge.Data.Item’ is redundant + | +7 | import Dodge.Data.Item + | ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/Dodge/Combine.hs b/src/Dodge/Combine.hs index 64a4d3425..dc4d28426 100644 --- a/src/Dodge/Combine.hs +++ b/src/Dodge/Combine.hs @@ -3,6 +3,7 @@ module Dodge.Combine ( combineList, ) where +import Dodge.Item.Grammar import Data.Bifunctor import Data.Foldable import Data.List (sort, sortOn) @@ -24,7 +25,7 @@ combineList = map f . combineItemListYouX { _siPictures = basicItemDisplay itm , _siHeight = _itInvSize itm , _siIsSelectable = True - , _siColor = itemInvColor itm + , _siColor = itemInvColor . pciToCI $ basePCI itm , _siOffX = 0 , _siPayload = CombinableItem is itm [] } diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index a7d904473..f0780b386 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -9,6 +9,8 @@ module Dodge.DisplayInventory ( updateCombinePositioning, ) where +import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Control.Lens import Dodge.Inventory.SelectionList import Control.Monad @@ -113,11 +115,10 @@ updateDisplaySections w cfig sss = coitems' = IM.fromDistinctAscList . zip [0 ..] $ map closeObjectToSelectionItem (w ^. hud . closeObjects) - invitems' = IM.mapWithKey (\k (x,y,_) -> invSelectionItem cr k x y) inv + invitems' = IM.mapWithKey (\k (y,x) -> invSelectionItem cr k (x ^. locLDT . ldtValue) y) + invlocs cr = you w - inv = invIndentIM $ _crInv (you w) - --indents = indentInv inv - --inv = indentInv $ _crInv (you w) + invlocs = invTrees'' $ _crInv (you w) nfreeslots = crNumFreeSlots cr filtpair i itms filtdescription = ( (i, filtsis) @@ -147,7 +148,10 @@ updateInventorySectionItems w = where f olditems = fromMaybe olditems $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 - invitms <- IM.mapWithKey (invSelectionItem' cr) <$> cr ^? crInv + --invitms <- IM.mapWithKey (invSelectionItem' cr) <$> cr ^? crInv + let invitms = IM.mapWithKey (invSelectionItem' cr) + $ fmap (^. _2 . locLDT . ldtValue) + $ invTrees'' $ cr ^. crInv return $ case w ^? hud . hudElement . diSections . sssExtra . sssFilters . ix (-1) . _Just of Just str -> IM.filter (plainRegex str) invitms _ -> invitms diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index df9f3eae8..2594cd463 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -4,6 +4,8 @@ module Dodge.Inventory.SelectionList ( closeObjectToSelectionItem, ) where +import Dodge.Item.Grammar +import Dodge.Data.ComposedItem import Padding import Dodge.Equipment.Text import Dodge.Data.SelectionList @@ -13,7 +15,7 @@ import Dodge.Item.InventoryColor import LensHelp import Picture.Base -invSelectionItem' :: Creature -> Int -> Item -> SelectionItem () +invSelectionItem' :: Creature -> Int -> ComposedItem -> SelectionItem () invSelectionItem' cr i it = invSelectionItem cr i it 0 -- SelectionItem -- { _siPictures = pics & ix 0 %~ (++ anyequippos ++ anyhotkey) @@ -31,21 +33,22 @@ invSelectionItem' cr i it = invSelectionItem cr i it 0 -- UndroppableIdentified -> itemDisplay cr it -- _ -> itemDisplay cr it -invSelectionItem :: Creature -> Int -> Item -> Int -> SelectionItem () -invSelectionItem cr i it indent = +invSelectionItem :: Creature -> Int -> ComposedItem -> Int -> SelectionItem () +invSelectionItem cr i ci indent = SelectionItem { _siPictures = pics & ix 0 %~ (++ anyequippos ++ anyhotkey) - , _siHeight = _itInvSize it + , _siHeight = _itInvSize itm , _siIsSelectable = True , _siColor = col , _siOffX = indent , _siPayload = () } where + itm = _cItem ci anyhotkey = maybe [] ((' ':) .hotkeyToString) (cr ^? crInvHotkeys . ix i) anyequippos = maybe [] (rightPad 8 ' ' . (' ':) . eqPosText) (cr ^? crInvEquipped . ix i) - col = itemInvColor it - pics = itemDisplay cr it + col = itemInvColor ci + pics = itemDisplay cr ci hotkeyToString :: Hotkey -> String hotkeyToString x = case x of @@ -79,5 +82,5 @@ closeObjectToSelectionItem e = -- closeObjectToTextPictures :: Either FloorItem Button -> ([String], Color) closeObjectToTextPictures e = case e of - Left flit -> let it = _flIt flit in (basicItemDisplay it, itemInvColor it) + Left flit -> let it = _flIt flit in (basicItemDisplay it, itemInvColor . pciToCI $ basePCI it) Right bt -> ([_btText bt], yellow) diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index d59dec42a..53e0a3244 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -5,15 +5,18 @@ module Dodge.Item.Display ( basicItemDisplay, ) where +import Dodge.Data.ComposedItem import ShortShow import Data.Maybe import Dodge.Data.Creature import LensHelp import Padding -itemDisplay :: Creature -> Item -> [String] -itemDisplay cr itm = +itemDisplay :: Creature -> ComposedItem -> [String] +itemDisplay cr ci = zipWithDefaults id (leftPad 15 ' ') itemDisplayPad (basicItemDisplay itm) (itemNumberDisplay cr itm) + where + itm = _cItem ci zipWithDefaults :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c] zipWithDefaults f g h = go diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index becbfd8e8..2f844ec15 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -5,6 +5,9 @@ module Dodge.Item.Grammar ( invAdj, invRootMap, invRootTrees, + pciToCI, + basePCI, + invTrees'', ) where import Control.Applicative @@ -80,8 +83,11 @@ itemToFunction itm = case itm ^. itType of TARGETING{} -> WeaponTargetingSF _ -> UncomposableIsolateSF -simplePCI :: Item -> PartiallyComposedItem -simplePCI itm = case _itType itm of +pciToCI :: PartiallyComposedItem -> ComposedItem +pciToCI (x,y,_) = CItem x y + +basePCI :: Item -> PartiallyComposedItem +basePCI itm = case _itType itm of HELD LASGUN -> (itm, WeaponScopeSF, laserLinkTest itm) _ -> (itm, itemToFunction itm, uncurry useBreakL $ itemToBreakLists itm) @@ -149,7 +155,7 @@ joinItemsInList f xs = snd $ h (xs, []) invLDT :: IM.IntMap Item -> [LabelDoubleTree ItemLink PartiallyComposedItem] invLDT = joinItemsInList (leftRightCombine leftIsParentCombine rightIsParentCombine) . IM.elems - . fmap (singleLDT . simplePCI) + . fmap (singleLDT . basePCI) -- this assumes the creature inventory is well formed, specifically the -- location ids @@ -193,6 +199,16 @@ invTrees' = IM.unions . map (ldtToIM getindex . fmap (^. _1)) . map (fmap (\(x, fromMaybe (error "in invTrees try to get non-inventory item tree") $ i ^? itLocation . ilInvID +-- returns an intmap with trees for all items +--invTrees'' :: IM.IntMap Item -> [LocationLDT ItemLink ComposedItem] +invTrees'' :: IM.IntMap Item -> IM.IntMap (Int,LocationLDT ItemLink ComposedItem) +invTrees'' = IM.unions . map (f . LocLDT TopLDT) . IM.elems . invRootTrees +--invTrees'' = map (LocLDT TopLDT) . IM.elems . invRootTrees + where + f t = cldtPropagateFold h h g 0 t mempty + h x _ _ _ = x + 1 + g x ldt = IM.insert (ldt ^?! locLDT . ldtValue . cItem . itLocation . ilInvID) (x,ldt) + -- returns an intmap with trees for root items, indexed by inventory position invRootTrees :: IM.IntMap Item -> IM.IntMap (LabelDoubleTree ItemLink ComposedItem) invRootTrees = IM.fromAscList . reverse . map (getid . fmap (\(x, y, _) -> CItem x y)) . invLDT diff --git a/src/Dodge/Item/InventoryColor.hs b/src/Dodge/Item/InventoryColor.hs index ec3ce7359..128e47f6a 100644 --- a/src/Dodge/Item/InventoryColor.hs +++ b/src/Dodge/Item/InventoryColor.hs @@ -2,18 +2,21 @@ module Dodge.Item.InventoryColor ( itemInvColor ) where +import Dodge.Data.ComposedItem import Color import Dodge.Data.Item import Control.Lens -itemInvColor :: Item -> Color -itemInvColor itm = case itm ^. itType of - HELD {} -> white - LEFT {} -> cyan - EQUIP {} -> yellow - CONSUMABLE {} -> blue - CRAFT {} -> green - ATTACH {} -> orange - TARGETING {} -> chartreuse - AMMOMAG {} -> greyN 0.8 - BULLETMOD {} -> rose +itemInvColor :: ComposedItem -> Color +itemInvColor ci = case ci ^. cItemFunction of + WeaponPlatformSF -> white + _ -> greyN 0.8 +-- HELD {} -> white +-- LEFT {} -> cyan +-- EQUIP {} -> yellow +-- CONSUMABLE {} -> blue +-- CRAFT {} -> green +-- ATTACH {} -> orange +-- TARGETING {} -> chartreuse +-- AMMOMAG {} -> greyN 0.8 +-- BULLETMOD {} -> rose diff --git a/tags b/tags index 380a51585..a568c5900 100644 --- a/tags +++ b/tags @@ -969,7 +969,7 @@ LBlink src/Dodge/Data/Item/HeldUse.hs 53;" C LBoost src/Dodge/Data/Item/HeldUse.hs 55;" 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 114;" 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 @@ -3384,7 +3384,7 @@ argumentHelp src/Dodge/Terminal.hs 149;" f armourChaseCrit src/Dodge/Creature/ArmourChase.hs 38;" f armouredChasers src/Dodge/Room/Boss.hs 62;" f armouredCorridor src/Dodge/Room/RoadBlock.hs 20;" f -arms src/Dodge/Creature/Picture.hs 72;" f +arms src/Dodge/Creature/Picture.hs 73;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/Hotkey.hs 26;" f @@ -3434,20 +3434,21 @@ baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 255;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 38;" f +basePCI src/Dodge/Item/Grammar.hs 89;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 258;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 342;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 325;" f -baseShoulder src/Dodge/Creature/Picture.hs 128;" f +baseShoulder src/Dodge/Creature/Picture.hs 129;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 232;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 227;" f baseStickSpread src/Dodge/Item/Held/Stick.hs 32;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 127;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 37;" f basicBulDams src/Dodge/Item/Weapon/Bullet.hs 26;" f -basicCrPict src/Dodge/Creature/Picture.hs 26;" f -basicCrShape src/Dodge/Creature/Picture.hs 31;" f +basicCrPict src/Dodge/Creature/Picture.hs 27;" f +basicCrShape src/Dodge/Creature/Picture.hs 32;" f basicDrawBeam src/Dodge/Beam/Draw.hs 11;" f -basicItemDisplay src/Dodge/Item/Display.hs 30;" f +basicItemDisplay src/Dodge/Item/Display.hs 33;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMachineUpdate src/Dodge/Machine.hs 13;" f basicMuzFlare src/Dodge/HeldUse.hs 196;" f @@ -3599,8 +3600,8 @@ clockCycle src/Dodge/Clock.hs 9;" f closeObjEq src/Dodge/Inventory/CloseObject.hs 12;" f closeObjPos src/Dodge/Inventory/CloseObject.hs 7;" f closeObjectInfo src/Dodge/Render/HUD.hs 114;" f -closeObjectToSelectionItem src/Dodge/Inventory/SelectionList.hs 65;" f -closeObjectToTextPictures src/Dodge/Inventory/SelectionList.hs 80;" f +closeObjectToSelectionItem src/Dodge/Inventory/SelectionList.hs 68;" f +closeObjectToTextPictures src/Dodge/Inventory/SelectionList.hs 83;" f closestCreatureID src/Dodge/Debug.hs 91;" f closestPointOnLine src/Geometry/Intersect.hs 251;" f closestPointOnLineParam src/Geometry/Intersect.hs 267;" f @@ -3631,12 +3632,12 @@ colorSH src/Shape.hs 235;" f combinationsDotGraph src/Dodge/Combine/Graph.hs 85;" f combinationsGraph src/Dodge/Combine/Graph.hs 66;" f combinationsOf src/Multiset.hs 40;" f -combinationsTrie src/Dodge/Combine.hs 40;" f +combinationsTrie src/Dodge/Combine.hs 41;" f combineAwareness src/Dodge/Creature/Perception.hs 109;" f combineFloors src/Dodge/Room/Procedural.hs 171;" f combineInventoryExtra src/Dodge/Render/HUD.hs 203;" f -combineItemListYouX src/Dodge/Combine.hs 32;" f -combineList src/Dodge/Combine.hs 19;" f +combineItemListYouX src/Dodge/Combine.hs 33;" f +combineList src/Dodge/Combine.hs 20;" f combineRooms src/Dodge/Room/Procedural.hs 151;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 344;" f combineTree src/Dodge/Tree/Compose.hs 66;" f @@ -3794,10 +3795,10 @@ dbArgChain src/Dodge/Base.hs 148;" f deZoneIX src/Dodge/Zoning/Base.hs 86;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f deadEndRoom src/Dodge/Room/Room.hs 237;" f -deadFeet src/Dodge/Creature/Picture.hs 68;" f -deadRot src/Dodge/Creature/Picture.hs 84;" f -deadScalp src/Dodge/Creature/Picture.hs 81;" f -deadUpperBody src/Dodge/Creature/Picture.hs 125;" f +deadFeet src/Dodge/Creature/Picture.hs 69;" f +deadRot src/Dodge/Creature/Picture.hs 85;" f +deadScalp src/Dodge/Creature/Picture.hs 82;" f +deadUpperBody src/Dodge/Creature/Picture.hs 126;" f debrisSize src/Dodge/Block/Debris.hs 111;" f debugDraw src/Dodge/Debug/Picture.hs 122;" f debugDraw' src/Dodge/Debug/Picture.hs 133;" f @@ -3947,7 +3948,7 @@ disconnectTerminal src/Dodge/Terminal.hs 215;" f displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 33;" f -displayFreeSlots src/Dodge/DisplayInventory.hs 158;" f +displayFreeSlots src/Dodge/DisplayInventory.hs 156;" f displayTerminal src/Dodge/Render/HUD.hs 230;" f displayTerminalLineString src/Dodge/Update.hs 325;" f dist src/Geometry/Vector.hs 179;" f @@ -4072,7 +4073,7 @@ drawDDATest src/Dodge/Debug/Picture.hs 254;" f drawDoorPaths src/Dodge/Debug/Picture.hs 215;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 81;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 8;" f -drawEquipment src/Dodge/Creature/Picture.hs 139;" f +drawEquipment src/Dodge/Creature/Picture.hs 140;" f drawExamineInventory src/Dodge/Render/HUD.hs 84;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 232;" f drawFlame src/Dodge/Flame/Draw.hs 7;" f @@ -4176,7 +4177,7 @@ encircle src/Dodge/Creature/Boid.hs 115;" f encircleCloseP src/Dodge/Creature/Boid.hs 35;" f encircleDistP src/Dodge/Creature/Boid.hs 21;" f encircleP src/Dodge/Creature/Boid.hs 27;" f -enterCombineInv src/Dodge/DisplayInventory.hs 253;" f +enterCombineInv src/Dodge/DisplayInventory.hs 251;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f equipAllocString src/Dodge/Render/HUD.hs 175;" f @@ -4222,7 +4223,7 @@ fallSmallBounce' src/Dodge/Prop/Moving.hs 33;" f fallSmallBounceDamage src/Dodge/Prop/Moving.hs 11;" f farWallDistDirection src/Dodge/Update/Camera.hs 226;" f fdiv src/ShortShow.hs 27;" f -feet src/Dodge/Creature/Picture.hs 50;" f +feet src/Dodge/Creature/Picture.hs 51;" f ffoldM src/Framebuffer/Update.hs 79;" f filter3 src/FoldableHelp.hs 76;" f findBlips src/Dodge/RadarSweep.hs 44;" f @@ -4253,7 +4254,7 @@ flamerPic src/Dodge/Item/Draw/SPic.hs 328;" f flareCircleAt src/Dodge/HeldUse.hs 178;" f flareCircleAt src/Dodge/WorldEvent/Flash.hs 46;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 49;" f -flatLookupItems src/Dodge/Combine.hs 35;" f +flatLookupItems src/Dodge/Combine.hs 36;" f flatShield src/Dodge/Item/Held/Utility.hs 9;" f flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 378;" f fleeFrom src/Dodge/CreatureEffect.hs 120;" f @@ -4329,7 +4330,7 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAmmoLinks src/Dodge/Item/Grammar.hs 62;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 65;" f getArguments src/Dodge/Update/Scroll.hs 151;" f getArguments' src/Dodge/Update/Scroll.hs 139;" f getAvailableListLines src/Dodge/SelectionList.hs 11;" f @@ -4394,7 +4395,7 @@ gridPoints src/Grid.hs 67;" f gridPoints' src/Grid.hs 79;" f gridPoints'' src/Grid.hs 74;" f gridPointsOff src/Grid.hs 62;" f -groupSplitItemAmounts src/Dodge/Combine.hs 48;" f +groupSplitItemAmounts src/Dodge/Combine.hs 49;" f gruntS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 484;" f guardDisconnectedID src/Dodge/Update/Scroll.hs 71;" f gut1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 516;" f @@ -4458,7 +4459,7 @@ homingDrawType src/Dodge/Projectile/Create.hs 12;" f homingModule src/Dodge/Item/Scope.hs 43;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 54;" f -hotkeyToString src/Dodge/Inventory/SelectionList.hs 50;" f +hotkeyToString src/Dodge/Inventory/SelectionList.hs 53;" f humanoidAIList src/Dodge/Humanoid.hs 181;" f hvBulletAmmo src/Dodge/Item/Weapon/Bullet.hs 31;" f iShape src/Dodge/Placement/Instance/LightSource.hs 74;" f @@ -4534,21 +4535,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 165;" f -invDimColor src/Dodge/DisplayInventory.hs 139;" f +invAdj src/Dodge/Item/Grammar.hs 171;" f +invDimColor src/Dodge/DisplayInventory.hs 137;" f invDisplayParams src/Dodge/ListDisplayParams.hs 29;" f invHead src/Dodge/Render/HUD.hs 266;" f -invIndentIM src/Dodge/Item/Grammar.hs 177;" f -invLDT src/Dodge/Item/Grammar.hs 149;" f -invRootMap src/Dodge/Item/Grammar.hs 158;" f -invRootTrees src/Dodge/Item/Grammar.hs 197;" f -invSelectionItem src/Dodge/Inventory/SelectionList.hs 34;" f -invSelectionItem' src/Dodge/Inventory/SelectionList.hs 16;" f +invIndentIM src/Dodge/Item/Grammar.hs 183;" f +invLDT src/Dodge/Item/Grammar.hs 155;" f +invRootMap src/Dodge/Item/Grammar.hs 164;" f +invRootTrees src/Dodge/Item/Grammar.hs 213;" f +invSelectionItem src/Dodge/Inventory/SelectionList.hs 36;" f +invSelectionItem' src/Dodge/Inventory/SelectionList.hs 18;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 161;" f invSize src/Dodge/Inventory/CheckSlots.hs 41;" f -invTrees src/Dodge/Item/Grammar.hs 185;" f -invTrees' src/Dodge/Item/Grammar.hs 189;" f +invTrees src/Dodge/Item/Grammar.hs 191;" f +invTrees' src/Dodge/Item/Grammar.hs 195;" f +invTrees'' src/Dodge/Item/Grammar.hs 204;" f inventoryExtra src/Dodge/Render/HUD.hs 184;" f inventoryExtraH src/Dodge/Render/HUD.hs 195;" f inventoryX src/Dodge/Creature.hs 115;" f @@ -4556,7 +4558,7 @@ inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f invertIntMap src/IntMapHelp.hs 101;" f invertIntMap src/Multiset.hs 61;" f -invertInventoryToMap src/Dodge/Combine.hs 53;" f +invertInventoryToMap src/Dodge/Combine.hs 54;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 25;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f isAmmoIntLink src/Dodge/HeldUse.hs 203;" f @@ -4584,13 +4586,13 @@ isWalkable src/Dodge/Base/Collide.hs 221;" f isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 82;" f -itemBaseName src/Dodge/Item/Display.hs 41;" f +itemBaseName src/Dodge/Item/Display.hs 44;" f itemBlips src/Dodge/RadarSweep.hs 75;" f itemCombinations src/Dodge/Combine/Combinations.hs 54;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 54;" f itemDetectorEffect src/Dodge/HeldUse.hs 228;" f -itemDisplay src/Dodge/Item/Display.hs 14;" f -itemDisplayPad src/Dodge/Item/Display.hs 25;" f +itemDisplay src/Dodge/Item/Display.hs 15;" f +itemDisplayPad src/Dodge/Item/Display.hs 28;" f itemEquipPict src/Dodge/Item/Draw.hs 17;" f itemFromAmmoMag src/Dodge/Item.hs 33;" f itemFromAttachType src/Dodge/Item.hs 42;" f @@ -4600,14 +4602,14 @@ itemFromEquipType src/Dodge/Item.hs 56;" f itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemFromLeftType src/Dodge/Item.hs 76;" f itemInfo src/Dodge/Item/Info.hs 12;" f -itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemNumberDisplay src/Dodge/Item/Display.hs 92;" f +itemInvColor src/Dodge/Item/InventoryColor.hs 10;" f +itemNumberDisplay src/Dodge/Item/Display.hs 95;" 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 -itemString src/Dodge/Item/Display.hs 38;" f -itemToBreakLists src/Dodge/Item/Grammar.hs 41;" f -itemToFunction src/Dodge/Item/Grammar.hs 67;" f +itemString src/Dodge/Item/Display.hs 41;" f +itemToBreakLists src/Dodge/Item/Grammar.hs 44;" f +itemToFunction src/Dodge/Item/Grammar.hs 70;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 22;" f itemUpdate src/Dodge/Creature/State.hs 310;" f itemUseEffect src/Dodge/Creature/Impulse/UseItem.hs 56;" f @@ -4620,7 +4622,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 17;" f itmUsageInfo src/Dodge/Item/Info.hs 200;" f jShape src/Dodge/Placement/Instance/LightSource.hs 86;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 140;" f +joinItemsInList src/Dodge/Item/Grammar.hs 146;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f jsps src/Dodge/LevelGen/PlacementHelper.hs 36;" f @@ -4653,7 +4655,7 @@ lasSensorTurretTest src/Dodge/Room/LasTurret.hs 105;" f lasTunnel src/Dodge/Room/LasTurret.hs 124;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 165;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f -laserLinkTest src/Dodge/Item/Grammar.hs 88;" f +laserLinkTest src/Dodge/Item/Grammar.hs 94;" f lastMap src/Dodge/DoubleTree.hs 174;" f latchkey src/Dodge/Item/Held/Utility.hs 23;" f launcher src/Dodge/Item/Held/Launcher.hs 12;" f @@ -4673,10 +4675,10 @@ ldtToIndentList src/Dodge/DoubleTree.hs 146;" f ldtToLoc src/Dodge/DoubleTree.hs 187;" f left src/DoubleStack.hs 16;" f leftInfo src/Dodge/Item/Info.hs 96;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 110;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 116;" f leftItemSPic src/Dodge/Item/Draw/SPic.hs 97;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 124;" f +leftRightCombine src/Dodge/Item/Grammar.hs 130;" f legsSPic src/Dodge/Item/Draw/SPic.hs 415;" f liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f light src/Color.hs 104;" f @@ -4703,10 +4705,10 @@ listConfig src/Dodge/Menu.hs 199;" f listControls src/Dodge/Menu.hs 212;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 105;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 188;" f -listSelectionColorPicture src/Dodge/DisplayInventory.hs 245;" f +listSelectionColorPicture src/Dodge/DisplayInventory.hs 243;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f -llleft src/Dodge/Item/Grammar.hs 91;" f -llright src/Dodge/Item/Grammar.hs 94;" f +llleft src/Dodge/Item/Grammar.hs 97;" f +llright src/Dodge/Item/Grammar.hs 100;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 120;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 255;" f @@ -4840,7 +4842,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 259;" f maybeOpenTerminal src/Dodge/Update.hs 113;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 107;" f -maybeWarmupStatus src/Dodge/Item/Display.hs 117;" f +maybeWarmupStatus src/Dodge/Item/Display.hs 120;" f mcApplyDamage src/Dodge/Machine/Update.hs 90;" f mcKillBut src/Dodge/Machine/Destroy.hs 34;" f mcKillTerm src/Dodge/Machine/Destroy.hs 26;" f @@ -5070,6 +5072,7 @@ pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f pauseTime src/Dodge/Update.hs 171;" f +pciToCI src/Dodge/Item/Grammar.hs 86;" f peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f pedestalRoom src/Dodge/Room/Containing.hs 49;" f penThing src/Dodge/Bullet.hs 224;" f @@ -5121,7 +5124,7 @@ placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 79;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 60;" f placeString src/Dodge/Render/MenuScreen.hs 54;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 156;" f -plainRegex src/Dodge/DisplayInventory.hs 155;" f +plainRegex src/Dodge/DisplayInventory.hs 153;" f plateCraft src/Dodge/Item/Craftable.hs 46;" f playIfFree src/Sound.hs 136;" f playPositionalSoundQueue src/Sound.hs 144;" f @@ -5402,7 +5405,7 @@ rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 71;" f rifle src/Dodge/Item/Held/Cane.hs 51;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 117;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 123;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5491,7 +5494,7 @@ scale3 src/Picture/Base.hs 145;" f scaleMat src/MatrixHelper.hs 59;" f scaleMatrix src/MatrixHelper.hs 56;" f scaleSH src/Shape.hs 267;" f -scalp src/Dodge/Creature/Picture.hs 93;" f +scalp src/Dodge/Creature/Picture.hs 94;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 69;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f scorchSPic src/Dodge/Creature/State.hs 101;" f @@ -5648,12 +5651,12 @@ shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 10;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 508;" f shoulderHeight src/Dodge/Item/HeldOffset.hs 61;" f -shoulderSH src/Dodge/Creature/Picture.hs 136;" f +shoulderSH src/Dodge/Creature/Picture.hs 137;" f shoulderSP src/Dodge/Creature/HandPos.hs 196;" f -showAttachItem src/Dodge/Item/Display.hs 57;" f -showAutoRechargeProgress src/Dodge/Item/Display.hs 71;" f -showEquipItem src/Dodge/Item/Display.hs 66;" f -showEquipmentNumber src/Dodge/Item/Display.hs 108;" f +showAttachItem src/Dodge/Item/Display.hs 60;" f +showAutoRechargeProgress src/Dodge/Item/Display.hs 74;" f +showEquipItem src/Dodge/Item/Display.hs 69;" f +showEquipmentNumber src/Dodge/Item/Display.hs 111;" f showInt src/Dodge/Item/Info.hs 31;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showManObj src/Dodge/TestString.hs 40;" f @@ -5669,7 +5672,6 @@ shuffleTail src/RandomHelp.hs 55;" f sigmoid src/Dodge/Base.hs 129;" f simpleCrSprings src/Dodge/Update.hs 641;" f simpleDamFL src/Dodge/Flame.hs 41;" f -simplePCI src/Dodge/Item/Grammar.hs 83;" f simpleTermMessage src/Dodge/Terminal.hs 249;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 486;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 340;" f @@ -5894,7 +5896,7 @@ toColor8 src/Color.hs 148;" f toCombNodeLabel src/Dodge/Combine/Graph.hs 81;" f toFloatVAs src/Shader/Compile.hs 211;" f toLabel src/Dodge/Cleat.hs 16;" f -toLasgunUpdate src/Dodge/Item/Grammar.hs 99;" f +toLasgunUpdate src/Dodge/Item/Grammar.hs 105;" f toMultiset src/Multiset.hs 58;" f toOnward src/Dodge/Tree/Compose.hs 101;" f toTopLeft src/Dodge/Render/List.hs 185;" f @@ -5918,7 +5920,7 @@ topTestPart src/Dodge/TestString.hs 35;" f torch src/Dodge/Item/Held/Utility.hs 26;" f torchShape src/Dodge/Item/Draw/SPic.hs 213;" f torqueCr src/Dodge/WorldEffect.hs 70;" f -torso src/Dodge/Creature/Picture.hs 102;" f +torso src/Dodge/Creature/Picture.hs 103;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 265;" f @@ -6064,7 +6066,7 @@ updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 108;" f updateInstantBullets src/Dodge/Update.hs 530;" f updateInv src/Dodge/Creature/State.hs 151;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f -updateInventorySectionItems src/Dodge/DisplayInventory.hs 143;" f +updateInventorySectionItems src/Dodge/DisplayInventory.hs 141;" f updateItemTargeting src/Dodge/Creature/State.hs 264;" f updateItemWithOrientation src/Dodge/Creature/State.hs 193;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 102;" f @@ -6099,8 +6101,8 @@ updateRootItemID src/Dodge/Inventory/Location.hs 41;" f updateScopeZoom src/Dodge/Update/Camera.hs 127;" f updateScopeZoom' src/Dodge/Update/Camera.hs 132;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f -updateSection src/Dodge/DisplayInventory.hs 185;" f -updateSectionsPositioning src/Dodge/DisplayInventory.hs 164;" f +updateSection src/Dodge/DisplayInventory.hs 183;" f +updateSectionsPositioning src/Dodge/DisplayInventory.hs 162;" f updateSeenWalls src/Dodge/Update.hs 561;" f updateShockwave src/Dodge/Shockwave/Update.hs 12;" f updateShockwaves src/Dodge/Update.hs 435;" f @@ -6127,7 +6129,7 @@ updateWheelEvent src/Dodge/Update/Scroll.hs 20;" f updateWheelEvents src/Dodge/Update.hs 290;" f updateWorldEventFlag src/Dodge/Update.hs 108;" f updateWorldEventFlags src/Dodge/Update.hs 102;" f -upperBody src/Dodge/Creature/Picture.hs 132;" f +upperBody src/Dodge/Creature/Picture.hs 133;" f upperBox src/Shape.hs 154;" f upperBoxHalf src/Shape.hs 220;" f upperBoxMT src/Shape.hs 145;" f @@ -6145,8 +6147,8 @@ upperPrismPolyST src/Shape.hs 107;" f upperPrismPolySU src/Shape.hs 113;" f upperPrismPolyTS src/Shape.hs 119;" f upperRounded src/Shape.hs 183;" f -useBreakL src/Dodge/Item/Grammar.hs 22;" f -useBreakListsLinkTest src/Dodge/Item/Grammar.hs 28;" f +useBreakL src/Dodge/Item/Grammar.hs 25;" f +useBreakListsLinkTest src/Dodge/Item/Grammar.hs 31;" f useBulletPayload src/Dodge/Bullet.hs 105;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f @@ -6293,7 +6295,7 @@ zeroZ src/Geometry/Vector.hs 8;" f zipArcs src/Dodge/Tesla/Arc.hs 96;" f zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 117;" f -zipWithDefaults src/Dodge/Item/Display.hs 18;" f +zipWithDefaults src/Dodge/Item/Display.hs 21;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f zoneClouds src/Dodge/Update.hs 322;" f zoneCreature src/Dodge/Zoning/Creature.hs 52;" f