Allow filtering of combinations with mouse click on inventory

This commit is contained in:
2024-11-04 00:07:37 +00:00
parent adca54c1ef
commit fafef1275b
11 changed files with 125 additions and 80 deletions
+1 -1
View File
@@ -1 +1 @@
All good (594 modules, at 20:51:58) All good (594 modules, at 00:06:14)
+1 -1
View File
@@ -21,6 +21,7 @@ data HUDElement
, _diInvFilter :: Maybe String , _diInvFilter :: Maybe String
, _diCloseFilter :: Maybe String , _diCloseFilter :: Maybe String
, _diSelectionExtra :: Int , _diSelectionExtra :: Int
, _diMouseOver :: Maybe (Int, Int)
} }
| DisplayCarte | DisplayCarte
@@ -33,7 +34,6 @@ data MouseInventorySelection
data SubInventory data SubInventory
= NoSubInventory = NoSubInventory
{ _nsSelected :: MouseInventorySelection { _nsSelected :: MouseInventorySelection
, _nsMouseOver :: Maybe (Int, Int)
} }
| ExamineInventory | ExamineInventory
| CombineInventory | CombineInventory
+1 -1
View File
@@ -162,13 +162,13 @@ defaultDisplayInventory =
DisplayInventory DisplayInventory
{ _subInventory = NoSubInventory { _subInventory = NoSubInventory
{_nsSelected = MouseInvNothing {_nsSelected = MouseInvNothing
, _nsMouseOver = Just (0,3)
} }
, _diSections = defaultInvSections , _diSections = defaultInvSections
, _diSelection = Just (1,0) , _diSelection = Just (1,0)
, _diSelectionExtra = 0 , _diSelectionExtra = 0
, _diInvFilter = mempty , _diInvFilter = mempty
, _diCloseFilter = mempty , _diCloseFilter = mempty
, _diMouseOver = Nothing
} }
defaultInvSections :: IM.IntMap (SelectionSection ()) defaultInvSections :: IM.IntMap (SelectionSection ())
+24 -5
View File
@@ -5,10 +5,10 @@ module Dodge.DisplayInventory (
updateCombinePositioning, updateCombinePositioning,
) where ) where
import Data.Bifunctor import Control.Applicative
import Dodge.Inventory
import Control.Lens import Control.Lens
import Control.Monad import Control.Monad
import Data.Bifunctor
import qualified Data.IntMap.Strict as IM import qualified Data.IntMap.Strict as IM
import Data.Maybe import Data.Maybe
import Dodge.Base.You import Dodge.Base.You
@@ -18,10 +18,12 @@ import Dodge.Data.Config
import Dodge.Data.DoubleTree import Dodge.Data.DoubleTree
import Dodge.Data.SelectionList import Dodge.Data.SelectionList
import Dodge.Data.Universe import Dodge.Data.Universe
import Dodge.Inventory
import Dodge.Inventory.SelectionList import Dodge.Inventory.SelectionList
import Dodge.Item.Grammar import Dodge.Item.Grammar
import Dodge.ListDisplayParams import Dodge.ListDisplayParams
import Dodge.SelectionList import Dodge.SelectionList
import Dodge.SelectionSections
import ListHelp import ListHelp
import Picture.Base import Picture.Base
@@ -29,13 +31,14 @@ toggleCombineInv :: Universe -> Universe
toggleCombineInv uv = case uv ^? uvWorld . hud . hudElement . subInventory of toggleCombineInv uv = case uv ^? uvWorld . hud . hudElement . subInventory of
Just CombineInventory{} -> Just CombineInventory{} ->
uv & uvWorld . hud . hudElement . subInventory uv & uvWorld . hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
_ -> uv & uvWorld %~ enterCombineInv (uv ^. uvConfig) _ -> uv & uvWorld %~ enterCombineInv (uv ^. uvConfig)
updateCombinePositioning :: Universe -> Universe updateCombinePositioning :: Universe -> Universe
updateCombinePositioning u = updateCombinePositioning u =
u & uvWorld . hud . hudElement . subInventory . ciSections u & uvWorld . hud . hudElement . subInventory . ciSections
%~ updateCombineSections (_uvWorld u) (_uvConfig u) %~ updateCombineSections (_uvWorld u) (_uvConfig u)
& checkCombineSelectionExists
updateCombineSections :: updateCombineSections ::
World -> World ->
@@ -87,11 +90,24 @@ updateInventoryPositioning u =
-- this is possibly not completely correct -- this is possibly not completely correct
checkInventorySelectionExists :: Universe -> Universe checkInventorySelectionExists :: Universe -> Universe
checkInventorySelectionExists u = fromMaybe u $ do checkInventorySelectionExists u = fromMaybe u $ do
(i,j) <- u ^? uvWorld . hud . hudElement . diSelection . _Just (i, j) <- (u ^? uvWorld . hud . hudElement . diSelection . _Just) <|> Just (0, -1)
Just $ case u ^? uvWorld . hud . hudElement . diSections . ix i . ssItems . ix j of Just $ case u ^? uvWorld . hud . hudElement . diSections . ix i . ssItems . ix j of
Nothing -> u & uvWorld %~ scrollAugNextInSection Nothing -> u & uvWorld %~ scrollAugNextInSection
_ -> u _ -> u
checkCombineSelectionExists :: Universe -> Universe
checkCombineSelectionExists u = fromMaybe u $ do
sss <- u ^? uvWorld . hud . hudElement . subInventory . ciSections
(i, j) <-
u ^? uvWorld . hud . hudElement . subInventory . ciSelection . _Just
<|> Just (0, 0)
Just $ case u ^? uvWorld . hud . hudElement . subInventory . ciSections . ix i . ssItems . ix j of
Nothing ->
u & uvWorld . hud . hudElement . subInventory . ciSelection ?~ (0,-1)
& uvWorld . hud . hudElement . subInventory . ciSelection
%~ scrollSelectionSections (-1) sss
_ -> u
updateDisplaySections :: updateDisplaySections ::
World -> World ->
Configuration -> Configuration ->
@@ -137,7 +153,8 @@ updateDisplaySections w cfig =
(fmap (first removeindentiffiltering) . allInvLocs $ _crInv cr) (fmap (first removeindentiffiltering) . allInvLocs $ _crInv cr)
-- this clearly deserves refactoring, also check if drawInventory/iextra -- this clearly deserves refactoring, also check if drawInventory/iextra
-- needs it at the same time -- needs it at the same time
removeindentiffiltering = if maybe False isFilteringInv (w ^? hud . hudElement . diSections) removeindentiffiltering =
if maybe False isFilteringInv (w ^? hud . hudElement . diSections)
then const 0 then const 0
else id else id
cr = you w cr = you w
@@ -275,6 +292,8 @@ enterCombineInv cfig w =
sss sss
selpos selpos
Nothing Nothing
& hud . hudElement . diInvFilter
.~ Nothing
where where
cm' = IM.fromDistinctAscList . zip [0 ..] $ combineList w cm' = IM.fromDistinctAscList . zip [0 ..] $ combineList w
cm cm
+1 -1
View File
@@ -105,7 +105,7 @@ getRootItemBounds i inv = do
drawDIMouseOver :: World -> Picture drawDIMouseOver :: World -> Picture
drawDIMouseOver w = fromMaybe mempty $ do drawDIMouseOver w = fromMaybe mempty $ do
(j, i) <- w ^? hud . hudElement . subInventory . nsMouseOver . _Just (j, i) <- w ^? hud . hudElement . diMouseOver . _Just
sss <- w ^? hud . hudElement . diSections sss <- w ^? hud . hudElement . diSections
let idp = invDisplayParams w let idp = invDisplayParams w
return . color (withAlpha 0.2 white) $ selSecDrawCursorAt 15 idp curs sss (j, i) return . color (withAlpha 0.2 white) $ selSecDrawCursorAt 15 idp curs sss (j, i)
+7 -3
View File
@@ -3,6 +3,7 @@ module Dodge.SelectionSections (
nextInSectionSS, nextInSectionSS,
ssLookupDown, ssLookupDown,
ssLookupGT, ssLookupGT,
ssTryLookup,
ssSetCursor, ssSetCursor,
-- setFirstPosSelectionSections, -- setFirstPosSelectionSections,
selSecYint, selSecYint,
@@ -77,6 +78,12 @@ ssSetCursor f sss msel = fromMaybe msel $ do
(i, j, _) <- f sss (i, j, _) <- f sss
return $ Just (i, j) return $ Just (i, j)
ssTryLookup :: Maybe (Int,Int) -> IM.IntMap (SelectionSection a) -> Maybe (Int, Int, SelectionItem a)
ssTryLookup msel sss = fromMaybe (ssLookupMin sss) $ do
(i,j) <- msel
itm <- sss ^? ix i . ssItems . ix j
return $ Just (i,j,itm)
ssLookupMax :: IM.IntMap (SelectionSection a) -> Maybe (Int, Int, SelectionItem a) ssLookupMax :: IM.IntMap (SelectionSection a) -> Maybe (Int, Int, SelectionItem a)
ssLookupMax sss = do ssLookupMax sss = do
(i, _) <- IM.lookupMax sss (i, _) <- IM.lookupMax sss
@@ -193,8 +200,6 @@ selSecYint i j sss = do
where where
secpos = sum . fmap (length . _ssShownItems) . fst $ IM.split i sss secpos = sum . fmap (length . _ssShownItems) . fst $ IM.split i sss
-- it is annoying that Control.Foldl doesn't seem to allow for scans to be done
-- at the same time as folds
inverseSelSecYint :: Int -> IM.IntMap (SelectionSection a) -> Maybe (Int, Int) inverseSelSecYint :: Int -> IM.IntMap (SelectionSection a) -> Maybe (Int, Int)
inverseSelSecYint yint sss = do inverseSelSecYint yint sss = do
((i, ss), othersss) <- IM.minViewWithKey sss ((i, ss), othersss) <- IM.minViewWithKey sss
@@ -203,7 +208,6 @@ inverseSelSecYint yint sss = do
then inverseSelSecYint (yint - l) othersss then inverseSelSecYint (yint - l) othersss
else do else do
let ls = L.postscan (L.premap _siHeight L.sum) (_ssItems ss) let ls = L.postscan (L.premap _siHeight L.sum) (_ssItems ss)
--j <- L.fold (L.findIndex (\x -> x - _ssOffset ss > yint)) ls
(j,_) <- L.fold (L.find (\(_,x) -> x - _ssOffset ss > yint)) $ IM.toList ls (j,_) <- L.fold (L.find (\(_,x) -> x - _ssOffset ss > yint)) $ IM.toList ls
return (i, j) return (i, j)
+1 -1
View File
@@ -223,7 +223,7 @@ disconnectTerminal tm =
exitTerminalSubInv :: World -> World exitTerminalSubInv :: World -> World
exitTerminalSubInv w = case w ^? hud . hudElement . subInventory . termID of exitTerminalSubInv w = case w ^? hud . hudElement . subInventory . termID of
Just _ -> w & hud . hudElement . subInventory Just _ -> w & hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
_ -> w _ -> w
damageCodeCommand :: TerminalCommand damageCodeCommand :: TerminalCommand
+1 -1
View File
@@ -23,7 +23,7 @@ import qualified IntMapHelp as IM
testStringInit :: Universe -> [String] testStringInit :: Universe -> [String]
testStringInit u = [show $ u ^? uvWorld . hud . hudElement . diSelection . _Just testStringInit u = [show $ u ^? uvWorld . hud . hudElement . diSelection . _Just
, show $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crManipulation . manObject , show $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crManipulation . manObject
, show $ u ^? uvWorld . hud . hudElement . subInventory . nsMouseOver . _Just , show $ u ^? uvWorld . hud . hudElement . diMouseOver . _Just
, show $ fmap fst $ IM.lookupMin =<< (u ^? uvWorld . hud . hudElement . diSections . ix 0 . ssItems) , show $ fmap fst $ IM.lookupMin =<< (u ^? uvWorld . hud . hudElement . diSections . ix 0 . ssItems)
-- , show . fmap (fmap _siPictures) $ u ^? uvWorld . hud . hudElement . diSections . ix (-1) . ssItems -- , show . fmap (fmap _siPictures) $ u ^? uvWorld . hud . hudElement . diSections . ix (-1) . ssItems
] ]
+2 -2
View File
@@ -294,7 +294,7 @@ checkTermDist w = fromMaybe w $ do
guard $ dist btpos (_crPos $ you w) > 40 guard $ dist btpos (_crPos $ you w) > 40
return $ return $
w & hud . hudElement . subInventory w & hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
updateMouseInventorySelection :: Configuration -> World -> World updateMouseInventorySelection :: Configuration -> World -> World
updateMouseInventorySelection cfig w = fromMaybe w $ do updateMouseInventorySelection cfig w = fromMaybe w $ do
@@ -382,7 +382,7 @@ updateMouseOverInventory :: Configuration -> World -> World
updateMouseOverInventory cfig w = fromMaybe w $ do updateMouseOverInventory cfig w = fromMaybe w $ do
sss <- w ^? hud . hudElement . diSections sss <- w ^? hud . hudElement . diSections
return $ return $
w & hud . hudElement . subInventory . nsMouseOver w & hud . hudElement . diMouseOver
.~ inverseSelNumPos cfig ldp sss (w ^. input . mousePos) .~ inverseSelNumPos cfig ldp sss (w ^. input . mousePos)
where where
ldp = invDisplayParams w ldp = invDisplayParams w
+47 -26
View File
@@ -2,7 +2,7 @@ module Dodge.Update.Input.InGame (
updateUseInputInGame, updateUseInputInGame,
) where ) where
import Dodge.SoundLogic import Control.Monad
import Control.Applicative import Control.Applicative
import qualified Data.IntMap.Strict as IM import qualified Data.IntMap.Strict as IM
import Data.List (sort) import Data.List (sort)
@@ -23,6 +23,7 @@ import Dodge.Inventory.Add
import Dodge.Menu import Dodge.Menu
import Dodge.Save import Dodge.Save
import Dodge.SelectionSections import Dodge.SelectionSections
import Dodge.SoundLogic
import Dodge.Terminal.LeftButton import Dodge.Terminal.LeftButton
import Dodge.Update.Input.Text import Dodge.Update.Input.Text
import Dodge.WorldPos import Dodge.WorldPos
@@ -41,14 +42,11 @@ updateUseInputInGame u = case u ^. uvWorld . hud . hudElement of
| lbinitialpress -> | lbinitialpress ->
u & uvWorld . cWorld . lWorld . terminals . ix tmid . tmInput . tiFocus %~ const True u & uvWorld . cWorld . lWorld . terminals . ix tmid . tmInput . tiFocus %~ const True
CombineInventory{_ciSections = sss, _ciSelection = msel} CombineInventory{_ciSections = sss, _ciSelection = msel}
| lbinitialpress -> u & uvWorld %~ updateCombineInvClick msel sss
| inSubInvRegex (u ^. uvWorld) -> | inSubInvRegex (u ^. uvWorld) ->
u u
& uvWorld . hud . hudElement . subInventory & uvWorld . hud . hudElement . subInventory
%~ docombineregexinput %~ docombineregexinput sss msel
& uvWorld . worldEventFlags . at CombineInventoryChange ?~ ()
| lbinitialpress ->
(uvWorld . worldEventFlags . at InventoryChange ?~ ()) . maybeExitCombine $
over uvWorld (tryCombine sss msel) u
& uvWorld . worldEventFlags . at CombineInventoryChange ?~ () & uvWorld . worldEventFlags . at CombineInventoryChange ?~ ()
_ _
| inInvRegex (u ^. uvWorld) -> | inInvRegex (u ^. uvWorld) ->
@@ -67,15 +65,6 @@ updateUseInputInGame u = case u ^. uvWorld . hud . hudElement of
w = u ^. uvWorld w = u ^. uvWorld
pkeys = u ^. uvWorld . input . pressedKeys pkeys = u ^. uvWorld . input . pressedKeys
lbinitialpress = u ^? uvWorld . input . mouseButtons . ix ButtonLeft == Just 0 lbinitialpress = u ^? uvWorld . input . mouseButtons . ix ButtonLeft == Just 0
docombineregexinput ci = fromMaybe ci $ do
sss <- ci ^? ciSections
msel <- ci ^? ciSelection
filts <- ci ^? ciFilter
let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) (-1) sss msel filts
return $
ci & ciSections .~ sss'
& ciSelection .~ msel'
& ciFilter .~ filts'
dodisplayregexinput x di = fromMaybe di $ do dodisplayregexinput x di = fromMaybe di $ do
sss <- di ^? diSections sss <- di ^? diSections
msel <- di ^? diSelection msel <- di ^? diSelection
@@ -94,6 +83,37 @@ updateUseInputInGame u = case u ^. uvWorld . hud . hudElement of
di & diSections .~ sss' di & diSections .~ sss'
& diSelection .~ msel' & diSelection .~ msel'
& diCloseFilter .~ filts' & diCloseFilter .~ filts'
docombineregexinput sss msel ci = fromMaybe ci $ do
filts <- ci ^? ciFilter
let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) (-1) sss msel filts
return $
ci & ciSections .~ sss'
& ciSelection .~ msel'
& ciFilter .~ filts'
updateCombineInvClick ::
Maybe (Int, Int) ->
IM.IntMap (SelectionSection CombinableItem) ->
World ->
World
updateCombineInvClick msel sss w = fromMaybe trydocombination $ do
(i,j) <- w ^? hud . hudElement . diMouseOver . _Just
guard $ i == 0
str <- fmap (take 5) $ w ^? hud . hudElement . diSections . ix i . ssItems . ix j . siPictures . ix 0
return . (worldEventFlags . at CombineInventoryChange ?~ ()) $ case w ^? hud . hudElement . subInventory . ciFilter . _Just of
Just (_:xs) | str == xs -> w
& hud . hudElement . subInventory . ciFilter .~ Nothing
_ -> w & hud . hudElement . subInventory . ciFilter ?~ ("<" ++ str)
where
trydocombination =
(worldEventFlags . at InventoryChange ?~ ()) . maybeExitCombine $
tryCombine sss msel w
& worldEventFlags . at CombineInventoryChange ?~ ()
--checkCombineSelectionExists :: SubInventory -> SubInventory
--checkCombineSelectionExists x@CombineInventory{_ciSections=sss,_ciSelection=msel}
-- = x & ciSelection %~ ssSetCursor (ssTryLookup msel) sss
--checkCombineSelectionExists x = x
updatePressedButtonsCarte :: World -> World updatePressedButtonsCarte :: World -> World
updatePressedButtonsCarte w = updatePressedButtonsCarte' (_mouseButtons (_input w)) w updatePressedButtonsCarte w = updatePressedButtonsCarte' (_mouseButtons (_input w)) w
@@ -276,11 +296,11 @@ spaceAction w = case w ^. hud . hudElement of
_ -> w _ -> w
DisplayInventory{_subInventory = DisplayTerminal{}} -> DisplayInventory{_subInventory = DisplayTerminal{}} ->
w & hud . hudElement . subInventory w & hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
& worldEventFlags . at InventoryChange ?~ () & worldEventFlags . at InventoryChange ?~ ()
_ -> _ ->
w & hud . hudElement . subInventory w & hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
where where
theLoc = theLoc =
doWorldPos doWorldPos
@@ -292,13 +312,14 @@ toggleMap u = case u ^. uvWorld . hud . hudElement of
DisplayCarte -> DisplayCarte ->
u & uvWorld . hud . hudElement u & uvWorld . hud . hudElement
.~ DisplayInventory .~ DisplayInventory
{ _subInventory = NoSubInventory MouseInvNothing Nothing { _subInventory = NoSubInventory MouseInvNothing
, _diSections = defaultInvSections , _diSections = defaultInvSections
, _diSelection = Nothing , _diSelection = Nothing
, _diSelectionExtra = 0 , _diSelectionExtra = 0
-- , _diFilters = IM.fromList [(-1, mempty), (2, mempty)] , -- , _diFilters = IM.fromList [(-1, mempty), (2, mempty)]
, _diInvFilter = mempty _diInvFilter = mempty
, _diCloseFilter = mempty , _diCloseFilter = mempty
, _diMouseOver = Nothing
} }
_ -> u & uvWorld . hud . hudElement .~ DisplayCarte _ -> u & uvWorld . hud . hudElement .~ DisplayCarte
@@ -306,7 +327,7 @@ toggleTweakInv :: World -> World
toggleTweakInv w = case w ^? hud . hudElement . subInventory of toggleTweakInv w = case w ^? hud . hudElement . subInventory of
Just ExamineInventory{} -> Just ExamineInventory{} ->
w w
& thepointer .~ NoSubInventory MouseInvNothing Nothing & thepointer .~ NoSubInventory MouseInvNothing
_ -> w & thepointer .~ ExamineInventory -- mi _ -> w & thepointer .~ ExamineInventory -- mi
where where
thepointer = hud . hudElement . subInventory thepointer = hud . hudElement . subInventory
@@ -325,9 +346,9 @@ tryCombine sss msel w = fromMaybe w $ do
& cWorld . lWorld . creatures . ix 0 . crHammerPosition .~ HammerDown & cWorld . lWorld . creatures . ix 0 . crHammerPosition .~ HammerDown
& soundStart InventorySound p wrench1S Nothing & soundStart InventorySound p wrench1S Nothing
maybeExitCombine :: Universe -> Universe maybeExitCombine :: World -> World
maybeExitCombine u maybeExitCombine w
| ButtonRight `M.member` (u ^. uvWorld . input . mouseButtons) = u | ButtonRight `M.member` (w ^. input . mouseButtons) = w
| otherwise = | otherwise =
u & uvWorld . hud . hudElement . subInventory w & hud . hudElement . subInventory
.~ NoSubInventory MouseInvNothing Nothing .~ NoSubInventory MouseInvNothing
+36 -35
View File
@@ -511,7 +511,7 @@ Detector src/Dodge/Data/Item/Combine.hs 168;" t
Dirt src/Dodge/Data/Material.hs 11;" C Dirt src/Dodge/Data/Material.hs 11;" C
DisasterType src/Dodge/Data/Scenario.hs 24;" t DisasterType src/Dodge/Data/Scenario.hs 24;" t
Display src/Dodge/Item/Display.hs 1;" m Display src/Dodge/Item/Display.hs 1;" m
DisplayCarte src/Dodge/Data/HUD.hs 25;" C DisplayCarte src/Dodge/Data/HUD.hs 26;" C
DisplayInventory src/Dodge/Data/HUD.hs 17;" C DisplayInventory src/Dodge/Data/HUD.hs 17;" C
DisplayInventory src/Dodge/DisplayInventory.hs 2;" m DisplayInventory src/Dodge/DisplayInventory.hs 2;" m
DisplayTerminal src/Dodge/Data/HUD.hs 45;" C DisplayTerminal src/Dodge/Data/HUD.hs 45;" C
@@ -1186,10 +1186,10 @@ MountedLS src/Dodge/Data/MountedObject.hs 12;" C
MountedObject src/Dodge/Data/MountedObject.hs 11;" t MountedObject src/Dodge/Data/MountedObject.hs 11;" t
MountedObject src/Dodge/Data/MountedObject.hs 6;" m MountedObject src/Dodge/Data/MountedObject.hs 6;" m
MountedProp src/Dodge/Data/MountedObject.hs 13;" C MountedProp src/Dodge/Data/MountedObject.hs 13;" C
MouseInvDrag src/Dodge/Data/HUD.hs 30;" C MouseInvDrag src/Dodge/Data/HUD.hs 31;" C
MouseInvNothing src/Dodge/Data/HUD.hs 31;" C MouseInvNothing src/Dodge/Data/HUD.hs 32;" C
MouseInvSelect src/Dodge/Data/HUD.hs 28;" C MouseInvSelect src/Dodge/Data/HUD.hs 29;" C
MouseInventorySelection src/Dodge/Data/HUD.hs 27;" t MouseInventorySelection src/Dodge/Data/HUD.hs 28;" t
Mouse_position src/Dodge/Data/Config.hs 73;" C Mouse_position src/Dodge/Data/Config.hs 73;" C
Move src/Dodge/Data/ActionPlan.hs 28;" C Move src/Dodge/Data/ActionPlan.hs 28;" C
Move src/Dodge/Wall/Move.hs 3;" m Move src/Dodge/Wall/Move.hs 3;" m
@@ -1265,7 +1265,7 @@ NoRightButtonOptions src/Dodge/Data/RightButtonOptions.hs 14;" C
NoRoomClipBoundaries src/Dodge/Data/Config.hs 105;" C NoRoomClipBoundaries src/Dodge/Data/Config.hs 105;" C
NoShadowFidelity src/Shape/Data.hs 25;" C NoShadowFidelity src/Shape/Data.hs 25;" C
NoShadows src/Dodge/Data/Config.hs 101;" C NoShadows src/Dodge/Data/Config.hs 101;" C
NoSubInventory src/Dodge/Data/HUD.hs 34;" C NoSubInventory src/Dodge/Data/HUD.hs 35;" C
NoWorldEffect src/Dodge/Data/WorldEffect.hs 24;" C NoWorldEffect src/Dodge/Data/WorldEffect.hs 24;" C
Noclip src/Dodge/Data/Config.hs 70;" C Noclip src/Dodge/Data/Config.hs 70;" C
NodeMTree src/Dodge/Tree/Compose/Data.hs 9;" C NodeMTree src/Dodge/Tree/Compose/Data.hs 9;" C
@@ -1807,7 +1807,7 @@ Strategy src/Dodge/Creature/Strategy.hs 1;" m
StrategyActions src/Dodge/Data/ActionPlan.hs 188;" C StrategyActions src/Dodge/Data/ActionPlan.hs 188;" C
StrictHelp src/StrictHelp.hs 1;" m StrictHelp src/StrictHelp.hs 1;" m
StringHelp src/StringHelp.hs 1;" m StringHelp src/StringHelp.hs 1;" m
SubInventory src/Dodge/Data/HUD.hs 33;" t SubInventory src/Dodge/Data/HUD.hs 34;" t
Superfluous src/Shape/Data.hs 38;" C Superfluous src/Shape/Data.hs 38;" C
Surface src/Shape/Data.hs 41;" t Surface src/Shape/Data.hs 41;" t
Survive src/Dodge/Data/Scenario.hs 5;" C Survive src/Dodge/Data/Scenario.hs 5;" C
@@ -2418,6 +2418,7 @@ _delayedEvents src/Dodge/Data/LWorld.hs 131;" f
_dexterity src/Dodge/Data/Creature/Misc.hs 22;" f _dexterity src/Dodge/Data/Creature/Misc.hs 22;" f
_diCloseFilter src/Dodge/Data/HUD.hs 22;" f _diCloseFilter src/Dodge/Data/HUD.hs 22;" f
_diInvFilter src/Dodge/Data/HUD.hs 21;" f _diInvFilter src/Dodge/Data/HUD.hs 21;" f
_diMouseOver src/Dodge/Data/HUD.hs 24;" f
_diSections src/Dodge/Data/HUD.hs 19;" f _diSections src/Dodge/Data/HUD.hs 19;" f
_diSelection src/Dodge/Data/HUD.hs 20;" f _diSelection src/Dodge/Data/HUD.hs 20;" f
_diSelectionExtra src/Dodge/Data/HUD.hs 23;" f _diSelectionExtra src/Dodge/Data/HUD.hs 23;" f
@@ -2742,8 +2743,8 @@ _mgField src/Dodge/Data/Magnet.hs 25;" f
_mgID src/Dodge/Data/Magnet.hs 22;" f _mgID src/Dodge/Data/Magnet.hs 22;" f
_mgPos src/Dodge/Data/Magnet.hs 24;" f _mgPos src/Dodge/Data/Magnet.hs 24;" f
_mgUpdate src/Dodge/Data/Magnet.hs 23;" f _mgUpdate src/Dodge/Data/Magnet.hs 23;" f
_misMaybeEnd src/Dodge/Data/HUD.hs 29;" f _misMaybeEnd src/Dodge/Data/HUD.hs 30;" f
_misSelStart src/Dodge/Data/HUD.hs 29;" f _misSelStart src/Dodge/Data/HUD.hs 30;" f
_moEff src/Dodge/Data/Universe.hs 101;" f _moEff src/Dodge/Data/Universe.hs 101;" f
_moEff1 src/Dodge/Data/Universe.hs 105;" f _moEff1 src/Dodge/Data/Universe.hs 105;" f
_moEff2 src/Dodge/Data/Universe.hs 106;" f _moEff2 src/Dodge/Data/Universe.hs 106;" f
@@ -2775,8 +2776,7 @@ _newArcStep src/Dodge/Data/Item/Params.hs 25;" f
_nodeMetaTree src/Dodge/Tree/Compose/Data.hs 9;" f _nodeMetaTree src/Dodge/Tree/Compose/Data.hs 9;" f
_nodeTree src/Dodge/Tree/Compose/Data.hs 9;" f _nodeTree src/Dodge/Tree/Compose/Data.hs 9;" f
_nodesSearched src/Dodge/Data/Creature/Memory.hs 15;" f _nodesSearched src/Dodge/Data/Creature/Memory.hs 15;" f
_nsMouseOver src/Dodge/Data/HUD.hs 36;" f _nsSelected src/Dodge/Data/HUD.hs 36;" f
_nsSelected src/Dodge/Data/HUD.hs 35;" f
_numLinkEW src/Dodge/Data/Room.hs 33;" f _numLinkEW src/Dodge/Data/Room.hs 33;" f
_numLinkNS src/Dodge/Data/Room.hs 34;" f _numLinkNS src/Dodge/Data/Room.hs 34;" f
_numberFloorVerxs src/Dodge/Data/CWorld.hs 32;" f _numberFloorVerxs src/Dodge/Data/CWorld.hs 32;" f
@@ -4015,7 +4015,7 @@ doPropUpdates src/Dodge/Prop/Update.hs 36;" f
doQuickload src/Dodge/Save.hs 82;" f doQuickload src/Dodge/Save.hs 82;" f
doQuicksave src/Dodge/Save.hs 77;" f doQuicksave src/Dodge/Save.hs 77;" f
doRandImpulse src/Dodge/RandImpulse.hs 7;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f
doRegexInput src/Dodge/Update/Input/InGame.hs 166;" f doRegexInput src/Dodge/Update/Input/InGame.hs 179;" f
doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f
doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f
doRoomPlacements src/Dodge/Layout.hs 122;" f doRoomPlacements src/Dodge/Layout.hs 122;" f
@@ -4568,11 +4568,11 @@ invTrees' src/Dodge/Item/Grammar.hs 200;" f
inventoryExtra src/Dodge/Render/HUD.hs 269;" f inventoryExtra src/Dodge/Render/HUD.hs 269;" f
inventoryExtraH src/Dodge/Render/HUD.hs 280;" f inventoryExtraH src/Dodge/Render/HUD.hs 280;" f
inventoryX src/Dodge/Creature.hs 115;" f inventoryX src/Dodge/Creature.hs 115;" f
inverseSelBoundaryDown src/Dodge/SelectionSections.hs 250;" f inverseSelBoundaryDown src/Dodge/SelectionSections.hs 248;" f
inverseSelBoundaryUp src/Dodge/SelectionSections.hs 237;" f inverseSelBoundaryUp src/Dodge/SelectionSections.hs 235;" f
inverseSelNumPos src/Dodge/SelectionSections.hs 228;" f inverseSelNumPos src/Dodge/SelectionSections.hs 226;" f
inverseSelSecYint src/Dodge/SelectionSections.hs 198;" f inverseSelSecYint src/Dodge/SelectionSections.hs 196;" f
inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 209;" f inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 207;" f
inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f
invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f
invertIntMap src/IntMapHelp.hs 99;" f invertIntMap src/IntMapHelp.hs 99;" f
@@ -4860,7 +4860,7 @@ maybeClearPath src/Dodge/Block.hs 77;" f
maybeClearPaths src/Dodge/Block.hs 74;" f maybeClearPaths src/Dodge/Block.hs 74;" f
maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f
maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f
maybeExitCombine src/Dodge/Update/Input/InGame.hs 328;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 342;" f
maybeOpenTerminal src/Dodge/Update.hs 116;" f maybeOpenTerminal src/Dodge/Update.hs 116;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 111;" f maybeTakeOne src/RandomHelp.hs 111;" f
@@ -5089,7 +5089,7 @@ parseNum src/Dodge/Debug/Terminal.hs 73;" f
pathConnected src/Dodge/Room/CheckConsistency.hs 14;" f pathConnected src/Dodge/Room/CheckConsistency.hs 14;" f
pathEdgeObstructed src/Dodge/Path.hs 43;" f pathEdgeObstructed src/Dodge/Path.hs 43;" f
pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f
pauseGame src/Dodge/Update/Input/InGame.hs 263;" f pauseGame src/Dodge/Update/Input/InGame.hs 276;" f
pauseMenu src/Dodge/Menu.hs 53;" f pauseMenu src/Dodge/Menu.hs 53;" f
pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f
pauseSound src/Dodge/SoundLogic.hs 41;" f pauseSound src/Dodge/SoundLogic.hs 41;" f
@@ -5687,9 +5687,9 @@ showEquipItem src/Dodge/Item/Display.hs 68;" f
showEquipmentNumber src/Dodge/Item/Display.hs 110;" f showEquipmentNumber src/Dodge/Item/Display.hs 110;" f
showInt src/Dodge/Item/Info.hs 31;" f showInt src/Dodge/Item/Info.hs 31;" f
showIntsString src/Dodge/Tree/Compose.hs 129;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f
showManObj src/Dodge/TestString.hs 48;" f showManObj src/Dodge/TestString.hs 49;" f
showTerminalError src/Dodge/Debug/Terminal.hs 76;" f showTerminalError src/Dodge/Debug/Terminal.hs 76;" f
showTimeFlow src/Dodge/TestString.hs 95;" f showTimeFlow src/Dodge/TestString.hs 96;" f
shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f
shrinkVert src/Geometry/Polygon.hs 140;" f shrinkVert src/Geometry/Polygon.hs 140;" f
shuffle src/RandomHelp.hs 49;" f shuffle src/RandomHelp.hs 49;" f
@@ -5746,7 +5746,7 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f
soundWithStatus src/Dodge/SoundLogic.hs 98;" f soundWithStatus src/Dodge/SoundLogic.hs 98;" f
soundWithStatusVolume src/Dodge/SoundLogic.hs 48;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 48;" f
southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f
spaceAction src/Dodge/Update/Input/InGame.hs 266;" f spaceAction src/Dodge/Update/Input/InGame.hs 279;" f
spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 186;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 186;" f
spanColLightI src/Dodge/Placement/Instance/LightSource.hs 179;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 179;" f
spanLS src/Dodge/Placement/Instance/LightSource.hs 171;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 171;" f
@@ -5938,8 +5938,8 @@ toggleCombineInv src/Dodge/DisplayInventory.hs 28;" f
toggleCommand src/Dodge/Terminal.hs 194;" f toggleCommand src/Dodge/Terminal.hs 194;" f
toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 75;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 75;" f
toggleJust src/MaybeHelp.hs 41;" f toggleJust src/MaybeHelp.hs 41;" f
toggleMap src/Dodge/Update/Input/InGame.hs 290;" f toggleMap src/Dodge/Update/Input/InGame.hs 303;" f
toggleTweakInv src/Dodge/Update/Input/InGame.hs 305;" f toggleTweakInv src/Dodge/Update/Input/InGame.hs 319;" f
togglesToEffects src/Dodge/Terminal.hs 245;" f togglesToEffects src/Dodge/Terminal.hs 245;" f
tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f
tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f
@@ -5947,7 +5947,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 332;" f
topInvW src/Dodge/ListDisplayParams.hs 53;" f topInvW src/Dodge/ListDisplayParams.hs 53;" f
topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismEdgeIndices src/Shader/Poke.hs 327;" f
topPrismIndices src/Shader/Poke.hs 402;" f topPrismIndices src/Shader/Poke.hs 402;" f
topTestPart src/Dodge/TestString.hs 44;" f topTestPart src/Dodge/TestString.hs 45;" f
torch src/Dodge/Item/Held/Utility.hs 26;" f torch src/Dodge/Item/Held/Utility.hs 26;" f
torchShape src/Dodge/Item/Draw/SPic.hs 213;" f torchShape src/Dodge/Item/Draw/SPic.hs 213;" f
torqueCr src/Dodge/WorldEffect.hs 70;" f torqueCr src/Dodge/WorldEffect.hs 70;" f
@@ -6010,7 +6010,7 @@ trunkDepth src/TreeHelp.hs 161;" f
tryAssignHotkey src/Dodge/Creature/YourControl.hs 85;" f tryAssignHotkey src/Dodge/Creature/YourControl.hs 85;" f
tryAttachBulletBelt src/Dodge/Euse.hs 40;" f tryAttachBulletBelt src/Dodge/Euse.hs 40;" f
tryChargeBattery src/Dodge/Euse.hs 43;" f tryChargeBattery src/Dodge/Euse.hs 43;" f
tryCombine src/Dodge/Update/Input/InGame.hs 314;" f tryCombine src/Dodge/Update/Input/InGame.hs 328;" f
tryGetChannel src/Sound.hs 96;" f tryGetChannel src/Sound.hs 96;" f
tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 19;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 19;" f
tryGetRootItemInvID src/Dodge/Inventory/Location.hs 28;" f tryGetRootItemInvID src/Dodge/Inventory/Location.hs 28;" f
@@ -6056,7 +6056,7 @@ updateAllNodes src/TreeHelp.hs 85;" f
updateArc src/Dodge/Tesla/Arc.hs 86;" f updateArc src/Dodge/Tesla/Arc.hs 86;" f
updateAttachedItems src/Dodge/Creature/State.hs 173;" f updateAttachedItems src/Dodge/Creature/State.hs 173;" f
updateAutoRecharge src/Dodge/Creature/State.hs 324;" f updateAutoRecharge src/Dodge/Creature/State.hs 324;" f
updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 201;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 214;" f
updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarrel src/Dodge/Barreloid.hs 45;" f
updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f
updateBounds src/Dodge/Update/Camera.hs 245;" f updateBounds src/Dodge/Update/Camera.hs 245;" f
@@ -6067,6 +6067,7 @@ updateCamera src/Dodge/Update/Camera.hs 31;" f
updateCloseObjects src/Dodge/Inventory.hs 117;" f updateCloseObjects src/Dodge/Inventory.hs 117;" f
updateCloud src/Dodge/Update.hs 712;" f updateCloud src/Dodge/Update.hs 712;" f
updateClouds src/Dodge/Update.hs 556;" f updateClouds src/Dodge/Update.hs 556;" f
updateCombineInvClick src/Dodge/Update/Input/InGame.hs 94;" f
updateCombinePositioning src/Dodge/DisplayInventory.hs 35;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 35;" f
updateCombineSections src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 40;" f
updateCreature src/Dodge/Creature/Update.hs 10;" f updateCreature src/Dodge/Creature/Update.hs 10;" f
@@ -6079,7 +6080,7 @@ updateDistortion src/Dodge/Distortion.hs 5;" f
updateDistortions src/Dodge/Update.hs 517;" f updateDistortions src/Dodge/Update.hs 517;" f
updateEnergyBall src/Dodge/EnergyBall.hs 46;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f
updateEnergyBalls src/Dodge/Update.hs 544;" f updateEnergyBalls src/Dodge/Update.hs 544;" f
updateEnterRegex src/Dodge/Update/Input/InGame.hs 242;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 255;" f
updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f
updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO src/Framebuffer/Update.hs 97;" f
updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f
@@ -6093,20 +6094,20 @@ updateHumanoid src/Dodge/Humanoid.hs 12;" f
updateIMl src/Dodge/Update.hs 486;" f updateIMl src/Dodge/Update.hs 486;" f
updateIMl' src/Dodge/Update.hs 491;" f updateIMl' src/Dodge/Update.hs 491;" f
updateInGameCamera src/Dodge/Update/Camera.hs 70;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f
updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 140;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 153;" f
updateInstantBullets src/Dodge/Update.hs 633;" f updateInstantBullets src/Dodge/Update.hs 633;" f
updateInv src/Dodge/Creature/State.hs 152;" f updateInv src/Dodge/Creature/State.hs 152;" f
updateInventoryPositioning src/Dodge/DisplayInventory.hs 81;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 81;" f
updateItemTargeting src/Dodge/Creature/State.hs 268;" f updateItemTargeting src/Dodge/Creature/State.hs 268;" f
updateItemWithOrientation src/Dodge/Creature/State.hs 194;" f updateItemWithOrientation src/Dodge/Creature/State.hs 194;" f
updateKeyInGame src/Dodge/Update/Input/InGame.hs 134;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 147;" f
updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 123;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 136;" f
updateLampoid src/Dodge/Lampoid.hs 12;" f updateLampoid src/Dodge/Lampoid.hs 12;" f
updateLaser src/Dodge/Laser/Update.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 13;" f
updateLasers src/Dodge/Update.hs 415;" f updateLasers src/Dodge/Update.hs 415;" f
updateLightSources src/Dodge/Update.hs 520;" f updateLightSources src/Dodge/Update.hs 520;" f
updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f
updateLongPressInGame src/Dodge/Update/Input/InGame.hs 160;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 173;" f
updateMIM src/Dodge/Update.hs 646;" f updateMIM src/Dodge/Update.hs 646;" f
updateMachine src/Dodge/Machine/Update.hs 16;" f updateMachine src/Dodge/Machine/Update.hs 16;" f
updateMouseInventorySelection src/Dodge/Update.hs 299;" f updateMouseInventorySelection src/Dodge/Update.hs 299;" f
@@ -6119,8 +6120,8 @@ updatePastWorlds src/Dodge/Update.hs 403;" f
updatePosEvent src/Dodge/PosEvent.hs 11;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f
updatePosEvents src/Dodge/Update.hs 553;" f updatePosEvents src/Dodge/Update.hs 553;" f
updatePreload src/Preload/Update.hs 20;" f updatePreload src/Preload/Update.hs 20;" f
updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 98;" f updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 111;" f
updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 101;" f updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 114;" f
updateProjectile src/Dodge/Projectile/Update.hs 23;" f updateProjectile src/Dodge/Projectile/Update.hs 23;" f
updateProp src/Dodge/Prop/Update.hs 11;" f updateProp src/Dodge/Prop/Update.hs 11;" f
updateRBList src/Dodge/Inventory/RBList.hs 16;" f updateRBList src/Dodge/Inventory/RBList.hs 16;" f
@@ -6154,7 +6155,7 @@ updateUniverse src/Dodge/Update.hs 69;" f
updateUniverseFirst src/Dodge/Update.hs 80;" f updateUniverseFirst src/Dodge/Update.hs 80;" f
updateUniverseLast src/Dodge/Update.hs 126;" f updateUniverseLast src/Dodge/Update.hs 126;" f
updateUniverseMid src/Dodge/Update.hs 147;" f updateUniverseMid src/Dodge/Update.hs 147;" f
updateUseInputInGame src/Dodge/Update/Input/InGame.hs 33;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 34;" f
updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 20;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 20;" f
updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f
updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f