From b4bdfbf2c35f35842bc6f954ab9b3c592506b0be Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 7 Jun 2025 10:07:16 +0100 Subject: [PATCH] Simplify sparks --- src/Dodge/Barreloid.hs | 4 +- src/Dodge/Creature/Damage.hs | 3 +- src/Dodge/Data/Machine/Sensor.hs | 3 +- src/Dodge/Data/Spark.hs | 11 ++--- src/Dodge/Machine/Update.hs | 1 - src/Dodge/Material/Damage.hs | 6 +-- src/Dodge/PosEvent.hs | 4 +- src/Dodge/Spark.hs | 65 +++++++++++++++-------------- src/Dodge/Spark/Draw.hs | 13 ++++-- src/Dodge/TestString.hs | 2 +- src/Dodge/Update.hs | 3 +- src/Dodge/Wall/DamageEffect.hs | 18 +++----- tags | 70 +++++++++++++++++--------------- 13 files changed, 101 insertions(+), 102 deletions(-) diff --git a/src/Dodge/Barreloid.hs b/src/Dodge/Barreloid.hs index 8380503a6..c5cd669f2 100644 --- a/src/Dodge/Barreloid.hs +++ b/src/Dodge/Barreloid.hs @@ -25,13 +25,11 @@ updateExpBarrel cr w damages = _csDamage $ _crState cr pierceSparks :: [World -> World] pierceSparks = - zipWith3 + zipWith (\p a -> createBarrelSpark (_crPos cr +.+ p) (a + argV p)) poss as - colids as = randomRs (-0.7, 0.7) g - colids = randomRs (0, 11) g poss = _piercedPoints $ _csSpState $ _crState cr newCr = Just $ applyFuseDamage $ set (crState . csDamage) [] $ damsToExpBarrel damages cr applyFuseDamage cr' = diff --git a/src/Dodge/Creature/Damage.hs b/src/Dodge/Creature/Damage.hs index 513db57e5..ec4d1ed71 100644 --- a/src/Dodge/Creature/Damage.hs +++ b/src/Dodge/Creature/Damage.hs @@ -2,7 +2,6 @@ module Dodge.Creature.Damage where import Dodge.Creature.Material import Dodge.Creature.Mass -import Color import Data.List import Dodge.Creature.Test import Dodge.Data.World @@ -58,7 +57,7 @@ applyIndividualDamage' cr w dm = case _dmType dm of applyPiercingDamage :: Creature -> Damage -> World -> World applyPiercingDamage cr dm - | crIsArmouredFrom p cr = colSpark (brightX 10 1.5 orange) p1 (argV (p1 -.- p)) + | crIsArmouredFrom p cr = makeSpark NormalSpark p1 (argV (p1 -.- p)) | otherwise = damageHP cr $ _dmAmount dm where p = _dmAt dm diff --git a/src/Dodge/Data/Machine/Sensor.hs b/src/Dodge/Data/Machine/Sensor.hs index 4439ed8c3..182085151 100644 --- a/src/Dodge/Data/Machine/Sensor.hs +++ b/src/Dodge/Data/Machine/Sensor.hs @@ -20,8 +20,7 @@ data Sensor = DamageSensor { _sensToggle :: Bool , _sensAmount :: Int - , -- , _sensType :: DamageType - _sensType :: SensorType + , _sensType :: SensorType , _sensDraw :: (PaletteColor, DecorationShape) , _sensThreshold :: Int } diff --git a/src/Dodge/Data/Spark.hs b/src/Dodge/Data/Spark.hs index 43d8bf370..87763b774 100644 --- a/src/Dodge/Data/Spark.hs +++ b/src/Dodge/Data/Spark.hs @@ -5,22 +5,23 @@ module Dodge.Data.Spark where -import Color import Control.Lens import Data.Aeson import Data.Aeson.TH -import Dodge.Data.Damage.Type +--import Dodge.Data.Damage.Type import Geometry.Data data Spark = Spark { _skVel :: Point2 - , _skColor :: Color , _skPos :: Point2 , _skOldPos :: Point2 - , _skWidth :: Float - , _skDamageType :: DamageType + , _skType :: SparkType } deriving (Eq, Ord, Show, Read) --Generic, Flat) +data SparkType = ElectricSpark | FireSpark | NormalSpark + deriving (Eq, Ord, Show, Read) --Generic, Flat) + makeLenses ''Spark +deriveJSON defaultOptions ''SparkType deriveJSON defaultOptions ''Spark diff --git a/src/Dodge/Machine/Update.hs b/src/Dodge/Machine/Update.hs index e6f3c1e09..35042d7c0 100644 --- a/src/Dodge/Machine/Update.hs +++ b/src/Dodge/Machine/Update.hs @@ -152,7 +152,6 @@ mcProxTest mc w = case mc ^? mcType . _McSensor . proxRequirement of where cr = you w ---senseDamage :: Int -> DamageType -> Machine -> World -> World senseDamage :: Int -> SensorType -> Machine -> World -> World senseDamage threshold dt mc = (cWorld . lWorld . machines . ix mcid %~ upmc) diff --git a/src/Dodge/Material/Damage.hs b/src/Dodge/Material/Damage.hs index b176cffc5..1ec1bff7f 100644 --- a/src/Dodge/Material/Damage.hs +++ b/src/Dodge/Material/Damage.hs @@ -19,8 +19,8 @@ defDamageMaterial dm _ w = (_dmAmount dm, w) damageStone :: Damage -> Float -> World -> (Int, World) damageStone dm dir = case _dmType dm of - LASERING -> a 0 $ colSparkRandDir 0.2 lSparkCol outTo (argV $ reflectIn (p -.- sp) v) - PIERCING -> a d $ colSparkRandDir 0.2 pSparkCol outTo (argV $ reflectIn (p -.- sp) v) + LASERING -> a 0 $ makeSpark NormalSpark outTo (argV $ reflectIn (p -.- sp) v) + PIERCING -> a d $ makeSpark FireSpark outTo (argV $ reflectIn (p -.- sp) v) BLUNT -> a d id SHATTERING -> a d id CRUSHING -> a d id @@ -39,8 +39,6 @@ damageStone dm dir = case _dmType dm of sp = _dmFrom dm p = _dmAt dm outTo = p +.+ squashNormalizeV (sp -.- p) - pSparkCol = V4 5 1 0.5 2 - lSparkCol = V4 20 (-5) 0 1 --damageGlass :: Damage -> Float -> World -> (World,Int) --damageGlass dm dir w = w & case _dmType dm of diff --git a/src/Dodge/PosEvent.hs b/src/Dodge/PosEvent.hs index e25c9c5f9..049826e9a 100644 --- a/src/Dodge/PosEvent.hs +++ b/src/Dodge/PosEvent.hs @@ -1,6 +1,5 @@ module Dodge.PosEvent where -import Color import Control.Monad.State import Dodge.Data.World import Dodge.Spark @@ -18,8 +17,7 @@ posEventEffect pv = case _pvType pv of SparkSpawner -> spawnElectricalSparks (_pvPos pv) spawnElectricalSparks :: Point2 -> World -> World -spawnElectricalSparks = randSpark ELECTRICAL rspeed rcol rdir +spawnElectricalSparks = randSpark ElectricSpark rspeed rdir where rspeed = state (randomR (3, 6)) - rcol = brightX 100 1.5 <$> takeOne [white, azure, blue, cyan] rdir = state $ randomR (0, 2 * pi) diff --git a/src/Dodge/Spark.hs b/src/Dodge/Spark.hs index 1b3c03802..f3761ae0d 100644 --- a/src/Dodge/Spark.hs +++ b/src/Dodge/Spark.hs @@ -1,14 +1,13 @@ module Dodge.Spark ( updateSpark, - colSpark, - colSparkRandDir, + sparkRandDir, createBarrelSpark, - randColDirSpark, + randDirSpark, randSpark, + makeSpark, ) where import Dodge.Damage -import Color import Control.Monad.State import Dodge.Data.World import Dodge.WorldEvent.ThingsHit @@ -16,6 +15,7 @@ import Geometry import LensHelp import System.Random + updateSpark :: World -> Spark -> (World, Maybe Spark) updateSpark w sk | magV (_skVel sk) < 1 = (w, Nothing) @@ -40,68 +40,71 @@ sparkDam' :: sparkDam' sk sp ep mayEiCrWl = case mayEiCrWl of (hitp, eicrwl) -> damageCrWl (thedam hitp) eicrwl where - thedam hitp = Damage (_skDamageType sk) 1 sp hitp ep NoDamageEffect + thedam hitp = Damage (sparkToDamage sk) 10 sp hitp ep NoDamageEffect -createBarrelSpark :: Point2 -> Float -> Int -> World -> World -createBarrelSpark pos dir colid = colSparkRandDir 0.1 (numColor colid) pos dir +sparkToDamage :: Spark -> DamageType +sparkToDamage sp = case _skType sp of + ElectricSpark ->ELECTRICAL + FireSpark -> FLAMING + NormalSpark -> SPARKING -colSpark :: Color -> Point2 -> Float -> World -> World -colSpark = colSparkRandDir 0.7 +createBarrelSpark :: Point2 -> Float -> World -> World +createBarrelSpark pos dir = sparkRandDir 0.1 pos dir -randColDirSpark :: - State StdGen Color -> +makeSpark :: SparkType -> Point2 -> Float -> World -> World +makeSpark st p d = cWorld . lWorld . sparks + .:~ Spark + { _skVel = rotateV d (V2 5 0) + , _skPos = p + , _skOldPos = p + , _skType = st + } + +randDirSpark :: State StdGen Float -> Point2 -> World -> World -randColDirSpark randcol randdir pos w = +randDirSpark randdir pos w = w & randGen .~ g & cWorld . lWorld . sparks .:~ Spark { _skVel = rotateV dir (V2 5 0) - , _skColor = col , _skPos = pos , _skOldPos = pos - , _skWidth = 1 - , _skDamageType = SPARKING + , _skType = NormalSpark } where - ((col, dir), g) = (`runState` _randGen w) $ do - c <- randcol + (dir, g) = (`runState` _randGen w) $ do d <- randdir - return (c, d) + return d randSpark :: - DamageType -> + SparkType -> State StdGen Float -> - State StdGen Color -> State StdGen Float -> Point2 -> World -> World -randSpark dt randspeed randcol randdir pos w = +randSpark dt randspeed randdir pos w = w & randGen .~ g & cWorld . lWorld . sparks .:~ Spark { _skVel = rotateV dir (V2 speed 0) - , _skColor = col , _skPos = pos , _skOldPos = pos - , _skWidth = 1 - , _skDamageType = dt + , _skType = dt } where - ((col, dir, speed), g) = (`runState` _randGen w) $ do - c <- randcol + ((dir, speed), g) = (`runState` _randGen w) $ do d <- randdir x <- randspeed - return (c, d, x) + return (d, x) -colSparkRandDir :: Float -> Color -> Point2 -> Float -> World -> World -colSparkRandDir a col pos dir = - randColDirSpark - (return col) +sparkRandDir :: Float -> Point2 -> Float -> World -> World +sparkRandDir a pos dir = + randDirSpark (state $ randomR (dir - a, dir + a)) pos diff --git a/src/Dodge/Spark/Draw.hs b/src/Dodge/Spark/Draw.hs index def708d75..223b7cc33 100644 --- a/src/Dodge/Spark/Draw.hs +++ b/src/Dodge/Spark/Draw.hs @@ -1,11 +1,18 @@ -module Dodge.Spark.Draw where +module Dodge.Spark.Draw (drawSpark) where import Dodge.Data.Spark import Picture +import Linear drawSpark :: Spark -> Picture drawSpark pt = setLayer BloomNoZWrite . setDepth 20 - . color (_skColor pt) - $ thickLine (_skWidth pt) [_skOldPos pt, _skPos pt] + . color (skColor pt) + $ thickLine 3 [_skOldPos pt, _skPos pt, _skPos pt + _skVel pt] + +skColor :: Spark -> Color +skColor sk = case _skType sk of + ElectricSpark -> brightX 100 1.5 cyan + FireSpark -> V4 20 (-5) 0 1 + NormalSpark -> V4 2 1.5 0.5 2 diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 8e2a48dc4..85a196794 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -26,7 +26,7 @@ import qualified IntMapHelp as IM import qualified Data.Map.Strict as M testStringInit :: Universe -> [String] -testStringInit u = [show $ u ^. uvWorld . unpauseClock] +testStringInit _ = [] -- foldMap prettyShort $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crTwist -- prettyShort $ u ^.. uvWorld . cWorld . lWorld . teslaArcs . ix 0 . taArcSteps . each . asObject --testStringInit u = foldMap prettyShort $ u ^. uvWorld . cWorld . lWorld . projectiles diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 7faa871df..a7cbcc6fe 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -559,9 +559,8 @@ updateTeslaArc w pt thearc = _taArcSteps pt makeaspark = randSpark - ELECTRICAL + ElectricSpark (state (randomR (3, 6))) - (brightX 100 1.5 <$> takeOne [white, azure, blue, cyan]) rdir lp makesparks = makeaspark . makeaspark . makeaspark diff --git a/src/Dodge/Wall/DamageEffect.hs b/src/Dodge/Wall/DamageEffect.hs index 3476dfc95..5b95037d8 100644 --- a/src/Dodge/Wall/DamageEffect.hs +++ b/src/Dodge/Wall/DamageEffect.hs @@ -23,8 +23,8 @@ damageWallEffect dm wl = case _wlMaterial wl of stoneWallDamage :: Damage -> Wall -> World -> (World, Damage) stoneWallDamage dm wl = case _dmType dm of - LASERING -> a 0 $ colSparkRandDir 0.2 lSparkCol outTo (reflDirWall sp p wl) - PIERCING -> a d $ colSparkRandDir 0.2 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo + PIERCING -> a d $ makeSpark NormalSpark outTo (reflDirWall sp p wl) . wlDustAt wl outTo + LASERING -> a 0 $ makeSpark FireSpark outTo (reflDirWall sp p wl) BLUNT -> a d $ wlDustAt wl outTo SHATTERING -> a d $ muchWlDustAt wl outTo CRUSHING -> a d id @@ -42,14 +42,12 @@ stoneWallDamage dm wl = case _dmType dm of sp = _dmFrom dm p = _dmAt dm outTo = p +.+ squashNormalizeV (sp -.- p) - pSparkCol = V4 5 1 0.5 2 - lSparkCol = V4 20 (-5) 0 1 glassWallDamage :: Damage -> Wall -> World -> (World, Damage) glassWallDamage dm wl w = w & case _dmType dm of - LASERING -> a 0 $ colSparkRandDir 0.2 lSparkCol outTo (reflDirWall sp p wl) - PIERCING -> a d $ dosplint . colSparkRandDir 0.2 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo + LASERING -> a 0 $ makeSpark FireSpark outTo (reflDirWall sp p wl) + PIERCING -> a d $ dosplint . makeSpark NormalSpark outTo (reflDirWall sp p wl) . wlDustAt wl outTo BLUNT -> a d $ dosplint . wlDustAt wl outTo SHATTERING -> a d $ dosplint . muchWlDustAt wl outTo CRUSHING -> a d dosplint @@ -73,13 +71,11 @@ glassWallDamage dm wl w = sp = _dmFrom dm p = _dmAt dm outTo = p +.+ squashNormalizeV (sp -.- p) - pSparkCol = V4 5 1 0.5 2 - lSparkCol = V4 20 (-5) 0 1 crystalWallDamage :: Damage -> Wall -> World -> (World, Damage) crystalWallDamage dm wl = case _dmType dm of - LASERING -> a 0 $ colSparkRandDir 0.2 lSparkCol outTo (reflDirWall sp p wl) - PIERCING -> a 0 $ colSparkRandDir 0.2 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo + LASERING -> a 0 $ makeSpark FireSpark outTo (reflDirWall sp p wl) + PIERCING -> a 0 $ makeSpark NormalSpark outTo (reflDirWall sp p wl)-- . wlDustAt wl outTo BLUNT -> a 0 $ wlDustAt wl outTo SHATTERING -> a d $ muchWlDustAt wl outTo CRUSHING -> a 0 id @@ -97,8 +93,6 @@ crystalWallDamage dm wl = case _dmType dm of sp = _dmFrom dm p = _dmAt dm outTo = p +.+ squashNormalizeV (sp -.- p) - pSparkCol = V4 5 1 0.5 2 - lSparkCol = V4 20 (-5) 0 1 dirtWallDamage :: Damage -> Wall -> World -> (World, Damage) dirtWallDamage dm wl = case _dmType dm of diff --git a/tags b/tags index faf393dea..dcf684319 100644 --- a/tags +++ b/tags @@ -314,7 +314,7 @@ Cleat src/Dodge/Cleat.hs 2;" m Climate src/Dodge/Data/Scenario.hs 32;" C Clock src/Dodge/Clock.hs 1;" m CloseToMelee src/Dodge/Data/ActionPlan.hs 187;" C -CloseToggle src/Dodge/Data/Machine/Sensor.hs 46;" t +CloseToggle src/Dodge/Data/Machine/Sensor.hs 44;" t Close_shape_culling src/Dodge/Data/Config.hs 79;" C Cloud src/Dodge/Data/Cloud.hs 18;" t Cloud src/Dodge/Cloud.hs 1;" m @@ -472,7 +472,7 @@ DamageCircle src/Dodge/DamageCircle.hs 1;" m DamageEffect src/Dodge/Data/Damage.hs 21;" t DamageEffect src/Dodge/Wall/DamageEffect.hs 1;" m DamageLaser src/Dodge/Data/Laser.hs 17;" C -DamageSensor src/Dodge/Data/Machine/Sensor.hs 21;" C +DamageSensor src/Dodge/Data/Machine/Sensor.hs 20;" C DamageType src/Dodge/Data/Damage/Type.hs 11;" t Data src/Color/Data.hs 7;" m Data src/Dodge/Annotation/Data.hs 4;" m @@ -619,6 +619,7 @@ EffectWhileRoot src/Dodge/Data/Item/Effect.hs 28;" C EighthRes src/Dodge/Data/Config.hs 97;" C Eldritch src/Dodge/Data/Scenario.hs 34;" C ElectricSensor src/Dodge/Data/Machine/Sensor/Type.hs 12;" C +ElectricSpark src/Dodge/Data/Spark.hs 25;" C ElectricalAmmo src/Dodge/Data/AmmoType.hs 9;" C Electronics src/Dodge/Data/Material.hs 11;" C EllShad src/Picture/Data.hs 39;" C @@ -677,6 +678,7 @@ Faction src/Dodge/Data/Creature/State.hs 27;" t Factory src/Dodge/Data/Scenario.hs 56;" C FailedResource src/Dodge/Data/Scenario.hs 37;" t FetchItem src/Dodge/Data/Scenario.hs 11;" C +FireSpark src/Dodge/Data/Spark.hs 25;" C Fixated src/Dodge/Data/Creature/Perception.hs 62;" C FixedCoordLayer src/Picture/Data.hs 28;" C FixedRate src/Dodge/Data/Item/HeldDelay.hs 15;" C @@ -936,7 +938,7 @@ InventorySound src/Dodge/Data/SoundOrigin.hs 13;" C Investigate src/Dodge/Data/ActionPlan.hs 184;" C Invisible src/Dodge/Data/CamouflageStatus.hs 7;" C InwardShockwave src/Dodge/Data/Shockwave.hs 14;" C -IsClose src/Dodge/Data/Machine/Sensor.hs 46;" C +IsClose src/Dodge/Data/Machine/Sensor.hs 44;" C IsolationUnitSS src/Dodge/Data/Scenario.hs 101;" C ItAmount src/Dodge/Data/Item/Use/Consumption.hs 38;" t ItCrWdItemHeldEffect src/Dodge/Data/WorldEffect.hs 17;" C @@ -1316,12 +1318,13 @@ NodeTree src/Dodge/Data/MetaTree.hs 13;" C NodeTree src/Dodge/Tree/Compose/Data.hs 9;" C NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 84;" C NormalOptions src/Dodge/Data/Universe.hs 72;" C +NormalSpark src/Dodge/Data/Spark.hs 25;" C NormalTimeFlow src/Dodge/Data/World.hs 60;" C North src/Dodge/Data/CardinalPoint.hs 4;" C North8 src/Dodge/Data/CardinalPoint.hs 11;" C NorthEast8 src/Dodge/Data/CardinalPoint.hs 12;" C NorthWest8 src/Dodge/Data/CardinalPoint.hs 18;" C -NotClose src/Dodge/Data/Machine/Sensor.hs 46;" C +NotClose src/Dodge/Data/Machine/Sensor.hs 44;" C NotLink src/Dodge/Data/Room.hs 66;" C NotPushed src/Dodge/Data/Door.hs 30;" C Nothing' src/MaybeHelp.hs 13;" C @@ -1545,8 +1548,8 @@ PropUpdateWhen src/Dodge/Data/Prop.hs 65;" C PropUpdates src/Dodge/Data/Prop.hs 62;" C PropVerticalLampCover src/Dodge/Data/Prop.hs 49;" C PropZ src/Dodge/Data/Prop.hs 19;" C -ProximityRequirement src/Dodge/Data/Machine/Sensor.hs 38;" t -ProximitySensor src/Dodge/Data/Machine/Sensor.hs 29;" C +ProximityRequirement src/Dodge/Data/Machine/Sensor.hs 36;" t +ProximitySensor src/Dodge/Data/Machine/Sensor.hs 27;" C Pulse src/Dodge/Data/Creature/Misc.hs 54;" t PulseStatus src/Dodge/Data/Creature/Misc.hs 54;" C PushBackDamage src/Dodge/Data/Damage.hs 28;" C @@ -1639,9 +1642,9 @@ Render src/Preload/Render.hs 3;" m Render src/Render.hs 1;" m RenderData src/Data/Preload/Render.hs 13;" t ReplaceEquipment src/Dodge/Data/RightButtonOptions.hs 32;" C -RequireEquipment src/Dodge/Data/Machine/Sensor.hs 40;" C -RequireHealth src/Dodge/Data/Machine/Sensor.hs 39;" C -RequireImpossible src/Dodge/Data/Machine/Sensor.hs 41;" C +RequireEquipment src/Dodge/Data/Machine/Sensor.hs 38;" C +RequireHealth src/Dodge/Data/Machine/Sensor.hs 37;" C +RequireImpossible src/Dodge/Data/Machine/Sensor.hs 39;" C ResFactor src/Dodge/Data/Config.hs 97;" t ResearchFacility src/Dodge/Data/Scenario.hs 62;" C ResourceFailure src/Dodge/Data/Scenario.hs 29;" C @@ -1747,7 +1750,7 @@ SelectionSections src/Dodge/SelectionSections.hs 1;" m SelectionWidth src/Dodge/Data/SelectionList.hs 39;" t SelfTree src/Dodge/Data/MetaTree.hs 18;" t SelfTree src/Dodge/Tree/Compose/Data.hs 12;" t -Sensor src/Dodge/Data/Machine/Sensor.hs 20;" t +Sensor src/Dodge/Data/Machine/Sensor.hs 19;" t Sensor src/Dodge/Data/Machine/Sensor.hs 6;" m Sensor src/Dodge/Placement/Instance/Sensor.hs 1;" m SensorDoor src/Dodge/Room/SensorDoor.hs 2;" m @@ -1847,6 +1850,7 @@ Spark src/Dodge/Data/Spark.hs 15;" t Spark src/Dodge/Data/Spark.hs 6;" m Spark src/Dodge/Spark.hs 1;" m SparkSpawner src/Dodge/Data/PosEvent.hs 13;" C +SparkType src/Dodge/Data/Spark.hs 25;" t Spatial src/Dodge/Data/Scenario.hs 73;" C SpatialInfluence src/Dodge/Data/Scenario.hs 81;" t Spawn src/Dodge/Item/Weapon/Spawn.hs 1;" m @@ -2914,11 +2918,11 @@ _pressPlates src/Dodge/Data/LWorld.hs 135;" f _pressedKeys src/Dodge/Data/Input.hs 48;" f _projectiles src/Dodge/Data/LWorld.hs 106;" f _props src/Dodge/Data/LWorld.hs 105;" f -_proxDist src/Dodge/Data/Machine/Sensor.hs 31;" f -_proxReqEquipment src/Dodge/Data/Machine/Sensor.hs 40;" f -_proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 39;" f -_proxRequirement src/Dodge/Data/Machine/Sensor.hs 32;" f -_proxStatus src/Dodge/Data/Machine/Sensor.hs 30;" f +_proxDist src/Dodge/Data/Machine/Sensor.hs 29;" f +_proxReqEquipment src/Dodge/Data/Machine/Sensor.hs 38;" f +_proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 37;" f +_proxRequirement src/Dodge/Data/Machine/Sensor.hs 30;" f +_proxStatus src/Dodge/Data/Machine/Sensor.hs 28;" f _psFallback src/Dodge/Data/GenWorld.hs 67;" f _psPos src/Dodge/Data/GenWorld.hs 62;" f _psRandShift src/Dodge/Data/GenWorld.hs 71;" f @@ -3034,12 +3038,12 @@ _scurPos src/Dodge/Data/SelectionList.hs 24;" f _scurSize src/Dodge/Data/SelectionList.hs 25;" f _seenLocations src/Dodge/Data/LWorld.hs 141;" f _selLocation src/Dodge/Data/LWorld.hs 142;" f -_sensAmount src/Dodge/Data/Machine/Sensor.hs 23;" f -_sensDraw src/Dodge/Data/Machine/Sensor.hs 26;" f -_sensThreshold src/Dodge/Data/Machine/Sensor.hs 27;" f -_sensToggle src/Dodge/Data/Machine/Sensor.hs 22;" f -_sensToggle src/Dodge/Data/Machine/Sensor.hs 33;" f -_sensType src/Dodge/Data/Machine/Sensor.hs 25;" f +_sensAmount src/Dodge/Data/Machine/Sensor.hs 22;" f +_sensDraw src/Dodge/Data/Machine/Sensor.hs 24;" f +_sensThreshold src/Dodge/Data/Machine/Sensor.hs 25;" f +_sensToggle src/Dodge/Data/Machine/Sensor.hs 21;" f +_sensToggle src/Dodge/Data/Machine/Sensor.hs 31;" f +_sensType src/Dodge/Data/Machine/Sensor.hs 23;" f _sensorCoding src/Dodge/Data/GenParams.hs 16;" f _sentinelDir src/Dodge/Data/ActionPlan.hs 199;" f _sentinelPos src/Dodge/Data/ActionPlan.hs 199;" f @@ -3073,12 +3077,10 @@ _siWidth src/Dodge/Data/SelectionList.hs 56;" f _sideEffect src/Loop/Data.hs 13;" f _sideImpulses src/Dodge/Data/ActionPlan.hs 170;" f _silhouetteEBO src/Data/Preload/Render.hs 27;" f -_skColor src/Dodge/Data/Spark.hs 17;" f -_skDamageType src/Dodge/Data/Spark.hs 21;" f _skOldPos src/Dodge/Data/Spark.hs 19;" f _skPos src/Dodge/Data/Spark.hs 18;" f +_skType src/Dodge/Data/Spark.hs 21;" f _skVel src/Dodge/Data/Spark.hs 16;" f -_skWidth src/Dodge/Data/Spark.hs 20;" f _skinHead src/Dodge/Data/Creature/Misc.hs 78;" f _skinLower src/Dodge/Data/Creature/Misc.hs 80;" f _skinUpper src/Dodge/Data/Creature/Misc.hs 79;" f @@ -3673,8 +3675,6 @@ clusterFunc src/Dodge/Combine/Graph.hs 119;" f cogRaised src/Dodge/Creature/Perception.hs 102;" f colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 18;" f -colSpark src/Dodge/Spark.hs 48;" f -colSparkRandDir src/Dodge/Spark.hs 102;" f collectDamageTypes src/Dodge/Damage.hs 32;" f collectInvItems src/Dodge/Update/Input/InGame.hs 298;" f collideCircWalls src/Dodge/Base/Collide.hs 159;" f @@ -3778,7 +3778,7 @@ craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 57;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 446;" f createArc src/Dodge/Tesla/Arc.hs 81;" f -createBarrelSpark src/Dodge/Spark.hs 45;" f +createBarrelSpark src/Dodge/Spark.hs 52;" f createFlIt src/Dodge/Placement/PlaceSpot.hs 180;" f createForceField src/Dodge/ForceField.hs 7;" f createGas src/Dodge/Gas.hs 8;" f @@ -4942,6 +4942,7 @@ makeShaderVBO src/Shader/Compile.hs 32;" f makeShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 12;" f makeShrapnelAt src/Dodge/Payload.hs 24;" f makeSourcedShader src/Shader/Compile.hs 167;" f +makeSpark src/Dodge/Spark.hs 55;" f makeStartCloudAt src/Dodge/WorldEvent/Cloud.hs 60;" f makeStaticBall src/Dodge/WorldEvent/SpawnParticle.hs 22;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 19;" f @@ -5434,8 +5435,8 @@ radBounds src/Dodge/Room/Foreground.hs 154;" f radToDeg src/Geometry/Vector.hs 122;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f -randColDirSpark src/Dodge/Spark.hs 51;" f randDirPS src/Dodge/PlacementSpot.hs 56;" f +randDirSpark src/Dodge/Spark.hs 64;" f randEdgeTank src/Dodge/Room/Tanks.hs 33;" f randEdgeTanks src/Dodge/Room/Tanks.hs 63;" f randEnergyBallAt src/Dodge/WorldEvent/SpawnParticle.hs 14;" f @@ -5452,7 +5453,7 @@ randOnUnitSphere src/RandomHelp.hs 90;" f randPeaked src/RandomHelp.hs 138;" f randPeakedParam src/RandomHelp.hs 130;" f randProb src/RandomHelp.hs 68;" f -randSpark src/Dodge/Spark.hs 75;" f +randSpark src/Dodge/Spark.hs 84;" f randWallReflect src/Dodge/Tesla/Arc.hs 57;" f randWallReflect src/Dodge/Update.hs 584;" f randomChallenges src/Dodge/Room/Start.hs 62;" f @@ -5678,13 +5679,13 @@ selectUse src/Dodge/SelectUse.hs 11;" f selectedItemScroll src/Dodge/Update/Scroll.hs 46;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f -senseDamage src/Dodge/Machine/Update.hs 156;" f +senseDamage src/Dodge/Machine/Update.hs 155;" f sensorCommand src/Dodge/Terminal.hs 208;" f sensorInfoMap src/Dodge/Terminal.hs 180;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 48;" f sensorSPic src/Dodge/Machine/Draw.hs 70;" f -sensorTypeDamages src/Dodge/Machine/Update.hs 174;" f +sensorTypeDamages src/Dodge/Machine/Update.hs 173;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f @@ -5824,6 +5825,7 @@ singleLDT src/Dodge/DoubleTree.hs 12;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 19;" f sizeFBOs src/Framebuffer/Update.hs 22;" f +skColor src/Dodge/Spark/Draw.hs 13;" f skwareFadeTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 390;" f slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 514;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 456;" f @@ -5870,8 +5872,10 @@ spanColLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 175;" f spanLSLightI src/Dodge/Placement/Instance/LightSource.hs 168;" f spanLightI src/Dodge/Placement/Instance/LightSource.hs 197;" f -sparkDam' src/Dodge/Spark.hs 33;" f +sparkDam' src/Dodge/Spark.hs 34;" f sparkGun src/Dodge/Item/Held/BatteryGuns.hs 13;" f +sparkRandDir src/Dodge/Spark.hs 107;" f +sparkToDamage src/Dodge/Spark.hs 46;" f spawnCrNextTo src/Dodge/Item/Weapon/Spawn.hs 20;" f spawnElectricalSparks src/Dodge/PosEvent.hs 20;" f spawnGun src/Dodge/Item/Weapon/Spawn.hs 12;" f @@ -6282,7 +6286,7 @@ updateShockwaves src/Dodge/Update.hs 596;" f updateSingleNodes src/TreeHelp.hs 97;" f updateSound src/Sound.hs 72;" f updateSounds src/Sound.hs 67;" f -updateSpark src/Dodge/Spark.hs 19;" f +updateSpark src/Dodge/Spark.hs 20;" f updateSparks src/Dodge/Update.hs 608;" f updateTempLightSource src/Dodge/LightSource/Update.hs 7;" f updateTeslaArc src/Dodge/Tesla/Arc.hs 23;" f