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}
| PSPos
{ _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
, _psFallback :: Maybe Placement
}
@@ -138,7 +140,7 @@ data Room = Room
, _rmPos :: [RoomPos]
, _rmPath :: S.Set (Point2, Point2)
, _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
, _rmBound :: [[Point2]]
, _rmFloor :: Floor
@@ -162,3 +164,12 @@ makeLenses ''RoomType
makeLenses ''PSType
makeLenses ''PlacementSpot
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
, _rmHeight :: Float
}
| RoomNgon
{ _rmngonSides :: Int
, _rmngonSize :: Float
}
deriving (Eq, Ord)
data RoomLinkType
@@ -81,6 +85,7 @@ data RoomPosFlag
= RoomPosOnGrid {_onGridFromEdges :: S.Set PathFromEdge}
| RoomPosOffGrid {_offGridFromEdges :: S.Set PathFromEdge}
| RoomPosOnFloor
| ColoredLightRP
deriving (Eq, Ord, Show)
data UsedPos
+1 -1
View File
@@ -25,7 +25,7 @@ initialRoomTree =
foldMTRS $
intersperse
(zoom lyGen doorCor)
[ intAnno startRoom
[ startRoom
, passthroughLockKeyLists
[(sensorRoomRunPast ElectricSensor, takeOne
[-- CRAFT (ENERGYBALLCRAFT TeslaBall) ,
+65 -66
View File
@@ -1,25 +1,27 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Layout (
generateLevelFromRoomList,
tilesFromRooms,
shuffleRoomPos,
) where
import qualified Data.Vector.Unboxed as UV
--import Dodge.Path.Translate
-- import Dodge.Path.Translate
import qualified Control.Foldl as L
import Control.Lens
import Data.Foldable
import Data.Function
--import Data.Graph.Inductive (labEdges, labNodes)
import Data.List (nubBy,sortOn)
import Linear
-- import Data.Graph.Inductive (labEdges, labNodes)
import Data.List (nubBy, sortOn)
import Data.Maybe
import Data.Tile
--import Data.Traversable
import qualified Data.Vector.Unboxed as UV
-- import Data.Traversable
import Dodge.Data.GenWorld
import Dodge.Default.Wall
import Dodge.GameRoom
--import Dodge.Item.Location.Initialize
-- import Dodge.Item.Location.Initialize
import Dodge.LevelGen.LevelStructure
import Dodge.LevelGen.StaticWalls
import Dodge.Path
@@ -37,29 +39,27 @@ generateLevelFromRoomList gr' w =
over gwWorld initWallZoning
. over gwWorld randomCompass
. over gwWorld setupWorldBounds
-- . over (gwWorld . cWorld . lWorld) initItemLocations
. doInPlacements
-- . doOutPlacements
. doIndividualPlacements
. setTiles
. worldToGenWorld rs'
$ w & cWorld . lWorld . walls .~ wallsFromRooms rs
$ w
& cWorld . lWorld . walls .~ wallsFromRooms rs
& cWorld . cwGen . cwgGameRooms .~ gameRoomsFromRooms (IM.elems rs')
& cWorld . incNode .~ inodes
& cWorld . incGraph .~ igraph
& cWorld . incEdges .~ ipairs
& incNodeZoning .~ UV.ifoldl' (\m i p -> zonePn (i,p) m) mempty inodes
& incNodeZoning .~ UV.ifoldl' (\m i p -> zonePn (i, p) m) mempty inodes
& incEdgeZoning .~ foldl' (flip (zoneIncPe inodes)) mempty ipairs
where
pairs = snapToGrid $ foldMap _rmPath rs
(inodes,igraph,ipairs) = pairsToIncGraph pairs
(inodes, igraph, ipairs) = pairsToIncGraph pairs
rs = map doRoomShift $ IM.elems rs'
rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w
randomCompass :: World -> World
randomCompass w = w
& wCam . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w)
randomCompass 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
-- hence the reverse
@@ -70,60 +70,56 @@ setTiles gw = foldr setTile gw . reverse . IM.elems $ _genRooms gw
setTile :: Room -> GenWorld -> GenWorld
setTile r gw = case _rmFloor r of
Tiled{} -> gw
InheritFloor -> gw
& genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly]
InheritFloor ->
gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly]
where
t = case _rmMParent r of
Nothing -> Tile poly (V2 0 0) (V2 1 0) 16
Just pid -> head $ _tiles $ _rmFloor $ _genRooms gw IM.! pid
poly = orderPolygon . convexHullSafe
. nubBy ((==) `on` roundPoint2) $ concat $ _rmPolys r
poly =
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 rm = do
-- newPos <- shuffle $ _rmPos rm
-- return $ rm & rmPos .~ newPos
doInPlacements :: GenWorld -> GenWorld
doInPlacements w = foldl' (\gw (i,(_,f)) -> placeSpot i gw (f gw)) w
. sortOn (fst.snd)
$ foldMap g $ w ^. genRooms
doInPlacements w =
foldl' (\gw (i, (_, f)) -> rplaceSpot i gw (f gw)) w
. sortOn (fst . snd)
. foldMap g
$ w ^. genRooms
where
g rm = (rm^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
-- let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w)
-- in gw & genRooms .~ rms
--doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
--doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
-- where
-- f plf (w', r') = placeSpot (w', r') (plf w')
g rm = (rm ^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
rplaceSpot i gw rx = placeSpot i (gw & gwWorld . randGen .~ gen) x
where
(x,gen) = runState rx (gw ^. gwWorld . randGen)
doIndividualPlacements :: GenWorld -> GenWorld
doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw)
doRoomPlacements :: GenWorld -> Room -> GenWorld
doRoomPlacements w rm = foldl' (placeSpot i) (w & genRooms . ix i . rmPmnts .~ mempty)
. sortOn plPriority $ _rmPmnts rm
doRoomPlacements w rm =
foldl' (placeSpot i) (w & genRooms . ix i . rmPmnts .~ mempty)
. sortOn plPriority
$ _rmPmnts rm
where
i = rm ^?! rmMID . _Just
plPriority :: Placement -> Int
plPriority pl = case pl ^. plType of
PutChasm {} -> 0
PutBlock {} -> 1
PutDoor {} -> 2
PutChasm{} -> 0
PutBlock{} -> 1
PutDoor{} -> 2
_ -> 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 w =
w & cWorld . cwGen . cwgWorldBounds
w
& cWorld . cwGen . cwgWorldBounds
%~ ( (bdMinX .~ f minx)
. (bdMaxX .~ f maxx)
. (bdMinY .~ f miny)
@@ -162,12 +158,15 @@ gameRoomFromRoom rm =
GameRoom
{ _grViewpoints =
map doshift $
_rmViewpoints rm ++ (map fst . foldl' (flip cutWalls) [] $ _rmPolys rm)
_rmViewpoints rm
++ (map fst . foldl' (flip cutWalls) [] $ _rmPolys rm)
++ mapMaybe filterUnusedLinks (_rmPos rm)
, _grViewpointsEx = concatMap filterUsedLinks (_rmPos rm)
, _grBound =
map doshift $
expandPolyCorners 50 . convexHullSafe . nubBy closePoints
map doshift
$ expandPolyCorners 50
. convexHullSafe
. nubBy closePoints
. concat
$ _rmBound rm ++ _rmPolys rm
, _grRmBounds = map (map doshift) $ _rmBound rm
@@ -180,8 +179,8 @@ gameRoomFromRoom rm =
doubleShift p a =
map
doshift
[ p +.+ 10 *.* unitVectorAtAngle a
, p -.- 10 *.* unitVectorAtAngle a
[ p + 10 *^ unitVectorAtAngle a
, p - 10 *^ unitVectorAtAngle a
]
filterUnusedLinks rp = case _rpType rp of
UnusedLink{} -> Just $ _rpPos rp
@@ -210,36 +209,36 @@ getTiles fl = case fl of
Tiled xs -> xs
_ -> error "tiles not correctly set for some room"
--divideWall :: Wall -> [Wall]
--divideWall wl
-- divideWall :: Wall -> [Wall]
-- divideWall wl
-- = let (a,b) = _wlLine wl
-- ps = divideLine (zoneSize * 2) a b
-- in zipWith (\ x y -> wl & wlLine .~ (x,y) ) (init ps) (tail ps)
--divideWallIn :: Wall -> IM.IntMap Wall -> IM.IntMap Wall
--divideWallIn wl wls =
-- divideWallIn :: Wall -> IM.IntMap Wall -> IM.IntMap Wall
-- divideWallIn wl wls =
-- let (wl':newWls) = divideWall wl
-- k = IM.newKey wls
-- newWls' = zipWith (\i w -> w {_wlID = i}) [k..] newWls
-- in foldl' (flip $ \w -> IM.insert (_wlID w) w) wls (wl':newWls')
--
--divideWalls :: IM.IntMap Wall -> IM.IntMap Wall
--divideWalls wls = foldl' (flip divideWallIn) wls wls
-- divideWalls :: IM.IntMap Wall -> IM.IntMap Wall
-- divideWalls wls = foldl' (flip divideWallIn) wls wls
--insertInZone :: Int -> Int -> a -> IM.IntMap (IM.IntMap a) -> IM.IntMap (IM.IntMap a)
--insertInZone x y obj = IM.insertWith f x $ IM.singleton y obj
-- insertInZone :: Int -> Int -> a -> IM.IntMap (IM.IntMap a) -> IM.IntMap (IM.IntMap a)
-- insertInZone x y obj = IM.insertWith f x $ IM.singleton y obj
-- where f _ = IM.insert y obj
--shiftRoomTree :: Tree Room -> Tree Room
--shiftRoomTree (Node t []) = Node t []
--shiftRoomTree (Node t ts) = Node t
-- shiftRoomTree :: Tree Room -> Tree Room
-- shiftRoomTree (Node t []) = Node t []
-- shiftRoomTree (Node t ts) = Node t
-- $ zipWith (\l -> shiftRoomTree . applyToRoot (shiftRoomToLink l))
-- (_rmLinks t)
-- ts
--shiftRoomTreeConstruction :: Tree Room -> [Tree Room]
--shiftRoomTreeConstruction (Node t []) = [Node t []]
--shiftRoomTreeConstruction (Node t ts) = (Node t [] :) $ concat $
-- shiftRoomTreeConstruction :: Tree Room -> [Tree Room]
-- shiftRoomTreeConstruction (Node t []) = [Node t []]
-- shiftRoomTreeConstruction (Node t ts) = (Node t [] :) $ concat $
-- zipWith (\l -> shiftRoomTreeConstruction . applyToRoot (shiftRoomBy l . f))
-- (_rmLinks t)
-- ts
@@ -248,8 +247,8 @@ getTiles fl = case fl of
-- where
-- (p,a) = last $ _rmLinks r
--addTile :: Float -> Room -> Room
--addTile z r
-- addTile :: Float -> Room -> Room
-- addTile z r
-- | not (null (_rmFloor r)) || null rp = r
-- | otherwise = r & rmFloor .~ [makeTileFromPoly poly z]
-- where
+2 -3
View File
@@ -25,9 +25,8 @@ lockRoomMultiItems =
lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)]
lockRoomKeyItems =
[ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD])
-- [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD])
-- , (sensorRoomRunPast LaserSensor, return LASER)
-- [ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD])
[ (sensorRoomRunPast LaserSensor, return LASER)
-- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3))
-- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD])
-- , (const glassLessonRunPast, takeOne [LASER])
+3 -2
View File
@@ -181,7 +181,8 @@ spanColLightBlackI col h a b =
V2 x y = 0.5 *.* (a +.+ b)
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 l x y z =
@@ -191,7 +192,7 @@ spanLightY l x y z =
sps0 $ f z
where
f p = putShape $ thinHighBar h p (l + normalize (l-p))
h = 50
h = 95
--extendAway :: Point2 -> Point2 -> Point2
--extendAway p x = p +.+ squashNormalizeV (p -.- x)
+3 -3
View File
@@ -33,7 +33,7 @@ import NewInt
placeSpot :: Int -> GenWorld -> Placement -> GenWorld
placeSpot rid w plmnt = case plmnt ^. plSpot of
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
where
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)
-- this should be tidied up
placeSpotUsingLink ::
placeSpotUsingRoomPos ::
GenWorld ->
Int ->
Placement ->
@@ -70,7 +70,7 @@ placeSpotUsingLink ::
(RoomPos -> Room -> Room) ->
Maybe Placement ->
GenWorld
placeSpotUsingLink w rid plmnt extract eff fallback =
placeSpotUsingRoomPos w rid plmnt extract eff fallback =
case searchedPoss (w ^?! genRooms . ix rid . rmPos) of
Just (ps, rmposs) ->
placeSpot
+1 -1
View File
@@ -52,7 +52,7 @@ decontamRoom i =
]
-- & rmOutPmnt . at i ?~
-- analyser (NoItemZone ps) (PS 50 0) (PS mcpos 0)
& rmInPmnt .~ [(0, f)]
& rmInPmnt .~ [(0, return . f)]
& rmBound .~ [rectNSWE 75 15 0 40, switchcut]
where
f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do
+12 -12
View File
@@ -1,6 +1,7 @@
--{-# LANGUAGE TupleSections #-}
-- {-# LANGUAGE TupleSections #-}
module Dodge.Room.Containing where
import Control.Monad
import Dodge.Cleat
import Dodge.Data.GenWorld
import Dodge.Item.Display
@@ -15,28 +16,27 @@ import Dodge.Tree
import Geometry
import LensHelp
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
where
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
endroom <-
join $
takeOne
[-- roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its
--, randomFourCornerRoomCrsIts crs its
--, tanksRoom crs its
-- tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its
roomPillarsContaining crs its
-- , roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its
[ roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its
, randomFourCornerRoomCrsIts crs its
, tanksRoom crs its
, tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its
, roomPillarsContaining crs its
, roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its
]
return (pure $ cleatOnward endroom)
roomPillarsContaining :: RandomGen g => [Creature] -> [Item] -> State g Room
roomPillarsContaining :: (RandomGen g) => [Creature] -> [Item] -> State g Room
roomPillarsContaining crs itms = do
(w, wn) <- 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 (\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
let flit = PutFlIt it
x <- state $ randomR (150, 250)
+1 -1
View File
@@ -40,7 +40,7 @@ triggerDoorRoom i =
-- note no bounds
}
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
return $ putDoubleDoor defaultDoorWall (cond pmnt) (V2 0 20) (V2 40 20) 2
cond pmnt = WdTrig $ fromJust (_plMID pmnt)
+5 -14
View File
@@ -17,6 +17,7 @@ module Dodge.Room.LasTurret (
storeRoomID,
) where
import Dodge.Room.Modify
import Color
import Control.Monad
import Data.Foldable
@@ -148,9 +149,9 @@ lasSensorTurretTest = do
let cenroom =
cenroom''
& rmInPmnt
<>~ [ (0, alight pi . f i)
, (0, alight (0.5 * pi) . f i)
, (0, alight (1.5 * pi) . f i)
<>~ [ (0, return . alight pi . f i)
, (0, return . alight (0.5 * pi) . f i)
, (0, return . alight (1.5 * pi) . f i)
]
rToOnward "lasSensorTurretTest" $
treePost
@@ -166,7 +167,7 @@ lasCenSensEdge n = do
(i, cenroom') <- storeRoomID =<< shuffleLinks =<< lightSensByDoor n =<< cenLasTur
lshape <- takeOne [vShape, lShape, jShape, liShape]
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 doorroom = triggerDoorRoom n
rToOnward "lasCenSensEdge" $
@@ -181,16 +182,6 @@ lasCenSensEdge n = do
isused UsedOutLink{_rplsChildNum = 0} = True
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 = do
+75 -3
View File
@@ -1,4 +1,76 @@
module Dodge.Room.Modify
( module Dodge.Room.Modify.Girder
) where
module Dodge.Room.Modify (
module Dodge.Room.Modify.Girder,
storeRoomID,
getRoomFromID,
addLightsNGon,
removeLights,
) 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 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]
, _rmBound = [poly]
, _rmFloor = Tiled [makeTileFromPoly poly 2]
, _rmType = RoomNgon n x
--, _rmFloor = InheritFloor
, _rmName = show n ++ "gon"
, _rmPos = poss
+4 -4
View File
@@ -154,7 +154,7 @@ roomCenterPillar = do
roomRect 240 240 2 2
)
weaponEmptyRoom :: State StdGen (Tree Room)
weaponEmptyRoom :: RandomGen g => State g (Tree Room)
weaponEmptyRoom = do
w <- 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
]
weaponBetweenPillars :: State StdGen (MetaTree Room String)
weaponBetweenPillars :: State LayoutVars (MetaTree Room String)
weaponBetweenPillars = do
(w, wn) <- takeOne [(240, 2), (340, 3)]
(h, hn) <- takeOne [(240, 2), (340, 3)]
@@ -271,7 +271,7 @@ deadEndRoom =
lnks = [(V2 0 30, 0)]
{- A random Either tree with a weapon and melee monster challenge. -}
weaponRoom :: State StdGen (MetaTree Room String)
weaponRoom :: State LayoutVars (MetaTree Room String)
weaponRoom =
join $
takeOne
@@ -458,7 +458,7 @@ distributerRoom atype aamount = do
)
)
return $ r & rmPmnts .:~ store
& rmInPmnt <>~ [(0,dst),(1,thepipe)]
& rmInPmnt <>~ [(0,return . dst),(1,return . thepipe)]
& rmLinks %~ setInLinksByType (OnEdge South)
& rmLinks %~ setOutLinks (not . S.member (OnEdge South) . _rlType)
+29 -14
View File
@@ -1,33 +1,37 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Room.SensorDoor (sensAboveDoor,sensorRoomRunPast) where
import Dodge.Data.MTRS
module Dodge.Room.SensorDoor (sensAboveDoor, sensorRoomRunPast) where
import Dodge.Room.Procedural
import Control.Monad
import qualified Data.Set as S
import Dodge.Cleat
import Dodge.Data.GenWorld
import Dodge.Data.MTRS
import Dodge.LevelGen.PlacementHelper
import Dodge.Placement.Instance
import Dodge.PlacementSpot
import Dodge.Room.Corridor
import Dodge.Room.Door
import Dodge.Room.Link
import Dodge.Room.Modify
import Dodge.Room.Ngon
import Dodge.Room.Procedural
import Dodge.Terminal
import Dodge.Tree
import Dodge.Wire
import Geometry
import LensHelp
import RandomHelp
import Control.Monad
-- TODO fix case where the sensor created by sensInsideDoor blocks another 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
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
return $ treePost
return $
treePost
[ door
, cenroom & rmLinkEff .~ f
, triggerDoorRoom n
@@ -43,29 +47,40 @@ sensorRoom senseType n = do
p' = p +.+ rotateV d (V2 0 (negate 100))
isclose = dist (_rlPos rl) p' < 30
sensorRoomRunPast :: RandomGen g => SensorType -> Int -> State g MTRS
sensorRoomRunPast :: SensorType -> Int -> State LayoutVars MTRS
sensorRoomRunPast dt n = do
t <- sensorRoom dt n
rToOnward "sensorRoomRunPast" $ t
& applyToSubforest [0]
( ++ [ treePost [ door & rmConnectsTo .~ (\s -> S.member InLink s && not (S.member BlockedLink s)) , cleatLabel n corridor ] ])
rToOnward "sensorRoomRunPast" $
t
& applyToSubforest
[0]
(++ [treePost [door & rmConnectsTo .~ (\s -> S.member InLink s && not (S.member BlockedLink s)), cleatLabel n corridor]])
sensAboveDoor :: SensorType -> Float -> PlacementSpot -> Placement
sensAboveDoor sensetype wth ps =
extTrigLitPos
( psposAddLabel
ColoredLightRP
(atFstLnkOutShiftBy (\(p, a) -> ((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosHigh)))
)
(\tp -> Just $ damageSensor sensetype wth (_plMID tp) ps)
sensInsideDoor :: SensorType -> Int -> Room -> Room
sensInsideDoor senseType i rm = rm
& rmName .++~ take 4 (show senseType)
sensInsideDoor senseType i rm =
rm
& rmName
.++~ take 4 (show senseType)
& rmPmnts
.++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ verticalWire (V2 20 0) 0 80
, putMessageTerminal
(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
]
-- & 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
startRoom :: Int -> State StdGen (MetaTree Room String)
startRoom i =
startRoom :: State LayoutVars (MetaTree Room String)
startRoom = do
i <- nextLayoutInt
join $
takeOne
[ attachOnward "startThenWeaponRoom" <$> preCritStart <*> weaponRoom
+3 -9
View File
@@ -2,6 +2,7 @@
module Dodge.Room.Tutorial where
import Dodge.Room.Modify
import Control.Monad
import qualified Data.IntMap.Strict as IM
import qualified Data.IntSet as IS
@@ -119,7 +120,7 @@ tutDrop = do
return $
tToBTree "TutDrop" $
treePost
[x & rmInPmnt .:~ (0, t j), y, cleatOnward rm]
[x & rmInPmnt .:~ (0, return . t j), y, cleatOnward rm]
where
t j gw =
let x = gw ^? genInts . ix j
@@ -391,13 +392,6 @@ tutLight = do
)
_ -> 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 = do
(is, wbp) <- setTreeInts =<< critsRoom 1
@@ -413,7 +407,7 @@ tutHub = do
x <-
shuffleLinks
. analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i
. (rmInPmnt .:~ (0, a))
. (rmInPmnt .:~ (0, return . a))
. addDoorAtNthLinkToggleTerminal 1 ss j
-- . addDoorAtNthLinkToggleInterrupt 2 ds j
. addDoorAtNthLinkToggleInterrupt 2 ds j1
+4 -3
View File
@@ -30,11 +30,12 @@ import qualified Data.Map.Strict as M
import NewInt
import Data.Foldable
import Data.Monoid
import RandomHelp
testStringInit :: Universe -> [String]
testStringInit u =
(fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcType . _McDamSensor . sensAmount)
<> (fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcMaterial)
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 . mcMaterial)
--testStringInit u = map show (u ^.. uvWorld . cWorld . lWorld . machines . traverse . mcDir)
--testStringInit u = map show
-- (u ^.. uvWorld . cWorld . lWorld . machines . traverse .mcType . _McDistributer)
+55 -37
View File
@@ -2,13 +2,13 @@
{- Helpers for random generation. -}
module RandomHelp (
module System.Random,
-- module Control.Monad.State,
-- module Control.Monad.State,
module RandomHelp,
module Control.Monad.Trans.State.Lazy,
) where
import Control.Monad
--import Control.Monad.State
-- import Control.Monad.State
import Control.Monad.Trans.State.Lazy
import Data.List
import Geometry
@@ -21,8 +21,25 @@ randomRanges = join . takeOne . f
f (x : y : ys) = state (randomR (x, y)) : f ys
f _ = []
takeOne :: RandomGen g => [a] -> State g a
takeOne xs = state (randomR (0, length xs - 1)) >>= (\i -> return (xs !! i))
takeOne :: (RandomGen g) => [a] -> State g a
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 ws xs = state (randomR (0, sum ws)) >>= (\w -> return (xs !! i w ws))
@@ -32,25 +49,25 @@ takeOneWeighted ws xs = state (randomR (0, sum ws)) >>= (\w -> return (xs !! i w
| otherwise = 1 + i (y - z) zs
i _ _ = 0
--{-# OPTIONS -Wno-incomplete-uni-patterns #-}
takeOneMore :: RandomGen g => ([a], [a]) -> State g ([a], [a])
-- {-# OPTIONS -Wno-incomplete-uni-patterns #-}
takeOneMore :: (RandomGen g) => ([a], [a]) -> State g ([a], [a])
takeOneMore (_, []) = error "trying to takeOneMore from empty list"
takeOneMore (xs, ys) = do
i <- state $ randomR (0, length ys - 1)
let (zs, w : ws) = splitAt i ys
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]
takeN :: RandomGen g => Int -> [a] -> State g [a]
takeN :: (RandomGen g) => Int -> [a] -> State g [a]
takeN 0 _ = return []
takeN i xs = fst <$> takeNMore i ([], xs)
-- | Randomly shuffle a list.
shuffle :: RandomGen g => [a] -> State g [a]
shuffle :: (RandomGen g) => [a] -> State g [a]
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 (as, b : bs) = splitAt rand ys
in (as ++ bs, b)
@@ -58,94 +75,95 @@ shuffle xs = do
return $ forceElements zs `seq` zs
-- | 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 _ = undefined
-- select elements from a list randomly
-- 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
randProb :: RandomGen g => Float -> State g Bool
randProb :: (RandomGen g) => Float -> State g Bool
randProb p = do
p1 <- state $ randomR (0, 1)
return (p1 < p)
randInCirc :: RandomGen g => Float -> State g Point2
randInCirc :: (RandomGen g) => Float -> State g Point2
randInCirc = flip randInArc (2 * pi)
randOnCirc :: RandomGen g => Float -> State g Point2
randOnCirc :: (RandomGen g) => Float -> State g Point2
randOnCirc r = do
a <- state $ randomR (0, 2*pi)
a <- state $ randomR (0, 2 * pi)
return $ r *.* unitVectorAtAngle a
randInArc :: RandomGen g => Float -> Float -> State g Point2
randInArc :: (RandomGen g) => Float -> Float -> State g Point2
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
rad <- state $ randomR (minrad, maxRad)
ang <- state $ randomR (0, maxangle)
return $ rad *.* unitVectorAtAngle ang
randOnUnitSphere :: RandomGen g => State g Point3
randOnUnitSphere :: (RandomGen g) => State g Point3
randOnUnitSphere = do
z <- state $ randomR (negate 1, 1)
longitude <- state $ randomR (0, 2 * pi)
let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude
return (V3 x y z)
randOnHemisphere :: RandomGen g => State g Point3
randOnHemisphere :: (RandomGen g) => State g Point3
randOnHemisphere = do
z <- state $ randomR (0, 1)
longitude <- state $ randomR (0, 2 * pi)
let (V2 x y) = sqrt (1 - z ^ (2 :: Int)) *.* unitVectorAtAngle longitude
return (V3 x y z)
randInHemisphere :: RandomGen g => State g Point3
randInHemisphere :: (RandomGen g) => State g Point3
randInHemisphere = do
p <- randOnHemisphere
r <- state $ randomR (0, 1)
return $ r *.*.* p
randInRect :: RandomGen g => Float -> Float -> State g Point2
randInRect :: (RandomGen g) => Float -> Float -> State g Point2
randInRect w h = do
x <- state $ randomR (0, w)
y <- state $ randomR (0, h)
return (V2 x y)
maybeTakeOne :: RandomGen g => [a] -> State g (Maybe a)
maybeTakeOne :: (RandomGen g) => [a] -> State g (Maybe a)
maybeTakeOne [] = return Nothing
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
| i <= 0 = error "tried to take <= 0 randsSpread"
| otherwise = zipWith (+) [a + x, a + 2 * x ..] <$> replicateM i (state $ randomR (0, x))
where
x = (b - a) / fromIntegral i
randsOnCirc :: RandomGen g => Int -> State g [Float]
randsOnCirc :: (RandomGen g) => Int -> State g [Float]
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
x <- state $ randomR (-1, 1)
let y = x ^ i
return $ if y < 0
then a + y * (a-b)
else b + y * (c-b)
return $
if y < 0
then a + y * (a - 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
randFromPair :: RandomGen g => Float -> (a,a) -> State g a
randFromPair x (l,r) = do
y <- state $ randomR (0,1)
randFromPair :: (RandomGen g) => Float -> (a, a) -> State g a
randFromPair x (l, r) = do
y <- state $ randomR (0, 1)
if x < y then return l else return r
shufflePair :: RandomGen g => (a,a) -> State g (a,a)
shufflePair (x,y) = do
v <- state $ randomR (0::Float,1)
if v > 0.5 then return (x,y) else return (y,x)
shufflePair :: (RandomGen g) => (a, a) -> State g (a, a)
shufflePair (x, y) = do
v <- state $ randomR (0 :: Float, 1)
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
BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C
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
Blunt src/Dodge/Data/Damage.hs 17;" 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
Color8 src/Color/Data.hs 32;" t
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
CombAmount src/Dodge/Data/CombAmount.hs 10;" 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
ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" 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
FullShadowFidelity src/Shape/Data.hs 19;" 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
InDream src/Dodge/Data/Scenario.hs 19;" 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
InRealWorld src/Dodge/Data/Scenario.hs 18;" 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
LSParam src/Dodge/Data/LightSource.hs 14;" 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
LabelCluster src/Dodge/Data/RoomCluster.hs 13;" 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
NorthWest src/Dodge/Data/CardinalPoint.hs 24;" 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
Nothing' src/MaybeHelp.hs 11;" 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
OnBack src/Dodge/Data/Equipment/Misc.hs 22;" 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
OnHead src/Dodge/Data/Equipment/Misc.hs 20;" 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
OptionScreen src/Dodge/Data/Universe.hs 82;" C
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
OutwardShockwave src/Dodge/Data/Shockwave.hs 12;" 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
PSNoShiftCont src/Dodge/Data/GenWorld.hs 100;" 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
PUMP src/Dodge/Data/Item/Combine.hs 62;" C
PaletteColor src/Color/Data.hs 11;" t
PathBetweenDebugV2s src/Dodge/Data/Universe.hs 54;" 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
PathTo src/Dodge/Data/ActionPlan.hs 70;" 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
Piezoelectric src/Dodge/Data/Material.hs 23;" 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
PlainBarrel src/Dodge/Data/Creature/Misc.hs 86;" 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
PoisonDeath src/Dodge/Data/Creature.hs 68;" 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
Polyhedra src/Polyhedra/Data.hs 13;" t
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
RLAUNCHERX src/Dodge/Data/Item/Combine.hs 170;" 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
RadarBlip src/Dodge/Data/RadarBlip.hs 12;" 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
RocketSmoke src/Dodge/Data/Projectile.hs 52;" t
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
RoomInt src/Dodge/Tree/Shift.hs 27;" 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
RoomPosFlag src/Dodge/Data/Room.hs 80;" t
RoomPosOffGrid src/Dodge/Data/Room.hs 82;" C
RoomPosOnGrid src/Dodge/Data/Room.hs 81;" C
RoomPosFlag src/Dodge/Data/Room.hs 84;" t
RoomPosOffGrid src/Dodge/Data/Room.hs 86;" 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
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
RunningSideEffect src/Dodge/Data/Universe.hs 67;" 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
UnloadedWeaponSF src/Dodge/Data/ComposedItem.hs 13;" 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
UseBulletMod src/Dodge/Data/Item/Use.hs 35;" C
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
UseableWhenAimed src/Dodge/Data/UseCondition.hs 5;" C
UseableWhenHeld src/Dodge/Data/UseCondition.hs 6;" C
UsedInLink src/Dodge/Data/Room.hs 64;" C
UsedOutLink src/Dodge/Data/Room.hs 59;" C
UsedPos src/Dodge/Data/Room.hs 85;" t
UsedPosFloor src/Dodge/Data/Room.hs 89;" C
UsedPosHigh src/Dodge/Data/Room.hs 88;" C
UsedPosLow src/Dodge/Data/Room.hs 86;" C
UsedPosMid src/Dodge/Data/Room.hs 87;" C
UsedInLink src/Dodge/Data/Room.hs 68;" C
UsedOutLink src/Dodge/Data/Room.hs 63;" C
UsedPos src/Dodge/Data/Room.hs 91;" t
UsedPosFloor src/Dodge/Data/Room.hs 95;" C
UsedPosHigh src/Dodge/Data/Room.hs 94;" C
UsedPosLow src/Dodge/Data/Room.hs 92;" C
UsedPosMid src/Dodge/Data/Room.hs 93;" C
VAO src/Shader/Data.hs 64;" t
VBO src/Shader/Data.hs 79;" 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
WallSound src/Dodge/Data/SoundOrigin.hs 25;" C
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
War src/Dodge/Data/Scenario.hs 28;" 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
_nzPressure src/Dodge/Data/Muzzle.hs 49;" 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
_onGridFromEdges src/Dodge/Data/Room.hs 81;" f
_onGridFromEdges src/Dodge/Data/Room.hs 85;" f
_opDraw src/Dodge/Data/Wall.hs 33;" f
_opSel src/Dodge/Data/RightButtonOptions.hs 15;" 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
_pjType src/Dodge/Data/Projectile.hs 24;" f
_pjVel src/Dodge/Data/Projectile.hs 17;" f
_plExternalID src/Dodge/Data/GenWorld.hs 116;" f
_plIDCont src/Dodge/Data/GenWorld.hs 117;" f
_plMID src/Dodge/Data/GenWorld.hs 115;" f
_plSpot src/Dodge/Data/GenWorld.hs 113;" f
_plType src/Dodge/Data/GenWorld.hs 114;" f
_plExternalID src/Dodge/Data/GenWorld.hs 118;" f
_plIDCont src/Dodge/Data/GenWorld.hs 119;" f
_plMID src/Dodge/Data/GenWorld.hs 117;" f
_plSpot src/Dodge/Data/GenWorld.hs 115;" f
_plType src/Dodge/Data/GenWorld.hs 116;" f
_plasmaBalls src/Dodge/Data/LWorld.hs 106;" f
_playStatus src/Sound/Data.hs 15;" 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
_proxSensorType src/Dodge/Data/Machine/Sensor.hs 25;" 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
_psRandShift src/Dodge/Data/GenWorld.hs 108;" f
_psRoomEff src/Dodge/Data/GenWorld.hs 103;" f
_psRoomRandPointNum src/Dodge/Data/GenWorld.hs 107;" f
_psRandShift src/Dodge/Data/GenWorld.hs 110;" f
_psRoomEff src/Dodge/Data/GenWorld.hs 105;" f
_psRoomRandPointNum src/Dodge/Data/GenWorld.hs 109;" f
_psRot src/Dodge/Data/GenWorld.hs 99;" f
_psSelect src/Dodge/Data/GenWorld.hs 102;" 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
_rlPos src/Dodge/Data/Room.hs 26;" f
_rlType src/Dodge/Data/Room.hs 25;" f
_rmBound src/Dodge/Data/GenWorld.hs 143;" f
_rmChildren src/Dodge/Data/GenWorld.hs 154;" f
_rmClusterStatus src/Dodge/Data/GenWorld.hs 156;" f
_rmConnectsTo src/Dodge/Data/GenWorld.hs 151;" f
_rmEndWires src/Dodge/Data/GenWorld.hs 150;" f
_rmFloor src/Dodge/Data/GenWorld.hs 144;" f
_rmBound src/Dodge/Data/GenWorld.hs 145;" f
_rmChildren src/Dodge/Data/GenWorld.hs 156;" f
_rmClusterStatus src/Dodge/Data/GenWorld.hs 158;" f
_rmConnectsTo src/Dodge/Data/GenWorld.hs 153;" f
_rmEndWires src/Dodge/Data/GenWorld.hs 152;" f
_rmFloor src/Dodge/Data/GenWorld.hs 146;" f
_rmHeight src/Dodge/Data/Room.hs 39;" f
_rmInPmnt src/Dodge/Data/GenWorld.hs 141;" f
_rmLinkEff src/Dodge/Data/GenWorld.hs 131;" f
_rmLinks src/Dodge/Data/GenWorld.hs 129;" f
_rmMID src/Dodge/Data/GenWorld.hs 152;" f
_rmMParent src/Dodge/Data/GenWorld.hs 153;" f
_rmName src/Dodge/Data/GenWorld.hs 145;" f
_rmPath src/Dodge/Data/GenWorld.hs 139;" f
_rmPmnts src/Dodge/Data/GenWorld.hs 140;" f
_rmPolys src/Dodge/Data/GenWorld.hs 128;" f
_rmPos src/Dodge/Data/GenWorld.hs 138;" f
_rmRandPSs src/Dodge/Data/GenWorld.hs 148;" f
_rmShift src/Dodge/Data/GenWorld.hs 146;" f
_rmStartWires src/Dodge/Data/GenWorld.hs 149;" f
_rmType src/Dodge/Data/GenWorld.hs 155;" f
_rmViewpoints src/Dodge/Data/GenWorld.hs 147;" f
_rmInPmnt src/Dodge/Data/GenWorld.hs 143;" f
_rmLinkEff src/Dodge/Data/GenWorld.hs 133;" f
_rmLinks src/Dodge/Data/GenWorld.hs 131;" f
_rmMID src/Dodge/Data/GenWorld.hs 154;" f
_rmMParent src/Dodge/Data/GenWorld.hs 155;" f
_rmName src/Dodge/Data/GenWorld.hs 147;" f
_rmPath src/Dodge/Data/GenWorld.hs 141;" f
_rmPmnts src/Dodge/Data/GenWorld.hs 142;" f
_rmPolys src/Dodge/Data/GenWorld.hs 130;" f
_rmPos src/Dodge/Data/GenWorld.hs 140;" f
_rmRandPSs src/Dodge/Data/GenWorld.hs 150;" f
_rmShift src/Dodge/Data/GenWorld.hs 148;" f
_rmStartWires src/Dodge/Data/GenWorld.hs 151;" f
_rmType src/Dodge/Data/GenWorld.hs 157;" f
_rmViewpoints src/Dodge/Data/GenWorld.hs 149;" 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
_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
_rpPos src/Dodge/Data/Room.hs 16;" f
_rpType src/Dodge/Data/Room.hs 19;" f
_rplsChildNum src/Dodge/Data/Room.hs 61;" f
_rplsInRoomID src/Dodge/Data/Room.hs 66;" f
_rplsOutRoomID src/Dodge/Data/Room.hs 62;" f
_rplsType src/Dodge/Data/Room.hs 60;" f
_rplsType src/Dodge/Data/Room.hs 65;" f
_rplsType src/Dodge/Data/Room.hs 68;" f
_rplsChildNum src/Dodge/Data/Room.hs 65;" f
_rplsInRoomID src/Dodge/Data/Room.hs 70;" f
_rplsOutRoomID src/Dodge/Data/Room.hs 66;" f
_rplsType src/Dodge/Data/Room.hs 64;" f
_rplsType src/Dodge/Data/Room.hs 69;" f
_rplsType src/Dodge/Data/Room.hs 72;" f
_rsAR src/Dodge/Data/RadarSweep.hs 23;" f
_rsMapper src/Dodge/Data/RadarSweep.hs 22;" 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 142;" f
addIndefiniteArticle src/StringHelp.hs 17;" f
addLightsNGon src/Dodge/Room/Modify.hs 41;" f
addNodesCrossing src/Dodge/Room/Path.hs 28;" f
addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" 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
anRoom src/Dodge/Floor.hs 116;" f
analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 124;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 108;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 127;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 111;" f
andOrRegex src/Dodge/DisplayInventory.hs 78;" f
angleBetween src/Geometry.hs 158;" 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
cdtPropagateFold src/Dodge/DoubleTree.hs 189;" 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
centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" 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
corpseOrGib src/Dodge/Creature/Update.hs 98;" 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
corridorWallN src/Dodge/Room/Corridor.hs 77;" 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
doGravityPU src/Dodge/Projectile/Update.hs 35;" 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
doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" 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
gadgetEffect src/Dodge/HeldUse.hs 49;" 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
gameRoomsFromRooms src/Dodge/Layout.hs 149;" f
gameRoomsFromRooms src/Dodge/Layout.hs 153;" f
gameplayMenu src/Dodge/Menu.hs 152;" f
gameplayMenuOptions src/Dodge/Menu.hs 155;" 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
generateGraphs src/Dodge/Menu.hs 147;" 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
geom src/Shader/Data.hs 110;" 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
getCommands src/Dodge/Terminal.hs 58;" f
getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f
getCrsFromRooms src/Dodge/Room/Tutorial.hs 496;" f
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 483;" f
getCrsFromRooms src/Dodge/Room/Tutorial.hs 489;" f
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 476;" f
getDebugMouseOver src/Dodge/Update.hs 424;" f
getDistortions src/Dodge/Render.hs 443;" 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
getPretty src/AesonHelp.hs 8;" f
getPromptTM src/Dodge/Terminal/Type.hs 3;" f
getRoomFromID src/Dodge/Room/LasTurret.hs 195;" f
getRoomsFromInts src/Dodge/Room/Tutorial.hs 479;" f
getRoomFromID src/Dodge/Room/Modify.hs 31;" f
getRoomsFromInts src/Dodge/Room/Tutorial.hs 472;" f
getRootItemBounds src/Dodge/Render/HUD.hs 106;" f
getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f
getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f
getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" 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
getVolleyBurst src/Dodge/HeldUse.hs 129;" 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
headPQ src/Dodge/Creature/HandPos.hs 116;" f
healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f
healthTest src/Dodge/Room/LasTurret.hs 127;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 108;" f
healthTest src/Dodge/Room/LasTurret.hs 130;" f
heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f
heldAimStance src/Dodge/Item/AimStance.hs 24;" 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
itemInvLock src/Dodge/HeldUse.hs 454;" 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
itemSPic src/Dodge/Item/Draw/SPic.hs 17;" 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
keyCard src/Dodge/Item/Held/Utility.hs 20;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 102;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 90;" f
keyCardRunPastRand src/Dodge/LockAndKey.hs 38;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 93;" f
keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f
keyPic src/Dodge/Item/Draw/SPic.hs 438;" f
keyholeCorridor src/Dodge/Room/Corridor.hs 45;" 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
lamp src/Dodge/Creature/Lamp.hs 18;" f
lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f
lasCenRunClose' src/Dodge/Room/LasTurret.hs 321;" f
lasCenRunClose1 src/Dodge/Room/LasTurret.hs 410;" f
lasCenRunClose2 src/Dodge/Room/LasTurret.hs 483;" f
lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 375;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 162;" f
lasCenRunClose' src/Dodge/Room/LasTurret.hs 309;" f
lasCenRunClose1 src/Dodge/Room/LasTurret.hs 398;" f
lasCenRunClose2 src/Dodge/Room/LasTurret.hs 471;" f
lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 363;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 165;" f
lasGunPic src/Dodge/Item/Draw/SPic.hs 413;" f
lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f
lasRunRand src/Dodge/Room/LasTurret.hs 480;" f
lasRunYinYang src/Dodge/Room/LasTurret.hs 198;" f
lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 261;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 139;" f
lasTunnel src/Dodge/Room/LasTurret.hs 521;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 562;" f
lasRunRand src/Dodge/Room/LasTurret.hs 468;" f
lasRunYinYang src/Dodge/Room/LasTurret.hs 186;" f
lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 249;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 142;" f
lasTunnel src/Dodge/Room/LasTurret.hs 509;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 550;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 27;" 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
liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f
light src/Color.hs 131;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 75;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 63;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f
lightsToRender src/Dodge/Render/Lights.hs 14;" 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
maybeOpenConsole src/Dodge/Update.hs 133;" 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
mcBackgroundSound src/Dodge/Machine/Update.hs 153;" 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
normalizeV src/Geometry/Vector.hs 44;" 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
numDrawableVertices src/Shader/Parameters.hs 34;" 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
parseItem src/Dodge/Debug/Terminal.hs 62;" 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
pathEdgeObstructed src/Dodge/Path.hs 66;" 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
plNewUpID src/Dodge/Base/NewID.hs 13;" f
plNewUsing src/Dodge/Base/NewID.hs 27;" f
plPriority src/Dodge/Layout.hs 112;" f
plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f
placeChasm src/Dodge/Placement/PlaceSpot.hs 153;" 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
placeSpotID src/Dodge/Placement/PlaceSpot.hs 102;" 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
plainRegex src/Dodge/DisplayInventory.hs 193;" 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 12;" 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
preloadRender src/Preload/Render.hs 29;" 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
putDoubleDoorThen src/Dodge/Placement/Instance/Door.hs 21;" 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
putLitButOnPos src/Dodge/Placement/Instance/Button.hs 65;" 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
randEdgeTanks src/Dodge/Room/Tanks.hs 52;" f
randFirstWeapon src/Dodge/Placement/Random.hs 8;" f
randFromPair src/RandomHelp.hs 143;" f
randInArc src/RandomHelp.hs 83;" f
randInArcStrip src/RandomHelp.hs 86;" f
randInCirc src/RandomHelp.hs 75;" f
randInHemisphere src/RandomHelp.hs 106;" f
randInRect src/RandomHelp.hs 112;" f
randOnCirc src/RandomHelp.hs 78;" f
randOnHemisphere src/RandomHelp.hs 99;" f
randOnUnitSphere src/RandomHelp.hs 92;" f
randPeaked src/RandomHelp.hs 140;" f
randPeakedParam src/RandomHelp.hs 132;" f
randProb src/RandomHelp.hs 70;" f
randFromPair src/RandomHelp.hs 161;" f
randInArc src/RandomHelp.hs 100;" f
randInArcStrip src/RandomHelp.hs 103;" f
randInCirc src/RandomHelp.hs 92;" f
randInHemisphere src/RandomHelp.hs 123;" f
randInRect src/RandomHelp.hs 129;" f
randOnCirc src/RandomHelp.hs 95;" f
randOnHemisphere src/RandomHelp.hs 116;" f
randOnUnitSphere src/RandomHelp.hs 109;" f
randPeaked src/RandomHelp.hs 158;" f
randPeakedParam src/RandomHelp.hs 149;" f
randProb src/RandomHelp.hs 87;" f
randSpark src/Dodge/Spark.hs 70;" f
randSparkExtraVel src/Dodge/Spark.hs 93;" 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
randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" 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
randomPoints bench/Bench.hs 37;" 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
randomTreeStructure src/Dodge/Layout/Generate.hs 19;" f
randsOnCirc src/RandomHelp.hs 129;" f
randsSpread src/RandomHelp.hs 122;" f
randsOnCirc src/RandomHelp.hs 146;" f
randsSpread src/RandomHelp.hs 139;" f
ratIntersectLineLine src/Geometry/Intersect.hs 214;" f
rdToVec2s src/Dodge/Render.hs 426;" 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
removeDot src/ShortShow.hs 44;" 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
removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" 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
rezBox src/Dodge/Room/RezBox.hs 31;" 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
rezBoxesWpCrit src/Dodge/Room/RezBox.hs 90;" 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
rprShift src/Dodge/PlacementSpot.hs 100;" 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
sPS src/Dodge/LevelGen/PlacementHelper.hs 27;" 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
selectedItemScroll src/Dodge/Update/Scroll.hs 47;" f
semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 64;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 73;" f
senseDamage src/Dodge/Machine/Update.hs 264;" f
senseDamage' src/Dodge/Wall/Damage.hs 61;" f
sensorReqToString src/Dodge/Machine/Update.hs 242;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 31;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 55;" 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/Wall/Damage.hs 92;" 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
setupShadowFramebuffer src/Framebuffer/Setup.hs 24;" 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
shaderTypeExt src/Shader/Compile.hs 59;" 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
showIntsString src/Dodge/Tree/Compose.hs 130;" 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
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
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
shufflePair src/RandomHelp.hs 148;" f
shuffleRoomPos src/Dodge/Layout.hs 82;" f
shuffleTail src/RandomHelp.hs 61;" f
shufflePair src/RandomHelp.hs 166;" f
shuffleRoomPos src/Dodge/Layout.hs 86;" f
shuffleTail src/RandomHelp.hs 78;" f
sigmoid src/Dodge/Base.hs 151;" f
simpleCrSprings src/Dodge/Update.hs 931;" 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
sndV2 src/Geometry/Data.hs 73;" 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
soundContinue src/Dodge/SoundLogic.hs 131;" 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
spanLS src/Dodge/Placement/Instance/LightSource.hs 161;" 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
sparkRandDir src/Dodge/Spark.hs 117;" 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
stackedInventory src/Dodge/Creature.hs 324;" 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
startInvList src/Dodge/Creature.hs 105;" 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
stopSoundFrom src/Dodge/SoundLogic.hs 220;" 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
strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" 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
tToBTree src/Dodge/Tree/Compose.hs 93;" f
tWest src/Dodge/Room/Corridor.hs 121;" f
takeN src/RandomHelp.hs 46;" f
takeNMore src/RandomHelp.hs 43;" f
takeN src/RandomHelp.hs 63;" f
takeNMore src/RandomHelp.hs 60;" f
takeOne src/RandomHelp.hs 24;" f
takeOneMore src/RandomHelp.hs 36;" f
takeOneWeighted src/RandomHelp.hs 27;" f
takeOneFiltered src/RandomHelp.hs 34;" 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
takeWhileArb src/ListHelp.hs 100;" 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
testPic src/Dodge/Render/ShapePicture.hs 57;" 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
textGrad src/Picture/Text.hs 5;" 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
throwItem src/Dodge/Creature/Action.hs 191;" 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
timeFlowUpdate src/Dodge/Update.hs 181;" 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
topPrismEdgeIndices src/Shader/Poke.hs 335;" 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
torqueAmount src/Dodge/HeldUse.hs 596;" 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
tutAnoTree src/Dodge/Room/Tutorial.hs 51;" 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
tutRezBox src/Dodge/Room/Tutorial.hs 516;" f
tutRezBox src/Dodge/Room/Tutorial.hs 509;" 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
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" 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
wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" 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
warmupSound src/Dodge/HeldUse.hs 1393;" f
warningRooms src/Dodge/Room/Warning.hs 33;" f