diff --git a/src/Dodge/Data/AmmoType.hs b/src/Dodge/Data/AmmoType.hs index 48d879a5a..6adb7607a 100644 --- a/src/Dodge/Data/AmmoType.hs +++ b/src/Dodge/Data/AmmoType.hs @@ -1,6 +1,9 @@ {-# LANGUAGE StrictData #-} +{-# LANGUAGE TemplateHaskell #-} module Dodge.Data.AmmoType where +import Data.Aeson +import Data.Aeson.TH data AmmoType = LauncherAmmo @@ -12,3 +15,4 @@ data AmmoType | PrintMaterial | ExplosivePutty deriving (Eq, Ord, Show, Read) --Generic, Flat) +deriveJSON defaultOptions ''AmmoType diff --git a/src/Dodge/Data/Block.hs b/src/Dodge/Data/Block.hs index 84e083936..bd2ab5922 100644 --- a/src/Dodge/Data/Block.hs +++ b/src/Dodge/Data/Block.hs @@ -22,7 +22,7 @@ data Block = Block , _blWallIDs :: IS.IntSet , _blHP :: Int , _blShadows :: [Int] -- a list of walls that are not shown when this block exists - , _blFootprint :: [Point2] -- TODO check whether this should be clockwise/anticlockwise + , _blFootprint :: [Point2] --clockwise! , _blPos :: Point2 , _blDir :: Float , _blHeight :: Float diff --git a/src/Dodge/Data/Machine.hs b/src/Dodge/Data/Machine.hs index c1340bf4f..b5da546ab 100644 --- a/src/Dodge/Data/Machine.hs +++ b/src/Dodge/Data/Machine.hs @@ -1,4 +1,5 @@ {-# LANGUAGE StrictData #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Machine ( @@ -11,6 +12,8 @@ module Dodge.Data.Machine ( module Dodge.Data.GenParams, ) where +import ShortShow +import Dodge.Data.AmmoType import Control.Lens import Data.Aeson import Data.Aeson.TH @@ -43,10 +46,20 @@ data MachineType | McDamSensor DamageSensor | McProxSensor ProximitySensor | McTurret {_mctTurret :: Turret} --- | McStorage --- | McDistributer + | McStorage {_mcsType :: AmmoType, _mcsAmount :: Int} + | McDistributer {_mcdStorageMachine :: Maybe Int} -- | McSynthesiser +instance ShortShow MachineType where + shortShow = \case + McStatic -> "McStatic" + McTerminal -> "McTerm" + McDamSensor {} -> "McDamSen" + McProxSensor {} -> "McProxSen" + McTurret {} -> "McTur" + McStorage {} -> "McStor" + McDistributer {} -> "McDist" + data Turret = Turret { _tuWeapon :: Int , _tuTurnSpeed :: Float diff --git a/src/Dodge/Machine/Draw.hs b/src/Dodge/Machine/Draw.hs index 5775a2fa8..0b214aa50 100644 --- a/src/Dodge/Machine/Draw.hs +++ b/src/Dodge/Machine/Draw.hs @@ -1,5 +1,6 @@ module Dodge.Machine.Draw (drawMachine) where +import Dodge.Room.Foreground import Control.Lens import qualified Data.Map.Strict as M import Data.Maybe @@ -20,10 +21,18 @@ drawMachine cw mc = case _mcType mc of McTurret tu -> drawBaseMachine 20 mc <> drawTurret lw tu mc McDamSensor se -> drawBaseMachine 25 mc <> drawDamSensor gp se McProxSensor {} -> drawBaseMachine 25 mc + McStorage {} -> noPic $ colorSH (mcColor mc) storageShape + McDistributer {} -> drawBaseMachine 25 mc where lw = cw ^. lWorld gp = cw ^. cwGen . cwgParams . sensorCoding +storageShape :: Shape +storageShape = upperBox Large Typical 31 (polyCirc 4 20) <> + foldMap toprail (take 8 [0, pi / 4 ..]) + where + toprail a = rotateSH a $ thinHighBar 31 (V2 0 20) (rotateV (pi / 4) $ V2 0 20) + drawDamSensor :: M.Map SensorType (PaletteColor, DecorationShape) -> DamageSensor -> @@ -76,6 +85,8 @@ mcColor mc = case mc ^. mcType of McDamSensor {} -> yellow McProxSensor {} -> aquamarine McTurret {} -> blue + McStorage {} -> orange + McDistributer {} -> red drawTurret :: LWorld -> Turret -> Machine -> SPic diff --git a/src/Dodge/Machine/Update.hs b/src/Dodge/Machine/Update.hs index ce8466535..07e6ff657 100644 --- a/src/Dodge/Machine/Update.hs +++ b/src/Dodge/Machine/Update.hs @@ -36,6 +36,8 @@ mcTypeUpdate mc = \case McTurret tu -> updateTurret (_tuTurnSpeed tu) mc McDamSensor se -> mcDamSensorTriggerUpdate se mc . mcDamSensorUpdate se mc McProxSensor se -> mcProxSensorTriggerUpdate se mc . mcProxSensorUpdate se mc + McStorage {} -> id + McDistributer {} -> id terminalScreenGlow :: Machine -> World -> World terminalScreenGlow mc w = fromMaybe w $ do diff --git a/src/Dodge/Placement/TopDecoration.hs b/src/Dodge/Placement/TopDecoration.hs index 5f13858f0..1f4c98ecb 100644 --- a/src/Dodge/Placement/TopDecoration.hs +++ b/src/Dodge/Placement/TopDecoration.hs @@ -28,32 +28,32 @@ midBarDecoration w h z = where w' = 0.3 * w embossingR = - prismPoly - Medium - Typical - [V3 w h z, V3 w (0.3 * h) 41, V3 w (-0.3 * h) 41, V3 w (- h) z] - [V3 w' h z, V3 w' (0.3 * h) 41, V3 w' (-0.3 * h) 41, V3 w' (- h) z] + prismPoly + Medium + Typical + [V3 w h z, V3 w (0.3 * h) 41, V3 w (-0.3 * h) 41, V3 w (- h) z] + [V3 w' h z, V3 w' (0.3 * h) 41, V3 w' (-0.3 * h) 41, V3 w' (- h) z] fourEmbossDecoration :: Float -> Float -> Float -> Shape fourEmbossDecoration w h z = foldMap f [(w, h), (- w, h), (w, - h), (- w, - h)] where f (a, b) = translateSH (V3 (a / 2) (b / 2) z) embossing - embossing = upperBoxHalf Large Typical 10 $ rectNSWE (h / 2) (- h / 2) (- w / 2) (w / 2) + embossing = upperBoxHalf Large Typical 10 $ rectWH (w/2) (h/2) plusDecoration :: Float -> Float -> Float -> Shape plusDecoration w h z = - thinHighBar z (V2 w 0) (V2 (- w) 0) - <> thinHighBar z (V2 0 h) (V2 0 (- h)) + thinHighBar z (V2 w 0) (V2 (- w) 0) + <> thinHighBar z (V2 0 h) (V2 0 (- h)) squareDecoration :: Float -> Float -> Float -> Shape squareDecoration w h z = - foldMap - f - [ (w', - w', h', h') - , (w', - w', - h', - h') - , (w', w', h', - h') - , (- w', - w', h', - h') - ] + foldMap + f + [ (w', - w', h', h') + , (w', - w', - h', - h') + , (w', w', h', - h') + , (- w', - w', h', - h') + ] where w' = w - 1.5 h' = h - 1.5 @@ -65,14 +65,8 @@ circleDecoration w _ z = foldMap toprail (take 8 [0, pi / 4 ..]) toprail a = rotateSH a $ thinHighBar z (V2 0 w) (rotateV (pi / 4) $ V2 0 w) threeLineDecoration :: Float -> Float -> Float -> Shape -threeLineDecoration w h z = - foldMap - f - [ (w', - w', h', h') - , (w', - w', 0, 0) - , (w', - w', - h', - h') - ] +threeLineDecoration w h z = foldMap f [h', 0, - h'] where w' = w - 1.5 h' = h - 1.5 - f (a, c, b, d) = thinHighBar z (V2 a b) (V2 c d) + f x = thinHighBar z (V2 w' x) (V2 (- w') x) diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index ebcd2b179..2ef9d7927 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -10,8 +10,12 @@ module Dodge.Room.Room ( corDoor, weaponBehindPillar, critsRoom, + distributerRoom, ) where +import Shape +import Dodge.Default +import Dodge.Data.AmmoType import qualified Data.Set as S import Dodge.Cleat import Dodge.Creature @@ -404,5 +408,25 @@ critsRoom i = , return <$> glassSwitchBackCrits i ] +distributerRoom :: AmmoType -> Int -> State LayoutVars Room +distributerRoom atype aamount = do + i <- nextLayoutInt + w <- state $ randomR (100, 400) + h <- state $ randomR (200, 400) + r <- roomRectAutoLinks w h + let mcstore = defaultMachine + & mcMaterial .~ Metal + & mcType .~ McStorage atype aamount + mcdist mj = defaultMachine + & mcMaterial .~ Metal + & mcType .~ McDistributer mj + store = sps (unusedOffPathAwayFromLink 50) + (PutMachine (reverse $ polyCirc 4 20) mcstore Nothing) & plExternalID ?~ i + dst gw = let mj = gw ^? genPmnt . ix i . plMID . _Just + in sps (unusedOffPathAwayFromLink 50) + (PutMachine (reverse $ square 10) (mcdist mj) Nothing) + return $ r & rmPmnts .:~ store + & rmInPmnt .:~ (0,dst) + -- cor <- shuffleLinks corridor -- return $ tToBTree "corDoor" $ treePost [door,cor,cleatOnward door] diff --git a/src/Dodge/Room/Tanks.hs b/src/Dodge/Room/Tanks.hs index 254109c69..8efc1c3ad 100644 --- a/src/Dodge/Room/Tanks.hs +++ b/src/Dodge/Room/Tanks.hs @@ -12,8 +12,8 @@ import Dodge.PlacementSpot import Dodge.Room.Foreground import Dodge.Room.Modify.Girder import Dodge.Room.Procedural -import Geometry import LensHelp +import Linear import RandomHelp import Shape @@ -38,7 +38,7 @@ randEdgeTank = do return $ basetank & plType . putBlock . blDraw - <>~ colorSH orange (verticalPipe 80 <> horPipe 80 0 (70 *.* cardVec edge)) + <>~ colorSH orange (verticalPipe 80 <> horPipe 80 0 (70 *^ cardVec edge)) -- %~ fmap (<> noPic ( colorSH orange (verticalPipe 80 -- <> horPipe 80 0 (70 *.* cardVec edge)))) -- 70 is a guess, the true value depends on the distance to the wall @@ -57,7 +57,7 @@ randEdgeTanks i = do replicate i $ basetank & plType . putBlock . blDraw - <>~ colorSH orange (verticalPipe 80 <> horPipe 80 0 (70 *.* cardVec edge)) + <>~ colorSH orange (verticalPipe 80 <> horPipe 80 0 (70 *^ cardVec edge)) -- 70 is a guess, the true value depends on the distance to the wall & plSpot .~ rprBool diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 66e163cb5..c5a6bf603 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,6 +1,7 @@ {-# OPTIONS_GHC -Wno-unused-imports #-} module Dodge.Room.Tutorial where +import Dodge.Data.AmmoType import Dodge.Room.Path import Dodge.Room.Pillar import Dodge.Room.Boss @@ -49,12 +50,20 @@ tutAnoTree = do [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tToBTree "sdr" . return . cleatOnward <$> + (shuffleLinks =<< distributerRoom BulletAmmo 10000000) + , return $ tToBTree "cor" $ return $ cleatOnward corridor --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom - , tToBTree "sdr" . return . cleatOnward <$> tanksPipesRoom +-- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] [] + , return $ tToBTree "door" $ return $ cleatOnward door + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tToBTree "sdr" . return . cleatOnward <$> + (shuffleLinks =<< tanksPipesRoom) , return $ tToBTree "cor" $ return $ cleatOnward corridor , return $ tToBTree "cor" $ return $ cleatOnward corridor , return $ tToBTree "cor" $ return $ cleatOnward corridor , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "door" $ return $ cleatOnward door , tutHub , tutLight , tutDrop diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 6e623714d..3cc98cb19 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -32,7 +32,12 @@ import Data.Foldable import Data.Monoid testStringInit :: Universe -> [String] -testStringInit u = [show $ u^. uvWorld . wCam . camZoom] +testStringInit u = map show + (u ^.. uvWorld . cWorld . lWorld . machines . traverse .mcType . _McDistributer) + <> + map f (u ^.. uvWorld . cWorld . lWorld . machines . traverse) + where + f mc = show (mc ^. mcID) <> shortShow (mc ^. mcType) -- [show $ foldMap (foldMap (Sum . length . (^. seObstacles))) -- $ u ^. uvWorld . cWorld . incGraph] -- foldMap prettyShort $ u ^? uvWorld . cWorld . lWorld . machines . ix 0 . mcType . _McProxSensor diff --git a/src/Shape.hs b/src/Shape.hs index d7f7866c7..0bb8cc5fa 100644 --- a/src/Shape.hs +++ b/src/Shape.hs @@ -43,6 +43,7 @@ import qualified Quaternion as Q import Shape.Data -- - approximate a circle around the z axis by a polygon with n*2 points of radius x +-- should be anticlockwise polyCirc :: Int -> Float -> [Point2] {-# INLINE polyCirc #-} polyCirc n x = map (\a -> rotateV a (V2 x 0)) $ take (n * 2) [0, pi / fromIntegral n ..] @@ -149,9 +150,9 @@ upperBoxSU :: Float -> [Point2] -> Shape upperBoxSU = upperBox Small Unimportant upperBox :: - -- | height, expected to be strictly positive Size -> Importance -> + -- | height, expected to be strictly positive Float -> [Point2] -> Shape diff --git a/tags b/tags index 5f1503de3..54fbebd35 100644 --- a/tags +++ b/tags @@ -57,7 +57,7 @@ AmmoParams src/Dodge/Data/Item/Use.hs 49;" t AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 32;" C AmmoPerShot src/Dodge/Data/Muzzle.hs 61;" t AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 31;" C -AmmoType src/Dodge/Data/AmmoType.hs 5;" t +AmmoType src/Dodge/Data/AmmoType.hs 8;" t ArbitraryAction src/Dodge/Data/ActionPlan.hs 119;" C ArcNodeType src/Dodge/Data/LWorld.hs 156;" t ArcShad src/Picture/Data.hs 34;" C @@ -118,7 +118,7 @@ BeamDrawColor src/Dodge/Data/Beam.hs 33;" C BeamSimple src/Dodge/Data/Beam.hs 48;" C BeamType src/Dodge/Data/Beam.hs 44;" t BecomePowerful src/Dodge/Data/Scenario.hs 9;" C -BeltBulletAmmo src/Dodge/Data/AmmoType.hs 8;" C +BeltBulletAmmo src/Dodge/Data/AmmoType.hs 11;" C BezierTrajectory src/Dodge/Data/Bullet.hs 42;" C BezierTrajectoryType src/Dodge/Data/Bullet.hs 49;" C Biome src/Dodge/Data/Scenario.hs 71;" t @@ -148,7 +148,7 @@ BulFrag src/Dodge/Data/Bullet.hs 36;" C BulGas src/Dodge/Data/Bullet.hs 37;" C BulPlain src/Dodge/Data/Bullet.hs 34;" C Bullet src/Dodge/Data/Bullet.hs 16;" t -BulletAmmo src/Dodge/Data/AmmoType.hs 7;" C +BulletAmmo src/Dodge/Data/AmmoType.hs 10;" C BulletEffect src/Dodge/Data/Bullet.hs 26;" t BulletMod src/Dodge/Data/Item/BulletMod.hs 10;" t BulletModEffect src/Dodge/Data/Item/BulletMod.hs 12;" C @@ -350,7 +350,7 @@ DoubleRes src/Dodge/Data/Config.hs 111;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t DrawForceField src/Dodge/Data/Wall.hs 37;" C DrawnWall src/Dodge/Data/Wall.hs 33;" C -DroneAmmo src/Dodge/Data/AmmoType.hs 10;" C +DroneAmmo src/Dodge/Data/AmmoType.hs 13;" C DropItem src/Dodge/Data/ActionPlan.hs 38;" C DudPayload src/Dodge/Data/Payload.hs 11;" C Dungeon src/Dodge/Data/Scenario.hs 66;" C @@ -369,7 +369,7 @@ Eldritch src/Dodge/Data/Scenario.hs 34;" C ElectricSensor src/Dodge/Data/Machine/Sensor.hs 14;" C ElectricSpark src/Dodge/Data/Spark.hs 19;" C Electrical src/Dodge/Data/Damage.hs 24;" C -ElectricalAmmo src/Dodge/Data/AmmoType.hs 9;" C +ElectricalAmmo src/Dodge/Data/AmmoType.hs 12;" C ElectricalBall src/Dodge/Data/EnergyBall/Type.hs 13;" C Electronics src/Dodge/Data/Material.hs 18;" C EllShad src/Picture/Data.hs 35;" C @@ -394,7 +394,7 @@ ExplosionPayload src/Dodge/Data/Payload.hs 9;" C Explosive src/Dodge/Data/Damage.hs 25;" C ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 14;" C ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 87;" C -ExplosivePutty src/Dodge/Data/AmmoType.hs 13;" C +ExplosivePutty src/Dodge/Data/AmmoType.hs 16;" C ExtraMenuOption src/Dodge/Data/Universe.hs 76;" t Eyes src/Dodge/Data/Creature/Perception.hs 39;" C FBO src/Shader/Data.hs 57;" t @@ -474,7 +474,7 @@ GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 18;" C GameOverOptions src/Dodge/Data/Universe.hs 72;" C GameRoom src/Dodge/GameRoom.hs 12;" t Gas src/Dodge/Data/Cloud.hs 34;" t -GasAmmo src/Dodge/Data/AmmoType.hs 11;" C +GasAmmo src/Dodge/Data/AmmoType.hs 14;" C GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" t GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 14;" t GasParams src/Dodge/Data/Item/Use.hs 52;" C @@ -646,7 +646,7 @@ LaserType src/Dodge/Data/Laser.hs 14;" t LaserWeaponSF src/Dodge/Data/ComposedItem.hs 40;" C Lasering src/Dodge/Data/Damage.hs 22;" C LauncherAI src/Dodge/Data/Creature/Misc.hs 43;" C -LauncherAmmo src/Dodge/Data/AmmoType.hs 6;" C +LauncherAmmo src/Dodge/Data/AmmoType.hs 9;" C LaundrySS src/Dodge/Data/Scenario.hs 115;" C LayVars src/Dodge/Data/MetaTree.hs 29;" C Layer src/Picture/Data.hs 20;" t @@ -701,11 +701,11 @@ MOTOR src/Dodge/Data/Item/Combine.hs 63;" C MPO src/Dodge/Base/Collide.hs 96;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 11;" C -Machine src/Dodge/Data/Machine.hs 27;" t +Machine src/Dodge/Data/Machine.hs 28;" t MachineAltSound src/Dodge/Data/SoundOrigin.hs 22;" C MachinePart src/Dodge/Data/Wall/Structure.hs 13;" C MachineSound src/Dodge/Data/SoundOrigin.hs 21;" C -MachineType src/Dodge/Data/Machine.hs 40;" t +MachineType src/Dodge/Data/Machine.hs 41;" t MagBelow src/Dodge/Data/Muzzle.hs 22;" C Magnet src/Dodge/Data/Magnet.hs 21;" t MagnetAlign src/Dodge/Data/Magnet.hs 15;" C @@ -730,11 +730,13 @@ MapperSF src/Dodge/Data/ComposedItem.hs 39;" C Material src/Dodge/Data/Material.hs 10;" t MaterialSound src/Dodge/Data/SoundOrigin.hs 34;" C Maybe' src/MaybeHelp.hs 11;" t -McDamSensor src/Dodge/Data/Machine.hs 43;" C -McProxSensor src/Dodge/Data/Machine.hs 44;" C -McStatic src/Dodge/Data/Machine.hs 41;" C -McTerminal src/Dodge/Data/Machine.hs 42;" C -McTurret src/Dodge/Data/Machine.hs 45;" C +McDamSensor src/Dodge/Data/Machine.hs 44;" C +McDistributer src/Dodge/Data/Machine.hs 48;" C +McProxSensor src/Dodge/Data/Machine.hs 45;" C +McStatic src/Dodge/Data/Machine.hs 42;" C +McStorage src/Dodge/Data/Machine.hs 47;" C +McTerminal src/Dodge/Data/Machine.hs 43;" C +McTurret src/Dodge/Data/Machine.hs 46;" C MdFlickerUpdate src/Dodge/Data/WorldEffect.hs 54;" C MdSetLSCol src/Dodge/Data/WorldEffect.hs 53;" C MdTrigIf src/Dodge/Data/WorldEffect.hs 52;" C @@ -1006,7 +1008,7 @@ PosInf src/Dodge/Data/CardinalPoint.hs 44;" C PosRooms src/Dodge/Tree/Shift.hs 28;" t Posture src/Dodge/Data/Creature/Stance.hs 33;" t PreloadData src/Data/Preload.hs 10;" t -PrintMaterial src/Dodge/Data/AmmoType.hs 12;" C +PrintMaterial src/Dodge/Data/AmmoType.hs 15;" C Prison src/Dodge/Data/Scenario.hs 65;" C Projectile src/Dodge/Data/Projectile.hs 15;" t ProjectileParams src/Dodge/Data/Item/Use.hs 51;" C @@ -1358,7 +1360,7 @@ TurnTo src/Dodge/Data/ActionPlan.hs 35;" C TurnToPoint src/Dodge/Data/ActionPlan.hs 71;" C TurnToward src/Dodge/Data/ActionPlan.hs 32;" C TurnTowardCr src/Dodge/Data/CreatureEffect.hs 9;" C -Turret src/Dodge/Data/Machine.hs 50;" t +Turret src/Dodge/Data/Machine.hs 51;" t TurretInt src/Dodge/Data/Item/Location.hs 19;" t TwistGoal src/Dodge/Data/Scenario.hs 15;" C TwoHandFlat src/Dodge/Data/AimStance.hs 13;" C @@ -1969,15 +1971,16 @@ _mapInvZoom src/Dodge/Data/HUD.hs 19;" f _matUBO src/Data/Preload/Render.hs 42;" f _mbAttach src/Dodge/Data/MetaTree.hs 18;" f _mbTree src/Dodge/Data/MetaTree.hs 18;" f -_mcDamage src/Dodge/Data/Machine.hs 35;" f -_mcDir src/Dodge/Data/Machine.hs 32;" f -_mcHP src/Dodge/Data/Machine.hs 34;" f -_mcID src/Dodge/Data/Machine.hs 28;" f -_mcMaterial src/Dodge/Data/Machine.hs 30;" f -_mcMounts src/Dodge/Data/Machine.hs 37;" f -_mcPos src/Dodge/Data/Machine.hs 31;" f -_mcType src/Dodge/Data/Machine.hs 36;" f -_mcWallIDs src/Dodge/Data/Machine.hs 29;" f +_mcDamage src/Dodge/Data/Machine.hs 36;" f +_mcDir src/Dodge/Data/Machine.hs 33;" f +_mcHP src/Dodge/Data/Machine.hs 35;" f +_mcID src/Dodge/Data/Machine.hs 29;" f +_mcMaterial src/Dodge/Data/Machine.hs 31;" f +_mcMounts src/Dodge/Data/Machine.hs 38;" f +_mcPos src/Dodge/Data/Machine.hs 32;" f +_mcType src/Dodge/Data/Machine.hs 37;" f +_mcWallIDs src/Dodge/Data/Machine.hs 30;" f +_mcdStorageMachine src/Dodge/Data/Machine.hs 48;" f _mcoCombCombine src/Dodge/Data/Input.hs 24;" f _mcoCombSelect src/Dodge/Data/Input.hs 23;" f _mcoDBBool src/Dodge/Data/Input.hs 30;" f @@ -1991,7 +1994,9 @@ _mcoSecSelStart src/Dodge/Data/Input.hs 20;" f _mcoSelEnd src/Dodge/Data/Input.hs 20;" f _mcoTermID src/Dodge/Data/Input.hs 27;" f _mcoTermStatus src/Dodge/Data/Input.hs 27;" f -_mctTurret src/Dodge/Data/Machine.hs 45;" f +_mcsAmount src/Dodge/Data/Machine.hs 47;" f +_mcsType src/Dodge/Data/Machine.hs 47;" f +_mctTurret src/Dodge/Data/Machine.hs 46;" f _mdBool src/Dodge/Data/Modification.hs 19;" f _mdExternalID src/Dodge/Data/Modification.hs 15;" f _mdExternalID1 src/Dodge/Data/Modification.hs 23;" f @@ -2372,10 +2377,10 @@ _trieMVal src/SimpleTrie.hs 11;" f _triggers src/Dodge/Data/LWorld.hs 127;" f _ttDeathEffect src/Dodge/Data/Terminal.hs 43;" f _ttTriggerID src/Dodge/Data/Terminal.hs 42;" f -_tuDir src/Dodge/Data/Machine.hs 54;" f -_tuFireTime src/Dodge/Data/Machine.hs 53;" f -_tuTurnSpeed src/Dodge/Data/Machine.hs 52;" f -_tuWeapon src/Dodge/Data/Machine.hs 51;" f +_tuDir src/Dodge/Data/Machine.hs 55;" f +_tuFireTime src/Dodge/Data/Machine.hs 54;" f +_tuTurnSpeed src/Dodge/Data/Machine.hs 53;" f +_tuWeapon src/Dodge/Data/Machine.hs 52;" f _turnToPoint src/Dodge/Data/ActionPlan.hs 71;" f _uInt src/Dodge/Data/Item/Use.hs 31;" f _uScope src/Dodge/Data/Item/Use.hs 34;" f @@ -2725,7 +2730,7 @@ boxXYZ src/Polyhedra.hs 94;" f boxXYZnobase src/Polyhedra.hs 80;" f brainHat src/Dodge/Item/Equipment.hs 73;" f branchRectWith src/Dodge/Room/Branch.hs 15;" f -branchWith src/Dodge/Room/Room.hs 69;" f +branchWith src/Dodge/Room/Room.hs 73;" f bright src/Color.hs 120;" f brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 131;" f @@ -2743,7 +2748,7 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 248;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 17;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f -cChasm src/Dodge/Room/Tutorial.hs 120;" f +cChasm src/Dodge/Room/Tutorial.hs 129;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2778,7 +2783,7 @@ chaseCritInternal src/Dodge/Humanoid.hs 8;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 121;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 189;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 198;" f chasmTest src/Dodge/Creature/Update.hs 109;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -2810,7 +2815,7 @@ circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f circOnSomeWall src/Dodge/Base/Collide.hs 286;" f circle src/Picture/Base.hs 180;" f -circleDecoration src/Dodge/Placement/TopDecoration.hs 66;" f +circleDecoration src/Dodge/Placement/TopDecoration.hs 62;" f circleSolid src/Picture/Base.hs 164;" f circleSolidCol src/Picture/Base.hs 168;" f clAlt src/Dodge/Cloud.hs 5;" f @@ -2865,7 +2870,7 @@ collidePointTestFilter src/Dodge/Base/Collide.hs 188;" f collidePointWallsFilter src/Dodge/Base/Collide.hs 202;" f color src/Picture/Base.hs 108;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f -colorSH src/Shape.hs 232;" f +colorSH src/Shape.hs 233;" f combinationsDotGraph src/Dodge/Combine/Graph.hs 93;" f combinationsGraph src/Dodge/Combine/Graph.hs 72;" f combinationsOf src/Multiset.hs 46;" f @@ -2905,7 +2910,7 @@ coolMinigun src/Dodge/Creature/State.hs 95;" f copier src/Dodge/Item/Scope.hs 88;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f -corDoor src/Dodge/Room/Room.hs 385;" f +corDoor src/Dodge/Room/Room.hs 389;" f cornerList src/Preload/Render.hs 236;" f corpseOrGib src/Dodge/Creature/Update.hs 88;" f corridor src/Dodge/Room/Corridor.hs 17;" f @@ -2978,9 +2983,9 @@ creatureShootPulseLaser src/Dodge/HeldUse.hs 873;" f creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 68;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 89;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 78;" f -critInDeadEnd src/Dodge/Room/Room.hs 243;" f -critsPillarRoom src/Dodge/Room/Room.hs 390;" f -critsRoom src/Dodge/Room/Room.hs 398;" f +critInDeadEnd src/Dodge/Room/Room.hs 247;" f +critsPillarRoom src/Dodge/Room/Room.hs 394;" f +critsRoom src/Dodge/Room/Room.hs 402;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 27;" f crossProd src/Geometry/Vector3D.hs 41;" f @@ -3013,7 +3018,7 @@ cycleOptions src/Dodge/Menu/Option.hs 75;" f cycleR src/DoubleStack.hs 32;" f cylinderIndices src/Shader/Poke.hs 382;" f cylinderOnSeg src/Geometry.hs 122;" f -cylinderPoly src/Shape.hs 82;" f +cylinderPoly src/Shape.hs 83;" f cylinderRoundIndices src/Shader/Poke.hs 389;" f dShadCol src/Dodge/Render/List.hs 222;" f damMatSideEffect src/Dodge/Material/Damage.hs 20;" f @@ -3045,7 +3050,7 @@ dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 322;" f deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 70;" f -deadEndRoom src/Dodge/Room/Room.hs 246;" f +deadEndRoom src/Dodge/Room/Room.hs 250;" f deadFeet src/Dodge/Creature/Picture.hs 68;" f deadRot src/Dodge/Creature/Picture.hs 84;" f deadScalp src/Dodge/Creature/Picture.hs 81;" f @@ -3070,8 +3075,8 @@ decodeSensorType src/Dodge/Terminal.hs 72;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 61;" f decomposeTree src/Dodge/Tree/Compose.hs 58;" f decontamRoom src/Dodge/Room/Airlock.hs 38;" f -decoratedBlock src/Dodge/Placement/Instance/Block.hs 11;" f -decorationToShape src/Dodge/Placement/TopDecoration.hs 17;" f +decoratedBlock src/Dodge/Placement/Instance/Block.hs 14;" f +decorationToShape src/Dodge/Placement/TopDecoration.hs 16;" f decreaseAwareness src/Dodge/Creature/Perception.hs 118;" f decrementTimer src/Sound.hs 103;" f dedaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 712;" f @@ -3166,6 +3171,7 @@ displayPulse src/Dodge/Inventory/SelectionList.hs 179;" f displayTerminalLineString src/Dodge/Update.hs 480;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f +distributerRoom src/Dodge/Room/Room.hs 411;" f divTo src/Geometry/Zone.hs 8;" f divideCircle src/Geometry.hs 321;" f divideDoorPane src/Dodge/Placement/Instance/Door.hs 65;" f @@ -3245,7 +3251,7 @@ doorBetween src/Dodge/Placement/Instance/Door.hs 38;" f doorLerp src/Dodge/Door.hs 40;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f -doubleCorridorBarrels src/Dodge/Room/Room.hs 276;" f +doubleCorridorBarrels src/Dodge/Room/Room.hs 280;" f doubleFindMax src/Dodge/Update/Scroll.hs 181;" f doubleFindMin src/Dodge/Update/Scroll.hs 160;" f doubleFindPred src/Dodge/Update/Scroll.hs 188;" f @@ -3259,7 +3265,7 @@ drawAimSweep src/Dodge/Render/Picture.hs 292;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawAnySelectionBox src/Dodge/Render/Picture.hs 130;" f drawArrowDown src/Dodge/Render/Picture.hs 219;" f -drawBaseMachine src/Dodge/Machine/Draw.hs 64;" f +drawBaseMachine src/Dodge/Machine/Draw.hs 73;" f drawBlip src/Dodge/RadarBlip.hs 16;" f drawBlock src/Dodge/Render/ShapePicture.hs 51;" f drawBoundingBox src/Dodge/Debug/Picture.hs 358;" f @@ -3284,7 +3290,7 @@ drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 72;" f drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 137;" f drawDDATest src/Dodge/Debug/Picture.hs 303;" f -drawDamSensor src/Dodge/Machine/Draw.hs 27;" f +drawDamSensor src/Dodge/Machine/Draw.hs 36;" f drawDebug src/Dodge/Debug.hs 207;" f drawDrag src/Dodge/Render/Picture.hs 198;" f drawDragDrop src/Dodge/Render/Picture.hs 227;" f @@ -3321,7 +3327,7 @@ drawListElement src/Dodge/Render/List.hs 187;" f drawListYgapScaleYoff src/Dodge/Render/List.hs 96;" f drawListYoff src/Dodge/Render/List.hs 93;" f drawLoadingScreen src/Dodge/Render/MenuScreen.hs 24;" f -drawMachine src/Dodge/Machine/Draw.hs 16;" f +drawMachine src/Dodge/Machine/Draw.hs 17;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f drawMapperInventory src/Dodge/Render/HUD.hs 174;" f drawMenuClick src/Dodge/Render/Picture.hs 166;" f @@ -3367,7 +3373,7 @@ drawText src/Picture/Base.hs 220;" f drawTitle src/Dodge/Render/MenuScreen.hs 49;" f drawTitleBackground src/Dodge/Render/List.hs 45;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f -drawTurret src/Dodge/Machine/Draw.hs 81;" f +drawTurret src/Dodge/Machine/Draw.hs 92;" f drawVerticalDoubleArrow src/Dodge/Render/Picture.hs 210;" f drawWall src/Dodge/Wall/Draw.hs 11;" f drawWallFace src/Dodge/Debug/Picture.hs 73;" f @@ -3521,7 +3527,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 586;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 580;" f -foldMTRS src/Dodge/Room/Tutorial.hs 66;" f +foldMTRS src/Dodge/Room/Tutorial.hs 75;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3533,7 +3539,7 @@ forceElements src/StrictHelp.hs 10;" f forceField src/Dodge/Wall/ForceField.hs 6;" f forceFoldable src/StrictHelp.hs 7;" f forceSpine src/StrictHelp.hs 4;" f -fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 39;" f +fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 37;" f fpsText src/Dodge/Render/Picture.hs 57;" f fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 146;" f frag src/Shader/Data.hs 110;" f @@ -3583,8 +3589,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 533;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 338;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 325;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 347;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 334;" f getDebugMouseOver src/Dodge/Update.hs 375;" f getDistortions src/Dodge/Render.hs 433;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3601,7 +3607,7 @@ getNodePos src/Dodge/Path.hs 34;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 321;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 330;" f getRootItemBounds src/Dodge/Render/HUD.hs 101;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3625,8 +3631,8 @@ glassShat1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 686;" f glassShat2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 652;" f glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 482;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 646;" f -glassSwitchBack src/Dodge/Room/Room.hs 72;" f -glassSwitchBackCrits src/Dodge/Room/Room.hs 106;" f +glassSwitchBack src/Dodge/Room/Room.hs 76;" f +glassSwitchBackCrits src/Dodge/Room/Room.hs 110;" 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 @@ -3818,7 +3824,7 @@ isAnimate src/Dodge/Creature/Test.hs 134;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 65;" f -isElectrical src/Dodge/Machine/Update.hs 84;" f +isElectrical src/Dodge/Machine/Update.hs 86;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 176;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 197;" f isInLnk src/Dodge/PlacementSpot.hs 161;" f @@ -3916,7 +3922,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyholeCorridor src/Dodge/Room/Corridor.hs 40;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 676;" f -lChasm src/Dodge/Room/Tutorial.hs 129;" f +lChasm src/Dodge/Room/Tutorial.hs 138;" f lConnect src/Dodge/Render/Connectors.hs 42;" f lConnectMulti src/Dodge/Render/Connectors.hs 46;" f lShape src/Dodge/Placement/Instance/LightSource.hs 54;" f @@ -4026,7 +4032,7 @@ lookupTrie src/SimpleTrie.hs 30;" f loopPairs src/ListHelp.hs 30;" f lootRoom src/Dodge/Room/Treasure.hs 58;" f lorem src/Lorem.hs 3;" f -lowBlock src/Dodge/Placement/Instance/Block.hs 25;" f +lowBlock src/Dodge/Placement/Instance/Block.hs 28;" f lsColPos src/Dodge/LightSource.hs 24;" f lsColPosID src/Dodge/LightSource.hs 21;" f lsColPosRad src/Dodge/LightSource.hs 30;" f @@ -4115,25 +4121,25 @@ maybeOpenConsole src/Dodge/Update.hs 126;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f -mcApplyDamage src/Dodge/Machine/Update.hs 129;" f -mcColor src/Dodge/Machine/Draw.hs 72;" f -mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 98;" f -mcDamSensorUpdate src/Dodge/Machine/Update.hs 136;" f +mcApplyDamage src/Dodge/Machine/Update.hs 131;" f +mcColor src/Dodge/Machine/Draw.hs 81;" f +mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 100;" f +mcDamSensorUpdate src/Dodge/Machine/Update.hs 138;" f mcKillBut src/Dodge/Machine/Destroy.hs 37;" f mcKillTerm src/Dodge/Machine/Destroy.hs 29;" f -mcNoItemsTest src/Dodge/Machine/Update.hs 144;" f -mcPlaySound src/Dodge/Machine/Update.hs 113;" f -mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 104;" f -mcProxSensorUpdate src/Dodge/Machine/Update.hs 139;" f -mcProxTest src/Dodge/Machine/Update.hs 203;" f -mcProximitySensorUpdate src/Dodge/Machine/Update.hs 171;" f +mcNoItemsTest src/Dodge/Machine/Update.hs 146;" f +mcPlaySound src/Dodge/Machine/Update.hs 115;" f +mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 106;" f +mcProxSensorUpdate src/Dodge/Machine/Update.hs 141;" f +mcProxTest src/Dodge/Machine/Update.hs 205;" f +mcProximitySensorUpdate src/Dodge/Machine/Update.hs 173;" f mcSPic src/Dodge/Render/ShapePicture.hs 134;" f mcShootAuto src/Dodge/HeldUse.hs 1169;" f mcShootLaser src/Dodge/HeldUse.hs 1162;" f -mcTriggerVal src/Dodge/Machine/Update.hs 110;" f +mcTriggerVal src/Dodge/Machine/Update.hs 112;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f mcUseHeld src/Dodge/HeldUse.hs 1086;" f -mcUseItem src/Dodge/Machine/Update.hs 89;" f +mcUseItem src/Dodge/Machine/Update.hs 91;" f megaBattery src/Dodge/Item/Ammo.hs 55;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f megaTinMag src/Dodge/Item/Ammo.hs 23;" f @@ -4160,9 +4166,9 @@ metal7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 562;" f metalPlate src/Dodge/Item/Craftable.hs 35;" f mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f -midBarDecoration src/Dodge/Placement/TopDecoration.hs 24;" f +midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 152;" f +midChasm src/Dodge/Room/Tutorial.hs 161;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4176,7 +4182,7 @@ miniGunX src/Dodge/Item/Held/Cane.hs 33;" f miniGunXPict src/Dodge/Item/Draw/SPic.hs 373;" f miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 370;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 756;" f -miniTree2 src/Dodge/Room/Room.hs 113;" f +miniTree2 src/Dodge/Room/Room.hs 117;" f minimumOn src/FoldlHelp.hs 14;" f mirrorXAxis src/Geometry/Polygon.hs 68;" f mirrorxz src/Picture/Base.hs 335;" f @@ -4309,14 +4315,14 @@ outLink src/Dodge/RoomLink.hs 120;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f outwardIntegers src/Dodge/Base.hs 181;" f overCol src/Picture/Base.hs 308;" f -overColObj src/Shape.hs 268;" f -overColSH src/Shape.hs 236;" f +overColObj src/Shape.hs 269;" f +overColSH src/Shape.hs 237;" f overDebugEvent src/Dodge/Debug.hs 31;" f overLnkPosDir src/Dodge/RoomLink.hs 115;" f overLnkType src/Dodge/RoomLink.hs 105;" f overPos src/Picture/Base.hs 303;" f -overPosObj src/Shape.hs 272;" f -overPosSH src/Shape.hs 256;" f +overPosObj src/Shape.hs 273;" f +overPosSH src/Shape.hs 257;" f overPosSP src/ShapePicture.hs 41;" f overlapCircWalls src/Dodge/Base/Collide.hs 230;" f overlapCircWallsClosest src/Dodge/Base/Collide.hs 272;" f @@ -4368,7 +4374,7 @@ pincerP''' src/Dodge/Creature/Boid.hs 77;" f pingPongBetween src/Render.hs 210;" f pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 40;" f -pistolerRoom src/Dodge/Room/Room.hs 330;" f +pistolerRoom src/Dodge/Room/Room.hs 334;" f pjRemoteSetDirection src/Dodge/Projectile/Update.hs 173;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 24;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 12;" f @@ -4393,7 +4399,7 @@ playPositionalSoundQueue src/Sound.hs 146;" f playSoundAndUpdate src/Sound.hs 54;" f playSoundQueue src/Sound.hs 133;" f playSoundUnlessRewinding appDodge/Main.hs 110;" f -plusDecoration src/Dodge/Placement/TopDecoration.hs 45;" f +plusDecoration src/Dodge/Placement/TopDecoration.hs 43;" f pnZoneSize src/Dodge/Zoning/Pathing.hs 26;" f pointIfNotClose src/Dodge/LevelGen/StaticWalls/Deprecated.hs 68;" f pointInCircle src/Geometry.hs 209;" f @@ -4441,10 +4447,10 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 84;" f poly3Col src/Picture/Base.hs 88;" f -polyChasm src/Dodge/Room/Tutorial.hs 173;" f -polyChasmC src/Dodge/Room/Tutorial.hs 182;" f -polyCirc src/Shape.hs 46;" f -polyCircx src/Shape.hs 51;" f +polyChasm src/Dodge/Room/Tutorial.hs 182;" f +polyChasmC src/Dodge/Room/Tutorial.hs 191;" f +polyCirc src/Shape.hs 47;" f +polyCircx src/Shape.hs 52;" f polyCornerDist src/Geometry/Polygon.hs 61;" f polyOrthDist src/Geometry/Polygon.hs 51;" f polyPointsIntersect src/Geometry/ConvexPoly.hs 60;" f @@ -4489,8 +4495,8 @@ printInfoCheckNum src/Dodge/Tree/Shift.hs 161;" f printPartialColumns src/Dodge/Tree/Shift.hs 142;" f printPoint src/Dodge/Debug/Picture.hs 35;" f printRotPoint src/Dodge/Debug/Picture.hs 38;" f -prismBox src/Shape.hs 73;" f -prismPoly src/Shape.hs 59;" f +prismBox src/Shape.hs 74;" f +prismPoly src/Shape.hs 60;" f projV src/Geometry/Vector.hs 177;" f projV3 src/Geometry/Vector3D.hs 127;" f propSPic src/Dodge/Prop/Draw.hs 22;" f @@ -4624,7 +4630,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f removeAmmoFromMag src/Dodge/HeldUse.hs 907;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 238;" f +removeLights src/Dodge/Room/Tutorial.hs 247;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f @@ -4683,15 +4689,15 @@ rmInLinks src/Dodge/RoomLink.hs 153;" f rmInvItem src/Dodge/Inventory.hs 74;" f rmLinksOfType src/Dodge/RoomLink.hs 150;" f rmOutLinks src/Dodge/RoomLink.hs 153;" f -roomC src/Dodge/Room/Room.hs 40;" f -roomCCrits src/Dodge/Room/Room.hs 271;" f -roomCenterPillar src/Dodge/Room/Room.hs 126;" f +roomC src/Dodge/Room/Room.hs 44;" f +roomCCrits src/Dodge/Room/Room.hs 275;" f +roomCenterPillar src/Dodge/Room/Room.hs 130;" f roomCritLS src/Dodge/Room/RunPast.hs 24;" f roomCross src/Dodge/Room/Boss.hs 79;" f roomGlassOctogon src/Dodge/Room/Boss.hs 22;" f -roomMiniIntro src/Dodge/Room/Room.hs 121;" f +roomMiniIntro src/Dodge/Room/Room.hs 125;" f roomNgon src/Dodge/Room/Ngon.hs 16;" f -roomPadCut src/Dodge/Room/Room.hs 61;" f +roomPadCut src/Dodge/Room/Room.hs 65;" f roomPillars src/Dodge/Room/Pillar.hs 106;" f roomPillarsContaining src/Dodge/Room/Containing.hs 39;" f roomPillarsPassage src/Dodge/Room/Pillar.hs 93;" f @@ -4714,9 +4720,9 @@ rotate3y src/Geometry/Vector3D.hs 66;" f rotate3z src/Geometry/Vector3D.hs 54;" f rotateCamera src/Dodge/Update/Camera.hs 204;" f rotateList src/Padding.hs 49;" f -rotateSH src/Shape.hs 252;" f -rotateSHq src/Shape.hs 161;" f -rotateSHx src/Shape.hs 260;" f +rotateSH src/Shape.hs 253;" f +rotateSHq src/Shape.hs 162;" f +rotateSHx src/Shape.hs 261;" f rotateSP src/ShapePicture.hs 57;" f rotateTo src/Polyhedra/Geodesic.hs 64;" f rotateToOverlappingWall src/Dodge/Update/Camera.hs 216;" f @@ -4760,7 +4766,7 @@ scale src/Picture/Base.hs 149;" f scale3 src/Picture/Base.hs 145;" f scaleMat src/MatrixHelper.hs 71;" f scaleMatrix src/MatrixHelper.hs 68;" f -scaleSH src/Shape.hs 264;" f +scaleSH src/Shape.hs 265;" f scalp src/Dodge/Creature/Picture.hs 93;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 102;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f @@ -4802,13 +4808,13 @@ selSecYint src/Dodge/SelectionSections.hs 152;" f selectedItemScroll src/Dodge/Update/Scroll.hs 51;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f -senseDamage src/Dodge/Machine/Update.hs 215;" f -sensorReqToString src/Dodge/Machine/Update.hs 197;" f +senseDamage src/Dodge/Machine/Update.hs 217;" f +sensorReqToString src/Dodge/Machine/Update.hs 199;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f -sensorSPic src/Dodge/Machine/Draw.hs 86;" f -sensorTut src/Dodge/Room/Tutorial.hs 347;" f -sensorTypeDamages src/Dodge/Machine/Update.hs 234;" f +sensorSPic src/Dodge/Machine/Draw.hs 97;" f +sensorTut src/Dodge/Room/Tutorial.hs 356;" f +sensorTypeDamages src/Dodge/Machine/Update.hs 236;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 49;" f @@ -4834,7 +4840,7 @@ setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 73;" f +setRoomInt src/Dodge/Room/Tutorial.hs 82;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" f setShaderSource src/Shader/Compile.hs 121;" f @@ -4843,7 +4849,7 @@ setSoundVolume src/Sound.hs 158;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f -setTreeInts src/Dodge/Room/Tutorial.hs 80;" f +setTreeInts src/Dodge/Room/Tutorial.hs 89;" f setViewDistance src/Dodge/Update/Camera.hs 243;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 438;" f @@ -4905,10 +4911,10 @@ shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootTeslaArc src/Dodge/HeldUse.hs 1186;" f shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f shootTractorBeam src/Dodge/HeldUse.hs 821;" f -shootersRoom src/Dodge/Room/Room.hs 324;" f -shootersRoom' src/Dodge/Room/Room.hs 291;" f -shootersRoom1 src/Dodge/Room/Room.hs 314;" f -shootingRange src/Dodge/Room/Room.hs 341;" f +shootersRoom src/Dodge/Room/Room.hs 328;" f +shootersRoom' src/Dodge/Room/Room.hs 295;" f +shootersRoom1 src/Dodge/Room/Room.hs 318;" f +shootingRange src/Dodge/Room/Room.hs 345;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 748;" f @@ -4994,7 +5000,7 @@ sparkRandDir src/Dodge/Spark.hs 116;" f sparkToDamage src/Dodge/Spark.hs 39;" f spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 54;" f -spawnerRoom src/Dodge/Room/Room.hs 369;" f +spawnerRoom src/Dodge/Room/Room.hs 373;" f speedLegs src/Dodge/Item/Equipment.hs 90;" f splashMenu src/Dodge/Menu.hs 33;" f splashMenuOptions src/Dodge/Menu.hs 38;" f @@ -5012,7 +5018,7 @@ spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f square src/Geometry/Polygon.hs 48;" f -squareDecoration src/Dodge/Placement/TopDecoration.hs 51;" f +squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 116;" f squashNormalizeV src/Geometry/Vector.hs 158;" f ssLookupDown src/Dodge/SelectionSections.hs 82;" f @@ -5057,6 +5063,7 @@ stopAllSounds src/Sound.hs 126;" f stopBulletAt src/Dodge/Bullet.hs 200;" f stopPushing src/Dodge/Wall/Damage.hs 95;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f +storageShape src/Dodge/Machine/Draw.hs 30;" 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 @@ -5111,9 +5118,9 @@ termScreenColor src/Dodge/Terminal/Color.hs 8;" f termSoundLine src/Dodge/Terminal.hs 43;" f termTextColor src/Dodge/Terminal.hs 46;" f terminalReturnEffect src/Dodge/Terminal.hs 168;" f -terminalSPic src/Dodge/Machine/Draw.hs 36;" f -terminalScreenGlow src/Dodge/Machine/Update.hs 40;" f -terminalShape src/Dodge/Machine/Draw.hs 39;" f +terminalSPic src/Dodge/Machine/Draw.hs 45;" f +terminalScreenGlow src/Dodge/Machine/Update.hs 42;" f +terminalShape src/Dodge/Machine/Draw.hs 48;" 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 410;" f @@ -5147,7 +5154,7 @@ thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 106;" f thingsHit src/Dodge/WorldEvent/ThingsHit.hs 44;" f thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 127;" f thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 52;" f -threeLineDecoration src/Dodge/Placement/TopDecoration.hs 71;" f +threeLineDecoration src/Dodge/Placement/TopDecoration.hs 67;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 534;" f throwItem src/Dodge/Creature/Action.hs 191;" f tileTexCoords src/Tile.hs 11;" f @@ -5216,9 +5223,9 @@ translateFloatingCameraKeys src/Dodge/Update/Camera.hs 66;" f translateH src/Picture/Base.hs 112;" f translatePointToLeftHand src/Dodge/Creature/HandPos.hs 75;" f translatePointToRightHand src/Dodge/Creature/HandPos.hs 36;" f -translateSH src/Shape.hs 240;" f -translateSHxy src/Shape.hs 244;" f -translateSHz src/Shape.hs 248;" f +translateSH src/Shape.hs 241;" f +translateSHxy src/Shape.hs 245;" f +translateSHz src/Shape.hs 249;" f translateSP src/ShapePicture.hs 53;" f translateSPxy src/ShapePicture.hs 45;" f translateSPz src/ShapePicture.hs 49;" f @@ -5266,13 +5273,13 @@ tryThrust src/Dodge/Projectile/Update.hs 123;" f tryUseParent src/Dodge/Creature/State.hs 145;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f -tutAnoTree src/Dodge/Room/Tutorial.hs 46;" f -tutDrop src/Dodge/Room/Tutorial.hs 85;" f -tutHub src/Dodge/Room/Tutorial.hs 245;" f -tutLight src/Dodge/Room/Tutorial.hs 210;" f -tutRezBox src/Dodge/Room/Tutorial.hs 358;" f +tutAnoTree src/Dodge/Room/Tutorial.hs 47;" f +tutDrop src/Dodge/Room/Tutorial.hs 94;" f +tutHub src/Dodge/Room/Tutorial.hs 254;" f +tutLight src/Dodge/Room/Tutorial.hs 219;" f +tutRezBox src/Dodge/Room/Tutorial.hs 367;" f tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 381;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 390;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5410,7 +5417,7 @@ updateTeslaArc src/Dodge/Update.hs 579;" f updateTeslaArcs src/Dodge/Update.hs 576;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f updateTractorBeams src/Dodge/Update.hs 648;" f -updateTurret src/Dodge/Machine/Update.hs 49;" f +updateTurret src/Dodge/Machine/Update.hs 51;" f updateUniverse src/Dodge/Update.hs 74;" f updateUniverseFirst src/Dodge/Update.hs 85;" f updateUniverseLast src/Dodge/Update.hs 136;" f @@ -5424,23 +5431,23 @@ updateWheelEvents src/Dodge/Update.hs 410;" f updateWorldEventFlag src/Dodge/Update.hs 120;" f updateWorldEventFlags src/Dodge/Update.hs 108;" f upperBody src/Dodge/Creature/Picture.hs 121;" f -upperBox src/Shape.hs 151;" f -upperBoxHalf src/Shape.hs 217;" f -upperBoxMT src/Shape.hs 142;" f -upperBoxST src/Shape.hs 145;" f -upperBoxSU src/Shape.hs 148;" f -upperCylinder src/Shape.hs 164;" f -upperPrismPoly src/Shape.hs 118;" f -upperPrismPolyHalf src/Shape.hs 202;" f -upperPrismPolyHalfMI src/Shape.hs 196;" f -upperPrismPolyHalfST src/Shape.hs 199;" f -upperPrismPolyMT src/Shape.hs 97;" f -upperPrismPolySE src/Shape.hs 100;" f -upperPrismPolySI src/Shape.hs 106;" f -upperPrismPolyST src/Shape.hs 103;" f -upperPrismPolySU src/Shape.hs 109;" f -upperPrismPolyTS src/Shape.hs 115;" f -upperRounded src/Shape.hs 180;" f +upperBox src/Shape.hs 152;" f +upperBoxHalf src/Shape.hs 218;" f +upperBoxMT src/Shape.hs 143;" f +upperBoxST src/Shape.hs 146;" f +upperBoxSU src/Shape.hs 149;" f +upperCylinder src/Shape.hs 165;" f +upperPrismPoly src/Shape.hs 119;" f +upperPrismPolyHalf src/Shape.hs 203;" f +upperPrismPolyHalfMI src/Shape.hs 197;" f +upperPrismPolyHalfST src/Shape.hs 200;" f +upperPrismPolyMT src/Shape.hs 98;" f +upperPrismPolySE src/Shape.hs 101;" f +upperPrismPolySI src/Shape.hs 107;" f +upperPrismPolyST src/Shape.hs 104;" f +upperPrismPolySU src/Shape.hs 110;" f +upperPrismPolyTS src/Shape.hs 116;" f +upperRounded src/Shape.hs 181;" f useBulletPayload src/Dodge/Bullet.hs 117;" f useGasParams src/Dodge/HeldUse.hs 1091;" f useHotkey src/Dodge/Creature/YourControl.hs 77;" f @@ -5508,12 +5515,12 @@ wasdWithAiming src/Dodge/Creature/YourControl.hs 126;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 185;" f weakenMatS src/Dodge/Material/Sound.hs 19;" f -weaponBehindPillar src/Dodge/Room/Room.hs 186;" f -weaponBetweenPillars src/Dodge/Room/Room.hs 202;" f -weaponEmptyRoom src/Dodge/Room/Room.hs 147;" f -weaponLongCorridor src/Dodge/Room/Room.hs 227;" f -weaponRoom src/Dodge/Room/Room.hs 260;" f -weaponUnderCrits src/Dodge/Room/Room.hs 165;" f +weaponBehindPillar src/Dodge/Room/Room.hs 190;" f +weaponBetweenPillars src/Dodge/Room/Room.hs 206;" f +weaponEmptyRoom src/Dodge/Room/Room.hs 151;" f +weaponLongCorridor src/Dodge/Room/Room.hs 231;" f +weaponRoom src/Dodge/Room/Room.hs 264;" f +weaponUnderCrits src/Dodge/Room/Room.hs 169;" f wedgeGeom src/Dodge/Base.hs 42;" f wedgeOfThickness src/Dodge/Picture.hs 9;" f whirS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 752;" f @@ -5568,8 +5575,8 @@ wristArmour src/Dodge/Item/Equipment.hs 43;" f wristInvisibility src/Dodge/Item/Equipment.hs 96;" f writeConfig src/Dodge/Menu.hs 182;" f writeSaveSlot src/Dodge/Save.hs 36;" f -xCylinder src/Shape.hs 132;" f -xCylinderST src/Shape.hs 129;" f +xCylinder src/Shape.hs 133;" f +xCylinderST src/Shape.hs 130;" f xIntercepts src/Dodge/Zoning/Base.hs 66;" f xSwitch src/Dodge/Room/Airlock.hs 33;" f xV2 src/Geometry/Vector.hs 201;" f @@ -5588,7 +5595,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 139;" f +zChasm src/Dodge/Room/Tutorial.hs 148;" f zConnect src/Dodge/Render/Connectors.hs 17;" f zConnectCol src/Dodge/Render/Connectors.hs 28;" f zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f