From d1c2870d636a228490f7c9c11b24b7ae5a698cce Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 17 Mar 2026 23:38:14 +0000 Subject: [PATCH] Automatically order placements --- src/Dodge/BaseTriggerType.hs | 3 +- src/Dodge/Combine/Combinations.hs | 3 +- src/Dodge/Creature.hs | 2 +- src/Dodge/Creature/Statistics.hs | 3 +- src/Dodge/Creature/YourControl.hs | 3 +- src/Dodge/Data/Item/Combine.hs | 3 +- src/Dodge/Data/Room.hs | 1 + src/Dodge/Floor.hs | 2 +- src/Dodge/HeldUse.hs | 25 +- src/Dodge/Item/AimStance.hs | 3 +- src/Dodge/Item/AmmoSlots.hs | 3 +- src/Dodge/Item/Draw/SPic.hs | 3 +- src/Dodge/Item/Held.hs | 3 +- src/Dodge/Item/Held/BatteryGuns.hs | 15 +- src/Dodge/Item/HeldOffset.hs | 3 +- src/Dodge/Item/Info.hs | 3 +- src/Dodge/Item/InvSize.hs | 2 +- src/Dodge/Layout.hs | 16 +- src/Dodge/LockAndKey.hs | 10 +- src/Dodge/Material/Damage.hs | 2 +- src/Dodge/Room/Containing.hs | 12 +- src/Dodge/Room/LasTurret.hs | 551 ++++++++++++++++------------- src/Dodge/Room/Tutorial.hs | 7 +- src/Dodge/Update/Camera.hs | 3 +- tags | 325 +++++++++-------- 25 files changed, 527 insertions(+), 479 deletions(-) diff --git a/src/Dodge/BaseTriggerType.hs b/src/Dodge/BaseTriggerType.hs index 882eecd50..1daccd909 100644 --- a/src/Dodge/BaseTriggerType.hs +++ b/src/Dodge/BaseTriggerType.hs @@ -55,8 +55,7 @@ heldTriggerType = \case FLAMETORRENT -> NoTrigger FLAMEWALL -> NoTrigger BLOWTORCH -> NoTrigger - SPARKGUN -> NoTrigger - TESLAGUN -> NoTrigger + TESLACOIL -> NoTrigger TRACTORGUN -> NoTrigger RLAUNCHER -> SemiAutoTrigger 20 RLAUNCHERX{} -> SemiAutoTrigger 20 diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 8fdd3990c..4eb0c7a2a 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -92,8 +92,7 @@ itemCombinations = -- , po [HELD LASGUN, HELD LASGUN, cr HARDWARE] dualBeam -- , po [HELD LASGUN, cr TRANSFORMER] (lasWide 2) -- , po [HELD LASGUN, HELD LASGUN, HELD LASGUN, cr HARDWARE] lasCircle - , p [o $ cr TRANSFORMER, p 2 $ cr CAN] sparkGun - , p [o (HELD SPARKGUN), p 2 $ cr PIPE] teslaGun + , p [o $ cr TRANSFORMER, p 2 $ cr CAN] teslaCoil -- , p [o $ cr TELEPORTMODULE, p 2 $ cr MICROCHIP] blinker , p [o $ HELD BLINKER, p 2 $ cr MICROCHIP] unsafeBlinker , po [cr MAGNET, cr TIN] (magShield MagnetRepulse) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 126736773..4e8d8bcc5 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -345,7 +345,7 @@ stackedInventory = , megaBattery , capacitor , makeTypeCraft TRANSFORMER - , teslaGun + , teslaCoil , megaBattery , flameThrower , chemFuelPouch diff --git a/src/Dodge/Creature/Statistics.hs b/src/Dodge/Creature/Statistics.hs index 065da716b..c500c9006 100644 --- a/src/Dodge/Creature/Statistics.hs +++ b/src/Dodge/Creature/Statistics.hs @@ -106,8 +106,7 @@ heldItemWeight = \case FLAMETORRENT -> 10 FLAMEWALL -> 10 BLOWTORCH -> 10 - SPARKGUN -> 15 - TESLAGUN -> 15 + TESLACOIL -> 15 TRACTORGUN -> 10 RLAUNCHER -> 20 RLAUNCHERX{} -> 20 diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index 610ddff17..f4c2b9b47 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -220,8 +220,7 @@ heldItemBulkiness = \case FLAMETORRENT -> 1 FLAMEWALL -> 1 BLOWTORCH -> 1 - SPARKGUN -> 1 - TESLAGUN -> 1 + TESLACOIL -> 1 TRACTORGUN -> 1 RLAUNCHER -> 0.9 RLAUNCHERX{} -> 0.9 diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 973dd014f..b8aa9be62 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -164,8 +164,7 @@ data HeldItemType | FLAMETORRENT | FLAMEWALL | BLOWTORCH - | SPARKGUN - | TESLAGUN + | TESLACOIL | TRACTORGUN | RLAUNCHER | RLAUNCHERX {_xNum :: Int} diff --git a/src/Dodge/Data/Room.hs b/src/Dodge/Data/Room.hs index c0c5e4296..c8e540293 100644 --- a/src/Dodge/Data/Room.hs +++ b/src/Dodge/Data/Room.hs @@ -80,6 +80,7 @@ data PathFromEdge = PathFromEdge CardinalPoint Int data RoomPosFlag = RoomPosOnGrid {_onGridFromEdges :: S.Set PathFromEdge} | RoomPosOffGrid {_offGridFromEdges :: S.Set PathFromEdge} + | RoomPosOnFloor deriving (Eq, Ord, Show) data UsedPos diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 37dfd9fb7..23955ec9f 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -29,7 +29,7 @@ initialRoomTree = , passthroughLockKeyLists [(sensorRoomRunPast ElectricSensor, takeOne [-- CRAFT (ENERGYBALLCRAFT TeslaBall) , - HELD SPARKGUN])] + HELD TESLACOIL])] itemRooms , lasSensorTurretTest , -- , AnRoom $ tanksRoom [] [] <&> rmPmnts .~ [] diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 1dfea2b0f..23398ffee 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -279,9 +279,9 @@ heldItemMuzzles loc = \case <*> pure MuzzleRLauncher <*> pure 0 ) - TESLAGUN -> + TESLACOIL -> dbwMuzzles - & ix 0 . mzPos .~ V2 10 0 + & ix 0 . mzPos .~ V2 5 0 & ix 0 . mzInaccuracy .~ 0 & ix 0 . mzFlareType .~ TeslaGunFlare & ix 0 . mzEffect .~ MuzzleTesla @@ -429,8 +429,7 @@ itemSidePush = \case FLAMETORRENT -> 0 FLAMEWALL -> 0 BLOWTORCH -> 0 - SPARKGUN -> 0 - TESLAGUN -> 0 + TESLACOIL -> 0 TRACTORGUN -> 0 RLAUNCHER -> 0 RLAUNCHERX{} -> 0 @@ -512,8 +511,7 @@ recoilAmount itm FLAMETORRENT -> 0 FLAMEWALL -> 0 BLOWTORCH -> 0 - SPARKGUN -> 0 - TESLAGUN -> 0 + TESLACOIL -> 0 TRACTORGUN -> 0 RLAUNCHER -> 0 RLAUNCHERX _ -> 0 @@ -559,8 +557,7 @@ bgunSound itm FLAMETORRENT -> Nothing FLAMEWALL -> Nothing BLOWTORCH -> Nothing - SPARKGUN -> Nothing - TESLAGUN -> Nothing + TESLACOIL -> Nothing TRACTORGUN -> Nothing RLAUNCHER -> Just (tap4S, 0) RLAUNCHERX _ -> Just (tap4S, 0) @@ -630,8 +627,7 @@ heldTorqueAmount = \case FLAMETORRENT -> 0 FLAMEWALL -> 0 BLOWTORCH -> 0 - SPARKGUN -> 0 - TESLAGUN -> 0.01 + TESLACOIL -> 0.01 TRACTORGUN -> 0 RLAUNCHER -> 0 RLAUNCHERX{} -> 0 @@ -1049,8 +1045,7 @@ heldItemMuzVel = \case FLAMETORRENT -> ConstFloat 0.8 FLAMEWALL -> ConstFloat 0.8 BLOWTORCH -> ConstFloat 0.8 - SPARKGUN -> ConstFloat 0.8 - TESLAGUN -> ConstFloat 0.8 + TESLACOIL -> ConstFloat 0.8 TRACTORGUN -> ConstFloat 0.8 RLAUNCHER -> ConstFloat 0 RLAUNCHERX{} -> ConstFloat 0 @@ -1092,8 +1087,7 @@ heldItemRifling = \case FLAMETORRENT -> ConstFloat 0.8 FLAMEWALL -> ConstFloat 0.8 BLOWTORCH -> ConstFloat 0.8 - SPARKGUN -> ConstFloat 0.8 - TESLAGUN -> ConstFloat 0.8 + TESLACOIL -> ConstFloat 0.8 TRACTORGUN -> ConstFloat 0.8 RLAUNCHER -> ConstFloat 0 RLAUNCHERX{} -> ConstFloat 0 @@ -1164,8 +1158,7 @@ gasType hit _ = case hit of FLAMETORRENT -> Just CreateFlame FLAMEWALL -> Just CreateFlame BLOWTORCH -> Nothing - SPARKGUN -> Nothing - TESLAGUN -> Nothing + TESLACOIL -> Nothing TRACTORGUN -> Nothing RLAUNCHER -> Nothing RLAUNCHERX{} -> Nothing diff --git a/src/Dodge/Item/AimStance.hs b/src/Dodge/Item/AimStance.hs index 438433e8f..b958a8142 100644 --- a/src/Dodge/Item/AimStance.hs +++ b/src/Dodge/Item/AimStance.hs @@ -50,8 +50,7 @@ heldAimStance = \case FLAMETORRENT -> TwoHandUnder FLAMEWALL -> TwoHandUnder BLOWTORCH -> TwoHandUnder - SPARKGUN -> TwoHandFlat - TESLAGUN -> TwoHandFlat + TESLACOIL -> TwoHandFlat TRACTORGUN -> TwoHandUnder RLAUNCHER -> TwoHandOver RLAUNCHERX{} -> TwoHandOver diff --git a/src/Dodge/Item/AmmoSlots.hs b/src/Dodge/Item/AmmoSlots.hs index bc7fe1ea0..d19710b90 100644 --- a/src/Dodge/Item/AmmoSlots.hs +++ b/src/Dodge/Item/AmmoSlots.hs @@ -45,8 +45,7 @@ heldItemAmmoSlots = \case FLAMESPITTER -> singleAmmo GasAmmo FLAMEWALL -> singleAmmo GasAmmo BLOWTORCH -> singleAmmo GasAmmo - TESLAGUN -> singleAmmo ElectricalAmmo - SPARKGUN -> singleAmmo ElectricalAmmo + TESLACOIL -> singleAmmo ElectricalAmmo TRACTORGUN -> singleAmmo ElectricalAmmo SHATTERGUN -> singleAmmo ElectricalAmmo LED -> singleAmmo ElectricalAmmo diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 5f42f5b66..663020fba 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -259,8 +259,7 @@ heldItemSPic ht it = case ht of FLAMETORRENT -> flamerPic it FLAMEWALL -> flamerPic it BLOWTORCH -> flamerPic it - SPARKGUN -> teslaGunPic - TESLAGUN -> teslaGunPic + TESLACOIL -> teslaGunPic TRACTORGUN -> tractorGunPic it RLAUNCHER -> rlauncherPic it RLAUNCHERX _ -> rlauncherPic it diff --git a/src/Dodge/Item/Held.hs b/src/Dodge/Item/Held.hs index cfa8e181b..5f4b28500 100644 --- a/src/Dodge/Item/Held.hs +++ b/src/Dodge/Item/Held.hs @@ -58,8 +58,7 @@ itemFromHeldType ht = case ht of FLAMETORRENT -> flameTorrent FLAMEWALL -> flameWall BLOWTORCH -> blowTorch - SPARKGUN -> sparkGun - TESLAGUN -> teslaGun + TESLACOIL -> teslaCoil -- LASCIRCLE -> lasCircle -- DUALBEAM -> dualBeam -- LASWIDE i -> lasWide i diff --git a/src/Dodge/Item/Held/BatteryGuns.hs b/src/Dodge/Item/Held/BatteryGuns.hs index 244a8594c..938448f46 100644 --- a/src/Dodge/Item/Held/BatteryGuns.hs +++ b/src/Dodge/Item/Held/BatteryGuns.hs @@ -1,6 +1,5 @@ module Dodge.Item.Held.BatteryGuns ( - sparkGun, - teslaGun, + teslaCoil, laser, tractorGun, ) where @@ -10,17 +9,11 @@ import Dodge.Data.Item import Dodge.Default.Item --import Geometry.Data -sparkGun :: Item -sparkGun = - teslaGun - & itType .~ HELD SPARKGUN --- & itParams . arcSize .~ 10 - -teslaGun :: Item -teslaGun = +teslaCoil :: Item +teslaCoil = defHeldItem & itParams .~ teslaParams - & itType .~ HELD TESLAGUN + & itType .~ HELD TESLACOIL teslaParams :: ItemParams teslaParams = diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 2d32f9ef9..4b08d726f 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -110,8 +110,7 @@ heldHandlePos = \case FLAMETORRENT -> V2 3 0 FLAMEWALL -> V2 3 0 BLOWTORCH -> V2 3 0 - SPARKGUN -> V2 3 0 - TESLAGUN -> V2 3 0 + TESLACOIL -> V2 3 0 TRACTORGUN -> V2 3 0 RLAUNCHER -> V2 3 0 RLAUNCHERX{} -> V2 3 0 diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 233a7463c..1d2dfeb6b 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -121,8 +121,7 @@ heldInfo hit = case hit of FLAMETORRENT -> "A weapon that streams out burning fuel in a torrent." FLAMEWALL -> "A weapon that squirts out burning fuel all around the user." BLOWTORCH -> "A weapon that produces a concentrated flame." - SPARKGUN -> "A weapon that produces an arc of electricity. The arc will attempt to discharge at a nearby object." - TESLAGUN -> "A weapon that discharges a sustained arc of electricity. The arc will attempt to discharge at a nearby object." + TESLACOIL -> "An item that creates an arc of electricity." TRACTORGUN -> "An item that produces a beam of gravitons." GLAUNCHER -> "A large tube that can launch projectiles." RLAUNCHER -> "A large tube that can launch self propelled projectiles. Moving the tube after launch will cause the projectile to spin." diff --git a/src/Dodge/Item/InvSize.hs b/src/Dodge/Item/InvSize.hs index ad8f88295..2b3081d15 100644 --- a/src/Dodge/Item/InvSize.hs +++ b/src/Dodge/Item/InvSize.hs @@ -20,7 +20,7 @@ itInvHeight x = case x ^. itType of itDim :: Item -> ItemDimension itDim x = case x ^. itType of - HELD TESLAGUN -> ItemDimension 9 (V3 4 0 0) (V3 10 (-5) 3) + HELD TESLACOIL -> ItemDimension 9 (V3 4 0 0) (V3 10 (-5) 3) LASER -> did & dimRad .~ 10 & dimCenter .~ V3 15 0 0 HELD TRACTORGUN -> did & dimRad .~ 10 diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index 1809622a9..52733c74d 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -80,9 +80,10 @@ setTile r gw = case _rmFloor r of . nubBy ((==) `on` roundPoint2) $ concat $ _rmPolys r shuffleRoomPos :: RandomGen g => Room -> State g Room -shuffleRoomPos rm = do - newPos <- shuffle $ _rmPos rm - return $ rm & rmPos .~ newPos +shuffleRoomPos = rmPos shuffle +--shuffleRoomPos rm = do +-- newPos <- shuffle $ _rmPos rm +-- return $ rm & rmPos .~ newPos doInPlacements :: GenWorld -> GenWorld doInPlacements w = foldl' (\gw (i,(_,f)) -> placeSpot i gw (f gw)) w @@ -103,10 +104,17 @@ doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw) doRoomPlacements :: GenWorld -> Room -> GenWorld doRoomPlacements w rm = foldl' (placeSpot i) (w & genRooms . ix i . rmPmnts .~ mempty) - $ _rmPmnts rm + . sortOn plPriority $ _rmPmnts rm where i = rm ^?! rmMID . _Just +plPriority :: Placement -> Int +plPriority pl = case pl ^. plType of + PutChasm {} -> 0 + PutBlock {} -> 1 + PutDoor {} -> 2 + _ -> 3 + --placeSpot' :: Int -> GenWorld -> Placement -> GenWorld --placeSpot' = placeSpot --placeSpot' i gw x = diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index b23c24341..22a0b49d1 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -1,5 +1,6 @@ module Dodge.LockAndKey where +import Dodge.Item.Ammo import Dodge.Cleat import Dodge.Creature import Dodge.Data.GenWorld @@ -24,7 +25,7 @@ lockRoomMultiItems = lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)] lockRoomKeyItems = - [ (lasCenSensEdge, takeOne [ HELD FLATSHIELD]) + [ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD]) -- [ (lasCenSensEdge, takeOne [HELD RLAUNCHER, LASER, HELD SPARKGUN, HELD FLATSHIELD]) -- , (sensorRoomRunPast LaserSensor, return LASER) -- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) @@ -59,14 +60,15 @@ itemRooms = ( LASER , join $ takeOne - [ rc $ map makeTypeCraft [PRISM, TRANSFORMER, PIPE] + [ rc $ battery : map makeTypeCraft [PRISM, TRANSFORMER, PIPE, TRANSFORMER] + , rc $ battery : laser : [makeTypeCraft TRANSFORMER] ] ) , - ( HELD SPARKGUN + ( HELD TESLACOIL , join $ takeOne - [ rc $ map makeTypeCraft [TRANSFORMER, CAN, CAN] + [ rc (battery : map makeTypeCraft [TRANSFORMER, CAN, CAN]) ] ) , diff --git a/src/Dodge/Material/Damage.hs b/src/Dodge/Material/Damage.hs index 81627104b..5746697c9 100644 --- a/src/Dodge/Material/Damage.hs +++ b/src/Dodge/Material/Damage.hs @@ -90,7 +90,7 @@ 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) + Lasering _ p t -> f (3*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)) diff --git a/src/Dodge/Room/Containing.hs b/src/Dodge/Room/Containing.hs index a28a0a4ad..ccf1d5f6d 100644 --- a/src/Dodge/Room/Containing.hs +++ b/src/Dodge/Room/Containing.hs @@ -27,12 +27,12 @@ roomsContaining' crs its = do endroom <- join $ takeOne - [ roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its - , randomFourCornerRoomCrsIts crs its - , tanksRoom crs its - , tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its - , roomPillarsContaining crs its - , roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its + [-- roomPillarsSquare <&> rmPmnts ++.~ crsItmsUnused crs its + --, randomFourCornerRoomCrsIts crs its + --, tanksRoom crs its +-- tanksPipesRoom <&> rmPmnts ++.~ crsItmsUnused crs its + roomPillarsContaining crs its +-- , roomPillarsPassage <&> rmPmnts ++.~ crsItmsUnused crs its ] return (pure $ cleatOnward endroom) diff --git a/src/Dodge/Room/LasTurret.hs b/src/Dodge/Room/LasTurret.hs index 73800916f..1ffbcca9f 100644 --- a/src/Dodge/Room/LasTurret.hs +++ b/src/Dodge/Room/LasTurret.hs @@ -14,18 +14,15 @@ module Dodge.Room.LasTurret ( lasCenRunClose1, lasCenRunCloseLongCor, lasRunRand, - setRoomInt, + storeRoomID, ) where +import Color +import Control.Monad 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 Data.Foldable (fold) + import qualified Data.Set as S import Dodge.Cleat import Dodge.Data.GenWorld @@ -38,6 +35,8 @@ import Dodge.Room.Corridor import Dodge.Room.Door import Dodge.Room.Link import Dodge.Room.Ngon +import Dodge.Room.Path +import Dodge.Room.Procedural import Dodge.Room.SensorDoor import Dodge.RoomLink import Dodge.Tree @@ -45,54 +44,49 @@ import Dodge.Wire import Geometry import LensHelp import RandomHelp +import Shape -- no lights! cenLasTur :: (RandomGen g) => State g Room cenLasTur = do --- 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 , heightWallPS - (resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 100 <&> (,S.singleton UsedPosLow))) + (resetPLUse $ rprBoolShift (const . isInLnk) (shiftInBy 120 <&> (,S.singleton UsedPosLow))) 30 - covershape --- , lightn 0 --- , lightn 3 --- , lightn 6 + (rectWH 20 10) ] - <&> rmPath %~ addNodesCrossingCirc 0 30 - where - covershape = rectNSWE 10 (-10) (-20) 20 + <&> rmPath + %~ addNodesCrossingCirc 0 30 lightSensInsideDoor :: Int -> Room -> Room -lightSensInsideDoor i rm = - rm - & rmPmnts - .++~ [ psPt atFstLnkOut (PutForeground $ floorWire (V2 20 0) (V2 20 (-100))) - , psPt atFstLnkOut (PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))) +lightSensInsideDoor i = + rmPmnts + .++~ [ psPt atFstLnkOut (PutForeground $ floorWire (V2 20 0) (V2 20 (-x))) + , psPt atFstLnkOut (PutForeground $ floorWire (V2 0 (-x)) (V2 20 (-x))) , psPt atFstLnkOut (PutForeground $ verticalWire (V2 20 0) 0 80) - , sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i + , sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward x) & plExternalID ?~ i ] + where + x = 120 -- & rmOutPmnt . at i ?~ sensAboveDoor LaserSensor 10 (atFstLnkOutShiftInward 100) -lightSensByDoor :: Int -> Room -> Room -lightSensByDoor i rm = - rm - & rmPmnts - .++~ [ psPt atFstLnkOut $ PutForeground $ verticalWire (V2 20 0) 0 80 - , heightWallPS (atNthLnkOutShiftInward 1 100) 30 covershape - , heightWallPS (atFstLnkOutShiftInward 100) 30 covershape - , sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) & plExternalID ?~ i - ] +lightSensByDoor :: Int -> Room -> State LayoutVars Room +lightSensByDoor i rm = do + x <- takeOne [100, 120, 140] + y <- takeOne [100, 110, 120] + sh1 <- takeOne [rectWH 20 10, square 20] + return $ + rm + & rmPmnts + .++~ [ psPt atFstLnkOut $ PutForeground $ verticalWire (V2 20 0) 0 80 + , heightWallPS (atNthLnkOutShiftInward 1 x) 30 sh1 + , heightWallPS (atFstLnkOutShiftInward y) 30 (rectWH 20 10) + , sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) & plExternalID ?~ i + ] where - -- & rmOutPmnt . at i ?~ sensAboveDoor LaserSensor 20 (atFstLnkOutShiftBy sensorshift) - - covershape = rectNSWE 10 (-10) (-20) 20 sensorshift (p, a) = ((p +.+ rotateV a (V2 60 (-20)), a), S.singleton UsedPosLow) keyCardRoomRunPast :: (RandomGen g) => Int -> Int -> State g (MetaTree Room String) @@ -148,34 +142,32 @@ lasSensorTurretTest :: State LayoutVars (MetaTree Room String) lasSensorTurretTest = do n <- nextLayoutInt cenroom' <- shuffleLinks . lightSensInsideDoor n =<< cenLasTur - (i,cenroom'') <- setRoomInt cenroom' + (i, cenroom'') <- storeRoomID 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 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 + f i gw = fromJust $ find (isused . _rpType) (getRoomFromID i gw ^. rmPos) + isused UsedOutLink{_rplsChildNum = 0} = True + isused _ = False -- 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) - (i,cenroom'') <- setRoomInt cenroom' + (i, cenroom') <- storeRoomID =<< shuffleLinks =<< lightSensByDoor n =<< cenLasTur lshape <- takeOne [vShape, lShape, jShape, liShape] - let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a +_rpDir rp)) - let cenroom = cenroom'' - & rmInPmnt <>~ - [(0, alight pi . f i) - ,(0, alight (0.5*pi) . f i) - ,(0, alight (1.5*pi) . f i)] + let alight a rp = mntLSCond (fmap (fmap $ colorSH black) lshape) (PS (rotateV a $ _rpPos rp) (a + _rpDir rp)) + blight a = (0, alight a . f i) + let cenroom = cenroom' & rmInPmnt <>~ map blight [pi, (0.5 * pi), (1.5 * pi)] let doorroom = triggerDoorRoom n rToOnward "lasCenSensEdge" $ treeFromTrunk [door] $ @@ -185,270 +177,343 @@ lasCenSensEdge n = do , 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 + f i gw = fromJust $ find (isused . _rpType) (getRoomFromID i gw ^. rmPos) + isused UsedOutLink{_rplsChildNum = 0} = True + isused _ = False -setRoomInt :: Room -> State LayoutVars (Int, Room) -setRoomInt x = do +storeRoomID :: Room -> State LayoutVars (Int, Room) +storeRoomID x = do i <- nextLayoutInt return (i, x & rmPmnts .:~ sps0 (PutWorldUpdate (f i))) where f i rid _ gw = gw & genInts . at i ?~ (gw ^?! genRooms . ix rid . rmMID . _Just) +-- unsafe! assumes that storeRoomID has been called +getRoomFromID :: Int -> GenWorld -> Room +getRoomFromID i gw = gw ^?! genRooms . ix (gw ^?! genInts . ix i) + lasRunYinYang :: (RandomGen g) => State g (MetaTree Room String) lasRunYinYang = do - npoly <- takeOne [6,8,10,12] + npoly <- takeOne [6, 8, 10, 12] thelight <- mntLightLnkCond $ rprBool $ const . isInLnk thelight1 <- mntLightLnkCond $ rprBool $ const . isOutLnk - thelight2 <- mntLightLnkCond $ rprBool $ const . (\rp -> PolyEdge ((npoly + 1) `div` 4) `S.member` - (fold $ rp ^? rpType . rplsType)) - thelight3 <- mntLightLnkCond $ rprBool $ const . (\rp -> PolyEdge (3*(npoly + 1) `div` 4) `S.member` - (fold $ rp ^? rpType . rplsType)) - r <- shuffleLinks =<< - (roomNgon npoly 250 - <&> rmPmnts - .~ - [angwall a | a <- [0,pi/8..pi-pi/9]] <> - [bngwall a | a <- [0,pi/8..pi-pi/9]] <> - [ awall 0 (rectWH 15 5) - , putLasTurret 0.02 & plSpot . psPos .~ negate offxy - , putLasTurret 0.02 & plSpot . psPos .~ offxy --- , awall (V2 0 50) (square 10) - , thelight - , thelight1 - , thelight2 - , thelight3 - ] - <&> rmPath %~ (addNodesCrossingCirc 0 30 - . flip (foldr ($)) [apath a | a <- [0,pi/8..pi-2*pi/9]] - . flip (foldr ($)) [bpath a | a <- [0,pi/8..pi-2*pi/9]] - ) - <&> rmLinks %~ setInLinksByType (PolyEdge 0) - <&> rmLinks %~ setOutLinksByType (PolyEdge (npoly `div` 2)) - ) + thelight2 <- + mntLightLnkCond $ + rprBool $ + const + . ( \rp -> + PolyEdge ((npoly + 1) `div` 4) + `S.member` (fold $ rp ^? rpType . rplsType) + ) + thelight3 <- + mntLightLnkCond $ + rprBool $ + const + . ( \rp -> + PolyEdge (3 * (npoly + 1) `div` 4) + `S.member` (fold $ rp ^? rpType . rplsType) + ) + r <- + shuffleLinks + =<< ( roomNgon npoly 250 + <&> rmPmnts + .~ [angwall a | a <- [0, pi / 8 .. pi - pi / 9]] + <> [bngwall a | a <- [0, pi / 8 .. pi - pi / 9]] + <> [ awall 0 (rectWH 15 5) + , putLasTurret 0.02 & plSpot . psPos .~ negate offxy + , putLasTurret 0.02 & plSpot . psPos .~ offxy + , -- , awall (V2 0 50) (square 10) + thelight + , thelight1 + , thelight2 + , thelight3 + ] + <&> rmPath + %~ ( addNodesCrossingCirc 0 30 + . flip (foldr ($)) [apath a | a <- [0, pi / 8 .. pi - 2 * pi / 9]] + . flip (foldr ($)) [bpath a | a <- [0, pi / 8 .. pi - 2 * pi / 9]] + ) + <&> rmLinks + %~ setInLinksByType (PolyEdge 0) + <&> rmLinks + %~ setOutLinksByType (PolyEdge (npoly `div` 2)) + ) rToOnward "lasCenRunClose" $ return $ cleatOnward r where awall x v = heightWallPS (PS x 0) 30 v - --angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a/2)) $ rectWH 5 (25 - a*10/pi )) + -- angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a/2)) $ rectWH 5 (25 - a*10/pi )) rf = 0.8 offxy = V2 0 (-100) - angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a*rf)) $ rectWH 5 (23 - a*13/pi )) - apath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100),x - f (V2 0 100))) (V2 0 100 + rotateV a (V2 0 100)) + angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi / 4 + a * rf)) $ rectWH 5 (23 - a * 13 / pi)) + apath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100), x - f (V2 0 100))) (V2 0 100 + rotateV a (V2 0 100)) where - a = a' + pi/16 - f = rotateV (pi/4 + a *0.8) - bngwall a = awall (V2 0 (-100) + rotateV a (V2 0 (-100))) (fmap (rotateV (pi/4 + a*rf)) $ rectWH 5 (23 - a*13/pi )) - bpath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100),x - f (V2 0 100))) (V2 0 (-100) + rotateV a (V2 0 (-100))) + a = a' + pi / 16 + f = rotateV (pi / 4 + a * 0.8) + bngwall a = awall (V2 0 (-100) + rotateV a (V2 0 (-100))) (fmap (rotateV (pi / 4 + a * rf)) $ rectWH 5 (23 - a * 13 / pi)) + bpath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100), x - f (V2 0 100))) (V2 0 (-100) + rotateV a (V2 0 (-100))) where - a = a' + pi/16 - f = rotateV (pi/4 + a *0.8) + a = a' + pi / 16 + f = rotateV (pi / 4 + a * 0.8) lasRunYinYangCenter :: (RandomGen g) => State g (MetaTree Room String) lasRunYinYangCenter = do - npoly <- takeOne [6,8,10,12] + npoly <- takeOne [6, 8, 10, 12] thelight <- mntLightLnkCond $ rprBool $ const . isInLnk thelight1 <- mntLightLnkCond $ rprBool $ const . isOutLnk - thelight2 <- mntLightLnkCond $ rprBool $ const . (\rp -> PolyEdge ((npoly + 1) `div` 4) `S.member` - (fold $ rp ^? rpType . rplsType)) - thelight3 <- mntLightLnkCond $ rprBool $ const . (\rp -> PolyEdge (3*(npoly + 1) `div` 4) `S.member` - (fold $ rp ^? rpType . rplsType)) --- thelight3 <- mntLightLnkCond $ rprBool $ const . isOutLnk - r <- shuffleLinks =<< - (roomNgon npoly 250 - <&> rmPmnts - .~ - [angwall a | a <- [0,pi/8..pi-pi/9]] <> - [bngwall a | a <- [0,pi/8..pi-pi/9]] <> - [ putLasTurret 0.02 --- , awall (V2 0 50) (square 10) - , thelight - , thelight1 - , thelight2 - , thelight3 - ] - <&> rmPath %~ (addNodesCrossingCirc 0 30 - . flip (foldr ($)) [apath a | a <- [0,pi/8..pi-2*pi/9]] - . flip (foldr ($)) [bpath a | a <- [0,pi/8..pi-2*pi/9]] - ) - <&> rmLinks %~ setInLinksByType (PolyEdge 0) - <&> rmLinks %~ setOutLinksByType (PolyEdge (npoly `div` 2)) - ) + thelight2 <- + mntLightLnkCond $ + rprBool $ + const + . ( \rp -> + PolyEdge ((npoly + 1) `div` 4) + `S.member` (fold $ rp ^? rpType . rplsType) + ) + thelight3 <- + mntLightLnkCond $ + rprBool $ + const + . ( \rp -> + PolyEdge (3 * (npoly + 1) `div` 4) + `S.member` (fold $ rp ^? rpType . rplsType) + ) + -- thelight3 <- mntLightLnkCond $ rprBool $ const . isOutLnk + r <- + shuffleLinks + =<< ( roomNgon npoly 250 + <&> rmPmnts + .~ [angwall a | a <- [0, pi / 8 .. pi - pi / 9]] + <> [bngwall a | a <- [0, pi / 8 .. pi - pi / 9]] + <> [ putLasTurret 0.02 + , -- , awall (V2 0 50) (square 10) + thelight + , thelight1 + , thelight2 + , thelight3 + ] + <&> rmPath + %~ ( addNodesCrossingCirc 0 30 + . flip (foldr ($)) [apath a | a <- [0, pi / 8 .. pi - 2 * pi / 9]] + . flip (foldr ($)) [bpath a | a <- [0, pi / 8 .. pi - 2 * pi / 9]] + ) + <&> rmLinks + %~ setInLinksByType (PolyEdge 0) + <&> rmLinks + %~ setOutLinksByType (PolyEdge (npoly `div` 2)) + ) rToOnward "lasCenRunClose" $ return $ cleatOnward r where awall x v = heightWallPS (PS x 0) 30 v - --angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a/2)) $ rectWH 5 (25 - a*10/pi )) - angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a*0.8)) $ rectWH 5 (23 - a*13/pi )) - apath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100),x - f (V2 0 100))) (V2 0 100 + rotateV a (V2 0 100)) + -- angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi/4 + a/2)) $ rectWH 5 (25 - a*10/pi )) + angwall a = awall (V2 0 100 + rotateV a (V2 0 100)) (fmap (rotateV (pi / 4 + a * 0.8)) $ rectWH 5 (23 - a * 13 / pi)) + apath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100), x - f (V2 0 100))) (V2 0 100 + rotateV a (V2 0 100)) where - a = a' + pi/16 - f = rotateV (pi/4 + a *0.8) - bngwall a = awall (V2 0 (-100) + rotateV a (V2 0 (-100))) (fmap (rotateV (pi/4 + a*0.8)) $ rectWH 5 (23 - a*13/pi )) - bpath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100),x - f (V2 0 100))) (V2 0 (-100) + rotateV a (V2 0 (-100))) + a = a' + pi / 16 + f = rotateV (pi / 4 + a * 0.8) + bngwall a = awall (V2 0 (-100) + rotateV a (V2 0 (-100))) (fmap (rotateV (pi / 4 + a * 0.8)) $ rectWH 5 (23 - a * 13 / pi)) + bpath a' = addNodesCrossing $ (\x -> (x + f (V2 0 100), x - f (V2 0 100))) (V2 0 (-100) + rotateV a (V2 0 (-100))) where - a = a' + pi/16 - f = rotateV (pi/4 + a *0.8) + a = a' + pi / 16 + f = rotateV (pi / 4 + a * 0.8) lasCenRunClose' :: (RandomGen g) => State g (MetaTree Room String) lasCenRunClose' = do - npoly <- takeOne [5..12] + npoly <- takeOne [5 .. 12] inwall <- takeOne obwalls outwall <- takeOne obwalls thelight <- mntLightLnkCond $ rprBool $ const . isInLnk thelight1 <- mntLightLnkCond $ rprBool $ const . isOutLnk - r <- shuffleLinks =<< - (roomNgon npoly 250 - <&> rmPmnts - .~ ( - fmap (uncurry inlinkwall) inwall <> - fmap (uncurry outlinkwall) outwall <> - [ putLasTurret 0.02 - , thelight - , thelight1 - ] + r <- + shuffleLinks + =<< ( roomNgon npoly 250 + <&> rmPmnts + .~ ( fmap (uncurry inlinkwall) inwall + <> fmap (uncurry outlinkwall) outwall + <> [ putLasTurret 0.02 + , thelight + , thelight1 + ] + ) + <&> rmPath + %~ addNodesCrossingCirc 0 30 + <&> rmLinks + %~ setInLinksByType (PolyEdge 0) + <&> rmLinks + %~ setOutLinks (\rl -> or [PolyEdge i `S.member` _rlType rl | i <- [2 .. npoly - 2]]) ) - <&> rmPath %~ addNodesCrossingCirc 0 30 - <&> rmLinks %~ setInLinksByType (PolyEdge 0) - <&> rmLinks %~ setOutLinks (\rl -> or [PolyEdge i `S.member` _rlType rl | i <- [2..npoly-2]]) - ) rToOnward "lasCenRunClose" $ return $ cleatOnward r where - swall = [ (70, (rectNSWE 10 (-10) (-10) 30)) - , (125, (rectNSWE 55 (-55) (-10) 10)) - , (180, (rectNSWE 10 (-10) (-30) 10)) - ] - zwall = [ (70, (rectNSWE 10 (-10) (-30) 10)) - , (125, (rectNSWE 55 (-55) (-10) 10)) - , (180, (rectNSWE 10 (-10) (-10) 30)) - ] - iwall = [ (70, (rectNSWE 10 (-10) (-15) 20)) - , (180, (rectNSWE 10 (-10) (-30) (-5))) - ] - jwall = [ (70, (rectNSWE 10 (-10) (-20) 15)) - , (180, (rectNSWE 10 (-10) 5 30)) - ] - uwall = [ (180, (rectNSWE 10 (-10) (-20) 20)) ] - obwalls = [swall,zwall,iwall,jwall,uwall] - linkwall f x = heightWallPS - (resetPLUse $ rprBoolShift (const . f) (shiftInBy x <&> (,S.singleton UsedPosLow))) - 30 + swall = + [ (70, (rectNSWE 10 (-10) (-10) 30)) + , (125, (rectNSWE 55 (-55) (-10) 10)) + , (180, (rectNSWE 10 (-10) (-30) 10)) + ] + zwall = + [ (70, (rectNSWE 10 (-10) (-30) 10)) + , (125, (rectNSWE 55 (-55) (-10) 10)) + , (180, (rectNSWE 10 (-10) (-10) 30)) + ] + iwall = + [ (70, (rectNSWE 10 (-10) (-15) 20)) + , (180, (rectNSWE 10 (-10) (-30) (-5))) + ] + jwall = + [ (70, (rectNSWE 10 (-10) (-20) 15)) + , (180, (rectNSWE 10 (-10) 5 30)) + ] + uwall = [(180, (rectNSWE 10 (-10) (-20) 20))] + obwalls = [swall, zwall, iwall, jwall, uwall] + linkwall f x = + heightWallPS + (resetPLUse $ rprBoolShift (const . f) (shiftInBy x <&> (,S.singleton UsedPosLow))) + 30 inlinkwall = linkwall isInLnk outlinkwall = linkwall isOutLnk lasCenRunCloseLongCor :: (RandomGen g) => State g (MetaTree Room String) lasCenRunCloseLongCor = do - (alinks,blinks) <- shufflePair (rlinks,llinks) - rdir <- takeOne [negate,id] - a <- takeOne [5*pi/16] + (alinks, blinks) <- shufflePair (rlinks, llinks) + rdir <- takeOne [negate, id] + a <- takeOne [5 * pi / 16] let h = 800 - laspos <- takeOne [V2 (h/2) 80] - ls <- mntLightLnkCond (PS (V2 (h/2) 0) pi) - r <- shuffleLinks =<< - (roomRectAutoLights h 160 - <&> rmPmnts - <>~ [ putLasTurret 0.02 & plSpot .~ PS laspos a - , awall (V2 (h /4) 80) (rotateV (rdir pi/16) <$> rectWH 180 10) - , awall (V2 (3*h/4) 80) (rotateV (rdir pi/16) <$> rectWH 180 10) - , ls - ] - <&> rmLinks %~ setInLinks alinks - <&> rmLinks %~ setOutLinks blinks - <&> rmPath %~ - (addNodesCrossing (V2 (h/2-10) 30,V2 (h/2+50) 90) - .addNodesCrossing (V2 (h/2+10) 130,V2 (h/2-50) 70) ) - ) + laspos <- takeOne [V2 (h / 2) 80] + ls <- mntLightLnkCond (PS (V2 (h / 2) 0) pi) + r <- + shuffleLinks + =<< ( roomRectAutoLights h 160 + <&> rmPmnts + <>~ [ putLasTurret 0.02 & plSpot .~ PS laspos a + , awall (V2 (h / 4) 80) (rotateV (rdir pi / 16) <$> rectWH 180 10) + , awall (V2 (3 * h / 4) 80) (rotateV (rdir pi / 16) <$> rectWH 180 10) + , ls + ] + <&> rmLinks + %~ setInLinks alinks + <&> rmLinks + %~ setOutLinks blinks + <&> rmPath + %~ ( addNodesCrossing (V2 (h / 2 - 10) 30, V2 (h / 2 + 50) 90) + . addNodesCrossing (V2 (h / 2 + 10) 130, V2 (h / 2 - 50) 70) + ) + ) rToOnward "lasCenRunClose" $ return $ cleatOnward r where llinks = memtest (FromEdge South 1) (OnEdge West) rlinks = memtest (FromEdge South 1) (OnEdge East) awall x v = heightWallPS (PS x 0) 30 v - memtest a b x = let y = _rlType x - in a `S.member` y && b `S.member` y + memtest a b x = + let y = _rlType x + in a `S.member` y && b `S.member` y lasCenRunClose1 :: (RandomGen g) => State g (MetaTree Room String) lasCenRunClose1 = do - --(alinks,blinks) <- shufflePair (bllinks,brlinks) - --(alinks,blinks) <- shufflePair (bllinks,tmllink) - lnks <- shuffle [bllinks,brlinks,tmllink,tmrlink] + -- (alinks,blinks) <- shufflePair (bllinks,brlinks) + -- (alinks,blinks) <- shufflePair (bllinks,tmllink) + lnks <- shuffle [bllinks, brlinks, tmllink, tmrlink] let alinks = lnks !! 0 blinks = lnks !! 1 - outwall <- takeOne [awall (V2 185 25) (rectWH 10 50) - , awall (V2 200 50) (rectWH 50 10) ] + outwall <- + takeOne + [ awall (V2 185 25) (rectWH 10 50) + , awall (V2 200 50) (rectWH 50 10) + ] let z = 35 - r <- roomRectAutoLights 250 200 - <&> rmPolys .~ [[V2 0 0, V2 250 0 - , V2 250 (200-z) - , V2 (250 - z) 200 - , V2 z 200 - , V2 0 (200-z) - ]] + r <- + roomRectAutoLights 250 200 + <&> rmPolys + .~ [ + [ V2 0 0 + , V2 250 0 + , V2 250 (200 - z) + , V2 (250 - z) 200 + , V2 z 200 + , V2 0 (200 - z) + ] + ] <&> rmPmnts <>~ [ putLasTurret 0.02 & plSpot .~ PS (V2 125 100) 0 - , awall (V2 65 25) (rectWH 10 50) + , awall (V2 65 25) (rectWH 10 50) , outwall - , awall (V2 95 150) (rectWH 10 20) - , awall (V2 155 150) (rectWH 10 20) + , awall (V2 95 150) (rectWH 10 20) + , awall (V2 155 150) (rectWH 10 20) , sps0 $ putConvexChasm $ rectNSWE 200 110 105 145 --- , awall (V2 150 215) (rectWH 60 10) - ] - <&> rmLinks %~ setInLinks alinks --- <&> rmLinks %~ setOutLinks (memtest (OnEdge South) (FromEdge West 3)) - <&> rmLinks %~ setOutLinks blinks - <&> rmLinks . each %~ mvlinks - <&> rmPath %~ S.map (both %~ mvpath) + -- , awall (V2 150 215) (rectWH 60 10) + ] + <&> rmLinks + %~ setInLinks alinks + -- <&> rmLinks %~ setOutLinks (memtest (OnEdge South) (FromEdge West 3)) + <&> rmLinks + %~ setOutLinks blinks + <&> rmLinks + . each + %~ mvlinks + <&> rmPath + %~ S.map (both %~ mvpath) rToOnward "lasCenRunClose" $ return $ cleatOnward r where - mvlinks lnk | tmllink lnk = lnk & rlPos -~ V2 20 0 + mvlinks lnk + | tmllink lnk = lnk & rlPos -~ V2 20 0 | tmrlink lnk = lnk & rlPos +~ V2 20 0 | otherwise = lnk - mvpath (V2 x y) | y > 190 , x > 50 , x < 125 = V2 (x- 20) y - | y > 190 , x > 125 , x < 200 = V2 (x+ 20) y + mvpath (V2 x y) + | y > 190, x > 50, x < 125 = V2 (x - 20) y + | y > 190, x > 125, x < 200 = V2 (x + 20) y | otherwise = V2 x y tmllink = memtest (FromEdge West 1) (OnEdge North) tmrlink = memtest (FromEdge West 2) (OnEdge North) - bllinks = etest - (memtest (FromEdge West 0) (OnEdge South)) - (memtest (FromEdge South 0) (OnEdge West)) - brlinks = etest - (memtest (FromEdge East 0) (OnEdge South)) - (memtest (FromEdge South 0) (OnEdge East)) + bllinks = + etest + (memtest (FromEdge West 0) (OnEdge South)) + (memtest (FromEdge South 0) (OnEdge West)) + brlinks = + etest + (memtest (FromEdge East 0) (OnEdge South)) + (memtest (FromEdge South 0) (OnEdge East)) awall x v = heightWallPS (PS x 0) 30 v etest f g x = f x || g x - memtest a b x = let y = _rlType x - in a `S.member` y && b `S.member` y + memtest a b x = + let y = _rlType x + in a `S.member` y && b `S.member` y lasRunRand :: (RandomGen g) => State g (MetaTree Room String) -lasRunRand = join $ takeOne [lasCenRunClose2,lasCenRunClose1] +lasRunRand = join $ takeOne [lasCenRunClose2, lasCenRunClose1] lasCenRunClose2 :: (RandomGen g) => State g (MetaTree Room String) lasCenRunClose2 = do - (alinks,blinks) <- shufflePair (bllinks,trlinks) - a <- takeOne [3*pi/2,3*pi/4] + (alinks, blinks) <- shufflePair (bllinks, trlinks) + a <- takeOne [3 * pi / 2, 3 * pi / 4] laspos <- takeOne [V2 60 190, V2 65 185] - r <- shuffleLinks =<< - (roomRectAutoLights 250 250 - <&> rmPmnts - <>~ [ putLasTurret 0.02 & plSpot .~ PS laspos a - , awall (V2 35 100) (rectWH 10 60) - , awall (V2 150 215) (rectWH 60 10) - ] - <&> rmLinks %~ setInLinks alinks - <&> rmLinks %~ setOutLinks blinks - <&> rmPath %~ (addNodesCrossing (V2 110 170,V2 30 250) - .addNodesCrossing (V2 70 150,V2 10 210) ) - ) + r <- + shuffleLinks + =<< ( roomRectAutoLights 250 250 + <&> rmPmnts + <>~ [ putLasTurret 0.02 & plSpot .~ PS laspos a + , awall (V2 35 100) (rectWH 10 60) + , awall (V2 150 215) (rectWH 60 10) + ] + <&> rmLinks + %~ setInLinks alinks + <&> rmLinks + %~ setOutLinks blinks + <&> rmPath + %~ ( addNodesCrossing (V2 110 170, V2 30 250) + . addNodesCrossing (V2 70 150, V2 10 210) + ) + ) rToOnward "lasCenRunClose" $ return $ cleatOnward r where - bllinks = etest - (memtest (FromEdge West 0) (OnEdge South)) - (memtest (FromEdge South 0) (OnEdge West)) - trlinks = etest - (memtest (FromEdge East 0) (OnEdge North)) - (memtest (FromEdge North 0) (OnEdge East)) + bllinks = + etest + (memtest (FromEdge West 0) (OnEdge South)) + (memtest (FromEdge South 0) (OnEdge West)) + trlinks = + etest + (memtest (FromEdge East 0) (OnEdge North)) + (memtest (FromEdge North 0) (OnEdge East)) awall x v = heightWallPS (PS x 0) 30 v etest f g x = f x || g x - memtest a b x = let y = _rlType x - in a `S.member` y && b `S.member` y + memtest a b x = + let y = _rlType x + in a `S.member` y && b `S.member` y lasTunnel :: (RandomGen g) => Float -> State g Room lasTunnel y = do diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 366b29d8d..7f4e6a848 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -53,8 +53,7 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor - , lasSensorTurretTest ---ccc , passthroughLockKeyLists lockRoomKeyItems itemRooms + , passthroughLockKeyLists lockRoomKeyItems itemRooms --bbb , -- , return . tToBTree "door" $ treePost [corridor, cleatOnward door] --bbb corDoor --bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor) @@ -107,7 +106,7 @@ foldMTRS xs = do setTreeInts :: Tree Room -> State LayoutVars ([Int], Tree Room) setTreeInts x = do - y <- traverse setRoomInt x + y <- traverse storeRoomID x return (foldMap ((: []) . fst) y, fmap snd y) tutDrop :: State LayoutVars (MetaTree Room String) @@ -115,7 +114,7 @@ tutDrop = do x <- shuffleLinks =<< roomNgon 6 100 i <- nextLayoutInt -- let y = decontamRoom i - (j, y) <- setRoomInt (decontamRoom i) + (j, y) <- storeRoomID (decontamRoom i) rm <- roomRectAutoLights 40 100 return $ tToBTree "TutDrop" $ diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index 0bfbef734..a1a2448f4 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -183,8 +183,7 @@ heldAimZoom = \case FLAMETORRENT -> 1 FLAMEWALL -> 1 BLOWTORCH -> 1 - SPARKGUN -> 1 - TESLAGUN -> 1.5 + TESLACOIL -> 1.5 TRACTORGUN -> 1.5 RLAUNCHER -> 1.5 RLAUNCHERX{} -> 1.5 diff --git a/tags b/tags index f3fe5f866..258b39bbf 100644 --- a/tags +++ b/tags @@ -87,8 +87,8 @@ BATTERYPACK src/Dodge/Data/Item/Combine.hs 135;" C BELTMAG src/Dodge/Data/Item/Combine.hs 109;" C BINGATE src/Dodge/Data/Item/Combine.hs 31;" C BLACK src/Color/Data.hs 25;" C -BLINKER src/Dodge/Data/Item/Combine.hs 178;" C -BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 179;" C +BLINKER src/Dodge/Data/Item/Combine.hs 177;" C +BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 178;" C BLOWTORCH src/Dodge/Data/Item/Combine.hs 166;" C BLUE src/Color/Data.hs 14;" C BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 149;" C @@ -175,7 +175,7 @@ CLICKER src/Dodge/Data/Item/Combine.hs 27;" C COMPRESSOR src/Dodge/Data/Item/Combine.hs 103;" C COPIER src/Dodge/Data/Item/Combine.hs 28;" C CRAFT src/Dodge/Data/Item/Combine.hs 18;" C -CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 184;" C +CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 183;" C CREATURESENSOR src/Dodge/Data/Item/Combine.hs 84;" C CWGen src/Dodge/Data/CWorld.hs 39;" t CWorld src/Dodge/Data/CWorld.hs 23;" t @@ -320,7 +320,7 @@ DefaultRoomType src/Dodge/Data/Room.hs 32;" C DestroyBeing src/Dodge/Data/Scenario.hs 8;" C DestroyBullet src/Dodge/Data/Bullet.hs 27;" C DestroyItem src/Dodge/Data/Scenario.hs 7;" C -Detector src/Dodge/Data/Item/Combine.hs 182;" t +Detector src/Dodge/Data/Item/Combine.hs 181;" t Dirt src/Dodge/Data/Material.hs 12;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t DisplayTerminal src/Dodge/Data/HUD.hs 27;" C @@ -403,7 +403,7 @@ FLAMESPITTER src/Dodge/Data/Item/Combine.hs 162;" C FLAMETHROWER src/Dodge/Data/Item/Combine.hs 163;" C FLAMETORRENT src/Dodge/Data/Item/Combine.hs 164;" C FLAMEWALL src/Dodge/Data/Item/Combine.hs 165;" C -FLATSHIELD src/Dodge/Data/Item/Combine.hs 176;" C +FLATSHIELD src/Dodge/Data/Item/Combine.hs 175;" C FRONTARMOUR src/Dodge/Data/Item/Combine.hs 123;" C FUELCELL src/Dodge/Data/Item/Combine.hs 86;" C FUELPACK src/Dodge/Data/Item/Combine.hs 132;" C @@ -463,7 +463,7 @@ GBounce src/Dodge/Data/Projectile.hs 46;" C GEqC src/SameConstr.hs 20;" c GIMBAL src/Dodge/Data/Item/Combine.hs 95;" C GLASSSHARD src/Dodge/Data/Item/Combine.hs 60;" C -GLAUNCHER src/Dodge/Data/Item/Combine.hs 172;" C +GLAUNCHER src/Dodge/Data/Item/Combine.hs 171;" C GRAPECANNON src/Dodge/Data/Item/Combine.hs 150;" C GREEN src/Color/Data.hs 13;" C GStick src/Dodge/Data/Projectile.hs 47;" C @@ -551,7 +551,7 @@ IMSS src/Dodge/Data/SelectionList.hs 38;" t INTROSCAN src/Dodge/Data/Item/Combine.hs 32;" C INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 125;" C IRONBAR src/Dodge/Data/Item/Combine.hs 78;" C -ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 183;" C +ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 182;" C ITEMSCAN src/Dodge/Data/Item/Combine.hs 24;" C ImmediateEffect src/Loop/Data.hs 8;" C Importance src/Shape/Data.hs 29;" t @@ -617,12 +617,12 @@ JUMPLEGS src/Dodge/Data/Item/Combine.hs 131;" C JoystickSF src/Dodge/Data/ComposedItem.hs 26;" C Just' src/MaybeHelp.hs 11;" C JustStartedPlaying src/Sound/Data.hs 22;" C -KEYCARD src/Dodge/Data/Item/Combine.hs 177;" C +KEYCARD src/Dodge/Data/Item/Combine.hs 176;" C 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 -LED src/Dodge/Data/Item/Combine.hs 175;" C +LED src/Dodge/Data/Item/Combine.hs 174;" C LIGHTER src/Dodge/Data/Item/Combine.hs 66;" C LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 79;" C LS src/Dodge/Data/LightSource.hs 21;" C @@ -956,7 +956,7 @@ PJStabiliser src/Dodge/Projectile/Create.hs 16;" t PLANK src/Dodge/Data/Item/Combine.hs 59;" C PLATE src/Dodge/Data/Item/Combine.hs 69;" C PLUS src/Dodge/Data/GenParams.hs 18;" C -POISONSPRAYER src/Dodge/Data/Item/Combine.hs 173;" C +POISONSPRAYER src/Dodge/Data/Item/Combine.hs 172;" C PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 87;" C POWERLEGS src/Dodge/Data/Item/Combine.hs 129;" C PRISM src/Dodge/Data/Item/Combine.hs 65;" C @@ -1071,8 +1071,8 @@ REMOTESCREEN src/Dodge/Data/Item/Combine.hs 93;" C REWINDER src/Dodge/Data/Item/Combine.hs 141;" C RGBA src/Color/Data.hs 28;" t RIFLE src/Dodge/Data/Item/Combine.hs 153;" C -RLAUNCHER src/Dodge/Data/Item/Combine.hs 170;" C -RLAUNCHERX src/Dodge/Data/Item/Combine.hs 171;" C +RLAUNCHER src/Dodge/Data/Item/Combine.hs 169;" C +RLAUNCHERX src/Dodge/Data/Item/Combine.hs 170;" C ROSE src/Color/Data.hs 18;" C RPLinkStatus src/Dodge/Data/Room.hs 58;" t RProps src/Dodge/Layout/Generate.hs 14;" C @@ -1133,7 +1133,7 @@ RoomWire src/Dodge/Data/Room.hs 53;" t RoundedFaces src/Shape/Data.hs 13;" C RunningSideEffect src/Dodge/Data/Universe.hs 67;" C SCRAPMETAL src/Dodge/Data/Item/Combine.hs 61;" C -SHATTERGUN src/Dodge/Data/Item/Combine.hs 174;" C +SHATTERGUN src/Dodge/Data/Item/Combine.hs 173;" C SHELLMAG src/Dodge/Data/Item/Combine.hs 110;" C SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 101;" C SIDisplayMod src/Dodge/Data/SelectionList.hs 55;" t @@ -1141,7 +1141,6 @@ SMG src/Dodge/Data/Item/Combine.hs 147;" C SMOKEREDUCER src/Dodge/Data/Item/Combine.hs 99;" C SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 161;" C SOUNDSENSOR src/Dodge/Data/Item/Combine.hs 80;" C -SPARKGUN src/Dodge/Data/Item/Combine.hs 167;" C SPEEDLEGS src/Dodge/Data/Item/Combine.hs 130;" C SPRING src/Dodge/Data/Item/Combine.hs 53;" C SPic src/ShapePicture/Data.hs 7;" t @@ -1281,7 +1280,7 @@ TCDamageCommand src/Dodge/Data/Terminal.hs 50;" C TCInfo src/Dodge/Data/Terminal.hs 48;" C TCom src/Dodge/Data/Terminal.hs 47;" t TCommands src/Dodge/Terminal.hs 56;" t -TESLAGUN src/Dodge/Data/Item/Combine.hs 168;" C +TESLACOIL src/Dodge/Data/Item/Combine.hs 167;" C THERMOMETER src/Dodge/Data/Item/Combine.hs 83;" C THREELINES src/Dodge/Data/GenParams.hs 18;" C TIMESCROLLER src/Dodge/Data/Item/Combine.hs 143;" C @@ -1290,7 +1289,7 @@ TIN src/Dodge/Data/Item/Combine.hs 57;" C TINMAG src/Dodge/Data/Item/Combine.hs 107;" C TLine src/Dodge/Data/Terminal.hs 36;" C TO src/Shader/Data.hs 59;" t -TRACTORGUN src/Dodge/Data/Item/Combine.hs 169;" C +TRACTORGUN src/Dodge/Data/Item/Combine.hs 168;" C TRANSFORMER src/Dodge/Data/Item/Combine.hs 64;" C TRANSMITTER src/Dodge/Data/Item/Combine.hs 70;" C TSbackspace src/Dodge/Data/Input.hs 54;" C @@ -1444,7 +1443,7 @@ Vision src/Dodge/Data/Creature/Perception.hs 39;" t Vocalization src/Dodge/Data/Creature/Misc.hs 18;" t VolleyGunTrigger src/Dodge/Data/TriggerType.hs 13;" C VolleyUnfiredBarrels src/Dodge/Data/Item/Params.hs 17;" C -WALLDETECTOR src/Dodge/Data/Item/Combine.hs 185;" C +WALLDETECTOR src/Dodge/Data/Item/Combine.hs 184;" C WHITE src/Color/Data.hs 24;" C WIRE src/Dodge/Data/Item/Combine.hs 85;" C WRISTARMOUR src/Dodge/Data/Item/Combine.hs 124;" C @@ -2500,7 +2499,7 @@ _wsIsAutoDoor src/Dodge/Data/Wall/Structure.hs 12;" f _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 +_xNum src/Dodge/Data/Item/Combine.hs 170;" f aBar src/Dodge/Placement/Instance/LightSource.hs 66;" f aFlame src/Dodge/Gas.hs 20;" f aGasCloud src/Dodge/Gas.hs 15;" f @@ -2552,7 +2551,7 @@ adjustIMZone src/Dodge/Base.hs 81;" f advanceScrollAmount src/Dodge/Update.hs 454;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f aimDelaySweep src/Dodge/Render/Picture.hs 285;" f -aimStanceInfo src/Dodge/Item/Info.hs 243;" f +aimStanceInfo src/Dodge/Item/Info.hs 242;" f aimTurn src/Dodge/Creature/YourControl.hs 181;" f airlock src/Dodge/Room/Airlock.hs 28;" f airlock0 src/Dodge/Room/Airlock.hs 78;" f @@ -2570,8 +2569,8 @@ ammoMagSPic src/Dodge/Item/Draw/SPic.hs 128;" f amr src/Dodge/Item/Held/Rod.hs 34;" f anRoom src/Dodge/Floor.hs 116;" f analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f -analyserByDoor src/Dodge/Room/LasTurret.hs 131;" f -analyserByNthLink src/Dodge/Room/LasTurret.hs 115;" f +analyserByDoor src/Dodge/Room/LasTurret.hs 124;" f +analyserByNthLink src/Dodge/Room/LasTurret.hs 108;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f angleBetween src/Geometry.hs 158;" f angleVV src/Geometry/Vector.hs 58;" f @@ -2584,16 +2583,16 @@ 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 446;" f +applyInvLock src/Dodge/HeldUse.hs 445;" 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 477;" f +applyRecoil src/Dodge/HeldUse.hs 476;" 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 577;" f -applySoundCME src/Dodge/HeldUse.hs 467;" f +applySidePush src/Dodge/HeldUse.hs 574;" f +applySoundCME src/Dodge/HeldUse.hs 466;" 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 @@ -2601,7 +2600,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 588;" f +applyTorqueCME src/Dodge/HeldUse.hs 585;" f applyWorldConfig src/Dodge/Config.hs 55;" f aquamarine src/Color.hs 50;" f arHUD src/Dodge/Item/Scope.hs 140;" f @@ -2621,7 +2620,7 @@ arms src/Dodge/Creature/Picture.hs 72;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f -assignPushDoors src/Dodge/LevelGen.hs 36;" f +assignPushDoors src/Dodge/LevelGen.hs 37;" f atFstLnkOut src/Dodge/PlacementSpot.hs 224;" f atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 244;" f atFstLnkOutShiftInward src/Dodge/PlacementSpot.hs 247;" f @@ -2653,7 +2652,7 @@ backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f backpackShape src/Dodge/Item/Draw/SPic.hs 187;" f backspaceInputted src/Dodge/Update/Input/Text.hs 25;" f bangCone src/Dodge/Item/Held/Cone.hs 11;" f -bangConeShape src/Dodge/Item/Draw/SPic.hs 304;" f +bangConeShape src/Dodge/Item/Draw/SPic.hs 303;" f bangEchoS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 647;" f bangRod src/Dodge/Item/Held/Rod.hs 18;" f bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 827;" f @@ -2661,17 +2660,17 @@ bangStick src/Dodge/Item/Held/Stick.hs 15;" f barPP src/Dodge/Room/Foreground.hs 231;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f barrelShape src/Dodge/Render/ShapePicture.hs 120;" f -baseAMRShape src/Dodge/Item/Draw/SPic.hs 408;" f +baseAMRShape src/Dodge/Item/Draw/SPic.hs 407;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 76;" f baseCI src/Dodge/Item/Grammar.hs 162;" f baseFloorTileSize src/Tile.hs 45;" f baseItemTriggerType src/Dodge/BaseTriggerType.hs 21;" f -baseRifleShape src/Dodge/Item/Draw/SPic.hs 324;" f -baseRodShape src/Dodge/Item/Draw/SPic.hs 405;" f -baseSMGShape src/Dodge/Item/Draw/SPic.hs 393;" f +baseRifleShape src/Dodge/Item/Draw/SPic.hs 323;" f +baseRodShape src/Dodge/Item/Draw/SPic.hs 404;" f +baseSMGShape src/Dodge/Item/Draw/SPic.hs 392;" 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 +baseStickShape src/Dodge/Item/Draw/SPic.hs 300;" f +baseStickShapeX src/Dodge/Item/Draw/SPic.hs 292;" f baseStickSpread src/Dodge/HeldUse.hs 336;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 127;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 39;" f @@ -2679,13 +2678,13 @@ 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 728;" f +basicMuzFlare src/Dodge/HeldUse.hs 724;" 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 532;" f +bgunSound src/Dodge/HeldUse.hs 530;" f bingate src/Dodge/Item/Scope.hs 115;" f black src/Color.hs 54;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 15;" f @@ -2720,7 +2719,7 @@ blowTorch src/Dodge/Item/Held/SprayGuns.hs 43;" f blue src/Color.hs 43;" f blunderbuss src/Dodge/Item/Held/Cone.hs 14;" f boolOption src/Dodge/Menu/OptionType.hs 12;" f -bossKeyItems src/Dodge/LockAndKey.hs 12;" f +bossKeyItems src/Dodge/LockAndKey.hs 13;" f bossRoom src/Dodge/Room/Boss.hs 55;" f bounceDir src/Dodge/Bullet.hs 111;" f bouncePoint src/Dodge/Base/Collide.hs 86;" f @@ -2750,7 +2749,7 @@ bulletBeltPack src/Dodge/Item/Equipment.hs 50;" f bulletModule src/Dodge/Item/Scope.hs 122;" f bulletPayloadModule src/Dodge/Item/Scope.hs 137;" f bulletSynthesizer src/Dodge/Item/Ammo.hs 89;" f -bulletWeapons src/Dodge/Combine/Combinations.hs 248;" f +bulletWeapons src/Dodge/Combine/Combinations.hs 247;" 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 @@ -2770,7 +2769,7 @@ cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 28;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f -cenLasTur src/Dodge/Room/LasTurret.hs 49;" f +cenLasTur src/Dodge/Room/LasTurret.hs 50;" f centerText src/Picture/Base.hs 176;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f @@ -2843,7 +2842,7 @@ cleatSide src/Dodge/Cleat.hs 27;" f click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 783;" f clicker src/Dodge/Item/Scope.hs 88;" f clipV src/Geometry/Vector.hs 48;" f -clipZoom src/Dodge/Update/Camera.hs 240;" f +clipZoom src/Dodge/Update/Camera.hs 239;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 205;" f @@ -2891,9 +2890,9 @@ commandColor src/Dodge/Terminal.hs 127;" f commonPrefix src/Dodge/Debug/Terminal.hs 149;" f comp src/Quaternion.hs 61;" f compP2A src/Dodge/ShiftPoint.hs 11;" f -compactDraw src/Dodge/LevelGen.hs 95;" f -compactDraw' src/Dodge/LevelGen.hs 106;" f -compactDrawTree src/Dodge/LevelGen.hs 89;" f +compactDraw src/Dodge/LevelGen.hs 96;" f +compactDraw' src/Dodge/LevelGen.hs 107;" f +compactDrawTree src/Dodge/LevelGen.hs 90;" f compareLHS src/Geometry/LHS.hs 30;" f compileAndCheckShader src/Shader/Compile.hs 108;" f composeNode src/Dodge/Tree/Compose.hs 77;" f @@ -2920,7 +2919,7 @@ corDoor src/Dodge/Room/Room.hs 404;" f cornerList src/Preload/Render.hs 236;" f corpseOrGib src/Dodge/Creature/Update.hs 98;" f corridor src/Dodge/Room/Corridor.hs 17;" f -corridorBoss src/Dodge/LockAndKey.hs 133;" f +corridorBoss src/Dodge/LockAndKey.hs 136;" f corridorN src/Dodge/Room/Corridor.hs 58;" f corridorWallN src/Dodge/Room/Corridor.hs 77;" f crAdd src/Dodge/Room/RezBox.hs 116;" f @@ -2970,7 +2969,7 @@ crVocalizationSound src/Dodge/Creature/Vocalization.hs 16;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 26;" f crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 59;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f -craftInfo src/Dodge/Item/Info.hs 169;" f +craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 597;" f createForceField src/Dodge/ForceField.hs 7;" f @@ -2978,15 +2977,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 1300;" f -createProjectileR src/Dodge/HeldUse.hs 1249;" f +createProjectile src/Dodge/HeldUse.hs 1293;" f +createProjectileR src/Dodge/HeldUse.hs 1242;" 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 856;" f -creatureShootPulseLaser src/Dodge/HeldUse.hs 887;" f +creatureShootLaser src/Dodge/HeldUse.hs 852;" f +creatureShootPulseLaser src/Dodge/HeldUse.hs 883;" 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 @@ -3102,7 +3101,7 @@ 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 -defSPic src/Dodge/Item/Draw/SPic.hs 310;" f +defSPic src/Dodge/Item/Draw/SPic.hs 309;" f defaultAimMvType src/Dodge/Creature/MoveType.hs 16;" f defaultAimingCrit src/Dodge/Default/Creature.hs 108;" f defaultAudition src/Dodge/Default/Creature.hs 93;" f @@ -3166,9 +3165,9 @@ 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 1220;" f +detectorColor src/Dodge/Item/Draw/SPic.hs 432;" f +detectorInfo src/Dodge/Item/Info.hs 223;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1213;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 205;" f @@ -3230,7 +3229,7 @@ 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 1181;" f +doGenFloat src/Dodge/HeldUse.hs 1174;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f doHeldUseEffect src/Dodge/HeldUse.hs 369;" f doInPlacements src/Dodge/Layout.hs 87;" f @@ -3258,7 +3257,7 @@ 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 103;" f -doWallRotate src/Dodge/Update/Camera.hs 229;" f +doWallRotate src/Dodge/Update/Camera.hs 228;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f @@ -3404,7 +3403,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 1375;" f +dropInventoryPath src/Dodge/HeldUse.hs 1368;" 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 @@ -3457,10 +3456,10 @@ eqTypeToSites src/Dodge/Inventory/RBList.hs 77;" f equipAllocString src/Dodge/Render/HUD.hs 316;" f equipAttachPos src/Dodge/Item/Draw.hs 30;" f equipBackgroundEffect src/Dodge/Euse.hs 22;" f -equipInfo src/Dodge/Item/Info.hs 141;" f +equipInfo src/Dodge/Item/Info.hs 140;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 158;" f equipPosition src/Dodge/Item/Draw.hs 38;" f -equipSiteInfo src/Dodge/Item/Info.hs 253;" f +equipSiteInfo src/Dodge/Item/Info.hs 252;" f equipSitePQ src/Dodge/Creature/HandPos.hs 27;" f equipType src/Dodge/Data/EquipType.hs 10;" f equipmentDesignation src/Dodge/Inventory/RBList.hs 52;" f @@ -3491,13 +3490,13 @@ extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 102;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 62;" f facesToVF src/Polyhedra/Geodesic.hs 70;" f -farWallDistDirection src/Dodge/Update/Camera.hs 251;" f +farWallDistDirection src/Dodge/Update/Camera.hs 250;" f fdiv src/ShortShow.hs 41;" f feet src/Dodge/Creature/Picture.hs 51;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f -findBoundDists src/Dodge/Update/Camera.hs 258;" f +findBoundDists src/Dodge/Update/Camera.hs 257;" f findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f findIndex src/IntMapHelp.hs 86;" f @@ -3522,12 +3521,12 @@ flameSpitter src/Dodge/Item/Held/SprayGuns.hs 23;" f 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 709;" f +flamerPic src/Dodge/Item/Draw/SPic.hs 395;" f +flareCircleAt src/Dodge/HeldUse.hs 705;" 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 -flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 420;" f +flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 419;" f fleeFrom src/Dodge/CreatureEffect.hs 92;" f flickerMod src/Dodge/Placement/Instance/LightSource/Flicker.hs 10;" f flickerUpdate src/Dodge/Placement/Instance/LightSource/Flicker.hs 24;" f @@ -3581,7 +3580,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 1138;" f +gasType src/Dodge/HeldUse.hs 1132;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 147;" f @@ -3595,11 +3594,11 @@ 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 802;" f +getAttachedSFLink src/Dodge/HeldUse.hs 798;" 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 937;" f +getBulletType src/Dodge/HeldUse.hs 933;" f getCloseObj src/Dodge/Update/Input/InGame.hs 539;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f @@ -3609,19 +3608,20 @@ 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 1288;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1281;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 144;" f -getLaserColor src/Dodge/HeldUse.hs 725;" f -getLaserDamage src/Dodge/HeldUse.hs 722;" f -getLaserPhaseV src/Dodge/HeldUse.hs 719;" f +getLaserColor src/Dodge/HeldUse.hs 721;" f +getLaserDamage src/Dodge/HeldUse.hs 718;" f +getLaserPhaseV src/Dodge/HeldUse.hs 715;" 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 1275;" f +getPJStabiliser src/Dodge/HeldUse.hs 1268;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f +getRoomFromID src/Dodge/Room/LasTurret.hs 195;" f getRoomsFromInts src/Dodge/Room/Tutorial.hs 479;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f @@ -3648,7 +3648,7 @@ glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 711;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 687;" f glassSwitchBack src/Dodge/Room/Room.hs 82;" f glassSwitchBackCrits src/Dodge/Room/Room.hs 116;" f -glauncherPic src/Dodge/Item/Draw/SPic.hs 402;" f +glauncherPic src/Dodge/Item/Draw/SPic.hs 401;" f gluintSize src/Shader/Parameters.hs 25;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f goToTarget src/Dodge/Creature/ReaderUpdate.hs 150;" f @@ -3703,12 +3703,12 @@ hasLOSIndirect src/Dodge/Base/Collide.hs 320;" f 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 +headLampShape src/Dodge/Item/Draw/SPic.hs 422;" f headMap src/Dodge/DoubleTree.hs 118;" f headPQ src/Dodge/Creature/HandPos.hs 116;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f -healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 112;" f -healthTest src/Dodge/Room/LasTurret.hs 134;" f +healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f +healthTest src/Dodge/Room/LasTurret.hs 127;" 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 @@ -3718,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 460;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1023;" f +heldItemInvLock src/Dodge/HeldUse.hs 459;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1019;" f heldItemMuzzles src/Dodge/HeldUse.hs 188;" f -heldItemRifling src/Dodge/HeldUse.hs 1066;" f +heldItemRifling src/Dodge/HeldUse.hs 1061;" 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 604;" f +heldPositionInfo src/Dodge/Item/Info.hs 239;" f +heldTorqueAmount src/Dodge/HeldUse.hs 601;" f heldTriggerType src/Dodge/BaseTriggerType.hs 28;" f heron src/Geometry.hs 218;" f hiToFloat src/Dodge/Room/Modify/Girder.hs 171;" f @@ -3834,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 735;" f +isAmmoIntLink src/Dodge/HeldUse.hs 731;" 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 @@ -3878,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 808;" f +itemDetectorEffect src/Dodge/HeldUse.hs 804;" 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 @@ -3890,9 +3890,9 @@ 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 455;" f +itemInvLock src/Dodge/HeldUse.hs 454;" f itemMuzzles src/Dodge/HeldUse.hs 172;" f -itemRooms src/Dodge/LockAndKey.hs 39;" f +itemRooms src/Dodge/LockAndKey.hs 41;" f itemRotTreeSPic src/Dodge/Item/Draw/SPicTree.hs 16;" f itemSPic src/Dodge/Item/Draw/SPic.hs 17;" f itemScan src/Dodge/Item/Scope.hs 68;" f @@ -3913,9 +3913,9 @@ itemWeight src/Dodge/Creature/Statistics.hs 74;" f iterateUntil src/MonadHelp.hs 23;" f iterateWhile src/MonadHelp.hs 30;" f itmBaseInfo src/Dodge/Item/Info.hs 30;" f -itmEquipSiteInfo src/Dodge/Item/Info.hs 250;" f +itmEquipSiteInfo src/Dodge/Item/Info.hs 249;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f -itmUsageInfo src/Dodge/Item/Info.hs 230;" f +itmUsageInfo src/Dodge/Item/Info.hs 229;" 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 @@ -3930,10 +3930,10 @@ 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 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 +keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 102;" f +keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 90;" f +keyCardRunPastRand src/Dodge/LockAndKey.hs 38;" f +keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f lChasm src/Dodge/Room/Tutorial.hs 159;" f @@ -3943,26 +3943,26 @@ lConnectMulti src/Dodge/Render/Connectors.hs 51;" f lShape src/Dodge/Placement/Instance/LightSource.hs 57;" f lamp src/Dodge/Creature/Lamp.hs 18;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f -lasCenRunClose' src/Dodge/Room/LasTurret.hs 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 +lasCenRunClose' src/Dodge/Room/LasTurret.hs 321;" f +lasCenRunClose1 src/Dodge/Room/LasTurret.hs 410;" f +lasCenRunClose2 src/Dodge/Room/LasTurret.hs 483;" f +lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 375;" f +lasCenSensEdge src/Dodge/Room/LasTurret.hs 162;" f +lasGunPic src/Dodge/Item/Draw/SPic.hs 413;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" 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 +lasRunRand src/Dodge/Room/LasTurret.hs 480;" f +lasRunYinYang src/Dodge/Room/LasTurret.hs 198;" f +lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 261;" f +lasSensorTurretTest src/Dodge/Room/LasTurret.hs 139;" f +lasTunnel src/Dodge/Room/LasTurret.hs 521;" f +lasTunnelRunPast src/Dodge/Room/LasTurret.hs 562;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f -laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f +laser src/Dodge/Item/Held/BatteryGuns.hs 27;" 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 +layoutLevelFromSeed src/Dodge/LevelGen.hs 42;" f ldpRect src/Dodge/Render/List.hs 48;" f ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 84;" f leaveResetQuitTerminal src/Dodge/WorldEffect.hs 165;" f @@ -3975,12 +3975,12 @@ leftLegPQ src/Dodge/Creature/HandPos.hs 85;" f leftPad src/Padding.hs 15;" f 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 +legsSPic src/Dodge/Item/Draw/SPic.hs 447;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 82;" f light src/Color.hs 131;" f -lightSensByDoor src/Dodge/Room/LasTurret.hs 82;" f -lightSensInsideDoor src/Dodge/Room/LasTurret.hs 70;" f +lightSensByDoor src/Dodge/Room/LasTurret.hs 75;" f +lightSensInsideDoor src/Dodge/Room/LasTurret.hs 63;" f lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f lightx4 src/Color.hs 155;" f @@ -4005,7 +4005,7 @@ 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 648;" f +loadMuzzle src/Dodge/HeldUse.hs 644;" f loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f @@ -4023,8 +4023,8 @@ locOrient src/Dodge/Item/HeldOffset.hs 52;" 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 +lockRoomKeyItems src/Dodge/LockAndKey.hs 26;" f +lockRoomMultiItems src/Dodge/LockAndKey.hs 16;" f lockedStart src/Dodge/Room/RunPast.hs 34;" f logMenu src/Dodge/Menu.hs 125;" f logOptions src/Dodge/Menu.hs 140;" f @@ -4049,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 958;" f +magAmmoParams src/Dodge/HeldUse.hs 954;" 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 @@ -4063,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 1002;" f +makeBullet src/Dodge/HeldUse.hs 998;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f @@ -4082,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 674;" f +makeMuzzleFlare src/Dodge/HeldUse.hs 670;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 63;" f makePathBetweenPs src/Dodge/Path.hs 87;" f @@ -4138,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 1193;" f -mcShootLaser src/Dodge/HeldUse.hs 1185;" f +mcShootAuto src/Dodge/HeldUse.hs 1186;" f +mcShootLaser src/Dodge/HeldUse.hs 1178;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f -mcUseHeld src/Dodge/HeldUse.hs 1109;" f +mcUseHeld src/Dodge/HeldUse.hs 1103;" 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 @@ -4184,8 +4184,8 @@ minOn src/FoldableHelp.hs 35;" f mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 583;" f miniGunCrit src/Dodge/Creature.hs 61;" f miniGunX src/Dodge/Item/Held/Cane.hs 33;" f -miniGunXPict src/Dodge/Item/Draw/SPic.hs 375;" f -miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 367;" f +miniGunXPict src/Dodge/Item/Draw/SPic.hs 374;" f +miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 366;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 653;" f miniTree2 src/Dodge/Room/Room.hs 123;" f minimumOn src/FoldlHelp.hs 14;" f @@ -4233,9 +4233,9 @@ 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 696;" f -muzzlePos src/Dodge/HeldUse.hs 783;" f -muzzleRandPos src/Dodge/HeldUse.hs 792;" f +muzFlareAt src/Dodge/HeldUse.hs 692;" f +muzzlePos src/Dodge/HeldUse.hs 779;" f +muzzleRandPos src/Dodge/HeldUse.hs 788;" f muzzleWallCheck src/Dodge/Update.hs 323;" f mvButton src/Dodge/Placement/PlaceSpot.hs 177;" f mvCr src/Dodge/Placement/PlaceSpot.hs 180;" f @@ -4544,7 +4544,7 @@ putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 101;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 57;" f putShape src/Dodge/Room/Foreground.hs 134;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f -putStrLnAppend src/Dodge/LevelGen.hs 83;" f +putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 51;" f putTerminalFull src/Dodge/Placement/Instance/Terminal.hs 20;" f putTerminalImediateAccess src/Dodge/Placement/Instance/Terminal.hs 15;" f @@ -4608,7 +4608,7 @@ 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 485;" f +recoilAmount src/Dodge/HeldUse.hs 484;" f rectNSWE src/Geometry/Polygon.hs 15;" f rectVV src/Geometry/Polygon.hs 48;" f rectWH src/Geometry/Polygon.hs 19;" f @@ -4637,7 +4637,7 @@ 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 933;" f +removeAmmoFromMag src/Dodge/HeldUse.hs 929;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f removeLights src/Dodge/Room/Tutorial.hs 394;" f @@ -4672,7 +4672,7 @@ resumeSound src/Dodge/SoundLogic.hs 48;" f retreatPointForFrom src/Dodge/Creature/Impulse/Flee.hs 9;" f revCard src/Dodge/Data/CardinalPoint.hs 13;" f reverseCymbal1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 807;" f -reversePair src/Dodge/LevelGen.hs 86;" f +reversePair src/Dodge/LevelGen.hs 87;" f rewinder src/Dodge/Item/Held/Utility.hs 36;" f rezBox src/Dodge/Room/RezBox.hs 31;" f rezBox' src/Dodge/Room/RezBox.hs 46;" f @@ -4694,7 +4694,7 @@ rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f rightWristPQ src/Dodge/Creature/HandPos.hs 58;" f rlPosDir src/Dodge/RoomLink.hs 112;" f -rlauncherPic src/Dodge/Item/Draw/SPic.hs 399;" f +rlauncherPic src/Dodge/Item/Draw/SPic.hs 398;" f rmInLinks src/Dodge/RoomLink.hs 153;" f rmInvItem src/Dodge/Inventory.hs 74;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f @@ -4729,7 +4729,7 @@ rotate3 src/Geometry/Vector3D.hs 48;" f rotate3x src/Geometry/Vector3D.hs 60;" f rotate3y src/Geometry/Vector3D.hs 66;" f rotate3z src/Geometry/Vector3D.hs 54;" f -rotateCamera src/Dodge/Update/Camera.hs 205;" f +rotateCamera src/Dodge/Update/Camera.hs 204;" f rotateList src/Padding.hs 49;" f rotateSH src/Shape.hs 254;" f rotateSHq src/Shape.hs 163;" f @@ -4737,7 +4737,7 @@ rotateSHx src/Shape.hs 262;" f rotateSP src/ShapePicture.hs 57;" f rotateTo src/Polyhedra/Geodesic.hs 65;" f rotateTo8 src/Dodge/Update/Camera/Rotate.hs 6;" f -rotateToOverlappingWall src/Dodge/Update/Camera.hs 217;" f +rotateToOverlappingWall src/Dodge/Update/Camera.hs 216;" f rotateToZ src/Quaternion.hs 35;" f rotateV src/Geometry/Vector.hs 106;" f rotateVAround src/Geometry/Vector.hs 113;" f @@ -4853,7 +4853,6 @@ 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/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 @@ -4863,7 +4862,7 @@ 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 107;" f -setViewDistance src/Dodge/Update/Camera.hs 246;" f +setViewDistance src/Dodge/Update/Camera.hs 245;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f @@ -4884,7 +4883,7 @@ shapeBounds src/Dodge/Room/Foreground.hs 147;" f shapePoints src/Dodge/Room/Foreground.hs 144;" f shapeVerxSize src/Shape/Parameters.hs 5;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f -shatterGunSPic src/Dodge/Item/Draw/SPic.hs 313;" f +shatterGunSPic src/Dodge/Item/Draw/SPic.hs 312;" f shellExplosionCheck src/Dodge/Projectile/Update.hs 50;" f shellHitCreature src/Dodge/Projectile/Update.hs 84;" f shellHitFloor src/Dodge/Projectile/Update.hs 98;" f @@ -4913,17 +4912,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 996;" f -shootBullets src/Dodge/HeldUse.hs 990;" f +shootBullet src/Dodge/HeldUse.hs 992;" f +shootBullets src/Dodge/HeldUse.hs 986;" f shootFirstMiss src/Dodge/Creature/Volition.hs 34;" 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 +shootLaser src/Dodge/HeldUse.hs 862;" f +shootPlasmaBall src/Dodge/HeldUse.hs 903;" f +shootPulseBall src/Dodge/HeldUse.hs 915;" f +shootPulseLaser src/Dodge/HeldUse.hs 890;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 1210;" f +shootTeslaArc src/Dodge/HeldUse.hs 1203;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f -shootTractorBeam src/Dodge/HeldUse.hs 835;" f +shootTractorBeam src/Dodge/HeldUse.hs 831;" 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 @@ -4954,7 +4953,7 @@ simpleCrSprings src/Dodge/Update.hs 931;" f 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 +singleAmmo src/Dodge/Item/AmmoSlots.hs 63;" f singleDT src/Dodge/DoubleTree.hs 8;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 20;" f @@ -4982,7 +4981,7 @@ slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 157;" f smallBattery src/Dodge/Item/Ammo.hs 57;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f -smallDrawTree src/Dodge/LevelGen.hs 92;" f +smallDrawTree src/Dodge/LevelGen.hs 93;" f smallGlass1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 825;" f smallGlass2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 535;" f smallGlass3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 805;" f @@ -4996,7 +4995,7 @@ snailAround src/Dodge/Path.hs 78;" f snapToGrid src/Dodge/Path.hs 129;" f sndV2 src/Geometry/Data.hs 73;" f sniperRifle src/Dodge/Item/Held/Rod.hs 44;" f -someCrits src/Dodge/LockAndKey.hs 120;" f +someCrits src/Dodge/LockAndKey.hs 123;" f soundAngle src/Dodge/SoundLogic.hs 163;" f soundContinue src/Dodge/SoundLogic.hs 131;" f soundContinueVol src/Dodge/SoundLogic.hs 145;" f @@ -5021,7 +5020,6 @@ 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 sparkToDamage src/Dodge/Spark.hs 40;" f spawnAt src/Dodge/SpawnAt.hs 14;" f @@ -5092,6 +5090,7 @@ stopBulletAt src/Dodge/Bullet.hs 200;" f stopPushing src/Dodge/Wall/Damage.hs 172;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f storageShape src/Dodge/Machine/Draw.hs 31;" f +storeRoomID src/Dodge/Room/LasTurret.hs 187;" f strFromEquipment src/Dodge/Creature/Statistics.hs 53;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f @@ -5151,9 +5150,9 @@ terminalSPic src/Dodge/Machine/Draw.hs 47;" f terminalScreenGlow src/Dodge/Machine/Update.hs 43;" f terminalShape src/Dodge/Machine/Draw.hs 50;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 127;" f -teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f -teslaGunPic src/Dodge/Item/Draw/SPic.hs 411;" f -teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f +teslaCoil src/Dodge/Item/Held/BatteryGuns.hs 12;" f +teslaGunPic src/Dodge/Item/Draw/SPic.hs 410;" f +teslaParams src/Dodge/Item/Held/BatteryGuns.hs 18;" f testEvent src/Dodge/Event/Test.hs 11;" f testInventory src/Dodge/Creature.hs 305;" f testPic src/Dodge/Render/ShapePicture.hs 57;" f @@ -5237,15 +5236,15 @@ topInvW src/Dodge/ListDisplayParams.hs 54;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 53;" f -torchShape src/Dodge/Item/Draw/SPic.hs 277;" f -torqueAmount src/Dodge/HeldUse.hs 599;" f +torchShape src/Dodge/Item/Draw/SPic.hs 276;" f +torqueAmount src/Dodge/HeldUse.hs 596;" 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 847;" f -tractorGun src/Dodge/Item/Held/BatteryGuns.hs 46;" f -tractorGunPic src/Dodge/Item/Draw/SPic.hs 417;" f +tractorBeamAt src/Dodge/HeldUse.hs 843;" f +tractorGun src/Dodge/Item/Held/BatteryGuns.hs 39;" f +tractorGunPic src/Dodge/Item/Draw/SPic.hs 416;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 116;" f @@ -5291,7 +5290,7 @@ truncFaces src/Polyhedra/Geodesic.hs 54;" f truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 162;" f tryAttachItems src/Dodge/Item/Grammar.hs 34;" f -tryClickUse src/Dodge/Creature/YourControl.hs 237;" f +tryClickUse src/Dodge/Creature/YourControl.hs 236;" f tryCombine src/Dodge/Update/Input/InGame.hs 551;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 151;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 139;" f @@ -5353,7 +5352,7 @@ updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 484;" f updateBarrel src/Dodge/Barreloid.hs 44;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f -updateBounds src/Dodge/Update/Camera.hs 268;" f +updateBounds src/Dodge/Update/Camera.hs 267;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f updateBullets src/Dodge/Update.hs 617;" f @@ -5490,21 +5489,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 1114;" f +useGasParams src/Dodge/HeldUse.hs 1108;" f useHotkey src/Dodge/Creature/YourControl.hs 77;" f -useInventoryPath src/Dodge/HeldUse.hs 1406;" f +useInventoryPath src/Dodge/HeldUse.hs 1399;" 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 738;" f +useLoadedAmmo src/Dodge/HeldUse.hs 734;" 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 1366;" f +useRewindGun src/Dodge/HeldUse.hs 1359;" f useRoomPosCond src/Dodge/PlacementSpot.hs 187;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 190;" f -useStopWatch src/Dodge/HeldUse.hs 1347;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1355;" f +useStopWatch src/Dodge/HeldUse.hs 1340;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1348;" f useUnusedLnk src/Dodge/PlacementSpot.hs 178;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 209;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 216;" f @@ -5528,7 +5527,7 @@ verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 23;" f vgunMuzzles src/Dodge/HeldUse.hs 359;" f viewClipBounds src/Dodge/Debug/Picture.hs 350;" f -viewDistanceFromItems src/Dodge/Update/Camera.hs 202;" f +viewDistanceFromItems src/Dodge/Update/Camera.hs 201;" f viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 155;" f @@ -5537,8 +5536,8 @@ visibleWalls src/Dodge/Base/Collide.hs 216;" f 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 823;" f +volleyGunShape src/Dodge/Item/Draw/SPic.hs 354;" f +walkNozzle src/Dodge/HeldUse.hs 819;" f walkableNodeNear src/Dodge/Path.hs 69;" f wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 54;" f @@ -5546,7 +5545,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 1400;" f +warmupSound src/Dodge/HeldUse.hs 1393;" 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