diff --git a/src/Dodge/Block/Debris.hs b/src/Dodge/Block/Debris.hs index 4b20fc941..cfb7c995a 100644 --- a/src/Dodge/Block/Debris.hs +++ b/src/Dodge/Block/Debris.hs @@ -1,20 +1,20 @@ module Dodge.Block.Debris ( cubeShape, --- dirtColor, + -- dirtColor, makeDoorDebris, makeBlockDebris, makeDebris, makeDebrisDirected, ) where -import Dodge.Material.Color -import qualified Data.IntMap.Strict as IM -import Dodge.ShiftPoint import Data.Foldable +import qualified Data.IntMap.Strict as IM import qualified Data.IntSet as IS import Data.Maybe import Dodge.Data.World +import Dodge.Material.Color import Dodge.Material.Sound +import Dodge.ShiftPoint import Dodge.WorldEvent.Sound import Geometry import Grid @@ -30,7 +30,7 @@ makeDoorDebris dr w = w & makeDebris mt p p = centroid . fmap fst $ (dr ^. drFootPrint) & each . each %~ shiftPointBy p2a mt = fromMaybe Stone $ do wlids <- w ^? cWorld . lWorld . doors . ix (_drID dr) . drFootPrint - ((wlid,_),_) <- IM.minViewWithKey wlids + ((wlid, _), _) <- IM.minViewWithKey wlids w ^? cWorld . lWorld . walls . ix wlid . wlMaterial makeBlockDebris :: Block -> World -> World @@ -44,33 +44,39 @@ makeBlockDebris bl w = foldl' (flip $ makeDebris mt) w ps wl <- w ^? cWorld . lWorld . walls . ix wlid return $ _wlMaterial wl ---makeDebris :: Material -> Color -> Point2 -> World -> World +-- makeDebris :: Material -> Color -> Point2 -> World -> World makeDebris :: Material -> Point2 -> World -> World makeDebris = makeDebrisDirected (2 * pi) 0 -makeDebrisDirected :: Float -> Float -> Material -> Point2 -> World -> World ---makeDebrisDirected :: Float -> Float -> Material -> Color -> Point2 -> World -> World ---makeDebrisDirected arcrad dir bm col p w = +makeDebrisDirected :: Float -> Float -> Material -> Point2 -> World -> World +-- makeDebrisDirected :: Float -> Float -> Material -> Color -> Point2 -> World -> World +-- makeDebrisDirected arcrad dir bm col p w = makeDebrisDirected arcrad dir bm p w = w --- & flip (foldl' (flip $ plNew (cWorld . lWorld . props) prID)) thedebris - & cWorld . lWorld . debris <>~ thedebris - & randGen .~ newg + -- & flip (foldl' (flip $ plNew (cWorld . lWorld . props) prID)) thedebris + & cWorld + . lWorld + . debris + <>~ thedebris + & randGen + .~ newg & soundOriginsIDsAt [MaterialSound bm i | i <- [0, 1, 2]] (destroyMatS bm) p where (thedebris, newg) = mapM f [35, 55, 75, 95] & runState $ _randGen w f h = do v <- rotateV (dir - arcrad / 2) <$> randInArcStrip 1 2 arcrad spinspeed <- randomR (-0.2, -0.1) & state --- basedebris <- baseDebris bm - return $ DebrisChunk - { _dbPos = p `v2z` h --- , _dbType = BlockDebris col - , _dbType = BlockDebris (materialColor bm) - , _dbVel = v `v2z` 0 - , _dbRot = Q.qID - , _dbSpin = Q.axisAngle (vNormal v `v2z` 0) spinspeed - } + -- basedebris <- baseDebris bm + return $ + DebrisChunk + { _dbPos = p `v2z` h + , -- , _dbType = BlockDebris col + _dbType = BlockDebris (materialColor bm) + , _dbVel = v `v2z` 0 + , _dbRot = Q.qID + , _dbSpin = Q.axisAngle (vNormal v `v2z` 0) spinspeed + } + -- basedebris -- & prColor .~ col -- & prPos .~ p @@ -91,9 +97,13 @@ debrisSize mt = case mt of Electronics -> 10 Flesh -> 10 ForceField -> 10 + Photovoltaic -> 10 + LightningRod -> 10 + Pyroelectric -> 10 + Piezoelectric -> 10 ---shardShape :: Float -> Shape ---shardShape size = +-- shardShape :: Float -> Shape +-- shardShape size = -- translateSHz (- size) $ -- upperPrismPolySU -- size @@ -102,10 +112,10 @@ debrisSize mt = case mt of -- , V2 (- size) (-1) -- ] -- ---jaggedShape :: State StdGen Shape ---jaggedShape = do +-- jaggedShape :: State StdGen Shape +-- jaggedShape = do -- s <- randomR (4, 10) & state -- return $ shardShape s cubeShape :: Float -> Shape -cubeShape size = translateSHz (- size) $ upperPrismPolySU (2 * size) $ square size +cubeShape size = translateSHz (-size) $ upperPrismPolySU (2 * size) $ square size diff --git a/src/Dodge/Data/GenWorld.hs b/src/Dodge/Data/GenWorld.hs index 3c98f90c3..269c9999d 100644 --- a/src/Dodge/Data/GenWorld.hs +++ b/src/Dodge/Data/GenWorld.hs @@ -24,7 +24,7 @@ import System.Random data GenWorld = GenWorld { _gwWorld :: World , _genRooms :: IM.IntMap Room - , _genPmnt :: IM.IntMap Placement + , _genPmnt :: IM.IntMap Placement -- stored generated placements , _genInts :: IM.IntMap Int } @@ -138,7 +138,8 @@ data Room = Room , _rmPos :: [RoomPos] , _rmPath :: S.Set (Point2, Point2) , _rmPmnts :: [Placement] - , _rmInPmnt :: [(Int,GenWorld -> Placement)] + , _rmInPmnt :: [(Int,GenWorld -> Placement)] -- so far as I can tell, + -- the first Int only determines the order in which these are applied , _rmBound :: [[Point2]] , _rmFloor :: Floor , _rmName :: String diff --git a/src/Dodge/Data/Material.hs b/src/Dodge/Data/Material.hs index 51d43a41a..605916630 100644 --- a/src/Dodge/Data/Material.hs +++ b/src/Dodge/Data/Material.hs @@ -17,6 +17,10 @@ data Material | Flesh | Electronics | ForceField + | Photovoltaic + | LightningRod + | Pyroelectric + | Piezoelectric deriving (Eq, Ord, Show, Bounded, Enum, Read) --Generic, Flat) deriveJSON defaultOptions ''Material diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 20964e003..37dfd9fb7 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -31,7 +31,7 @@ initialRoomTree = [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , HELD SPARKGUN])] itemRooms - , intAnno lasSensorTurretTest + , lasSensorTurretTest , -- , AnRoom $ tanksRoom [] [] <&> rmPmnts .~ [] -- , AnRoom $ tanksRoom [] [] -- , AnRoom $ roomCCrits 0 @@ -63,7 +63,7 @@ initialRoomTree = $ tanksRoom [] [] >>= rToOnward "empty tanksRoom" . pure . cleatOnward , passthroughLockKeyLists lockRoomKeyItems itemRooms , randomChallenges - , intAnno lasSensorTurretTest + , lasSensorTurretTest , -- ,[AnTree $ fmap pure roomCCrits] -- ,[AirlockAno] -- ,[Corridor] diff --git a/src/Dodge/LevelGen.hs b/src/Dodge/LevelGen.hs index 66b6caf19..0adacce4c 100644 --- a/src/Dodge/LevelGen.hs +++ b/src/Dodge/LevelGen.hs @@ -31,6 +31,7 @@ generateWorldFromSeed rdata i = do postGenerationProcessing :: RenderData -> GenWorld -> IO World postGenerationProcessing _ gw = do let w = _gwWorld gw & cWorld . cwTiles .~ (tilesFromRooms . IM.elems $ _genRooms gw) + putStrLn $ show $ gw ^. genInts return $ foldl' assignPushDoors w (w ^. cWorld . lWorld . doors) assignPushDoors :: World -> Door -> World diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index b8f1df2a8..b23c24341 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -24,13 +24,14 @@ lockRoomMultiItems = lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] lockRoomKeyItems = - [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD]) - , (sensorRoomRunPast LaserSensor, return LASER) - , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) - , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) - , (const glassLessonRunPast, takeOne [LASER]) - , (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD]) - , (keyCardRoomRunPast 0, return (HELD $ KEYCARD 0)) + [ (lasCenSensEdge, takeOne [ HELD FLATSHIELD]) +-- [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD]) +-- , (sensorRoomRunPast LaserSensor, return LASER) +-- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) +-- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) +-- , (const glassLessonRunPast, takeOne [LASER]) +-- , (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD]) +-- , (keyCardRoomRunPast 0, return (HELD $ KEYCARD 0)) ] keyCardRunPastRand :: RandomGen g => [(Int -> State g (MetaTree Room String), State g ItemType)] diff --git a/src/Dodge/Material/Color.hs b/src/Dodge/Material/Color.hs index dbcdf2f35..17487c174 100644 --- a/src/Dodge/Material/Color.hs +++ b/src/Dodge/Material/Color.hs @@ -16,3 +16,7 @@ materialColor = \case Flesh -> red Electronics -> greyN 0.2 ForceField -> magenta + Photovoltaic -> yellow + LightningRod -> yellow + Pyroelectric -> yellow + Piezoelectric -> yellow diff --git a/src/Dodge/Material/Damage.hs b/src/Dodge/Material/Damage.hs index 78a58ddd0..81627104b 100644 --- a/src/Dodge/Material/Damage.hs +++ b/src/Dodge/Material/Damage.hs @@ -25,6 +25,10 @@ damMatSideEffect dm = \case Dirt -> damageDirt dm Glass -> damageGlass dm Crystal -> damageCrystal dm + Photovoltaic -> damagePhotovoltaic dm + LightningRod -> damageLightningRod dm + Pyroelectric -> damagePyroelectric dm + Piezoelectric -> damagePiezoelectric dm _ -> defDamageMaterial dm defDamageMaterial :: Damage -> ECW -> World -> (Int,World) @@ -66,6 +70,56 @@ damageStone dm ecw w = case dm of so = DamageHitSound (w ^. cWorld . lWorld . lClock) outTo x t = x -.- squashNormalizeV t +damageLightningRod :: Damage -> ECW -> World -> (Int,World) +damageLightningRod dm ecw w = case dm of + Electrical{} -> (dm ^. dmAmount, w) + _ -> damageStone dm ecw w + +damagePyroelectric :: Damage -> ECW -> World -> (Int,World) +damagePyroelectric dm ecw w = case dm of + Flaming{} -> (dm ^. dmAmount, w) + Explosive{} -> (dm ^. dmAmount, w) + Sparking{} -> (dm ^. dmAmount, w) + _ -> damageStone dm ecw w + +-- this should be correct +-- to be honest, we shouldn't just pass an int forward here... +damagePiezoelectric :: Damage -> ECW -> World -> (Int,World) +damagePiezoelectric = damageStone + + +damagePhotovoltaic :: Damage -> ECW -> World -> (Int,World) +damagePhotovoltaic dm ecw w = case dm of + Lasering _ p t -> f dmam $ laserSpark (outTo p t) (rdir p t) + Piercing _ p t -> + f dmam $ makeSpark NormalSpark (outTo p t) (rdir p t) + . makeDustAt Stone 200 (addZ 20 (outTo p t)) +-- . randsound p [slapS, slap1S,slap2S,slap3S,slap4S,slap5S,slap6S,slap7S] + . randsound p [slapS, slap1S, slap2S] + Blunt _ p t -> f dmam $ makeDustAt Stone 200 (addZ 20 (outTo p t)) + Shattering _ p t -> f dmam $ makeDustAt Stone 200 (addZ 20 (outTo p t)) + Crushing{} -> f dmam id + Explosive{} -> f dmam id + Sparking{} -> f 0 id + Flaming{} -> f 0 id + Electrical{} -> f 0 id + Poison{} -> f 0 id + Enterrement{} -> f 0 id + Flashing{} -> f 0 id + where + f x g = (x, g w) + dmam = dm ^. dmAmount + rdir p t = argV $ reflectIn v t + where + v = case ecw of + Right wl -> uncurry (-) $ _wlLine wl + Left cr -> vNormal (p - cr ^. crPos . _xy) + randsound p xs = + let (x, g) = runState (takeOne xs) $ _randGen w + in soundStart so p x Nothing . set randGen g + so = DamageHitSound (w ^. cWorld . lWorld . lClock) + outTo x t = x -.- squashNormalizeV t + damageMetal :: Damage -> ECW -> World -> (Int,World) damageMetal dm ecw w = case dm of Lasering _ p t -> f 0 $ laserSpark (outTo p t) (rdir p t) diff --git a/src/Dodge/Material/Sound.hs b/src/Dodge/Material/Sound.hs index d60710f75..be786645d 100644 --- a/src/Dodge/Material/Sound.hs +++ b/src/Dodge/Material/Sound.hs @@ -15,6 +15,10 @@ destroyMatS mat = case mat of Electronics -> [metal1S, metal2S, metal3S, metal4S, metal5S, metal6S,metal7S] Flesh -> [gut1S, gut2S, gut3S, gut4S, gut5S, gut6S] ForceField -> [] + Photovoltaic -> [glassShat1S, glassShat2S, glassShat3S, glassShat4S] + LightningRod -> [glassShat1S, glassShat2S, glassShat3S, glassShat4S] + Pyroelectric -> [glassShat1S, glassShat2S, glassShat3S, glassShat4S] + Piezoelectric -> [glassShat1S, glassShat2S, glassShat3S, glassShat4S] --weakenMatS :: Material -> [SoundID] --weakenMatS mat = case mat of diff --git a/src/Dodge/Placement/Instance/LightSource.hs b/src/Dodge/Placement/Instance/LightSource.hs index 5a5239c14..82ae608ae 100644 --- a/src/Dodge/Placement/Instance/LightSource.hs +++ b/src/Dodge/Placement/Instance/LightSource.hs @@ -1,8 +1,11 @@ module Dodge.Placement.Instance.LightSource ( mntLSOn, + mntLSCond, aShape, aBar, lShape, + jShape, + liShape, mntLightLnkCond, mntLS, vShape, diff --git a/src/Dodge/Placement/Instance/Sensor.hs b/src/Dodge/Placement/Instance/Sensor.hs index 89702906d..dffadcf9c 100644 --- a/src/Dodge/Placement/Instance/Sensor.hs +++ b/src/Dodge/Placement/Instance/Sensor.hs @@ -17,11 +17,18 @@ damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1) $ PutMachine (reverse $ square wdth) ( defaultMachine + & mcMaterial .~ mattype & mcMounts . at OTTrigger .~ mtrid & mcMounts . at OTLightSource ?~ lsid & mcType .~ McDamSensor (DamSensor 0 dt) ) Nothing + where + mattype = case dt of + LaserSensor -> Photovoltaic + ElectricSensor -> LightningRod + ThermalSensor -> Pyroelectric + PhysicalSensor -> Piezoelectric lightSensor :: Float -> Maybe Int -> PlacementSpot -> Placement lightSensor = damageSensor LaserSensor diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index d009de842..16ca7e96a 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -27,8 +27,6 @@ import LensHelp import Linear import NewInt ---import System.Random - -- when placing a placement, we update the world and the room and assign an id -- to the placement. This id should be associated with the type of placement and -- match up with the created id for the object (creature id, flitid id, etc) @@ -199,7 +197,7 @@ plMachine :: plMachine wallpoly mc mitm p rot gw = ( mcid , gw & tolw . machines . at mcid ?~ themc - & gwWorld %~ placeMachineWalls wallpoly mcid wlid + & gwWorld %~ placeMachineWalls (_mcMaterial mc) wallpoly mcid wlid & tolw %~ maybe id placeturretitm mitm ) where @@ -215,10 +213,11 @@ plMachine wallpoly mc mitm p rot gw = itid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . items itm' = itm & itID .~ NInt itid & itLocation .~ OnTurret mcid -placeMachineWalls :: [Point2] -> Int -> Int -> World -> World -placeMachineWalls poly mcid = insertStructureWalls MachinePart baseWall poly mcid +placeMachineWalls :: Material -> [Point2] -> Int -> Int -> World -> World +placeMachineWalls mat poly mcid = insertStructureWalls MachinePart baseWall poly mcid where baseWall = defaultMachineWall & wlStructure . wsMachine .~ mcid + & wlMaterial .~ mat mvLS :: Point3 -> Float -> LightSource -> LightSource mvLS (V3 x y z) rot ls = ls & lsParam . lsPos .~ V3 x y z + startPos diff --git a/src/Dodge/Room/LasTurret.hs b/src/Dodge/Room/LasTurret.hs index b58214b83..73800916f 100644 --- a/src/Dodge/Room/LasTurret.hs +++ b/src/Dodge/Room/LasTurret.hs @@ -14,11 +14,17 @@ module Dodge.Room.LasTurret ( lasCenRunClose1, lasCenRunCloseLongCor, lasRunRand, + setRoomInt, ) where -import Control.Monad -import Data.Foldable (fold) +import Data.Foldable +import Data.Maybe +import Color +import Shape +import Dodge.Placement.Instance.LightSource import Dodge.Room.Path +import Control.Monad +--import Data.Foldable (fold) import Dodge.Room.Procedural import qualified Data.Set as S import Dodge.Cleat @@ -40,9 +46,13 @@ import Geometry import LensHelp import RandomHelp +-- no lights! cenLasTur :: (RandomGen g) => State g Room cenLasTur = do - thelight <- mntLightLnkCond $ rprBool $ const . isInLnk +-- lshape <- takeOne [vShape, lShape, jShape, liShape] +-- let lightn i = mntLSCond (fmap (fmap $ colorSH black) lshape) +-- $ rprBool $ const . (\rp -> PolyEdge i `S.member` (fold (rp ^? rpType . rplsType))) +-- thelight <- mntLightLnkCond $ rprBool $ const . isInLnk roomNgon 8 200 <&> rmPmnts .~ [ putLasTurret 0.02 @@ -50,8 +60,11 @@ cenLasTur = do (resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 100 <&> (,S.singleton UsedPosLow))) 30 covershape - , thelight +-- , lightn 0 +-- , lightn 3 +-- , lightn 6 ] + <&> rmPath %~ addNodesCrossingCirc 0 30 where covershape = rectNSWE 10 (-10) (-20) 20 @@ -131,24 +144,57 @@ healthTest n = do , cleatOnward door ] -lasSensorTurretTest :: (RandomGen g) => Int -> State g (MetaTree Room String) -lasSensorTurretTest n = do - cenroom <- shuffleLinks . lightSensInsideDoor n =<< cenLasTur +lasSensorTurretTest :: State LayoutVars (MetaTree Room String) +lasSensorTurretTest = do + n <- nextLayoutInt + cenroom' <- shuffleLinks . lightSensInsideDoor n =<< cenLasTur + (i,cenroom'') <- setRoomInt cenroom' + lshape <- takeOne [vShape, lShape, jShape, liShape] + let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a +_rpDir rp)) + let cenroom = cenroom'' + & rmInPmnt <>~ + [(0, alight pi . f i) + ,(0, alight (0.5*pi) . f i) + ,(0, alight (1.5*pi) . f i)] rToOnward "lasSensorTurretTest" $ treePost [door, cenroom, triggerDoorRoom n, cleatOnward door] + where + f i gw = fromJust $ find (isused ._rpType) (gw ^?! genRooms . ix (gw ^?! genInts . ix i) . rmPos) + isused UsedOutLink{_rplsChildNum = 0} = True + isused _ = False -lasCenSensEdge :: (RandomGen g) => Int -> State g (MetaTree Room String) +-- note the double usage of the int, shouldn't cause a problem +lasCenSensEdge :: Int -> State LayoutVars (MetaTree Room String) lasCenSensEdge n = do - cenroom <- shuffleLinks . lightSensByDoor n =<< cenLasTur + cenroom' <- (shuffleLinks . lightSensByDoor n =<< cenLasTur) + (i,cenroom'') <- setRoomInt cenroom' + lshape <- takeOne [vShape, lShape, jShape, liShape] + let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a +_rpDir rp)) + let cenroom = cenroom'' + & rmInPmnt <>~ + [(0, alight pi . f i) + ,(0, alight (0.5*pi) . f i) + ,(0, alight (1.5*pi) . f i)] let doorroom = triggerDoorRoom n rToOnward "lasCenSensEdge" $ treeFromTrunk [door] $ Node cenroom [ treePost [doorroom, cleatOnward door] - , treePost [door, cleatLabel 0 corridor] + , treePost [door, cleatLabel n corridor] ] + where + f i gw = fromJust $ find (isused ._rpType) (gw ^?! genRooms . ix (gw ^?! genInts . ix i) . rmPos) + isused UsedOutLink{_rplsChildNum = 0} = True + isused _ = False + +setRoomInt :: Room -> State LayoutVars (Int, Room) +setRoomInt 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) lasRunYinYang :: (RandomGen g) => State g (MetaTree Room String) lasRunYinYang = do diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index efa5643e2..366b29d8d 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,42 +1,42 @@ {-# OPTIONS_GHC -Wno-unused-imports #-} + module Dodge.Room.Tutorial where -import Data.Maybe -import Dodge.LockAndKey -import Dodge.Room.SensorDoor -import Dodge.Room.Room -import Dodge.Data.AmmoType -import Dodge.Room.Path -import Dodge.Room.Pillar -import Dodge.Room.Boss -import Dodge.Room.Tanks -import Dodge.Room.LongDoor -import Dodge.Layout -import Dodge.Item.Held.Utility import Control.Monad import qualified Data.IntMap.Strict as IM import qualified Data.IntSet as IS +import Data.Maybe import Data.Maybe (mapMaybe) import qualified Data.Set as S import Dodge.Cleat +import Dodge.Data.AmmoType import Dodge.Data.GenWorld import Dodge.Data.MTRS import Dodge.Default.Terminal import Dodge.Item.Ammo import Dodge.Item.Held.Cane +import Dodge.Item.Held.Utility +import Dodge.Layout import Dodge.LevelGen.PlacementHelper +import Dodge.LockAndKey import Dodge.Placement.Instance import Dodge.PlacementSpot import Dodge.Room.Airlock +import Dodge.Room.Boss import Dodge.Room.Corridor import Dodge.Room.Door import Dodge.Room.LasTurret import Dodge.Room.Link +import Dodge.Room.LongDoor import Dodge.Room.Ngon +import Dodge.Room.Path +import Dodge.Room.Pillar import Dodge.Room.Procedural import Dodge.Room.RezBox import Dodge.Room.RoadBlock import Dodge.Room.Room +import Dodge.Room.SensorDoor +import Dodge.Room.Tanks import Dodge.Room.Warning import Dodge.RoomLink import Dodge.Terminal @@ -52,45 +52,50 @@ tutAnoTree :: State LayoutVars MTRS tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox --- , return . tToBTree "door" $ treePost [corridor, cleatOnward door] , corDoor --- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) - , lasRunRand --- , passthroughLockKeyLists lockRoomKeyItems itemRooms - , tToBTree "door" . return <$> return (cleatOnward door) - , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) --- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) --- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) --- , passthroughLockKeyLists --- [(sensorRoomRunPast ElectricSensor, takeOne --- [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , --- HELD SPARKGUN])] --- itemRooms --- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) --- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) - , tToBTree "sdr" . return . cleatOnward <$> - (shuffleLinks =<< distributerRoom BulletAmmo 100000) ---aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom ---aaa---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] [] ---aaa-- , return $ tToBTree "door" $ return $ cleatOnward door ---aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa-- , tToBTree "sdr" . return . cleatOnward <$> ---aaa-- (shuffleLinks =<< tanksPipesRoom) ---aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa , return $ tToBTree "door" $ return $ cleatOnward door ---aaa , tutHub ---aaa , chasmSpitTerminal ---aaa , tutLight ---aaa , tutDrop ---aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor ---aaa ---- , AnTree $ pickupTut ---aaa ---- , AnTree $ weaponTut + , lasSensorTurretTest +--ccc , passthroughLockKeyLists lockRoomKeyItems itemRooms +--bbb , -- , return . tToBTree "door" $ treePost [corridor, cleatOnward door] +--bbb corDoor +--bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb lasRunRand +--bbb , corDoor +--bbb , passthroughLockKeyLists lockRoomKeyItems itemRooms +--bbb , -- , passthroughLockKeyLists lockRoomKeyItems itemRooms +--bbb tToBTree "door" . return <$> return (cleatOnward door) +--bbb , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb -- , passthroughLockKeyLists +--bbb -- [(sensorRoomRunPast ElectricSensor, takeOne +--bbb -- [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , +--bbb -- HELD SPARKGUN])] +--bbb -- itemRooms +--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) +--bbb tToBTree "sdr" . return . cleatOnward +--bbb <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000) +--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom +--bbb -- aaa---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] [] +--bbb -- aaa-- , return $ tToBTree "door" $ return $ cleatOnward door +--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa-- , tToBTree "sdr" . return . cleatOnward <$> +--bbb -- aaa-- (shuffleLinks =<< tanksPipesRoom) +--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa , return $ tToBTree "door" $ return $ cleatOnward door +--bbb -- aaa , tutHub +--bbb -- aaa , chasmSpitTerminal +--bbb -- aaa , tutLight +--bbb -- aaa , tutDrop +--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor +--bbb -- aaa ---- , AnTree $ pickupTut +--bbb -- aaa ---- , AnTree $ weaponTut ] foldMTRS :: @@ -100,13 +105,6 @@ foldMTRS xs = do ys <- sequence xs return $ foldr1 attachOnward' ys -setRoomInt :: Room -> State LayoutVars (Int, Room) -setRoomInt 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) - setTreeInts :: Tree Room -> State LayoutVars ([Int], Tree Room) setTreeInts x = do y <- traverse setRoomInt x @@ -116,7 +114,7 @@ tutDrop :: State LayoutVars (MetaTree Room String) tutDrop = do x <- shuffleLinks =<< roomNgon 6 100 i <- nextLayoutInt - --let y = decontamRoom i + -- let y = decontamRoom i (j, y) <- setRoomInt (decontamRoom i) rm <- roomRectAutoLights 40 100 return $ @@ -129,9 +127,9 @@ tutDrop = do in putMessageTerminal (defaultTerminal & tmBootLines .~ ss <> tlSetStatus (TerminalPressTo $ show x <> "QUIT") <> tlDoEffect TmWdWdPowerDownTerminal) & plSpot - .~ rprBoolShift - isUnusedLnk - (\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow)) + .~ rprBoolShift + isUnusedLnk + (\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow)) ss = [ makeTermLine "--------------------------------------------" , makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS" @@ -152,18 +150,24 @@ cChasm = do x <- state $ randomR (150, 300) y <- state $ randomR (150, 300) roomRectAutoLights x y - <&> rmLinks %~ setOutLinks (isCornerLink NorthWest) - <&> rmLinks %~ setInLinks (isCornerLink SouthWest) - <&> rmPmnts <>~ [sps0 $ putConvexChasm (rectNSWE (y -50) 50 0 (x -50))] + <&> rmLinks + %~ setOutLinks (isCornerLink NorthWest) + <&> rmLinks + %~ setInLinks (isCornerLink SouthWest) + <&> rmPmnts + <>~ [sps0 $ putConvexChasm (rectNSWE (y - 50) 50 0 (x - 50))] lChasm :: State LayoutVars Room lChasm = do x <- state $ randomR (150, 300) y <- state $ randomR (150, 300) roomRectAutoLights x y - <&> rmLinks %~ setOutLinks (isCornerLink NorthWest) - <&> rmLinks %~ setInLinks (isCornerLink SouthEast) - <&> rmPmnts <>~ [sps0 $ putConvexChasm (rectNSWE (y -50) 0 0 (x -50))] + <&> rmLinks + %~ setOutLinks (isCornerLink NorthWest) + <&> rmLinks + %~ setInLinks (isCornerLink SouthEast) + <&> rmPmnts + <>~ [sps0 $ putConvexChasm (rectNSWE (y - 50) 0 0 (x - 50))] -- the Float is the width of the bridge zChasm :: Float -> State LayoutVars Room @@ -171,13 +175,16 @@ zChasm z = do x <- state $ randomR (150, 300) y <- state $ randomR (150, 300) roomRectAutoLights x y - <&> rmLinks %~ setOutLinks (isCornerLink NorthWest) - <&> rmLinks %~ setInLinks (isCornerLink SouthEast) - <&> rmPath %~ addNodesCrossing (V2 0 (y/2),V2 x (y/2)) + <&> rmLinks + %~ setOutLinks (isCornerLink NorthWest) + <&> rmLinks + %~ setInLinks (isCornerLink SouthEast) + <&> rmPath + %~ addNodesCrossing (V2 0 (y / 2), V2 x (y / 2)) <&> rmPmnts - <>~ [ sps0 $ putConvexChasm (rectNSWE (y / 2 - z) 0 0 (x -50)) - , sps0 $ putConvexChasm (rectNSWE y (y / 2 + z) 50 x) - ] + <>~ [ sps0 $ putConvexChasm (rectNSWE (y / 2 - z) 0 0 (x - 50)) + , sps0 $ putConvexChasm (rectNSWE y (y / 2 + z) 50 x) + ] midChasm :: State LayoutVars Room midChasm = do @@ -187,9 +194,12 @@ midChasm = do cs <- join $ takeOne [cenoct x y, censquare x y] shuffleLinks $ r - & rmLinks %~ setOutLinks (isMidEdgeLink r North) - & rmLinks %~ setInLinks (isMidEdgeLink r South) - & rmPmnts <>~ cs + & rmLinks + %~ setOutLinks (isMidEdgeLink r North) + & rmLinks + %~ setInLinks (isMidEdgeLink r South) + & rmPmnts + <>~ cs where censquare x y = do z <- state $ randomR (40, 60) @@ -206,26 +216,31 @@ midChasmPlatform = do cs <- join $ takeOne [censquare x y] shuffleLinks $ r - & rmLinks %~ setOutLinks (isMidEdgeLink r North) - & rmLinks %~ setInLinks (isMidEdgeLink r South) - & rmPmnts <>~ cs + & rmLinks + %~ setOutLinks (isMidEdgeLink r North) + & rmLinks + %~ setInLinks (isMidEdgeLink r South) + & rmPmnts + <>~ cs where censquare x y = do z <- state $ randomR (40, 60) - let (chsms,clfs) = sqPlatformChasm 20 (min x y/2 - z) - --return [sps0 $ putConvexChasm (rectNSWE (y - z) z z (x - z))] - return [sps0 $ PutChasm - (fmap (fmap (+ V2 (x/2) (y/2))) chsms) - (fmap (fmap (+ V2 (x/2) (y/2))) clfs) - ]-- (rectNSWE (y - z) z z (x - z))] --- cenoct x y = --- return --- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] + let (chsms, clfs) = sqPlatformChasm 20 (min x y / 2 - z) + -- return [sps0 $ putConvexChasm (rectNSWE (y - z) z z (x - z))] + return + [ sps0 $ + PutChasm + (fmap (fmap (+ V2 (x / 2) (y / 2))) chsms) + (fmap (fmap (+ V2 (x / 2) (y / 2))) clfs) + ] -- (rectNSWE (y - z) z z (x - z))] + -- cenoct x y = + -- return + -- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] -sqPlatformChasm :: Float -> Float -> ([[Point2]],[[Point2]]) -sqPlatformChasm b a = - ( [[ibr,obr,otr,itr],[itr,otr,otl,itl],[itl,otl,obl,ibl],[ibl,obl,obr,ibr]] - , [[obr,otr,otl,obl], [ibr,ibl, itl, itr]] +sqPlatformChasm :: Float -> Float -> ([[Point2]], [[Point2]]) +sqPlatformChasm b a = + ( [[ibr, obr, otr, itr], [itr, otr, otl, itl], [itl, otl, obl, ibl], [ibl, obl, obr, ibr]] + , [[obr, otr, otl, obl], [ibr, ibl, itl, itr]] ) where obr = V2 a (-a) @@ -237,10 +252,10 @@ sqPlatformChasm b a = itl = V2 (-b) b itr = V2 b b -sqSpitChasm :: Float -> Float -> ([[Point2]],[[Point2]]) -sqSpitChasm b a = - ( [[ibr,obr,otr,itr],[itr,otr,otl,itl],[itl,otl,obl,ibl]] - , [[ibr,obr,otr,otl,obl,ibl,itl,itr]] +sqSpitChasm :: Float -> Float -> ([[Point2]], [[Point2]]) +sqSpitChasm b a = + ( [[ibr, obr, otr, itr], [itr, otr, otl, itl], [itl, otl, obl, ibl]] + , [[ibr, obr, otr, otl, obl, ibl, itl, itr]] ) where obr = V2 a (-a) @@ -260,24 +275,30 @@ midChasmSpit = do cs <- join $ takeOne [censquare x y] shuffleLinks $ r - & rmLinks %~ setOutLinks - (\rl -> isMidEdgeLink r North rl - || isMidEdgeLink r East rl - || isMidEdgeLink r West rl + & rmLinks + %~ setOutLinks + ( \rl -> + isMidEdgeLink r North rl + || isMidEdgeLink r East rl + || isMidEdgeLink r West rl ) - & rmLinks %~ setInLinks (isMidEdgeLink r South) - & rmPmnts .~ cs + & rmLinks + %~ setInLinks (isMidEdgeLink r South) + & rmPmnts + .~ cs where censquare x y = do z <- state $ randomR (40, 60) - let (chsms,clfs) = sqSpitChasm 20 (min x y/2 - z) - return [sps0 $ PutChasm - (fmap (fmap (+ V2 (x/2) (y/2))) chsms) - (fmap (fmap (+ V2 (x/2) (y/2))) clfs) - ]-- (rectNSWE (y - z) z z (x - z))] --- cenoct x y = --- return --- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] + let (chsms, clfs) = sqSpitChasm 20 (min x y / 2 - z) + return + [ sps0 $ + PutChasm + (fmap (fmap (+ V2 (x / 2) (y / 2))) chsms) + (fmap (fmap (+ V2 (x / 2) (y / 2))) clfs) + ] -- (rectNSWE (y - z) z z (x - z))] + -- cenoct x y = + -- return + -- [sps0 $ putConvexChasm $ (V2 (x / 2) (y / 2) +) <$> polyOrthDist 8 (min x y / 2 - 25)] chasmSpitTerminal :: State LayoutVars MTRS chasmSpitTerminal = do @@ -285,28 +306,37 @@ chasmSpitTerminal = do y <- midChasmSpit l3 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 0 rp l4 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 1 rp - let y' = y & rmPmnts <>~ [l3,l4] - return $ tToBTree "chasmTerm" $ Node (addDoorToggleTerminal' i1 (PS 150 0) y') - [treePost [triggerDoorRoom i1, critDeadEnd] - ,treePost [triggerDoorRoom i1, critDeadEnd] - ,return $ cleatOnward $ triggerDoorRoom i1 - ] + let y' = y & rmPmnts <>~ [l3, l4] + return $ + tToBTree "chasmTerm" $ + Node + (addDoorToggleTerminal' i1 (PS 150 0) y') + [ treePost [triggerDoorRoom i1, critDeadEnd] + , treePost [triggerDoorRoom i1, critDeadEnd] + , return $ cleatOnward $ triggerDoorRoom i1 + ] polyChasm :: Int -> Float -> State LayoutVars Room polyChasm n x = shuffleLinks =<< ( roomNgon n x - <&> rmPmnts <>~ [sps0 $ putConvexChasm $ polyOrthDist n (x -30)] - <&> rmLinks %~ setOutLinks (\rl -> rl ^. rlPos . _y > 0) - <&> rmLinks %~ setInLinks (\rl -> rl ^. rlPos . _y < (5 - x)) + <&> rmPmnts + <>~ [sps0 $ putConvexChasm $ polyOrthDist n (x - 30)] + <&> rmLinks + %~ setOutLinks (\rl -> rl ^. rlPos . _y > 0) + <&> rmLinks + %~ setInLinks (\rl -> rl ^. rlPos . _y < (5 - x)) ) polyChasmC :: Int -> Float -> State LayoutVars Room polyChasmC n x = roomNgon n x - <&> rmPmnts <>~ [sps0 $ putConvexChasm $ rectNSWE x (60 - x) (-40) 40] - <&> rmLinks %~ setInLinks (\rl -> PolyEdge 1 `S.member` (rl ^. rlType)) - <&> rmLinks %~ setOutLinks (\rl -> PolyEdge (n -1) `S.member` (rl ^. rlType)) + <&> rmPmnts + <>~ [sps0 $ putConvexChasm $ rectNSWE x (60 - x) (-40) 40] + <&> rmLinks + %~ setInLinks (\rl -> PolyEdge 1 `S.member` (rl ^. rlType)) + <&> rmLinks + %~ setOutLinks (\rl -> PolyEdge (n - 1) `S.member` (rl ^. rlType)) chasmSimpleMaze :: State LayoutVars Room chasmSimpleMaze = @@ -338,10 +368,11 @@ tutLight = do return $ tToBTree "TutLight" $ treePost - [ x & rmPmnts <>~ - [sps g (PutFlIt led) - ,sps g (PutFlIt battery) - ] + [ x + & rmPmnts + <>~ [ sps g (PutFlIt led) + , sps g (PutFlIt battery) + ] , corridor & rmPmnts .~ mempty , removeLights y , corridor & rmPmnts .~ mempty @@ -353,9 +384,12 @@ tutLight = do g = PSPos (\x _ -> f x) (const id) Nothing where f x = case _rpType x of - NotLink{} | null (x ^. rpPlacementUse . at UsedPosFloor) - -> Just (PS (_rpPos x) (_rpDir x) - , x & rpPlacementUse . at UsedPosFloor ?~ ()) + NotLink{} + | null (x ^. rpPlacementUse . at UsedPosFloor) -> + Just + ( PS (_rpPos x) (_rpDir x) + , x & rpPlacementUse . at UsedPosFloor ?~ () + ) _ -> Nothing removeLights :: Room -> Room @@ -374,7 +408,7 @@ tutHub = do k <- nextLayoutInt let a gw = analyserByNthLink - 3 + 3 (RequireDeadCreatures $ getCrsFromRooms is gw) k x <- @@ -382,13 +416,13 @@ tutHub = do . analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i . (rmInPmnt .:~ (0, a)) . addDoorAtNthLinkToggleTerminal 1 ss j --- . addDoorAtNthLinkToggleInterrupt 2 ds j + -- . addDoorAtNthLinkToggleInterrupt 2 ds j . addDoorAtNthLinkToggleInterrupt 2 ds j1 =<< roomNgon 6 100 --- bcor <- treeAttachDeep (return door) <$> blockedCorridor + -- bcor <- treeAttachDeep (return door) <$> blockedCorridor r1 <- r burstRifle <&> rmPmnts .:~ itemshiftterminal r2 <- ammoroom (drumMag & itConsumables ?~ 90) -- <&> rmPmnts .:~ tutorialterminal - --r2 <- r (tinMag & itConsumables ?~ 500) + -- r2 <- r (tinMag & itConsumables ?~ 500) return $ tToBTree "DoorTest" $ Node @@ -396,9 +430,9 @@ tutHub = do [ treeFromPost [triggerDoorRoom i] r1 , treeFromPost [triggerDoorRoom j] r2 , treeFromTrunk [triggerDoorRoom j1] wbp --- , (rmClusterStatus . csLinks . at OnwardCluster .~ Nothing) --- <$> treeAttachDeep wbp (return corridor) - , treeFromPost [] (cleatOnward $ triggerDoorRoom k & rmInPmnt . ix 0 . _1 .~ 1) + , -- , (rmClusterStatus . csLinks . at OnwardCluster .~ Nothing) + -- <$> treeAttachDeep wbp (return corridor) + treeFromPost [] (cleatOnward $ triggerDoorRoom k & rmInPmnt . ix 0 . _1 .~ 1) ] where ds = ["DESTROY THIS TO OPEN THE DOOR"] @@ -420,9 +454,9 @@ tutHub = do putMessageTerminal (defaultTerminal & tmBootLines .~ ss' <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdPowerDownTerminal) & plSpot - .~ rprBoolShift - isUnusedLnk - (\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow)) + .~ rprBoolShift + isUnusedLnk + (\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow)) ss' = [ makeTermLine "---------------------------------------------" , makeTermLine "HOLD [CAPS] AND SCROLL" @@ -455,8 +489,8 @@ getCrsFromRooms' is gw = fmap h $ show $ foldMap f (IM.restrictKeys (gw ^. genRo js = getRoomsFromInts is gw f rm = shortShow <$> rm ^.. rmPmnts . each . plType ---f rm = foldMap g $ rm ^. rmPmnts ---g x = case x ^. plType of +-- f rm = foldMap g $ rm ^. rmPmnts +-- g x = case x ^. plType of -- PutCrit _ -> [x ^?! plMID . _Just] -- _ -> [] @@ -480,26 +514,28 @@ sensorTut = -- <> tlSetStatus (TerminalPressTo "CONTINUE") -tutRezBox :: RandomGen g => State g Room +tutRezBox :: (RandomGen g) => State g Room tutRezBox = do ls <- rezColor return $ roomRect 40 60 1 1 & rmPmnts - .~ [ sPS (V2 20 1) 0 $ PutLS ls - , Placement (PS 0 0) PutNothing Nothing Nothing $ \w _ -> - Just $ - putImmediateMessageTerminal - ( defaultTerminal & tmBootLines .~ s w - <> tlSetStatus (TerminalPressTo "QUIT") - <> tlDoEffect TmWdWdPowerDownTerminal - -- <> tlDoEffect (TmWdWdLeaveTerminal "QUIT") - ) - & plSpot .~ PS (V2 20 0) 0 - ] + .~ [ sPS (V2 20 1) 0 $ PutLS ls + , Placement (PS 0 0) PutNothing Nothing Nothing $ \w _ -> + Just $ + putImmediateMessageTerminal + ( defaultTerminal & tmBootLines .~ s w + <> tlSetStatus (TerminalPressTo "QUIT") + <> tlDoEffect TmWdWdPowerDownTerminal + -- <> tlDoEffect (TmWdWdLeaveTerminal "QUIT") + ) + & plSpot + .~ PS (V2 20 0) 0 + ] & restrictInLinks (\(V2 _ h, _) -> h < 1) & restrictOutLinks (\(V2 _ h, _) -> h > 59) - & rmName .~ "tutRezBox" + & rmName + .~ "tutRezBox" where s w = tutorialMessage1 (w ^. gwWorld . cWorld . cwGen . cwgSeed) @@ -517,23 +553,24 @@ tutorialMessage1 i = , makeTermLine " [D] TO MOVE" , makeTermLine "--------------------------------------------" ] + -- <> tlSetStatus (TerminalPressTo "CONTINUE") -- <> [ makeTermLine "AFTER EXITING THIS TERMINAL YOUR INVENTORY" -- , makeTermLine " AND NEARBY OBJECTS WILL BE DISPLAYED" -- , makeTermLine "--------------------------------------------" -- ] passthroughLockKeyLists :: - [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] - -> [(ItemType, State LayoutVars (MetaTree Room String))] - -> State LayoutVars (MetaTree Room String) + [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] -> + [(ItemType, State LayoutVars (MetaTree Room String))] -> + State LayoutVars (MetaTree Room String) passthroughLockKeyLists ls ks = do - i <- nextLayoutInt - (functionlockroom, randomitemidentity) <- takeOne ls - lr <- functionlockroom i - ii <- randomitemidentity - keyroom <- fromJust $ lookup ii ks - return $ - MTree - ("PassthroughLockKeyLists-" ++ show ii) - (NodeMTree $ MTree "RassThroughLockKeyLists" (NodeMTree lr) [MBranch (toLabel i) keyroom]) - [] + i <- nextLayoutInt + (functionlockroom, randomitemidentity) <- takeOne ls + lr <- functionlockroom i + ii <- randomitemidentity + keyroom <- fromJust $ lookup ii ks + return $ + MTree + ("PassthroughLockKeyLists-" ++ show ii) + (NodeMTree $ MTree "RassThroughLockKeyLists" (NodeMTree lr) [MBranch (toLabel i) keyroom]) + [] diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 9fc99689e..27c4f2e16 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -32,7 +32,9 @@ import Data.Foldable import Data.Monoid testStringInit :: Universe -> [String] -testStringInit u = fmap show $ u ^.. uvWorld . cWorld . lWorld . machines . each . mcHP +testStringInit 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) diff --git a/src/Dodge/Tree/Compose.hs b/src/Dodge/Tree/Compose.hs index 6514e0d69..fababfbed 100644 --- a/src/Dodge/Tree/Compose.hs +++ b/src/Dodge/Tree/Compose.hs @@ -3,7 +3,6 @@ -- | Combining and composing trees of trees. module Dodge.Tree.Compose ( tToBTree, - overwriteLabel, composeTree, decomposeTree, numMetaTree, @@ -16,6 +15,7 @@ module Dodge.Tree.Compose ( attachOnward, attachOnward', showIntsString, + overwriteLabel, module Dodge.Data.MetaTree ) where diff --git a/src/Dodge/Wall/Damage.hs b/src/Dodge/Wall/Damage.hs index e65238433..603faefd1 100644 --- a/src/Dodge/Wall/Damage.hs +++ b/src/Dodge/Wall/Damage.hs @@ -43,6 +43,7 @@ damageWall wlid dt w = fromMaybe (mempty,w) $ do & maybeDestroyDoor drid _ -> (mempty, w') +-- the way that sensor damage is registered is not yet ideal damageMachine :: Damage -> Int -> Int -> World -> (S.Set Int2, World) damageMachine dam x mcid w = case w ^? cWorld . lWorld . machines . ix mcid of Just mc | Just se <- mc ^? mcType . _McDamSensor diff --git a/tags b/tags index 327459bcb..f3fe5f866 100644 --- a/tags +++ b/tags @@ -231,8 +231,7 @@ ConcurrentEffect src/Loop/Data.hs 11;" C Config src/Dodge/Data/Config.hs 48;" t ConstFloat src/Dodge/Data/GenFloat.hs 9;" C ConsumableItemType src/Dodge/Data/Item/Combine.hs 115;" t -ContextDT src/Dodge/Data/DoubleTree.hs 82;" t -ContextLDT src/Dodge/Data/DoubleTree.hs 40;" t +ContextDT src/Dodge/Data/DoubleTree.hs 25;" t ContinentalGovernment src/Dodge/Data/Scenario.hs 51;" C ControlDeckSS src/Dodge/Data/Scenario.hs 89;" C ConvexPoly src/Geometry/ConvexPoly.hs 25;" t @@ -289,14 +288,14 @@ DETECTOR src/Dodge/Data/Item/Combine.hs 33;" C DROPPER src/Dodge/Data/Item/Combine.hs 26;" C DRUMMAG src/Dodge/Data/Item/Combine.hs 108;" C DS src/DoubleStack.hs 3;" t -DT src/Dodge/Data/DoubleTree.hs 29;" C -DTBottomNode src/Dodge/Data/DoubleTree.hs 19;" C +DT src/Dodge/Data/DoubleTree.hs 16;" C +DTBottomNode src/Dodge/Data/DoubleTree.hs 14;" C DTComb src/Dodge/Item/Grammar.hs 165;" t -DTMidAboveNode src/Dodge/Data/DoubleTree.hs 17;" C -DTMidBelowNode src/Dodge/Data/DoubleTree.hs 18;" C -DTRootNode src/Dodge/Data/DoubleTree.hs 15;" C -DTTopNode src/Dodge/Data/DoubleTree.hs 16;" C -DTree src/Dodge/Data/DoubleTree.hs 29;" t +DTMidAboveNode src/Dodge/Data/DoubleTree.hs 12;" C +DTMidBelowNode src/Dodge/Data/DoubleTree.hs 13;" C +DTRootNode src/Dodge/Data/DoubleTree.hs 10;" C +DTTopNode src/Dodge/Data/DoubleTree.hs 11;" C +DTree src/Dodge/Data/DoubleTree.hs 16;" t DamSensor src/Dodge/Data/Machine/Sensor.hs 19;" C Damage src/Dodge/Data/Damage.hs 15;" t DamageHitSound src/Dodge/Data/SoundOrigin.hs 41;" C @@ -347,7 +346,7 @@ DoorLerp src/Dodge/Data/Door.hs 43;" C DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C DoorUpdate src/Dodge/Data/Door.hs 43;" t DoubleRes src/Dodge/Data/Config.hs 113;" C -DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t +DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 9;" t DrawForceField src/Dodge/Data/Wall.hs 37;" C DrawnWall src/Dodge/Data/Wall.hs 33;" C DroneAmmo src/Dodge/Data/AmmoType.hs 13;" C @@ -623,13 +622,6 @@ Kill src/Dodge/Data/ActionPlan.hs 151;" C LASER src/Dodge/Data/Item/Combine.hs 35;" C LDP src/Dodge/Data/SelectionList.hs 13;" C LDParams src/Dodge/Data/SelectionList.hs 13;" t -LDT src/Dodge/Data/DoubleTree.hs 32;" C -LDTBottomNode src/Dodge/Data/DoubleTree.hs 27;" C -LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 25;" C -LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 26;" C -LDTRootNode src/Dodge/Data/DoubleTree.hs 23;" C -LDTTopNode src/Dodge/Data/DoubleTree.hs 24;" C -LDTree src/Dodge/Data/DoubleTree.hs 32;" t LED src/Dodge/Data/Item/Combine.hs 175;" C LIGHTER src/Dodge/Data/Item/Combine.hs 66;" C LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 79;" C @@ -639,7 +631,6 @@ LWorld src/Dodge/Data/LWorld.hs 94;" t LabLink src/Dodge/Data/Room.hs 46;" C LabSS src/Dodge/Data/Scenario.hs 97;" C LabelCluster src/Dodge/Data/RoomCluster.hs 13;" C -LabelDoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 22;" t Laboratory src/Dodge/Data/Scenario.hs 61;" C LampCrit src/Dodge/Data/Creature/Misc.hs 72;" C Large src/Shape/Data.hs 24;" C @@ -659,14 +650,14 @@ Layer src/Picture/Data.hs 20;" t LayoutVars src/Dodge/Data/MetaTree.hs 30;" t LeadTarget src/Dodge/Data/ActionPlan.hs 115;" C LeftForward src/Dodge/Data/Creature/Stance.hs 29;" C -LeftwardDT src/Dodge/Data/DoubleTree.hs 84;" C -LeftwardLDT src/Dodge/Data/DoubleTree.hs 42;" C +LeftwardDT src/Dodge/Data/DoubleTree.hs 27;" C Lethargic src/Dodge/Data/Creature/Perception.hs 53;" C LevelStartSlot src/Dodge/Data/SaveSlot.hs 9;" C LifeSupportSystemsRoomSS src/Dodge/Data/Scenario.hs 113;" C LifeboatBaySS src/Dodge/Data/Scenario.hs 107;" C LightSource src/Dodge/Data/LightSource.hs 21;" t LightSourceDraw src/Dodge/Data/LightSource.hs 11;" t +LightningRod src/Dodge/Data/Material.hs 21;" C LimitedBreathableAtmosphere src/Dodge/Data/Scenario.hs 38;" C LimitedFood src/Dodge/Data/Scenario.hs 39;" C LimitedWater src/Dodge/Data/Scenario.hs 40;" C @@ -678,10 +669,8 @@ LoadWaiting src/Dodge/Data/Universe.hs 100;" C LoadWaitingClicked src/Dodge/Data/Universe.hs 99;" C LoadingBaySS src/Dodge/Data/Scenario.hs 93;" C LoadingScreen src/Dodge/Data/Universe.hs 93;" C -LocDT src/Dodge/Data/DoubleTree.hs 99;" C -LocLDT src/Dodge/Data/DoubleTree.hs 59;" C -LocationDT src/Dodge/Data/DoubleTree.hs 99;" t -LocationLDT src/Dodge/Data/DoubleTree.hs 59;" t +LocDT src/Dodge/Data/DoubleTree.hs 42;" C +LocationDT src/Dodge/Data/DoubleTree.hs 42;" t LoneWolf src/Dodge/Data/Creature/State.hs 24;" C LongAI src/Dodge/Data/Creature/Misc.hs 48;" C LookAround src/Dodge/Data/ActionPlan.hs 138;" C @@ -990,10 +979,12 @@ PausedTimeFlow src/Dodge/Data/World.hs 82;" C Payload src/Dodge/Data/Payload.hs 9;" t PenetrateBullet src/Dodge/Data/Bullet.hs 29;" C Perception src/Dodge/Data/Creature/Perception.hs 30;" t +Photovoltaic src/Dodge/Data/Material.hs 20;" C PhysicalDamage src/Dodge/Data/Damage/Type.hs 4;" C PhysicalSensor src/Dodge/Data/Machine/Sensor.hs 16;" C 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 PlacementSpot src/Dodge/Data/GenWorld.hs 98;" t @@ -1066,6 +1057,7 @@ PutTerminal src/Dodge/Data/GenWorld.hs 42;" C PutTrigger src/Dodge/Data/GenWorld.hs 47;" C PutWall src/Dodge/Data/GenWorld.hs 54;" C PutWorldUpdate src/Dodge/Data/GenWorld.hs 58;" C +Pyroelectric src/Dodge/Data/Material.hs 22;" C QFloat src/Geometry/Data.hs 50;" t QuarterRes src/Dodge/Data/Config.hs 113;" C QuicksaveSlot src/Dodge/Data/SaveSlot.hs 8;" C @@ -1121,8 +1113,7 @@ RewindLeftClick src/Dodge/Data/World.hs 78;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C RightButtonState src/Dodge/Data/RightButtonOptions.hs 13;" t RightForward src/Dodge/Data/Creature/Stance.hs 29;" C -RightwardDT src/Dodge/Data/DoubleTree.hs 91;" C -RightwardLDT src/Dodge/Data/DoubleTree.hs 50;" C +RightwardDT src/Dodge/Data/DoubleTree.hs 34;" C Rocket src/Dodge/Data/Projectile.hs 32;" C RocketHoming src/Dodge/Data/Projectile.hs 39;" t RocketSmoke src/Dodge/Data/Projectile.hs 52;" t @@ -1367,8 +1358,7 @@ ToStop src/Sound/Data.hs 26;" C Toggle src/Dodge/Data/Universe.hs 110;" C Toggle2 src/Dodge/Data/Universe.hs 114;" C ToggleSF src/Dodge/Data/ComposedItem.hs 38;" C -TopDT src/Dodge/Data/DoubleTree.hs 83;" C -TopLDT src/Dodge/Data/DoubleTree.hs 41;" C +TopDT src/Dodge/Data/DoubleTree.hs 26;" C TopMenuOption src/Dodge/Data/Universe.hs 78;" C TorchSF src/Dodge/Data/ComposedItem.hs 46;" C TorpedoBaySS src/Dodge/Data/Scenario.hs 99;" C @@ -1625,16 +1615,16 @@ _camViewFrom src/Dodge/Data/Camera.hs 28;" f _camZoom src/Dodge/Data/Camera.hs 25;" f _canID src/Dodge/Data/LWorld.hs 165;" f _carriage src/Dodge/Data/Creature/Stance.hs 16;" f -_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 86;" f -_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 94;" f -_cdtCloseRight src/Dodge/Data/DoubleTree.hs 88;" f -_cdtCloseRight src/Dodge/Data/DoubleTree.hs 96;" f -_cdtFarLeft src/Dodge/Data/DoubleTree.hs 93;" f -_cdtFarRight src/Dodge/Data/DoubleTree.hs 89;" f -_cdtParent src/Dodge/Data/DoubleTree.hs 87;" f -_cdtParent src/Dodge/Data/DoubleTree.hs 95;" f -_cdtUp src/Dodge/Data/DoubleTree.hs 85;" f -_cdtUp src/Dodge/Data/DoubleTree.hs 92;" f +_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 29;" f +_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 37;" f +_cdtCloseRight src/Dodge/Data/DoubleTree.hs 31;" f +_cdtCloseRight src/Dodge/Data/DoubleTree.hs 39;" f +_cdtFarLeft src/Dodge/Data/DoubleTree.hs 36;" f +_cdtFarRight src/Dodge/Data/DoubleTree.hs 32;" f +_cdtParent src/Dodge/Data/DoubleTree.hs 30;" f +_cdtParent src/Dodge/Data/DoubleTree.hs 38;" f +_cdtUp src/Dodge/Data/DoubleTree.hs 28;" f +_cdtUp src/Dodge/Data/DoubleTree.hs 35;" f _ceSideEffect src/Dodge/Data/Universe.hs 64;" f _ceString src/Dodge/Data/Universe.hs 65;" f _ceilingStencilShader src/Data/Preload/Render.hs 19;" f @@ -1652,18 +1642,6 @@ _clTimer src/Dodge/Data/Cloud.hs 15;" f _clType src/Dodge/Data/Cloud.hs 16;" f _clVel src/Dodge/Data/Cloud.hs 14;" f _clZoning src/Dodge/Data/World.hs 49;" f -_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 44;" f -_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 53;" f -_cldtCloseRight src/Dodge/Data/DoubleTree.hs 47;" f -_cldtCloseRight src/Dodge/Data/DoubleTree.hs 56;" f -_cldtFarLeft src/Dodge/Data/DoubleTree.hs 52;" f -_cldtFarRight src/Dodge/Data/DoubleTree.hs 48;" f -_cldtLink src/Dodge/Data/DoubleTree.hs 46;" f -_cldtLink src/Dodge/Data/DoubleTree.hs 55;" f -_cldtParent src/Dodge/Data/DoubleTree.hs 45;" f -_cldtParent src/Dodge/Data/DoubleTree.hs 54;" f -_cldtUp src/Dodge/Data/DoubleTree.hs 43;" f -_cldtUp src/Dodge/Data/DoubleTree.hs 51;" f _clickPos src/Dodge/Data/Input.hs 42;" f _clickWorldPos src/Dodge/Data/Input.hs 44;" f _cliffs src/Dodge/Data/CWorld.hs 34;" f @@ -1796,9 +1774,9 @@ _dsTimer src/Dodge/Data/Cloud.hs 29;" f _dsType src/Dodge/Data/Cloud.hs 30;" f _dsVel src/Dodge/Data/Cloud.hs 28;" f _dsZoning src/Dodge/Data/World.hs 51;" f -_dtLeft src/Dodge/Data/DoubleTree.hs 29;" f -_dtRight src/Dodge/Data/DoubleTree.hs 29;" f -_dtValue src/Dodge/Data/DoubleTree.hs 29;" f +_dtLeft src/Dodge/Data/DoubleTree.hs 16;" f +_dtRight src/Dodge/Data/DoubleTree.hs 16;" f +_dtValue src/Dodge/Data/DoubleTree.hs 16;" f _dusts src/Dodge/Data/LWorld.hs 99;" f _ebID src/Dodge/Data/EnergyBall/Type.hs 13;" f _ebPos src/Dodge/Data/EnergyBall.hs 17;" f @@ -1956,9 +1934,6 @@ _ldpBorder src/Dodge/Data/SelectionList.hs 17;" f _ldpPos src/Dodge/Data/SelectionList.hs 14;" f _ldpScale src/Dodge/Data/SelectionList.hs 15;" f _ldpVerticalGap src/Dodge/Data/SelectionList.hs 16;" f -_ldtLeft src/Dodge/Data/DoubleTree.hs 34;" f -_ldtRight src/Dodge/Data/DoubleTree.hs 35;" f -_ldtValue src/Dodge/Data/DoubleTree.hs 33;" f _leadTargetBy src/Dodge/Data/ActionPlan.hs 115;" f _lightSources src/Dodge/Data/LWorld.hs 137;" f _lightUBO src/Data/Preload/Render.hs 43;" f @@ -1970,10 +1945,8 @@ _lights src/Dodge/Data/LWorld.hs 138;" f _linearShockwaves src/Dodge/Data/LWorld.hs 120;" f _linkGapEW src/Dodge/Data/Room.hs 36;" f _linkGapNS src/Dodge/Data/Room.hs 37;" f -_locDT src/Dodge/Data/DoubleTree.hs 101;" f -_locDtContext src/Dodge/Data/DoubleTree.hs 100;" f -_locLDT src/Dodge/Data/DoubleTree.hs 61;" f -_locLdtContext src/Dodge/Data/DoubleTree.hs 60;" f +_locDT src/Dodge/Data/DoubleTree.hs 44;" f +_locDtContext src/Dodge/Data/DoubleTree.hs 43;" f _lpColor src/Dodge/Data/Laser.hs 23;" f _lpDir src/Dodge/Data/Laser.hs 22;" f _lpPhaseV src/Dodge/Data/Laser.hs 20;" f @@ -2213,28 +2186,28 @@ _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 142;" f -_rmChildren src/Dodge/Data/GenWorld.hs 153;" f -_rmClusterStatus src/Dodge/Data/GenWorld.hs 155;" f -_rmConnectsTo src/Dodge/Data/GenWorld.hs 150;" f -_rmEndWires src/Dodge/Data/GenWorld.hs 149;" f -_rmFloor src/Dodge/Data/GenWorld.hs 143;" 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 _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 151;" f -_rmMParent src/Dodge/Data/GenWorld.hs 152;" f -_rmName src/Dodge/Data/GenWorld.hs 144;" 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 147;" f -_rmShift src/Dodge/Data/GenWorld.hs 145;" f -_rmStartWires src/Dodge/Data/GenWorld.hs 148;" f -_rmType src/Dodge/Data/GenWorld.hs 154;" f -_rmViewpoints src/Dodge/Data/GenWorld.hs 146;" 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 _rmWidth src/Dodge/Data/Room.hs 38;" f _rpDir src/Dodge/Data/Room.hs 17;" f _rpFlags src/Dodge/Data/Room.hs 18;" f @@ -2528,14 +2501,14 @@ _wsMachine src/Dodge/Data/Wall/Structure.hs 13;" f _xNum src/Dodge/Data/Item/Combine.hs 140;" f _xNum src/Dodge/Data/Item/Combine.hs 150;" f _xNum src/Dodge/Data/Item/Combine.hs 171;" f -aBar src/Dodge/Placement/Instance/LightSource.hs 63;" f +aBar src/Dodge/Placement/Instance/LightSource.hs 66;" f aFlame src/Dodge/Gas.hs 20;" f aGasCloud src/Dodge/Gas.hs 15;" f aRadarPulse src/Dodge/RadarSweep.hs 20;" f -aShape src/Dodge/Placement/Instance/LightSource.hs 88;" f +aShape src/Dodge/Placement/Instance/LightSource.hs 91;" f aSound src/Dodge/SoundLogic.hs 74;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 42;" f -accessTerminal src/Dodge/WorldEffect.hs 66;" f +accessTerminal src/Dodge/WorldEffect.hs 65;" f activateDetonator src/Dodge/Creature/Impulse/UseItem.hs 63;" f activeTargetCursorPic src/Dodge/Targeting/Draw.hs 31;" f addArmour src/Dodge/Creature.hs 82;" f @@ -2563,7 +2536,7 @@ addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f addIndefiniteArticle src/StringHelp.hs 17;" f addNodesCrossing src/Dodge/Room/Path.hs 28;" f addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" f -addPane src/Dodge/Placement/PlaceSpot.hs 171;" f +addPane src/Dodge/Placement/PlaceSpot.hs 169;" f addPointPolygon src/Geometry/Polygon.hs 142;" f addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f @@ -2597,30 +2570,30 @@ 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 119;" f -analyserByNthLink src/Dodge/Room/LasTurret.hs 103;" f +analyserByDoor src/Dodge/Room/LasTurret.hs 131;" f +analyserByNthLink src/Dodge/Room/LasTurret.hs 115;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f angleBetween src/Geometry.hs 158;" f angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 122;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f anythingHitCirc src/Dodge/Base/Collide.hs 342;" f -applyCME src/Dodge/HeldUse.hs 384;" f +applyCME src/Dodge/HeldUse.hs 387;" f applyClip src/Dodge/Debug.hs 138;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyEventIO src/Loop.hs 90;" f applyGravityPU src/Dodge/Projectile/Update.hs 41;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 17;" f -applyInvLock src/Dodge/HeldUse.hs 443;" f +applyInvLock src/Dodge/HeldUse.hs 446;" f applyMagnetsToBul src/Dodge/Bullet.hs 32;" f applyPastDamages src/Dodge/Creature/State.hs 49;" f applyPosition src/Sound.hs 113;" f -applyRecoil src/Dodge/HeldUse.hs 474;" f +applyRecoil src/Dodge/HeldUse.hs 477;" f applyResFactor src/Dodge/Data/Config.hs 126;" f applyResFactorF src/Dodge/Data/Config.hs 135;" f applySetTerminalString src/Dodge/Debug/Terminal.hs 83;" f -applySidePush src/Dodge/HeldUse.hs 574;" f -applySoundCME src/Dodge/HeldUse.hs 464;" f +applySidePush src/Dodge/HeldUse.hs 577;" f +applySoundCME src/Dodge/HeldUse.hs 467;" f applyTerminalCommand src/Dodge/Debug/Terminal.hs 28;" f applyTerminalCommandArguments src/Dodge/Debug/Terminal.hs 44;" f applyTerminalString src/Dodge/Debug/Terminal.hs 22;" f @@ -2628,7 +2601,7 @@ applyToNode src/TreeHelp.hs 65;" f applyToRandomNode src/TreeHelp.hs 151;" f applyToSubforest src/TreeHelp.hs 78;" f applyToSubtree src/TreeHelp.hs 71;" f -applyTorqueCME src/Dodge/HeldUse.hs 585;" f +applyTorqueCME src/Dodge/HeldUse.hs 588;" f applyWorldConfig src/Dodge/Config.hs 55;" f aquamarine src/Color.hs 50;" f arHUD src/Dodge/Item/Scope.hs 140;" f @@ -2699,20 +2672,20 @@ baseSMGShape src/Dodge/Item/Draw/SPic.hs 393;" f baseShoulder src/Dodge/Creature/Picture.hs 114;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 301;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 293;" f -baseStickSpread src/Dodge/HeldUse.hs 334;" f +baseStickSpread src/Dodge/HeldUse.hs 336;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 127;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 39;" f basicCrPict src/Dodge/Creature/Picture.hs 30;" f basicCrShape src/Dodge/Creature/Picture.hs 36;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f -basicMuzFlare src/Dodge/HeldUse.hs 725;" f +basicMuzFlare src/Dodge/HeldUse.hs 728;" f battery src/Dodge/Item/Ammo.hs 60;" f batteryPack src/Dodge/Item/Equipment.hs 38;" f beltMag src/Dodge/Item/Ammo.hs 38;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 226;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 115;" f -bgunSound src/Dodge/HeldUse.hs 529;" f +bgunSound src/Dodge/HeldUse.hs 532;" f bingate src/Dodge/Item/Scope.hs 115;" f black src/Color.hs 54;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 15;" f @@ -2781,7 +2754,7 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 248;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 17;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f -cChasm src/Dodge/Room/Tutorial.hs 150;" f +cChasm src/Dodge/Room/Tutorial.hs 147;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2795,9 +2768,9 @@ cardList src/Dodge/Base/CardinalPoint.hs 7;" f cardVec src/Dodge/Base/CardinalPoint.hs 10;" f cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 28;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f -cdtPropagateFold src/Dodge/DoubleTree.hs 407;" f +cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f -cenLasTur src/Dodge/Room/LasTurret.hs 43;" f +cenLasTur src/Dodge/Room/LasTurret.hs 49;" f centerText src/Picture/Base.hs 176;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f @@ -2817,8 +2790,8 @@ chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 121;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f chasmRotate src/Dodge/Creature/Update.hs 173;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 311;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 282;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 340;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 302;" f chasmTestCorpse src/Dodge/Creature/Update.hs 155;" f chasmTestLiving src/Dodge/Creature/Update.hs 137;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f @@ -2861,7 +2834,6 @@ clampPath src/Dodge/Room/Procedural.hs 146;" f clang1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 817;" f clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 733;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 577;" f -cldtPropagateFold src/Dodge/DoubleTree.hs 358;" f cleanUpPreload src/Preload.hs 10;" f cleanUpSoundPreload src/Preload.hs 15;" f cleanupHalted src/Sound.hs 119;" f @@ -2929,7 +2901,6 @@ composeTree src/Dodge/Tree/Compose.hs 48;" f compressor src/Dodge/Item/Ammo.hs 74;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 665;" f conEffects src/Dodge/Concurrent.hs 12;" f -conLDTToConDT src/Dodge/DoubleTree.hs 22;" f concurrentIS src/Dodge/Update/Input/InGame.hs 292;" f connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 745;" f constructEdges src/Polyhedra.hs 31;" f @@ -3007,15 +2978,15 @@ createGas src/Dodge/Gas.hs 10;" f createHeadLamp src/Dodge/Euse.hs 64;" f createItemYou src/Dodge/Inventory/Add.hs 62;" f createLightMap src/Render.hs 26;" f -createProjectile src/Dodge/HeldUse.hs 1297;" f -createProjectileR src/Dodge/HeldUse.hs 1246;" f +createProjectile src/Dodge/HeldUse.hs 1300;" f +createProjectileR src/Dodge/HeldUse.hs 1249;" f createShell src/Dodge/Projectile/Create.hs 21;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 53;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 129;" f createWall src/Dodge/Wall/Create.hs 8;" f creatureDisplayText src/Dodge/Creature/Picture/Awareness.hs 12;" f -creatureShootLaser src/Dodge/HeldUse.hs 853;" f -creatureShootPulseLaser src/Dodge/HeldUse.hs 884;" f +creatureShootLaser src/Dodge/HeldUse.hs 856;" f +creatureShootPulseLaser src/Dodge/HeldUse.hs 887;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 60;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 81;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 70;" f @@ -3035,7 +3006,7 @@ crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f crsNearRect src/Dodge/Zoning/Creature.hs 40;" f crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 58;" f -cubeShape src/Dodge/Block/Debris.hs 110;" f +cubeShape src/Dodge/Block/Debris.hs 120;" f cullPoint src/Dodge/Render/ShapePicture.hs 136;" f cullPretty src/AesonHelp.hs 14;" f cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f @@ -3061,32 +3032,36 @@ dShadCol src/Dodge/Render/List.hs 208;" f damMatSideEffect src/Dodge/Material/Damage.hs 20;" f damThingHitWith src/Dodge/Damage.hs 72;" f damToExpBarrel src/Dodge/Barreloid.hs 53;" f -damageBlock src/Dodge/Wall/Damage.hs 120;" f +damageBlock src/Dodge/Wall/Damage.hs 121;" f damageCodeCommand src/Dodge/Terminal.hs 67;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f -damageCrystal src/Dodge/Material/Damage.hs 226;" f +damageCrystal src/Dodge/Material/Damage.hs 280;" f damageDirection src/Dodge/Damage.hs 35;" f -damageDirt src/Dodge/Material/Damage.hs 134;" f -damageFlesh src/Dodge/Material/Damage.hs 101;" f -damageGlass src/Dodge/Material/Damage.hs 160;" f -damageGlassBlock src/Dodge/Wall/Damage.hs 125;" f +damageDirt src/Dodge/Material/Damage.hs 188;" f +damageFlesh src/Dodge/Material/Damage.hs 155;" f +damageGlass src/Dodge/Material/Damage.hs 214;" f +damageGlassBlock src/Dodge/Wall/Damage.hs 126;" f damageHP src/Dodge/Creature/Damage.hs 37;" f damageInCircle src/Dodge/Damage.hs 61;" f -damageMachine src/Dodge/Wall/Damage.hs 46;" f -damageMetal src/Dodge/Material/Damage.hs 69;" f +damageLightningRod src/Dodge/Material/Damage.hs 73;" f +damageMachine src/Dodge/Wall/Damage.hs 47;" f +damageMetal src/Dodge/Material/Damage.hs 123;" f +damagePhotovoltaic src/Dodge/Material/Damage.hs 91;" f +damagePiezoelectric src/Dodge/Material/Damage.hs 87;" f +damagePyroelectric src/Dodge/Material/Damage.hs 78;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 13;" f -damageStone src/Dodge/Material/Damage.hs 37;" f +damageStone src/Dodge/Material/Damage.hs 41;" f damageThingHit src/Dodge/Bullet.hs 180;" f damageTypeThreshold src/Dodge/Machine/Update.hs 129;" f -damageTypeThreshold' src/Dodge/Wall/Damage.hs 84;" f +damageTypeThreshold' src/Dodge/Wall/Damage.hs 85;" f damageWall src/Dodge/Wall/Damage.hs 31;" f damsToExpBarrel src/Dodge/Barreloid.hs 50;" f dark src/Color.hs 135;" f darkenBackground src/Dodge/Render/MenuScreen.hs 46;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f -dbwMuzzles src/Dodge/HeldUse.hs 337;" f +dbwMuzzles src/Dodge/HeldUse.hs 339;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f deadEndRoom src/Dodge/Room/Room.hs 260;" f @@ -3096,7 +3071,7 @@ deadScalp src/Dodge/Creature/Picture.hs 81;" f deadUpperBody src/Dodge/Creature/Picture.hs 111;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 725;" f debrisSPic src/Dodge/Prop/Draw.hs 16;" f -debrisSize src/Dodge/Block/Debris.hs 83;" f +debrisSize src/Dodge/Block/Debris.hs 89;" f debugEvent src/Dodge/Debug.hs 43;" f debugEvents src/Dodge/Debug.hs 28;" f debugGet src/Dodge/Debug.hs 82;" f @@ -3123,7 +3098,7 @@ dededaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 677;" f dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 759;" f dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 789;" f defCraftItem src/Dodge/Default/Item.hs 25;" f -defDamageMaterial src/Dodge/Material/Damage.hs 30;" f +defDamageMaterial src/Dodge/Material/Damage.hs 34;" f defEquipment src/Dodge/Default.hs 24;" f defHeldItem src/Dodge/Default/Item.hs 9;" f defLSPic src/Dodge/LightSource/Draw.hs 10;" f @@ -3178,22 +3153,22 @@ deleteWallIDs src/Dodge/Wall/Delete.hs 27;" f denormalEdges src/Polyhedra.hs 128;" f destroyAllInvItems src/Dodge/Inventory.hs 53;" f destroyBlock src/Dodge/Block.hs 17;" f -destroyDoor src/Dodge/Wall/Damage.hs 145;" f +destroyDoor src/Dodge/Wall/Damage.hs 146;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyItem src/Dodge/Inventory.hs 62;" f destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 13;" f -destroyMachine' src/Dodge/Wall/Damage.hs 111;" f +destroyMachine' src/Dodge/Wall/Damage.hs 112;" f destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 22;" f -destroyMount src/Dodge/Wall/Damage.hs 166;" f -destroyMounts src/Dodge/Wall/Damage.hs 163;" f +destroyMount src/Dodge/Wall/Damage.hs 167;" f +destroyMounts src/Dodge/Wall/Damage.hs 164;" f destroyProjectile src/Dodge/Projectile/Update.hs 112;" f detV src/Geometry/Vector.hs 94;" f detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 433;" f detectorInfo src/Dodge/Item/Info.hs 224;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1217;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1220;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 205;" f @@ -3212,8 +3187,8 @@ displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f displayTerminalLineString src/Dodge/Update.hs 535;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f -distributeAmmoToItem src/Dodge/WorldEffect.hs 152;" f -distributeAmmoToYou src/Dodge/WorldEffect.hs 140;" f +distributeAmmoToItem src/Dodge/WorldEffect.hs 151;" f +distributeAmmoToYou src/Dodge/WorldEffect.hs 139;" f distributerRoom src/Dodge/Room/Room.hs 427;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f @@ -3237,8 +3212,8 @@ doCrGroupUpdate src/Dodge/CrGroupUpdate.hs 5;" f doCrImp src/Dodge/CreatureEffect.hs 13;" f doCrWdAc src/Dodge/CreatureEffect.hs 47;" f doDamage src/Dodge/Creature/State.hs 43;" f -doDeathToggle src/Dodge/WorldEffect.hs 101;" f -doDeathTriggers src/Dodge/WorldEffect.hs 94;" f +doDeathToggle src/Dodge/WorldEffect.hs 100;" f +doDeathTriggers src/Dodge/WorldEffect.hs 93;" f doDebugGet src/Dodge/Debug.hs 106;" f doDebugPut src/Dodge/Debug.hs 95;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 23;" f @@ -3255,9 +3230,9 @@ doDrag src/Dodge/Update/Input/InGame.hs 128;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 1178;" f +doGenFloat src/Dodge/HeldUse.hs 1181;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f -doHeldUseEffect src/Dodge/HeldUse.hs 366;" f +doHeldUseEffect src/Dodge/HeldUse.hs 369;" f doInPlacements src/Dodge/Layout.hs 87;" f doIndividualPlacements src/Dodge/Layout.hs 101;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f @@ -3282,7 +3257,7 @@ doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 132;" f doTimeScroll src/Dodge/Update.hs 211;" f -doTmWdWd src/Dodge/WorldEffect.hs 104;" f +doTmWdWd src/Dodge/WorldEffect.hs 103;" f doWallRotate src/Dodge/Update/Camera.hs 229;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f @@ -3299,7 +3274,7 @@ dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 290;" f doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f -doubleTreeToIndentList src/Dodge/DoubleTree.hs 129;" f +doubleTreeToIndentList src/Dodge/DoubleTree.hs 28;" f doubleV2 src/Geometry.hs 169;" f drawARHUD src/Dodge/Creature/State.hs 193;" f drawAimSweep src/Dodge/Render/Picture.hs 292;" f @@ -3429,7 +3404,7 @@ drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f dropAll src/Dodge/Creature/Update.hs 134;" f -dropInventoryPath src/Dodge/HeldUse.hs 1372;" f +dropInventoryPath src/Dodge/HeldUse.hs 1375;" f dropItem src/Dodge/Creature/Action.hs 155;" f dropper src/Dodge/Item/Scope.hs 82;" f drumMag src/Dodge/Item/Ammo.hs 31;" f @@ -3438,17 +3413,17 @@ dssNearCirc src/Dodge/Zoning/Cloud.hs 48;" f dssNearPoint src/Dodge/Zoning/Cloud.hs 39;" f dssNearRect src/Dodge/Zoning/Cloud.hs 45;" f dssNearSeg src/Dodge/Zoning/Cloud.hs 42;" f -dtIL src/Dodge/DoubleTree.hs 132;" f -dtPropagate' src/Dodge/DoubleTree.hs 45;" f -dtStartPropagate src/Dodge/DoubleTree.hs 38;" f -dtToAdjRootParent src/Dodge/DoubleTree.hs 196;" f -dtToAdjRootParentEither src/Dodge/DoubleTree.hs 204;" f -dtToAdjacency src/Dodge/DoubleTree.hs 140;" f -dtToIntMapWithRoot src/Dodge/DoubleTree.hs 148;" f -dtToLRAdj src/Dodge/DoubleTree.hs 169;" f -dtToLRAdjEither src/Dodge/DoubleTree.hs 181;" f -dtToRootIntMap' src/Dodge/DoubleTree.hs 153;" f -dtToUpDownAdj src/Dodge/DoubleTree.hs 158;" f +dtIL src/Dodge/DoubleTree.hs 31;" f +dtPropagate' src/Dodge/DoubleTree.hs 18;" f +dtStartPropagate src/Dodge/DoubleTree.hs 11;" f +dtToAdjRootParent src/Dodge/DoubleTree.hs 95;" f +dtToAdjRootParentEither src/Dodge/DoubleTree.hs 103;" f +dtToAdjacency src/Dodge/DoubleTree.hs 39;" f +dtToIntMapWithRoot src/Dodge/DoubleTree.hs 47;" f +dtToLRAdj src/Dodge/DoubleTree.hs 68;" f +dtToLRAdjEither src/Dodge/DoubleTree.hs 80;" f +dtToRootIntMap' src/Dodge/DoubleTree.hs 52;" f +dtToUpDownAdj src/Dodge/DoubleTree.hs 57;" f dummyMenuOption src/Dodge/Menu/Option.hs 72;" f dustColor src/Shader/Poke/Cloud.hs 45;" f ebColor src/Dodge/EnergyBall.hs 77;" f @@ -3498,7 +3473,7 @@ errorIsLHS src/Geometry.hs 65;" f errorNormalizeV src/Geometry.hs 54;" f errorPointInPolygon src/Geometry.hs 46;" f evenOddSplit src/Dodge/Base.hs 160;" f -exitTerminalSubInv src/Dodge/WorldEffect.hs 172;" f +exitTerminalSubInv src/Dodge/WorldEffect.hs 171;" f expandLine src/Dodge/Picture.hs 30;" f expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f @@ -3540,7 +3515,7 @@ firstWorldLoad appDodge/Main.hs 68;" f fixedCoordPictures src/Dodge/Render/Picture.hs 20;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 39;" f -flameMuzzles src/Dodge/HeldUse.hs 340;" f +flameMuzzles src/Dodge/HeldUse.hs 342;" f flameShield src/Dodge/Item/Equipment.hs 29;" f flameSize src/Dodge/Flame/Size.hs 5;" f flameSpitter src/Dodge/Item/Held/SprayGuns.hs 23;" f @@ -3548,7 +3523,7 @@ flameThrower src/Dodge/Item/Held/SprayGuns.hs 64;" f flameTorrent src/Dodge/Item/Held/SprayGuns.hs 32;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 48;" f flamerPic src/Dodge/Item/Draw/SPic.hs 396;" f -flareCircleAt src/Dodge/HeldUse.hs 706;" f +flareCircleAt src/Dodge/HeldUse.hs 709;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 39;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f @@ -3567,7 +3542,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 777;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 823;" f -foldMTRS src/Dodge/Room/Tutorial.hs 96;" f +foldMTRS src/Dodge/Room/Tutorial.hs 100;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3606,7 +3581,7 @@ gameRoomsFromRooms src/Dodge/Layout.hs 149;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f gasEffect src/Dodge/Update.hs 855;" f -gasType src/Dodge/HeldUse.hs 1135;" f +gasType src/Dodge/HeldUse.hs 1138;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 147;" f @@ -3620,34 +3595,34 @@ geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f getAimZoom src/Dodge/Update/Camera.hs 151;" f getAmmoLinks src/Dodge/Item/Grammar.hs 107;" f -getAttachedSFLink src/Dodge/HeldUse.hs 799;" f +getAttachedSFLink src/Dodge/HeldUse.hs 802;" f getAutoSpringLinks src/Dodge/Item/Grammar.hs 88;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 173;" f -getBulletType src/Dodge/HeldUse.hs 934;" f +getBulletType src/Dodge/HeldUse.hs 937;" f 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 463;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 450;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 496;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 483;" f getDebugMouseOver src/Dodge/Update.hs 424;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1285;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1288;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 144;" f -getLaserColor src/Dodge/HeldUse.hs 722;" f -getLaserDamage src/Dodge/HeldUse.hs 719;" f -getLaserPhaseV src/Dodge/HeldUse.hs 716;" f +getLaserColor src/Dodge/HeldUse.hs 725;" f +getLaserDamage src/Dodge/HeldUse.hs 722;" f +getLaserPhaseV src/Dodge/HeldUse.hs 719;" f getLinksOfType src/Dodge/RoomLink.hs 40;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f getMenuMouseContext src/Dodge/Update.hs 436;" f getNodePos src/Dodge/Path.hs 34;" f -getPJStabiliser src/Dodge/HeldUse.hs 1272;" f +getPJStabiliser src/Dodge/HeldUse.hs 1275;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 446;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 479;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3729,11 +3704,11 @@ hat src/Dodge/Item/Equipment.hs 65;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f headLampShape src/Dodge/Item/Draw/SPic.hs 423;" f -headMap src/Dodge/DoubleTree.hs 249;" 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 100;" f -healthTest src/Dodge/Room/LasTurret.hs 122;" f +healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 112;" f +healthTest src/Dodge/Room/LasTurret.hs 134;" 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 @@ -3743,14 +3718,14 @@ heldHandlePos src/Dodge/Item/HeldOffset.hs 84;" f heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 20;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 194;" f -heldItemInvLock src/Dodge/HeldUse.hs 457;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1020;" f +heldItemInvLock src/Dodge/HeldUse.hs 460;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1023;" f heldItemMuzzles src/Dodge/HeldUse.hs 188;" f -heldItemRifling src/Dodge/HeldUse.hs 1063;" f +heldItemRifling src/Dodge/HeldUse.hs 1066;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 234;" f heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f -heldTorqueAmount src/Dodge/HeldUse.hs 601;" f +heldTorqueAmount src/Dodge/HeldUse.hs 604;" f heldTriggerType src/Dodge/BaseTriggerType.hs 28;" f heron src/Geometry.hs 218;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f @@ -3767,10 +3742,9 @@ horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 82;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f -iShape src/Dodge/Placement/Instance/LightSource.hs 51;" f +iShape src/Dodge/Placement/Instance/LightSource.hs 54;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f -ildtPropagate src/Dodge/DoubleTree.hs 111;" f inLink src/Dodge/RoomLink.hs 128;" f inSegArea src/Geometry/Intersect.hs 317;" f inSimplePoly src/Geometry/Polygon.hs 98;" f @@ -3860,7 +3834,7 @@ invertIntMapUnique src/IntMapHelp.hs 103;" f invertInventoryToMap src/Dodge/Combine.hs 57;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 27;" f -isAmmoIntLink src/Dodge/HeldUse.hs 732;" f +isAmmoIntLink src/Dodge/HeldUse.hs 735;" f isAnimate src/Dodge/Creature/Test.hs 134;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f @@ -3904,7 +3878,7 @@ itemBelowAttachables src/Dodge/Item/Grammar.hs 53;" f itemBlips src/Dodge/RadarSweep.hs 94;" f itemBulkiness src/Dodge/Creature/YourControl.hs 188;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f -itemDetectorEffect src/Dodge/HeldUse.hs 805;" f +itemDetectorEffect src/Dodge/HeldUse.hs 808;" f itemDisplay src/Dodge/Inventory/SelectionList.hs 53;" f itemEquipPict src/Dodge/Item/Draw.hs 18;" f itemExternalValue src/Dodge/Inventory/SelectionList.hs 82;" f @@ -3916,7 +3890,7 @@ itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 20;" f itemInternalValue src/Dodge/Item/Display.hs 34;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemInvLock src/Dodge/HeldUse.hs 452;" f +itemInvLock src/Dodge/HeldUse.hs 455;" f itemMuzzles src/Dodge/HeldUse.hs 172;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f @@ -3930,7 +3904,7 @@ itemShapeMaxX src/Dodge/Item/Orientation.hs 59;" f itemShapeMaxY src/Dodge/Item/Orientation.hs 62;" f itemShapeMaxZ src/Dodge/Item/Orientation.hs 65;" f itemShapeMin src/Dodge/Item/Orientation.hs 74;" f -itemSidePush src/Dodge/HeldUse.hs 400;" f +itemSidePush src/Dodge/HeldUse.hs 403;" f itemString src/Dodge/Item/Display.hs 56;" f itemToFunction src/Dodge/Item/Grammar.hs 110;" f itemTreeSPic src/Dodge/Item/Draw/SPicTree.hs 13;" f @@ -3942,7 +3916,7 @@ itmBaseInfo src/Dodge/Item/Info.hs 30;" f itmEquipSiteInfo src/Dodge/Item/Info.hs 250;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f -jShape src/Dodge/Placement/Instance/LightSource.hs 66;" f +jShape src/Dodge/Placement/Instance/LightSource.hs 69;" f joinItemsInList src/Dodge/Item/Grammar.hs 211;" f joystick src/Dodge/Item/Scope.hs 158;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f @@ -3956,8 +3930,8 @@ 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 97;" f -keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 85;" f +keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 109;" f +keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 97;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 439;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f @@ -3966,43 +3940,32 @@ lChasm src/Dodge/Room/Tutorial.hs 159;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f -lShape src/Dodge/Placement/Instance/LightSource.hs 54;" 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 246;" f -lasCenRunClose1 src/Dodge/Room/LasTurret.hs 322;" f -lasCenRunClose2 src/Dodge/Room/LasTurret.hs 377;" f -lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 292;" f -lasCenSensEdge src/Dodge/Room/LasTurret.hs 141;" f +lasCenRunClose' src/Dodge/Room/LasTurret.hs 275;" f +lasCenRunClose1 src/Dodge/Room/LasTurret.hs 351;" f +lasCenRunClose2 src/Dodge/Room/LasTurret.hs 406;" f +lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 321;" f +lasCenSensEdge src/Dodge/Room/LasTurret.hs 154;" f lasGunPic src/Dodge/Item/Draw/SPic.hs 414;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f -lasRunRand src/Dodge/Room/LasTurret.hs 374;" f -lasRunYinYang src/Dodge/Room/LasTurret.hs 153;" f -lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 201;" f -lasSensorTurretTest src/Dodge/Room/LasTurret.hs 134;" f -lasTunnel src/Dodge/Room/LasTurret.hs 407;" f -lasTunnelRunPast src/Dodge/Room/LasTurret.hs 448;" f +lasRunRand src/Dodge/Room/LasTurret.hs 403;" f +lasRunYinYang src/Dodge/Room/LasTurret.hs 182;" f +lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 230;" f +lasSensorTurretTest src/Dodge/Room/LasTurret.hs 146;" f +lasTunnel src/Dodge/Room/LasTurret.hs 436;" f +lasTunnelRunPast src/Dodge/Room/LasTurret.hs 477;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f -laserSpark src/Dodge/Material/Damage.hs 33;" f -lastMap src/Dodge/DoubleTree.hs 253;" f +laserSpark src/Dodge/Material/Damage.hs 37;" f +lastMap src/Dodge/DoubleTree.hs 122;" f latticeXsYs src/Grid.hs 24;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 41;" f ldpRect src/Dodge/Render/List.hs 48;" f ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 84;" f -ldtIL src/Dodge/DoubleTree.hs 225;" f -ldtPropagate src/Dodge/DoubleTree.hs 69;" f -ldtPropagate' src/Dodge/DoubleTree.hs 60;" f -ldtPropagateFold src/Dodge/DoubleTree.hs 81;" f -ldtPropagateFoldTree src/Dodge/DoubleTree.hs 98;" f -ldtPropagateIndices src/Dodge/DoubleTree.hs 121;" f -ldtStartPropagate src/Dodge/DoubleTree.hs 52;" f -ldtToDT src/Dodge/DoubleTree.hs 16;" f -ldtToIM src/Dodge/DoubleTree.hs 219;" f -ldtToIndentList src/Dodge/DoubleTree.hs 222;" f -ldtToLoc src/Dodge/DoubleTree.hs 268;" f -leaveResetQuitTerminal src/Dodge/WorldEffect.hs 166;" f +leaveResetQuitTerminal src/Dodge/WorldEffect.hs 165;" f led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 189;" f @@ -4014,11 +3977,11 @@ leftRightCombine src/Dodge/Item/Grammar.hs 201;" f leftWristPQ src/Dodge/Creature/HandPos.hs 82;" f legsSPic src/Dodge/Item/Draw/SPic.hs 448;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f -liShape src/Dodge/Placement/Instance/LightSource.hs 79;" f +liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f light src/Color.hs 131;" f -lightSensByDoor src/Dodge/Room/LasTurret.hs 70;" f -lightSensInsideDoor src/Dodge/Room/LasTurret.hs 58;" f -lightSensor src/Dodge/Placement/Instance/Sensor.hs 26;" f +lightSensByDoor src/Dodge/Room/LasTurret.hs 82;" f +lightSensInsideDoor src/Dodge/Room/LasTurret.hs 70;" f +lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f lightx4 src/Color.hs 155;" f linGrad src/Geometry/Intersect.hs 239;" f @@ -4042,29 +4005,23 @@ lmt src/MatrixHelper.hs 53;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 410;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f -loadMuzzle src/Dodge/HeldUse.hs 645;" f +loadMuzzle src/Dodge/HeldUse.hs 648;" f loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f loadingScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 30;" f loadme src/Dodge/Debug/Terminal.hs 142;" f -locDTGoHelp src/Dodge/DoubleTree.hs 348;" f -locDTGoLeft src/Dodge/DoubleTree.hs 329;" f -locDTGoRight src/Dodge/DoubleTree.hs 334;" f -locDTLeftmost src/Dodge/DoubleTree.hs 312;" f -locDTRightmost src/Dodge/DoubleTree.hs 315;" f -locGoHelp src/Dodge/DoubleTree.hs 340;" f -locGoLeft src/Dodge/DoubleTree.hs 319;" f -locGoRight src/Dodge/DoubleTree.hs 324;" f -locLDTToLocDT src/Dodge/DoubleTree.hs 19;" f -locLeftmost src/Dodge/DoubleTree.hs 306;" f +locDTGoHelp src/Dodge/DoubleTree.hs 174;" f +locDTGoLeft src/Dodge/DoubleTree.hs 155;" f +locDTGoRight src/Dodge/DoubleTree.hs 160;" f +locDTLeftmost src/Dodge/DoubleTree.hs 148;" f +locDTRightmost src/Dodge/DoubleTree.hs 151;" f +locGoHelp src/Dodge/DoubleTree.hs 166;" f locMuzzles src/Dodge/HeldUse.hs 148;" f locOrient src/Dodge/Item/HeldOffset.hs 52;" f -locRightmost src/Dodge/DoubleTree.hs 309;" f -locToTop src/Dodge/DoubleTree.hs 301;" f -locUp src/Dodge/DoubleTree.hs 272;" f -locUp' src/Dodge/DoubleTree.hs 288;" f +locToTop src/Dodge/DoubleTree.hs 145;" f +locUp' src/Dodge/DoubleTree.hs 132;" f lockInv src/Dodge/Inventory/Lock.hs 9;" f lockRoomKeyItems src/Dodge/LockAndKey.hs 25;" f lockRoomMultiItems src/Dodge/LockAndKey.hs 15;" f @@ -4092,7 +4049,7 @@ ltAutoCrit src/Dodge/Creature/LtAutoCrit.hs 12;" f m src/ShortShow.hs 48;" f mAT src/Dodge/Item/MagAmmoType.hs 20;" f machinePistol src/Dodge/Item/Held/Stick.hs 24;" f -magAmmoParams src/Dodge/HeldUse.hs 955;" f +magAmmoParams src/Dodge/HeldUse.hs 958;" f magAmmoType src/Dodge/Item/MagAmmoType.hs 12;" f magMax src/Dodge/Item/MagAmmoType.hs 29;" f magShield src/Dodge/Item/Equipment.hs 26;" f @@ -4106,7 +4063,7 @@ main test/Spec.hs 12;" f makeArc src/Picture/Base.hs 149;" f makeBlip src/Dodge/RadarSweep.hs 70;" f makeBlockDebris src/Dodge/Block/Debris.hs 36;" f -makeBullet src/Dodge/HeldUse.hs 999;" f +makeBullet src/Dodge/HeldUse.hs 1002;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f @@ -4125,7 +4082,7 @@ makeFragBullets src/Dodge/Bullet.hs 132;" f makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 11;" f makeIntInterval src/Dodge/Zoning/Base.hs 37;" f makeMovingEB src/Dodge/EnergyBall.hs 60;" f -makeMuzzleFlare src/Dodge/HeldUse.hs 671;" f +makeMuzzleFlare src/Dodge/HeldUse.hs 674;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 63;" f makePathBetweenPs src/Dodge/Path.hs 87;" f @@ -4160,8 +4117,8 @@ maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f -maybeDestroyBlock src/Dodge/Wall/Damage.hs 135;" f -maybeDestroyDoor src/Dodge/Wall/Damage.hs 140;" f +maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f +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 @@ -4171,7 +4128,7 @@ mcBackgroundSound src/Dodge/Machine/Update.hs 153;" f mcColor src/Dodge/Machine/Draw.hs 83;" f mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 117;" f mcDamSensorUpdate src/Dodge/Machine/Update.hs 164;" f -mcDamSensorUpdate' src/Dodge/Wall/Damage.hs 57;" f +mcDamSensorUpdate' src/Dodge/Wall/Damage.hs 58;" f mcKillBut src/Dodge/Machine/Destroy.hs 38;" f mcKillTerm src/Dodge/Machine/Destroy.hs 30;" f mcNoItemsTest src/Dodge/Machine/Update.hs 172;" f @@ -4181,10 +4138,10 @@ mcProxSensorUpdate src/Dodge/Machine/Update.hs 167;" f mcProxTest src/Dodge/Machine/Update.hs 248;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 209;" f mcSPic src/Dodge/Render/ShapePicture.hs 172;" f -mcShootAuto src/Dodge/HeldUse.hs 1190;" f -mcShootLaser src/Dodge/HeldUse.hs 1182;" f +mcShootAuto src/Dodge/HeldUse.hs 1193;" f +mcShootLaser src/Dodge/HeldUse.hs 1185;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f -mcUseHeld src/Dodge/HeldUse.hs 1106;" f +mcUseHeld src/Dodge/HeldUse.hs 1109;" f mcUseItem src/Dodge/Machine/Update.hs 108;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f @@ -4214,9 +4171,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 182;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 201;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 255;" f +midChasm src/Dodge/Room/Tutorial.hs 188;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 210;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 269;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4245,11 +4202,11 @@ mkDustCloudLike src/Shader/Poke/Cloud.hs 27;" f mkGraphFromEdges src/GraphHelp.hs 4;" f mkNode src/Dodge/Graph.hs 29;" f mkRectangle src/Dodge/LevelGen/DoorPane.hs 7;" f -mntLS src/Dodge/Placement/Instance/LightSource.hs 103;" f -mntLSCond src/Dodge/Placement/Instance/LightSource.hs 126;" f -mntLSOn src/Dodge/Placement/Instance/LightSource.hs 31;" f -mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 143;" f -mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 148;" f +mntLS src/Dodge/Placement/Instance/LightSource.hs 106;" f +mntLSCond src/Dodge/Placement/Instance/LightSource.hs 129;" f +mntLSOn src/Dodge/Placement/Instance/LightSource.hs 34;" f +mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 146;" f +mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 151;" f modTo src/Geometry/Zone.hs 18;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f @@ -4276,20 +4233,20 @@ multiArrow src/Picture/Composite.hs 11;" f multiLookupTrie src/SimpleTrie.hs 57;" f multiLookupTrieI src/SimpleTrie.hs 66;" f muout src/Dodge/RoomLink.hs 144;" f -muzFlareAt src/Dodge/HeldUse.hs 693;" f -muzzlePos src/Dodge/HeldUse.hs 780;" f -muzzleRandPos src/Dodge/HeldUse.hs 789;" f +muzFlareAt src/Dodge/HeldUse.hs 696;" f +muzzlePos src/Dodge/HeldUse.hs 783;" f +muzzleRandPos src/Dodge/HeldUse.hs 792;" f muzzleWallCheck src/Dodge/Update.hs 323;" f -mvButton src/Dodge/Placement/PlaceSpot.hs 179;" f -mvCr src/Dodge/Placement/PlaceSpot.hs 182;" f -mvFS src/Dodge/Placement/PlaceSpot.hs 188;" f +mvButton src/Dodge/Placement/PlaceSpot.hs 177;" f +mvCr src/Dodge/Placement/PlaceSpot.hs 180;" f +mvFS src/Dodge/Placement/PlaceSpot.hs 186;" f mvGust src/Dodge/Update.hs 846;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 223;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 222;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f -mvProp src/Dodge/Placement/PlaceSpot.hs 176;" f +mvProp src/Dodge/Placement/PlaceSpot.hs 174;" f myIntersectLineLine src/Geometry/Intersect.hs 196;" f myIntersectSegSeg src/Geometry/Intersect.hs 174;" f nRays src/Geometry.hs 182;" f @@ -4387,7 +4344,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 525;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 561;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4423,20 +4380,20 @@ pjRemoteSetDirection src/Dodge/Projectile/Update.hs 196;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 57;" f -plMachine src/Dodge/Placement/PlaceSpot.hs 191;" f +plMachine src/Dodge/Placement/PlaceSpot.hs 189;" f plNew src/Dodge/Base/NewID.hs 19;" f plNewID src/Dodge/Base/NewID.hs 7;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f -placeChasm src/Dodge/Placement/PlaceSpot.hs 155;" f -placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 218;" f -placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 43;" f -placeSpot src/Dodge/Placement/PlaceSpot.hs 35;" f -placeSpotID src/Dodge/Placement/PlaceSpot.hs 104;" f -placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 89;" f -placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 67;" f -placeWallPoly src/Dodge/Placement/PlaceSpot.hs 166;" f +placeChasm src/Dodge/Placement/PlaceSpot.hs 153;" f +placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 216;" f +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 +placeWallPoly src/Dodge/Placement/PlaceSpot.hs 164;" f plainRegex src/Dodge/DisplayInventory.hs 193;" f playIfFree src/Sound.hs 139;" f playPositionalSoundQueue src/Sound.hs 147;" f @@ -4491,8 +4448,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 295;" f -polyChasmC src/Dodge/Room/Tutorial.hs 304;" f +polyChasm src/Dodge/Room/Tutorial.hs 318;" f +polyChasmC src/Dodge/Room/Tutorial.hs 330;" f polyCirc src/Shape.hs 47;" f polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4530,8 +4487,7 @@ prePos src/Quaternion.hs 64;" f preloadRender src/Preload/Render.hs 29;" f premapMaybe src/FoldlHelp.hs 26;" f prependTwo src/Geometry.hs 177;" f -prettyDT src/Dodge/DoubleTree.hs 258;" f -prettyLDT src/Dodge/DoubleTree.hs 263;" f +prettyDT src/Dodge/DoubleTree.hs 127;" f prettyShort src/AesonHelp.hs 11;" f primeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 645;" f printColumnTitles src/Dodge/Tree/Shift.hs 154;" f @@ -4580,7 +4536,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 199;" f +putLamp src/Dodge/Placement/Instance/LightSource.hs 202;" 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 @@ -4652,15 +4608,14 @@ recComFindPredecessor src/Dodge/Terminal.hs 200;" f recComFindSuccessor src/Dodge/Terminal.hs 190;" f recComLookup src/Dodge/Terminal.hs 180;" f recTabComplete src/Dodge/Terminal.hs 227;" f -recoilAmount src/Dodge/HeldUse.hs 482;" f +recoilAmount src/Dodge/HeldUse.hs 485;" f rectNSWE src/Geometry/Polygon.hs 15;" f rectVV src/Geometry/Polygon.hs 48;" f rectWH src/Geometry/Polygon.hs 19;" f rectXH src/Geometry/Polygon.hs 42;" f rectXY src/Geometry/Polygon.hs 45;" f red src/Color.hs 41;" f -reduceLocDT src/Dodge/DoubleTree.hs 398;" f -reduceLocLDT src/Dodge/DoubleTree.hs 393;" f +reduceLocDT src/Dodge/DoubleTree.hs 180;" f reflVelWall src/Dodge/Base/Wall.hs 24;" f reflVelWallDamp src/Dodge/Base/Wall.hs 20;" f reflWall src/Dodge/Base/Wall.hs 16;" f @@ -4682,10 +4637,10 @@ rememberSounds src/Dodge/Creature/Perception.hs 176;" f remoteDetonator src/Dodge/Item/Scope.hs 152;" f remoteScreen src/Dodge/Item/Scope.hs 146;" f removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f -removeAmmoFromMag src/Dodge/HeldUse.hs 930;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 933;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 361;" f +removeLights src/Dodge/Room/Tutorial.hs 394;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 71;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f @@ -4701,7 +4656,7 @@ replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 67;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f -resetTerminal src/Dodge/WorldEffect.hs 160;" f +resetTerminal src/Dodge/WorldEffect.hs 159;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f resizeFBOTO2 src/Framebuffer/Update.hs 104;" f @@ -4866,14 +4821,14 @@ semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f senseDamage src/Dodge/Machine/Update.hs 264;" f -senseDamage' src/Dodge/Wall/Damage.hs 60;" 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 sensorSPic src/Dodge/Machine/Draw.hs 99;" f -sensorTut src/Dodge/Room/Tutorial.hs 472;" f +sensorTut src/Dodge/Room/Tutorial.hs 505;" f sensorTypeDamages src/Dodge/Machine/Update.hs 288;" f -sensorTypeDamages src/Dodge/Wall/Damage.hs 91;" f +sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 49;" f @@ -4898,7 +4853,7 @@ setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 103;" f +setRoomInt src/Dodge/Room/LasTurret.hs 175;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 342;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" f setShaderSource src/Shader/Compile.hs 121;" f @@ -4907,7 +4862,7 @@ setSoundVolume src/Sound.hs 159;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f -setTreeInts src/Dodge/Room/Tutorial.hs 110;" f +setTreeInts src/Dodge/Room/Tutorial.hs 107;" f setViewDistance src/Dodge/Update/Camera.hs 246;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f @@ -4958,17 +4913,17 @@ shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shineTargetLaser src/Dodge/Creature/State.hs 201;" f shineTorch src/Dodge/Creature/State.hs 238;" f -shootBullet src/Dodge/HeldUse.hs 993;" f -shootBullets src/Dodge/HeldUse.hs 987;" f +shootBullet src/Dodge/HeldUse.hs 996;" f +shootBullets src/Dodge/HeldUse.hs 990;" f shootFirstMiss src/Dodge/Creature/Volition.hs 34;" f -shootLaser src/Dodge/HeldUse.hs 863;" f -shootPlasmaBall src/Dodge/HeldUse.hs 904;" f -shootPulseBall src/Dodge/HeldUse.hs 916;" f -shootPulseLaser src/Dodge/HeldUse.hs 891;" f +shootLaser src/Dodge/HeldUse.hs 866;" f +shootPlasmaBall src/Dodge/HeldUse.hs 907;" f +shootPulseBall src/Dodge/HeldUse.hs 919;" f +shootPulseLaser src/Dodge/HeldUse.hs 894;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 1207;" f +shootTeslaArc src/Dodge/HeldUse.hs 1210;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f -shootTractorBeam src/Dodge/HeldUse.hs 832;" f +shootTractorBeam src/Dodge/HeldUse.hs 835;" f shootersRoom src/Dodge/Room/Room.hs 338;" f shootersRoom' src/Dodge/Room/Room.hs 305;" f shootersRoom1 src/Dodge/Room/Room.hs 328;" f @@ -4983,10 +4938,10 @@ 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 55;" f +showManObj src/Dodge/TestString.hs 57;" f showMuzzlePositions src/Dodge/Debug.hs 254;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 78;" f +showTimeFlow src/Dodge/TestString.hs 66;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 183;" f shrinkVert src/Geometry/Polygon.hs 187;" f shuffle src/RandomHelp.hs 51;" f @@ -5000,8 +4955,7 @@ simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 757;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 793;" f singleAmmo src/Dodge/Item/AmmoSlots.hs 64;" f -singleDT src/Dodge/DoubleTree.hs 10;" f -singleLDT src/Dodge/DoubleTree.hs 13;" f +singleDT src/Dodge/DoubleTree.hs 8;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 20;" f sizeFBOs src/Framebuffer/Update.hs 19;" f @@ -5061,11 +5015,11 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f spaceAction src/Dodge/Update/Input/InGame.hs 534;" f -spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 173;" f -spanColLightI src/Dodge/Placement/Instance/LightSource.hs 166;" f -spanLS src/Dodge/Placement/Instance/LightSource.hs 158;" f -spanLightI src/Dodge/Placement/Instance/LightSource.hs 180;" f -spanLightY src/Dodge/Placement/Instance/LightSource.hs 183;" f +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 sparkDam src/Dodge/Spark.hs 37;" f sparkGun src/Dodge/Item/Held/BatteryGuns.hs 13;" f sparkRandDir src/Dodge/Spark.hs 117;" f @@ -5089,8 +5043,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 225;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 240;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 239;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 254;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f @@ -5135,7 +5089,7 @@ stone4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 543;" f stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 657;" f stopAllSounds src/Sound.hs 127;" f stopBulletAt src/Dodge/Bullet.hs 200;" f -stopPushing src/Dodge/Wall/Damage.hs 171;" f +stopPushing src/Dodge/Wall/Damage.hs 172;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f storageShape src/Dodge/Machine/Draw.hs 31;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f @@ -5253,7 +5207,7 @@ titleOptionsMenu src/Dodge/Menu.hs 104;" f titleOptionsNoWrite src/Dodge/Menu.hs 107;" f tlDoEffect src/Dodge/Terminal.hs 115;" f tlSetStatus src/Dodge/Terminal.hs 112;" f -tmDistributeAmmo src/Dodge/WorldEffect.hs 120;" f +tmDistributeAmmo src/Dodge/WorldEffect.hs 119;" f tmDistributeLines src/Dodge/Room/Room.hs 465;" f tmMachine src/Dodge/Placement/Instance/Terminal.hs 54;" f toBinary src/Dodge/Inventory/SelectionList.hs 138;" f @@ -5282,14 +5236,14 @@ 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 51;" f +topTestPart src/Dodge/TestString.hs 53;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f -torqueAmount src/Dodge/HeldUse.hs 596;" f -torqueCr src/Dodge/WorldEffect.hs 87;" f +torqueAmount src/Dodge/HeldUse.hs 599;" f +torqueCr src/Dodge/WorldEffect.hs 86;" f torso src/Dodge/Creature/Picture.hs 100;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f -tractorBeamAt src/Dodge/HeldUse.hs 844;" f +tractorBeamAt src/Dodge/HeldUse.hs 847;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 46;" f tractorGunPic src/Dodge/Item/Draw/SPic.hs 417;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f @@ -5356,12 +5310,12 @@ tryUseParent src/Dodge/Creature/State.hs 145;" f 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 115;" f -tutHub src/Dodge/Room/Tutorial.hs 368;" f -tutLight src/Dodge/Room/Tutorial.hs 333;" f -tutRezBox src/Dodge/Room/Tutorial.hs 483;" f +tutDrop src/Dodge/Room/Tutorial.hs 112;" f +tutHub src/Dodge/Room/Tutorial.hs 401;" f +tutLight src/Dodge/Room/Tutorial.hs 362;" f +tutRezBox src/Dodge/Room/Tutorial.hs 516;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 506;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 541;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5536,21 +5490,21 @@ upperPrismPolySU src/Shape.hs 110;" f upperPrismPolyTS src/Shape.hs 116;" f upperRounded src/Shape.hs 182;" f useBulletPayload src/Dodge/Bullet.hs 117;" f -useGasParams src/Dodge/HeldUse.hs 1111;" f +useGasParams src/Dodge/HeldUse.hs 1114;" f useHotkey src/Dodge/Creature/YourControl.hs 77;" f -useInventoryPath src/Dodge/HeldUse.hs 1403;" f +useInventoryPath src/Dodge/HeldUse.hs 1406;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 262;" f -useLoadedAmmo src/Dodge/HeldUse.hs 735;" f +useLoadedAmmo src/Dodge/HeldUse.hs 738;" f useMagShield src/Dodge/Euse.hs 33;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1363;" f +useRewindGun src/Dodge/HeldUse.hs 1366;" f useRoomPosCond src/Dodge/PlacementSpot.hs 187;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 190;" f -useStopWatch src/Dodge/HeldUse.hs 1344;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1352;" f +useStopWatch src/Dodge/HeldUse.hs 1347;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1355;" f useUnusedLnk src/Dodge/PlacementSpot.hs 178;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 209;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 216;" f @@ -5559,7 +5513,7 @@ vCen3 src/Geometry/Vector3D.hs 115;" f vInverse src/Geometry/Vector.hs 154;" f vNormal src/Geometry/Vector.hs 149;" f vNormaly src/Geometry/Vector3D.hs 72;" f -vShape src/Dodge/Placement/Instance/LightSource.hs 93;" f +vShape src/Dodge/Placement/Instance/LightSource.hs 96;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f @@ -5572,7 +5526,7 @@ vertTrans src/MatrixHelper.hs 103;" f verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 23;" f -vgunMuzzles src/Dodge/HeldUse.hs 356;" f +vgunMuzzles src/Dodge/HeldUse.hs 359;" f viewClipBounds src/Dodge/Debug/Picture.hs 350;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 202;" f viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f @@ -5584,7 +5538,7 @@ visionCheck src/Dodge/Creature/Perception.hs 152;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 62;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f -walkNozzle src/Dodge/HeldUse.hs 820;" f +walkNozzle src/Dodge/HeldUse.hs 823;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 54;" f @@ -5592,7 +5546,7 @@ wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallToSurface src/Dodge/Base/Collide.hs 180;" f wallsFromRooms src/Dodge/Layout.hs 137;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f -warmupSound src/Dodge/HeldUse.hs 1397;" f +warmupSound src/Dodge/HeldUse.hs 1400;" f warningRooms src/Dodge/Room/Warning.hs 33;" f warp1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 845;" f wasdAim src/Dodge/Creature/YourControl.hs 133;" f @@ -5682,7 +5636,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 169;" f +zChasm src/Dodge/Room/Tutorial.hs 172;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f