Allow to log position of placement spot

This commit is contained in:
2025-09-29 22:34:44 +01:00
parent bf9a2250da
commit a2eb0e026b
13 changed files with 180 additions and 152 deletions
+2 -1
View File
@@ -16,7 +16,7 @@ data RoomPos = RoomPos
, _rpDir :: Float
, _rpType :: S.Set RoomPosType
, _rpLinkStatus :: RPLinkStatus
, _rpPlacementUse :: Int
, _rpPlacementUse :: S.Set UsedPos
}
deriving (Eq, Ord, Show)
@@ -80,6 +80,7 @@ data UsedPos
= UsedPosLow
| UsedPosMid
| UsedPosHigh
| UsedPosFloor
deriving (Eq, Ord, Show)
makeLenses ''RoomLink
+32 -28
View File
@@ -61,17 +61,17 @@ randDirPS ps = do
isUnusedLnk :: RoomPos -> Room -> Bool
isUnusedLnk rp _ = case _rpLinkStatus rp of
UnusedLink{} -> _rpPlacementUse rp == 0
UnusedLink{} -> null $ _rpPlacementUse rp
_ -> False
anyUnusedSpot :: PlacementSpot
anyUnusedSpot = rprBool $ \rp _ -> _rpLinkStatus rp == NotLink && _rpPlacementUse rp == 0
anyUnusedSpot = rprBool $ \rp _ -> _rpLinkStatus rp == NotLink && null (_rpPlacementUse rp)
psposAddLabel :: RoomPosType -> PlacementSpot -> PlacementSpot
psposAddLabel lab = psSelect %~ (\f rp r -> f rp r & _Just . _2 . rpType %~ S.insert lab)
rprBool :: (RoomPos -> Room -> Bool) -> PlacementSpot
rprBool t = PSPos (useRoomPosRoomCond t) (const id) Nothing
rprBool t = PSPos (useRoomPosRoomCond (S.singleton UsedPosLow) t) (const id) Nothing
rpIsOnPath :: RoomPos -> Bool
rpIsOnPath = any f . _rpType
@@ -99,34 +99,34 @@ rpOnPathFromEdge pe = any f . _rpType
resetPLUse :: PlacementSpot -> PlacementSpot
resetPLUse (PSPos f g fallback) = PSPos f' g fallback
where
f' rp = fmap (second (rpPlacementUse .~ 0)) . f rp
f' rp = fmap (second (rpPlacementUse .~ mempty)) . f rp
resetPLUse _ = error "Tried to reset _rpPlacementUse of non PSPos placement"
rprShift ::
(RoomPos -> Room -> Maybe (Point2, Float)) ->
(RoomPos -> Room -> Maybe ((Point2, Float), S.Set UsedPos)) ->
PlacementSpot
rprShift t = PSPos f (const id) Nothing
where
f rp r = case t rp r of
Just (p, a) -> Just (PS p a, rp & rpPlacementUse +~ 1)
Just ((p, a), xs) -> Just (PS p a, rp & rpPlacementUse <>~ xs)
Nothing -> Nothing
rprBoolShift ::
(RoomPos -> Room -> Bool) ->
((Point2, Float) -> (Point2, Float)) ->
((Point2, Float) -> ((Point2, Float), S.Set UsedPos)) ->
PlacementSpot
rprBoolShift t shift = PSPos f (const id) Nothing
where
f rp r
| t rp r = Just (PS p a, rp & rpPlacementUse +~ 1)
| t rp r = Just (PS p a, rp & rpPlacementUse <>~ xs)
| otherwise = Nothing
where
(p, a) = shift (_rpPos rp, _rpDir rp)
((p, a), xs) = shift (_rpPos rp, _rpDir rp)
unusedSpotAwayFromLink :: Float -> PlacementSpot
unusedSpotAwayFromLink x = rprBool $ \rp r ->
_rpLinkStatus rp == NotLink
&& _rpPlacementUse rp == 0
&& null (_rpPlacementUse rp)
&& all ((> x) . dist (_rpPos rp)) (usedRoomLinkPoss r)
setFallback :: Placement -> Placement -> Placement
@@ -137,14 +137,14 @@ setFallback fallback =
unusedOffPathAwayFromLink :: Float -> PlacementSpot
unusedOffPathAwayFromLink x = rprBool $ \rp r ->
_rpPlacementUse rp == 0
null (_rpPlacementUse rp)
&& all ((> x) . dist (_rpPos rp)) (usedRoomLinkPoss r)
&& rpIsOffPath rp
unusedSpotAwayFromInLink :: Float -> PlacementSpot
unusedSpotAwayFromInLink x = rprBool $ \rp r ->
_rpLinkStatus rp == NotLink
&& _rpPlacementUse rp == 0
&& null (_rpPlacementUse rp)
&& all ((> x) . dist (_rpPos rp)) (usedRoomInLinkPoss r)
--twoUnusedLinks :: (PlacementSpot -> PlacementSpot -> Placement) -> Placement
@@ -167,12 +167,12 @@ twoRoomPoss cond1 cond2 f = Placement (rprBool cond1) PutNothing Nothing Nothing
isInLnk :: RoomPos -> Bool
isInLnk rp = case _rpLinkStatus rp of
UsedInLink{} -> _rpPlacementUse rp == 0
UsedInLink{} -> null $ _rpPlacementUse rp
_ -> False
isOutLnk :: RoomPos -> Bool
isOutLnk rp = case _rpLinkStatus rp of
UsedOutLink{} -> _rpPlacementUse rp == 0
UsedOutLink{} -> null $ _rpPlacementUse rp
_ -> False
useUnusedLnk :: PlacementSpot
@@ -180,27 +180,30 @@ useUnusedLnk = rprBool isUnusedLnk
isUsedLnkUnplaced :: RoomPos -> Bool
isUsedLnkUnplaced rp = case _rpLinkStatus rp of
UsedOutLink{} -> _rpPlacementUse rp == 0
UsedInLink{} -> _rpPlacementUse rp == 0
UsedOutLink{} -> null (_rpPlacementUse rp)
UsedInLink{} -> null (_rpPlacementUse rp)
_ -> False
useRoomPosCond :: (RoomPos -> Room -> Bool) -> RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
useRoomPosCond f = useRoomPosRoomCond $ \rp r -> f rp r
useRoomPosCond f = useRoomPosRoomCond (S.singleton UsedPosLow) $ \rp r -> f rp r
useRoomPosRoomCond :: (RoomPos -> Room -> Bool) -> RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
useRoomPosRoomCond t rp r
| t rp r = Just (PS (_rpPos rp) (_rpDir rp), rp & rpPlacementUse +~ 1)
useRoomPosRoomCond :: S.Set UsedPos
-> (RoomPos -> Room -> Bool) -> RoomPos -> Room
-> Maybe (PlacementSpot, RoomPos)
useRoomPosRoomCond xs t rp r
| t rp r = Just (PS (_rpPos rp) (_rpDir rp), rp & rpPlacementUse <>~ xs)
| otherwise = Nothing
isUnusedLnkType :: RoomLinkType -> RoomPos -> Room -> Bool
isUnusedLnkType rlt rp _ = case _rpLinkStatus rp of
UnusedLink{_rplsType = rlts} -> rlt `S.member` rlts && _rpPlacementUse rp == 0
UnusedLink{_rplsType = rlts} -> rlt `S.member` rlts
&& null (_rpPlacementUse rp)
_ -> False
unusedSpotNearInLink :: Float -> PlacementSpot
unusedSpotNearInLink x = rprBool $ \rp r ->
_rpLinkStatus rp == NotLink
&& _rpPlacementUse rp == 0
&& null (_rpPlacementUse rp)
&& any ((< x) . dist (_rpPos rp)) (usedRoomInLinkPoss r)
usedRoomInLinkPoss :: Room -> [Point2]
@@ -224,7 +227,8 @@ atFstLnkOut = atNthLinkOut 0
atNthLinkOut :: Int -> PlacementSpot
atNthLinkOut n = rprBool $ \rp _ -> rp ^? rpLinkStatus . rplsChildNum == Just n
atNthLnkOutShiftBy :: Int -> ((Point2, Float) -> (Point2, Float)) -> PlacementSpot
atNthLnkOutShiftBy :: Int -> ((Point2, Float) -> ((Point2, Float),S.Set UsedPos))
-> PlacementSpot
atNthLnkOutShiftBy n = rprBoolShift $
\rp _ -> rp ^? rpLinkStatus . rplsChildNum == Just n
@@ -237,7 +241,7 @@ atNthLnkOutShiftBy n = rprBoolShift $
-- where
-- (p,a) = theshift (_rpPos rp,_rpDir rp)
atFstLnkOutShiftBy :: ((Point2, Float) -> (Point2, Float)) -> PlacementSpot
atFstLnkOutShiftBy :: ((Point2, Float) -> ((Point2, Float), S.Set UsedPos)) -> PlacementSpot
atFstLnkOutShiftBy = atNthLnkOutShiftBy 0
atFstLnkOutShiftInward :: Float -> PlacementSpot
@@ -245,7 +249,7 @@ atFstLnkOutShiftInward = atNthLnkOutShiftInward 0
atNthLnkOutShiftInward :: Int -> Float -> PlacementSpot
atNthLnkOutShiftInward n x = atNthLnkOutShiftBy n $
\(p, a) -> (p +.+ rotateV a (V2 0 (negate x)), a)
\(p, a) -> ((p +.+ rotateV a (V2 0 (negate x)), a), S.singleton UsedPosLow)
shiftInBy :: Float -> (Point2, Float) -> (Point2, Float)
shiftInBy x (p, a) = (p +.+ rotateV a (V2 0 (negate x)), a)
@@ -255,9 +259,9 @@ shiftByV2 x (p, a) = (p +.+ rotateV a x, a)
-- this should probably check the placement use, but so should others: should
-- unify these
useLnkRoomPos :: RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
useLnkRoomPos rp _ = case _rpLinkStatus rp of
UnusedLink{} -> Just (PS (_rpPos rp) (_rpDir rp), rp & rpPlacementUse +~ 1)
useLnkRoomPos :: S.Set UsedPos -> RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
useLnkRoomPos xs rp _ = case _rpLinkStatus rp of
UnusedLink{} -> Just (PS (_rpPos rp) (_rpDir rp), rp & rpPlacementUse <>~ xs)
_ -> Nothing
psRandRanges :: (Float, Float) -> (Float, Float) -> (Float, Float) -> State StdGen (Point2, Float)
+9 -6
View File
@@ -1,3 +1,4 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Room.LasTurret where
--import Dodge.Item.Held.Cane
@@ -27,7 +28,7 @@ cenLasTur = do
roomNgon 8 200 <&> rmPmnts
.~ [ putLasTurret 0.02
, heightWallPS
(resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 100))
(resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 100 <&> (,S.singleton UsedPosLow)))
30
covershape
, thelight
@@ -60,7 +61,7 @@ lightSensByDoor i rm =
-- & rmOutPmnt . at i ?~ sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift)
covershape = rectNSWE 10 (-10) (-20) 20
sensorshift (p, a) = (p +.+ rotateV a (V2 60 (-20)), a)
sensorshift (p, a) = ((p +.+ rotateV a (V2 60 (-20)), a),S.singleton UsedPosLow)
keyCardRoomRunPast :: RandomGen g => Int -> Int -> State g (MetaTree Room String)
keyCardRoomRunPast keyid rmid = do
@@ -87,12 +88,13 @@ analyserByNthLink n proxreq i rm =
.++~ [ psPt (atNthLinkOut n) $ PutForeground $ verticalWire (V2 20 0) 0 80
, analyser
(SensorWithRequirement proxreq)
(atNthLnkOutShiftBy n (\(p, a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
(atNthLnkOutShiftBy n (\(p, a) ->
((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosLow)))
(atNthLnkOutShiftBy n sensorshift)
& plExternalID ?~ i
]
where
sensorshift (p, a) = (p +.+ rotateV a (V2 (-30) (-10)), a)
sensorshift (p, a) = ((p +.+ rotateV a (V2 (-30) (-10)), a), S.singleton UsedPosLow)
analyserByNthLinkWithPrompt ::
Int -> [TerminalLine] -> ProximityRequirement -> Int -> Placement
@@ -103,12 +105,13 @@ analyserByNthLinkWithPrompt n l proxreq i =
analyserWithPrompt
l
(SensorWithRequirement proxreq)
(atNthLnkOutShiftBy n (\(p, a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
(atNthLnkOutShiftBy n (\(p, a) ->
((p +.+ rotateV a (V2 18.5 (-2.5)), a),S.singleton UsedPosLow)))
(atNthLnkOutShiftBy n sensorshift)
& plExternalID ?~ i
-- ]
where
sensorshift (p, a) = (p +.+ rotateV a (V2 (-30) (-10)), a)
sensorshift (p, a) = ((p +.+ rotateV a (V2 (-30) (-10)), a), S.singleton UsedPosLow)
analyserByDoor :: ProximityRequirement -> Int -> Room -> Room
analyserByDoor = analyserByNthLink 0
+3 -1
View File
@@ -1,3 +1,4 @@
{-# LANGUAGE TupleSections #-}
-- | Rooms containing long doors, probably with a big reveal behind them.
module Dodge.Room.LongDoor where
@@ -105,7 +106,8 @@ addButtonSlowDoor x h rm = do
where
theterminal =
putMessageTerminal terminalColor (simpleTermMessage themessage)
& plSpot .~ rprBoolShift (isUnusedLnkType InLink) (shiftByV2 (V2 0 (-10)))
& plSpot .~ rprBoolShift (isUnusedLnkType InLink)
(shiftByV2 (V2 0 (-10)) <&> (,S.singleton UsedPosLow))
themessage =
[ "WARNING:"
, "LARGE BIOMASS DETECTED"
+2 -2
View File
@@ -87,7 +87,7 @@ roomPillarsSquare = do
++ concatMap (replicate nlns . makepill) [East, West]
where
makepill edge = sps (rprBool $ \rp _ -> t edge rp) smallPillar
t edge rp = any (f edge) (_rpType rp) && _rpPlacementUse rp == 0
t edge rp = any (f edge) (_rpType rp) && null (_rpPlacementUse rp)
f edge rpt = maybe False (PathFromEdge edge 0 `S.member`) (rpt ^? offPathFromEdges)
roomPillarsPassage :: RandomGen g => State g Room
@@ -114,7 +114,7 @@ roomPillars pillarsize w h wn hn = do
.~ rprBool
( \rp _ ->
rpIsOffPath rp
&& _rpPlacementUse rp == 0
&& null (_rpPlacementUse rp)
&& _rpLinkStatus rp == NotLink
)
)
+7 -5
View File
@@ -96,7 +96,8 @@ roomRect x y xn yn =
zipWith (lnkBothAnd (OnEdge edge) edgefrom1 edgefrom2) [0 ..]
. zipCountDown
pth = linksAndPath' lnks $ map (bimap (+.+ V2 20 20) (+.+ V2 20 20)) (makeGrid xd xn yd yn)
makeonpos (p, a) = RoomPos p 0 (S.singleton $ RoomPosOnPath $ makerpedges a) NotLink 0
makeonpos (p, a) = RoomPos p 0 (S.singleton $ RoomPosOnPath $ makerpedges a)
NotLink mempty
makerpedges (a, b) =
S.fromList
[ PathFromEdge South b
@@ -106,7 +107,8 @@ roomRect x y xn yn =
]
posps' = map (over _1 (+.+ V2 20 20)) $ gridPoints'' xd (xn + 1) yd (yn + 1)
interposps' = map (over _1 (+.+ V2 (20 + xd / 2) (20 + yd / 2))) $ gridPoints'' xd xn yd yn
makeoffpos (p, a) = RoomPos p 0 (S.singleton $ RoomPosOffPath $ makerpedges' a) NotLink 0
makeoffpos (p, a) = RoomPos
p 0 (S.singleton $ RoomPosOffPath $ makerpedges' a) NotLink mempty
makerpedges' (a, b) =
S.fromList
[ PathFromEdge South b
@@ -203,8 +205,8 @@ quarterRoomTri w = do
]
, _rmPmnts = b ++ [mntLS iShape (V2 (w -20) w) (V3 (w -20) (w -20) 70)]
, _rmPos =
[ RoomPos (V2 (w -20) (w -20)) pi S.empty NotLink 0
, RoomPos (V2 (w -15) (w -25)) pi S.empty NotLink 0
[ RoomPos (V2 (w -20) (w -20)) pi S.empty NotLink mempty
, RoomPos (V2 (w -15) (w -25)) pi S.empty NotLink mempty
]
, _rmBound = [[V2 0 0, V2 w w, V2 (- w) w]]
}
@@ -252,7 +254,7 @@ quarterRoomSquare w = do
]
, _rmPmnts = b ++ [blockLine (V2 (w / 2) (w / 2)) (V2 0 w)]
, _rmPos =
[ RoomPos p pi S.empty NotLink 0
[ RoomPos p pi S.empty NotLink mempty
| p <- [V2 20 (2 * w -40), V2 25 (2 * w -45)]
]
, --, _rmBound = [map toV2 [(w,w),(0,2*w),(-w,w)]]
+4 -4
View File
@@ -201,7 +201,7 @@ weaponBetweenPillars = do
let wpPos = rprBool $ \rp r ->
and
[ rpIsOnPath rp
, _rpPlacementUse rp == 0
, null $ _rpPlacementUse rp
, _rpLinkStatus rp == NotLink
, any ((< 100) . dist (_rpPos rp)) (usedRoomInLinkPoss r)
]
@@ -211,7 +211,7 @@ weaponBetweenPillars = do
randDirPS $
rprBool $ \rp r ->
rpIsOnPath rp
&& _rpPlacementUse rp == 0
&& null (_rpPlacementUse rp)
&& all ((> 100) . dist (_rpPos rp)) (usedRoomLinkPoss r)
( roomPillars 30 w h wn hn
<&> rmPmnts .++~ map (`sps` randC1) critPlacementSpots ++ [sps wpPos (PutFlIt wp)]
@@ -329,7 +329,7 @@ pistolerRoom = do
.++~ replicate
3
( psPtPl
(rprBool $ \rp _ -> _rpPlacementUse rp == 0 && rpIsOnPath rp)
(rprBool $ \rp _ -> null (_rpPlacementUse rp) && rpIsOnPath rp)
(PutCrit chaseCrit)
)
@@ -369,7 +369,7 @@ spawnerRoom = do
roomC x y <&> rmPmnts
.:~ psPtPl
( rprBool $ \rp _ ->
_rpPlacementUse rp == 0 && rpIsOnPath rp
null (_rpPlacementUse rp) && rpIsOnPath rp
&& xV2 (_rpPos rp) < x / 2
&& yV2 (_rpPos rp) < y / 2
)
+3 -3
View File
@@ -1,4 +1,4 @@
--{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TupleSections #-}
module Dodge.Room.SensorDoor (sensAboveDoor,sensorRoomRunPast) where
import Dodge.Data.MTRS
@@ -53,7 +53,7 @@ sensorRoomRunPast dt n = do
sensAboveDoor :: SensorType -> Float -> PlacementSpot -> Placement
sensAboveDoor sensetype wth ps =
extTrigLitPos
(atFstLnkOutShiftBy (\(p, a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
(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
@@ -65,7 +65,7 @@ sensInsideDoor senseType i rm = rm
, psPt atFstLnkOut . PutForeground $ verticalWire (V2 20 0) 0 80
, putMessageTerminal terminalColor
(textTerminal & tmCommands .:~ TCDamageCommand)
& plSpot .~ rprBoolShift isUnusedLnk (shiftInBy 10)
& plSpot .~ rprBoolShift isUnusedLnk (shiftInBy 10 <&> (, S.singleton UsedPosHigh))
, sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i
]
-- & rmOutPmnt . at i ?~ sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100)
+2 -2
View File
@@ -56,7 +56,7 @@ randEdgeTank = do
& plSpot
.~ rprBool
( \rp _ ->
_rpPlacementUse rp == 0
null (_rpPlacementUse rp)
&& rpOffPathFromEdge (PathFromEdge edge 0) rp
)
@@ -85,7 +85,7 @@ randEdgeTanks i = do
& plSpot
.~ rprBool
( \rp _ ->
_rpPlacementUse rp == 0
null (_rpPlacementUse rp)
&& rpOffPathFromEdge (PathFromEdge edge 0) rp
)
+3 -2
View File
@@ -1,5 +1,6 @@
module Dodge.Room.Tutorial where
import qualified Data.Set as S
import ShortShow
import Dodge.Data.MTRS
import Dodge.Room.Room
@@ -86,7 +87,7 @@ tutDrop = do
terminalColor
(defaultTerminal & tmBootLines .~ ss <> tlSetStatus (TerminalPressTo $ show x <>"QUIT") <> tlDoEffect TmWdWdPowerDownTerminal)
& plSpot .~ rprBoolShift isUnusedLnk
(\(p, a) -> (p + 10 *.* unitVectorAtAngle (a - pi/2), a))
(\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi/2), a), S.singleton UsedPosLow))
ss =
[makeTermLine "--------------------------------------------"
,makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS"
@@ -151,7 +152,7 @@ tutHub = do
terminalColor
(defaultTerminal & tmBootLines .~ ss' <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdPowerDownTerminal)
& plSpot .~ rprBoolShift isUnusedLnk
(\(p, a) -> (p + 10 *.* unitVectorAtAngle (a - pi/2), a))
(\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi/2), a),S.singleton UsedPosLow))
ss' =
[ makeTermLine "---------------------------------------------"
, makeTermLine "HOLD [CAPS] AND SCROLL"
+29 -19
View File
@@ -1,15 +1,19 @@
--{-# LANGUAGE TupleSections #-}
module Dodge.Room.Warning (warningRooms,addDoorToggleTerminal
, addDoorAtNthLinkToggleTerminal) where
module Dodge.Room.Warning (
warningRooms,
addDoorToggleTerminal,
addDoorAtNthLinkToggleTerminal,
) where
import Control.Monad
import Dodge.Default.Terminal
import Dodge.Data.BlBl
import Color
import Control.Monad
import qualified Data.Map.Strict as M
import Data.Maybe
import qualified Data.Set as S
import Dodge.Cleat
import Dodge.Data.BlBl
import Dodge.Data.GenWorld
import Dodge.Default.Terminal
import Dodge.Placement.Instance
import Dodge.PlacementSpot
import Dodge.Room.Door
@@ -34,32 +38,37 @@ addDoorToggleTerminal :: [TerminalLine] -> Int -> Room -> Room
addDoorToggleTerminal = addDoorAtNthLinkToggleTerminal 0
addDoorAtNthLinkToggleTerminal :: Int -> [TerminalLine] -> Int -> Room -> Room
addDoorAtNthLinkToggleTerminal j xs i = (rmName .++~ "doorToggle-")
-- . (rmOutPmnt . at i ?~ outplace)
addDoorAtNthLinkToggleTerminal j xs i =
(rmName .++~ "doorToggle-")
-- . (rmOutPmnt . at i ?~ outplace)
. (rmPmnts .:~ outplace)
where
outplace =
extTrigLitPos
(atNthLnkOutShiftBy j (\(p, a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
( Just . set plSpot (rprShift (moveToSideNthOutLink j))
(atNthLnkOutShiftBy j (\(p, a) -> ((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosLow)))
( Just . set plSpot (rprShift (moveToSideNthOutLink (S.singleton UsedPosLow) j))
. putMessageTerminal terminalColor
. termMessages
) & plExternalID ?~ i
)
& plExternalID
?~ i
termMessages trpl =
lineOutputTerminal xs --(makeColorTermLine red "WARNING" : makeTermPara str)
& tmToggles .~ M.fromList
& tmToggles
.~ M.fromList
[("DOOR", TerminalToggle (fromJust $ _plMID trpl) (BlConst True))]
addWarningTerminal :: String -> Int -> Room -> Room
addWarningTerminal str = addDoorToggleTerminal
(makeColorTermLine red "WARNING" : makeTermPara str)
addWarningTerminal str =
addDoorToggleTerminal
(makeColorTermLine red "WARNING" : makeTermPara str)
lineOutputTerminal :: [TerminalLine] -> Terminal
lineOutputTerminal tls = defaultTerminal & tmBootLines .~ textInputBlurb tls
moveToSideNthOutLink :: Int -> RoomPos -> Room -> Maybe (Point2, Float)
moveToSideNthOutLink i rp rm = do
moveToSideNthOutLink :: S.Set UsedPos
-> Int -> RoomPos -> Room -> Maybe ((Point2, Float), S.Set UsedPos)
moveToSideNthOutLink xs i rp rm = do
j <- rp ^? rpLinkStatus . rplsChildNum
guard $ i == j
let rppos = _rpPos rp
@@ -67,11 +76,12 @@ moveToSideNthOutLink i rp rm = do
inpos = rppos +.+ rotateV rpdir (V2 0 (-12.5))
rtpos = inpos +.+ rotateV rpdir (V2 30 0)
ltpos = inpos +.+ rotateV rpdir (V2 (-30) 0)
return $ if any (isJust . intersectSegPolyFirst inpos ltpos) (_rmPolys rm)
return $
if any (isJust . intersectSegPolyFirst inpos ltpos) (_rmPolys rm)
then -- the above test may not work properly if the room polys are
-- complicated, it should really use created walls...
(rtpos, rpdir)
else (ltpos, rpdir)
((rtpos, rpdir), xs)
else ((ltpos, rpdir), xs)
--moveToSideFirstOutLink :: RoomPos -> Room -> Maybe (Point2, Float)
--moveToSideFirstOutLink rp rm = do
+3 -3
View File
@@ -91,7 +91,7 @@ posRms prs parenti@(parent, _) ((numChild, t@(Node childi _)) : its) tseq = do
, _rpDir = snd (lnkPosDir outlnk)
, _rpType = S.empty
, _rpLinkStatus = UsedOutLink (_rlType outlnk) numChild (snd childi)
, _rpPlacementUse = 0
, _rpPlacementUse = mempty
}
& rmChildren .:~ snd childi
shiftedoutlink = shiftLinkBy (_rmShift parent) outlnk
@@ -106,7 +106,7 @@ posRms prs parenti@(parent, _) ((numChild, t@(Node childi _)) : its) tseq = do
, _rpDir = snd (lnkPosDir il)
, _rpType = S.empty
, _rpLinkStatus = UsedInLink (_rlType il) (snd parenti)
, _rpPlacementUse = 0
, _rpPlacementUse = mempty
}
shiftedt =
over
@@ -123,7 +123,7 @@ createUnusedLinkPos rm = rm & rmPos .++~ map f (_rmLinks rm)
, _rpDir = _rlDir rl
, _rpType = S.empty
, _rpLinkStatus = UnusedLink $ _rlType rl
, _rpPlacementUse = 0
, _rpPlacementUse = mempty
}
zipCount :: [a] -> [(Int, a)]
+81 -76
View File
@@ -1446,6 +1446,11 @@ UseableWhenAimed src/Dodge/Data/UseCondition.hs 5;" C
UseableWhenHeld src/Dodge/Data/UseCondition.hs 6;" C
UsedInLink src/Dodge/Data/Room.hs 61;" C
UsedOutLink src/Dodge/Data/Room.hs 56;" C
UsedPos src/Dodge/Data/Room.hs 79;" t
UsedPosFloor src/Dodge/Data/Room.hs 83;" C
UsedPosHigh src/Dodge/Data/Room.hs 82;" C
UsedPosLow src/Dodge/Data/Room.hs 80;" C
UsedPosMid src/Dodge/Data/Room.hs 81;" C
VAO src/Shader/Data.hs 64;" t
VBO src/Shader/Data.hs 81;" t
VF src/Polyhedra/Data.hs 21;" t
@@ -2552,11 +2557,11 @@ activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 62;" f
activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f
addArmour src/Dodge/Creature.hs 84;" f
addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f
addButtonSlowDoor src/Dodge/Room/LongDoor.hs 97;" f
addButtonSlowDoor src/Dodge/Room/LongDoor.hs 98;" f
addCrGibs src/Dodge/Prop/Gib.hs 16;" f
addDepth src/Picture/Base.hs 133;" f
addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 36;" f
addDoorToggleTerminal src/Dodge/Room/Warning.hs 33;" f
addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 40;" f
addDoorToggleTerminal src/Dodge/Room/Warning.hs 37;" f
addDoorWall src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 53;" f
addEdges src/Dodge/Path.hs 122;" f
addGib4 src/Dodge/Prop/Gib.hs 51;" f
@@ -2582,10 +2587,10 @@ addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f
addRandomGirderEW src/Dodge/Room/Girder.hs 9;" f
addRandomGirderFrom src/Dodge/Room/Girder.hs 16;" f
addSideEffect src/Dodge/Concurrent.hs 29;" f
addSouthPillars src/Dodge/Room/LongDoor.hs 89;" f
addSouthPillars src/Dodge/Room/LongDoor.hs 90;" f
addTermSignal src/Dodge/Event/Input.hs 31;" f
addToTrunk src/TreeHelp.hs 157;" f
addWarningTerminal src/Dodge/Room/Warning.hs 54;" f
addWarningTerminal src/Dodge/Room/Warning.hs 61;" f
addZ src/Geometry/Vector3D.hs 89;" f
adjustIMZone src/Dodge/Base.hs 81;" f
advanceScrollAmount src/Dodge/Update.hs 403;" f
@@ -2610,10 +2615,10 @@ ammoMagSPic src/Dodge/Item/Draw/SPic.hs 145;" f
amr src/Dodge/Item/Held/Rod.hs 34;" f
anRoom src/Dodge/Floor.hs 117;" f
analyser src/Dodge/Placement/Instance/Analyser.hs 12;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 113;" f
analyserByDoorWithPrompt src/Dodge/Room/LasTurret.hs 116;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 83;" f
analyserByNthLinkWithPrompt src/Dodge/Room/LasTurret.hs 97;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 116;" f
analyserByDoorWithPrompt src/Dodge/Room/LasTurret.hs 119;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 84;" f
analyserByNthLinkWithPrompt src/Dodge/Room/LasTurret.hs 99;" f
analyserWithPrompt src/Dodge/Placement/Instance/Analyser.hs 15;" f
andOrRegex src/Dodge/DisplayInventory.hs 78;" f
angleBetween src/Geometry.hs 161;" f
@@ -2664,12 +2669,12 @@ arrow src/Picture/Composite.hs 19;" f
arrowPath src/Picture/Composite.hs 8;" f
assignHotkey src/Dodge/AssignHotkey.hs 9;" f
assignPushDoors src/Dodge/LevelGen.hs 44;" f
atFstLnkOut src/Dodge/PlacementSpot.hs 221;" f
atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 240;" f
atFstLnkOutShiftInward src/Dodge/PlacementSpot.hs 243;" f
atNthLinkOut src/Dodge/PlacementSpot.hs 224;" f
atNthLnkOutShiftBy src/Dodge/PlacementSpot.hs 227;" f
atNthLnkOutShiftInward src/Dodge/PlacementSpot.hs 246;" f
atFstLnkOut src/Dodge/PlacementSpot.hs 224;" f
atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 244;" f
atFstLnkOutShiftInward src/Dodge/PlacementSpot.hs 247;" f
atNthLinkOut src/Dodge/PlacementSpot.hs 227;" f
atNthLnkOutShiftBy src/Dodge/PlacementSpot.hs 230;" f
atNthLnkOutShiftInward src/Dodge/PlacementSpot.hs 250;" f
attachBranch src/Dodge/Tree/Compose.hs 83;" f
attachInfo src/Dodge/Item/Info.hs 58;" f
attachList src/Dodge/Tree/Compose.hs 80;" f
@@ -2811,10 +2816,10 @@ cardList src/Dodge/Base/CardinalPoint.hs 6;" f
cardVec src/Dodge/Base/CardinalPoint.hs 9;" f
cardinalVectors src/Dodge/FloorItem.hs 24;" f
cdtPropagateFold src/Dodge/DoubleTree.hs 407;" f
cenLasTur src/Dodge/Room/LasTurret.hs 24;" f
cenLasTur src/Dodge/Room/LasTurret.hs 25;" f
centerText src/Picture/Base.hs 184;" f
centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f
centerVaultRoom src/Dodge/Room/Procedural.hs 288;" f
centerVaultRoom src/Dodge/Room/Procedural.hs 290;" f
centroid src/Geometry/Polygon.hs 136;" f
centroidNum src/Geometry/Polygon.hs 139;" f
chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f
@@ -2870,7 +2875,7 @@ clAlt src/Dodge/Cloud.hs 5;" f
clClSpringVel src/Dodge/Update.hs 827;" f
clColor src/Shader/Poke/Cloud.hs 35;" f
clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f
clampPath src/Dodge/Room/Procedural.hs 165;" f
clampPath src/Dodge/Room/Procedural.hs 167;" f
clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 560;" f
clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 676;" f
clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 542;" f
@@ -2929,11 +2934,11 @@ combinationsGraph src/Dodge/Combine/Graph.hs 74;" f
combinationsOf src/Multiset.hs 46;" f
combinationsTrie src/Dodge/Combine.hs 43;" f
combineAwareness src/Dodge/Creature/Perception.hs 110;" f
combineFloors src/Dodge/Room/Procedural.hs 171;" f
combineFloors src/Dodge/Room/Procedural.hs 173;" f
combineInventoryExtra src/Dodge/Render/HUD.hs 337;" f
combineItemListYouX src/Dodge/Combine.hs 35;" f
combineList src/Dodge/Combine.hs 21;" f
combineRooms src/Dodge/Room/Procedural.hs 151;" f
combineRooms src/Dodge/Room/Procedural.hs 153;" f
combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 480;" f
combineTree src/Dodge/Tree/Compose.hs 67;" f
commandColor src/Dodge/Terminal.hs 114;" f
@@ -2963,7 +2968,7 @@ coolMinigun src/Dodge/Creature/State.hs 94;" f
copier src/Dodge/Item/Scope.hs 88;" f
copierItemUpdate src/Dodge/Creature/State.hs 130;" f
copyItemToFloor src/Dodge/FloorItem.hs 14;" f
corDoor src/Dodge/Room/Room.hs 378;" f
corDoor src/Dodge/Room/Room.hs 380;" f
cornerList src/Preload/Render.hs 198;" f
corpseOrGib src/Dodge/Creature/Update.hs 110;" f
corridor src/Dodge/Room/Corridor.hs 17;" f
@@ -3035,9 +3040,9 @@ creatureShootPulseLaser src/Dodge/HeldUse.hs 859;" f
creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 53;" f
creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 74;" f
creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 63;" f
critInDeadEnd src/Dodge/Room/Room.hs 236;" f
critsPillarRoom src/Dodge/Room/Room.hs 383;" f
critsRoom src/Dodge/Room/Room.hs 391;" f
critInDeadEnd src/Dodge/Room/Room.hs 238;" f
critsPillarRoom src/Dodge/Room/Room.hs 385;" f
critsRoom src/Dodge/Room/Room.hs 393;" f
crixsNearSeg src/Dodge/Zoning/Creature.hs 29;" f
crossPic src/Dodge/Render/Label.hs 27;" f
crossProd src/Geometry/Vector3D.hs 41;" f
@@ -3098,7 +3103,7 @@ dbArgChain src/Dodge/Base.hs 170;" f
dbwMuzzles src/Dodge/HeldUse.hs 314;" f
deZoneIX src/Dodge/Zoning/Base.hs 89;" f
deZoneWall src/Dodge/Zoning/Wall.hs 70;" f
deadEndRoom src/Dodge/Room/Room.hs 239;" f
deadEndRoom src/Dodge/Room/Room.hs 241;" f
deadFeet src/Dodge/Creature/Picture.hs 68;" f
deadRot src/Dodge/Creature/Picture.hs 84;" f
deadScalp src/Dodge/Creature/Picture.hs 81;" f
@@ -3311,7 +3316,7 @@ doorMechanism src/Dodge/DrWdWd.hs 24;" f
doorMechanismStepwise src/Dodge/DrWdWd.hs 59;" f
dotV src/Geometry/Vector.hs 75;" f
dotV3 src/Geometry/Vector3D.hs 119;" f
doubleCorridorBarrels src/Dodge/Room/Room.hs 269;" f
doubleCorridorBarrels src/Dodge/Room/Room.hs 271;" f
doubleFindMax src/Dodge/Update/Scroll.hs 181;" f
doubleFindMin src/Dodge/Update/Scroll.hs 160;" f
doubleFindPred src/Dodge/Update/Scroll.hs 188;" f
@@ -3704,7 +3709,7 @@ glassShat2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 618;" f
glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 458;" f
glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 612;" f
glassSwitchBack src/Dodge/Room/Room.hs 72;" f
glassSwitchBackCrits src/Dodge/Room/Room.hs 101;" f
glassSwitchBackCrits src/Dodge/Room/Room.hs 103;" f
glauncherPic src/Dodge/Item/Draw/SPic.hs 412;" f
glushortSize src/Shader/Parameters.hs 25;" f
goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f
@@ -3762,8 +3767,8 @@ headLampShape src/Dodge/Item/Draw/SPic.hs 455;" f
headMap src/Dodge/DoubleTree.hs 249;" f
headPQ src/Dodge/Creature/HandPos.hs 115;" f
healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 492;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 80;" f
healthTest src/Dodge/Room/LasTurret.hs 119;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 81;" f
healthTest src/Dodge/Room/LasTurret.hs 122;" f
heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f
heldAimStance src/Dodge/Item/AimStance.hs 24;" f
heldAimZoom src/Dodge/Update/Camera.hs 149;" f
@@ -3909,7 +3914,7 @@ isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f
isPutID src/Dodge/Placement/Instance/Wall.hs 129;" f
isRHS src/Geometry/LHS.hs 24;" f
isUnusedLnk src/Dodge/PlacementSpot.hs 62;" f
isUnusedLnkType src/Dodge/PlacementSpot.hs 195;" f
isUnusedLnkType src/Dodge/PlacementSpot.hs 197;" f
isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 181;" f
isValidCommand src/Dodge/Debug/Terminal.hs 134;" f
isVowel src/StringHelp.hs 8;" f
@@ -3978,8 +3983,8 @@ justify src/Justify.hs 9;" f
k src/ShortShow.hs 44;" f
k' src/ShortShow.hs 44;" f
keyCard src/Dodge/Item/Held/Utility.hs 20;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 77;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 65;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 78;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 66;" f
keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f
keyPic src/Dodge/Item/Draw/SPic.hs 471;" f
keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f
@@ -3991,12 +3996,12 @@ lamp src/Dodge/Creature/Lamp.hs 21;" f
lampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 8;" f
lampCoverWhen src/Dodge/Placement/Instance/LightSource/Cover.hs 19;" f
lampCrSPic src/Dodge/Render/ShapePicture.hs 75;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 138;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 141;" f
lasGunPic src/Dodge/Item/Draw/SPic.hs 424;" f
lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 131;" f
lasTunnel src/Dodge/Room/LasTurret.hs 150;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 191;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 134;" f
lasTunnel src/Dodge/Room/LasTurret.hs 153;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 194;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 40;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f
lastMap src/Dodge/DoubleTree.hs 253;" f
@@ -4026,8 +4031,8 @@ leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f
legsSPic src/Dodge/Item/Draw/SPic.hs 480;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f
light src/Color.hs 104;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 50;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 38;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 51;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 39;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 42;" f
lightsToRender src/Dodge/Render/Lights.hs 14;" f
lightx4 src/Color.hs 145;" f
@@ -4037,7 +4042,7 @@ lineCol src/Picture/Base.hs 230;" f
lineGeom src/Dodge/Base.hs 32;" f
lineOnScreenCone src/Dodge/Debug/Picture.hs 59;" f
lineOrth src/Dodge/Creature/Boid.hs 126;" f
lineOutputTerminal src/Dodge/Room/Warning.hs 58;" f
lineOutputTerminal src/Dodge/Room/Warning.hs 66;" f
lineSplit src/Justify.hs 26;" f
lineThick src/Picture/Base.hs 234;" f
lineUp src/Dodge/Creature/Boid.hs 148;" f
@@ -4051,7 +4056,7 @@ listGuard src/Dodge/Creature/ReaderUpdate.hs 190;" f
listSelectionColorPicture src/Dodge/DisplayInventory.hs 302;" f
litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f
lmt src/MatrixHelper.hs 43;" f
lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f
lnkBothAnd src/Dodge/Room/Procedural.hs 123;" f
lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 387;" f
lnkPosDir src/Dodge/RoomLink.hs 97;" f
loadDodgeConfig src/Dodge/Config/Load.hs 9;" f
@@ -4246,7 +4251,7 @@ miniGunX src/Dodge/Item/Held/Cane.hs 33;" f
miniGunXPict src/Dodge/Item/Draw/SPic.hs 384;" f
miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 381;" f
miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 716;" f
miniTree2 src/Dodge/Room/Room.hs 108;" f
miniTree2 src/Dodge/Room/Room.hs 110;" f
minimumOn src/FoldlHelp.hs 14;" f
mirrorXAxis src/Geometry/Polygon.hs 49;" f
mirrorxz src/Picture/Base.hs 335;" f
@@ -4279,7 +4284,7 @@ moveProjectile src/Dodge/Projectile/Update.hs 260;" f
moveRoomBy src/Dodge/Room/Link.hs 53;" f
moveShockwave src/Dodge/Shockwave/Update.hs 13;" f
moveStuckGrenade src/Dodge/Projectile/Update.hs 246;" f
moveToSideNthOutLink src/Dodge/Room/Warning.hs 61;" f
moveToSideNthOutLink src/Dodge/Room/Warning.hs 69;" f
moveWall src/Dodge/Wall/Move.hs 29;" f
moveWallID src/Dodge/Wall/Move.hs 24;" f
moveWallIDToward src/Dodge/Wall/Move.hs 47;" f
@@ -4441,7 +4446,7 @@ pincerP''' src/Dodge/Creature/Boid.hs 75;" f
pingPongBetween src/Render.hs 221;" f
pipe src/Dodge/Item/Craftable.hs 32;" f
pistol src/Dodge/Item/Held/Stick.hs 40;" f
pistolerRoom src/Dodge/Room/Room.hs 323;" f
pistolerRoom src/Dodge/Room/Room.hs 325;" f
pjRemoteSetDirection src/Dodge/Projectile/Update.hs 225;" f
plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f
plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f
@@ -4602,7 +4607,7 @@ psPt src/Dodge/LevelGen/PlacementHelper.hs 24;" f
psPtCont src/Dodge/LevelGen/PlacementHelper.hs 18;" f
psPtJpl src/Dodge/LevelGen/PlacementHelper.hs 12;" f
psPtPl src/Dodge/LevelGen/PlacementHelper.hs 9;" f
psRandRanges src/Dodge/PlacementSpot.hs 263;" f
psRandRanges src/Dodge/PlacementSpot.hs 267;" f
psj src/Dodge/LevelGen/PlacementHelper.hs 70;" f
psposAddLabel src/Dodge/PlacementSpot.hs 70;" f
pt0 src/Dodge/LevelGen/PlacementHelper.hs 54;" f
@@ -4644,8 +4649,8 @@ qID src/Quaternion.hs 62;" f
qToAng src/Quaternion.hs 59;" f
qToV2 src/Quaternion.hs 56;" f
qToV3 src/Quaternion.hs 53;" f
quarterRoomSquare src/Dodge/Room/Procedural.hs 212;" f
quarterRoomTri src/Dodge/Room/Procedural.hs 176;" f
quarterRoomSquare src/Dodge/Room/Procedural.hs 214;" f
quarterRoomTri src/Dodge/Room/Procedural.hs 178;" f
quitCommand src/Dodge/Terminal.hs 93;" f
qz src/Quaternion.hs 71;" f
rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f
@@ -4677,8 +4682,8 @@ randSparkExtraVel src/Dodge/Spark.hs 92;" f
randWallReflect src/Dodge/Update.hs 626;" f
randomChallenges src/Dodge/Room/Start.hs 63;" f
randomCompass src/Dodge/Layout.hs 57;" f
randomFourCornerRoom src/Dodge/Room/Procedural.hs 265;" f
randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 277;" f
randomFourCornerRoom src/Dodge/Room/Procedural.hs 267;" f
randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 279;" f
randomLightPositions src/Dodge/Room/Modify/Girder.hs 152;" f
randomMediumRoom src/Dodge/Room/Boss.hs 75;" f
randomPath src/TreeHelp.hs 145;" f
@@ -4781,12 +4786,12 @@ rmInvItem src/Dodge/Inventory.hs 73;" f
rmLinksOfType src/Dodge/RoomLink.hs 135;" f
rmOutLinks src/Dodge/RoomLink.hs 138;" f
roomC src/Dodge/Room/Room.hs 40;" f
roomCCrits src/Dodge/Room/Room.hs 264;" f
roomCenterPillar src/Dodge/Room/Room.hs 121;" f
roomCCrits src/Dodge/Room/Room.hs 266;" f
roomCenterPillar src/Dodge/Room/Room.hs 123;" f
roomCritLS src/Dodge/Room/RunPast.hs 24;" f
roomCross src/Dodge/Room/Boss.hs 84;" f
roomGlassOctogon src/Dodge/Room/Boss.hs 21;" f
roomMiniIntro src/Dodge/Room/Room.hs 116;" f
roomMiniIntro src/Dodge/Room/Room.hs 118;" f
roomNgon src/Dodge/Room/Ngon.hs 15;" f
roomPadCut src/Dodge/Room/Room.hs 61;" f
roomPillars src/Dodge/Room/Pillar.hs 106;" f
@@ -4794,7 +4799,7 @@ roomPillarsContaining src/Dodge/Room/Containing.hs 39;" f
roomPillarsPassage src/Dodge/Room/Pillar.hs 93;" f
roomPillarsSquare src/Dodge/Room/Pillar.hs 49;" f
roomRect src/Dodge/Room/Procedural.hs 38;" f
roomRectAutoLinks src/Dodge/Room/Procedural.hs 138;" f
roomRectAutoLinks src/Dodge/Room/Procedural.hs 140;" f
roomShuriken src/Dodge/Room/Boss.hs 122;" f
roomTwistCross src/Dodge/Room/Boss.hs 153;" f
roomsContaining src/Dodge/Room/Containing.hs 20;" f
@@ -4985,10 +4990,10 @@ shellMag src/Dodge/Item/Ammo.hs 49;" f
shellModule src/Dodge/Item/Scope.hs 123;" f
shellShape src/Dodge/Projectile/Draw.hs 35;" f
shieldWall src/Dodge/Item/BackgroundEffect.hs 77;" f
shiftByV2 src/Dodge/PlacementSpot.hs 253;" f
shiftByV2 src/Dodge/PlacementSpot.hs 257;" f
shiftChildren src/Dodge/Tree/Compose.hs 44;" f
shiftDraw src/Dodge/Render/ShapePicture.hs 80;" f
shiftInBy src/Dodge/PlacementSpot.hs 250;" f
shiftInBy src/Dodge/PlacementSpot.hs 254;" f
shiftInvItems src/Dodge/Update/Input/InGame.hs 305;" f
shiftInvItemsDown src/Dodge/Update/Input/InGame.hs 350;" f
shiftInvItemsUp src/Dodge/Update/Input/InGame.hs 344;" f
@@ -5016,10 +5021,10 @@ shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f
shootTeslaArc src/Dodge/HeldUse.hs 1211;" f
shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f
shootTractorBeam src/Dodge/HeldUse.hs 794;" f
shootersRoom src/Dodge/Room/Room.hs 317;" f
shootersRoom' src/Dodge/Room/Room.hs 284;" f
shootersRoom1 src/Dodge/Room/Room.hs 307;" f
shootingRange src/Dodge/Room/Room.hs 334;" f
shootersRoom src/Dodge/Room/Room.hs 319;" f
shootersRoom' src/Dodge/Room/Room.hs 286;" f
shootersRoom1 src/Dodge/Room/Room.hs 309;" f
shootingRange src/Dodge/Room/Room.hs 336;" f
shortPoint2 src/Dodge/ShortShow.hs 4;" f
shortShow src/ShortShow.hs 7;" f
shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 708;" f
@@ -5058,8 +5063,8 @@ slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 670;" f
slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 604;" f
slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 688;" f
slideWindow src/ListHelp.hs 80;" f
slowDoorRoom src/Dodge/Room/LongDoor.hs 154;" f
slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 171;" f
slowDoorRoom src/Dodge/Room/LongDoor.hs 156;" f
slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 173;" f
smallBattery src/Dodge/Item/Ammo.hs 60;" f
smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f
smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f
@@ -5091,7 +5096,7 @@ soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 150;" f
soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f
soundWithStatus src/Dodge/SoundLogic.hs 104;" f
soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f
southPillarsRoom src/Dodge/Room/LongDoor.hs 86;" f
southPillarsRoom src/Dodge/Room/LongDoor.hs 87;" f
spaceAction src/Dodge/Update/Input/InGame.hs 528;" f
spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 193;" f
spanColLightI src/Dodge/Placement/Instance/LightSource.hs 186;" f
@@ -5104,7 +5109,7 @@ sparkRandDir src/Dodge/Spark.hs 116;" f
sparkToDamage src/Dodge/Spark.hs 39;" f
spawnAt src/Dodge/SpawnAt.hs 14;" f
spawnerCrit src/Dodge/Creature.hs 56;" f
spawnerRoom src/Dodge/Room/Room.hs 362;" f
spawnerRoom src/Dodge/Room/Room.hs 364;" f
speedLegs src/Dodge/Item/Equipment.hs 90;" f
splashMenu src/Dodge/Menu.hs 30;" f
splashMenuOptions src/Dodge/Menu.hs 35;" f
@@ -5387,8 +5392,8 @@ tutRezBox src/Dodge/Room/Tutorial.hs 210;" f
tutRoomTree src/Dodge/Floor.hs 21;" f
tutorialMessage1 src/Dodge/Room/Tutorial.hs 232;" f
tweenAngles src/Geometry/Vector.hs 195;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 81;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 29;" f
twists src/Dodge/Creature/Test.hs 99;" f
twoFlat src/Dodge/Creature/Test.hs 96;" f
twoFlatHRot src/Dodge/Item/HeldOffset.hs 81;" f
@@ -5415,7 +5420,7 @@ untilJustCount src/MonadHelp.hs 14;" f
unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 138;" f
unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 144;" f
unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 126;" f
unusedSpotNearInLink src/Dodge/PlacementSpot.hs 200;" f
unusedSpotNearInLink src/Dodge/PlacementSpot.hs 203;" f
updateAimPos src/Dodge/Update.hs 302;" f
updateAllNodes src/TreeHelp.hs 86;" f
updateArc src/Dodge/Tesla.hs 44;" f
@@ -5557,7 +5562,7 @@ useHotkey src/Dodge/Creature/YourControl.hs 76;" f
useInventoryPath src/Dodge/HeldUse.hs 1427;" f
useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f
useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f
useLnkRoomPos src/Dodge/PlacementSpot.hs 258;" f
useLnkRoomPos src/Dodge/PlacementSpot.hs 262;" f
useLoadedAmmo src/Dodge/HeldUse.hs 716;" f
useMagShield src/Dodge/Euse.hs 27;" f
useNormalCamera src/Dodge/Camera.hs 6;" f
@@ -5568,8 +5573,8 @@ useRoomPosRoomCond src/Dodge/PlacementSpot.hs 190;" f
useStopWatch src/Dodge/HeldUse.hs 1368;" f
useTimeScrollGun src/Dodge/HeldUse.hs 1376;" f
useUnusedLnk src/Dodge/PlacementSpot.hs 178;" f
usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 206;" f
usedRoomLinkPoss src/Dodge/PlacementSpot.hs 213;" f
usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 209;" f
usedRoomLinkPoss src/Dodge/PlacementSpot.hs 216;" f
v2z src/Geometry/Vector3D.hs 93;" f
vCen3 src/Geometry/Vector3D.hs 115;" f
vInverse src/Geometry/Vector.hs 153;" f
@@ -5610,7 +5615,7 @@ wallToSurface src/Dodge/Base/Collide.hs 172;" f
wallsFromRooms src/Dodge/Layout.hs 131;" f
wallsToDraw src/Dodge/Render/Walls.hs 17;" f
warmupSound src/Dodge/HeldUse.hs 1421;" f
warningRooms src/Dodge/Room/Warning.hs 26;" f
warningRooms src/Dodge/Room/Warning.hs 30;" f
wasdAim src/Dodge/Creature/YourControl.hs 132;" f
wasdDir src/Dodge/WASD.hs 17;" f
wasdM src/Dodge/WASD.hs 9;" f
@@ -5619,12 +5624,12 @@ wasdWithAiming src/Dodge/Creature/YourControl.hs 125;" f
watchCombinations src/Dodge/Combine/Combinations.hs 16;" f
watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 179;" f
weakenMatS src/Dodge/Material/Sound.hs 18;" f
weaponBehindPillar src/Dodge/Room/Room.hs 179;" f
weaponBetweenPillars src/Dodge/Room/Room.hs 195;" f
weaponEmptyRoom src/Dodge/Room/Room.hs 140;" f
weaponLongCorridor src/Dodge/Room/Room.hs 220;" f
weaponRoom src/Dodge/Room/Room.hs 253;" f
weaponUnderCrits src/Dodge/Room/Room.hs 158;" f
weaponBehindPillar src/Dodge/Room/Room.hs 181;" f
weaponBetweenPillars src/Dodge/Room/Room.hs 197;" f
weaponEmptyRoom src/Dodge/Room/Room.hs 142;" f
weaponLongCorridor src/Dodge/Room/Room.hs 222;" f
weaponRoom src/Dodge/Room/Room.hs 255;" f
weaponUnderCrits src/Dodge/Room/Room.hs 160;" f
wedgeGeom src/Dodge/Base.hs 42;" f
wedgeOfThickness src/Dodge/Picture.hs 9;" f
whirS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 712;" f
@@ -5702,7 +5707,7 @@ zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f
zeroZ src/Geometry/Vector.hs 8;" f
zipArcs src/Dodge/Tesla.hs 52;" f
zipCount src/Dodge/Tree/Shift.hs 129;" f
zipCountDown src/Dodge/Room/Procedural.hs 118;" f
zipCountDown src/Dodge/Room/Procedural.hs 120;" f
zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f
zoneClouds src/Dodge/Update.hs 460;" f
zoneCreature src/Dodge/Zoning/Creature.hs 54;" f