Add link types to attachment tree

This commit is contained in:
2024-09-11 11:33:08 +01:00
parent c80217a970
commit 60c399935e
6 changed files with 128 additions and 61 deletions
+1 -1
View File
@@ -1 +1 @@
All good (614 modules, at 16:50:05)
All good (614 modules, at 11:30:44)
+2
View File
@@ -9,6 +9,8 @@ import Control.Lens
import Data.Aeson
import Data.Aeson.TH
data ComposeLinkType = AmmoInLink
| AmmoModLink
data ComposedItem = WeaponCI
| WeaponScopeCI
+8
View File
@@ -8,13 +8,21 @@ module Dodge.Data.DoubleTree
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Data.Bifunctor
data DoubleTree a = DT {_dtValue :: a,_dtLeft :: [DoubleTree a],_dtRight :: [DoubleTree a]}
deriving (Eq,Ord,Show,Read)
data LabelDoubleTree b a = LDT {_ldtValue :: a, _ldtLeft :: [(b,LabelDoubleTree b a)]
,_ldtRight :: [(b,LabelDoubleTree b a)]}
deriving (Eq,Ord,Show,Read)
instance Functor DoubleTree where
fmap f (DT x l r) = DT (f x) (fmap (fmap f) l) (fmap (fmap f) r)
instance Functor (LabelDoubleTree b) where
fmap f (LDT x l r) = LDT (f x) (fmap (second $ fmap f) l) (fmap (second $ fmap f) r)
makeLenses ''DoubleTree
deriveJSON defaultOptions ''DoubleTree
+66 -27
View File
@@ -1,5 +1,9 @@
module Dodge.Item.Grammar
-- (invTree
-- , indentInv
-- )
where
import Control.Applicative
import Data.Maybe
import ListHelp
import Dodge.Data.Item
@@ -13,9 +17,16 @@ type PCI = (ComposedItem, [ComposedItem], [ComposedItem])
type PCI' = (Item,ComposedItem,[ComposedItem], [ComposedItem])
type PCI'' = (Item,ComposedItem,[(ComposeLinkType,ComposedItem)], [(ComposeLinkType,ComposedItem)])
type CIL = (ComposedItem,[(ComposeLinkType,ComposedItem)], [(ComposeLinkType,ComposedItem)])
singleDT :: a -> DoubleTree a
singleDT x = DT x [] []
singleLDT :: a -> LabelDoubleTree b a
singleLDT x = LDT x [] []
baseComposedItem :: ItemBaseType -> PCI
baseComposedItem ibt = case ibt of
HELD BURSTRIFLE -> (WeaponCI, [BulletAmmoCI], [])
@@ -24,10 +35,56 @@ baseComposedItem ibt = case ibt of
ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], [])
_ -> (UncomposableCI, [], [])
baseComposedItem' :: ItemBaseType -> CIL
baseComposedItem' ibt = case ibt of
HELD BURSTRIFLE -> (WeaponCI, [(AmmoInLink,BulletAmmoCI)], [])
AMMOMAG TINMAG -> (BulletAmmoCI, [(AmmoModLink,AmmoModifierCI)], [])
AMMOMAG DRUMMAG -> (BulletAmmoCI, [(AmmoModLink,AmmoModifierCI)], [])
ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], [])
_ -> (UncomposableCI, [], [])
basePCI :: Item -> PCI''
basePCI itm = let (a,b,c) = baseComposedItem' (itm ^. itType . iyBase)
in (itm, a, b, c)
baseCI :: Item -> PCI'
baseCI itm = let (a,b,c) = baseComposedItem (itm ^. itType . iyBase)
in (itm, a, b, c)
combineMaybe :: (a -> a -> Maybe b) -> (a -> a -> b -> a) -> a -> a -> Maybe a
combineMaybe t f x y = fmap (f x y) (t x y)
type LDTTest a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe b
type LDTCombine a b = LabelDoubleTree b a -> LabelDoubleTree b a -> b -> LabelDoubleTree b a
type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a)
-- the following imposes a strict ordering on the possible attachments
leftIsParentCombine :: LDTComb PCI'' ComposeLinkType
leftIsParentCombine (LDT (itm,p,lc,rc) lt rt) t'@(LDT (_,p',_,_) _ _) = do
let f (_,x) = p' == x
(_,ys) = break f rc
(linktype,_) <- safeHead ys
return $ LDT (itm,p,lc,tail ys) lt (rt ++ [(linktype,t')])
rightIsParentCombine :: LDTComb PCI'' ComposeLinkType
rightIsParentCombine t'@(LDT (_,p',_,_) _ _) (LDT (itm,p,lc,rc) lt rt) = do
let f (_,x) = p' == x
(_,ys) = break f lc
(linktype,_) <- safeHead ys
return $ LDT (itm,p,tail ys,rc) ((linktype,t'):lt) rt
leftRightCombine :: LDTComb a b -> LDTComb a b
-> LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a)
leftRightCombine f f' t1 t2 = f t1 t2
<|> checkdepth t1 t2
where
checkdepth t t'@(LDT x ls rs) = fromMaybe (checktop t t') $ do
(lab,t'') <- safeHead ls
tx <- checkdepth t t''
return $ Just $ LDT x ((lab,tx):tail ls) rs
checktop t t' = f' t t'
joinItems :: DoubleTree PCI' -> DoubleTree PCI' -> Maybe (DoubleTree PCI')
joinItems t@(DT (itm,px,lc',rc') ls' rs') s@(DT (_,py,_,_) _ _)
| py `elem` rc' = Just (DT (itm,px,lc', delete py rc') ls' (rs' ++ [s]))
@@ -41,33 +98,6 @@ joinItems t@(DT (itm,px,lc',rc') ls' rs') s@(DT (_,py,_,_) _ _)
| pa `elem` lc = Just (DT (itm2,pb, delete pa lc,rc) (a:ls) rs)
| otherwise = Nothing
--joinItems' :: DoubleTree PCI -> DoubleTree PCI -> Maybe (DoubleTree PCI)
--joinItems' t@(DT (px,cx) ls' rs') s@(DT (py,_) _ _)
-- | py `elem` cx = Just (DT (px, delete py cx) ls' (rs' ++ [s]))
-- | otherwise = checkdepth t s
-- where
-- checkdepth a a'@(DT b ls rs) = fromMaybe (checktop a a') $ do
-- c <- safeHead ls
-- d <- checkdepth a c
-- return $ Just $ DT b (d:ls) rs
-- checktop a@(DT (pa,_) _ _) (DT (pb,cb) ls rs)
-- | pa `elem` cb = Just (DT (pb, delete pa cb) (a:ls) rs)
-- | otherwise = Nothing
--
--joinItems'' :: Tree PCI -> Tree PCI -> Maybe (Tree PCI)
--joinItems'' t@(Node (px,cx) xs) s@(Node (py,_) _)
---- | fst y `elem` cx = Just (Node (px, delete y cx) (xs ++ [s]))
-- | py `elem` cx = Just (Node (px, delete py cx) (xs ++ [s]))
-- | otherwise = checkdepth t s
-- where
-- checkdepth a a'@(Node b cs) = fromMaybe (checktop a a') $ do
-- c <- safeHead cs
-- d <- checkdepth a c
-- return $ Just $ Node b (d:cs)
-- checktop a@(Node (pa,_) _) (Node (pb,cb) bs)
-- | pa `elem` cb = Just (Node (pb, delete pa cb) (a:bs))
-- | otherwise = Nothing
joinItemsInList :: (a -> a -> Maybe a) -> [a] -> [a]
joinItemsInList f xs = snd $ h (xs,[])
where
@@ -113,6 +143,10 @@ prettyDT :: (a -> String) -> DoubleTree a -> [String]
prettyDT f (DT x l r) = concatMap (map ('/':) . prettyDT f) r
++ (f x : concatMap (map ('\\':) . prettyDT f) l)
prettyLDT :: (a -> String) -> LabelDoubleTree b a -> [String]
prettyLDT f (LDT x l r) = concatMap (map ('/':) . prettyLDT f . snd) r
++ (f x : concatMap (map ('\\':) . prettyLDT f . snd) l)
invTree :: IM.IntMap Item -> [String]
invTree = concatMap (prettyDT (\(itm,_,_,_) -> show (_itType itm))) .
joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI)
@@ -122,6 +156,11 @@ indentInv = IM.fromList . zip [0..] .
reverse . concatMap (flattenDT .indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap (const "")) .
joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI)
--invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType PCI'']
invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType PCI'']
invLDT = joinItemsInList (leftRightCombine leftIsParentCombine rightIsParentCombine) . IM.elems .
fmap (singleLDT . basePCI)
--indentInv :: IM.IntMap Item -> [String]
--indentInv = concat . fmap (flattenDT . indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap const "")
-- . joinItemsInList joinItems
+6 -1
View File
@@ -1,6 +1,7 @@
{-# OPTIONS_GHC -Wno-unused-imports #-}
module Dodge.TestString where
import Dodge.Data.DoubleTree
import Dodge.Item.Grammar
import Dodge.Item.Display
import AesonHelp
@@ -20,7 +21,11 @@ import Dodge.Data.Universe
--import qualified Data.Map.Strict as M
import qualified IntMapHelp as IM
testStringInit :: Universe -> [String]
testStringInit u = maybe [] invTree (u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crInv)
testStringInit u = fromMaybe mempty $ do
inv <- fmap invLDT $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crInv
return $ concatMap (prettyLDT (\(x,_,_,_) -> take 5 (show $ x ^. itType . iyBase))) inv
--testStringInit u = maybe [] invTree (u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crInv)
-- [fromMaybe "" $ do
-- cr <- u ^? uvWorld . cWorld . lWorld . creatures . ix 0
-- i <- cr ^? crManipulation . manObject . inInventory . ispItem
+45 -32
View File
@@ -74,9 +74,11 @@ Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 6;" m
Ammo src/Dodge/Item/Ammo.hs 1;" m
AmmoCheckMod src/Dodge/Data/Item/HeldUse.hs 82;" C
AmmoHammerTimeUseOneMod src/Dodge/Data/Item/HeldUse.hs 84;" C
AmmoInLink src/Dodge/Data/ComposedItem.hs 12;" C
AmmoMagType src/Dodge/Data/Item/Combine.hs 109;" t
AmmoMagUse src/Dodge/Data/Item/Use.hs 58;" C
AmmoModifierCI src/Dodge/Data/ComposedItem.hs 15;" C
AmmoModLink src/Dodge/Data/ComposedItem.hs 13;" C
AmmoModifierCI src/Dodge/Data/ComposedItem.hs 17;" C
AmmoParams src/Dodge/Data/Item/Use.hs 82;" t
AmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 1;" m
AmmoPosition src/Dodge/Item/AmmoPosition.hs 8;" t
@@ -303,7 +305,7 @@ Bullet src/Dodge/Data/Bullet.hs 6;" m
Bullet src/Dodge/Item/Weapon/Bullet.hs 1;" m
BulletAmmo src/Dodge/Data/Ammo.hs 37;" C
BulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" C
BulletAmmoCI src/Dodge/Data/ComposedItem.hs 16;" C
BulletAmmoCI src/Dodge/Data/ComposedItem.hs 18;" C
BulletBeltAttachment src/Dodge/Data/Item.hs 52;" C
BulletClipAttachment src/Dodge/Data/Item.hs 51;" C
BulletEffect src/Dodge/Data/Bullet.hs 36;" t
@@ -451,7 +453,8 @@ CombineInventoryChange src/Dodge/Data/World.hs 33;" C
Common src/Dodge/Zoning/Common.hs 1;" m
Compile src/Shader/Compile.hs 1;" m
Compose src/Dodge/Tree/Compose.hs 4;" m
ComposedItem src/Dodge/Data/ComposedItem.hs 13;" t
ComposeLinkType src/Dodge/Data/ComposedItem.hs 12;" t
ComposedItem src/Dodge/Data/ComposedItem.hs 15;" t
ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m
Composite src/Picture/Composite.hs 1;" m
ComsSS src/Dodge/Data/Scenario.hs 98;" C
@@ -586,7 +589,7 @@ DRUM src/Dodge/Combine/Data.hs 34;" C
DRUMMAG src/Dodge/Combine/Data.hs 199;" C
DRUMMAG src/Dodge/Data/Item/Combine.hs 112;" C
DS src/DoubleStack.hs 3;" t
DT src/Dodge/Data/DoubleTree.hs 13;" C
DT src/Dodge/Data/DoubleTree.hs 14;" C
DUALBEAM src/Dodge/Combine/Data.hs 171;" C
DUALBEAM src/Dodge/Data/Item/Combine.hs 191;" C
DUCTTAPE src/Dodge/Combine/Data.hs 31;" C
@@ -725,7 +728,7 @@ DoorPart src/Dodge/Data/Wall.hs 50;" C
DoorStatus src/Dodge/Data/Door.hs 23;" t
DoubleRes src/Dodge/Data/Config.hs 95;" C
DoubleStack src/DoubleStack.hs 1;" m
DoubleTree src/Dodge/Data/DoubleTree.hs 13;" t
DoubleTree src/Dodge/Data/DoubleTree.hs 14;" t
DoubleTree src/Dodge/Data/DoubleTree.hs 5;" m
DownscaleSize src/Dodge/DownscaleSize.hs 1;" m
DrWdId src/Dodge/Data/WorldEffect.hs 65;" C
@@ -1340,6 +1343,10 @@ LAUNCHHOME src/Dodge/Data/Item/Combine.hs 218;" C
LBlink src/Dodge/Data/Item/HeldUse.hs 63;" C
LBoost src/Dodge/Data/Item/HeldUse.hs 65;" C
LBranches src/TreeExtra.hs 24;" C
LDT src/Dodge/Data/DoubleTree.hs 17;" C
LDTComb src/Dodge/Item/Grammar.hs 43;" t
LDTCombine src/Dodge/Item/Grammar.hs 41;" t
LDTTest src/Dodge/Item/Grammar.hs 40;" t
LDoNothing src/Dodge/Data/Item/HeldUse.hs 58;" C
LED src/Dodge/Combine/Data.hs 51;" C
LED src/Dodge/Data/Item/Combine.hs 57;" C
@@ -1368,6 +1375,7 @@ Label src/Dodge/Render/Label.hs 1;" m
LabelAction src/Dodge/Data/ActionPlan.hs 79;" C
LabelCluster src/Dodge/Data/RoomCluster.hs 14;" C
LabelCluster src/Dodge/RoomCluster/Data.hs 12;" C
LabelDoubleTree src/Dodge/Data/DoubleTree.hs 17;" t
LabelLayer src/Dodge/Picture/Layer/Data.hs 11;" C
Laboratory src/Dodge/Data/Scenario.hs 61;" C
Lamp src/Dodge/Creature/Lamp.hs 1;" m
@@ -1840,8 +1848,9 @@ P2Ac src/Dodge/Data/CreatureEffect.hs 53;" t
P2Imp src/Dodge/Data/CreatureEffect.hs 28;" t
P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C
P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C
PCI src/Dodge/Item/Grammar.hs 12;" t
PCI' src/Dodge/Item/Grammar.hs 14;" t
PCI src/Dodge/Item/Grammar.hs 16;" t
PCI' src/Dodge/Item/Grammar.hs 18;" t
PCI'' src/Dodge/Item/Grammar.hs 20;" t
PENBUL src/Dodge/Combine/Data.hs 204;" C
PENMODULE src/Dodge/Combine/Data.hs 70;" C
PIERCING src/Dodge/Data/Damage/Type.hs 12;" C
@@ -2710,7 +2719,7 @@ TwoHandUnder src/Dodge/Data/Item/Use.hs 121;" 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
UncomposableCI src/Dodge/Data/ComposedItem.hs 17;" C
UncomposableCI src/Dodge/Data/ComposedItem.hs 19;" 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
@@ -2872,8 +2881,8 @@ WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 31;" C
WdYouPos src/Dodge/Data/WorldEffect.hs 39;" C
Weapon src/Dodge/Default/Weapon.hs 1;" m
Weapon src/Dodge/Item/Weapon.hs 2;" m
WeaponCI src/Dodge/Data/ComposedItem.hs 13;" C
WeaponScopeCI src/Dodge/Data/ComposedItem.hs 14;" C
WeaponCI src/Dodge/Data/ComposedItem.hs 15;" C
WeaponScopeCI src/Dodge/Data/ComposedItem.hs 16;" 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
@@ -3300,9 +3309,9 @@ _drSpeed src/Dodge/Data/Door.hs 45;" f
_drStatus src/Dodge/Data/Door.hs 37;" f
_drTrigger src/Dodge/Data/Door.hs 38;" f
_drWallIDs src/Dodge/Data/Door.hs 36;" f
_dtLeft src/Dodge/Data/DoubleTree.hs 13;" f
_dtRight src/Dodge/Data/DoubleTree.hs 13;" f
_dtValue src/Dodge/Data/DoubleTree.hs 13;" f
_dtLeft src/Dodge/Data/DoubleTree.hs 14;" f
_dtRight src/Dodge/Data/DoubleTree.hs 14;" f
_dtValue src/Dodge/Data/DoubleTree.hs 14;" f
_ebColor src/Dodge/Data/EnergyBall.hs 17;" f
_ebEff src/Dodge/Data/EnergyBall.hs 21;" f
_ebPos src/Dodge/Data/EnergyBall.hs 18;" f
@@ -3553,6 +3562,9 @@ _ldpPos src/Dodge/Data/SelectionList.hs 19;" f
_ldpScale src/Dodge/Data/SelectionList.hs 20;" f
_ldpVerticalGap src/Dodge/Data/SelectionList.hs 21;" f
_ldpWidth src/Dodge/Data/SelectionList.hs 23;" f
_ldtLeft src/Dodge/Data/DoubleTree.hs 17;" f
_ldtRight src/Dodge/Data/DoubleTree.hs 18;" f
_ldtValue src/Dodge/Data/DoubleTree.hs 17;" f
_leadTargetBy src/Dodge/Data/ActionPlan.hs 150;" f
_leftConsumption src/Dodge/Data/Item/Use.hs 44;" f
_leftDelay src/Dodge/Data/Item/Use.hs 41;" f
@@ -4504,9 +4516,9 @@ baseAMRShape src/Dodge/Item/Draw/SPic.hs 445;" 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
baseCI src/Dodge/Item/Grammar.hs 27;" f
baseCI src/Dodge/Item/Grammar.hs 33;" f
baseCaneShape src/Dodge/Item/Draw/SPic.hs 251;" f
baseComposedItem src/Dodge/Item/Grammar.hs 19;" f
baseComposedItem src/Dodge/Item/Grammar.hs 25;" f
baseDebris src/Dodge/Block/Debris.hs 122;" f
baseFloorTileSize src/Tile.hs 38;" f
baseRifleShape src/Dodge/Item/Draw/SPic.hs 254;" f
@@ -4765,6 +4777,7 @@ combineItemListYouX src/Dodge/Combine.hs 70;" f
combineList src/Dodge/Combine.hs 78;" f
combineList' src/Dodge/Combine.hs 83;" f
combineListInfo src/Dodge/Combine.hs 97;" f
combineMaybe src/Dodge/Item/Grammar.hs 37;" f
combineModuleMaps src/Dodge/Combine.hs 108;" f
combineRooms src/Dodge/Room/Procedural.hs 151;" f
combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 344;" f
@@ -5487,7 +5500,7 @@ flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 489;" f
flatV2 src/Picture/Data.hs 65;" f
flatV3 src/Picture/Data.hs 68;" f
flatV4 src/Picture/Data.hs 71;" f
flattenDT src/Dodge/Item/Grammar.hs 109;" f
flattenDT src/Dodge/Item/Grammar.hs 158;" f
flattenIMIMIM src/Dodge/Base/Zone.hs 246;" f
fleeFrom src/Dodge/CreatureEffect.hs 119;" f
fleeFromTarget src/Dodge/CreatureEffect.hs 65;" f
@@ -5675,7 +5688,7 @@ hatCombinations src/Dodge/Combine/Combinations.hs 33;" f
head src/DoubleStack.hs 14;" f
headLamp src/Dodge/Item/Equipment.hs 118;" f
headLampShape src/Dodge/Item/Draw/SPic.hs 495;" f
headMap src/Dodge/Item/Grammar.hs 80;" f
headMap src/Dodge/Item/Grammar.hs 129;" f
heal src/Dodge/Item/Consumable.hs 17;" f
heal25 src/Dodge/Item/Consumable.hs 14;" f
healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 354;" f
@@ -5713,9 +5726,9 @@ hvBulDams src/Dodge/Particle/Damage.hs 13;" f
hvBulHitCr src/Dodge/Particle/Bullet/HitEffect.hs 17;" f
hvBulHitWall src/Dodge/Particle/Bullet/HitEffect.hs 54;" f
hvBulletAmmo src/Dodge/Item/Weapon/Bullet.hs 31;" f
iDTL src/Dodge/Item/Grammar.hs 94;" f
iDTR src/Dodge/Item/Grammar.hs 99;" f
iDTboth src/Dodge/Item/Grammar.hs 104;" f
iDTL src/Dodge/Item/Grammar.hs 143;" f
iDTR src/Dodge/Item/Grammar.hs 148;" f
iDTboth src/Dodge/Item/Grammar.hs 153;" f
iShape src/Dodge/Placement/Instance/LightSource.hs 74;" f
iShape src/Dodge/Placements/LightSource.hs 32;" f
icosahedronPoints src/Polyhedra/Geodesic.hs 11;" f
@@ -5735,8 +5748,8 @@ incBallAt src/Dodge/EnergyBall.hs 54;" f
incendiaryModule src/Dodge/Item/Craftable.hs 21;" f
incidenceToFunction src/Dodge/Graph.hs 26;" f
indefiniteExceptions src/StringHelp.hs 29;" f
indentDoubleTreeWith src/Dodge/Item/Grammar.hs 89;" f
indentInv src/Dodge/Item/Grammar.hs 120;" f
indentDoubleTreeWith src/Dodge/Item/Grammar.hs 138;" f
indentInv src/Dodge/Item/Grammar.hs 169;" f
initCrItemLocation src/Dodge/Item/Location/Initialize.hs 39;" f
initCrItemLocations src/Dodge/Item/Location/Initialize.hs 34;" f
initCrsItemLocations src/Dodge/Item/Location/Initialize.hs 14;" f
@@ -5811,7 +5824,7 @@ invSelectionItem src/Dodge/Inventory/SelectionList.hs 16;" f
invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f
invSideEff src/Dodge/Creature/State.hs 232;" f
invSize src/Dodge/Inventory/CheckSlots.hs 40;" f
invTree src/Dodge/Item/Grammar.hs 116;" f
invTree src/Dodge/Item/Grammar.hs 165;" f
inventoryX src/Dodge/Creature.hs 115;" f
inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f
invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f
@@ -5890,10 +5903,8 @@ 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 92;" f
joinItems src/Dodge/Item/Grammar.hs 31;" f
joinItems' src/Dodge/Item/Grammar.hs 44;" f
joinItems'' src/Dodge/Item/Grammar.hs 57;" f
joinItemsInList src/Dodge/Item/Grammar.hs 71;" f
joinItems src/Dodge/Item/Grammar.hs 80;" f
joinItemsInList src/Dodge/Item/Grammar.hs 120;" 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
@@ -5943,7 +5954,7 @@ lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f
lasTurret src/Dodge/Placements/Turret.hs 29;" f
lasWide src/Dodge/Item/Held/BatteryGuns.hs 97;" f
lasWideRate src/Dodge/HeldUse.hs 353;" f
lastMap src/Dodge/Item/Grammar.hs 84;" f
lastMap src/Dodge/Item/Grammar.hs 133;" f
latchkey src/Dodge/Item/Held/Utility.hs 23;" f
latchkey src/Dodge/Item/PassKey.hs 14;" f
launcher src/Dodge/Item/Held/Launcher.hs 10;" f
@@ -5955,9 +5966,11 @@ layerNum src/Picture/Data.hs 31;" f
layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f
ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 90;" f
left src/DoubleStack.hs 16;" f
leftCombine src/Dodge/Item/Grammar.hs 45;" f
leftInfo src/Dodge/Item/Info.hs 110;" f
leftItemSPic src/Dodge/Item/Draw/SPic.hs 72;" f
leftPad src/Padding.hs 14;" f
leftRightCombine src/Dodge/Item/Grammar.hs 54;" f
legsSPic src/Dodge/Item/Draw/SPic.hs 529;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f
liShape src/Dodge/Placements/LightSource.hs 55;" f
@@ -6608,7 +6621,7 @@ prependTwo src/Geometry.hs 165;" f
pressedMBEffects src/Dodge/Update/UsingInput.hs 27;" f
pressedMBEffectsNoInventory src/Dodge/Update/UsingInput.hs 40;" f
pressedMBEffectsTopInventory src/Dodge/Creature/YourControl.hs 206;" f
prettyDT src/Dodge/Item/Grammar.hs 112;" f
prettyDT src/Dodge/Item/Grammar.hs 161;" f
primeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 422;" f
printColumnTitles src/Dodge/Tree/Shift.hs 142;" f
printColumns src/Dodge/Tree/Shift.hs 132;" f
@@ -7152,7 +7165,7 @@ showIntsString src/Dodge/Tree/Compose.hs 129;" f
showLoadedAmount src/Dodge/Item/Display.hs 158;" f
showPhaseV src/Dodge/Tweak/Show.hs 16;" f
showTerminalError src/Dodge/Debug/Terminal.hs 75;" f
showTimeFlow src/Dodge/TestString.hs 56;" f
showTimeFlow src/Dodge/TestString.hs 58;" f
showTractionPower src/Dodge/Tweak/Show.hs 22;" f
showTweak src/Dodge/Tweak/Show.hs 5;" f
shrinkGun src/Dodge/Item/Weapon/Utility.hs 44;" f
@@ -7179,7 +7192,7 @@ singleBarrel src/Dodge/Item/Held/SingleBarrel.hs 6;" f
singleBlock src/Dodge/Placement/Instance/Wall.hs 30;" f
singleBlock src/Dodge/Placements/Wall.hs 11;" f
singleBlock src/Dodge/Room/Placement.hs 23;" f
singleDT src/Dodge/Item/Grammar.hs 16;" f
singleDT src/Dodge/Item/Grammar.hs 22;" f
singleton src/DoubleStack.hs 11;" f
singletonTrie src/SimpleTrie.hs 14;" f
sizeFBOs src/Framebuffer/Update.hs 22;" f
@@ -7406,7 +7419,7 @@ testEvent src/Dodge/Event/Test.hs 10;" f
testEventKey src/Dodge/Config/KeyConfig.hs 27;" f
testInventory src/Dodge/Creature.hs 245;" f
testPic src/Dodge/Render/ShapePicture.hs 153;" f
testStringInit src/Dodge/TestString.hs 21;" f
testStringInit src/Dodge/TestString.hs 22;" f
text src/Picture/Base.hs 192;" f
textGrad src/Picture/Text.hs 5;" f
textJustifyCenter src/Picture/Base.hs 211;" f