diff --git a/src/Dodge/BaseTriggerType.hs b/src/Dodge/BaseTriggerType.hs index f8e0dbe78..f211dda3d 100644 --- a/src/Dodge/BaseTriggerType.hs +++ b/src/Dodge/BaseTriggerType.hs @@ -62,7 +62,7 @@ heldTriggerType = \case GLAUNCHER -> SemiAutoTrigger 20 POISONSPRAYER -> NoTrigger SHATTERGUN -> SemiAutoTrigger 20 - TORCH -> NoTrigger + LED -> NoTrigger FLATSHIELD -> NoTrigger KEYCARD{} -> NoTrigger BLINKER -> SemiAutoTrigger 20 diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 382ab2bfa..8fdd3990c 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -108,8 +108,8 @@ itemCombinations = , po [cr MICROCHIP, cr TRANSMITTER, cr LIGHTSENSOR] (detector ITEMDETECTOR) , po [cr MICROCHIP, cr TRANSMITTER, cr SOUNDSENSOR] (detector WALLDETECTOR) , po [cr MICROCHIP, cr TRANSMITTER, cr HEATSENSOR] (detector CREATUREDETECTOR) - , po [AMMOMAG BATTERY, cr LED] torch - , po [hd TORCH, eq HAT] headLamp +-- , po [AMMOMAG BATTERY, cr LED] torch + , po [hd LED, eq HAT] headLamp -- , po [cr LIGHTER, cr THERMOMETER, cr MICROCHIP] (energyBallCraft IncBall) -- , po [cr TRANSFORMER, AMMOMAG BATTERY, cr MICROCHIP] (energyBallCraft TeslaBall) ] diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index d4b10fdbc..daaf83f13 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -319,7 +319,7 @@ stackedInventory = , megaBattery , gLauncher , megaShellMag - , torch + , led , magShield MagnetRepulse , bangCone , megaTinMag 1000 diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index ec42b0a9e..5415defdf 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -78,7 +78,7 @@ invItemLocUpdate cr loc w = doAnyEquipmentEffect loc cr $ case itm ^. itType of HELD MACHINEPISTOL{} -> coolMachinePistol cr itm w LASER | loc ^. locDT . dtValue . _2 == WeaponTargetingSF , itm ^? itLocation . ilIsAttached == Just True -> shineTargetLaser cr loc w - HELD TORCH + HELD LED | itm ^? itLocation . ilIsAttached == Just True -> shineTorch cr loc w TARGETING tt | itm ^? itLocation . ilIsAttached == Just True -> updateItemTargeting tt cr itm w diff --git a/src/Dodge/Creature/Statistics.hs b/src/Dodge/Creature/Statistics.hs index 8eaaadfd7..065da716b 100644 --- a/src/Dodge/Creature/Statistics.hs +++ b/src/Dodge/Creature/Statistics.hs @@ -114,7 +114,7 @@ heldItemWeight = \case GLAUNCHER -> 10 POISONSPRAYER -> 10 SHATTERGUN -> 10 - TORCH -> 5 + LED -> 5 FLATSHIELD -> 15 KEYCARD {} -> 5 BLINKER -> 5 diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index 0dfc6304e..a598a4d81 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -227,7 +227,7 @@ heldItemBulkiness = \case GLAUNCHER -> 1 POISONSPRAYER -> 1 SHATTERGUN -> 1 - TORCH -> 1 + LED -> 1 FLATSHIELD -> 0.5 KEYCARD{} -> 1 BLINKER -> 1 diff --git a/src/Dodge/Data/Config.hs b/src/Dodge/Data/Config.hs index 3dc6f3cbf..6db248a3d 100644 --- a/src/Dodge/Data/Config.hs +++ b/src/Dodge/Data/Config.hs @@ -12,27 +12,27 @@ import qualified Data.Set as S {-# ANN module "HLint: ignore Use camelCase" #-} data NumShadowCasters - = NumShadowCasters0 - | NumShadowCasters1 - | NumShadowCasters2 - | NumShadowCasters3 - | NumShadowCasters4 - | NumShadowCasters5 - | NumShadowCasters6 - | NumShadowCasters7 - | NumShadowCasters8 - | NumShadowCasters9 - | NumShadowCasters10 - | NumShadowCasters11 - | NumShadowCasters12 - | NumShadowCasters13 - | NumShadowCasters14 - | NumShadowCasters15 - | NumShadowCasters16 - | NumShadowCasters17 - | NumShadowCasters18 - | NumShadowCasters19 - | NumShadowCasters20 + = NumLight0 + | NumLight1 + | NumLight2 + | NumLight3 + | NumLight4 + | NumLight5 + | NumLight6 + | NumLight7 + | NumLight8 + | NumLight9 + | NumLight10 + | NumLight11 + | NumLight12 + | NumLight13 + | NumLight14 + | NumLight15 + | NumLight16 + | NumLight17 + | NumLight18 + | NumLight19 + | NumLight20 deriving (Show,Eq,Bounded,Ord,Enum) data Config = Config diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 42c81d7ac..03fc52dc8 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -75,7 +75,6 @@ data CraftType | AIUNIT | CAMERA | MINIDISPLAY -- visual display unit - | LED | NAILBOX | IRONBAR | LIGHTSENSOR @@ -173,7 +172,7 @@ data HeldItemType | GLAUNCHER | POISONSPRAYER | SHATTERGUN - | TORCH + | LED | FLATSHIELD | KEYCARD Int | BLINKER diff --git a/src/Dodge/Debug/Picture.hs b/src/Dodge/Debug/Picture.hs index 6110d96eb..79abcf5a4 100644 --- a/src/Dodge/Debug/Picture.hs +++ b/src/Dodge/Debug/Picture.hs @@ -95,7 +95,7 @@ extendConeToScreenEdge cfig w c (x, y) = orderPolygon $ wallScreenIntersect ++ [ intersectLinefromScreen :: Config -> World -> Point2 -> Point2 -> Maybe Point2 intersectLinefromScreen cfig w a b = listToMaybe - . mapMaybe (\(x, y) -> intersectSegLineFrom x y b (b +.+ b -.- a)) + . mapMaybe (\(x, y) -> intersectSegRay x y b (b +.+ b -.- a)) . loopPairs $ screenPolygon cfig (w ^. wCam) diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index f3bdb9c79..13f8f6a42 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -235,7 +235,7 @@ heldItemMuzzles itm = \case BANGCONE -> [Muzzle (V2 15 0) 0 0.5 magupto15 BasicFlare MuzzleShootBullet 12] BLUNDERBUSS -> [Muzzle (V2 30 0) 0 0.5 magupto15 BasicFlare MuzzleShootBullet 12] GRAPECANNON i -> [Muzzle (V2 30 0) 0 0.5 magupto15 BasicFlare MuzzleShootBullet (12 + 4 * fromIntegral i)] - TORCH -> dbwMuzzles & ix 0 . mzPos .~ V2 10 0 + LED -> dbwMuzzles & ix 0 . mzPos .~ V2 10 0 FLAMETHROWER -> flameMuzzles FLAMESPITTER -> flameMuzzles & ix 0 . mzEffect . nzPressure .~ UniRandFloat 3 4 RLAUNCHER -> @@ -411,7 +411,7 @@ itemSidePush = \case GLAUNCHER -> 0 POISONSPRAYER -> 0 SHATTERGUN -> 0 - TORCH -> 0 + LED -> 0 FLATSHIELD -> 0 KEYCARD{} -> 0 BLINKER -> 0 @@ -494,7 +494,7 @@ recoilAmount itm GLAUNCHER -> 0 POISONSPRAYER -> 0 SHATTERGUN -> 0 - TORCH -> 0 + LED -> 0 FLATSHIELD -> 0 KEYCARD _ -> 0 BLINKER -> 0 @@ -541,7 +541,7 @@ bgunSound itm GLAUNCHER -> Just (tap4S, 0) POISONSPRAYER -> Just (foamSprayLoopS, 5) SHATTERGUN -> Nothing - TORCH -> Nothing + LED -> Nothing FLATSHIELD -> Nothing KEYCARD _ -> Nothing BLINKER -> Nothing @@ -612,7 +612,7 @@ heldTorqueAmount = \case GLAUNCHER -> 0 POISONSPRAYER -> 0 SHATTERGUN -> 0 - TORCH -> 0 + LED -> 0 FLATSHIELD -> 0 KEYCARD{} -> 0 BLINKER -> 0 @@ -1055,7 +1055,7 @@ heldItemMuzVel = \case GLAUNCHER -> ConstFloat 0 POISONSPRAYER -> ConstFloat 0.8 SHATTERGUN -> ConstFloat 0.8 - TORCH -> ConstFloat 0.8 + LED -> ConstFloat 0.8 FLATSHIELD -> ConstFloat 0 KEYCARD{} -> ConstFloat 0.8 BLINKER -> ConstFloat 0.8 @@ -1098,7 +1098,7 @@ heldItemRifling = \case GLAUNCHER -> ConstFloat 0 POISONSPRAYER -> ConstFloat 0.8 SHATTERGUN -> ConstFloat 0.8 - TORCH -> ConstFloat 0.8 + LED -> ConstFloat 0.8 FLATSHIELD -> ConstFloat 0.8 KEYCARD{} -> ConstFloat 0.8 BLINKER -> ConstFloat 0.8 @@ -1175,7 +1175,7 @@ gasType hit _ = case hit of GLAUNCHER -> Nothing POISONSPRAYER -> Just CreatePoisonGas SHATTERGUN -> Nothing - TORCH -> Nothing + LED -> Nothing FLATSHIELD -> Nothing KEYCARD{} -> Nothing BLINKER -> Nothing diff --git a/src/Dodge/Item/AimStance.hs b/src/Dodge/Item/AimStance.hs index 307f746f7..438433e8f 100644 --- a/src/Dodge/Item/AimStance.hs +++ b/src/Dodge/Item/AimStance.hs @@ -58,7 +58,7 @@ heldAimStance = \case GLAUNCHER -> TwoHandUnder POISONSPRAYER -> TwoHandUnder SHATTERGUN -> TwoHandUnder - TORCH -> OneHand + LED -> OneHand FLATSHIELD -> TwoHandFlat KEYCARD {} -> OneHand BLINKER -> OneHand diff --git a/src/Dodge/Item/AmmoSlots.hs b/src/Dodge/Item/AmmoSlots.hs index c9f3c141a..01ed08f0c 100644 --- a/src/Dodge/Item/AmmoSlots.hs +++ b/src/Dodge/Item/AmmoSlots.hs @@ -47,7 +47,7 @@ heldItemAmmoSlots = \case SPARKGUN -> singleAmmo ElectricalAmmo TRACTORGUN -> singleAmmo ElectricalAmmo SHATTERGUN -> singleAmmo ElectricalAmmo - TORCH -> singleAmmo ElectricalAmmo + LED -> singleAmmo ElectricalAmmo BLINKERUNSAFE -> singleAmmo ElectricalAmmo BLINKER -> singleAmmo ElectricalAmmo RLAUNCHER -> singleAmmo LauncherAmmo diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index e42832566..f3b7bb65a 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -106,7 +106,6 @@ craftItemSPic = \case colorSH green $ upperPrismPolyST 1 (square 4) <> upperPrismPolyST 2 (rectNSWE 4 (-4) 3 4) - LED -> colorSH yellow $ upperPrismPolyST 1 (square 2) NAILBOX -> colorSH green $ upperPrismPolyST 3 (rectXH 4 3) IRONBAR -> colorSH (greyN 0.5) $ upperPrismPolyST 3 $ rectXH 8 2 LIGHTSENSOR -> @@ -250,7 +249,7 @@ backpackShape = upperPrismPolyMT 10 $ rectNSWE 5 (-5) (-4) 4 heldItemSPic :: HeldItemType -> Item -> SPic heldItemSPic ht it = case ht of FLATSHIELD -> flatShieldEquipSPic - TORCH -> noPic torchShape + LED -> noPic torchShape BANGSTICK i -> noPic $ baseStickShapeX it i -- <> addBullets it PISTOL -> noPic baseStickShape MACHINEPISTOL -> noPic baseStickShape @@ -291,18 +290,20 @@ heldItemSPic ht it = case ht of KEYCARD _ -> noShape (setDepth 0 $ translate (-5) (-5) $ rotate (pi / 2.5) keyPic) torchShape :: Shape -torchShape = - colorSH blue $ - translateSHxy 0 1.5 side - <> translateSHxy 0 (-1.5) side - <> translateSHz 2.5 top - <> translateSHz (-0.5) bot - <> back - where - side = upperPrismPolySE 3 $ rectXH 10 0.5 - top = upperPrismPolySE 0.5 $ rectXH 10 2 - bot = upperPrismPolySE 0.5 $ rectXH 9 2 - back = upperPrismPolySE 3 $ rectXH 1 2 +torchShape = colorSH blue $ upperPrismPolySE 3 $ rectWH 3 3 +-- side = upperPrismPolySE 3 $ rectXH 10 0.5 + +-- colorSH blue $ +-- translateSHxy 0 1.5 side +-- <> translateSHxy 0 (-1.5) side +-- <> translateSHz 2.5 top +-- <> translateSHz (-0.5) bot +-- <> back +-- where +-- side = upperPrismPolySE 3 $ rectXH 10 0.5 +-- top = upperPrismPolySE 0.5 $ rectXH 10 2 +-- bot = upperPrismPolySE 0.5 $ rectXH 9 2 +-- back = upperPrismPolySE 3 $ rectXH 1 2 baseStickShapeX :: Item -> Int -> Shape baseStickShapeX _ _ = mempty diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 0547159c7..ec920fbff 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -53,7 +53,7 @@ itemBelowAttachables (itm,sf) = case (itm ^. itType, sf) of (LASER, LaserWeaponSF) -> [PulseBallSF] <> getAmmoLinks itm (LASER, PulseBallSF) -> [PulseBallSF] --(HELD LASER, _) -> [PulseBallSF] - (HELD TORCH, _) -> getAmmoLinks itm + (HELD LED, _) -> getAmmoLinks itm (ATTACH CAPACITOR, _) -> [AmmoMagSF 0 ElectricalAmmo] (ATTACH UNDERBARRELSLOT, _) -> [UnderBarrelPlatformSF] (_, HeldPlatformSF) -> getAmmoLinks itm <> extraWeaponLinksBelow itm @@ -111,7 +111,7 @@ itemToFunction itm = case itm ^. itType of ITEMSCAN -> ToggleSF INTROSCAN {} -> IntroScanSF LASER -> WeaponTargetingSF - HELD TORCH -> TorchSF + HELD LED -> TorchSF HELD{} -> case itUseCondition itm of UseableWhenAimed -> HeldPlatformSF _ -> GadgetPlatformSF diff --git a/src/Dodge/Item/Held.hs b/src/Dodge/Item/Held.hs index 5bd8a483a..cfa8e181b 100644 --- a/src/Dodge/Item/Held.hs +++ b/src/Dodge/Item/Held.hs @@ -30,7 +30,7 @@ itemFromHeldType ht = case ht of BLINKERUNSAFE -> unsafeBlinker BLINKER -> blinker KEYCARD i -> keyCard i - TORCH -> torch + LED -> led SHATTERGUN -> shatterGun BANGSTICK i -> bangStick i PISTOL -> pistol diff --git a/src/Dodge/Item/Held/Utility.hs b/src/Dodge/Item/Held/Utility.hs index 3ec24e135..87dfd413e 100644 --- a/src/Dodge/Item/Held/Utility.hs +++ b/src/Dodge/Item/Held/Utility.hs @@ -5,7 +5,7 @@ module Dodge.Item.Held.Utility ( unsafeBlinker, blinker, keyCard, - torch, + led, detector, flatShield, ) where @@ -20,8 +20,8 @@ flatShield = defaultHeldItem & itType .~ HELD FLATSHIELD keyCard :: Int -> Item keyCard n = defaultHeldItem & itType .~ HELD (KEYCARD n) -torch :: Item -torch = defaultHeldItem & itType .~ HELD TORCH +led :: Item +led = defaultHeldItem & itType .~ HELD LED -- | Sends out pulses that display walls. detector :: Detector -> Item diff --git a/src/Dodge/Item/HeldOffset.hs b/src/Dodge/Item/HeldOffset.hs index 4953ab41e..3e945ac8a 100644 --- a/src/Dodge/Item/HeldOffset.hs +++ b/src/Dodge/Item/HeldOffset.hs @@ -124,7 +124,7 @@ heldHandlePos = \case GLAUNCHER -> V2 3 0 POISONSPRAYER -> V2 3 0 SHATTERGUN -> V2 3 0 - TORCH -> V2 3 0 + LED -> V2 3 0 FLATSHIELD -> V2 3 0 KEYCARD{} -> V2 3 0 BLINKER -> V2 3 0 diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 6fe30bc3f..233a7463c 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -131,7 +131,7 @@ heldInfo hit = case hit of POISONSPRAYER -> "A weapon that releases noxious gases." SHATTERGUN -> "A seismic device that shatters hard items in its line of fire." -- FORCEFIELDGUN -> "A device that produces a durable forcefield." - TORCH -> "A stick with a light on the end." + LED -> "A light emitting diode." FLATSHIELD -> "A panel of metal that blocks unwanted objects from the front of the user." KEYCARD i -> "A keycard. It is labelled " ++ show i ++ "." TIMESTOPPER -> "A device that temporarily pauses time." @@ -196,7 +196,6 @@ craftInfo fit = case fit of AIUNIT -> "A general purpose artificial intelligence unit." CAMERA -> "A device designed to capture light signals." MINIDISPLAY -> "A device designed to display pictures." - LED -> "A light emitting diode." NAILBOX -> "A box of wood fastenings." IRONBAR -> "A rigid piece of metal." LIGHTSENSOR -> "A device that detects photons." diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index 826383a57..168ee1252 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -12,7 +12,7 @@ import qualified Quaternion as Q orientChild :: Item -> Point3Q orientChild itm = case _itType itm of - HELD TORCH -> (V3 0 5 0, Q.qID) + HELD LED -> (V3 0 5 0, Q.qID) --HELD LASER -> (V3 15 (-5) 0, Q.qID) LASER -> (V3 15 (-5) 0, Q.qID) ATTACH UNDERBARRELSLOT -> (V3 10 (-8) 0, r) diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 8b312b020..cfa7dfbf1 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,5 +1,6 @@ module Dodge.Room.Tutorial where +import Dodge.Item.Held.Utility import Control.Monad import qualified Data.IntMap.Strict as IM import qualified Data.IntSet as IS @@ -241,7 +242,7 @@ tutHub = do return $ tToBTree "DoorTest" $ Node - x + (x & rmPmnts .:~ sps0 (PutFlIt led)) [ treeFromPost [triggerDoorRoom i] r1 , treeFromPost [triggerDoorRoom j] r2 , (rmClusterStatus . csLinks . at OnwardCluster .~ Nothing) diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index 96ffdf479..348d6e2bd 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -183,7 +183,7 @@ heldAimZoom = \case GLAUNCHER -> 1.5 POISONSPRAYER -> 1 SHATTERGUN -> 1 - TORCH -> 1 + LED -> 1 FLATSHIELD -> 1 KEYCARD {} -> 1 BLINKER -> 1 diff --git a/src/Geometry/Intersect.hs b/src/Geometry/Intersect.hs index 8e6425daa..91a4dd6d3 100644 --- a/src/Geometry/Intersect.hs +++ b/src/Geometry/Intersect.hs @@ -83,14 +83,17 @@ intersectSegSeg (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x4 y4) {- | Intended to intersect a segment with a half-line-segment, ie a segment extending infinitely in one direction. +Will intersect with the first endpoint of the segment, but NOT the second. +This is to allow sensible intersections with polygons described as lists of points. +It will also intersect with the point of the ray. -} -intersectSegLineFrom :: Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2 -{-# INLINE intersectSegLineFrom #-} -intersectSegLineFrom (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x4 y4) +intersectSegRay :: Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2 +{-# INLINE intersectSegRay #-} +intersectSegRay (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x4 y4) | den == 0 = Nothing - | den > 0 && (t' < 0 || u' < 0 || t' > den) = + | den > 0 && (t' < 0 || u' < 0 || t' >= den) = Nothing - | den < 0 && (t' > 0 || u' > 0 || t' < den) = + | den < 0 && (t' > 0 || u' > 0 || t' <= den) = Nothing | otherwise = Just $ V2 (x1 + (x2 - x1) * t' / den) (y1 + (y2 - y1) * t' / den) where @@ -114,18 +117,20 @@ intersectSegLineext (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x4 y4) u' = (y1 - y2) * (x1 - x3) - (x1 - x2) * (y1 - y3) -- | Intersect a segment with a line. +-- the line intersects with the first endpoint of the segment +-- but NOT the second intersectSegLine :: Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2 {-# INLINE intersectSegLine #-} intersectSegLine (V2 x1 y1) (V2 x2 y2) (V2 x3 y3) (V2 x4 y4) | den == 0 = Nothing - | den > 0 && (t' < 0 || t' > den) = + | den > 0 && (t < 0 || t >= den) = Nothing - | den < 0 && (t' > 0 || t' < den) = + | den < 0 && (t > 0 || t <= den) = Nothing - | otherwise = Just $ V2 (x1 + (x2 - x1) * t' / den) (y1 + (y2 - y1) * t' / den) + | otherwise = Just $ V2 (x1 + (x2 - x1) * t / den) (y1 + (y2 - y1) * t / den) where den = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4) - t' = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4) + t = (x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4) --u' = (y1-y2)*(x1-x3) - (x1-x2)*(y1-y3) diff --git a/src/Geometry/LHS.hs b/src/Geometry/LHS.hs index d6b183348..663ff44e3 100644 --- a/src/Geometry/LHS.hs +++ b/src/Geometry/LHS.hs @@ -1,40 +1,51 @@ -module Geometry.LHS - ( isLHS - , isRHS - ) where +module Geometry.LHS ( + isLHS, + isRHS, +) where + import Geometry.Data --- | Test whether a point is stricly on the LHS of a line. --- Returns False if the line is of zero length. -isLHS - :: Point2 -- ^ First line point. - -> Point2 -- ^ Second line point. - -> Point2 -- ^ Point not on line. - -> Bool + +{- | Test whether a point is stricly on the LHS of a line. + Returns False if the line is of zero length. +-} +isLHS :: + -- | First line point. + Point2 -> + -- | Second line point. + Point2 -> + -- | Point not on line. + Point2 -> + Bool {-# INLINE isLHS #-} -isLHS (V2 x y) (V2 x' y') (V2 x'' y'') - | (x,y) == (x',y') = False +isLHS (V2 x y) (V2 x' y') (V2 x'' y'') + | (x, y) == (x', y') = False | otherwise = a1 * b2 - a2 * b1 > 0 where a1 = x' - x a2 = y' - y b1 = x'' - x b2 = y'' - y --- | Test whether a point is on the RHS of a line. --- Returns False if the line is of zero length. -isRHS - :: Point2 -- ^ First line point. - -> Point2 -- ^ Second line point. - -> Point2 -- ^ Point not on line. - -> Bool + +{- | Test whether a point is on the RHS of a line. + Returns False if the line is of zero length. +-} +isRHS :: + -- | First line point. + Point2 -> + -- | Second line point. + Point2 -> + -- | Point not on line. + Point2 -> + Bool {-# INLINE isRHS #-} -isRHS - (V2 x y) - (V2 x' y') - (V2 x'' y'') - | (x,y) == (x',y') = False - | otherwise = a1 * b2 - a2 * b1 < 0 - where - a1 = x' - x - a2 = y' - y - b1 = x'' - x - b2 = y'' - y +isRHS + (V2 x y) + (V2 x' y') + (V2 x'' y'') + | (x, y) == (x', y') = False + | otherwise = a1 * b2 - a2 * b1 < 0 + where + a1 = x' - x + a2 = y' - y + b1 = x'' - x + b2 = y'' - y diff --git a/src/Geometry/Polygon.hs b/src/Geometry/Polygon.hs index 3b5979608..dfcaa8715 100644 --- a/src/Geometry/Polygon.hs +++ b/src/Geometry/Polygon.hs @@ -80,11 +80,24 @@ pointInOrOnPolygon _ _ = undefined {- | Test whether a point is strictly inside a polygon. Supposes the points in the polygon are listed in anticlockwise order. +Requires that the polygon is convex. -} pointInPoly :: Point2 -> [Point2] -> Bool pointInPoly !p (x : xs) = all (\l -> uncurry isLHS l p) $ zip (x : xs) (xs ++ [x]) pointInPoly _ [] = False +inSimplePoly :: Point2 -> [Point2] -> Bool +inSimplePoly p (x:xs) = foldl' (flip f) True $ zip (x:xs) (xs ++ [x]) + where + f (a,b) = case intersectSegRay a b p (p + V2 1 0) of + Nothing -> id + Just {} -> not +inSimplePoly _ [] = False + +---- implement Dan Sunday point in polygon algorithm? +--wnPointPoly :: Point2 -> Point2 -> Point2 -> Int +--wnPointPoly p x y = 0 + circInPolygon :: Point2 -> Float -> [Point2] -> Bool circInPolygon !p !r (x : xs) = all f $ zip (x : xs) (xs ++ [x]) where diff --git a/tags b/tags index 0f25708b1..0a974447d 100644 --- a/tags +++ b/tags @@ -20,9 +20,9 @@ <$> src/Dodge/Data/Terminal.hs 70;" o ABSOLUTE src/Dodge/Data/Item/Combine.hs 40;" C AIUNIT src/Dodge/Data/Item/Combine.hs 75;" C -ALTERIFLE src/Dodge/Data/Item/Combine.hs 155;" C +ALTERIFLE src/Dodge/Data/Item/Combine.hs 154;" C AMMOMAG src/Dodge/Data/Item/Combine.hs 21;" C -AMR src/Dodge/Data/Item/Combine.hs 160;" C +AMR src/Dodge/Data/Item/Combine.hs 159;" C ANTIMATTER src/Dodge/Data/Item/Combine.hs 69;" C APInt src/Dodge/Data/Item/Use.hs 47;" C APNothing src/Dodge/Data/Item/Use.hs 48;" C @@ -31,9 +31,9 @@ AQUAMARINE src/Color/Data.hs 24;" C ARHUD src/Dodge/Data/Item/Combine.hs 35;" C ARHUDSF src/Dodge/Data/ComposedItem.hs 23;" C ATTACH src/Dodge/Data/Item/Combine.hs 20;" C -AUTOAMR src/Dodge/Data/Item/Combine.hs 161;" C -AUTOPISTOL src/Dodge/Data/Item/Combine.hs 147;" C -AUTORIFLE src/Dodge/Data/Item/Combine.hs 156;" C +AUTOAMR src/Dodge/Data/Item/Combine.hs 160;" C +AUTOPISTOL src/Dodge/Data/Item/Combine.hs 146;" C +AUTORIFLE src/Dodge/Data/Item/Combine.hs 155;" C AZURE src/Color/Data.hs 23;" C AccessTerminal src/Dodge/Data/WorldEffect.hs 27;" C Action src/Dodge/Data/ActionPlan.hs 78;" t @@ -51,7 +51,7 @@ Ambush src/Dodge/Data/ActionPlan.hs 178;" C AmmoEffectSF src/Dodge/Data/ComposedItem.hs 33;" C AmmoExtractPosition src/Dodge/Data/Muzzle.hs 21;" t AmmoMagSF src/Dodge/Data/ComposedItem.hs 24;" C -AmmoMagType src/Dodge/Data/Item/Combine.hs 107;" t +AmmoMagType src/Dodge/Data/Item/Combine.hs 106;" t AmmoModifierSF src/Dodge/Data/ComposedItem.hs 30;" C AmmoParams src/Dodge/Data/Item/Use.hs 51;" t AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 32;" C @@ -72,7 +72,7 @@ AsteroidStrike src/Dodge/Data/Scenario.hs 33;" C AtEase src/Dodge/Data/Creature/Stance.hs 40;" C AtomicWaste src/Dodge/Data/Scenario.hs 26;" C AttachParams src/Dodge/Data/Item/Use.hs 45;" t -AttachType src/Dodge/Data/Item/Combine.hs 92;" t +AttachType src/Dodge/Data/Item/Combine.hs 91;" t Attention src/Dodge/Data/Creature/Perception.hs 60;" t AttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" C Audition src/Dodge/Data/Creature/Perception.hs 47;" t @@ -83,26 +83,26 @@ AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C Avatar src/Dodge/Data/Creature/Misc.hs 61;" C AvatarDead src/Dodge/Data/Creature/Misc.hs 69;" C Awareness src/Dodge/Data/Creature/Perception.hs 65;" t -BANGCONE src/Dodge/Data/Item/Combine.hs 149;" C -BANGROD src/Dodge/Data/Item/Combine.hs 158;" C -BANGSTICK src/Dodge/Data/Item/Combine.hs 141;" C -BATTERY src/Dodge/Data/Item/Combine.hs 112;" C -BATTERYPACK src/Dodge/Data/Item/Combine.hs 136;" C -BELTMAG src/Dodge/Data/Item/Combine.hs 110;" C +BANGCONE src/Dodge/Data/Item/Combine.hs 148;" C +BANGROD src/Dodge/Data/Item/Combine.hs 157;" C +BANGSTICK src/Dodge/Data/Item/Combine.hs 140;" C +BATTERY src/Dodge/Data/Item/Combine.hs 111;" C +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 32;" C BLACK src/Color/Data.hs 28;" C -BLINKER src/Dodge/Data/Item/Combine.hs 179;" C -BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 180;" C -BLOWTORCH src/Dodge/Data/Item/Combine.hs 167;" C +BLINKER src/Dodge/Data/Item/Combine.hs 178;" C +BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 179;" C +BLOWTORCH src/Dodge/Data/Item/Combine.hs 166;" C BLUE src/Color/Data.hs 17;" C -BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 150;" C +BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 149;" C BQuad src/Geometry/Bezier.hs 9;" t -BRAINHAT src/Dodge/Data/Item/Combine.hs 127;" C -BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 135;" C -BULLETBELTPACK src/Dodge/Data/Item/Combine.hs 134;" C +BRAINHAT src/Dodge/Data/Item/Combine.hs 126;" C +BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 134;" C +BULLETBELTPACK src/Dodge/Data/Item/Combine.hs 133;" C BULLETMOD src/Dodge/Data/Item/Combine.hs 23;" C -BULLETSYNTH src/Dodge/Data/Item/Combine.hs 94;" C -BURSTRIFLE src/Dodge/Data/Item/Combine.hs 157;" C +BULLETSYNTH src/Dodge/Data/Item/Combine.hs 93;" C +BURSTRIFLE src/Dodge/Data/Item/Combine.hs 156;" C BackdropCursor src/Dodge/Data/SelectionList.hs 21;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 15;" C Bark src/Dodge/Data/ActionPlan.hs 40;" C @@ -179,16 +179,16 @@ ButtonSound src/Dodge/Data/SoundOrigin.hs 37;" C ButtonSwitch src/Dodge/Data/Button.hs 21;" C CAMERA src/Dodge/Data/Item/Combine.hs 76;" C CAN src/Dodge/Data/Item/Combine.hs 57;" C -CAPACITOR src/Dodge/Data/Item/Combine.hs 104;" C +CAPACITOR src/Dodge/Data/Item/Combine.hs 103;" C CHARTREUSE src/Color/Data.hs 25;" C -CHEMFUELPOUCH src/Dodge/Data/Item/Combine.hs 113;" C +CHEMFUELPOUCH src/Dodge/Data/Item/Combine.hs 112;" C CIRCLE src/Dodge/Data/GenParams.hs 20;" C CItem src/Dodge/Data/ComposedItem.hs 48;" t CLICKER src/Dodge/Data/Item/Combine.hs 28;" C COPIER src/Dodge/Data/Item/Combine.hs 29;" C CRAFT src/Dodge/Data/Item/Combine.hs 19;" C -CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 185;" C -CREATURESENSOR src/Dodge/Data/Item/Combine.hs 86;" C +CREATUREDETECTOR src/Dodge/Data/Item/Combine.hs 184;" C +CREATURESENSOR src/Dodge/Data/Item/Combine.hs 85;" C CWGen src/Dodge/Data/CWorld.hs 34;" t CWorld src/Dodge/Data/CWorld.hs 23;" t CYAN src/Color/Data.hs 19;" C @@ -244,7 +244,7 @@ ConcurrentEffect src/Loop/Data.hs 6;" t ConcurrentEffect src/Loop/Data.hs 11;" C Config src/Dodge/Data/Config.hs 38;" t ConstFloat src/Dodge/Data/GenFloat.hs 11;" C -ConsumableItemType src/Dodge/Data/Item/Combine.hs 116;" t +ConsumableItemType src/Dodge/Data/Item/Combine.hs 115;" t ContextDT src/Dodge/Data/DoubleTree.hs 84;" t ContextLDT src/Dodge/Data/DoubleTree.hs 42;" t ContinentalGovernment src/Dodge/Data/Scenario.hs 51;" C @@ -306,7 +306,7 @@ Cylinder src/Shape/Data.hs 19;" C DETECTOR src/Dodge/Data/Item/Combine.hs 34;" C DPoint2 src/Geometry/Data.hs 48;" t DROPPER src/Dodge/Data/Item/Combine.hs 27;" C -DRUMMAG src/Dodge/Data/Item/Combine.hs 109;" C +DRUMMAG src/Dodge/Data/Item/Combine.hs 108;" C DS src/DoubleStack.hs 3;" t DT src/Dodge/Data/DoubleTree.hs 31;" C DTBottomNode src/Dodge/Data/DoubleTree.hs 21;" C @@ -341,7 +341,7 @@ DefaultRoomType src/Dodge/Data/Room.hs 31;" C DestroyBeing src/Dodge/Data/Scenario.hs 8;" C DestroyBullet src/Dodge/Data/Bullet.hs 29;" C DestroyItem src/Dodge/Data/Scenario.hs 7;" C -Detector src/Dodge/Data/Item/Combine.hs 183;" t +Detector src/Dodge/Data/Item/Combine.hs 182;" t Dirt src/Dodge/Data/Material.hs 11;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t DisplayTerminal src/Dodge/Data/HUD.hs 29;" C @@ -385,9 +385,9 @@ Dust src/Dodge/Data/Cloud.hs 29;" t EBO src/Shader/Data.hs 88;" t EBSound src/Dodge/Data/SoundOrigin.hs 40;" C ECW src/Dodge/Material/Damage.hs 11;" t -ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 159;" C +ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 158;" C EQUIP src/Dodge/Data/Item/Combine.hs 18;" C -EXPLOSIVES src/Dodge/Data/Item/Combine.hs 118;" C +EXPLOSIVES src/Dodge/Data/Item/Combine.hs 117;" C Ears src/Dodge/Data/Creature/Perception.hs 47;" C East src/Dodge/Data/CardinalPoint.hs 7;" C East8 src/Dodge/Data/CardinalPoint.hs 22;" C @@ -408,7 +408,7 @@ EnergyBallType src/Dodge/Data/EnergyBall/Type.hs 12;" t EnergyGeneratorSS src/Dodge/Data/Scenario.hs 109;" C EngineSS src/Dodge/Data/Scenario.hs 88;" C Enterrement src/Dodge/Data/Damage.hs 31;" C -EquipItemType src/Dodge/Data/Item/Combine.hs 121;" t +EquipItemType src/Dodge/Data/Item/Combine.hs 120;" t EquipOptions src/Dodge/Data/RightButtonOptions.hs 17;" C EquipSite src/Dodge/Data/Equipment/Misc.hs 21;" t EquipType src/Dodge/Data/Equipment/Misc.hs 11;" t @@ -427,15 +427,15 @@ ExplosivePutty src/Dodge/Data/AmmoType.hs 13;" C ExtraMenuOption src/Dodge/Data/Universe.hs 76;" t Eyes src/Dodge/Data/Creature/Perception.hs 41;" C FBO src/Shader/Data.hs 57;" t -FLAMESHIELD src/Dodge/Data/Item/Combine.hs 123;" C -FLAMESPITTER src/Dodge/Data/Item/Combine.hs 163;" C -FLAMETHROWER src/Dodge/Data/Item/Combine.hs 164;" C -FLAMETORRENT src/Dodge/Data/Item/Combine.hs 165;" C -FLAMEWALL src/Dodge/Data/Item/Combine.hs 166;" C -FLATSHIELD src/Dodge/Data/Item/Combine.hs 177;" C -FRONTARMOUR src/Dodge/Data/Item/Combine.hs 124;" C -FUELCELL src/Dodge/Data/Item/Combine.hs 88;" C -FUELPACK src/Dodge/Data/Item/Combine.hs 133;" C +FLAMESHIELD src/Dodge/Data/Item/Combine.hs 122;" C +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 +FRONTARMOUR src/Dodge/Data/Item/Combine.hs 123;" C +FUELCELL src/Dodge/Data/Item/Combine.hs 87;" C +FUELPACK src/Dodge/Data/Item/Combine.hs 132;" C FacilityType src/Dodge/Data/Scenario.hs 55;" t Faction src/Dodge/Data/Creature/State.hs 14;" t Factory src/Dodge/Data/Scenario.hs 56;" C @@ -487,15 +487,15 @@ FullyVisible src/Dodge/Data/CamouflageStatus.hs 6;" C FunctionChangeSF src/Dodge/Data/ComposedItem.hs 34;" C GBounce src/Dodge/Data/Projectile.hs 48;" C GEqC src/SameConstr.hs 20;" c -GIMBAL src/Dodge/Data/Item/Combine.hs 97;" C +GIMBAL src/Dodge/Data/Item/Combine.hs 96;" C GLASSSHARD src/Dodge/Data/Item/Combine.hs 61;" C -GLAUNCHER src/Dodge/Data/Item/Combine.hs 173;" C -GRAPECANNON src/Dodge/Data/Item/Combine.hs 151;" C +GLAUNCHER src/Dodge/Data/Item/Combine.hs 172;" C +GRAPECANNON src/Dodge/Data/Item/Combine.hs 150;" C GREEN src/Color/Data.hs 16;" C GStick src/Dodge/Data/Projectile.hs 49;" C GStuckCreature src/Dodge/Data/Projectile.hs 50;" C GStuckWall src/Dodge/Data/Projectile.hs 51;" C -GYROSCOPE src/Dodge/Data/Item/Combine.hs 98;" C +GYROSCOPE src/Dodge/Data/Item/Combine.hs 97;" C GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 18;" C GameOverOptions src/Dodge/Data/Universe.hs 72;" C GameRoom src/Dodge/GameRoom.hs 15;" t @@ -529,12 +529,12 @@ Gust src/Dodge/Data/Gust.hs 13;" t GymSS src/Dodge/Data/Scenario.hs 104;" C HARDDRIVE src/Dodge/Data/Item/Combine.hs 73;" C HARDWARE src/Dodge/Data/Item/Combine.hs 53;" C -HAT src/Dodge/Data/Item/Combine.hs 128;" C -HEADLAMP src/Dodge/Data/Item/Combine.hs 129;" C +HAT src/Dodge/Data/Item/Combine.hs 127;" C +HEADLAMP src/Dodge/Data/Item/Combine.hs 128;" C HEALTH src/Dodge/Data/Item/Combine.hs 46;" C -HEATSENSOR src/Dodge/Data/Item/Combine.hs 83;" C +HEATSENSOR src/Dodge/Data/Item/Combine.hs 82;" C HELD src/Dodge/Data/Item/Combine.hs 17;" C -HOMINGMODULE src/Dodge/Data/Item/Combine.hs 102;" C +HOMINGMODULE src/Dodge/Data/Item/Combine.hs 101;" C HOSE src/Dodge/Data/Item/Combine.hs 55;" C HP src/Dodge/Data/Creature.hs 71;" C HUD src/Dodge/Data/HUD.hs 31;" t @@ -542,7 +542,7 @@ HalfRes src/Dodge/Data/Config.hs 97;" C HammerTrigger src/Dodge/Data/TriggerType.hs 10;" C HardQuit src/Dodge/Data/Universe.hs 70;" C HeavySmokeFlare src/Dodge/Data/Muzzle.hs 33;" C -HeldItemType src/Dodge/Data/Item/Combine.hs 140;" t +HeldItemType src/Dodge/Data/Item/Combine.hs 139;" t HeldPlatformSF src/Dodge/Data/ComposedItem.hs 14;" C HiddenGoal src/Dodge/Data/Scenario.hs 14;" C HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 43;" C @@ -571,9 +571,9 @@ Humanoid src/Dodge/Data/Creature/Misc.hs 77;" C HumanoidAI src/Dodge/Data/Creature/Misc.hs 39;" t IMSS src/Dodge/Data/SelectionList.hs 37;" t INTROSCAN src/Dodge/Data/Item/Combine.hs 33;" C -INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 126;" C -IRONBAR src/Dodge/Data/Item/Combine.hs 80;" C -ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 184;" C +INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 125;" C +IRONBAR src/Dodge/Data/Item/Combine.hs 79;" C +ITEMDETECTOR src/Dodge/Data/Item/Combine.hs 183;" C ITEMSCAN src/Dodge/Data/Item/Combine.hs 25;" C ImmediateEffect src/Loop/Data.hs 8;" C Importance src/Shape/Data.hs 34;" t @@ -635,13 +635,13 @@ ItemTargeting src/Dodge/Data/Item.hs 43;" t ItemType src/Dodge/Data/Item/Combine.hs 16;" t ItemUse src/Dodge/Data/Item/Use.hs 30;" t ItmInt src/Dodge/Data/Item/Location.hs 23;" t -JOYSTICK src/Dodge/Data/Item/Combine.hs 96;" C -JUMPLEGS src/Dodge/Data/Item/Combine.hs 132;" C +JOYSTICK src/Dodge/Data/Item/Combine.hs 95;" C +JUMPLEGS src/Dodge/Data/Item/Combine.hs 131;" C JoinClust src/Dodge/Combine/Graph.hs 22;" C JoystickSF src/Dodge/Data/ComposedItem.hs 26;" C Just' src/MaybeHelp.hs 13;" C JustStartedPlaying src/Sound/Data.hs 24;" C -KEYCARD src/Dodge/Data/Item/Combine.hs 178;" C +KEYCARD src/Dodge/Data/Item/Combine.hs 177;" C Kill src/Dodge/Data/ActionPlan.hs 198;" C LASER src/Dodge/Data/Item/Combine.hs 36;" C LDT src/Dodge/Data/DoubleTree.hs 34;" C @@ -651,9 +651,9 @@ LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 28;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 25;" C LDTTopNode src/Dodge/Data/DoubleTree.hs 26;" C LDTree src/Dodge/Data/DoubleTree.hs 34;" t -LED src/Dodge/Data/Item/Combine.hs 78;" C +LED src/Dodge/Data/Item/Combine.hs 175;" C LIGHTER src/Dodge/Data/Item/Combine.hs 67;" C -LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 81;" C +LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 80;" C LS src/Dodge/Data/LightSource.hs 23;" C LSParam src/Dodge/Data/LightSource.hs 16;" t LWorld src/Dodge/Data/LWorld.hs 97;" t @@ -707,20 +707,20 @@ LongAI src/Dodge/Data/Creature/Misc.hs 50;" C LookAround src/Dodge/Data/ActionPlan.hs 186;" C LtAutoAI src/Dodge/Data/Creature/Misc.hs 44;" C Lure src/Dodge/Data/ActionPlan.hs 179;" C -MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 146;" C +MACHINEPISTOL src/Dodge/Data/Item/Combine.hs 145;" C MAGENTA src/Color/Data.hs 20;" C MAGNET src/Dodge/Data/Item/Combine.hs 68;" C -MAGSHIELD src/Dodge/Data/Item/Combine.hs 122;" C +MAGSHIELD src/Dodge/Data/Item/Combine.hs 121;" C MAPPER src/Dodge/Data/Item/Combine.hs 26;" C MAXHEALTH src/Dodge/Data/Item/Combine.hs 47;" C MBranch src/Dodge/Data/MetaTree.hs 18;" C MCrAc src/Dodge/Data/CreatureEffect.hs 45;" t MCrNoAction src/Dodge/Data/CreatureEffect.hs 45;" C -MEDKIT src/Dodge/Data/Item/Combine.hs 117;" C +MEDKIT src/Dodge/Data/Item/Combine.hs 116;" C MICROCHIP src/Dodge/Data/Item/Combine.hs 72;" C -MICROPHONE src/Dodge/Data/Item/Combine.hs 84;" C +MICROPHONE src/Dodge/Data/Item/Combine.hs 83;" C MINIDISPLAY src/Dodge/Data/Item/Combine.hs 77;" C -MINIGUNX src/Dodge/Data/Item/Combine.hs 152;" C +MINIGUNX src/Dodge/Data/Item/Combine.hs 151;" C MODBlockedString src/Dodge/Data/Universe.hs 96;" C MODString src/Dodge/Data/Universe.hs 95;" C MODStringOption src/Dodge/Data/Universe.hs 97;" C @@ -823,7 +823,7 @@ MuzzleUnsafeBlink src/Dodge/Data/Muzzle.hs 55;" C MvForward src/Dodge/Data/ActionPlan.hs 35;" C MvTurnToward src/Dodge/Data/ActionPlan.hs 34;" C MvWalking src/Dodge/Data/Creature/Misc.hs 30;" C -NAILBOX src/Dodge/Data/Item/Combine.hs 79;" C +NAILBOX src/Dodge/Data/Item/Combine.hs 78;" C NInt src/NewInt.hs 17;" C NIntMap src/NewInt.hs 23;" C NIntSet src/NewInt.hs 20;" C @@ -973,14 +973,14 @@ P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C PBSound src/Dodge/Data/SoundOrigin.hs 42;" C PIPE src/Dodge/Data/Item/Combine.hs 51;" C -PISTOL src/Dodge/Data/Item/Combine.hs 145;" C +PISTOL src/Dodge/Data/Item/Combine.hs 144;" C PJStabiliser src/Dodge/Projectile/Create.hs 16;" t PLANK src/Dodge/Data/Item/Combine.hs 60;" C PLATE src/Dodge/Data/Item/Combine.hs 70;" C PLUS src/Dodge/Data/GenParams.hs 20;" C -POISONSPRAYER src/Dodge/Data/Item/Combine.hs 174;" C -PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 89;" C -POWERLEGS src/Dodge/Data/Item/Combine.hs 130;" C +POISONSPRAYER src/Dodge/Data/Item/Combine.hs 173;" C +PORTABLEFUSION src/Dodge/Data/Item/Combine.hs 88;" C +POWERLEGS src/Dodge/Data/Item/Combine.hs 129;" C PPLevelReset src/Dodge/Data/PressPlate.hs 16;" C PRISM src/Dodge/Data/Item/Combine.hs 66;" C PS src/Dodge/Data/GenWorld.hs 97;" C @@ -1105,13 +1105,13 @@ RAM src/Dodge/Data/Item/Combine.hs 74;" C RED src/Color/Data.hs 15;" C RELCURS src/Dodge/Data/Item/Combine.hs 41;" C RELITEM src/Dodge/Data/Item/Combine.hs 42;" C -REMOTEDETONATOR src/Dodge/Data/Item/Combine.hs 100;" C -REMOTESCREEN src/Dodge/Data/Item/Combine.hs 95;" C -REWINDER src/Dodge/Data/Item/Combine.hs 142;" C +REMOTEDETONATOR src/Dodge/Data/Item/Combine.hs 99;" C +REMOTESCREEN src/Dodge/Data/Item/Combine.hs 94;" C +REWINDER src/Dodge/Data/Item/Combine.hs 141;" C RGBA src/Color/Data.hs 31;" t -RIFLE src/Dodge/Data/Item/Combine.hs 154;" C -RLAUNCHER src/Dodge/Data/Item/Combine.hs 171;" C -RLAUNCHERX src/Dodge/Data/Item/Combine.hs 172;" C +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 ROSE src/Color/Data.hs 21;" C RPLinkStatus src/Dodge/Data/Room.hs 56;" t RProps src/Dodge/Layout/Generate.hs 13;" C @@ -1174,15 +1174,15 @@ RoomWire src/Dodge/Data/Room.hs 52;" t RoundedFaces src/Shape/Data.hs 18;" C RunningSideEffect src/Dodge/Data/Universe.hs 69;" C SCRAPMETAL src/Dodge/Data/Item/Combine.hs 62;" C -SHATTERGUN src/Dodge/Data/Item/Combine.hs 175;" C -SHELLMAG src/Dodge/Data/Item/Combine.hs 111;" C -SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 103;" C -SMG src/Dodge/Data/Item/Combine.hs 148;" C -SMOKEREDUCER src/Dodge/Data/Item/Combine.hs 101;" C -SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 162;" C -SOUNDSENSOR src/Dodge/Data/Item/Combine.hs 82;" C -SPARKGUN src/Dodge/Data/Item/Combine.hs 168;" C -SPEEDLEGS src/Dodge/Data/Item/Combine.hs 131;" C +SHATTERGUN src/Dodge/Data/Item/Combine.hs 174;" C +SHELLMAG src/Dodge/Data/Item/Combine.hs 110;" C +SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 102;" C +SMG src/Dodge/Data/Item/Combine.hs 147;" C +SMOKEREDUCER src/Dodge/Data/Item/Combine.hs 100;" C +SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 161;" C +SOUNDSENSOR src/Dodge/Data/Item/Combine.hs 81;" 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 54;" C SPic src/ShapePicture/Data.hs 7;" t SQUARE src/Dodge/Data/GenParams.hs 20;" C @@ -1315,17 +1315,16 @@ TCBase src/Dodge/Data/Terminal.hs 51;" C TCDamageCommand src/Dodge/Data/Terminal.hs 52;" C TCInfo src/Dodge/Data/Terminal.hs 50;" C TCom src/Dodge/Data/Terminal.hs 49;" t -TESLAGUN src/Dodge/Data/Item/Combine.hs 169;" C -THERMOMETER src/Dodge/Data/Item/Combine.hs 85;" C +TESLAGUN src/Dodge/Data/Item/Combine.hs 168;" C +THERMOMETER src/Dodge/Data/Item/Combine.hs 84;" C THREELINES src/Dodge/Data/GenParams.hs 20;" C -TIMESCROLLER src/Dodge/Data/Item/Combine.hs 144;" C -TIMESTOPPER src/Dodge/Data/Item/Combine.hs 143;" C +TIMESCROLLER src/Dodge/Data/Item/Combine.hs 143;" C +TIMESTOPPER src/Dodge/Data/Item/Combine.hs 142;" C TIN src/Dodge/Data/Item/Combine.hs 58;" C -TINMAG src/Dodge/Data/Item/Combine.hs 108;" C +TINMAG src/Dodge/Data/Item/Combine.hs 107;" C TLine src/Dodge/Data/Terminal.hs 38;" C TO src/Shader/Data.hs 59;" t -TORCH src/Dodge/Data/Item/Combine.hs 176;" C -TRACTORGUN src/Dodge/Data/Item/Combine.hs 170;" C +TRACTORGUN src/Dodge/Data/Item/Combine.hs 169;" C TRANSFORMER src/Dodge/Data/Item/Combine.hs 65;" C TRANSMITTER src/Dodge/Data/Item/Combine.hs 71;" C TSbackspace src/Dodge/Data/Input.hs 54;" C @@ -1413,7 +1412,7 @@ TwoHandFlat src/Dodge/Data/AimStance.hs 14;" C TwoHandOver src/Dodge/Data/AimStance.hs 13;" C TwoHandUnder src/Dodge/Data/AimStance.hs 12;" C Typical src/Shape/Data.hs 36;" C -UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 99;" C +UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 98;" C UNIGATE src/Dodge/Data/Item/Combine.hs 31;" C UnderBarrelPlatformSF src/Dodge/Data/ComposedItem.hs 16;" C UnderBarrelSlotSF src/Dodge/Data/ComposedItem.hs 15;" C @@ -1462,7 +1461,7 @@ VAO src/Shader/Data.hs 64;" t VBO src/Shader/Data.hs 81;" t VF src/Polyhedra/Data.hs 21;" t VIOLET src/Color/Data.hs 22;" C -VOLLEYGUN src/Dodge/Data/Item/Combine.hs 153;" C +VOLLEYGUN src/Dodge/Data/Item/Combine.hs 152;" C VertexAttribute src/Shader/Data.hs 68;" t Verx src/Picture/Data.hs 13;" t View_boundaries src/Dodge/Data/Config.hs 74;" C @@ -1474,11 +1473,11 @@ Vision src/Dodge/Data/Creature/Perception.hs 41;" t Vocalization src/Dodge/Data/Creature/Misc.hs 20;" t VolleyGunTrigger src/Dodge/Data/TriggerType.hs 13;" C VolleyUnfiredBarrels src/Dodge/Data/Item/Params.hs 19;" C -WALLDETECTOR src/Dodge/Data/Item/Combine.hs 186;" C +WALLDETECTOR src/Dodge/Data/Item/Combine.hs 185;" C WHITE src/Color/Data.hs 27;" C -WIRE src/Dodge/Data/Item/Combine.hs 87;" C -WRISTARMOUR src/Dodge/Data/Item/Combine.hs 125;" C -WRIST_ECG src/Dodge/Data/Item/Combine.hs 137;" C +WIRE src/Dodge/Data/Item/Combine.hs 86;" C +WRISTARMOUR src/Dodge/Data/Item/Combine.hs 124;" C +WRIST_ECG src/Dodge/Data/Item/Combine.hs 136;" C WaitThen src/Dodge/Data/ActionPlan.hs 103;" C Walking src/Dodge/Data/Creature/Stance.hs 25;" C Wall src/Dodge/Data/Wall.hs 20;" t @@ -1532,7 +1531,7 @@ WorldEventFlag src/Dodge/Data/World.hs 31;" t WorldGovernment src/Dodge/Data/Scenario.hs 52;" C XInfinity src/Dodge/Data/CardinalPoint.hs 36;" t YELLOW src/Color/Data.hs 18;" C -ZOOMSCOPE src/Dodge/Data/Item/Combine.hs 93;" C +ZOOMSCOPE src/Dodge/Data/Item/Combine.hs 92;" C ZombieFaction src/Dodge/Data/Creature/State.hs 16;" C __Just' src/MaybeHelp.hs 13;" f _actAction src/Dodge/Data/ActionPlan.hs 81;" f @@ -2323,7 +2322,7 @@ _shaderVAO src/Shader/Data.hs 54;" f _shapeEBO src/Data/Preload/Render.hs 26;" f _shapeHalfSize src/Shape/Data.hs 18;" f _shapeShader src/Data/Preload/Render.hs 25;" f -_shellPayload src/Dodge/Data/Item/Combine.hs 103;" f +_shellPayload src/Dodge/Data/Item/Combine.hs 102;" f _shockwaves src/Dodge/Data/LWorld.hs 116;" f _siColor src/Dodge/Data/SelectionList.hs 47;" f _siHeight src/Dodge/Data/SelectionList.hs 44;" f @@ -2551,9 +2550,9 @@ _worldEvents src/Dodge/Data/LWorld.hs 133;" f _wsBlock src/Dodge/Data/Wall/Structure.hs 16;" f _wsDoor src/Dodge/Data/Wall/Structure.hs 14;" f _wsMachine src/Dodge/Data/Wall/Structure.hs 15;" f -_xNum src/Dodge/Data/Item/Combine.hs 141;" f -_xNum src/Dodge/Data/Item/Combine.hs 151;" f -_xNum src/Dodge/Data/Item/Combine.hs 172;" 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 aFlame src/Dodge/Gas.hs 18;" f aGasCloud src/Dodge/Gas.hs 13;" f aRadarPulse src/Dodge/RadarSweep.hs 19;" f @@ -2605,7 +2604,7 @@ advanceScrollAmount src/Dodge/Update.hs 403;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f aimDelaySweep src/Dodge/Render/Picture.hs 272;" f -aimStanceInfo src/Dodge/Item/Info.hs 244;" f +aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 180;" f airlock src/Dodge/Room/Airlock.hs 23;" f airlock0 src/Dodge/Room/Airlock.hs 67;" f @@ -2619,7 +2618,7 @@ allVisibleWalls src/Dodge/Base/Collide.hs 215;" f alongSegBy src/Geometry.hs 41;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f ammoMagInfo src/Dodge/Item/Info.hs 49;" f -ammoMagSPic src/Dodge/Item/Draw/SPic.hs 145;" f +ammoMagSPic src/Dodge/Item/Draw/SPic.hs 144;" f amr src/Dodge/Item/Held/Rod.hs 34;" f anRoom src/Dodge/Floor.hs 117;" f analyser src/Dodge/Placement/Instance/Analyser.hs 12;" f @@ -2676,7 +2675,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 44;" f +assignPushDoors src/Dodge/LevelGen.hs 35;" f atFstLnkOut src/Dodge/PlacementSpot.hs 224;" f atFstLnkOutShiftBy src/Dodge/PlacementSpot.hs 244;" f atFstLnkOutShiftInward src/Dodge/PlacementSpot.hs 247;" f @@ -2704,10 +2703,10 @@ bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f backPQ src/Dodge/Creature/HandPos.hs 127;" f backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f -backpackShape src/Dodge/Item/Draw/SPic.hs 203;" f +backpackShape src/Dodge/Item/Draw/SPic.hs 202;" 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 318;" f +bangConeShape src/Dodge/Item/Draw/SPic.hs 317;" f bangEchoS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 516;" f bangRod src/Dodge/Item/Held/Rod.hs 18;" f bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 668;" f @@ -2715,18 +2714,18 @@ bangStick src/Dodge/Item/Held/Stick.hs 15;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f barrelShape src/Dodge/Render/ShapePicture.hs 70;" f -baseAMRShape src/Dodge/Item/Draw/SPic.hs 421;" f +baseAMRShape src/Dodge/Item/Draw/SPic.hs 420;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseCI src/Dodge/Item/Grammar.hs 158;" f -baseCaneShape src/Dodge/Item/Draw/SPic.hs 338;" f +baseCaneShape src/Dodge/Item/Draw/SPic.hs 337;" f baseFloorTileSize src/Tile.hs 45;" f baseItemTriggerType src/Dodge/BaseTriggerType.hs 21;" f -baseRifleShape src/Dodge/Item/Draw/SPic.hs 341;" f -baseRodShape src/Dodge/Item/Draw/SPic.hs 418;" f -baseSMGShape src/Dodge/Item/Draw/SPic.hs 406;" f +baseRifleShape src/Dodge/Item/Draw/SPic.hs 340;" f +baseRodShape src/Dodge/Item/Draw/SPic.hs 417;" f +baseSMGShape src/Dodge/Item/Draw/SPic.hs 405;" f baseShoulder src/Dodge/Creature/Picture.hs 116;" f -baseStickShape src/Dodge/Item/Draw/SPic.hs 315;" f -baseStickShapeX src/Dodge/Item/Draw/SPic.hs 307;" f +baseStickShape src/Dodge/Item/Draw/SPic.hs 314;" f +baseStickShapeX src/Dodge/Item/Draw/SPic.hs 306;" f baseStickSpread src/Dodge/HeldUse.hs 311;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 128;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 38;" f @@ -2955,9 +2954,9 @@ combineTree src/Dodge/Tree/Compose.hs 67;" f commandColor src/Dodge/Terminal.hs 114;" f commonPrefix src/Dodge/Debug/Terminal.hs 149;" f comp src/Quaternion.hs 65;" 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 94;" f +compactDraw' src/Dodge/LevelGen.hs 105;" f +compactDrawTree src/Dodge/LevelGen.hs 88;" f compileAndCheckShader src/Shader/Compile.hs 277;" f composeNode src/Dodge/Tree/Compose.hs 76;" f composeTree src/Dodge/Tree/Compose.hs 47;" f @@ -3126,8 +3125,8 @@ debugEvent src/Dodge/Debug.hs 27;" f debugEvents src/Dodge/Debug.hs 20;" f debugItem src/Dodge/Debug.hs 30;" f debugList src/Dodge/Debug.hs 105;" f -debugMenu src/Dodge/Menu.hs 121;" f -debugMenuOptions src/Dodge/Menu.hs 124;" f +debugMenu src/Dodge/Menu.hs 125;" f +debugMenuOptions src/Dodge/Menu.hs 131;" f debugOn src/Dodge/Data/Config.hs 151;" f debugSelectCreatureList src/Dodge/Debug.hs 88;" f debugSelectCreatureMessage src/Dodge/Debug.hs 79;" f @@ -3145,7 +3144,7 @@ dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 628;" f dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f defDamageMaterial src/Dodge/Material/Damage.hs 22;" f defLSPic src/Dodge/LightSource/Draw.hs 10;" f -defSPic src/Dodge/Item/Draw/SPic.hs 324;" f +defSPic src/Dodge/Item/Draw/SPic.hs 323;" f defaultAimMvType src/Dodge/Creature/MoveType.hs 16;" f defaultAimingCrit src/Dodge/Default/Creature.hs 107;" f defaultAudition src/Dodge/Default/Creature.hs 92;" f @@ -3216,8 +3215,8 @@ destroyMounts src/Dodge/Block.hs 97;" f destroyProjectile src/Dodge/Projectile/Update.hs 160;" f detV src/Geometry/Vector.hs 93;" f detector src/Dodge/Item/Held/Utility.hs 27;" f -detectorColor src/Dodge/Item/Draw/SPic.hs 468;" f -detectorInfo src/Dodge/Item/Info.hs 225;" f +detectorColor src/Dodge/Item/Draw/SPic.hs 467;" f +detectorInfo src/Dodge/Item/Info.hs 224;" f determineProjectileTracking src/Dodge/HeldUse.hs 1228;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f @@ -3229,8 +3228,8 @@ dim src/Color.hs 112;" f dirtColor src/Dodge/Default/Wall.hs 81;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 650;" f -displayConfig src/Dodge/Menu.hs 212;" f -displayControls src/Dodge/Menu.hs 223;" f +displayConfig src/Dodge/Menu.hs 231;" f +displayControls src/Dodge/Menu.hs 242;" f displayFrameTicks src/Dodge/Render/Picture.hs 45;" f displayFreeSlots src/Dodge/DisplayInventory.hs 192;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f @@ -3265,14 +3264,14 @@ doCrWdWd src/Dodge/CreatureEffect.hs 20;" f doDamage src/Dodge/Creature/State.hs 42;" f doDeathToggle src/Dodge/WorldEffect.hs 86;" f doDeathTriggers src/Dodge/WorldEffect.hs 79;" f -doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f -doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 37;" f -doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 62;" f -doDebugTestF11 src/Dodge/Update/Input/DebugTest.hs 67;" f -doDebugTestF12 src/Dodge/Update/Input/DebugTest.hs 79;" f -doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 40;" f -doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 48;" f -doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 56;" f +doDebugTest src/Dodge/Update/Input/DebugTest.hs 23;" f +doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 38;" f +doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 66;" f +doDebugTestF11 src/Dodge/Update/Input/DebugTest.hs 72;" f +doDebugTestF12 src/Dodge/Update/Input/DebugTest.hs 84;" f +doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 41;" f +doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f +doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDrWdWd src/Dodge/DrWdWd.hs 16;" f doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f @@ -3294,7 +3293,7 @@ doModificationEffect src/Dodge/ModificationEffect.hs 7;" f doP2Ac src/Dodge/CreatureEffect.hs 69;" f doP2Imp src/Dodge/CreatureEffect.hs 33;" f doPrWdLsLs src/Dodge/PrWdLsLs.hs 8;" f -doPreload appDodge/Main.hs 137;" f +doPreload appDodge/Main.hs 136;" f doPressPlateEvent src/Dodge/PressPlate.hs 8;" f doPropUpdates src/Dodge/Prop/Update.hs 34;" f doQuickload src/Dodge/Save.hs 82;" f @@ -3305,7 +3304,7 @@ doRoomPlacements src/Dodge/Layout.hs 98;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 91;" f doSectionSize src/Dodge/DisplayInventory.hs 211;" f -doSideEffects appDodge/Main.hs 122;" f +doSideEffects appDodge/Main.hs 121;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 166;" f doTestDrawing src/Dodge/Render.hs 41;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -3524,9 +3523,9 @@ equipAllocString src/Dodge/Render/HUD.hs 310;" f equipAttachPos src/Dodge/Item/Draw.hs 29;" f equipBackgroundEffect src/Dodge/Euse.hs 15;" f equipInfo src/Dodge/Item/Info.hs 141;" f -equipItemSPic src/Dodge/Item/Draw/SPic.hs 174;" f +equipItemSPic src/Dodge/Item/Draw/SPic.hs 173;" f equipPosition src/Dodge/Item/Draw.hs 37;" f -equipSiteInfo src/Dodge/Item/Info.hs 254;" f +equipSiteInfo src/Dodge/Item/Info.hs 253;" f equipSitePQ src/Dodge/Creature/HandPos.hs 26;" f equipType src/Dodge/Data/EquipType.hs 10;" f equipmentDesignation src/Dodge/Inventory/RBList.hs 52;" f @@ -3578,7 +3577,7 @@ fireLoudS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 704;" f fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 464;" f firstBreather src/Dodge/Room/Breather.hs 9;" f firstTrie src/SimpleTrie.hs 51;" f -firstWorldLoad appDodge/Main.hs 78;" f +firstWorldLoad appDodge/Main.hs 77;" f fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f flFlicker src/Dodge/Flame.hs 38;" f @@ -3589,12 +3588,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 409;" f +flamerPic src/Dodge/Item/Draw/SPic.hs 408;" f flareCircleAt src/Dodge/HeldUse.hs 687;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 51;" f flatLookupItems src/Dodge/Combine.hs 38;" f flatShield src/Dodge/Item/Held/Utility.hs 17;" f -flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 455;" f +flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 454;" f fleeFrom src/Dodge/CreatureEffect.hs 120;" f fleeFromTarget src/Dodge/CreatureEffect.hs 66;" f flickerMod src/Dodge/Placement/Instance/LightSource/Flicker.hs 10;" f @@ -3629,7 +3628,7 @@ forceFoldable src/StrictHelp.hs 7;" f forceSpine src/StrictHelp.hs 4;" f fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 29;" f fpsText src/Dodge/Render/Picture.hs 53;" f -fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 162;" f +fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 161;" f frag src/Shader/Data.hs 102;" f freeShaderPointers' src/Shader.hs 37;" f fridgeHumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 500;" f @@ -3651,18 +3650,18 @@ g src/ShortShow.hs 44;" f gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f gadgetEffect src/Dodge/HeldUse.hs 46;" f -gameOverMenu src/Dodge/Menu.hs 189;" f +gameOverMenu src/Dodge/Menu.hs 208;" f gameRoomFromRoom src/Dodge/Layout.hs 146;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 143;" f -gameplayMenu src/Dodge/Menu.hs 136;" f -gameplayMenuOptions src/Dodge/Menu.hs 139;" f +gameplayMenu src/Dodge/Menu.hs 155;" f +gameplayMenuOptions src/Dodge/Menu.hs 158;" f gasType src/Dodge/HeldUse.hs 1141;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f -generateGraphs src/Dodge/LevelGen.hs 41;" f +generateGraphs src/Dodge/Menu.hs 149;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f generateLevelFromRoomList src/Dodge/Layout.hs 33;" f -generateWorldFromSeed src/Dodge/LevelGen.hs 19;" f +generateWorldFromSeed src/Dodge/LevelGen.hs 17;" f geom src/Shader/Data.hs 102;" f geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f @@ -3720,7 +3719,7 @@ glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 458;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 612;" f glassSwitchBack src/Dodge/Room/Room.hs 72;" f glassSwitchBackCrits src/Dodge/Room/Room.hs 106;" f -glauncherPic src/Dodge/Item/Draw/SPic.hs 415;" f +glauncherPic src/Dodge/Item/Draw/SPic.hs 414;" f glushortSize src/Shader/Parameters.hs 25;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f goToTarget src/Dodge/Creature/ReaderUpdate.hs 138;" f @@ -3729,8 +3728,8 @@ grahamScan src/Geometry/Polygon.hs 140;" f grapeCannon src/Dodge/Item/Held/Cone.hs 17;" f graphToEdges src/Dodge/Graph.hs 35;" f graphToIncidence src/Dodge/Graph.hs 40;" f -graphicsMenu src/Dodge/Menu.hs 167;" f -graphicsMenuOptions src/Dodge/Menu.hs 170;" f +graphicsMenu src/Dodge/Menu.hs 186;" f +graphicsMenuOptions src/Dodge/Menu.hs 189;" f green src/Color.hs 15;" f greyN src/Color.hs 124;" f gridInPolygon src/Grid.hs 12;" f @@ -3773,7 +3772,7 @@ hasLOSIndirect src/Dodge/Base/Collide.hs 310;" f hat src/Dodge/Item/Equipment.hs 76;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 79;" f -headLampShape src/Dodge/Item/Draw/SPic.hs 458;" f +headLampShape src/Dodge/Item/Draw/SPic.hs 457;" f headMap src/Dodge/DoubleTree.hs 249;" f headPQ src/Dodge/Creature/HandPos.hs 115;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 492;" f @@ -3792,9 +3791,9 @@ heldItemInvLock src/Dodge/HeldUse.hs 434;" f heldItemMuzVel src/Dodge/HeldUse.hs 1021;" f heldItemMuzzles src/Dodge/HeldUse.hs 175;" f heldItemRifling src/Dodge/HeldUse.hs 1064;" f -heldItemSPic src/Dodge/Item/Draw/SPic.hs 250;" f +heldItemSPic src/Dodge/Item/Draw/SPic.hs 249;" f heldItemWeight src/Dodge/Creature/Statistics.hs 80;" f -heldPositionInfo src/Dodge/Item/Info.hs 241;" f +heldPositionInfo src/Dodge/Item/Info.hs 240;" f heldTorqueAmount src/Dodge/HeldUse.hs 578;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f helpPara src/Dodge/Terminal.hs 90;" f @@ -3978,9 +3977,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 251;" f +itmEquipSiteInfo src/Dodge/Item/Info.hs 250;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f -itmUsageInfo src/Dodge/Item/Info.hs 231;" f +itmUsageInfo src/Dodge/Item/Info.hs 230;" f jShape src/Dodge/Placement/Instance/LightSource.hs 99;" f joinItemsInList src/Dodge/Item/Grammar.hs 206;" f joystick src/Dodge/Item/Scope.hs 149;" f @@ -3998,7 +3997,7 @@ keyCard src/Dodge/Item/Held/Utility.hs 20;" f keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 78;" f keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 66;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f -keyPic src/Dodge/Item/Draw/SPic.hs 474;" f +keyPic src/Dodge/Item/Draw/SPic.hs 473;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f lChasm src/Dodge/Room/Tutorial.hs 117;" f @@ -4010,7 +4009,7 @@ lampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 8;" f lampCoverWhen src/Dodge/Placement/Instance/LightSource/Cover.hs 19;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 75;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 141;" f -lasGunPic src/Dodge/Item/Draw/SPic.hs 427;" f +lasGunPic src/Dodge/Item/Draw/SPic.hs 426;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f lasSensorTurretTest src/Dodge/Room/LasTurret.hs 134;" f lasTunnel src/Dodge/Room/LasTurret.hs 153;" f @@ -4019,7 +4018,7 @@ lasTurret src/Dodge/Placement/Instance/Turret.hs 40;" f laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f lastMap src/Dodge/DoubleTree.hs 253;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f -layoutLevelFromSeed src/Dodge/LevelGen.hs 49;" f +layoutLevelFromSeed src/Dodge/LevelGen.hs 40;" f ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 74;" f ldtIL src/Dodge/DoubleTree.hs 225;" f ldtPropagate src/Dodge/DoubleTree.hs 69;" f @@ -4033,6 +4032,7 @@ 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 110;" f +led src/Dodge/Item/Held/Utility.hs 23;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 185;" f leftHandPQ src/Dodge/Creature/HandPos.hs 60;" f @@ -4041,7 +4041,7 @@ leftLegPQ src/Dodge/Creature/HandPos.hs 84;" f leftPad src/Padding.hs 15;" f leftRightCombine src/Dodge/Item/Grammar.hs 197;" f leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f -legsSPic src/Dodge/Item/Draw/SPic.hs 483;" f +legsSPic src/Dodge/Item/Draw/SPic.hs 482;" f liShape src/Dodge/Placement/Instance/LightSource.hs 112;" f light src/Color.hs 104;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 51;" f @@ -4061,8 +4061,8 @@ lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 148;" f linksGridToPath src/Dodge/Room/Path.hs 36;" f linksOnPath src/Dodge/Room/CheckConsistency.hs 6;" f -listConfig src/Dodge/Menu.hs 216;" f -listControls src/Dodge/Menu.hs 228;" f +listConfig src/Dodge/Menu.hs 235;" f +listControls src/Dodge/Menu.hs 247;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 134;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 190;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 302;" f @@ -4070,7 +4070,7 @@ litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 124;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 387;" f -loadDodgeConfig src/Dodge/Config.hs 29;" f +loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 622;" f loadSaveSlot src/Dodge/Save.hs 74;" f @@ -4099,6 +4099,8 @@ lockInv src/Dodge/Inventory/Lock.hs 9;" f lockRoomKeyItems src/Dodge/LockAndKey.hs 25;" f lockRoomMultiItems src/Dodge/LockAndKey.hs 15;" f lockedStart src/Dodge/Room/RunPast.hs 34;" f +logMenu src/Dodge/Menu.hs 128;" f +logOptions src/Dodge/Menu.hs 143;" f logistic src/Dodge/Base.hs 98;" f longBlockedCorridor src/Dodge/Room/RoadBlock.hs 58;" f longCrit src/Dodge/Creature.hs 70;" f @@ -4129,7 +4131,7 @@ magV src/Geometry/Vector.hs 171;" f magV3 src/Geometry/Vector3D.hs 78;" f magazineCombinations src/Dodge/Combine/Combinations.hs 43;" f magenta src/Color.hs 19;" f -main appDodge/Main.hs 38;" f +main appDodge/Main.hs 37;" f main bench/Bench.hs 15;" f main test/Spec.hs 12;" f makeArc src/Picture/Base.hs 157;" f @@ -4260,8 +4262,8 @@ minOn src/FoldableHelp.hs 35;" f mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 452;" f miniGunCrit src/Dodge/Creature.hs 63;" f miniGunX src/Dodge/Item/Held/Cane.hs 33;" f -miniGunXPict src/Dodge/Item/Draw/SPic.hs 387;" f -miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 384;" f +miniGunXPict src/Dodge/Item/Draw/SPic.hs 386;" f +miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 383;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 716;" f miniTree2 src/Dodge/Room/Room.hs 113;" f minimumOn src/FoldlHelp.hs 14;" f @@ -4371,11 +4373,11 @@ onRemoveWristShield src/Dodge/Equipment.hs 23;" f onXY src/Geometry/Vector3D.hs 130;" f oneH src/Dodge/Creature/Test.hs 93;" f openConsole src/Dodge/Update.hs 129;" f -optionMenu src/Dodge/Menu.hs 110;" f +optionMenu src/Dodge/Menu.hs 113;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 52;" f optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 43;" f optionValueOffset src/Dodge/Menu/Option.hs 86;" f -optionsOptions src/Dodge/Menu.hs 113;" f +optionsOptions src/Dodge/Menu.hs 116;" f optionsToSelections src/Dodge/Menu/Option.hs 47;" f orRegex src/Dodge/DisplayInventory.hs 81;" f orange src/Color.hs 25;" f @@ -4422,8 +4424,8 @@ pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 43;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseGame src/Dodge/Update/Input/InGame.hs 525;" f -pauseMenu src/Dodge/Menu.hs 56;" f -pauseMenuOptions src/Dodge/Menu.hs 63;" f +pauseMenu src/Dodge/Menu.hs 59;" f +pauseMenuOptions src/Dodge/Menu.hs 66;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 180;" f pbFlicker src/Dodge/Update.hs 453;" f @@ -4481,7 +4483,7 @@ playIfFree src/Sound.hs 137;" f playPositionalSoundQueue src/Sound.hs 145;" f playSoundAndUpdate src/Sound.hs 54;" f playSoundQueue src/Sound.hs 132;" f -playSoundUnlessRewinding appDodge/Main.hs 115;" f +playSoundUnlessRewinding appDodge/Main.hs 114;" f plusDecoration src/Dodge/Placement/TopDecoration.hs 35;" f pmLineLoop src/Shader/Data.hs 107;" f pmLineStrip src/Shader/Data.hs 107;" f @@ -4571,7 +4573,7 @@ popScreen src/Dodge/Menu/PushPop.hs 6;" f posRms src/Dodge/Tree/Shift.hs 44;" f posSelSecYint src/Dodge/SelectionSections.hs 147;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f -postGenerationProcessing src/Dodge/LevelGen.hs 35;" f +postGenerationProcessing src/Dodge/LevelGen.hs 30;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f postWorldLoad src/Dodge/WorldLoad.hs 15;" f powerFakeout src/Dodge/Room/Start.hs 28;" f @@ -4650,7 +4652,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 103;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 106;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putStrLnAppend src/Dodge/LevelGen.hs 83;" f +putStrLnAppend src/Dodge/LevelGen.hs 82;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 55;" f putTerminalFull src/Dodge/Placement/Instance/Terminal.hs 22;" f putTerminalImediateAccess src/Dodge/Placement/Instance/Terminal.hs 17;" f @@ -4771,7 +4773,7 @@ resumeSound src/Dodge/SoundLogic.hs 48;" f retreatActionsPistol src/Dodge/Humanoid.hs 249;" f retreatFireLauncher src/Dodge/Humanoid.hs 270;" f retreatPointForFrom src/Dodge/Creature/Impulse/Flee.hs 7;" f -reversePair src/Dodge/LevelGen.hs 86;" f +reversePair src/Dodge/LevelGen.hs 85;" 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 @@ -4793,7 +4795,7 @@ rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f rightWristPQ src/Dodge/Creature/HandPos.hs 57;" f rlPosDir src/Dodge/RoomLink.hs 112;" f -rlauncherPic src/Dodge/Item/Draw/SPic.hs 412;" f +rlauncherPic src/Dodge/Item/Draw/SPic.hs 411;" f rmInLinks src/Dodge/RoomLink.hs 153;" f rmInvItem src/Dodge/Inventory.hs 73;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f @@ -4866,9 +4868,9 @@ safeNormalizeV src/Geometry/Vector.hs 164;" f safeSwapKeys src/IntMapHelp.hs 77;" f safeUncons src/ListHelp.hs 72;" f safeUpdateSingleNode src/TreeHelp.hs 116;" f -saveConfig src/Dodge/Config.hs 22;" f -saveQuit src/Dodge/Menu.hs 76;" f -saveQuitConc src/Dodge/Menu.hs 79;" f +saveConfig src/Dodge/Config.hs 23;" f +saveQuit src/Dodge/Menu.hs 79;" f +saveQuitConc src/Dodge/Menu.hs 82;" f saveSlotPath src/Dodge/Save.hs 63;" f saveWorldInSlot src/Dodge/Save.hs 68;" f sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 714;" f @@ -4907,8 +4909,8 @@ searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 205;" f secondColumnLDP src/Dodge/ListDisplayParams.hs 43;" f sectionsDesiredLines src/Dodge/DisplayInventory.hs 198;" f sectionsSizes src/Dodge/DisplayInventory.hs 201;" f -seedStartMenu src/Dodge/Menu.hs 84;" f -seedStartOptions src/Dodge/Menu.hs 87;" f +seedStartMenu src/Dodge/Menu.hs 87;" f +seedStartOptions src/Dodge/Menu.hs 90;" f segOnCirc src/Geometry.hs 114;" f selNumPos src/Dodge/Render/HUD.hs 447;" f selNumPosCardinal src/Dodge/Render/HUD.hs 470;" f @@ -4993,7 +4995,7 @@ shapePoints src/Dodge/Room/Foreground.hs 145;" f shapeVerxAttributes src/Shape/Parameters.hs 13;" f shapeVerxSize src/Shape/Parameters.hs 10;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f -shatterGunSPic src/Dodge/Item/Draw/SPic.hs 327;" f +shatterGunSPic src/Dodge/Item/Draw/SPic.hs 326;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f shellExplosionCheck src/Dodge/Projectile/Update.hs 56;" f shellHitCreature src/Dodge/Projectile/Update.hs 84;" f @@ -5081,7 +5083,7 @@ slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 173;" f smallBattery src/Dodge/Item/Ammo.hs 60;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f -smallDrawTree src/Dodge/LevelGen.hs 92;" f +smallDrawTree src/Dodge/LevelGen.hs 91;" f smallGlass1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 470;" f smallGlass2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 646;" f smallGlass3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 518;" f @@ -5097,8 +5099,8 @@ soundAngle src/Dodge/SoundLogic.hs 163;" f soundContinue src/Dodge/SoundLogic.hs 131;" f soundContinueVol src/Dodge/SoundLogic.hs 145;" f soundIsClose src/Dodge/Creature/Perception.hs 184;" f -soundMenu src/Dodge/Menu.hs 142;" f -soundMenuOptions src/Dodge/Menu.hs 145;" f +soundMenu src/Dodge/Menu.hs 161;" f +soundMenuOptions src/Dodge/Menu.hs 164;" f soundMultiFrom src/Dodge/SoundLogic.hs 187;" f soundOriginIDsAt src/Dodge/WorldEvent/Sound.hs 18;" f soundOriginsIDsAt src/Dodge/WorldEvent/Sound.hs 13;" f @@ -5123,8 +5125,8 @@ spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 56;" f spawnerRoom src/Dodge/Room/Room.hs 369;" f speedLegs src/Dodge/Item/Equipment.hs 90;" f -splashMenu src/Dodge/Menu.hs 30;" f -splashMenuOptions src/Dodge/Menu.hs 35;" f +splashMenu src/Dodge/Menu.hs 33;" f +splashMenuOptions src/Dodge/Menu.hs 38;" f splashScreen src/Dodge/Initialisation.hs 10;" f splinterBlock src/Dodge/Block.hs 26;" f splitBezierquad src/Geometry/Bezier.hs 15;" f @@ -5245,7 +5247,7 @@ terminalScreenGlow src/Dodge/Machine/Update.hs 39;" f terminalShape src/Dodge/Machine/Draw.hs 43;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 131;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f -teslaGunPic src/Dodge/Item/Draw/SPic.hs 424;" f +teslaGunPic src/Dodge/Item/Draw/SPic.hs 423;" f teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f testCrossWalls src/Dodge/Room/Path.hs 41;" f testEvent src/Dodge/Event/Test.hs 9;" f @@ -5264,9 +5266,9 @@ textVMirror src/Picture/Base.hs 216;" f tflat2 src/Picture/Data.hs 60;" f tflat3 src/Picture/Data.hs 64;" f tflat4 src/Picture/Data.hs 68;" f -theCleanup appDodge/Main.hs 75;" f +theCleanup appDodge/Main.hs 74;" f theColumns src/Dodge/Tree/Shift.hs 146;" f -theUpdateStep appDodge/Main.hs 107;" f +theUpdateStep appDodge/Main.hs 106;" f thickArc src/Picture/Base.hs 298;" f thickCircle src/Picture/Base.hs 272;" f thickLine src/Picture/Base.hs 244;" f @@ -5292,8 +5294,8 @@ ting4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 538;" f ting5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 710;" f tingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 574;" f tinitusS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 566;" f -titleOptionsMenu src/Dodge/Menu.hs 104;" f -titleOptionsNoWrite src/Dodge/Menu.hs 107;" f +titleOptionsMenu src/Dodge/Menu.hs 107;" f +titleOptionsNoWrite src/Dodge/Menu.hs 110;" f tlDoEffect src/Dodge/Terminal.hs 102;" f tlSetStatus src/Dodge/Terminal.hs 99;" f tmUpdate src/Dodge/Update.hs 470;" f @@ -5323,8 +5325,7 @@ topInvW src/Dodge/ListDisplayParams.hs 49;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f topTestPart src/Dodge/TestString.hs 41;" f -torch src/Dodge/Item/Held/Utility.hs 23;" f -torchShape src/Dodge/Item/Draw/SPic.hs 293;" f +torchShape src/Dodge/Item/Draw/SPic.hs 292;" f torqueAmount src/Dodge/HeldUse.hs 573;" f torqueCr src/Dodge/WorldEffect.hs 72;" f torso src/Dodge/Creature/Picture.hs 102;" f @@ -5332,7 +5333,7 @@ tractCr src/Dodge/TractorBeam/Update.hs 27;" f tractFlIt src/Dodge/TractorBeam/Update.hs 22;" f tractorBeamAt src/Dodge/HeldUse.hs 806;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 53;" f -tractorGunPic src/Dodge/Item/Draw/SPic.hs 452;" f +tractorGunPic src/Dodge/Item/Draw/SPic.hs 451;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 32;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 124;" f @@ -5389,7 +5390,7 @@ tryPickupSelected src/Dodge/Update/Input/InGame.hs 145;" f tryPlay src/Sound.hs 84;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 23;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 52;" f -trySeedFromClipboard src/Dodge/Menu.hs 93;" f +trySeedFromClipboard src/Dodge/Menu.hs 96;" f trySpin src/Dodge/Projectile/Update.hs 170;" f trySynthBullet src/Dodge/Creature/State.hs 166;" f tryThrust src/Dodge/Projectile/Update.hs 176;" f @@ -5423,7 +5424,7 @@ unfoldrMID src/MonadHelp.hs 33;" f unigate src/Dodge/Item/Scope.hs 102;" f unitVectorAtAngle src/Geometry/Vector.hs 100;" f unlockInv src/Dodge/Inventory/Lock.hs 12;" f -unpause src/Dodge/Menu.hs 194;" f +unpause src/Dodge/Menu.hs 213;" f unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 56;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 74;" f @@ -5520,7 +5521,7 @@ updateRadarBlips src/Dodge/Update.hs 545;" f updateRadarSweep src/Dodge/RadarSweep.hs 39;" f updateRadarSweeps src/Dodge/Update.hs 646;" f updateRandNode src/TreeHelp.hs 109;" f -updateRenderSplit appDodge/Main.hs 110;" f +updateRenderSplit appDodge/Main.hs 109;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f updateRootItemID src/Dodge/Inventory/Location.hs 41;" f updateScopeZoom src/Dodge/Update/Scroll.hs 79;" f @@ -5617,7 +5618,7 @@ visibleWalls src/Dodge/Base/Collide.hs 207;" f visionCheck src/Dodge/Creature/Perception.hs 153;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 42;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f -volleyGunShape src/Dodge/Item/Draw/SPic.hs 372;" f +volleyGunShape src/Dodge/Item/Draw/SPic.hs 371;" f walkNozzle src/Dodge/HeldUse.hs 782;" f walkableNodeNear src/Dodge/Path.hs 48;" f wallBlips src/Dodge/RadarSweep.hs 98;" f @@ -5662,7 +5663,7 @@ white src/Color.hs 26;" f whiteNoiseFadeInS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 724;" f whiteNoiseFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 522;" f wiToFloat src/Dodge/Room/Modify/Girder.hs 168;" f -winConfig appDodge/Main.hs 57;" f +winConfig appDodge/Main.hs 56;" f windowLine src/Dodge/Placement/Instance/Wall.hs 48;" f windowLineType src/Dodge/Placement/Instance/Wall.hs 83;" f windowXFloat src/Dodge/Data/Config.hs 61;" f @@ -5693,7 +5694,7 @@ wpAdd src/Dodge/Room/RezBox.hs 148;" f wrench1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 546;" f wristArmour src/Dodge/Item/Equipment.hs 43;" f wristInvisibility src/Dodge/Item/Equipment.hs 96;" f -writeConfig src/Dodge/Menu.hs 164;" f +writeConfig src/Dodge/Menu.hs 183;" f writeSaveSlot src/Dodge/Save.hs 34;" f xCylinder src/Shape.hs 137;" f xCylinderST src/Shape.hs 134;" f