Refactor floor items to use centralised items intmap

This commit is contained in:
2025-08-24 13:14:49 +01:00
parent c38d03165f
commit 22b4be440a
14 changed files with 170 additions and 152 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -8,11 +8,11 @@ module Dodge.Data.FloorItem where
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Dodge.Data.Item
--import Dodge.Data.Item
import Geometry.Data
data FloorItem = FlIt {_flIt :: Item, _flItPos :: Point2, _flItRot :: Float}--, _flItID :: NewInt FloorInt}
data FloorItem = FlIt {_flItPos :: Point2, _flItRot :: Float}--, _flItID :: NewInt FloorInt}
--deriving (Eq, Show, Read) --Generic, Flat)
makeLenses ''FloorItem
+1 -1
View File
@@ -25,7 +25,7 @@ defaultEquipment :: Item
defaultEquipment = defaultHeldItem & itUse .~ UseNothing
defaultFlIt :: FloorItem
defaultFlIt = FlIt{_flItRot = 0, _flIt = defaultHeldItem, _flItPos = V2 0 0}
defaultFlIt = FlIt{_flItRot = 0, _flItPos = V2 0 0}
defaultMachine :: Machine
defaultMachine =
+2 -6
View File
@@ -24,18 +24,14 @@ copyItemToFloorID pos it w =
w'
& cWorld . lWorld . floorItems %~ IM.insert (_unNInt $ _itID it) theflit
& cWorld . lWorld . itemLocations %~ IM.insert (_unNInt $ _itID it) OnFloor
& cWorld . lWorld . items . ix (_unNInt $ _itID it) . itLocation .~ OnFloor
& hud . closeItems %~ (_itID it:)
-- & hud . hudElement . diSections . ix 3 . ssOffset .~ 0
-- ensures dropped item is at the top of the close item selection list
where
(p', w') = findWallFreeDropPoint (_dimRad $ itDim it) pos w
rot = fst . randomR (- pi, pi) $ _randGen w
theflit =
FlIt
{ _flIt = it & itLocation .~ OnFloor
, _flItPos = p'
, _flItRot = rot
}
theflit = FlIt { _flItPos = p' , _flItRot = rot }
cardinalVectors :: [Point2]
cardinalVectors =
+2 -1
View File
@@ -125,7 +125,8 @@ updateCloseObjects w =
g oldbts = intersect oldbts cbts `union` cbts
f olditems = intersect olditems citems `union` citems
lw = w ^. cWorld . lWorld
citems = lw^..floorItems . each . filtered (isclose . _flItPos) . to (_itID . _flIt)
citems = let is = IM.filter (isclose . _flItPos) (lw^.floorItems)
in map NInt $ IM.keys $ IM.intersection (lw ^. items) is
isclose x = dist y x < 40 && hasButtonLOS y x w
y = _crPos $ you w
cbts = lw^..buttons . each . filtered canpress . filtered (isclose . _btPos) . to _btID
+79 -52
View File
@@ -1,3 +1,4 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Inventory.Add (
tryPutItemInInv,
createItemYou,
@@ -17,49 +18,13 @@ import Dodge.SoundLogic
import qualified IntMapHelp as IM
import NewInt
tryPutFloorItemIDInInv :: Int -> Int -> World -> Maybe (Int, World)
tryPutFloorItemIDInInv cid i w = do
flit <- w ^? cWorld . lWorld . floorItems . ix i
tryPutItemInInv cid flit w
-- not sure why we have the cid here, this will probably only work for cid == 0
tryPutItemInInvAt :: Int -> Int -> FloorItem -> World -> Maybe World
tryPutItemInInvAt i cid flit w = do
(j, w') <- tryPutItemInInv cid flit w
guard (i <= j)
return $ foldr f w' [i + 1 .. j]
where
f j = swapInvItems (\_ _ -> Just (j -1)) j
-- | Pick up a specific item.
tryPutItemInInv :: Int -> FloorItem -> World -> Maybe (Int, World)
tryPutItemInInv cid flit w = do
i <- checkInvSlotsYou it w
Just
( i
, w
& cWorld . lWorld . floorItems %~ IM.delete (flit ^. flIt . itID . unNInt)
& cWorld . lWorld . creatures . ix cid . crInv . at i ?~ it
& updateItLocation i
-- I forget whether using "at" rather than "IM.insert" here caused problems
-- & cWorld . lWorld . creatures . ix cid . crInv . at i ?~ it
-- note item locations are updated twice: first for the ilInvID,
-- second for the root/selected item bools
& cWorld . lWorld %~ crUpdateItemLocations cid
& setInvPosFromSS
& updateselectionextra
& cWorld . lWorld %~ crUpdateItemLocations cid
)
where
updateselectionextra
| cid == 0 =
hud . hudElement . diSelection . _Just . _3 %~ const mempty
| otherwise = id
it = _flIt flit
-- not sure if the following is necessary
updateItLocation invid w' =
w' & cWorld . lWorld . itemLocations . ix (_unNInt $ _itID it)
.~ InInv
-- should check that the item is not already in your inventory
-- this assumes that this is a floor item
tryPutItemInInv :: Int -> Int -> World -> Maybe (Int,World)
tryPutItemInInv cid itid w = do
itm <- w ^? cWorld . lWorld . items . ix itid
invid <- checkInvSlotsYou itm w
let itloc = InInv
{ _ilCrID = cid
, _ilInvID = invid
, _ilIsRoot = False
@@ -67,6 +32,66 @@ tryPutItemInInv cid flit w = do
, _ilIsAttached = False
, _ilEquipSite = Nothing
}
newitm = itm & itLocation .~ itloc
return $ (invid,) $ w
& cWorld . lWorld %~ crUpdateItemLocations cid
-- not sure about the order of these...
& cWorld . lWorld . creatures . ix cid . crInv . at invid ?~ newitm
& cWorld . lWorld . items . at itid ?~ newitm
& cWorld . lWorld . itemLocations . at itid ?~ itloc
& cWorld . lWorld . floorItems . at itid .~ Nothing
& updateselectionextra
where
updateselectionextra
| cid == 0 =
hud . hudElement . diSelection . _Just . _3 %~ const mempty
| otherwise = id
-- not sure why we have the cid here, this will probably only work for cid == 0
tryPutItemInInvAt :: Int -> Int -> Int -> World -> Maybe World
tryPutItemInInvAt i cid itid w = do
(j, w') <- tryPutItemInInv cid itid w
guard (i <= j)
return $ foldr f w' [i + 1 .. j]
where
f j = swapInvItems (\_ _ -> Just (j -1)) j
---- | Pick up a specific item.
--tryPutItemInInv :: Int -> Item -> Int -> World -> Maybe (Int, World)
--tryPutItemInInv cid flit itid w = do
-- i <- checkInvSlotsYou it w
-- Just
-- ( i
-- , w
-- & cWorld . lWorld . floorItems %~ IM.delete itid
-- & cWorld . lWorld . creatures . ix cid . crInv . at i ?~ it
-- & updateItLocation i
-- -- I forget whether using "at" rather than "IM.insert" here caused problems
-- -- & cWorld . lWorld . creatures . ix cid . crInv . at i ?~ it
-- -- note item locations are updated twice: first for the ilInvID,
-- -- second for the root/selected item bools
-- & cWorld . lWorld %~ crUpdateItemLocations cid
-- & setInvPosFromSS
-- & updateselectionextra
-- & cWorld . lWorld %~ crUpdateItemLocations cid
-- )
-- where
-- updateselectionextra
-- | cid == 0 =
-- hud . hudElement . diSelection . _Just . _3 %~ const mempty
-- | otherwise = id
-- it = _flIt flit
-- -- not sure if the following is necessary
-- updateItLocation invid w' =
-- w' & cWorld . lWorld . itemLocations . ix (_unNInt $ _itID it)
-- .~ InInv
-- { _ilCrID = cid
-- , _ilInvID = invid
-- , _ilIsRoot = False
-- , _ilIsSelected = False
-- , _ilIsAttached = False
-- , _ilEquipSite = Nothing
-- }
---- should select the item on the floor if no inventory space?
--createAndSelectItem :: Item -> World -> World
@@ -87,7 +112,7 @@ tryPutItemInInv cid flit w = do
createItemYou :: Item -> World -> (ItemLocation, World)
createItemYou itm w = fromMaybe (OnFloor, w') $ do
(invid, w'') <- tryPutFloorItemIDInInv 0 itid w'
(invid, w'') <- tryPutItemInInv 0 itid w'
itloc <- w'' ^? cWorld . lWorld . creatures . ix 0 . crInv . ix invid . itLocation
return (itloc, w'')
where
@@ -96,13 +121,15 @@ createItemYou itm w = fromMaybe (OnFloor, w') $ do
w' = copyItemToFloorID pos (itm & itID .~ NInt itid) w
-- | Pick up a specific item.
pickUpItem :: Int -> FloorItem -> World -> World
pickUpItem cid flit w =
maybe w (soundStart (CrSound cid) (_flItPos flit) pickUpS Nothing . snd) $
tryPutItemInInv cid flit w
pickUpItem :: Int -> Int -> World -> World
pickUpItem cid itid w = fromMaybe w $ do
(_,w') <- tryPutItemInInv cid itid w
p <- w ^? cWorld . lWorld . floorItems . ix itid . flItPos
return $ soundStart (CrSound cid) p pickUpS Nothing w'
-- | Pick up a specific item.
pickUpItemAt :: Int -> Int -> FloorItem -> World -> World
pickUpItemAt invid cid flit w =
maybe w (soundStart (CrSound cid) (_flItPos flit) pickUpS Nothing) $
tryPutItemInInvAt invid cid flit w
pickUpItemAt :: Int -> Int -> Int -> World -> World
pickUpItemAt invid cid itid w = fromMaybe w $ do
w' <- tryPutItemInInvAt invid cid itid w
p <- w ^? cWorld . lWorld . floorItems . ix itid . flItPos
return $ soundStart (CrSound cid) p pickUpS Nothing w'
+3 -5
View File
@@ -204,7 +204,7 @@ hotkeyToChar = \case
closeItemToSelectionItem :: World -> Int -> Maybe (SelectionItem ())
closeItemToSelectionItem w i = do
e <- w ^? cWorld . lWorld . floorItems . ix i
e <- w ^? cWorld . lWorld . items . ix i
let (pics, col) = closeItemToTextPictures e
return
SelItem
@@ -237,7 +237,5 @@ btText bt = case _btEvent bt of
ButtonSwitch {_btOn = t} -> if t then "SWITCH\\" else "SWITCH/"
ButtonAccessTerminal {} -> "TERMINAL"
closeItemToTextPictures :: FloorItem -> ([String], Color)
closeItemToTextPictures flit = (basicItemDisplay it, itemInvColor $ baseCI it)
where
it = _flIt flit
closeItemToTextPictures :: Item -> ([String], Color)
closeItemToTextPictures it = (basicItemDisplay it, itemInvColor $ baseCI it)
+2 -2
View File
@@ -36,7 +36,7 @@ pointerYourRootItem f w = fromMaybe (pure w) $ do
pointerToItem :: Applicative f => Item -> (Item -> f Item) -> World -> f World
pointerToItem x = case x ^. itLocation of
OnFloor -> cWorld . lWorld . floorItems . ix (x ^. itID . unNInt) . flIt
OnFloor -> cWorld . lWorld . items . ix (x ^. itID . unNInt)
OnTurret _ -> cWorld . lWorld . items . ix (x ^. itID . unNInt)
InInv cid invid _ _ _ _ -> cWorld . lWorld . creatures . ix cid . crInv . ix invid
InVoid -> const pure
@@ -45,7 +45,7 @@ pointerToItemID :: Applicative f => NewInt ItmInt -> (Item -> f Item) -> World -
pointerToItemID itid f w = fromMaybe (pure w) $ do
itloc <- w ^? cWorld . lWorld . itemLocations . ix (_unNInt itid)
return $ (\x -> x f w) $ case itloc of
OnFloor -> cWorld . lWorld . floorItems . ix (_unNInt itid) . flIt
OnFloor -> cWorld . lWorld . items . ix (itid ^. unNInt)
OnTurret _ -> cWorld . lWorld . items . ix (itid ^. unNInt)
InInv cid invid _ _ _ _ -> cWorld . lWorld . creatures . ix cid . crInv . ix invid
InVoid -> const pure
+4 -3
View File
@@ -112,7 +112,8 @@ placeSpotID' ps pt w = case pt of
PutFlIt itm -> let i = IM.newKey (w ^. cWorld . lWorld . itemLocations)
in (i, w & cWorld . lWorld . itemLocations . at i ?~ OnFloor
& cWorld . lWorld . floorItems . at i ?~ createFlIt p rot
(itm & itID .~ NInt i)
& cWorld . lWorld . items . at i ?~ (itm & itID .~ NInt i
& itLocation .~ OnFloor)
)
-- plNewUpID
-- (cWorld . lWorld . floorItems . unNIntMap)
@@ -181,8 +182,8 @@ mvButton :: Point2 -> Float -> Button -> Button
mvButton p a = (btRot +~ a) . (btPos %~ ((p +.+) . rotateV a))
{- Creates a floor item at a given point.-}
createFlIt :: Point2 -> Float -> Item -> FloorItem
createFlIt p rot itm = FlIt{_flItPos = p, _flItRot = rot, _flIt = itm}
createFlIt :: Point2 -> Float -> FloorItem
createFlIt p rot = FlIt{_flItPos = p, _flItRot = rot}
mvPP :: Point2 -> Float -> PressPlate -> PressPlate
mvPP p rot pp = pp{_ppPos = p, _ppRot = rot}
+4 -4
View File
@@ -217,9 +217,9 @@ drawExamineInventory cfig w =
, _siPayload = Nothing
}
closeObjectInfo :: Int -> Either FloorItem Button -> String
closeObjectInfo :: Int -> Either Item Button -> String
closeObjectInfo n x = case x of
Left FlIt{_flIt = itm} -> itemInfo itm ++ " It is on the floor" ++ floorItemPickupInfo n itm
Left itm -> itemInfo itm ++ " It is on the floor" ++ floorItemPickupInfo n itm
Right _ -> "Some sort of switch or button."
floorItemPickupInfo :: Int -> Item -> String
@@ -229,12 +229,12 @@ floorItemPickupInfo n itm
-- note the use of ^?!
-- it is probably desirable for this to crash hard for now
yourAugmentedItem :: (Item -> a) -> a -> (Either FloorItem Button -> a) -> World -> a
yourAugmentedItem :: (Item -> a) -> a -> (Either Item Button -> a) -> World -> a
yourAugmentedItem f x g w = case you w ^? crManipulation . manObject of
Just (SelectedItem i _ _) -> f $ yourInv w ^?! ix i
Just (SelCloseItem i) -> fromMaybe x $ do
j <- w ^? hud . closeItems . ix i . unNInt
flit <- w ^? cWorld . lWorld . floorItems . ix j
flit <- w ^? cWorld . lWorld . items . ix j
return . g $ Left flit
Just (SelCloseButton i) -> fromMaybe x $ do
j <- w ^? hud . closeButtons . ix i
+4 -4
View File
@@ -29,7 +29,7 @@ worldSPic cfig u =
<> foldup (shiftDraw _fsPos _fsDir (const _fsSPic)) (filtOn _fsPos _foregroundShapes)
<> foldup (shiftDraw' _cpPos _cpDir _cpSPic) (filtOn _cpPos _corpses)
<> foldup drawCreature (filtOn _crPos _creatures)
<> foldup floorItemSPic (filtOn _flItPos (_floorItems))
<> foldup (Prelude.uncurry floorItemSPic) (IM.intersectionWith (,) (u^.uvWorld.cWorld.lWorld.items) (filtOn _flItPos (_floorItems)))
<> foldup btSPic (filtOn _btPos _buttons)
<> foldup (mcSPic (u ^. uvWorld . cWorld . lWorld)) (filtOn _mcPos _machines)
<> foldMap' drawChasm (u ^. uvWorld . cWorld . chasms)
@@ -117,12 +117,12 @@ extraPics cfig u =
ppDraw :: PressPlate -> Picture
ppDraw c = uncurryV translate (_ppPos c) $ rotate (_ppRot c) (_ppPict c)
floorItemSPic :: FloorItem -> SPic
floorItemSPic flit =
floorItemSPic :: Item -> FloorItem -> SPic
floorItemSPic itm flit =
uncurryV translateSPxy (_flItPos flit) $
rotateSP
(_flItRot flit)
(itemSPic $ _flIt flit)
(itemSPic $ itm)
btSPic :: Button -> SPic
btSPic bt =
+4 -6
View File
@@ -6,18 +6,16 @@ import Dodge.Data.World
import Dodge.Inventory.Add
import NewInt
interactWithCloseObj :: Either FloorItem Button -> World -> World
interactWithCloseObj :: Either (NewInt ItmInt) Button -> World -> World
interactWithCloseObj e w = worldEventFlags . at InventoryChange ?~ () $ case e of
(Left flit) -> pickUpItem 0 flit w
(Left flit) -> pickUpItem 0 (_unNInt flit) w
(Right but) -> doButtonEvent (but ^. btEvent) but w
getSelectedCloseObj :: World -> Maybe (Either FloorItem Button)
getSelectedCloseObj :: World -> Maybe (Either (NewInt ItmInt) Button)
getSelectedCloseObj w = do
(i, j, _) <- w ^? hud . hudElement . diSelection . _Just
case i of
3 -> do
NInt k <- w ^? hud . closeItems . ix j
fmap Left $ w ^? cWorld . lWorld . floorItems . ix k
3 -> Left <$> w ^? hud . closeItems . ix j
5 -> do
k <- w ^? hud . closeButtons . ix j
fmap Right $ w ^? cWorld . lWorld . buttons . ix k
+6 -7
View File
@@ -134,23 +134,23 @@ tryPickupSelected k mpos w = do
let nfreeslots = crNumFreeSlots cr
xs <- w ^? hud . hudElement . diSelection . _Just . _3
let itmstopickup = mapMaybe g $ IS.toList xs
let slotsneeded = alaf Sum foldMap (itInvHeight . _flIt) itmstopickup
let slotsneeded = alaf Sum foldMap itInvHeight itmstopickup
guard $ nfreeslots >= slotsneeded
return $ case mpos of
Just (0, j) ->
foldr (pickUpItemAt j 0) w itmstopickup
foldr (pickUpItemAt j 0) w (IS.toList xs)
& hud . hudElement . diSelection
?~ ( 0
, j
, IS.fromDistinctAscList [j .. j + IS.size xs -1]
)
_ ->
foldl' (flip $ pickUpItem 0) w itmstopickup
foldl' (flip $ pickUpItem 0) w (IS.toList xs)
& hud . hudElement . diSelection . _Just . _3 %~ const mempty
where
g i = do
NInt j <- w ^? hud . closeItems . ix i
w ^? cWorld . lWorld . floorItems . ix j
w ^? cWorld . lWorld . items . ix j
updateMouseReleaseInGame :: World -> World
updateMouseReleaseInGame w = case w ^. input . mouseContext of
@@ -524,14 +524,13 @@ spaceAction w = case w ^. hud . hudElement of
& worldEventFlags . at InventoryChange ?~ ()
_ -> w & hud . hudElement . subInventory .~ NoSubInventory
getCloseObj :: World -> Maybe (Either FloorItem Button)
getCloseObj :: World -> Maybe (Either (NewInt ItmInt) Button)
getCloseObj w = getSelectedCloseObj w <|> topcitem <|> topcbut
where
topcitem = do
k' <- (w ^? hud . hudElement . diSections . ix 3 . ssItems)
>>= (fmap fst . IM.lookupMin)
NInt k <- w ^? hud . closeItems . ix k'
Left <$> w ^? cWorld . lWorld . floorItems . ix k
Left <$> w ^? hud . closeItems . ix k'
topcbut = do
k <- w ^? hud . closeButtons . ix 0
Right <$> w ^? cWorld . lWorld . buttons . ix k
+56 -58
View File
@@ -1846,7 +1846,6 @@ _fboHalf1 src/Data/Preload/Render.hs 31;" f
_fboHalf2 src/Data/Preload/Render.hs 32;" f
_fboLighting src/Data/Preload/Render.hs 37;" f
_fboPos src/Data/Preload/Render.hs 36;" f
_flIt src/Dodge/Data/FloorItem.hs 15;" f
_flItPos src/Dodge/Data/FloorItem.hs 15;" f
_flItRot src/Dodge/Data/FloorItem.hs 15;" f
_flPos src/Dodge/Data/Flame.hs 15;" f
@@ -2591,7 +2590,7 @@ addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f
addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f
addIndefiniteArticle src/StringHelp.hs 17;" f
addNodes src/Dodge/Path.hs 115;" f
addPane src/Dodge/Placement/PlaceSpot.hs 172;" f
addPane src/Dodge/Placement/PlaceSpot.hs 173;" f
addPlmnt src/Dodge/LevelGen/PlacementHelper.hs 87;" f
addPointPolygon src/Geometry/Polygon.hs 102;" f
addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f
@@ -2825,7 +2824,7 @@ capacitor src/Dodge/Item/Ammo.hs 69;" f
cardEightVec src/Dodge/Base/CardinalPoint.hs 16;" f
cardList src/Dodge/Base/CardinalPoint.hs 6;" f
cardVec src/Dodge/Base/CardinalPoint.hs 9;" f
cardinalVectors src/Dodge/FloorItem.hs 40;" f
cardinalVectors src/Dodge/FloorItem.hs 36;" f
cartePosToScreen src/Dodge/Base/Coordinate.hs 37;" f
cdtPropagateFold src/Dodge/DoubleTree.hs 406;" f
cenLasTur src/Dodge/Room/LasTurret.hs 24;" f
@@ -2836,9 +2835,9 @@ centroid src/Geometry/Polygon.hs 136;" f
centroidNum src/Geometry/Polygon.hs 139;" f
chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f
chainPairs src/Geometry.hs 363;" f
changeSwapOther src/Dodge/Inventory.hs 146;" f
changeSwapSel src/Dodge/Inventory.hs 139;" f
changeSwapWith src/Dodge/Inventory.hs 180;" f
changeSwapOther src/Dodge/Inventory.hs 147;" f
changeSwapSel src/Dodge/Inventory.hs 140;" f
changeSwapWith src/Dodge/Inventory.hs 181;" f
charToTuple src/Picture/Base.hs 317;" f
charToTupleGrad src/Picture/Text.hs 18;" f
chartreuse src/Color.hs 24;" f
@@ -3037,11 +3036,11 @@ crZoneSize src/Dodge/Zoning/Creature.hs 41;" f
craftInfo src/Dodge/Item/Info.hs 169;" f
craftItemSPic src/Dodge/Item/Draw/SPic.hs 56;" f
crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 590;" f
createFlIt src/Dodge/Placement/PlaceSpot.hs 184;" f
createFlIt src/Dodge/Placement/PlaceSpot.hs 185;" f
createForceField src/Dodge/ForceField.hs 7;" f
createGas src/Dodge/Gas.hs 8;" f
createHeadLamp src/Dodge/Euse.hs 55;" f
createItemYou src/Dodge/Inventory/Add.hs 88;" f
createItemYou src/Dodge/Inventory/Add.hs 113;" f
createLightMap src/Render.hs 26;" f
createPathGrid src/Dodge/Room/Path.hs 21;" f
createProjectile src/Dodge/HeldUse.hs 1322;" f
@@ -3108,7 +3107,7 @@ damageMetal src/Dodge/Material/Damage.hs 55;" f
damageSensor src/Dodge/Placement/Instance/Sensor.hs 15;" f
damageStone src/Dodge/Material/Damage.hs 25;" f
damageThingHit src/Dodge/Bullet.hs 176;" f
damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 40;" f
damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 41;" f
damageWall src/Dodge/Wall/Damage.hs 15;" f
damsToExpBarrel src/Dodge/Barreloid.hs 46;" f
dark src/Color.hs 108;" f
@@ -3355,7 +3354,7 @@ drawARHUD src/Dodge/Creature/State.hs 191;" f
drawAimSweep src/Dodge/Render/Picture.hs 295;" f
drawAllShadows src/Dodge/Shadows.hs 5;" f
drawArrowDown src/Dodge/Render/Picture.hs 220;" f
drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f
drawBaseMachine src/Dodge/Machine/Draw.hs 55;" f
drawBeam src/Dodge/Beam/Draw.hs 6;" f
drawBlip src/Dodge/RadarBlip.hs 16;" f
drawBlock src/Dodge/Block/Draw.hs 7;" f
@@ -3417,7 +3416,7 @@ drawList src/Dodge/Render/List.hs 209;" f
drawListElement src/Dodge/Render/List.hs 187;" f
drawListYgapScaleYoff src/Dodge/Render/List.hs 95;" f
drawListYoff src/Dodge/Render/List.hs 92;" f
drawMachine src/Dodge/Machine/Draw.hs 17;" f
drawMachine src/Dodge/Machine/Draw.hs 15;" f
drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f
drawMapperInventory src/Dodge/Render/HUD.hs 167;" f
drawMenuClick src/Dodge/Render/Picture.hs 163;" f
@@ -3450,7 +3449,7 @@ drawSelect src/Dodge/Render/Picture.hs 256;" f
drawSelectionList src/Dodge/Render/List.hs 35;" f
drawSelectionListBackground src/Dodge/Render/List.hs 51;" f
drawSelectionSections src/Dodge/SelectionSections/Draw.hs 16;" f
drawSensor src/Dodge/Machine/Draw.hs 24;" f
drawSensor src/Dodge/Machine/Draw.hs 22;" f
drawShader src/Shader.hs 27;" f
drawShaderLay src/Shader.hs 16;" f
drawShadowsByImportance src/Dodge/Shadows.hs 8;" f
@@ -3468,7 +3467,7 @@ drawText src/Picture/Base.hs 220;" f
drawTitle src/Dodge/Render/MenuScreen.hs 55;" f
drawTitleBackground src/Dodge/Render/List.hs 44;" f
drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f
drawTurret src/Dodge/Machine/Draw.hs 65;" f
drawTurret src/Dodge/Machine/Draw.hs 63;" f
drawVerticalDoubleArrow src/Dodge/Render/Picture.hs 211;" f
drawVerticalLampCover src/Dodge/Prop/Draw.hs 71;" f
drawWall src/Dodge/Wall/Draw.hs 7;" f
@@ -3550,7 +3549,7 @@ errorHead src/ListHelp.hs 76;" f
errorIsLHS src/Geometry.hs 66;" f
errorNormalizeV src/Geometry.hs 55;" f
errorPointInPolygon src/Geometry.hs 47;" f
evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 153;" f
evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 154;" f
evenOddSplit src/Dodge/Base.hs 160;" f
exitTerminalSubInv src/Dodge/WorldEffect.hs 107;" f
expandLine src/Dodge/Picture.hs 30;" f
@@ -3584,7 +3583,7 @@ findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f
findIndex src/IntMapHelp.hs 85;" f
findReverseEdge src/Polyhedra.hs 50;" f
findReverseEdgeList src/Polyhedra.hs 57;" f
findWallFreeDropPoint src/Dodge/FloorItem.hs 48;" f
findWallFreeDropPoint src/Dodge/FloorItem.hs 44;" f
findWallsInPolygon src/Dodge/LevelGen/StaticWalls/Deprecated.hs 78;" f
findWithIx src/ListHelp.hs 123;" f
fireFadeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 552;" f
@@ -3845,8 +3844,6 @@ initSpecificCrItemLocations src/Dodge/Item/Location/Initialize.hs 31;" f
initTexture2DArray src/Shader/AuxAddition.hs 31;" f
initTexture2DArrayData src/Shader/AuxAddition.hs 46;" f
initTexture2DArraySquare src/Shader/AuxAddition.hs 16;" f
initTuItemLocation src/Dodge/Item/Location/Initialize.hs 67;" f
initTusItemLocations src/Dodge/Item/Location/Initialize.hs 26;" f
initWallZoning src/Dodge/Wall/Zone.hs 12;" f
initialAnoTree src/Dodge/Floor.hs 36;" f
initialRoomTree src/Dodge/Floor.hs 22;" f
@@ -3909,8 +3906,8 @@ invItemEffs src/Dodge/Creature/State.hs 61;" f
invItemLocUpdate src/Dodge/Creature/State.hs 69;" f
invRootMap src/Dodge/Item/Grammar.hs 227;" f
invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f
invSetSelection src/Dodge/Inventory.hs 192;" f
invSetSelectionPos src/Dodge/Inventory.hs 200;" f
invSetSelection src/Dodge/Inventory.hs 193;" f
invSetSelectionPos src/Dodge/Inventory.hs 201;" f
invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f
invSize src/Dodge/Inventory/CheckSlots.hs 30;" f
inventoryX src/Dodge/Creature.hs 114;" f
@@ -4031,7 +4028,7 @@ lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 108;" f
lasTunnel src/Dodge/Room/LasTurret.hs 127;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 168;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 38;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 40;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f
lastMap src/Dodge/DoubleTree.hs 252;" f
launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f
@@ -4060,7 +4057,7 @@ liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f
light src/Color.hs 104;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 47;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 37;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 47;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 48;" f
lightsToRender src/Dodge/Render/Lights.hs 14;" f
lightx4 src/Color.hs 145;" f
linGrad src/Geometry/Intersect.hs 250;" f
@@ -4220,18 +4217,18 @@ maybeOpenConsole src/Dodge/Update.hs 131;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 116;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f
mcApplyDamage src/Dodge/Machine/Update.hs 114;" f
mcKillBut src/Dodge/Machine/Destroy.hs 35;" f
mcKillTerm src/Dodge/Machine/Destroy.hs 27;" f
mcPlaySound src/Dodge/Machine/Update.hs 104;" f
mcProxTest src/Dodge/Machine/Update.hs 152;" f
mcProximitySensorUpdate src/Dodge/Machine/Update.hs 130;" f
mcApplyDamage src/Dodge/Machine/Update.hs 115;" f
mcKillBut src/Dodge/Machine/Destroy.hs 37;" f
mcKillTerm src/Dodge/Machine/Destroy.hs 29;" f
mcPlaySound src/Dodge/Machine/Update.hs 105;" f
mcProxTest src/Dodge/Machine/Update.hs 153;" f
mcProximitySensorUpdate src/Dodge/Machine/Update.hs 131;" f
mcSPic src/Dodge/Render/ShapePicture.hs 132;" f
mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 93;" f
mcSensorUpdate src/Dodge/Machine/Update.hs 125;" f
mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 94;" f
mcSensorUpdate src/Dodge/Machine/Update.hs 126;" f
mcShootAuto src/Dodge/HeldUse.hs 1209;" f
mcShootLaser src/Dodge/HeldUse.hs 1202;" f
mcTriggerVal src/Dodge/Machine/Update.hs 99;" f
mcTriggerVal src/Dodge/Machine/Update.hs 100;" f
mcTypeUpdate src/Dodge/Machine/Update.hs 28;" f
mcUseHeld src/Dodge/HeldUse.hs 1126;" f
mcUseItem src/Dodge/Machine/Update.hs 85;" f
@@ -4324,18 +4321,18 @@ multiLookupTrie src/SimpleTrie.hs 57;" f
multiLookupTrieI src/SimpleTrie.hs 66;" f
muout src/Dodge/RoomLink.hs 129;" f
muzFlareAt src/Dodge/HeldUse.hs 676;" f
mvButton src/Dodge/Placement/PlaceSpot.hs 180;" f
mvCr src/Dodge/Placement/PlaceSpot.hs 190;" f
mvFS src/Dodge/Placement/PlaceSpot.hs 193;" f
mvButton src/Dodge/Placement/PlaceSpot.hs 181;" f
mvCr src/Dodge/Placement/PlaceSpot.hs 191;" f
mvFS src/Dodge/Placement/PlaceSpot.hs 194;" f
mvGust src/Dodge/Update.hs 806;" f
mvLS src/Dodge/Placement/PlaceSpot.hs 221;" f
mvLS src/Dodge/Placement/PlaceSpot.hs 246;" f
mvP src/Dodge/Wall/Move.hs 54;" f
mvPP src/Dodge/Placement/PlaceSpot.hs 187;" f
mvPP src/Dodge/Placement/PlaceSpot.hs 188;" f
mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f
mvPointMeleeTarg src/Dodge/Creature/Boid.hs 314;" f
mvPointToward src/Dodge/Base.hs 136;" f
mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f
mvProp src/Dodge/Placement/PlaceSpot.hs 177;" f
mvProp src/Dodge/Placement/PlaceSpot.hs 178;" f
mvPs src/Dodge/Wall/Move.hs 58;" f
myIntersectLineLine src/Geometry/Intersect.hs 207;" f
myIntersectSegSeg src/Geometry/Intersect.hs 185;" f
@@ -4459,8 +4456,8 @@ pesNearRect src/Dodge/Zoning/Pathing.hs 40;" f
pesNearSeg src/Dodge/Zoning/Pathing.hs 37;" f
picFormat src/Polyhedra.hs 23;" f
picMap src/Picture/Base.hs 67;" f
pickUpItem src/Dodge/Inventory/Add.hs 99;" f
pickUpItemAt src/Dodge/Inventory/Add.hs 105;" f
pickUpItem src/Dodge/Inventory/Add.hs 124;" f
pickUpItemAt src/Dodge/Inventory/Add.hs 130;" f
pickUpS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 624;" f
pincerP src/Dodge/Creature/Boid.hs 61;" f
pincerP' src/Dodge/Creature/Boid.hs 94;" f
@@ -4475,14 +4472,16 @@ pjRemoteSetDirection src/Dodge/Projectile/Update.hs 227;" f
plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f
plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f
plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f
plMachine src/Dodge/Placement/PlaceSpot.hs 196;" f
plMachine src/Dodge/Placement/PlaceSpot.hs 197;" f
plMachine' src/Dodge/Placement/PlaceSpot.hs 221;" f
plNew src/Dodge/Base/NewID.hs 19;" f
plNewID src/Dodge/Base/NewID.hs 7;" f
plNewUpID src/Dodge/Base/NewID.hs 13;" f
plNewUsing src/Dodge/Base/NewID.hs 27;" f
plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f
plSlideDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 78;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 211;" f
plTurret src/Dodge/Placement/PlaceSpot.hs 202;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 236;" f
placePickOne src/Dodge/Placement/PlaceSpot.hs 41;" f
placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 53;" f
placeRandomPlacement src/Dodge/Placement/PlaceSpot.hs 44;" f
@@ -4492,7 +4491,7 @@ placeSpotID' src/Dodge/Placement/PlaceSpot.hs 105;" f
placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 88;" f
placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 69;" f
placeString src/Dodge/Render/MenuScreen.hs 61;" f
placeWallPoly src/Dodge/Placement/PlaceSpot.hs 166;" f
placeWallPoly src/Dodge/Placement/PlaceSpot.hs 167;" f
plainRegex src/Dodge/DisplayInventory.hs 197;" f
playIfFree src/Sound.hs 137;" f
playPositionalSoundQueue src/Sound.hs 145;" f
@@ -4657,16 +4656,16 @@ putBlockV src/Dodge/Placement/Instance/Wall.hs 153;" f
putColorLamp src/Dodge/Placement/Instance/LightSource.hs 203;" f
putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f
putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f
putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 62;" f
putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 63;" f
putLamp src/Dodge/Placement/Instance/LightSource.hs 206;" f
putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f
putLasTurret src/Dodge/Placement/Instance/Turret.hs 24;" f
putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" f
putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 103;" f
putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 106;" f
putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 54;" f
putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 55;" f
putShape src/Dodge/Room/Foreground.hs 134;" f
putStrLnAppend src/Dodge/LevelGen.hs 81;" f
putTerminal src/Dodge/Placement/Instance/Terminal.hs 51;" f
putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f
putTerminalFull src/Dodge/Placement/Instance/Terminal.hs 23;" f
putTerminalImediateAccess src/Dodge/Placement/Instance/Terminal.hs 18;" f
putTurret src/Dodge/Placement/Instance/Turret.hs 11;" f
@@ -4900,8 +4899,8 @@ screenPolygon src/Dodge/Base/Window.hs 17;" f
screenPolygonBord src/Dodge/Base/Window.hs 27;" f
screenPosAbs src/Dodge/ScreenPos.hs 15;" f
screenToWorldPos src/Dodge/Base/Coordinate.hs 51;" f
scrollAugInvSel src/Dodge/Inventory.hs 211;" f
scrollAugNextInSection src/Dodge/Inventory.hs 224;" f
scrollAugInvSel src/Dodge/Inventory.hs 212;" f
scrollAugNextInSection src/Dodge/Inventory.hs 225;" f
scrollDebugInfoInt src/Dodge/Debug.hs 71;" f
scrollRBOption src/Dodge/Update/Scroll.hs 216;" f
scrollSelectionSections src/Dodge/SelectionSections.hs 26;" f
@@ -4934,13 +4933,13 @@ selectCreatureDebugItem src/Dodge/Debug.hs 55;" f
selectedItemScroll src/Dodge/Update/Scroll.hs 50;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 52;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 58;" f
senseDamage src/Dodge/Machine/Update.hs 160;" f
senseDamage src/Dodge/Machine/Update.hs 161;" f
sensorCommand src/Dodge/Terminal.hs 85;" f
sensorReqToString src/Dodge/Terminal.hs 92;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 25;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 45;" f
sensorSPic src/Dodge/Machine/Draw.hs 70;" f
sensorTypeDamages src/Dodge/Machine/Update.hs 178;" f
sensorSPic src/Dodge/Machine/Draw.hs 68;" f
sensorTypeDamages src/Dodge/Machine/Update.hs 179;" f
sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f
sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f
sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f
@@ -5210,7 +5209,7 @@ swapAnyExtraSelection src/Dodge/Inventory/Swap.hs 55;" f
swapInOutLinks src/Dodge/RoomLink.hs 80;" f
swapIndices src/ListHelp.hs 50;" f
swapInvItems src/Dodge/Inventory/Swap.hs 20;" f
swapItemWith src/Dodge/Inventory.hs 169;" f
swapItemWith src/Dodge/Inventory.hs 170;" f
swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f
swarmUsingCenter src/Dodge/Creature/Boid.hs 172;" f
switchDoor src/Dodge/Placement/Instance/Door.hs 96;" f
@@ -5250,11 +5249,11 @@ teleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 528;" f
termScreenColor src/Dodge/Terminal/Color.hs 10;" f
termSoundLine src/Dodge/Terminal.hs 49;" f
termTextColor src/Dodge/Terminal.hs 52;" f
terminalColor src/Dodge/Placement/Instance/Terminal.hs 70;" f
terminalColor src/Dodge/Placement/Instance/Terminal.hs 71;" f
terminalReturnEffect src/Dodge/Terminal.hs 191;" f
terminalSPic src/Dodge/Machine/Draw.hs 29;" f
terminalSPic src/Dodge/Machine/Draw.hs 27;" f
terminalScreenGlow src/Dodge/Machine/Update.hs 35;" f
terminalShape src/Dodge/Machine/Draw.hs 32;" f
terminalShape src/Dodge/Machine/Draw.hs 30;" f
terminalWheelEvent src/Dodge/Update/Scroll.hs 128;" f
teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f
teslaGunPic src/Dodge/Item/Draw/SPic.hs 421;" f
@@ -5402,16 +5401,15 @@ tryGetRootItemInvID src/Dodge/Inventory/Location.hs 29;" f
tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 38;" f
tryPickupSelected src/Dodge/Update/Input/InGame.hs 129;" f
tryPlay src/Sound.hs 84;" f
tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 20;" f
tryPutItemInInv src/Dodge/Inventory/Add.hs 35;" f
tryPutItemInInvAt src/Dodge/Inventory/Add.hs 26;" f
tryPutItemInInv src/Dodge/Inventory/Add.hs 23;" f
tryPutItemInInvAt src/Dodge/Inventory/Add.hs 51;" f
trySeedFromClipboard src/Dodge/Menu.hs 91;" f
trySpin src/Dodge/Projectile/Update.hs 170;" f
trySynthBullet src/Dodge/Creature/State.hs 165;" f
tryThrust src/Dodge/Projectile/Update.hs 176;" f
tryUseParent src/Dodge/Creature/State.hs 143;" f
turnTo src/Dodge/Movement/Turn.hs 8;" f
turret src/Dodge/Placement/Instance/Turret.hs 35;" f
turret src/Dodge/Placement/Instance/Turret.hs 37;" f
turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f
tutAnoTree src/Dodge/Room/Tutorial.hs 43;" f
tutDrop src/Dodge/Room/Tutorial.hs 56;" f