From 5701261ace6763d36ff84589cbe8817d0c755a6f Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 31 Mar 2026 20:29:30 +0100 Subject: [PATCH] Make machines have footprint like doors --- src/Dodge/Data/GenWorld.hs | 3 +- src/Dodge/Data/Machine.hs | 3 +- src/Dodge/Default.hs | 1 - src/Dodge/Machine/Destroy.hs | 5 +- src/Dodge/Placement/Instance/Sensor.hs | 3 +- src/Dodge/Placement/Instance/Terminal.hs | 3 +- src/Dodge/Placement/Instance/Turret.hs | 6 +- src/Dodge/Placement/PlaceSpot.hs | 49 +++-- src/Dodge/Placement/PlaceSpot/TriggerDoor.hs | 6 +- src/Dodge/Room/Room.hs | 5 +- src/Dodge/Wall/Damage.hs | 4 +- tags | 187 ++++++++++--------- 12 files changed, 137 insertions(+), 138 deletions(-) diff --git a/src/Dodge/Data/GenWorld.hs b/src/Dodge/Data/GenWorld.hs index 07ac039c2..91e347827 100644 --- a/src/Dodge/Data/GenWorld.hs +++ b/src/Dodge/Data/GenWorld.hs @@ -32,8 +32,7 @@ data GenWorld = GenWorld data PSType = PutCrit {_unPutCrit :: Creature} | PutMachine - { _putMachinePoly :: [Point2] - , _putMachineMachine :: Machine + { _putMachineMachine :: Machine , _putMachineMaybeItem :: Maybe Item } | PutLS {_putLS :: LightSource} diff --git a/src/Dodge/Data/Machine.hs b/src/Dodge/Data/Machine.hs index e552cfcdb..7a0b7e4e4 100644 --- a/src/Dodge/Data/Machine.hs +++ b/src/Dodge/Data/Machine.hs @@ -17,7 +17,6 @@ import Dodge.Data.AmmoType import Control.Lens import Data.Aeson import Data.Aeson.TH -import qualified Data.IntSet as IS import qualified Data.Map.Strict as M import Dodge.Data.Damage import Dodge.Data.GenParams @@ -30,7 +29,7 @@ import qualified Data.IntMap.Strict as IM data Machine = Machine { _mcID :: Int - , _mcWallIDs :: IS.IntSet +-- , _mcWallIDs :: IS.IntSet , _mcMaterial :: Material , _mcSkin :: Material , _mcFootPrint :: IM.IntMap (Point2,Point2) diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index 7c6837e89..5bcc34b5f 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -31,7 +31,6 @@ defaultMachine :: Machine defaultMachine = Machine { _mcID = 0 - , _mcWallIDs = mempty , _mcPos = V2 0 0 , _mcDir = 0 , _mcHP = 1000 diff --git a/src/Dodge/Machine/Destroy.hs b/src/Dodge/Machine/Destroy.hs index 335cd81f8..6ea7ec7a7 100644 --- a/src/Dodge/Machine/Destroy.hs +++ b/src/Dodge/Machine/Destroy.hs @@ -13,7 +13,7 @@ import LensHelp destroyMachine :: Machine -> World -> World destroyMachine mc = (cWorld . lWorld . machines %~ IM.delete (_mcID mc)) - . deleteWallIDs (_mcWallIDs mc) + . deleteWallIDs (IM.keysSet $ _mcFootPrint mc) . makeMachineDebris mc . makeSmallExplosionAt (_mcPos mc `v2z` 20) 0 . mcKillTerm mc @@ -24,7 +24,8 @@ destroyMachine mc = --explodeMachine mc = \case makeMachineDebris :: Machine -> World -> World -makeMachineDebris mc = id -- foldl' (flip $ makeDebris mt) w ps +makeMachineDebris _ = id -- foldl' (flip $ makeDebris mt) w ps +--makeMachineDebris mc = id -- foldl' (flip $ makeDebris mt) w ps -- where -- dsize = debrisSize mt -- ps = gridInPolygon dsize $ shrinkPolyOnEdges dsize $ reverse (_mcFootprint bl) diff --git a/src/Dodge/Placement/Instance/Sensor.hs b/src/Dodge/Placement/Instance/Sensor.hs index c989780b3..ba418d6a7 100644 --- a/src/Dodge/Placement/Instance/Sensor.hs +++ b/src/Dodge/Placement/Instance/Sensor.hs @@ -9,14 +9,15 @@ import Dodge.Default import Dodge.LevelGen.PlacementHelper import Dodge.LightSource import Geometry +import qualified Data.IntMap.Strict as IM damageSensor :: SensorType -> Float -> Maybe Int -> PlacementSpot -> Placement damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1) $ \lsid -> psPtJpl ps $ PutMachine - (reverse $ square wdth) ( defaultMachine + & mcFootPrint .~ IM.fromDistinctAscList (zip [0..] . loopPairs . reverse $ square wdth) & mcSkin .~ mattype & mcMounts . at OTTrigger .~ mtrid & mcMounts . at OTLightSource ?~ lsid diff --git a/src/Dodge/Placement/Instance/Terminal.hs b/src/Dodge/Placement/Instance/Terminal.hs index 6cd57d89f..2725c98b6 100644 --- a/src/Dodge/Placement/Instance/Terminal.hs +++ b/src/Dodge/Placement/Instance/Terminal.hs @@ -4,6 +4,7 @@ module Dodge.Placement.Instance.Terminal ( putTerminal, ) where +import qualified Data.IntMap.Strict as IM import Data.Maybe import Dodge.Data.GenWorld import Dodge.Default @@ -29,9 +30,9 @@ putTerminalFull f mc tm = \btpl -> Just $ pt0 ( PutMachine - (reverse $ square 10) ( mc & mcMounts . at OTButton ?~ fromJust (_plMID btpl) & mcMounts . at OTTerminal .~ _plMID tmpl + & mcFootPrint .~ IM.fromDistinctAscList (zip [0..] . loopPairs . reverse $ square 10) ) Nothing ) diff --git a/src/Dodge/Placement/Instance/Turret.hs b/src/Dodge/Placement/Instance/Turret.hs index ede96f860..f7326ccfc 100644 --- a/src/Dodge/Placement/Instance/Turret.hs +++ b/src/Dodge/Placement/Instance/Turret.hs @@ -1,5 +1,4 @@ -module Dodge.Placement.Instance.Turret - (putLasTurret) where +module Dodge.Placement.Instance.Turret (putLasTurret) where import Dodge.Item.Held.BatteryGuns import Dodge.Data.GenWorld @@ -7,6 +6,7 @@ import Dodge.Default import Dodge.LevelGen.PlacementHelper import Geometry import LensHelp +import qualified Data.IntMap.Strict as IM --putTurret :: Item -> Float -> Placement --putTurret itm rotSpeed = @@ -24,8 +24,8 @@ putLasTurret :: Float -> Placement putLasTurret rotSpeed = sps0 $ PutMachine - (reverse $ square 10) ( defaultMachine + & mcFootPrint .~ IM.fromDistinctAscList (zip [0..] . loopPairs . reverse $ square 10) -- & mcColor .~ blue & mcType .~ (lasTurret & mctTurret . tuTurnSpeed .~ rotSpeed) & mcHP .~ 1500 diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index c908d096a..97052499b 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -10,7 +10,6 @@ module Dodge.Placement.PlaceSpot (placeSpot) where import Control.Monad.Trans.State.Lazy import Data.Bifunctor import Data.Foldable -import qualified Data.IntSet as IS import Data.Maybe import qualified Data.Set as S import Dodge.Base.NewID @@ -127,7 +126,7 @@ placeSpotID rid ps pt w = case pt of PutCrit cr -> plNewUpID (gwWorld . cWorld . lWorld . creatures) crID (mvCr p rot cr) w PutForeground fs -> (0, w & gwWorld . cWorld . lWorld . foreShapes .:~ mvFS p rot fs) - PutMachine pps mc mitm -> plMachine (map doShift pps) mc mitm p rot w + PutMachine mc mitm -> plMachine mc mitm p rot w PutLS ls -> plNewUpID (gwWorld . cWorld . lWorld . lightSources) lsID (mvLS p rot ls) w RandPS _ -> error "RandPS should not be reachable here" -- evaluateRandPS rid rgn ps w PutDoor dr wl -> plDoor (dr & drZeroPos %~ pashift & drOnePos %~ pashift) wl w @@ -189,31 +188,42 @@ mvFS :: Point2 -> Float -> ForegroundShape -> ForegroundShape mvFS p a = (fsDir +~ a) . (fsPos %~ ((p +) . rotateV a)) plMachine :: - [Point2] -> +-- [Point2] -> Machine -> Maybe Item -> Point2 -> Float -> GenWorld -> (Int, GenWorld) -plMachine wallpoly mc mitm p rot gw = +plMachine mc mitm p rot gw = ( mcid , gw - & tolw - . machines - . at mcid - ?~ themc - & gwWorld - %~ placeMachineWalls (_mcSkin mc) wallpoly mcid wlid - & tolw - %~ maybe id placeturretitm mitm + & tolw . machines . at mcid ?~ themc + & tolw %~ maybe id placeturretitm mitm + & gwWorld %~ addwalls + -- & gwWorld %~ placeMachineWalls (_mcSkin mc) wallpoly mcid wlid ) where + addwalls = + insertStructureWalls + MachinePart + wl + (map fst pps & each %~ shiftPointBy (p,rot)) + mcid + wlid + pps = IM.elems $ mc ^. mcFootPrint + wl = + defaultMachineWall + & wlStructure . wsMachine .~ mcid + & wlMaterial .~ (mc ^. mcSkin) tolw = gwWorld . cWorld . lWorld mcid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . machines wlid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . walls - wlids = IS.fromList $ take (length wallpoly) [wlid ..] - themc = mc{_mcPos = p, _mcDir = rot, _mcID = mcid, _mcWallIDs = wlids} + themc = mc + & mcPos .~ p + & mcDir .~ rot + & mcID .~ mcid + & mcFootPrint .~ IM.fromDistinctAscList (zip [wlid..] pps) placeturretitm itm = (items . at itid ?~ itm') . (machines . ix mcid . mcType . mctTurret . tuWeapon .~ itid) @@ -221,16 +231,5 @@ plMachine wallpoly mc mitm p rot gw = itid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . items itm' = itm & itID .~ NInt itid & itLocation .~ OnTurret mcid -placeMachineWalls :: Material -> [Point2] -> Int -> Int -> World -> World -placeMachineWalls mat poly mcid = insertStructureWalls MachinePart baseWall poly mcid - where - baseWall = - defaultMachineWall - & wlStructure - . wsMachine - .~ mcid - & wlMaterial - .~ mat - mvLS :: Point2 -> Float -> LightSource -> LightSource mvLS x rot = lsParam . lsPos . _xy %~ ((+ x) . rotateV rot) diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 3f36cec46..486abf693 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -9,11 +9,7 @@ import Dodge.ShiftPoint import qualified IntMapHelp as IM import LensHelp -plDoor :: - Door -> - Wall -> - GenWorld -> - (Int, GenWorld) +plDoor :: Door -> Wall -> GenWorld -> (Int, GenWorld) plDoor dr wl gw = ( drid , over gwWorld addWalls $ gw & gwWorld . cWorld . lWorld . doors . at drid ?~ newdr diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index b7e454679..52a55f9a5 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -15,6 +15,7 @@ module Dodge.Room.Room ( critDeadEnd, ) where +import qualified Data.IntMap.Strict as IM import Data.Maybe import Linear import Color @@ -435,11 +436,13 @@ distributerRoom atype aamount = do let mcstore = defaultMachine & mcMaterial .~ Metal & mcType .~ McStorage atype aamount + & mcFootPrint .~ IM.fromDistinctAscList (zip [0..] . loopPairs . reverse $ polyCirc 4 20) mcdist mj = defaultMachine & mcMaterial .~ Metal & mcType .~ McDistributer mj store = sps (unusedOffPathAwayFromLink 50) - (PutMachine (reverse $ polyCirc 4 20) mcstore Nothing) & plExternalID ?~ i + --(PutMachine (reverse $ polyCirc 4 20) mcstore Nothing) & plExternalID ?~ i + (PutMachine mcstore Nothing) & plExternalID ?~ i dst gw = let mj = gw ^? genPmnt . ix i . plMID . _Just in putTerminal (mcdist mj) (defaultTerminal & tmBootLines .~ tmDistributeLines & tmRebootOnAccess .~ True diff --git a/src/Dodge/Wall/Damage.hs b/src/Dodge/Wall/Damage.hs index 603faefd1..e1c759bd0 100644 --- a/src/Dodge/Wall/Damage.hs +++ b/src/Dodge/Wall/Damage.hs @@ -25,7 +25,7 @@ import Dodge.Zoning.Pathing import Geometry.Data import LensHelp import Linear -import qualified Data.IntSet as IS +--import qualified Data.IntSet as IS import Dodge.Machine.Destroy damageWall :: Int -> Damage -> World -> (S.Set Int2, World) @@ -112,7 +112,7 @@ sensorTypeDamages = \case destroyMachine' :: Machine -> World -> (S.Set Int2, World) destroyMachine' mc w = (js, destroyMachine mc w) where - wlids = IS.toList $ mc ^. mcWallIDs + wlids = IM.keys $ mc ^. mcFootPrint f wlid = w ^?! cWorld . lWorld . walls . ix wlid . wlLine js = foldMap (S.fromList . uncurry (zoneOfSeg peZoneSize) . f) wlids diff --git a/tags b/tags index b1cc65639..a9e002059 100644 --- a/tags +++ b/tags @@ -704,12 +704,12 @@ MOTOR src/Dodge/Data/Item/Combine.hs 63;" C MPO src/Dodge/Base/Collide.hs 97;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 12;" C -Machine src/Dodge/Data/Machine.hs 30;" t +Machine src/Dodge/Data/Machine.hs 31;" t MachineAltSound src/Dodge/Data/SoundOrigin.hs 23;" C MachineBackgroundSound src/Dodge/Data/SoundOrigin.hs 22;" C MachinePart src/Dodge/Data/Wall/Structure.hs 14;" C MachinePrimarySound src/Dodge/Data/SoundOrigin.hs 21;" C -MachineType src/Dodge/Data/Machine.hs 42;" t +MachineType src/Dodge/Data/Machine.hs 45;" 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 @@ -734,14 +734,13 @@ MapperSF src/Dodge/Data/ComposedItem.hs 39;" C Material src/Dodge/Data/Material.hs 10;" t MaterialSound src/Dodge/Data/SoundOrigin.hs 35;" C Maybe' src/MaybeHelp.hs 11;" t -McDamSensor src/Dodge/Data/Machine.hs 45;" C -McDistributer src/Dodge/Data/Machine.hs 49;" C -McProxSensor src/Dodge/Data/Machine.hs 46;" C -McStatic src/Dodge/Data/Machine.hs 43;" C -McStorage src/Dodge/Data/Machine.hs 48;" C -McTerminal src/Dodge/Data/Machine.hs 44;" C -McTrigger src/Dodge/Data/Machine.hs 50;" C -McTurret src/Dodge/Data/Machine.hs 47;" C +McDamSensor src/Dodge/Data/Machine.hs 47;" C +McDistributer src/Dodge/Data/Machine.hs 51;" C +McProxSensor src/Dodge/Data/Machine.hs 48;" C +McStorage src/Dodge/Data/Machine.hs 50;" C +McTerminal src/Dodge/Data/Machine.hs 46;" C +McTrigger src/Dodge/Data/Machine.hs 52;" C +McTurret src/Dodge/Data/Machine.hs 49;" C MdFlickerUpdate src/Dodge/Data/WorldEffect.hs 53;" C MdSetLSCol src/Dodge/Data/WorldEffect.hs 52;" C MdTrigIf src/Dodge/Data/WorldEffect.hs 51;" C @@ -1387,7 +1386,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 64;" t +Turret src/Dodge/Data/Machine.hs 65;" 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 @@ -1994,17 +1993,18 @@ _mapInvZoom src/Dodge/Data/HUD.hs 19;" f _matUBO src/Data/Preload/Render.hs 42;" f _mbAttach src/Dodge/Data/MetaTree.hs 19;" f _mbTree src/Dodge/Data/MetaTree.hs 19;" f -_mcDamage src/Dodge/Data/Machine.hs 37;" f -_mcDir src/Dodge/Data/Machine.hs 35;" f -_mcHP src/Dodge/Data/Machine.hs 36;" f -_mcID src/Dodge/Data/Machine.hs 31;" f -_mcMaterial src/Dodge/Data/Machine.hs 33;" f -_mcMounts src/Dodge/Data/Machine.hs 39;" f -_mcPos src/Dodge/Data/Machine.hs 34;" f -_mcTriggerID src/Dodge/Data/Machine.hs 50;" f -_mcType src/Dodge/Data/Machine.hs 38;" f -_mcWallIDs src/Dodge/Data/Machine.hs 32;" f -_mcdStorageMachine src/Dodge/Data/Machine.hs 49;" f +_mcDamage src/Dodge/Data/Machine.hs 40;" f +_mcDir src/Dodge/Data/Machine.hs 38;" f +_mcFootPrint src/Dodge/Data/Machine.hs 36;" f +_mcHP src/Dodge/Data/Machine.hs 39;" f +_mcID src/Dodge/Data/Machine.hs 32;" f +_mcMaterial src/Dodge/Data/Machine.hs 34;" f +_mcMounts src/Dodge/Data/Machine.hs 42;" f +_mcPos src/Dodge/Data/Machine.hs 37;" f +_mcSkin src/Dodge/Data/Machine.hs 35;" f +_mcTriggerID src/Dodge/Data/Machine.hs 52;" f +_mcType src/Dodge/Data/Machine.hs 41;" f +_mcdStorageMachine src/Dodge/Data/Machine.hs 51;" 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 @@ -2019,10 +2019,10 @@ _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 -_mcsAmount src/Dodge/Data/Machine.hs 48;" f -_mcsType src/Dodge/Data/Machine.hs 48;" f -_mctTurret src/Dodge/Data/Machine.hs 47;" f -_mctTurretStun src/Dodge/Data/Machine.hs 47;" f +_mcsAmount src/Dodge/Data/Machine.hs 50;" f +_mcsType src/Dodge/Data/Machine.hs 50;" f +_mctTurret src/Dodge/Data/Machine.hs 49;" f +_mctTurretStun src/Dodge/Data/Machine.hs 49;" 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 @@ -2413,10 +2413,10 @@ _trieMVal src/SimpleTrie.hs 11;" f _triggers src/Dodge/Data/LWorld.hs 130;" f _ttDeathEffect src/Dodge/Data/Terminal.hs 44;" f _ttTriggerID src/Dodge/Data/Terminal.hs 43;" f -_tuDir src/Dodge/Data/Machine.hs 68;" f -_tuFireTime src/Dodge/Data/Machine.hs 67;" f -_tuTurnSpeed src/Dodge/Data/Machine.hs 66;" f -_tuWeapon src/Dodge/Data/Machine.hs 65;" f +_tuDir src/Dodge/Data/Machine.hs 69;" f +_tuFireTime src/Dodge/Data/Machine.hs 68;" f +_tuTurnSpeed src/Dodge/Data/Machine.hs 67;" f +_tuWeapon src/Dodge/Data/Machine.hs 66;" 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 @@ -2540,10 +2540,10 @@ addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f addButtonSlowDoor src/Dodge/Room/LongDoor.hs 101;" f addCrGibs src/Dodge/Prop/Gib.hs 17;" f addDepth src/Picture/Base.hs 125;" f -addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 58;" f -addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 77;" f +addDoorAtNthLinkToggleInterrupt src/Dodge/Room/Warning.hs 47;" f +addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 66;" f addDoorToggleTerminal src/Dodge/Room/Warning.hs 41;" f -addDoorToggleTerminal' src/Dodge/Room/Warning.hs 98;" f +addDoorToggleTerminal' src/Dodge/Room/Warning.hs 87;" f addGib4 src/Dodge/Prop/Gib.hs 52;" f addGibAt src/Dodge/Prop/Gib.hs 63;" f addGibAtDir src/Dodge/Prop/Gib.hs 69;" f @@ -2562,7 +2562,6 @@ addLightsNGon src/Dodge/Room/Modify.hs 41;" f addNodesCrossing src/Dodge/Room/Path.hs 28;" f addNodesCrossingCirc src/Dodge/Room/Path.hs 41;" f addPane src/Dodge/Placement/PlaceSpot.hs 174;" f -addPlAtNthLinkToggleLight src/Dodge/Room/Warning.hs 44;" f addPointPolygon src/Geometry/Polygon.hs 142;" f addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f addPolyWalls src/Dodge/LevelGen/StaticWalls.hs 129;" f @@ -2572,7 +2571,7 @@ addSideEffect src/Dodge/Concurrent.hs 29;" f addSouthPillars src/Dodge/Room/LongDoor.hs 92;" f addTermSignal src/Dodge/Event/Input.hs 31;" f addToTrunk src/TreeHelp.hs 157;" f -addWarningTerminal src/Dodge/Room/Warning.hs 109;" f +addWarningTerminal src/Dodge/Room/Warning.hs 98;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f advanceScrollAmount src/Dodge/Update.hs 479;" f @@ -2596,8 +2595,8 @@ ammoMagSPic src/Dodge/Item/Draw/SPic.hs 129;" f amr src/Dodge/Item/Held/Rod.hs 34;" f anRoom src/Dodge/Floor.hs 116;" f analyser src/Dodge/Placement/Instance/Analyser.hs 8;" f -analyserByDoor src/Dodge/Room/LasTurret.hs 128;" f -analyserByNthLink src/Dodge/Room/LasTurret.hs 111;" f +analyserByDoor src/Dodge/Room/LasTurret.hs 126;" f +analyserByNthLink src/Dodge/Room/LasTurret.hs 112;" f andOrRegex src/Dodge/DisplayInventory.hs 78;" f angleBetween src/Geometry.hs 158;" f angleVV src/Geometry/Vector.hs 58;" f @@ -2781,7 +2780,7 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 18;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 593;" f -byNthLink src/Dodge/Room/Warning.hs 55;" f +byNthLink src/Dodge/Room/Warning.hs 44;" f cChasm src/Dodge/Room/Tutorial.hs 135;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f @@ -2800,7 +2799,7 @@ cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 35;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f -cenLasTur src/Dodge/Room/LasTurret.hs 51;" f +cenLasTur src/Dodge/Room/LasTurret.hs 52;" f centerText src/Picture/Base.hs 176;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultRoom src/Dodge/Room/Procedural.hs 270;" f @@ -3087,7 +3086,7 @@ damagePyroelectric src/Dodge/Material/Damage.hs 78;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 13;" f damageStone src/Dodge/Material/Damage.hs 41;" f damageThingHit src/Dodge/Bullet.hs 180;" f -damageTypeThreshold src/Dodge/Machine/Update.hs 129;" f +damageTypeThreshold src/Dodge/Machine/Update.hs 128;" f damageTypeThreshold' src/Dodge/Wall/Damage.hs 85;" f damageWall src/Dodge/Wall/Damage.hs 31;" f damsToExpBarrel src/Dodge/Barreloid.hs 50;" f @@ -3145,7 +3144,7 @@ defaultAutoWall src/Dodge/Default/Wall.hs 32;" f defaultBlock src/Dodge/Default/Block.hs 5;" f defaultBounds src/Dodge/Data/Bounds.hs 18;" f defaultBullet src/Dodge/Item/Weapon/Bullet.hs 10;" f -defaultButton src/Dodge/Default.hs 44;" f +defaultButton src/Dodge/Default.hs 45;" f defaultCWCam src/Dodge/Default/World.hs 73;" f defaultCWGen src/Dodge/Default/World.hs 63;" f defaultCWorld src/Dodge/Default/World.hs 88;" f @@ -3173,7 +3172,7 @@ defaultLWorld src/Dodge/Default/World.hs 106;" f defaultMachine src/Dodge/Default.hs 30;" f defaultMachineWall src/Dodge/Default/Wall.hs 38;" f defaultPerceptionState src/Dodge/Default/Creature.hs 77;" f -defaultProximitySensor src/Dodge/Default.hs 52;" f +defaultProximitySensor src/Dodge/Default.hs 53;" f defaultRoom src/Dodge/Default/Room.hs 9;" f defaultTerminal src/Dodge/Default/Terminal.hs 8;" f defaultVision src/Dodge/Default/Creature.hs 87;" f @@ -3195,7 +3194,7 @@ destroyLSFlashAt src/Dodge/LightSource.hs 44;" f destroyMachine src/Dodge/Machine/Destroy.hs 13;" f destroyMachine' src/Dodge/Wall/Damage.hs 112;" f destroyMatS src/Dodge/Material/Sound.hs 7;" f -destroyMcType src/Dodge/Machine/Destroy.hs 22;" f +destroyMcType src/Dodge/Machine/Destroy.hs 37;" f destroyMount src/Dodge/Wall/Damage.hs 167;" f destroyMounts src/Dodge/Wall/Damage.hs 164;" f destroyProjectile src/Dodge/Projectile/Update.hs 112;" f @@ -3318,7 +3317,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 75;" f +drawBaseMachine src/Dodge/Machine/Draw.hs 74;" f drawBlip src/Dodge/RadarBlip.hs 16;" f drawBlock src/Dodge/Render/ShapePicture.hs 81;" f drawBoundingBox src/Dodge/Debug/Picture.hs 368;" f @@ -3342,7 +3341,7 @@ drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 73;" f drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 137;" f drawDDATest src/Dodge/Debug/Picture.hs 304;" f -drawDamSensor src/Dodge/Machine/Draw.hs 38;" f +drawDamSensor src/Dodge/Machine/Draw.hs 37;" f drawDebug src/Dodge/Debug.hs 253;" f drawDrag src/Dodge/Render/Picture.hs 198;" f drawDragDrop src/Dodge/Render/Picture.hs 227;" f @@ -3428,7 +3427,7 @@ drawText src/Picture/Base.hs 224;" f drawTitle src/Dodge/Render/MenuScreen.hs 49;" f drawTitleBackground src/Dodge/Render/List.hs 60;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f -drawTurret src/Dodge/Machine/Draw.hs 94;" 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 @@ -3748,8 +3747,8 @@ headLampShape src/Dodge/Item/Draw/SPic.hs 423;" f headMap src/Dodge/DoubleTree.hs 118;" f headPQ src/Dodge/Creature/HandPos.hs 159;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 627;" f -healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 108;" f -healthTest src/Dodge/Room/LasTurret.hs 131;" f +healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 109;" f +healthTest src/Dodge/Room/LasTurret.hs 129;" f heightWallPS src/Dodge/Placement/Instance/Wall.hs 24;" f heldAimStance src/Dodge/Item/AimStance.hs 27;" f heldAimZoom src/Dodge/Update/Camera.hs 158;" f @@ -3970,8 +3969,8 @@ justify src/Justify.hs 9;" f k src/ShortShow.hs 48;" f k' src/ShortShow.hs 48;" f keyCard src/Dodge/Item/Held/Utility.hs 20;" f -keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 105;" f -keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 93;" f +keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 106;" f +keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 94;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 439;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f @@ -3983,19 +3982,19 @@ lConnectMulti src/Dodge/Render/Connectors.hs 51;" f lShape src/Dodge/Placement/Instance/LightSource.hs 61;" f lamp src/Dodge/Creature/Lamp.hs 18;" f lampCrSPic src/Dodge/Render/ShapePicture.hs 125;" f -lasCenRunClose' src/Dodge/Room/LasTurret.hs 310;" f -lasCenRunClose1 src/Dodge/Room/LasTurret.hs 399;" f -lasCenRunClose2 src/Dodge/Room/LasTurret.hs 472;" f -lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 364;" f -lasCenSensEdge src/Dodge/Room/LasTurret.hs 166;" f +lasCenRunClose' src/Dodge/Room/LasTurret.hs 308;" f +lasCenRunClose1 src/Dodge/Room/LasTurret.hs 397;" f +lasCenRunClose2 src/Dodge/Room/LasTurret.hs 470;" f +lasCenRunCloseLongCor src/Dodge/Room/LasTurret.hs 362;" f +lasCenSensEdge src/Dodge/Room/LasTurret.hs 164;" f lasGunPic src/Dodge/Item/Draw/SPic.hs 414;" f lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 731;" f -lasRunRand src/Dodge/Room/LasTurret.hs 469;" f -lasRunYinYang src/Dodge/Room/LasTurret.hs 187;" f -lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 250;" f -lasSensorTurretTest src/Dodge/Room/LasTurret.hs 143;" f -lasTunnel src/Dodge/Room/LasTurret.hs 510;" f -lasTunnelRunPast src/Dodge/Room/LasTurret.hs 551;" f +lasRunRand src/Dodge/Room/LasTurret.hs 467;" f +lasRunYinYang src/Dodge/Room/LasTurret.hs 185;" f +lasRunYinYangCenter src/Dodge/Room/LasTurret.hs 248;" f +lasSensorTurretTest src/Dodge/Room/LasTurret.hs 141;" f +lasTunnel src/Dodge/Room/LasTurret.hs 508;" f +lasTunnelRunPast src/Dodge/Room/LasTurret.hs 549;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 35;" f laser src/Dodge/Item/Held/BatteryGuns.hs 27;" f laserSpark src/Dodge/Material/Damage.hs 37;" f @@ -4020,8 +4019,8 @@ legsSPic src/Dodge/Item/Draw/SPic.hs 448;" f lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 86;" f light src/Color.hs 131;" f -lightSensByDoor src/Dodge/Room/LasTurret.hs 77;" f -lightSensInsideDoor src/Dodge/Room/LasTurret.hs 64;" f +lightSensByDoor src/Dodge/Room/LasTurret.hs 78;" f +lightSensInsideDoor src/Dodge/Room/LasTurret.hs 65;" f lightSensor src/Dodge/Placement/Instance/Sensor.hs 33;" f lightsToRender src/Dodge/Render/Lights.hs 12;" f lightx4 src/Color.hs 155;" f @@ -4031,7 +4030,7 @@ lineCol src/Picture/Base.hs 234;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 128;" f -lineOutputTerminal src/Dodge/Room/Warning.hs 114;" f +lineOutputTerminal src/Dodge/Room/Warning.hs 103;" f lineSplit src/Justify.hs 26;" f lineUp src/Dodge/Creature/Boid.hs 150;" f linksDAGToPath src/Dodge/Room/Path.hs 19;" f @@ -4117,26 +4116,28 @@ makeDebrisDirected src/Dodge/Block/Debris.hs 51;" f makeDoorDebris src/Dodge/Block/Debris.hs 26;" f makeDumbSwitch src/Dodge/Room/LongDoor.hs 145;" f makeDustAt src/Dodge/WorldEvent/Cloud.hs 17;" f -makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 68;" f +makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 69;" f makeFlak src/Dodge/Bullet.hs 146;" f makeFlame src/Dodge/Flame.hs 46;" f -makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 55;" f +makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 56;" f makeFlamelet src/Dodge/EnergyBall.hs 21;" f makeFragBullets src/Dodge/Bullet.hs 132;" f makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 11;" f makeIntInterval src/Dodge/Zoning/Base.hs 37;" f +makeMachineDebris src/Dodge/Machine/Destroy.hs 26;" f makeMovingEB src/Dodge/EnergyBall.hs 60;" f makeMuzzleFlare src/Dodge/HeldUse.hs 680;" f makeParagraph src/Justify.hs 6;" f makePathBetween src/Dodge/Path.hs 63;" f makePathBetweenPs src/Dodge/Path.hs 87;" f makePathUsing src/Dodge/Path.hs 51;" f -makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 24;" f +makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 25;" f makeSelectionListPictures src/Dodge/Render/List.hs 67;" f makeShaderProgram src/Shader/Compile.hs 74;" f makeShaderVBO src/Shader/Compile.hs 24;" f makeShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 11;" f makeShrapnelAt src/Dodge/Payload.hs 24;" f +makeSmallExplosionAt src/Dodge/WorldEvent/Explosion.hs 85;" f makeSourcedShader src/Shader/Compile.hs 54;" f makeSpark src/Dodge/Spark.hs 46;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 23;" f @@ -4144,7 +4145,7 @@ makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f makeTermLine src/Dodge/Terminal.hs 109;" f makeTermPara src/Dodge/Terminal.hs 118;" f makeTeslaArc src/Dodge/Tesla.hs 28;" f -makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 39;" f +makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f makeTileFromPoly src/Tile.hs 34;" f makeTypeCraft src/Dodge/Item/Craftable.hs 15;" f makeTypeCraftNum src/Dodge/Item/Craftable.hs 12;" f @@ -4168,25 +4169,25 @@ maybeOpenConsole src/Dodge/Update.hs 133;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f -mcBackgroundSound src/Dodge/Machine/Update.hs 153;" f -mcColor src/Dodge/Machine/Draw.hs 83;" f -mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 117;" f -mcDamSensorUpdate src/Dodge/Machine/Update.hs 164;" f +mcBackgroundSound src/Dodge/Machine/Update.hs 152;" f +mcColor src/Dodge/Machine/Draw.hs 82;" f +mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 116;" f +mcDamSensorUpdate src/Dodge/Machine/Update.hs 162;" f mcDamSensorUpdate' src/Dodge/Wall/Damage.hs 58;" f -mcKillBut src/Dodge/Machine/Destroy.hs 38;" f -mcKillTerm src/Dodge/Machine/Destroy.hs 30;" f -mcNoItemsTest src/Dodge/Machine/Update.hs 172;" f -mcPlaySound src/Dodge/Machine/Update.hs 137;" f -mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 123;" f -mcProxSensorUpdate src/Dodge/Machine/Update.hs 167;" f -mcProxTest src/Dodge/Machine/Update.hs 248;" f -mcProximitySensorUpdate src/Dodge/Machine/Update.hs 209;" f +mcKillBut src/Dodge/Machine/Destroy.hs 53;" f +mcKillTerm src/Dodge/Machine/Destroy.hs 45;" f +mcNoItemsTest src/Dodge/Machine/Update.hs 170;" f +mcPlaySound src/Dodge/Machine/Update.hs 136;" f +mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 122;" f +mcProxSensorUpdate src/Dodge/Machine/Update.hs 165;" f +mcProxTest src/Dodge/Machine/Update.hs 246;" f +mcProximitySensorUpdate src/Dodge/Machine/Update.hs 207;" f mcSPic src/Dodge/Render/ShapePicture.hs 172;" f mcShootAuto src/Dodge/HeldUse.hs 1189;" f mcShootLaser src/Dodge/HeldUse.hs 1181;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f mcUseHeld src/Dodge/HeldUse.hs 1106;" f -mcUseItem src/Dodge/Machine/Update.hs 108;" f +mcUseItem src/Dodge/Machine/Update.hs 107;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f megaTinMag src/Dodge/Item/Ammo.hs 21;" f @@ -4266,7 +4267,7 @@ moveProjectile src/Dodge/Projectile/Update.hs 249;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 228;" f -moveToSideNthOutLink src/Dodge/Room/Warning.hs 117;" f +moveToSideNthOutLink src/Dodge/Room/Warning.hs 106;" f moveWall src/Dodge/Wall/Move.hs 23;" f moveWallID src/Dodge/Wall/Move.hs 18;" f moveWallIDUnsafe src/Dodge/Wall/Move.hs 13;" f @@ -4290,7 +4291,7 @@ mvButton src/Dodge/Placement/PlaceSpot.hs 182;" f mvCr src/Dodge/Placement/PlaceSpot.hs 185;" f mvFS src/Dodge/Placement/PlaceSpot.hs 188;" f mvGust src/Dodge/Update.hs 872;" f -mvLS src/Dodge/Placement/PlaceSpot.hs 235;" f +mvLS src/Dodge/Placement/PlaceSpot.hs 243;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f @@ -4438,7 +4439,7 @@ plNewUsing src/Dodge/Base/NewID.hs 27;" f plPriority src/Dodge/Layout.hs 112;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f placeChasm src/Dodge/Placement/PlaceSpot.hs 158;" f -placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 224;" f +placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 232;" f placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 41;" f placeSpot src/Dodge/Placement/PlaceSpot.hs 33;" f placeSpotID src/Dodge/Placement/PlaceSpot.hs 100;" f @@ -4868,14 +4869,14 @@ selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 785;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 68;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 77;" f -senseDamage src/Dodge/Machine/Update.hs 264;" f +senseDamage src/Dodge/Machine/Update.hs 262;" f senseDamage' src/Dodge/Wall/Damage.hs 61;" f -sensorReqToString src/Dodge/Machine/Update.hs 242;" f +sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f -sensorSPic src/Dodge/Machine/Draw.hs 99;" f +sensorSPic src/Dodge/Machine/Draw.hs 97;" f sensorTut src/Dodge/Room/Tutorial.hs 573;" f -sensorTypeDamages src/Dodge/Machine/Update.hs 288;" f +sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f @@ -5143,7 +5144,7 @@ stopAllSounds src/Sound.hs 127;" f stopBulletAt src/Dodge/Bullet.hs 200;" f stopPushing src/Dodge/Wall/Damage.hs 172;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f -storageShape src/Dodge/Machine/Draw.hs 31;" f +storageShape src/Dodge/Machine/Draw.hs 30;" f storeRoomID src/Dodge/Room/Modify.hs 23;" f strFromEquipment src/Dodge/Creature/Statistics.hs 50;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 64;" f @@ -5203,9 +5204,9 @@ termTextColor src/Dodge/Terminal.hs 52;" f terminalLDP src/Dodge/ListDisplayParams.hs 48;" f terminalReturnEffect src/Dodge/Terminal.hs 279;" f terminalReturnLocal src/Dodge/Terminal.hs 283;" f -terminalSPic src/Dodge/Machine/Draw.hs 47;" f -terminalScreenGlow src/Dodge/Machine/Update.hs 43;" f -terminalShape src/Dodge/Machine/Draw.hs 50;" f +terminalSPic src/Dodge/Machine/Draw.hs 46;" f +terminalScreenGlow src/Dodge/Machine/Update.hs 42;" f +terminalShape src/Dodge/Machine/Draw.hs 49;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 129;" f teslaCoil src/Dodge/Item/Held/BatteryGuns.hs 12;" f teslaGunPic src/Dodge/Item/Draw/SPic.hs 411;" f @@ -5512,7 +5513,7 @@ updateTeslaArc src/Dodge/Update.hs 667;" f updateTeslaArcs src/Dodge/Update.hs 664;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f updateTractorBeams src/Dodge/Update.hs 736;" f -updateTurret src/Dodge/Machine/Update.hs 56;" f +updateTurret src/Dodge/Machine/Update.hs 55;" f updateUniverse src/Dodge/Update.hs 81;" f updateUniverseFirst src/Dodge/Update.hs 92;" f updateUniverseLast src/Dodge/Update.hs 143;" f