Function for adding random lights to roomNGon

This commit is contained in:
2026-03-19 11:40:49 +00:00
parent d1c2870d63
commit 508b848204
20 changed files with 453 additions and 336 deletions
+12 -1
View File
@@ -100,6 +100,8 @@ data PlacementSpot
| PSNoShiftCont {_psPos :: Point2, _psRot :: Float} | PSNoShiftCont {_psPos :: Point2, _psRot :: Float}
| PSPos | PSPos
{ _psSelect :: RoomPos -> Room -> Maybe (PlacementSpot, RoomPos) { _psSelect :: RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
-- looks for the first rp for which a rp rm returns Just (ps,rp'),
-- replaces the rp with rp'
, _psRoomEff :: RoomPos -> Room -> Room , _psRoomEff :: RoomPos -> Room -> Room
, _psFallback :: Maybe Placement , _psFallback :: Maybe Placement
} }
@@ -138,7 +140,7 @@ data Room = Room
, _rmPos :: [RoomPos] , _rmPos :: [RoomPos]
, _rmPath :: S.Set (Point2, Point2) , _rmPath :: S.Set (Point2, Point2)
, _rmPmnts :: [Placement] , _rmPmnts :: [Placement]
, _rmInPmnt :: [(Int,GenWorld -> Placement)] -- so far as I can tell, , _rmInPmnt :: [(Int,GenWorld -> State StdGen Placement)] -- so far as I can tell,
-- the first Int only determines the order in which these are applied -- the first Int only determines the order in which these are applied
, _rmBound :: [[Point2]] , _rmBound :: [[Point2]]
, _rmFloor :: Floor , _rmFloor :: Floor
@@ -162,3 +164,12 @@ makeLenses ''RoomType
makeLenses ''PSType makeLenses ''PSType
makeLenses ''PlacementSpot makeLenses ''PlacementSpot
makeLenses ''Placement makeLenses ''Placement
-- I may regret this. I believe it satisfies associativity, but haven't thought
-- about it too much.
instance Semigroup Placement where
p <> q = p & plIDCont %~ f
where
f g gw pl = case g gw pl of
Nothing -> Just q
Just r -> Just $ r & plIDCont %~ f
+5
View File
@@ -38,6 +38,10 @@ data RoomType
, _rmWidth :: Float , _rmWidth :: Float
, _rmHeight :: Float , _rmHeight :: Float
} }
| RoomNgon
{ _rmngonSides :: Int
, _rmngonSize :: Float
}
deriving (Eq, Ord) deriving (Eq, Ord)
data RoomLinkType data RoomLinkType
@@ -81,6 +85,7 @@ data RoomPosFlag
= RoomPosOnGrid {_onGridFromEdges :: S.Set PathFromEdge} = RoomPosOnGrid {_onGridFromEdges :: S.Set PathFromEdge}
| RoomPosOffGrid {_offGridFromEdges :: S.Set PathFromEdge} | RoomPosOffGrid {_offGridFromEdges :: S.Set PathFromEdge}
| RoomPosOnFloor | RoomPosOnFloor
| ColoredLightRP
deriving (Eq, Ord, Show) deriving (Eq, Ord, Show)
data UsedPos data UsedPos
+1 -1
View File
@@ -25,7 +25,7 @@ initialRoomTree =
foldMTRS $ foldMTRS $
intersperse intersperse
(zoom lyGen doorCor) (zoom lyGen doorCor)
[ intAnno startRoom [ startRoom
, passthroughLockKeyLists , passthroughLockKeyLists
[(sensorRoomRunPast ElectricSensor, takeOne [(sensorRoomRunPast ElectricSensor, takeOne
[-- CRAFT (ENERGYBALLCRAFT TeslaBall) , [-- CRAFT (ENERGYBALLCRAFT TeslaBall) ,
+37 -38
View File
@@ -1,20 +1,22 @@
{-# LANGUAGE TupleSections #-} {-# LANGUAGE TupleSections #-}
module Dodge.Layout ( module Dodge.Layout (
generateLevelFromRoomList, generateLevelFromRoomList,
tilesFromRooms, tilesFromRooms,
shuffleRoomPos, shuffleRoomPos,
) where ) where
import qualified Data.Vector.Unboxed as UV
-- import Dodge.Path.Translate -- import Dodge.Path.Translate
import qualified Control.Foldl as L import qualified Control.Foldl as L
import Control.Lens import Control.Lens
import Data.Foldable import Data.Foldable
import Data.Function import Data.Function
import Linear
-- import Data.Graph.Inductive (labEdges, labNodes) -- import Data.Graph.Inductive (labEdges, labNodes)
import Data.List (nubBy, sortOn) import Data.List (nubBy, sortOn)
import Data.Maybe import Data.Maybe
import Data.Tile import Data.Tile
import qualified Data.Vector.Unboxed as UV
-- import Data.Traversable -- import Data.Traversable
import Dodge.Data.GenWorld import Dodge.Data.GenWorld
import Dodge.Default.Wall import Dodge.Default.Wall
@@ -37,13 +39,12 @@ generateLevelFromRoomList gr' w =
over gwWorld initWallZoning over gwWorld initWallZoning
. over gwWorld randomCompass . over gwWorld randomCompass
. over gwWorld setupWorldBounds . over gwWorld setupWorldBounds
-- . over (gwWorld . cWorld . lWorld) initItemLocations
. doInPlacements . doInPlacements
-- . doOutPlacements
. doIndividualPlacements . doIndividualPlacements
. setTiles . setTiles
. worldToGenWorld rs' . worldToGenWorld rs'
$ w & cWorld . lWorld . walls .~ wallsFromRooms rs $ w
& cWorld . lWorld . walls .~ wallsFromRooms rs
& cWorld . cwGen . cwgGameRooms .~ gameRoomsFromRooms (IM.elems rs') & cWorld . cwGen . cwgGameRooms .~ gameRoomsFromRooms (IM.elems rs')
& cWorld . incNode .~ inodes & cWorld . incNode .~ inodes
& cWorld . incGraph .~ igraph & cWorld . incGraph .~ igraph
@@ -56,10 +57,9 @@ generateLevelFromRoomList gr' w =
rs = map doRoomShift $ IM.elems rs' rs = map doRoomShift $ IM.elems rs'
rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w
randomCompass :: World -> World randomCompass :: World -> World
randomCompass w = w randomCompass w =
& wCam . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w) w & wCam . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w)
-- note the order of traversal of the rooms is important -- note the order of traversal of the rooms is important
-- hence the reverse -- hence the reverse
@@ -70,41 +70,42 @@ setTiles gw = foldr setTile gw . reverse . IM.elems $ _genRooms gw
setTile :: Room -> GenWorld -> GenWorld setTile :: Room -> GenWorld -> GenWorld
setTile r gw = case _rmFloor r of setTile r gw = case _rmFloor r of
Tiled{} -> gw Tiled{} -> gw
InheritFloor -> gw InheritFloor ->
& genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly] gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly]
where where
t = case _rmMParent r of t = case _rmMParent r of
Nothing -> Tile poly (V2 0 0) (V2 1 0) 16 Nothing -> Tile poly (V2 0 0) (V2 1 0) 16
Just pid -> head $ _tiles $ _rmFloor $ _genRooms gw IM.! pid Just pid -> head $ _tiles $ _rmFloor $ _genRooms gw IM.! pid
poly = orderPolygon . convexHullSafe poly =
. nubBy ((==) `on` roundPoint2) $ concat $ _rmPolys r orderPolygon
. convexHullSafe
. nubBy ((==) `on` roundPoint2)
. concat
$ _rmPolys r
shuffleRoomPos :: RandomGen g => Room -> State g Room shuffleRoomPos :: (RandomGen g) => Room -> State g Room
shuffleRoomPos = rmPos shuffle shuffleRoomPos = rmPos shuffle
--shuffleRoomPos rm = do
-- newPos <- shuffle $ _rmPos rm
-- return $ rm & rmPos .~ newPos
doInPlacements :: GenWorld -> GenWorld doInPlacements :: GenWorld -> GenWorld
doInPlacements w = foldl' (\gw (i,(_,f)) -> placeSpot i gw (f gw)) w doInPlacements w =
foldl' (\gw (i, (_, f)) -> rplaceSpot i gw (f gw)) w
. sortOn (fst . snd) . sortOn (fst . snd)
$ foldMap g $ w ^. genRooms . foldMap g
$ w ^. genRooms
where where
g rm = (rm ^?! rmMID . _Just,) <$> (rm ^. rmInPmnt) g rm = (rm ^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
-- let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w) rplaceSpot i gw rx = placeSpot i (gw & gwWorld . randGen .~ gen) x
-- in gw & genRooms .~ rms where
(x,gen) = runState rx (gw ^. gwWorld . randGen)
--doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
--doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
-- where
-- f plf (w', r') = placeSpot (w', r') (plf w')
doIndividualPlacements :: GenWorld -> GenWorld doIndividualPlacements :: GenWorld -> GenWorld
doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw) doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw)
doRoomPlacements :: GenWorld -> Room -> GenWorld doRoomPlacements :: GenWorld -> Room -> GenWorld
doRoomPlacements w rm = foldl' (placeSpot i) (w & genRooms . ix i . rmPmnts .~ mempty) doRoomPlacements w rm =
. sortOn plPriority $ _rmPmnts rm foldl' (placeSpot i) (w & genRooms . ix i . rmPmnts .~ mempty)
. sortOn plPriority
$ _rmPmnts rm
where where
i = rm ^?! rmMID . _Just i = rm ^?! rmMID . _Just
@@ -115,15 +116,10 @@ plPriority pl = case pl ^. plType of
PutDoor{} -> 2 PutDoor{} -> 2
_ -> 3 _ -> 3
--placeSpot' :: Int -> GenWorld -> Placement -> GenWorld
--placeSpot' = placeSpot
--placeSpot' i gw x =
-- let (gw',r') = placeSpot (gw,(gw ^?! genRooms . ix i)) x
-- in gw' & genRooms . ix i .~ r'
setupWorldBounds :: World -> World setupWorldBounds :: World -> World
setupWorldBounds w = setupWorldBounds w =
w & cWorld . cwGen . cwgWorldBounds w
& cWorld . cwGen . cwgWorldBounds
%~ ( (bdMinX .~ f minx) %~ ( (bdMinX .~ f minx)
. (bdMaxX .~ f maxx) . (bdMaxX .~ f maxx)
. (bdMinY .~ f miny) . (bdMinY .~ f miny)
@@ -162,12 +158,15 @@ gameRoomFromRoom rm =
GameRoom GameRoom
{ _grViewpoints = { _grViewpoints =
map doshift $ map doshift $
_rmViewpoints rm ++ (map fst . foldl' (flip cutWalls) [] $ _rmPolys rm) _rmViewpoints rm
++ (map fst . foldl' (flip cutWalls) [] $ _rmPolys rm)
++ mapMaybe filterUnusedLinks (_rmPos rm) ++ mapMaybe filterUnusedLinks (_rmPos rm)
, _grViewpointsEx = concatMap filterUsedLinks (_rmPos rm) , _grViewpointsEx = concatMap filterUsedLinks (_rmPos rm)
, _grBound = , _grBound =
map doshift $ map doshift
expandPolyCorners 50 . convexHullSafe . nubBy closePoints $ expandPolyCorners 50
. convexHullSafe
. nubBy closePoints
. concat . concat
$ _rmBound rm ++ _rmPolys rm $ _rmBound rm ++ _rmPolys rm
, _grRmBounds = map (map doshift) $ _rmBound rm , _grRmBounds = map (map doshift) $ _rmBound rm
@@ -180,8 +179,8 @@ gameRoomFromRoom rm =
doubleShift p a = doubleShift p a =
map map
doshift doshift
[ p +.+ 10 *.* unitVectorAtAngle a [ p + 10 *^ unitVectorAtAngle a
, p -.- 10 *.* unitVectorAtAngle a , p - 10 *^ unitVectorAtAngle a
] ]
filterUnusedLinks rp = case _rpType rp of filterUnusedLinks rp = case _rpType rp of
UnusedLink{} -> Just $ _rpPos rp UnusedLink{} -> Just $ _rpPos rp
+2 -3
View File
@@ -25,9 +25,8 @@ lockRoomMultiItems =
lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)]
lockRoomKeyItems = lockRoomKeyItems =
[ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD]) -- [ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD])
-- [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD]) [ (sensorRoomRunPast LaserSensor, return LASER)
-- , (sensorRoomRunPast LaserSensor, return LASER)
-- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) -- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3))
-- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) -- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD])
-- , (const glassLessonRunPast, takeOne [LASER]) -- , (const glassLessonRunPast, takeOne [LASER])
+3 -2
View File
@@ -181,7 +181,8 @@ spanColLightBlackI col h a b =
V2 x y = 0.5 *.* (a +.+ b) V2 x y = 0.5 *.* (a +.+ b)
spanLightI :: Point2 -> Point2 -> Placement spanLightI :: Point2 -> Point2 -> Placement
spanLightI = spanColLightI 0.75 50.1 --spanLightI = spanColLightI 0.75 50.1
spanLightI = spanColLightI 0.75 95
spanLightY :: Point2 -> Point2 -> Point2 -> Point2 -> Placement spanLightY :: Point2 -> Point2 -> Point2 -> Point2 -> Placement
spanLightY l x y z = spanLightY l x y z =
@@ -191,7 +192,7 @@ spanLightY l x y z =
sps0 $ f z sps0 $ f z
where where
f p = putShape $ thinHighBar h p (l + normalize (l-p)) f p = putShape $ thinHighBar h p (l + normalize (l-p))
h = 50 h = 95
--extendAway :: Point2 -> Point2 -> Point2 --extendAway :: Point2 -> Point2 -> Point2
--extendAway p x = p +.+ squashNormalizeV (p -.- x) --extendAway p x = p +.+ squashNormalizeV (p -.- x)
+3 -3
View File
@@ -33,7 +33,7 @@ import NewInt
placeSpot :: Int -> GenWorld -> Placement -> GenWorld placeSpot :: Int -> GenWorld -> Placement -> GenWorld
placeSpot rid w plmnt = case plmnt ^. plSpot of placeSpot rid w plmnt = case plmnt ^. plSpot of
PSRoomRand i f -> placeSpotRoomRand rid i f plmnt w PSRoomRand i f -> placeSpotRoomRand rid i f plmnt w
PSPos extract eff fallback -> placeSpotUsingLink w rid plmnt extract eff fallback PSPos extract eff fallback -> placeSpotUsingRoomPos w rid plmnt extract eff fallback
_ -> placePlainPSSpot w rid plmnt shift _ -> placePlainPSSpot w rid plmnt shift
where where
shift = _rmShift $ w ^?! genRooms . ix rid shift = _rmShift $ w ^?! genRooms . ix rid
@@ -62,7 +62,7 @@ placePlainPSSpot w rid plmnt shift = case plmnt ^. plType of
(w' & genRooms . ix rid . rmPmnts .:~ newplmnt) (w' & genRooms . ix rid . rmPmnts .:~ newplmnt)
-- this should be tidied up -- this should be tidied up
placeSpotUsingLink :: placeSpotUsingRoomPos ::
GenWorld -> GenWorld ->
Int -> Int ->
Placement -> Placement ->
@@ -70,7 +70,7 @@ placeSpotUsingLink ::
(RoomPos -> Room -> Room) -> (RoomPos -> Room -> Room) ->
Maybe Placement -> Maybe Placement ->
GenWorld GenWorld
placeSpotUsingLink w rid plmnt extract eff fallback = placeSpotUsingRoomPos w rid plmnt extract eff fallback =
case searchedPoss (w ^?! genRooms . ix rid . rmPos) of case searchedPoss (w ^?! genRooms . ix rid . rmPos) of
Just (ps, rmposs) -> Just (ps, rmposs) ->
placeSpot placeSpot
+1 -1
View File
@@ -52,7 +52,7 @@ decontamRoom i =
] ]
-- & rmOutPmnt . at i ?~ -- & rmOutPmnt . at i ?~
-- analyser (NoItemZone ps) (PS 50 0) (PS mcpos 0) -- analyser (NoItemZone ps) (PS 50 0) (PS mcpos 0)
& rmInPmnt .~ [(0, f)] & rmInPmnt .~ [(0, return . f)]
& rmBound .~ [rectNSWE 75 15 0 40, switchcut] & rmBound .~ [rectNSWE 75 15 0 40, switchcut]
where where
f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do
+11 -11
View File
@@ -1,6 +1,7 @@
-- {-# LANGUAGE TupleSections #-} -- {-# LANGUAGE TupleSections #-}
module Dodge.Room.Containing where module Dodge.Room.Containing where
import Control.Monad
import Dodge.Cleat import Dodge.Cleat
import Dodge.Data.GenWorld import Dodge.Data.GenWorld
import Dodge.Item.Display import Dodge.Item.Display
@@ -15,28 +16,27 @@ import Dodge.Tree
import Geometry import Geometry
import LensHelp import LensHelp
import RandomHelp import RandomHelp
import Control.Monad
roomsContaining :: RandomGen g => [Creature] -> [Item] -> State g (MetaTree Room String) roomsContaining :: (RandomGen g) => [Creature] -> [Item] -> State g (MetaTree Room String)
roomsContaining crs its = tToBTree str <$> roomsContaining' crs its roomsContaining crs its = tToBTree str <$> roomsContaining' crs its
where where
str = "roomsContaining " ++ concatMap _crName crs ++ concatMap (head . basicItemDisplay) its str = "roomsContaining " ++ concatMap _crName crs ++ concatMap (head . basicItemDisplay) its
roomsContaining' :: RandomGen g => [Creature] -> [Item] -> State g (Tree Room) roomsContaining' :: (RandomGen g) => [Creature] -> [Item] -> State g (Tree Room)
roomsContaining' crs its = do roomsContaining' crs its = do
endroom <- endroom <-
join $ join $
takeOne takeOne
[-- roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its [ roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its
--, randomFourCornerRoomCrsIts crs its , randomFourCornerRoomCrsIts crs its
--, tanksRoom crs its , tanksRoom crs its
-- tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its , tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its
roomPillarsContaining crs its , roomPillarsContaining crs its
-- , roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its , roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its
] ]
return (pure $ cleatOnward endroom) return (pure $ cleatOnward endroom)
roomPillarsContaining :: RandomGen g => [Creature] -> [Item] -> State g Room roomPillarsContaining :: (RandomGen g) => [Creature] -> [Item] -> State g Room
roomPillarsContaining crs itms = do roomPillarsContaining crs itms = do
(w, wn) <- takeOne [(240, 2), (340, 3)] (w, wn) <- takeOne [(240, 2), (340, 3)]
(h, hn) <- takeOne [(240, 2), (340, 3)] (h, hn) <- takeOne [(240, 2), (340, 3)]
@@ -47,7 +47,7 @@ crsItmsUnused crs itms =
map (\it -> sps0 (PutFlIt it) & plSpot .~ anyUnusedSpot) itms map (\it -> sps0 (PutFlIt it) & plSpot .~ anyUnusedSpot) itms
++ map (\cr -> sps0 (PutCrit cr) & plSpot .~ unusedSpotAwayFromLink 50) crs ++ map (\cr -> sps0 (PutCrit cr) & plSpot .~ unusedSpotAwayFromLink 50) crs
pedestalRoom :: RandomGen g => Item -> State g Room pedestalRoom :: (RandomGen g) => Item -> State g Room
pedestalRoom it = do pedestalRoom it = do
let flit = PutFlIt it let flit = PutFlIt it
x <- state $ randomR (150, 250) x <- state $ randomR (150, 250)
+1 -1
View File
@@ -40,7 +40,7 @@ triggerDoorRoom i =
-- note no bounds -- note no bounds
} }
where where
f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do f gw = return $ fromMaybe (error "tried to put a door using an empty placement list") $ do
pmnt <- gw ^? genPmnt . ix i pmnt <- gw ^? genPmnt . ix i
return $ putDoubleDoor defaultDoorWall (cond pmnt) (V2 0 20) (V2 40 20) 2 return $ putDoubleDoor defaultDoorWall (cond pmnt) (V2 0 20) (V2 40 20) 2
cond pmnt = WdTrig $ fromJust (_plMID pmnt) cond pmnt = WdTrig $ fromJust (_plMID pmnt)
+5 -14
View File
@@ -17,6 +17,7 @@ module Dodge.Room.LasTurret (
storeRoomID, storeRoomID,
) where ) where
import Dodge.Room.Modify
import Color import Color
import Control.Monad import Control.Monad
import Data.Foldable import Data.Foldable
@@ -148,9 +149,9 @@ lasSensorTurretTest = do
let cenroom = let cenroom =
cenroom'' cenroom''
& rmInPmnt & rmInPmnt
<>~ [ (0, alight pi . f i) <>~ [ (0, return . alight pi . f i)
, (0, alight (0.5 * pi) . f i) , (0, return . alight (0.5 * pi) . f i)
, (0, alight (1.5 * pi) . f i) , (0, return . alight (1.5 * pi) . f i)
] ]
rToOnward "lasSensorTurretTest" $ rToOnward "lasSensorTurretTest" $
treePost treePost
@@ -166,7 +167,7 @@ lasCenSensEdge n = do
(i, cenroom') <- storeRoomID =<< shuffleLinks =<< lightSensByDoor n =<< cenLasTur (i, cenroom') <- storeRoomID =<< shuffleLinks =<< lightSensByDoor n =<< cenLasTur
lshape <- takeOne [vShape, lShape, jShape, liShape] lshape <- takeOne [vShape, lShape, jShape, liShape]
let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a + _rpDir rp)) let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a + _rpDir rp))
blight a = (0, alight a . f i) blight a = (0, return . alight a . f i)
let cenroom = cenroom' & rmInPmnt <>~ map blight [pi, (0.5 * pi), (1.5 * pi)] let cenroom = cenroom' & rmInPmnt <>~ map blight [pi, (0.5 * pi), (1.5 * pi)]
let doorroom = triggerDoorRoom n let doorroom = triggerDoorRoom n
rToOnward "lasCenSensEdge" $ rToOnward "lasCenSensEdge" $
@@ -181,16 +182,6 @@ lasCenSensEdge n = do
isused UsedOutLink{_rplsChildNum = 0} = True isused UsedOutLink{_rplsChildNum = 0} = True
isused _ = False isused _ = False
storeRoomID :: Room -> State LayoutVars (Int, Room)
storeRoomID x = do
i <- nextLayoutInt
return (i, x & rmPmnts .:~ sps0 (PutWorldUpdate (f i)))
where
f i rid _ gw = gw & genInts . at i ?~ (gw ^?! genRooms . ix rid . rmMID . _Just)
-- unsafe! assumes that storeRoomID has been called
getRoomFromID :: Int -> GenWorld -> Room
getRoomFromID i gw = gw ^?! genRooms . ix (gw ^?! genInts . ix i)
lasRunYinYang :: (RandomGen g) => State g (MetaTree Room String) lasRunYinYang :: (RandomGen g) => State g (MetaTree Room String)
lasRunYinYang = do lasRunYinYang = do
+74 -2
View File
@@ -1,4 +1,76 @@
module Dodge.Room.Modify module Dodge.Room.Modify (
( module Dodge.Room.Modify.Girder module Dodge.Room.Modify.Girder,
storeRoomID,
getRoomFromID,
addLightsNGon,
removeLights,
) where ) where
import Color
import Shape
import Dodge.Placement.Instance.LightSource
import Dodge.LevelGen.PlacementHelper
import LensHelp
import Dodge.Data.MetaTree
import RandomHelp
import Dodge.Data.GenWorld
import Dodge.Room.Modify.Girder import Dodge.Room.Modify.Girder
import qualified Data.Set as S
import Data.Maybe
import Geometry
import Data.Foldable
storeRoomID :: Room -> State LayoutVars (Int, Room)
storeRoomID x = do
i <- nextLayoutInt
return (i, x & rmPmnts .:~ sps0 (PutWorldUpdate (f i)))
where
f i rid _ gw = gw & genInts . at i ?~ (gw ^?! genRooms . ix rid . rmMID . _Just)
-- unsafe! assumes that storeRoomID has been called
getRoomFromID :: Int -> GenWorld -> Room
getRoomFromID i gw = gw ^?! genRooms . ix (gw ^?! genInts . ix i)
removeLights :: Room -> Room
removeLights = rmPmnts %~ mapMaybe f
where
f x = case x ^. plType of
PutLabel "light" -> Nothing
_ -> Just x
addLightsNGon :: Room -> State LayoutVars Room
addLightsNGon rm = do
(i, rm') <- storeRoomID $ removeLights rm
return $
rm'
& rmInPmnt
.:~ (0, f i)
where
a = 2 * pi - (2 * pi / fromIntegral (rm ^?! rmType . rmngonSides))
y = rm ^?! rmType . rmngonSize
x = y * tan (0.5 * a)
f i gw = do
lshape <- takeOne [vShape, lShape, jShape, liShape]
let ps = fromMaybe (PS (V2 y 0) 0) $ rpToPS <$> find iscolorlight (grm ^. rmPos)
alight a' = mntLSCond (fmap (fmap $ colorSH black) lshape) (rotateps a' ps)
takeOne
[ spanLightY (V2 0 0) (V2 y x) (V2 (x) y) (V2 (x) (-y))
, spanLightY (V2 20 20) (V2 y 20) (V2 (-y) 20) (V2 20 (-y))
, spanLightI (V2 22 y) (V2 22 (-y))
, spanLightI (V2 x y) (V2 (-x) (-y))
, alight (0.5 * pi) <> alight (1.5 * pi)
]
where
grm = getRoomFromID i gw
rotateps a' (PS v d) = PS (rotateV a' v) (a' + d)
rotateps _ _ = error "in addLightsNGon"
rpToPS rp = (PS (_rpPos rp) (_rpDir rp))
iscolorlight rp =
(ColoredLightRP `S.member` (rp ^. rpFlags))
&& islinkroompos rp
islinkroompos rp = case rp ^. rpType of
UsedOutLink{} -> True
UsedInLink{} -> True
UnusedLink{} -> True
NotLink{} -> False
+1
View File
@@ -24,6 +24,7 @@ roomNgon n x = do
, _rmPmnts = [thelight] , _rmPmnts = [thelight]
, _rmBound = [poly] , _rmBound = [poly]
, _rmFloor = Tiled [makeTileFromPoly poly 2] , _rmFloor = Tiled [makeTileFromPoly poly 2]
, _rmType = RoomNgon n x
--, _rmFloor = InheritFloor --, _rmFloor = InheritFloor
, _rmName = show n ++ "gon" , _rmName = show n ++ "gon"
, _rmPos = poss , _rmPos = poss
+4 -4
View File
@@ -154,7 +154,7 @@ roomCenterPillar = do
roomRect 240 240 2 2 roomRect 240 240 2 2
) )
weaponEmptyRoom :: State StdGen (Tree Room) weaponEmptyRoom :: RandomGen g => State g (Tree Room)
weaponEmptyRoom = do weaponEmptyRoom = do
w <- state $ randomR (220, 300) w <- state $ randomR (220, 300)
h <- state $ randomR (220, 300) h <- state $ randomR (220, 300)
@@ -209,7 +209,7 @@ weaponBehindPillar = do
, cleatOnward $ set rmPmnts [sPS (V2 20 60) (negate $ pi / 2) randC1] corridorN , cleatOnward $ set rmPmnts [sPS (V2 20 60) (negate $ pi / 2) randC1] corridorN
] ]
weaponBetweenPillars :: State StdGen (MetaTree Room String) weaponBetweenPillars :: State LayoutVars (MetaTree Room String)
weaponBetweenPillars = do weaponBetweenPillars = do
(w, wn) <- takeOne [(240, 2), (340, 3)] (w, wn) <- takeOne [(240, 2), (340, 3)]
(h, hn) <- takeOne [(240, 2), (340, 3)] (h, hn) <- takeOne [(240, 2), (340, 3)]
@@ -271,7 +271,7 @@ deadEndRoom =
lnks = [(V2 0 30, 0)] lnks = [(V2 0 30, 0)]
{- A random Either tree with a weapon and melee monster challenge. -} {- A random Either tree with a weapon and melee monster challenge. -}
weaponRoom :: State StdGen (MetaTree Room String) weaponRoom :: State LayoutVars (MetaTree Room String)
weaponRoom = weaponRoom =
join $ join $
takeOne takeOne
@@ -458,7 +458,7 @@ distributerRoom atype aamount = do
) )
) )
return $ r & rmPmnts .:~ store return $ r & rmPmnts .:~ store
& rmInPmnt <>~ [(0,dst),(1,thepipe)] & rmInPmnt <>~ [(0,return . dst),(1,return . thepipe)]
& rmLinks %~ setInLinksByType (OnEdge South) & rmLinks %~ setInLinksByType (OnEdge South)
& rmLinks %~ setOutLinks (not . S.member (OnEdge South) . _rlType) & rmLinks %~ setOutLinks (not . S.member (OnEdge South) . _rlType)
+27 -12
View File
@@ -1,33 +1,37 @@
{-# LANGUAGE TupleSections #-} {-# LANGUAGE TupleSections #-}
module Dodge.Room.SensorDoor (sensAboveDoor, sensorRoomRunPast) where module Dodge.Room.SensorDoor (sensAboveDoor, sensorRoomRunPast) where
import Dodge.Data.MTRS import Dodge.Room.Procedural
import Control.Monad
import qualified Data.Set as S import qualified Data.Set as S
import Dodge.Cleat import Dodge.Cleat
import Dodge.Data.GenWorld import Dodge.Data.GenWorld
import Dodge.Data.MTRS
import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.PlacementHelper
import Dodge.Placement.Instance import Dodge.Placement.Instance
import Dodge.PlacementSpot import Dodge.PlacementSpot
import Dodge.Room.Corridor import Dodge.Room.Corridor
import Dodge.Room.Door import Dodge.Room.Door
import Dodge.Room.Link import Dodge.Room.Link
import Dodge.Room.Modify
import Dodge.Room.Ngon import Dodge.Room.Ngon
import Dodge.Room.Procedural
import Dodge.Terminal import Dodge.Terminal
import Dodge.Tree import Dodge.Tree
import Dodge.Wire import Dodge.Wire
import Geometry import Geometry
import LensHelp import LensHelp
import RandomHelp import RandomHelp
import Control.Monad
-- TODO fix case where the sensor created by sensInsideDoor blocks another door -- TODO fix case where the sensor created by sensInsideDoor blocks another door
-- for roomRectAutoLinks-- make the locked door a center door? -- for roomRectAutoLinks-- make the locked door a center door?
sensorRoom :: RandomGen g => SensorType -> Int -> State g (Tree Room) sensorRoom :: SensorType -> Int -> State LayoutVars (Tree Room)
sensorRoom senseType n = do sensorRoom senseType n = do
rm <- join $ takeOne [roomNgon 8 200, roomRectAutoLights 200 200] rm <- join $ takeOne [addLightsNGon =<< roomNgon 8 200, roomRectAutoLights 200 200]
--rm <- join $ takeOne [addLightsNGon =<< roomNgon 8 200]
cenroom <- shuffleLinks $ sensInsideDoor senseType n rm cenroom <- shuffleLinks $ sensInsideDoor senseType n rm
return $ treePost return $
treePost
[ door [ door
, cenroom & rmLinkEff .~ f , cenroom & rmLinkEff .~ f
, triggerDoorRoom n , triggerDoorRoom n
@@ -43,29 +47,40 @@ sensorRoom senseType n = do
p' = p +.+ rotateV d (V2 0 (negate 100)) p' = p +.+ rotateV d (V2 0 (negate 100))
isclose = dist (_rlPos rl) p' < 30 isclose = dist (_rlPos rl) p' < 30
sensorRoomRunPast :: RandomGen g => SensorType -> Int -> State g MTRS
sensorRoomRunPast :: SensorType -> Int -> State LayoutVars MTRS
sensorRoomRunPast dt n = do sensorRoomRunPast dt n = do
t <- sensorRoom dt n t <- sensorRoom dt n
rToOnward "sensorRoomRunPast" $ t rToOnward "sensorRoomRunPast" $
& applyToSubforest [0] t
& applyToSubforest
[0]
(++ [treePost [door & rmConnectsTo .~ (\s -> S.member InLink s && not (S.member BlockedLink s)), cleatLabel n corridor]]) (++ [treePost [door & rmConnectsTo .~ (\s -> S.member InLink s && not (S.member BlockedLink s)), cleatLabel n corridor]])
sensAboveDoor :: SensorType -> Float -> PlacementSpot -> Placement sensAboveDoor :: SensorType -> Float -> PlacementSpot -> Placement
sensAboveDoor sensetype wth ps = sensAboveDoor sensetype wth ps =
extTrigLitPos extTrigLitPos
( psposAddLabel
ColoredLightRP
(atFstLnkOutShiftBy (\(p, a) -> ((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosHigh))) (atFstLnkOutShiftBy (\(p, a) -> ((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosHigh)))
)
(\tp -> Just $ damageSensor sensetype wth (_plMID tp) ps) (\tp -> Just $ damageSensor sensetype wth (_plMID tp) ps)
sensInsideDoor :: SensorType -> Int -> Room -> Room sensInsideDoor :: SensorType -> Int -> Room -> Room
sensInsideDoor senseType i rm = rm sensInsideDoor senseType i rm =
& rmName .++~ take 4 (show senseType) rm
& rmName
.++~ take 4 (show senseType)
& rmPmnts & rmPmnts
.++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100)) .++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100)) , psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ verticalWire (V2 20 0) 0 80 , psPt atFstLnkOut . PutForeground $ verticalWire (V2 20 0) 0 80
, putMessageTerminal , putMessageTerminal
(textTerminal & tmCommands .:~ TCDamageCommand) (textTerminal & tmCommands .:~ TCDamageCommand)
& plSpot .~ rprBoolShift isUnusedLnk (shiftInBy 10 <&> (, S.singleton UsedPosHigh)) & plSpot
.~ rprBoolShift isUnusedLnk (shiftInBy 10 <&> (,S.singleton UsedPosHigh))
, sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i , sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i
] ]
-- & rmOutPmnt . at i ?~ sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) -- & rmOutPmnt . at i ?~ sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100)
+3 -2
View File
@@ -50,8 +50,9 @@ powerFakeout = do
] ]
-- the i is used either for a PickOnePlacement or a room id, this is not great -- the i is used either for a PickOnePlacement or a room id, this is not great
startRoom :: Int -> State StdGen (MetaTree Room String) startRoom :: State LayoutVars (MetaTree Room String)
startRoom i = startRoom = do
i <- nextLayoutInt
join $ join $
takeOne takeOne
[ attachOnward "startThenWeaponRoom" <$> preCritStart <*> weaponRoom [ attachOnward "startThenWeaponRoom" <$> preCritStart <*> weaponRoom
+3 -9
View File
@@ -2,6 +2,7 @@
module Dodge.Room.Tutorial where module Dodge.Room.Tutorial where
import Dodge.Room.Modify
import Control.Monad import Control.Monad
import qualified Data.IntMap.Strict as IM import qualified Data.IntMap.Strict as IM
import qualified Data.IntSet as IS import qualified Data.IntSet as IS
@@ -119,7 +120,7 @@ tutDrop = do
return $ return $
tToBTree "TutDrop" $ tToBTree "TutDrop" $
treePost treePost
[x & rmInPmnt .:~ (0, t j), y, cleatOnward rm] [x & rmInPmnt .:~ (0, return . t j), y, cleatOnward rm]
where where
t j gw = t j gw =
let x = gw ^? genInts . ix j let x = gw ^? genInts . ix j
@@ -391,13 +392,6 @@ tutLight = do
) )
_ -> Nothing _ -> Nothing
removeLights :: Room -> Room
removeLights = rmPmnts %~ mapMaybe f
where
f x = case x ^. plType of
PutLabel "light" -> Nothing
_ -> Just x
tutHub :: State LayoutVars (MetaTree Room String) tutHub :: State LayoutVars (MetaTree Room String)
tutHub = do tutHub = do
(is, wbp) <- setTreeInts =<< critsRoom 1 (is, wbp) <- setTreeInts =<< critsRoom 1
@@ -413,7 +407,7 @@ tutHub = do
x <- x <-
shuffleLinks shuffleLinks
. analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i . analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i
. (rmInPmnt .:~ (0, a)) . (rmInPmnt .:~ (0, return . a))
. addDoorAtNthLinkToggleTerminal 1 ss j . addDoorAtNthLinkToggleTerminal 1 ss j
-- . addDoorAtNthLinkToggleInterrupt 2 ds j -- . addDoorAtNthLinkToggleInterrupt 2 ds j
. addDoorAtNthLinkToggleInterrupt 2 ds j1 . addDoorAtNthLinkToggleInterrupt 2 ds j1
+4 -3
View File
@@ -30,11 +30,12 @@ import qualified Data.Map.Strict as M
import NewInt import NewInt
import Data.Foldable import Data.Foldable
import Data.Monoid import Data.Monoid
import RandomHelp
testStringInit :: Universe -> [String] testStringInit :: Universe -> [String]
testStringInit u = testStringInit u = [evalState (takeOne ["a","b"]) (_randGen $ _uvWorld u)]
(fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcType . _McDamSensor . sensAmount) -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcType . _McDamSensor . sensAmount)
<> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial) -- <> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial)
--testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir) --testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir)
--testStringInit u = map show --testStringInit u = map show
-- (u ^.. uvWorld . cWorld . lWorld . machines . traverse .mcType . _McDistributer) -- (u ^.. uvWorld . cWorld . lWorld . machines . traverse .mcType . _McDistributer)
+43 -25
View File
@@ -21,8 +21,25 @@ randomRanges = join . takeOne . f
f (x : y : ys) = state (randomR (x, y)) : f ys f (x : y : ys) = state (randomR (x, y)) : f ys
f _ = [] f _ = []
takeOne :: RandomGen g => [a] -> State g a takeOne :: (RandomGen g) => [a] -> State g a
takeOne xs = state (randomR (0, length xs - 1)) >>= (\i -> return (xs !! i)) takeOne xs = state (randomR (0, length xs - 1)) >>= \i -> return (xs !! i)
takeOneRem :: (RandomGen g) => [a] -> State g (Maybe (a, [a]))
takeOneRem [] = return Nothing
takeOneRem xs =
state (randomR (0, length xs - 1)) >>= \i -> do
let (ys, (z : zs)) = splitAt i xs
return $ Just (z, ys <> zs)
takeOneFiltered :: (RandomGen g) => (a -> Bool) -> [a] -> State g (Maybe a)
takeOneFiltered t xs = do
m <- takeOneRem xs
f m
where
f Nothing = return Nothing
f (Just (y, ys))
| t y = return $ Just y
| otherwise = takeOneFiltered t ys
takeOneWeighted :: (RandomGen g, Random b, Ord b, Num b) => [b] -> [a] -> State g a takeOneWeighted :: (RandomGen g, Random b, Ord b, Num b) => [b] -> [a] -> State g a
takeOneWeighted ws xs = state (randomR (0, sum ws)) >>= (\w -> return (xs !! i w ws)) takeOneWeighted ws xs = state (randomR (0, sum ws)) >>= (\w -> return (xs !! i w ws))
@@ -33,22 +50,22 @@ takeOneWeighted ws xs = state (randomR (0, sum ws)) >>= (\w -> return (xs !! i w
i _ _ = 0 i _ _ = 0
-- {-# OPTIONS -Wno-incomplete-uni-patterns #-} -- {-# OPTIONS -Wno-incomplete-uni-patterns #-}
takeOneMore :: RandomGen g => ([a], [a]) -> State g ([a], [a]) takeOneMore :: (RandomGen g) => ([a], [a]) -> State g ([a], [a])
takeOneMore (_, []) = error "trying to takeOneMore from empty list" takeOneMore (_, []) = error "trying to takeOneMore from empty list"
takeOneMore (xs, ys) = do takeOneMore (xs, ys) = do
i <- state $ randomR (0, length ys - 1) i <- state $ randomR (0, length ys - 1)
let (zs, w : ws) = splitAt i ys let (zs, w : ws) = splitAt i ys
return (w : xs, zs ++ ws) return (w : xs, zs ++ ws)
takeNMore :: RandomGen g => Int -> ([a], [a]) -> State g ([a], [a]) takeNMore :: (RandomGen g) => Int -> ([a], [a]) -> State g ([a], [a])
takeNMore n p = foldl' (flip $ const (>>= takeOneMore)) (return p) [1 .. n] takeNMore n p = foldl' (flip $ const (>>= takeOneMore)) (return p) [1 .. n]
takeN :: RandomGen g => Int -> [a] -> State g [a] takeN :: (RandomGen g) => Int -> [a] -> State g [a]
takeN 0 _ = return [] takeN 0 _ = return []
takeN i xs = fst <$> takeNMore i ([], xs) takeN i xs = fst <$> takeNMore i ([], xs)
-- | Randomly shuffle a list. -- | Randomly shuffle a list.
shuffle :: RandomGen g => [a] -> State g [a] shuffle :: (RandomGen g) => [a] -> State g [a]
shuffle xs = do shuffle xs = do
rands <- forM [0 .. length xs - 1] $ \i -> state $ randomR (0, i) rands <- forM [0 .. length xs - 1] $ \i -> state $ randomR (0, i)
let f ys rand = let f ys rand =
@@ -58,94 +75,95 @@ shuffle xs = do
return $ forceElements zs `seq` zs return $ forceElements zs `seq` zs
-- | Randomly shuffle the tail of a list, not safe. -- | Randomly shuffle the tail of a list, not safe.
shuffleTail :: RandomGen g => [a] -> State g [a] shuffleTail :: (RandomGen g) => [a] -> State g [a]
shuffleTail (x : xs) = (x :) <$> shuffle xs shuffleTail (x : xs) = (x :) <$> shuffle xs
shuffleTail _ = undefined shuffleTail _ = undefined
-- select elements from a list randomly -- select elements from a list randomly
-- each element has the same independent chance of being selected -- each element has the same independent chance of being selected
randomSelectionFromList :: RandomGen g => Float -> [a] -> State g [a] randomSelectionFromList :: (RandomGen g) => Float -> [a] -> State g [a]
randomSelectionFromList = filterM . const . randProb randomSelectionFromList = filterM . const . randProb
randProb :: RandomGen g => Float -> State g Bool randProb :: (RandomGen g) => Float -> State g Bool
randProb p = do randProb p = do
p1 <- state $ randomR (0, 1) p1 <- state $ randomR (0, 1)
return (p1 < p) return (p1 < p)
randInCirc :: RandomGen g => Float -> State g Point2 randInCirc :: (RandomGen g) => Float -> State g Point2
randInCirc = flip randInArc (2 * pi) randInCirc = flip randInArc (2 * pi)
randOnCirc :: RandomGen g => Float -> State g Point2 randOnCirc :: (RandomGen g) => Float -> State g Point2
randOnCirc r = do randOnCirc r = do
a <- state $ randomR (0, 2 * pi) a <- state $ randomR (0, 2 * pi)
return $ r *.* unitVectorAtAngle a return $ r *.* unitVectorAtAngle a
randInArc :: RandomGen g => Float -> Float -> State g Point2 randInArc :: (RandomGen g) => Float -> Float -> State g Point2
randInArc = randInArcStrip 0 randInArc = randInArcStrip 0
randInArcStrip :: RandomGen g => Float -> Float -> Float -> State g Point2 randInArcStrip :: (RandomGen g) => Float -> Float -> Float -> State g Point2
randInArcStrip minrad maxRad maxangle = do randInArcStrip minrad maxRad maxangle = do
rad <- state $ randomR (minrad, maxRad) rad <- state $ randomR (minrad, maxRad)
ang <- state $ randomR (0, maxangle) ang <- state $ randomR (0, maxangle)
return $ rad *.* unitVectorAtAngle ang return $ rad *.* unitVectorAtAngle ang
randOnUnitSphere :: RandomGen g => State g Point3 randOnUnitSphere :: (RandomGen g) => State g Point3
randOnUnitSphere = do randOnUnitSphere = do
z <- state $ randomR (negate 1, 1) z <- state $ randomR (negate 1, 1)
longitude <- state $ randomR (0, 2 * pi) longitude <- state $ randomR (0, 2 * pi)
let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude
return (V3 x y z) return (V3 x y z)
randOnHemisphere :: RandomGen g => State g Point3 randOnHemisphere :: (RandomGen g) => State g Point3
randOnHemisphere = do randOnHemisphere = do
z <- state $ randomR (0, 1) z <- state $ randomR (0, 1)
longitude <- state $ randomR (0, 2 * pi) longitude <- state $ randomR (0, 2 * pi)
let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude
return (V3 x y z) return (V3 x y z)
randInHemisphere :: RandomGen g => State g Point3 randInHemisphere :: (RandomGen g) => State g Point3
randInHemisphere = do randInHemisphere = do
p <- randOnHemisphere p <- randOnHemisphere
r <- state $ randomR (0, 1) r <- state $ randomR (0, 1)
return $ r *.*.* p return $ r *.*.* p
randInRect :: RandomGen g => Float -> Float -> State g Point2 randInRect :: (RandomGen g) => Float -> Float -> State g Point2
randInRect w h = do randInRect w h = do
x <- state $ randomR (0, w) x <- state $ randomR (0, w)
y <- state $ randomR (0, h) y <- state $ randomR (0, h)
return (V2 x y) return (V2 x y)
maybeTakeOne :: RandomGen g => [a] -> State g (Maybe a) maybeTakeOne :: (RandomGen g) => [a] -> State g (Maybe a)
maybeTakeOne [] = return Nothing maybeTakeOne [] = return Nothing
maybeTakeOne xs = state (randomR (0, length xs - 1)) >>= (\i -> return (Just (xs !! i))) maybeTakeOne xs = state (randomR (0, length xs - 1)) >>= (\i -> return (Just (xs !! i)))
randsSpread :: RandomGen g => (Float, Float) -> Int -> State g [Float] randsSpread :: (RandomGen g) => (Float, Float) -> Int -> State g [Float]
randsSpread (a, b) i randsSpread (a, b) i
| i <= 0 = error "tried to take <= 0 randsSpread" | i <= 0 = error "tried to take <= 0 randsSpread"
| otherwise = zipWith (+) [a + x, a + 2 * x ..] <$> replicateM i (state $ randomR (0, x)) | otherwise = zipWith (+) [a + x, a + 2 * x ..] <$> replicateM i (state $ randomR (0, x))
where where
x = (b - a) / fromIntegral i x = (b - a) / fromIntegral i
randsOnCirc :: RandomGen g => Int -> State g [Float] randsOnCirc :: (RandomGen g) => Int -> State g [Float]
randsOnCirc = randsSpread (0, 2 * pi) randsOnCirc = randsSpread (0, 2 * pi)
randPeakedParam :: RandomGen g => Int -> Float -> Float -> Float -> State g Float randPeakedParam :: (RandomGen g) => Int -> Float -> Float -> Float -> State g Float
randPeakedParam i a b c = do randPeakedParam i a b c = do
x <- state $ randomR (-1, 1) x <- state $ randomR (-1, 1)
let y = x ^ i let y = x ^ i
return $ if y < 0 return $
if y < 0
then a + y * (a - b) then a + y * (a - b)
else b + y * (c - b) else b + y * (c - b)
randPeaked :: RandomGen g => Float -> Float -> Float -> State g Float randPeaked :: (RandomGen g) => Float -> Float -> Float -> State g Float
randPeaked = randPeakedParam 3 randPeaked = randPeakedParam 3
randFromPair :: RandomGen g => Float -> (a,a) -> State g a randFromPair :: (RandomGen g) => Float -> (a, a) -> State g a
randFromPair x (l, r) = do randFromPair x (l, r) = do
y <- state $ randomR (0, 1) y <- state $ randomR (0, 1)
if x < y then return l else return r if x < y then return l else return r
shufflePair :: RandomGen g => (a,a) -> State g (a,a) shufflePair :: (RandomGen g) => (a, a) -> State g (a, a)
shufflePair (x, y) = do shufflePair (x, y) = do
v <- state $ randomR (0 :: Float, 1) v <- state $ randomR (0 :: Float, 1)
if v > 0.5 then return (x, y) else return (y, x) if v > 0.5 then return (x, y) else return (y, x)
+159 -150
View File
@@ -131,7 +131,7 @@ BlockDebris src/Dodge/Data/Prop.hs 23;" C
BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 31;" C BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 31;" C
BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C
BlockStatus src/Dodge/Data/Universe.hs 98;" t BlockStatus src/Dodge/Data/Universe.hs 98;" t
BlockedLink src/Dodge/Data/Room.hs 50;" C BlockedLink src/Dodge/Data/Room.hs 54;" C
BloomLayer src/Picture/Data.hs 21;" C BloomLayer src/Picture/Data.hs 21;" C
Blunt src/Dodge/Data/Damage.hs 17;" C Blunt src/Dodge/Data/Damage.hs 17;" C
Boosting src/Dodge/Data/Creature/Stance.hs 26;" C Boosting src/Dodge/Data/Creature/Stance.hs 26;" C
@@ -220,6 +220,7 @@ Collision_test src/Dodge/Data/Config.hs 98;" C
Color src/Color/Data.hs 30;" t Color src/Color/Data.hs 30;" t
Color8 src/Color/Data.hs 32;" t Color8 src/Color/Data.hs 32;" t
ColorFaction src/Dodge/Data/Creature/State.hs 19;" C ColorFaction src/Dodge/Data/Creature/State.hs 19;" C
ColoredLightRP src/Dodge/Data/Room.hs 88;" C
Comatose src/Dodge/Data/Creature/Perception.hs 51;" C Comatose src/Dodge/Data/Creature/Perception.hs 51;" C
CombAmount src/Dodge/Data/CombAmount.hs 10;" t CombAmount src/Dodge/Data/CombAmount.hs 10;" t
CombItem src/Dodge/Data/Combine.hs 8;" t CombItem src/Dodge/Data/Combine.hs 8;" t
@@ -453,7 +454,7 @@ FootstepSound src/Dodge/Data/SoundOrigin.hs 30;" C
ForceField src/Dodge/Data/Material.hs 19;" C ForceField src/Dodge/Data/Material.hs 19;" C
ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t
ForegroundShape src/Dodge/Data/ForegroundShape.hs 12;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 12;" t
FromEdge src/Dodge/Data/Room.hs 49;" C FromEdge src/Dodge/Data/Room.hs 53;" C
FullRes src/Dodge/Data/Config.hs 113;" C FullRes src/Dodge/Data/Config.hs 113;" C
FullShadowFidelity src/Shape/Data.hs 19;" C FullShadowFidelity src/Shape/Data.hs 19;" C
FullSize src/Dodge/Data/Item/Params.hs 26;" C FullSize src/Dodge/Data/Item/Params.hs 26;" C
@@ -563,7 +564,7 @@ ImpulsesList src/Dodge/Data/ActionPlan.hs 72;" C
InDivineZone src/Dodge/Data/Scenario.hs 22;" C InDivineZone src/Dodge/Data/Scenario.hs 22;" C
InDream src/Dodge/Data/Scenario.hs 19;" C InDream src/Dodge/Data/Scenario.hs 19;" C
InInv src/Dodge/Data/Item/Location.hs 29;" C InInv src/Dodge/Data/Item/Location.hs 29;" C
InLink src/Dodge/Data/Room.hs 45;" C InLink src/Dodge/Data/Room.hs 49;" C
InParallelUniverse src/Dodge/Data/Scenario.hs 21;" C InParallelUniverse src/Dodge/Data/Scenario.hs 21;" C
InRealWorld src/Dodge/Data/Scenario.hs 18;" C InRealWorld src/Dodge/Data/Scenario.hs 18;" C
InSimulation src/Dodge/Data/Scenario.hs 20;" C InSimulation src/Dodge/Data/Scenario.hs 20;" C
@@ -628,7 +629,7 @@ LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 79;" C
LS src/Dodge/Data/LightSource.hs 21;" C LS src/Dodge/Data/LightSource.hs 21;" C
LSParam src/Dodge/Data/LightSource.hs 14;" t LSParam src/Dodge/Data/LightSource.hs 14;" t
LWorld src/Dodge/Data/LWorld.hs 94;" t LWorld src/Dodge/Data/LWorld.hs 94;" t
LabLink src/Dodge/Data/Room.hs 46;" C LabLink src/Dodge/Data/Room.hs 50;" C
LabSS src/Dodge/Data/Scenario.hs 97;" C LabSS src/Dodge/Data/Scenario.hs 97;" C
LabelCluster src/Dodge/Data/RoomCluster.hs 13;" C LabelCluster src/Dodge/Data/RoomCluster.hs 13;" C
Laboratory src/Dodge/Data/Scenario.hs 61;" C Laboratory src/Dodge/Data/Scenario.hs 61;" C
@@ -857,7 +858,7 @@ NorthEast src/Dodge/Data/CardinalPoint.hs 21;" C
NorthEast8 src/Dodge/Data/CardinalPoint.hs 29;" C NorthEast8 src/Dodge/Data/CardinalPoint.hs 29;" C
NorthWest src/Dodge/Data/CardinalPoint.hs 24;" C NorthWest src/Dodge/Data/CardinalPoint.hs 24;" C
NorthWest8 src/Dodge/Data/CardinalPoint.hs 35;" C NorthWest8 src/Dodge/Data/CardinalPoint.hs 35;" C
NotLink src/Dodge/Data/Room.hs 69;" C NotLink src/Dodge/Data/Room.hs 73;" C
NotPushed src/Dodge/Data/Door.hs 26;" C NotPushed src/Dodge/Data/Door.hs 26;" C
Nothing' src/MaybeHelp.hs 11;" C Nothing' src/MaybeHelp.hs 11;" C
NothingID src/Dodge/Data/CrWlID.hs 10;" C NothingID src/Dodge/Data/CrWlID.hs 10;" C
@@ -917,7 +918,7 @@ Object src/Dodge/Data/Object.hs 10;" t
ObjectType src/Dodge/Data/ObjectType.hs 9;" t ObjectType src/Dodge/Data/ObjectType.hs 9;" t
OnBack src/Dodge/Data/Equipment/Misc.hs 22;" C OnBack src/Dodge/Data/Equipment/Misc.hs 22;" C
OnChest src/Dodge/Data/Equipment/Misc.hs 21;" C OnChest src/Dodge/Data/Equipment/Misc.hs 21;" C
OnEdge src/Dodge/Data/Room.hs 48;" C OnEdge src/Dodge/Data/Room.hs 52;" C
OnFloor src/Dodge/Data/Item/Location.hs 38;" C OnFloor src/Dodge/Data/Item/Location.hs 38;" C
OnHead src/Dodge/Data/Equipment/Misc.hs 20;" C OnHead src/Dodge/Data/Equipment/Misc.hs 20;" C
OnLeftLeg src/Dodge/Data/Equipment/Misc.hs 25;" C OnLeftLeg src/Dodge/Data/Equipment/Misc.hs 25;" C
@@ -933,7 +934,7 @@ Opaque src/Dodge/Data/Wall.hs 34;" C
OpticScope src/Dodge/Data/Item/Scope.hs 12;" C OpticScope src/Dodge/Data/Item/Scope.hs 12;" C
OptionScreen src/Dodge/Data/Universe.hs 82;" C OptionScreen src/Dodge/Data/Universe.hs 82;" C
OptionScreenFlag src/Dodge/Data/Universe.hs 70;" t OptionScreenFlag src/Dodge/Data/Universe.hs 70;" t
OutLink src/Dodge/Data/Room.hs 44;" C OutLink src/Dodge/Data/Room.hs 48;" C
OutsideTerminal src/Dodge/Data/Input.hs 28;" C OutsideTerminal src/Dodge/Data/Input.hs 28;" C
OutwardShockwave src/Dodge/Data/Shockwave.hs 12;" C OutwardShockwave src/Dodge/Data/Shockwave.hs 12;" C
OverCombCombine src/Dodge/Data/Input.hs 24;" C OverCombCombine src/Dodge/Data/Input.hs 24;" C
@@ -963,13 +964,13 @@ PRISM src/Dodge/Data/Item/Combine.hs 65;" C
PS src/Dodge/Data/GenWorld.hs 99;" C PS src/Dodge/Data/GenWorld.hs 99;" C
PSNoShiftCont src/Dodge/Data/GenWorld.hs 100;" C PSNoShiftCont src/Dodge/Data/GenWorld.hs 100;" C
PSPos src/Dodge/Data/GenWorld.hs 101;" C PSPos src/Dodge/Data/GenWorld.hs 101;" C
PSRoomRand src/Dodge/Data/GenWorld.hs 106;" C PSRoomRand src/Dodge/Data/GenWorld.hs 108;" C
PSType src/Dodge/Data/GenWorld.hs 32;" t PSType src/Dodge/Data/GenWorld.hs 32;" t
PUMP src/Dodge/Data/Item/Combine.hs 62;" C PUMP src/Dodge/Data/Item/Combine.hs 62;" C
PaletteColor src/Color/Data.hs 11;" t PaletteColor src/Color/Data.hs 11;" t
PathBetweenDebugV2s src/Dodge/Data/Universe.hs 54;" C PathBetweenDebugV2s src/Dodge/Data/Universe.hs 54;" C
PathBetweenLeftRightClick src/Dodge/Data/Universe.hs 53;" C PathBetweenLeftRightClick src/Dodge/Data/Universe.hs 53;" C
PathFromEdge src/Dodge/Data/Room.hs 77;" t PathFromEdge src/Dodge/Data/Room.hs 81;" t
PathShowType src/Dodge/Data/Universe.hs 52;" t PathShowType src/Dodge/Data/Universe.hs 52;" t
PathTo src/Dodge/Data/ActionPlan.hs 70;" C PathTo src/Dodge/Data/ActionPlan.hs 70;" C
Pathing src/Dodge/Data/Config.hs 90;" C Pathing src/Dodge/Data/Config.hs 90;" C
@@ -986,7 +987,7 @@ Picture src/Picture/Data.hs 41;" t
Piercing src/Dodge/Data/Damage.hs 16;" C Piercing src/Dodge/Data/Damage.hs 16;" C
Piezoelectric src/Dodge/Data/Material.hs 23;" C Piezoelectric src/Dodge/Data/Material.hs 23;" C
PistolAI src/Dodge/Data/Creature/Misc.hs 41;" C PistolAI src/Dodge/Data/Creature/Misc.hs 41;" C
Placement src/Dodge/Data/GenWorld.hs 112;" t Placement src/Dodge/Data/GenWorld.hs 114;" t
PlacementSpot src/Dodge/Data/GenWorld.hs 98;" t PlacementSpot src/Dodge/Data/GenWorld.hs 98;" t
PlainBarrel src/Dodge/Data/Creature/Misc.hs 86;" C PlainBarrel src/Dodge/Data/Creature/Misc.hs 86;" C
PlainDeath src/Dodge/Data/Creature.hs 68;" C PlainDeath src/Dodge/Data/Creature.hs 68;" C
@@ -1007,7 +1008,7 @@ Poison src/Dodge/Data/Damage.hs 26;" C
PoisonDamage src/Dodge/Data/Damage/Type.hs 6;" C PoisonDamage src/Dodge/Data/Damage/Type.hs 6;" C
PoisonDeath src/Dodge/Data/Creature.hs 68;" C PoisonDeath src/Dodge/Data/Creature.hs 68;" C
PoisonGas src/Dodge/Data/Cloud.hs 42;" C PoisonGas src/Dodge/Data/Cloud.hs 42;" C
PolyEdge src/Dodge/Data/Room.hs 47;" C PolyEdge src/Dodge/Data/Room.hs 51;" C
PolyShad src/Picture/Data.hs 31;" C PolyShad src/Picture/Data.hs 31;" C
Polyhedra src/Polyhedra/Data.hs 13;" t Polyhedra src/Polyhedra/Data.hs 13;" t
Polyhedron src/Polyhedra/Data.hs 13;" C Polyhedron src/Polyhedra/Data.hs 13;" C
@@ -1074,7 +1075,7 @@ RIFLE src/Dodge/Data/Item/Combine.hs 153;" C
RLAUNCHER src/Dodge/Data/Item/Combine.hs 169;" C RLAUNCHER src/Dodge/Data/Item/Combine.hs 169;" C
RLAUNCHERX src/Dodge/Data/Item/Combine.hs 170;" C RLAUNCHERX src/Dodge/Data/Item/Combine.hs 170;" C
ROSE src/Color/Data.hs 18;" C ROSE src/Color/Data.hs 18;" C
RPLinkStatus src/Dodge/Data/Room.hs 58;" t RPLinkStatus src/Dodge/Data/Room.hs 62;" t
RProps src/Dodge/Layout/Generate.hs 14;" C RProps src/Dodge/Layout/Generate.hs 14;" C
RadarBlip src/Dodge/Data/RadarBlip.hs 12;" t RadarBlip src/Dodge/Data/RadarBlip.hs 12;" t
RadarSweep src/Dodge/Data/RadarSweep.hs 17;" t RadarSweep src/Dodge/Data/RadarSweep.hs 17;" t
@@ -1118,18 +1119,20 @@ Rocket src/Dodge/Data/Projectile.hs 32;" C
RocketHoming src/Dodge/Data/Projectile.hs 39;" t RocketHoming src/Dodge/Data/Projectile.hs 39;" t
RocketSmoke src/Dodge/Data/Projectile.hs 52;" t RocketSmoke src/Dodge/Data/Projectile.hs 52;" t
RocketSmoke src/Dodge/Data/Cloud.hs 22;" C RocketSmoke src/Dodge/Data/Cloud.hs 22;" C
Room src/Dodge/Data/GenWorld.hs 127;" t Room src/Dodge/Data/GenWorld.hs 129;" t
RoomClipping src/Dodge/Data/Config.hs 123;" t RoomClipping src/Dodge/Data/Config.hs 123;" t
RoomInt src/Dodge/Tree/Shift.hs 27;" t RoomInt src/Dodge/Tree/Shift.hs 27;" t
RoomLink src/Dodge/Data/Room.hs 24;" t RoomLink src/Dodge/Data/Room.hs 24;" t
RoomLinkType src/Dodge/Data/Room.hs 43;" t RoomLinkType src/Dodge/Data/Room.hs 47;" t
RoomNgon src/Dodge/Data/Room.hs 41;" C
RoomPos src/Dodge/Data/Room.hs 15;" t RoomPos src/Dodge/Data/Room.hs 15;" t
RoomPosFlag src/Dodge/Data/Room.hs 80;" t RoomPosFlag src/Dodge/Data/Room.hs 84;" t
RoomPosOffGrid src/Dodge/Data/Room.hs 82;" C RoomPosOffGrid src/Dodge/Data/Room.hs 86;" C
RoomPosOnGrid src/Dodge/Data/Room.hs 81;" C RoomPosOnFloor src/Dodge/Data/Room.hs 87;" C
RoomPosOnGrid src/Dodge/Data/Room.hs 85;" C
RoomProperties src/Dodge/Layout/Generate.hs 14;" t RoomProperties src/Dodge/Layout/Generate.hs 14;" t
RoomType src/Dodge/Data/Room.hs 31;" t RoomType src/Dodge/Data/Room.hs 31;" t
RoomWire src/Dodge/Data/Room.hs 53;" t RoomWire src/Dodge/Data/Room.hs 57;" t
RoundedFaces src/Shape/Data.hs 13;" C RoundedFaces src/Shape/Data.hs 13;" C
RunningSideEffect src/Dodge/Data/Universe.hs 67;" C RunningSideEffect src/Dodge/Data/Universe.hs 67;" C
SCRAPMETAL src/Dodge/Data/Item/Combine.hs 61;" C SCRAPMETAL src/Dodge/Data/Item/Combine.hs 61;" C
@@ -1396,7 +1399,7 @@ Unimportant src/Shape/Data.hs 32;" C
Universe src/Dodge/Data/Universe.hs 28;" t Universe src/Dodge/Data/Universe.hs 28;" t
UnloadedWeaponSF src/Dodge/Data/ComposedItem.hs 13;" C UnloadedWeaponSF src/Dodge/Data/ComposedItem.hs 13;" C
UnlockInv src/Dodge/Data/WorldEffect.hs 31;" C UnlockInv src/Dodge/Data/WorldEffect.hs 31;" C
UnusedLink src/Dodge/Data/Room.hs 68;" C UnusedLink src/Dodge/Data/Room.hs 72;" C
UseAttach src/Dodge/Data/Item/Use.hs 30;" C UseAttach src/Dodge/Data/Item/Use.hs 30;" C
UseBulletMod src/Dodge/Data/Item/Use.hs 35;" C UseBulletMod src/Dodge/Data/Item/Use.hs 35;" C
UseCondition src/Dodge/Data/UseCondition.hs 4;" t UseCondition src/Dodge/Data/UseCondition.hs 4;" t
@@ -1419,13 +1422,13 @@ UseValue src/Dodge/Data/Item/Use.hs 33;" C
UseableAnytime src/Dodge/Data/UseCondition.hs 7;" C UseableAnytime src/Dodge/Data/UseCondition.hs 7;" C
UseableWhenAimed src/Dodge/Data/UseCondition.hs 5;" C UseableWhenAimed src/Dodge/Data/UseCondition.hs 5;" C
UseableWhenHeld src/Dodge/Data/UseCondition.hs 6;" C UseableWhenHeld src/Dodge/Data/UseCondition.hs 6;" C
UsedInLink src/Dodge/Data/Room.hs 64;" C UsedInLink src/Dodge/Data/Room.hs 68;" C
UsedOutLink src/Dodge/Data/Room.hs 59;" C UsedOutLink src/Dodge/Data/Room.hs 63;" C
UsedPos src/Dodge/Data/Room.hs 85;" t UsedPos src/Dodge/Data/Room.hs 91;" t
UsedPosFloor src/Dodge/Data/Room.hs 89;" C UsedPosFloor src/Dodge/Data/Room.hs 95;" C
UsedPosHigh src/Dodge/Data/Room.hs 88;" C UsedPosHigh src/Dodge/Data/Room.hs 94;" C
UsedPosLow src/Dodge/Data/Room.hs 86;" C UsedPosLow src/Dodge/Data/Room.hs 92;" C
UsedPosMid src/Dodge/Data/Room.hs 87;" C UsedPosMid src/Dodge/Data/Room.hs 93;" C
VAO src/Shader/Data.hs 64;" t VAO src/Shader/Data.hs 64;" t
VBO src/Shader/Data.hs 79;" t VBO src/Shader/Data.hs 79;" t
VF src/Polyhedra/Data.hs 21;" t VF src/Polyhedra/Data.hs 21;" t
@@ -1462,7 +1465,7 @@ WallP src/Dodge/LevelGen/StaticWalls.hs 23;" t
WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t
WallSound src/Dodge/Data/SoundOrigin.hs 25;" C WallSound src/Dodge/Data/SoundOrigin.hs 25;" C
WallStructure src/Dodge/Data/Wall/Structure.hs 10;" t WallStructure src/Dodge/Data/Wall/Structure.hs 10;" t
WallWire src/Dodge/Data/Room.hs 55;" C WallWire src/Dodge/Data/Room.hs 59;" C
Walls_info src/Dodge/Data/Config.hs 89;" C Walls_info src/Dodge/Data/Config.hs 89;" C
War src/Dodge/Data/Scenario.hs 28;" C War src/Dodge/Data/Scenario.hs 28;" C
WarmTime src/Dodge/Data/Item/Params.hs 19;" C WarmTime src/Dodge/Data/Item/Params.hs 19;" C
@@ -2056,9 +2059,9 @@ _nzAngle src/Dodge/Data/Item/Params.hs 16;" f
_nzMaxWalkAngle src/Dodge/Data/Muzzle.hs 50;" f _nzMaxWalkAngle src/Dodge/Data/Muzzle.hs 50;" f
_nzPressure src/Dodge/Data/Muzzle.hs 49;" f _nzPressure src/Dodge/Data/Muzzle.hs 49;" f
_nzWalkSpeed src/Dodge/Data/Muzzle.hs 51;" f _nzWalkSpeed src/Dodge/Data/Muzzle.hs 51;" f
_offGridFromEdges src/Dodge/Data/Room.hs 82;" f _offGridFromEdges src/Dodge/Data/Room.hs 86;" f
_oldMagnets src/Dodge/Data/LWorld.hs 127;" f _oldMagnets src/Dodge/Data/LWorld.hs 127;" f
_onGridFromEdges src/Dodge/Data/Room.hs 81;" f _onGridFromEdges src/Dodge/Data/Room.hs 85;" f
_opDraw src/Dodge/Data/Wall.hs 33;" f _opDraw src/Dodge/Data/Wall.hs 33;" f
_opSel src/Dodge/Data/RightButtonOptions.hs 15;" f _opSel src/Dodge/Data/RightButtonOptions.hs 15;" f
_opTexture src/Dodge/Data/Wall.hs 34;" f _opTexture src/Dodge/Data/Wall.hs 34;" f
@@ -2090,11 +2093,11 @@ _pjSpin src/Dodge/Data/Projectile.hs 19;" f
_pjTimer src/Dodge/Data/Projectile.hs 22;" f _pjTimer src/Dodge/Data/Projectile.hs 22;" f
_pjType src/Dodge/Data/Projectile.hs 24;" f _pjType src/Dodge/Data/Projectile.hs 24;" f
_pjVel src/Dodge/Data/Projectile.hs 17;" f _pjVel src/Dodge/Data/Projectile.hs 17;" f
_plExternalID src/Dodge/Data/GenWorld.hs 116;" f _plExternalID src/Dodge/Data/GenWorld.hs 118;" f
_plIDCont src/Dodge/Data/GenWorld.hs 117;" f _plIDCont src/Dodge/Data/GenWorld.hs 119;" f
_plMID src/Dodge/Data/GenWorld.hs 115;" f _plMID src/Dodge/Data/GenWorld.hs 117;" f
_plSpot src/Dodge/Data/GenWorld.hs 113;" f _plSpot src/Dodge/Data/GenWorld.hs 115;" f
_plType src/Dodge/Data/GenWorld.hs 114;" f _plType src/Dodge/Data/GenWorld.hs 116;" f
_plasmaBalls src/Dodge/Data/LWorld.hs 106;" f _plasmaBalls src/Dodge/Data/LWorld.hs 106;" f
_playStatus src/Sound/Data.hs 15;" f _playStatus src/Sound/Data.hs 15;" f
_playingSounds src/Dodge/Data/World.hs 41;" f _playingSounds src/Dodge/Data/World.hs 41;" f
@@ -2114,11 +2117,11 @@ _proxReqEquipment src/Dodge/Data/Machine/Sensor.hs 35;" f
_proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 34;" f _proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 34;" f
_proxSensorType src/Dodge/Data/Machine/Sensor.hs 25;" f _proxSensorType src/Dodge/Data/Machine/Sensor.hs 25;" f
_proxToggle src/Dodge/Data/Machine/Sensor.hs 26;" f _proxToggle src/Dodge/Data/Machine/Sensor.hs 26;" f
_psFallback src/Dodge/Data/GenWorld.hs 104;" f _psFallback src/Dodge/Data/GenWorld.hs 106;" f
_psPos src/Dodge/Data/GenWorld.hs 99;" f _psPos src/Dodge/Data/GenWorld.hs 99;" f
_psRandShift src/Dodge/Data/GenWorld.hs 108;" f _psRandShift src/Dodge/Data/GenWorld.hs 110;" f
_psRoomEff src/Dodge/Data/GenWorld.hs 103;" f _psRoomEff src/Dodge/Data/GenWorld.hs 105;" f
_psRoomRandPointNum src/Dodge/Data/GenWorld.hs 107;" f _psRoomRandPointNum src/Dodge/Data/GenWorld.hs 109;" f
_psRot src/Dodge/Data/GenWorld.hs 99;" f _psRot src/Dodge/Data/GenWorld.hs 99;" f
_psSelect src/Dodge/Data/GenWorld.hs 102;" f _psSelect src/Dodge/Data/GenWorld.hs 102;" f
_pullWallShader src/Data/Preload/Render.hs 22;" f _pullWallShader src/Data/Preload/Render.hs 22;" f
@@ -2185,41 +2188,43 @@ _rkSmoke src/Dodge/Data/Projectile.hs 34;" f
_rlDir src/Dodge/Data/Room.hs 27;" f _rlDir src/Dodge/Data/Room.hs 27;" f
_rlPos src/Dodge/Data/Room.hs 26;" f _rlPos src/Dodge/Data/Room.hs 26;" f
_rlType src/Dodge/Data/Room.hs 25;" f _rlType src/Dodge/Data/Room.hs 25;" f
_rmBound src/Dodge/Data/GenWorld.hs 143;" f _rmBound src/Dodge/Data/GenWorld.hs 145;" f
_rmChildren src/Dodge/Data/GenWorld.hs 154;" f _rmChildren src/Dodge/Data/GenWorld.hs 156;" f
_rmClusterStatus src/Dodge/Data/GenWorld.hs 156;" f _rmClusterStatus src/Dodge/Data/GenWorld.hs 158;" f
_rmConnectsTo src/Dodge/Data/GenWorld.hs 151;" f _rmConnectsTo src/Dodge/Data/GenWorld.hs 153;" f
_rmEndWires src/Dodge/Data/GenWorld.hs 150;" f _rmEndWires src/Dodge/Data/GenWorld.hs 152;" f
_rmFloor src/Dodge/Data/GenWorld.hs 144;" f _rmFloor src/Dodge/Data/GenWorld.hs 146;" f
_rmHeight src/Dodge/Data/Room.hs 39;" f _rmHeight src/Dodge/Data/Room.hs 39;" f
_rmInPmnt src/Dodge/Data/GenWorld.hs 141;" f _rmInPmnt src/Dodge/Data/GenWorld.hs 143;" f
_rmLinkEff src/Dodge/Data/GenWorld.hs 131;" f _rmLinkEff src/Dodge/Data/GenWorld.hs 133;" f
_rmLinks src/Dodge/Data/GenWorld.hs 129;" f _rmLinks src/Dodge/Data/GenWorld.hs 131;" f
_rmMID src/Dodge/Data/GenWorld.hs 152;" f _rmMID src/Dodge/Data/GenWorld.hs 154;" f
_rmMParent src/Dodge/Data/GenWorld.hs 153;" f _rmMParent src/Dodge/Data/GenWorld.hs 155;" f
_rmName src/Dodge/Data/GenWorld.hs 145;" f _rmName src/Dodge/Data/GenWorld.hs 147;" f
_rmPath src/Dodge/Data/GenWorld.hs 139;" f _rmPath src/Dodge/Data/GenWorld.hs 141;" f
_rmPmnts src/Dodge/Data/GenWorld.hs 140;" f _rmPmnts src/Dodge/Data/GenWorld.hs 142;" f
_rmPolys src/Dodge/Data/GenWorld.hs 128;" f _rmPolys src/Dodge/Data/GenWorld.hs 130;" f
_rmPos src/Dodge/Data/GenWorld.hs 138;" f _rmPos src/Dodge/Data/GenWorld.hs 140;" f
_rmRandPSs src/Dodge/Data/GenWorld.hs 148;" f _rmRandPSs src/Dodge/Data/GenWorld.hs 150;" f
_rmShift src/Dodge/Data/GenWorld.hs 146;" f _rmShift src/Dodge/Data/GenWorld.hs 148;" f
_rmStartWires src/Dodge/Data/GenWorld.hs 149;" f _rmStartWires src/Dodge/Data/GenWorld.hs 151;" f
_rmType src/Dodge/Data/GenWorld.hs 155;" f _rmType src/Dodge/Data/GenWorld.hs 157;" f
_rmViewpoints src/Dodge/Data/GenWorld.hs 147;" f _rmViewpoints src/Dodge/Data/GenWorld.hs 149;" f
_rmWidth src/Dodge/Data/Room.hs 38;" f _rmWidth src/Dodge/Data/Room.hs 38;" f
_rmngonSides src/Dodge/Data/Room.hs 42;" f
_rmngonSize src/Dodge/Data/Room.hs 43;" f
_rpDir src/Dodge/Data/Room.hs 17;" f _rpDir src/Dodge/Data/Room.hs 17;" f
_rpFlags src/Dodge/Data/Room.hs 18;" f _rpFlags src/Dodge/Data/Room.hs 18;" f
_rpOnPath src/Dodge/Data/Room.hs 69;" f _rpOnPath src/Dodge/Data/Room.hs 73;" f
_rpPlacementUse src/Dodge/Data/Room.hs 20;" f _rpPlacementUse src/Dodge/Data/Room.hs 20;" f
_rpPos src/Dodge/Data/Room.hs 16;" f _rpPos src/Dodge/Data/Room.hs 16;" f
_rpType src/Dodge/Data/Room.hs 19;" f _rpType src/Dodge/Data/Room.hs 19;" f
_rplsChildNum src/Dodge/Data/Room.hs 61;" f _rplsChildNum src/Dodge/Data/Room.hs 65;" f
_rplsInRoomID src/Dodge/Data/Room.hs 66;" f _rplsInRoomID src/Dodge/Data/Room.hs 70;" f
_rplsOutRoomID src/Dodge/Data/Room.hs 62;" f _rplsOutRoomID src/Dodge/Data/Room.hs 66;" f
_rplsType src/Dodge/Data/Room.hs 60;" f _rplsType src/Dodge/Data/Room.hs 64;" f
_rplsType src/Dodge/Data/Room.hs 65;" f _rplsType src/Dodge/Data/Room.hs 69;" f
_rplsType src/Dodge/Data/Room.hs 68;" f _rplsType src/Dodge/Data/Room.hs 72;" f
_rsAR src/Dodge/Data/RadarSweep.hs 23;" f _rsAR src/Dodge/Data/RadarSweep.hs 23;" f
_rsMapper src/Dodge/Data/RadarSweep.hs 22;" f _rsMapper src/Dodge/Data/RadarSweep.hs 22;" f
_rsObject src/Dodge/Data/RadarSweep.hs 20;" f _rsObject src/Dodge/Data/RadarSweep.hs 20;" f
@@ -2533,6 +2538,7 @@ addGirderNS' src/Dodge/Room/Modify/Girder.hs 55;" f
addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f
addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f
addIndefiniteArticle src/StringHelp.hs 17;" f addIndefiniteArticle src/StringHelp.hs 17;" f
addLightsNGon src/Dodge/Room/Modify.hs 41;" f
addNodesCrossing src/Dodge/Room/Path.hs 28;" f addNodesCrossing src/Dodge/Room/Path.hs 28;" f
addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" f addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" f
addPane src/Dodge/Placement/PlaceSpot.hs 169;" f addPane src/Dodge/Placement/PlaceSpot.hs 169;" f
@@ -2569,8 +2575,8 @@ ammoMagSPic src/Dodge/Item/Draw/SPic.hs 128;" f
amr src/Dodge/Item/Held/Rod.hs 34;" f amr src/Dodge/Item/Held/Rod.hs 34;" f
anRoom src/Dodge/Floor.hs 116;" f anRoom src/Dodge/Floor.hs 116;" f
analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 124;" f analyserByDoor src/Dodge/Room/LasTurret.hs 127;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 108;" f analyserByNthLink src/Dodge/Room/LasTurret.hs 111;" f
andOrRegex src/Dodge/DisplayInventory.hs 78;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f
angleBetween src/Geometry.hs 158;" f angleBetween src/Geometry.hs 158;" f
angleVV src/Geometry/Vector.hs 58;" f angleVV src/Geometry/Vector.hs 58;" f
@@ -2769,7 +2775,7 @@ cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 28;" f
cardinalVectors src/Dodge/FloorItem.hs 24;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f
cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f
ceilingTo src/Geometry/Zone.hs 15;" f ceilingTo src/Geometry/Zone.hs 15;" f
cenLasTur src/Dodge/Room/LasTurret.hs 50;" f cenLasTur src/Dodge/Room/LasTurret.hs 51;" f
centerText src/Picture/Base.hs 176;" f centerText src/Picture/Base.hs 176;" f
centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f
centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f
@@ -2919,7 +2925,7 @@ corDoor src/Dodge/Room/Room.hs 404;" f
cornerList src/Preload/Render.hs 236;" f cornerList src/Preload/Render.hs 236;" f
corpseOrGib src/Dodge/Creature/Update.hs 98;" f corpseOrGib src/Dodge/Creature/Update.hs 98;" f
corridor src/Dodge/Room/Corridor.hs 17;" f corridor src/Dodge/Room/Corridor.hs 17;" f
corridorBoss src/Dodge/LockAndKey.hs 136;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f
corridorN src/Dodge/Room/Corridor.hs 58;" f corridorN src/Dodge/Room/Corridor.hs 58;" f
corridorWallN src/Dodge/Room/Corridor.hs 77;" f corridorWallN src/Dodge/Room/Corridor.hs 77;" f
crAdd src/Dodge/Room/RezBox.hs 116;" f crAdd src/Dodge/Room/RezBox.hs 116;" f
@@ -3232,7 +3238,7 @@ doFloatFloat src/Dodge/FloatFunction.hs 5;" f
doGenFloat src/Dodge/HeldUse.hs 1174;" f doGenFloat src/Dodge/HeldUse.hs 1174;" f
doGravityPU src/Dodge/Projectile/Update.hs 35;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f
doHeldUseEffect src/Dodge/HeldUse.hs 369;" f doHeldUseEffect src/Dodge/HeldUse.hs 369;" f
doInPlacements src/Dodge/Layout.hs 87;" f doInPlacements src/Dodge/Layout.hs 89;" f
doIndividualPlacements src/Dodge/Layout.hs 101;" f doIndividualPlacements src/Dodge/Layout.hs 101;" f
doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f
doItemTimeScroll src/Dodge/Update.hs 206;" f doItemTimeScroll src/Dodge/Update.hs 206;" f
@@ -3574,9 +3580,9 @@ gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f
gRandify src/Dodge/Randify.hs 12;" f gRandify src/Dodge/Randify.hs 12;" f
gadgetEffect src/Dodge/HeldUse.hs 49;" f gadgetEffect src/Dodge/HeldUse.hs 49;" f
gameOverMenu src/Dodge/Menu.hs 200;" f gameOverMenu src/Dodge/Menu.hs 200;" f
gameRoomFromRoom src/Dodge/Layout.hs 152;" f gameRoomFromRoom src/Dodge/Layout.hs 156;" f
gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f
gameRoomsFromRooms src/Dodge/Layout.hs 149;" f gameRoomsFromRooms src/Dodge/Layout.hs 153;" f
gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenu src/Dodge/Menu.hs 152;" f
gameplayMenuOptions src/Dodge/Menu.hs 155;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f
gasEffect src/Dodge/Update.hs 855;" f gasEffect src/Dodge/Update.hs 855;" f
@@ -3585,7 +3591,7 @@ gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f
generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f
generateGraphs src/Dodge/Menu.hs 147;" f generateGraphs src/Dodge/Menu.hs 147;" f
generateLayout src/Dodge/Layout/Generate.hs 11;" f generateLayout src/Dodge/Layout/Generate.hs 11;" f
generateLevelFromRoomList src/Dodge/Layout.hs 35;" f generateLevelFromRoomList src/Dodge/Layout.hs 37;" f
generateWorldFromSeed src/Dodge/LevelGen.hs 18;" f generateWorldFromSeed src/Dodge/LevelGen.hs 18;" f
geom src/Shader/Data.hs 110;" f geom src/Shader/Data.hs 110;" f
geometryQuickCheckTests test/Spec.hs 55;" f geometryQuickCheckTests test/Spec.hs 55;" f
@@ -3603,8 +3609,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 539;" f
getCommand src/Dodge/Terminal.hs 61;" f getCommand src/Dodge/Terminal.hs 61;" f
getCommands src/Dodge/Terminal.hs 58;" f getCommands src/Dodge/Terminal.hs 58;" f
getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f
getCrsFromRooms src/Dodge/Room/Tutorial.hs 496;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 489;" f
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 483;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 476;" f
getDebugMouseOver src/Dodge/Update.hs 424;" f getDebugMouseOver src/Dodge/Update.hs 424;" f
getDistortions src/Dodge/Render.hs 443;" f getDistortions src/Dodge/Render.hs 443;" f
getEdgesCrossing src/Dodge/Path.hs 37;" f getEdgesCrossing src/Dodge/Path.hs 37;" f
@@ -3621,14 +3627,14 @@ getNodePos src/Dodge/Path.hs 34;" f
getPJStabiliser src/Dodge/HeldUse.hs 1268;" f getPJStabiliser src/Dodge/HeldUse.hs 1268;" f
getPretty src/AesonHelp.hs 8;" f getPretty src/AesonHelp.hs 8;" f
getPromptTM src/Dodge/Terminal/Type.hs 3;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f
getRoomFromID src/Dodge/Room/LasTurret.hs 195;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f
getRoomsFromInts src/Dodge/Room/Tutorial.hs 479;" f getRoomsFromInts src/Dodge/Room/Tutorial.hs 472;" f
getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f
getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f
getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f
getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f
getSplitString src/Dodge/Debug/Terminal.hs 129;" f getSplitString src/Dodge/Debug/Terminal.hs 129;" f
getTiles src/Dodge/Layout.hs 200;" f getTiles src/Dodge/Layout.hs 207;" f
getViewpoints src/Dodge/Viewpoints.hs 29;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f
getVolleyBurst src/Dodge/HeldUse.hs 129;" f getVolleyBurst src/Dodge/HeldUse.hs 129;" f
getWallPathing src/Dodge/Wall/Pathing.hs 7;" f getWallPathing src/Dodge/Wall/Pathing.hs 7;" f
@@ -3707,8 +3713,8 @@ headLampShape src/Dodge/Item/Draw/SPic.hs 422;" f
headMap src/Dodge/DoubleTree.hs 118;" f headMap src/Dodge/DoubleTree.hs 118;" f
headPQ src/Dodge/Creature/HandPos.hs 116;" f headPQ src/Dodge/Creature/HandPos.hs 116;" f
healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 108;" f
healthTest src/Dodge/Room/LasTurret.hs 127;" f healthTest src/Dodge/Room/LasTurret.hs 130;" f
heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f
heldAimStance src/Dodge/Item/AimStance.hs 24;" f heldAimStance src/Dodge/Item/AimStance.hs 24;" f
heldAimZoom src/Dodge/Update/Camera.hs 157;" f heldAimZoom src/Dodge/Update/Camera.hs 157;" f
@@ -3892,7 +3898,7 @@ itemInternalValue src/Dodge/Item/Display.hs 34;" f
itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f
itemInvLock src/Dodge/HeldUse.hs 454;" f itemInvLock src/Dodge/HeldUse.hs 454;" f
itemMuzzles src/Dodge/HeldUse.hs 172;" f itemMuzzles src/Dodge/HeldUse.hs 172;" f
itemRooms src/Dodge/LockAndKey.hs 41;" f itemRooms src/Dodge/LockAndKey.hs 40;" f
itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f
itemSPic src/Dodge/Item/Draw/SPic.hs 17;" f itemSPic src/Dodge/Item/Draw/SPic.hs 17;" f
itemScan src/Dodge/Item/Scope.hs 68;" f itemScan src/Dodge/Item/Scope.hs 68;" f
@@ -3930,9 +3936,9 @@ justify src/Justify.hs 9;" f
k src/ShortShow.hs 48;" f k src/ShortShow.hs 48;" f
k' src/ShortShow.hs 48;" f k' src/ShortShow.hs 48;" f
keyCard src/Dodge/Item/Held/Utility.hs 20;" f keyCard src/Dodge/Item/Held/Utility.hs 20;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 102;" f keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 90;" f keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 93;" f
keyCardRunPastRand src/Dodge/LockAndKey.hs 38;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f
keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyPic src/Dodge/Item/Draw/SPic.hs 438;" f
keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f
knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f
@@ -3943,19 +3949,19 @@ lConnectMulti src/Dodge/Render/Connectors.hs 51;" f
lShape src/Dodge/Placement/Instance/LightSource.hs 57;" f lShape src/Dodge/Placement/Instance/LightSource.hs 57;" f
lamp src/Dodge/Creature/Lamp.hs 18;" f lamp src/Dodge/Creature/Lamp.hs 18;" f
lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f
lasCenRunClose' src/Dodge/Room/LasTurret.hs 321;" f lasCenRunClose' src/Dodge/Room/LasTurret.hs 309;" f
lasCenRunClose1 src/Dodge/Room/LasTurret.hs 410;" f lasCenRunClose1 src/Dodge/Room/LasTurret.hs 398;" f
lasCenRunClose2 src/Dodge/Room/LasTurret.hs 483;" f lasCenRunClose2 src/Dodge/Room/LasTurret.hs 471;" f
lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 375;" f lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 363;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 162;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 165;" f
lasGunPic src/Dodge/Item/Draw/SPic.hs 413;" f lasGunPic src/Dodge/Item/Draw/SPic.hs 413;" f
lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f
lasRunRand src/Dodge/Room/LasTurret.hs 480;" f lasRunRand src/Dodge/Room/LasTurret.hs 468;" f
lasRunYinYang src/Dodge/Room/LasTurret.hs 198;" f lasRunYinYang src/Dodge/Room/LasTurret.hs 186;" f
lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 261;" f lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 249;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 139;" f lasSensorTurretTest src/Dodge/Room/LasTurret.hs 142;" f
lasTunnel src/Dodge/Room/LasTurret.hs 521;" f lasTunnel src/Dodge/Room/LasTurret.hs 509;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 562;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 550;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 27;" f laser src/Dodge/Item/Held/BatteryGuns.hs 27;" f
laserSpark src/Dodge/Material/Damage.hs 37;" f laserSpark src/Dodge/Material/Damage.hs 37;" f
@@ -3979,8 +3985,8 @@ legsSPic src/Dodge/Item/Draw/SPic.hs 447;" f
lerpP2A src/Dodge/ShiftPoint.hs 14;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f
light src/Color.hs 131;" f light src/Color.hs 131;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 75;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 63;" f lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f
lightsToRender src/Dodge/Render/Lights.hs 14;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f
lightx4 src/Color.hs 155;" f lightx4 src/Color.hs 155;" f
@@ -4122,7 +4128,7 @@ maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f
maybeExitCombine src/Dodge/Update/Input/InGame.hs 568;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 568;" f
maybeOpenConsole src/Dodge/Update.hs 133;" f maybeOpenConsole src/Dodge/Update.hs 133;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 118;" f maybeTakeOne src/RandomHelp.hs 135;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f
mcBackgroundSound src/Dodge/Machine/Update.hs 153;" f mcBackgroundSound src/Dodge/Machine/Update.hs 153;" f
mcColor src/Dodge/Machine/Draw.hs 83;" f mcColor src/Dodge/Machine/Draw.hs 83;" f
@@ -4277,7 +4283,7 @@ normalizeAnglePi src/Dodge/Base.hs 154;" f
normalizeColor src/Color.hs 103;" f normalizeColor src/Color.hs 103;" f
normalizeV src/Geometry/Vector.hs 44;" f normalizeV src/Geometry/Vector.hs 44;" f
normalizeV3 src/Geometry/Vector3D.hs 84;" f normalizeV3 src/Geometry/Vector3D.hs 84;" f
notLink src/Dodge/Data/Room.hs 72;" f notLink src/Dodge/Data/Room.hs 76;" f
nulgate src/Dodge/Item/Scope.hs 101;" f nulgate src/Dodge/Item/Scope.hs 101;" f
numDrawableVertices src/Shader/Parameters.hs 34;" f numDrawableVertices src/Shader/Parameters.hs 34;" f
numGLuint src/Shader/Parameters.hs 29;" f numGLuint src/Shader/Parameters.hs 29;" f
@@ -4344,7 +4350,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f
paletteToColor src/Color.hs 85;" f paletteToColor src/Color.hs 85;" f
parseItem src/Dodge/Debug/Terminal.hs 62;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f
parseNum src/Dodge/Debug/Terminal.hs 77;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f
passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 561;" f passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 554;" f
pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f
pathEdgeObstructed src/Dodge/Path.hs 66;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f
pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f
@@ -4385,6 +4391,7 @@ plNew src/Dodge/Base/NewID.hs 19;" f
plNewID src/Dodge/Base/NewID.hs 7;" f plNewID src/Dodge/Base/NewID.hs 7;" f
plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f
plNewUsing src/Dodge/Base/NewID.hs 27;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f
plPriority src/Dodge/Layout.hs 112;" f
plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f
placeChasm src/Dodge/Placement/PlaceSpot.hs 153;" f placeChasm src/Dodge/Placement/PlaceSpot.hs 153;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 216;" f placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 216;" f
@@ -4392,7 +4399,7 @@ placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 41;" f
placeSpot src/Dodge/Placement/PlaceSpot.hs 33;" f placeSpot src/Dodge/Placement/PlaceSpot.hs 33;" f
placeSpotID src/Dodge/Placement/PlaceSpot.hs 102;" f placeSpotID src/Dodge/Placement/PlaceSpot.hs 102;" f
placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 87;" f placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 87;" f
placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 65;" f placeSpotUsingRoomPos src/Dodge/Placement/PlaceSpot.hs 65;" f
placeWallPoly src/Dodge/Placement/PlaceSpot.hs 164;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 164;" f
plainRegex src/Dodge/DisplayInventory.hs 193;" f plainRegex src/Dodge/DisplayInventory.hs 193;" f
playIfFree src/Sound.hs 139;" f playIfFree src/Sound.hs 139;" f
@@ -4482,7 +4489,7 @@ powlist src/Multiset.hs 61;" f
powlistUpToN src/Multiset.hs 23;" f powlistUpToN src/Multiset.hs 23;" f
powlistUpToN' src/Multiset.hs 12;" f powlistUpToN' src/Multiset.hs 12;" f
powlistUpToN'' src/Multiset.hs 31;" f powlistUpToN'' src/Multiset.hs 31;" f
preCritStart src/Dodge/Room/Start.hs 83;" f preCritStart src/Dodge/Room/Start.hs 84;" f
prePos src/Quaternion.hs 64;" f prePos src/Quaternion.hs 64;" f
preloadRender src/Preload/Render.hs 29;" f preloadRender src/Preload/Render.hs 29;" f
premapMaybe src/FoldlHelp.hs 26;" f premapMaybe src/FoldlHelp.hs 26;" f
@@ -4536,7 +4543,7 @@ putDoor src/Dodge/Room/Airlock.hs 114;" f
putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f putDoubleDoor src/Dodge/Placement/Instance/Door.hs 17;" f
putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" f
putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 60;" f putImmediateMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 60;" f
putLamp src/Dodge/Placement/Instance/LightSource.hs 202;" f putLamp src/Dodge/Placement/Instance/LightSource.hs 203;" f
putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f putLasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f
putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" f putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" f
putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 98;" f putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 98;" f
@@ -4570,22 +4577,22 @@ randDirSpark src/Dodge/Spark.hs 56;" f
randEdgeTank src/Dodge/Room/Tanks.hs 34;" f randEdgeTank src/Dodge/Room/Tanks.hs 34;" f
randEdgeTanks src/Dodge/Room/Tanks.hs 52;" f randEdgeTanks src/Dodge/Room/Tanks.hs 52;" f
randFirstWeapon src/Dodge/Placement/Random.hs 8;" f randFirstWeapon src/Dodge/Placement/Random.hs 8;" f
randFromPair src/RandomHelp.hs 143;" f randFromPair src/RandomHelp.hs 161;" f
randInArc src/RandomHelp.hs 83;" f randInArc src/RandomHelp.hs 100;" f
randInArcStrip src/RandomHelp.hs 86;" f randInArcStrip src/RandomHelp.hs 103;" f
randInCirc src/RandomHelp.hs 75;" f randInCirc src/RandomHelp.hs 92;" f
randInHemisphere src/RandomHelp.hs 106;" f randInHemisphere src/RandomHelp.hs 123;" f
randInRect src/RandomHelp.hs 112;" f randInRect src/RandomHelp.hs 129;" f
randOnCirc src/RandomHelp.hs 78;" f randOnCirc src/RandomHelp.hs 95;" f
randOnHemisphere src/RandomHelp.hs 99;" f randOnHemisphere src/RandomHelp.hs 116;" f
randOnUnitSphere src/RandomHelp.hs 92;" f randOnUnitSphere src/RandomHelp.hs 109;" f
randPeaked src/RandomHelp.hs 140;" f randPeaked src/RandomHelp.hs 158;" f
randPeakedParam src/RandomHelp.hs 132;" f randPeakedParam src/RandomHelp.hs 149;" f
randProb src/RandomHelp.hs 70;" f randProb src/RandomHelp.hs 87;" f
randSpark src/Dodge/Spark.hs 70;" f randSpark src/Dodge/Spark.hs 70;" f
randSparkExtraVel src/Dodge/Spark.hs 93;" f randSparkExtraVel src/Dodge/Spark.hs 93;" f
randWallReflect src/Dodge/Update.hs 702;" f randWallReflect src/Dodge/Update.hs 702;" f
randomChallenges src/Dodge/Room/Start.hs 63;" f randomChallenges src/Dodge/Room/Start.hs 64;" f
randomCompass src/Dodge/Layout.hs 60;" f randomCompass src/Dodge/Layout.hs 60;" f
randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" f
randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 258;" f randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 258;" f
@@ -4594,11 +4601,11 @@ randomMediumRoom src/Dodge/Room/Boss.hs 70;" f
randomPath src/TreeHelp.hs 145;" f randomPath src/TreeHelp.hs 145;" f
randomPoints bench/Bench.hs 37;" f randomPoints bench/Bench.hs 37;" f
randomRanges src/RandomHelp.hs 18;" f randomRanges src/RandomHelp.hs 18;" f
randomSelectionFromList src/RandomHelp.hs 67;" f randomSelectionFromList src/RandomHelp.hs 84;" f
randomTank src/Dodge/Room/Tanks.hs 20;" f randomTank src/Dodge/Room/Tanks.hs 20;" f
randomTreeStructure src/Dodge/Layout/Generate.hs 19;" f randomTreeStructure src/Dodge/Layout/Generate.hs 19;" f
randsOnCirc src/RandomHelp.hs 129;" f randsOnCirc src/RandomHelp.hs 146;" f
randsSpread src/RandomHelp.hs 122;" f randsSpread src/RandomHelp.hs 139;" f
ratIntersectLineLine src/Geometry/Intersect.hs 214;" f ratIntersectLineLine src/Geometry/Intersect.hs 214;" f
rdToVec2s src/Dodge/Render.hs 426;" f rdToVec2s src/Dodge/Render.hs 426;" f
readSaveSlot src/Dodge/Save.hs 45;" f readSaveSlot src/Dodge/Save.hs 45;" f
@@ -4640,7 +4647,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f
removeAmmoFromMag src/Dodge/HeldUse.hs 929;" f removeAmmoFromMag src/Dodge/HeldUse.hs 929;" f
removeDot src/ShortShow.hs 44;" f removeDot src/ShortShow.hs 44;" f
removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f
removeLights src/Dodge/Room/Tutorial.hs 394;" f removeLights src/Dodge/Room/Modify.hs 34;" f
removeShieldWall src/Dodge/Item/BackgroundEffect.hs 71;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 71;" f
removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f
renderDataResizeUpdate src/Preload/Update.hs 27;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f
@@ -4676,7 +4683,7 @@ reversePair src/Dodge/LevelGen.hs 87;" f
rewinder src/Dodge/Item/Held/Utility.hs 36;" f rewinder src/Dodge/Item/Held/Utility.hs 36;" f
rezBox src/Dodge/Room/RezBox.hs 31;" f rezBox src/Dodge/Room/RezBox.hs 31;" f
rezBox' src/Dodge/Room/RezBox.hs 46;" f rezBox' src/Dodge/Room/RezBox.hs 46;" f
rezBoxStart src/Dodge/Room/Start.hs 78;" f rezBoxStart src/Dodge/Room/Start.hs 79;" f
rezBoxes src/Dodge/Room/RezBox.hs 119;" f rezBoxes src/Dodge/Room/RezBox.hs 119;" f
rezBoxesWpCrit src/Dodge/Room/RezBox.hs 90;" f rezBoxesWpCrit src/Dodge/Room/RezBox.hs 90;" f
rezColor src/Dodge/Room/RezBox.hs 138;" f rezColor src/Dodge/Room/RezBox.hs 138;" f
@@ -4752,7 +4759,7 @@ rprBool src/Dodge/PlacementSpot.hs 74;" f
rprBoolShift src/Dodge/PlacementSpot.hs 109;" f rprBoolShift src/Dodge/PlacementSpot.hs 109;" f
rprShift src/Dodge/PlacementSpot.hs 100;" f rprShift src/Dodge/PlacementSpot.hs 100;" f
rsObjectColor src/Dodge/RadarSweep/Draw.hs 34;" f rsObjectColor src/Dodge/RadarSweep/Draw.hs 34;" f
runPastStart src/Dodge/Room/Start.hs 72;" f runPastStart src/Dodge/Room/Start.hs 73;" f
runStateWorld src/Dodge/Randify.hs 18;" f runStateWorld src/Dodge/Randify.hs 18;" f
sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" f
safeAngleVV src/Geometry/Vector.hs 69;" f safeAngleVV src/Geometry/Vector.hs 69;" f
@@ -4818,15 +4825,15 @@ selSecSelSize src/Dodge/SelectionSections.hs 143;" f
selSecYint src/Dodge/SelectionSections.hs 152;" f selSecYint src/Dodge/SelectionSections.hs 152;" f
selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f
semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 64;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 73;" f
senseDamage src/Dodge/Machine/Update.hs 264;" f senseDamage src/Dodge/Machine/Update.hs 264;" f
senseDamage' src/Dodge/Wall/Damage.hs 61;" f senseDamage' src/Dodge/Wall/Damage.hs 61;" f
sensorReqToString src/Dodge/Machine/Update.hs 242;" f sensorReqToString src/Dodge/Machine/Update.hs 242;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoom src/Dodge/Room/SensorDoor.hs 31;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 55;" f
sensorSPic src/Dodge/Machine/Draw.hs 99;" f sensorSPic src/Dodge/Machine/Draw.hs 99;" f
sensorTut src/Dodge/Room/Tutorial.hs 505;" f sensorTut src/Dodge/Room/Tutorial.hs 498;" f
sensorTypeDamages src/Dodge/Machine/Update.hs 288;" f sensorTypeDamages src/Dodge/Machine/Update.hs 288;" f
sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f
sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f
@@ -4876,7 +4883,7 @@ setupFramebufferGivenStencil src/Framebuffer/Setup.hs 31;" f
setupLoop src/Loop.hs 30;" f setupLoop src/Loop.hs 30;" f
setupShadowFramebuffer src/Framebuffer/Setup.hs 24;" f setupShadowFramebuffer src/Framebuffer/Setup.hs 24;" f
setupVBO src/Shader/Compile.hs 37;" f setupVBO src/Shader/Compile.hs 37;" f
setupWorldBounds src/Dodge/Layout.hs 116;" f setupWorldBounds src/Dodge/Layout.hs 119;" f
sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f
shaderTypeExt src/Shader/Compile.hs 59;" f shaderTypeExt src/Shader/Compile.hs 59;" f
shapeBounds src/Dodge/Room/Foreground.hs 147;" f shapeBounds src/Dodge/Room/Foreground.hs 147;" f
@@ -4937,17 +4944,17 @@ showEquipItem src/Dodge/Item/Display.hs 108;" f
showInt src/Dodge/Item/Info.hs 75;" f showInt src/Dodge/Item/Info.hs 75;" f
showIntsString src/Dodge/Tree/Compose.hs 130;" f showIntsString src/Dodge/Tree/Compose.hs 130;" f
showInventoryPathing src/Dodge/Item/Display.hs 86;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f
showManObj src/Dodge/TestString.hs 57;" f showManObj src/Dodge/TestString.hs 58;" f
showMuzzlePositions src/Dodge/Debug.hs 254;" f showMuzzlePositions src/Dodge/Debug.hs 254;" f
showTerminalError src/Dodge/Debug/Terminal.hs 80;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f
showTimeFlow src/Dodge/TestString.hs 66;" f showTimeFlow src/Dodge/TestString.hs 67;" f
shrinkPolyOnEdges src/Geometry/Polygon.hs 183;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 183;" f
shrinkVert src/Geometry/Polygon.hs 187;" f shrinkVert src/Geometry/Polygon.hs 187;" f
shuffle src/RandomHelp.hs 51;" f shuffle src/RandomHelp.hs 68;" f
shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleLinks src/Dodge/Room/Link.hs 30;" f
shufflePair src/RandomHelp.hs 148;" f shufflePair src/RandomHelp.hs 166;" f
shuffleRoomPos src/Dodge/Layout.hs 82;" f shuffleRoomPos src/Dodge/Layout.hs 86;" f
shuffleTail src/RandomHelp.hs 61;" f shuffleTail src/RandomHelp.hs 78;" f
sigmoid src/Dodge/Base.hs 151;" f sigmoid src/Dodge/Base.hs 151;" f
simpleCrSprings src/Dodge/Update.hs 931;" f simpleCrSprings src/Dodge/Update.hs 931;" f
simpleTermMessage src/Dodge/Terminal.hs 275;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f
@@ -4995,7 +5002,7 @@ snailAround src/Dodge/Path.hs 78;" f
snapToGrid src/Dodge/Path.hs 129;" f snapToGrid src/Dodge/Path.hs 129;" f
sndV2 src/Geometry/Data.hs 73;" f sndV2 src/Geometry/Data.hs 73;" f
sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f
someCrits src/Dodge/LockAndKey.hs 123;" f someCrits src/Dodge/LockAndKey.hs 122;" f
soundAngle src/Dodge/SoundLogic.hs 163;" f soundAngle src/Dodge/SoundLogic.hs 163;" f
soundContinue src/Dodge/SoundLogic.hs 131;" f soundContinue src/Dodge/SoundLogic.hs 131;" f
soundContinueVol src/Dodge/SoundLogic.hs 145;" f soundContinueVol src/Dodge/SoundLogic.hs 145;" f
@@ -5018,7 +5025,7 @@ spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 176;" f
spanColLightI src/Dodge/Placement/Instance/LightSource.hs 169;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 169;" f
spanLS src/Dodge/Placement/Instance/LightSource.hs 161;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 161;" f
spanLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f spanLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f
spanLightY src/Dodge/Placement/Instance/LightSource.hs 186;" f spanLightY src/Dodge/Placement/Instance/LightSource.hs 187;" f
sparkDam src/Dodge/Spark.hs 37;" f sparkDam src/Dodge/Spark.hs 37;" f
sparkRandDir src/Dodge/Spark.hs 117;" f sparkRandDir src/Dodge/Spark.hs 117;" f
sparkToDamage src/Dodge/Spark.hs 40;" f sparkToDamage src/Dodge/Spark.hs 40;" f
@@ -5068,7 +5075,7 @@ stackPicturesAtOff src/Dodge/Render/List.hs 98;" f
stackText src/Picture/Base.hs 180;" f stackText src/Picture/Base.hs 180;" f
stackedInventory src/Dodge/Creature.hs 324;" f stackedInventory src/Dodge/Creature.hs 324;" f
startCr src/Dodge/Creature.hs 90;" f startCr src/Dodge/Creature.hs 90;" f
startCrafts src/Dodge/Room/Start.hs 93;" f startCrafts src/Dodge/Room/Start.hs 94;" f
startDrag src/Dodge/Update/Input/InGame.hs 285;" f startDrag src/Dodge/Update/Input/InGame.hs 285;" f
startInvList src/Dodge/Creature.hs 105;" f startInvList src/Dodge/Creature.hs 105;" f
startInventory src/Dodge/Creature.hs 108;" f startInventory src/Dodge/Creature.hs 108;" f
@@ -5090,7 +5097,7 @@ stopBulletAt src/Dodge/Bullet.hs 200;" f
stopPushing src/Dodge/Wall/Damage.hs 172;" f stopPushing src/Dodge/Wall/Damage.hs 172;" f
stopSoundFrom src/Dodge/SoundLogic.hs 220;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f
storageShape src/Dodge/Machine/Draw.hs 31;" f storageShape src/Dodge/Machine/Draw.hs 31;" f
storeRoomID src/Dodge/Room/LasTurret.hs 187;" f storeRoomID src/Dodge/Room/Modify.hs 23;" f
strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f
strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f
strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f
@@ -5114,11 +5121,13 @@ t src/ShortShow.hs 48;" f
tEast src/Dodge/Room/Corridor.hs 96;" f tEast src/Dodge/Room/Corridor.hs 96;" f
tToBTree src/Dodge/Tree/Compose.hs 93;" f tToBTree src/Dodge/Tree/Compose.hs 93;" f
tWest src/Dodge/Room/Corridor.hs 121;" f tWest src/Dodge/Room/Corridor.hs 121;" f
takeN src/RandomHelp.hs 46;" f takeN src/RandomHelp.hs 63;" f
takeNMore src/RandomHelp.hs 43;" f takeNMore src/RandomHelp.hs 60;" f
takeOne src/RandomHelp.hs 24;" f takeOne src/RandomHelp.hs 24;" f
takeOneMore src/RandomHelp.hs 36;" f takeOneFiltered src/RandomHelp.hs 34;" f
takeOneWeighted src/RandomHelp.hs 27;" f takeOneMore src/RandomHelp.hs 53;" f
takeOneRem src/RandomHelp.hs 27;" f
takeOneWeighted src/RandomHelp.hs 44;" f
takeUntil src/FoldableHelp.hs 99;" f takeUntil src/FoldableHelp.hs 99;" f
takeWhileArb src/ListHelp.hs 100;" f takeWhileArb src/ListHelp.hs 100;" f
takeWhileArb' src/ListHelp.hs 108;" f takeWhileArb' src/ListHelp.hs 108;" f
@@ -5157,7 +5166,7 @@ testEvent src/Dodge/Event/Test.hs 11;" f
testInventory src/Dodge/Creature.hs 305;" f testInventory src/Dodge/Creature.hs 305;" f
testPic src/Dodge/Render/ShapePicture.hs 57;" f testPic src/Dodge/Render/ShapePicture.hs 57;" f
testSPic src/Dodge/Render/ShapePicture.hs 54;" f testSPic src/Dodge/Render/ShapePicture.hs 54;" f
testStringInit src/Dodge/TestString.hs 34;" f testStringInit src/Dodge/TestString.hs 35;" f
text src/Picture/Base.hs 185;" f text src/Picture/Base.hs 185;" f
textGrad src/Picture/Text.hs 5;" f textGrad src/Picture/Text.hs 5;" f
textInputBlurb src/Dodge/Terminal.hs 43;" f textInputBlurb src/Dodge/Terminal.hs 43;" f
@@ -5189,7 +5198,7 @@ throb1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 801;" f
throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 761;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 761;" f
throwItem src/Dodge/Creature/Action.hs 191;" f throwItem src/Dodge/Creature/Action.hs 191;" f
tileTexCoords src/Tile.hs 11;" f tileTexCoords src/Tile.hs 11;" f
tilesFromRooms src/Dodge/Layout.hs 197;" f tilesFromRooms src/Dodge/Layout.hs 204;" f
tilesToLine src/Shader/AuxAddition.hs 66;" f tilesToLine src/Shader/AuxAddition.hs 66;" f
timeFlowUpdate src/Dodge/Update.hs 181;" f timeFlowUpdate src/Dodge/Update.hs 181;" f
timeScroller src/Dodge/Item/Held/Utility.hs 42;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f
@@ -5235,7 +5244,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 663;" f
topInvW src/Dodge/ListDisplayParams.hs 54;" f topInvW src/Dodge/ListDisplayParams.hs 54;" f
topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f
topPrismIndices src/Shader/Poke.hs 410;" f topPrismIndices src/Shader/Poke.hs 410;" f
topTestPart src/Dodge/TestString.hs 53;" f topTestPart src/Dodge/TestString.hs 54;" f
torchShape src/Dodge/Item/Draw/SPic.hs 276;" f torchShape src/Dodge/Item/Draw/SPic.hs 276;" f
torqueAmount src/Dodge/HeldUse.hs 596;" f torqueAmount src/Dodge/HeldUse.hs 596;" f
torqueCr src/Dodge/WorldEffect.hs 86;" f torqueCr src/Dodge/WorldEffect.hs 86;" f
@@ -5310,11 +5319,11 @@ turnTo src/Dodge/Movement/Turn.hs 8;" f
turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 22;" f
tutAnoTree src/Dodge/Room/Tutorial.hs 51;" f tutAnoTree src/Dodge/Room/Tutorial.hs 51;" f
tutDrop src/Dodge/Room/Tutorial.hs 112;" f tutDrop src/Dodge/Room/Tutorial.hs 112;" f
tutHub src/Dodge/Room/Tutorial.hs 401;" f tutHub src/Dodge/Room/Tutorial.hs 394;" f
tutLight src/Dodge/Room/Tutorial.hs 362;" f tutLight src/Dodge/Room/Tutorial.hs 362;" f
tutRezBox src/Dodge/Room/Tutorial.hs 516;" f tutRezBox src/Dodge/Room/Tutorial.hs 509;" f
tutRoomTree src/Dodge/Floor.hs 20;" f tutRoomTree src/Dodge/Floor.hs 20;" f
tutorialMessage1 src/Dodge/Room/Tutorial.hs 541;" f tutorialMessage1 src/Dodge/Room/Tutorial.hs 534;" f
tweenAngles src/Geometry/Vector.hs 190;" f tweenAngles src/Geometry/Vector.hs 190;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f
@@ -5543,7 +5552,7 @@ wallBlips src/Dodge/RadarSweep.hs 99;" f
wallBuffer src/Dodge/WallCreatureCollisions.hs 54;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 54;" f
wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f
wallToSurface src/Dodge/Base/Collide.hs 180;" f wallToSurface src/Dodge/Base/Collide.hs 180;" f
wallsFromRooms src/Dodge/Layout.hs 137;" f wallsFromRooms src/Dodge/Layout.hs 141;" f
wallsToDraw src/Dodge/Render/Walls.hs 18;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f
warmupSound src/Dodge/HeldUse.hs 1393;" f warmupSound src/Dodge/HeldUse.hs 1393;" f
warningRooms src/Dodge/Room/Warning.hs 33;" f warningRooms src/Dodge/Room/Warning.hs 33;" f