Cleanup tesla arcs

This commit is contained in:
2024-12-22 15:36:28 +00:00
parent 632deb7486
commit e2e1e23881
12 changed files with 191 additions and 221 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ data ItemParams
| FlatShieldParams
{_flatShieldWlMIX :: Maybe Int}
| Arcing
{ _currentArc :: Maybe [ArcStep]
{ _currentArc :: [ArcStep]
, _arcSize :: Float
, _arcNumber :: Int
, _newArcStep :: NextArcStep --ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep)
+2 -2
View File
@@ -18,7 +18,7 @@ module Dodge.Draw (
module Dodge.RadarSweep.Draw,
module Dodge.Spark.Draw,
module Dodge.Targeting.Draw,
module Dodge.Tesla.Arc.Draw,
module Dodge.Tesla.Draw,
module Dodge.TractorBeam.Draw,
module Dodge.Shockwave.Draw,
) where
@@ -40,5 +40,5 @@ import Dodge.RadarSweep.Draw
import Dodge.Shockwave.Draw
import Dodge.Spark.Draw
import Dodge.Targeting.Draw
import Dodge.Tesla.Arc.Draw
import Dodge.Tesla.Draw
import Dodge.TractorBeam.Draw
+1 -1
View File
@@ -24,7 +24,7 @@ import Dodge.Item.Weapon.Shatter
import Dodge.Projectile.Create
import Dodge.RadarSweep
import Dodge.SoundLogic
import Dodge.Tesla.Arc
import Dodge.Tesla
import Geometry
import LensHelp
import ListHelp
+11 -1
View File
@@ -5,11 +5,11 @@ module Dodge.Item.Held.BatteryGuns
, tractorGun
) where
import Dodge.Data.ArcStep
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Default.Item
import Control.Lens
import Dodge.Data.Item
import Dodge.Tesla.ItemParams
import Geometry.Data
sparkGun :: Item
@@ -34,6 +34,16 @@ teslaGun =
& itAmmoSlots .~ singleAmmo ElectricalAmmo
& itUse . heldTriggerType .~ AutoTrigger
teslaParams :: ItemParams
teslaParams =
Arcing
{ _currentArc = []
, _arcSize = 20
, _arcNumber = 10
, _newArcStep = DefaultArcStep --defaultArcStep
, _previousArcEffect = NoPreviousArcEffect
}
-- previous phaseV parameters: 0.2, 1, 5
laser :: Item
laser =
+1
View File
@@ -133,3 +133,4 @@ mcSPic :: LWorld -> Machine -> SPic
mcSPic lw mc =
uncurryV translateSPxy (_mcPos mc) $
rotateSP (_mcDir mc) (drawMachine lw mc)
+161 -8
View File
@@ -1,9 +1,162 @@
module Dodge.Tesla
( module Dodge.Tesla.Ball
, module Dodge.Tesla.Arc
, module Dodge.Tesla.ItemParams
) where
import Dodge.Tesla.Ball
import Dodge.Tesla.Arc
import Dodge.Tesla.ItemParams
module Dodge.Tesla (
makeTeslaArc,
updateTeslaArc,
) where
import Data.Foldable
import Data.List (sortOn)
import Data.Maybe
import Dodge.Base.Collide
import Dodge.Damage
import Dodge.Data.ArcStep
import Dodge.Data.CrWlID
import Dodge.Data.World
import Dodge.Spark
import Geometry
import qualified IntMapHelp as IM
import LensHelp
import MonadHelp
import Picture
import RandomHelp
import Shape
updateTeslaArc ::
World ->
TeslaArc ->
(World, Maybe TeslaArc)
updateTeslaArc w pt
| _taTimer pt == 2 =
( makesparks $ foldl' (flip damthings) w thearc
, Just $ pt & taTimer -~ 1
)
| _taTimer pt < 0 = (w, Nothing)
| otherwise = (w, Just $ pt & taTimer -~ 1)
where
thearc = _taArcSteps pt
rcol = brightX 100 1.5 <$> takeOne [white, azure, blue, cyan]
rspeed = state (randomR (3, 6))
makeaspark = randSpark ELECTRICAL rspeed rcol rdir lp
makesparks = makeaspark . makeaspark . makeaspark
rp x = randPeakedParam 2 (x - 0.7) x (x + 0.7)
(lp, rdir) = case last thearc of
ArcStep lp' ld' NothingID -> (lp', rp ld')
ArcStep lp' ld' (CrID crid) -> case w ^? cWorld . lWorld . creatures . ix crid of
Nothing -> (lp', rp ld')
Just cr -> (lp' -.- (_crRad cr + 1) *.* unitVectorAtAngle ld', rp $ ld' + pi)
ArcStep lp' ld' (WlID wlid) -> case w ^? cWorld . lWorld . walls . ix wlid of
Nothing -> (lp', rp ld')
Just wl ->
( lp' -.- 2 *.* unitVectorAtAngle ld'
, randWallReflect ld' wl
)
damthings (ArcStep p dir crwl) = damageCrWlID (thedamage p dir) crwl
thedamage p dir = Damage ELECTRICAL 50 (p -.- q) p (p +.+ q) NoDamageEffect
where
q = 5 *.* unitVectorAtAngle dir
randWallReflect :: RandomGen g => Float -> Wall -> State g Float
randWallReflect a wl = do
let (x, y) = _wlLine wl
outa = reflectAngle a x y
a1 = nearestAngleRep outa $ argV (x - y)
a2 = if a1 < outa then a1 + pi else a1 - pi
randPeaked a1 outa a2
makeTeslaArc :: ItemParams -> Point2 -> Float -> World -> (World, ItemParams)
makeTeslaArc ip pos dir w =
( w & randGen .~ g
& cWorld . lWorld . teslaArcs
.:~ TeslaArc
{ _taPoints = map (^. asPos) newarc
, _taArcSteps = newarc
, _taTimer = 2
, _taColor = brightX 100 1.5 col
}
, ip & currentArc .~ newarc
)
where
(col, g) = takeOne [white, azure, blue, cyan] & runState $ _randGen w
newarc = updateArc ip w pos dir & evalState $ _randGen w
createNewArc ::
ItemParams ->
World ->
Point2 ->
Float ->
State StdGen [ArcStep]
createNewArc arcparams w p dir =
take (_arcNumber arcparams)
<$> unfoldrMID (doArcStep (_newArcStep arcparams) arcparams w) (ArcStep p dir NothingID)
updateArc ::
ItemParams ->
World ->
Point2 ->
Float ->
State StdGen [ArcStep]
updateArc ip w p dir = take (_arcNumber ip) <$> zipArcs ip w (ArcStep p dir NothingID) carc
where
carc = case _currentArc ip of
(_:xs) -> xs
[] -> [] -- tail $ _currentArc ip
zipArcs ::
ItemParams ->
World ->
ArcStep ->
[ArcStep] ->
State StdGen [ArcStep]
zipArcs ip w x (y : ys) =
(x :) <$> do
defaultnext <- doArcStep (_newArcStep ip) ip w x
case defaultnext of
Nothing -> return []
Just z@(ArcStep _ _ (CrID _)) -> return [z]
Just z@(ArcStep _ _ (WlID _)) -> return [z]
Just z -> do
p <- randInCirc 5
let csize = _arcSize ip
center = _asPos x +.+ csize *.* unitVectorAtAngle (_asDir x)
newp = _asPos y +.+ p
--newdir = argV $ newp -.- _asPos x
newdir = _asDir x
if dist newp center < csize
then zipArcs ip w (y & asPos .~ newp & asDir .~ newdir) ys
else zipArcs ip w z ys
zipArcs ip w y _ = createNewArc ip w (_asPos y) (_asDir y)
doArcStep :: NextArcStep -> ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep)
doArcStep nas = case nas of
DefaultArcStep -> defaultArcStep
EndArc -> const $ const $ const $ return Nothing
defaultArcStep ::
RandomGen g =>
ItemParams ->
World ->
ArcStep ->
State g (Maybe ArcStep)
defaultArcStep _ _ (ArcStep _ _ (CrID _)) = return Nothing
defaultArcStep _ _ (ArcStep _ _ (WlID _)) = return Nothing
defaultArcStep itparams w (ArcStep p dir _) = do
let csize = _arcSize itparams
--rot <- takeOne [pi/4,negate pi/4]
rot <- takeOne [0]
let center = csize *.* rotateV rot (unitVectorAtAngle dir) +.+ p
newp <- (center +.+) <$> randInCirc csize
let mcr =
listToMaybe
. sortOn (dist center . _crPos)
. filter (\cr -> dist center (_crPos cr) < csize)
. IM.elems
$ w ^. cWorld . lWorld . creatures --_creatures (_cWorld w)
mwl =
listToMaybe
. sortOn (dist p . fst)
. mapMaybe (\q -> sequence $ collidePointWallsFilter (const True) p (center +.+ q) w)
-- collidePointWallsWall and wlsnearpoint
$ polyCirc 6 csize
f (q, wl) = ArcStep q dir (WlID $ _wlID wl)
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (CrID $ _crID cr)
return . listToMaybe . sortOn (dist p . (^. asPos)) $
ArcStep newp dir NothingID : catMaybes [fmap f mwl, fmap g mcr]
-169
View File
@@ -1,169 +0,0 @@
module Dodge.Tesla.Arc (
makeTeslaArc,
updateTeslaArc,
) where
import Data.Foldable
import Data.List (sortOn)
import Data.Maybe
import Dodge.Base.Collide
import Dodge.Damage
import Dodge.Data.ArcStep
import Dodge.Data.CrWlID
import Dodge.Data.World
import Dodge.Spark
import Geometry
import qualified IntMapHelp as IM
import LensHelp
import MonadHelp
import Picture
import RandomHelp
import Shape
updateTeslaArc ::
World ->
TeslaArc ->
(World, Maybe TeslaArc)
updateTeslaArc w pt
| _taTimer pt == 2 =
( makesparks $ foldl' (flip damthings) w thearc
, Just $ pt & taTimer -~ 1
)
| _taTimer pt < 1 = (w, Nothing)
| otherwise = (w, Just $ pt & taTimer -~ 1)
where
thearc = _taArcSteps pt
rcol = brightX 100 1.5 <$> takeOne [white, azure, blue, cyan]
rspeed = state (randomR (3, 6))
makeaspark = randSpark ELECTRICAL rspeed rcol rdir lp
makesparks = makeaspark . makeaspark . makeaspark
rp x = randPeakedParam 2 (x - 0.7) x (x + 0.7)
(lp, rdir) = case last thearc of
ArcStep lp' ld' NothingID -> (lp', rp ld')
ArcStep lp' ld' (CrID crid) -> case w ^? cWorld . lWorld . creatures . ix crid of
Nothing -> (lp', rp ld')
Just cr -> (lp' -.- (_crRad cr + 1) *.* unitVectorAtAngle ld', rp $ ld' + pi)
ArcStep lp' ld' (WlID wlid) -> case w ^? cWorld . lWorld . walls . ix wlid of
Nothing -> (lp', rp ld')
Just wl ->
( lp' -.- 2 *.* unitVectorAtAngle ld'
, randWallReflect ld' wl
)
damthings (ArcStep p dir crwl) = damageCrWlID (thedamage p dir) crwl
thedamage p dir = Damage ELECTRICAL 50 (p -.- q) p (p +.+ q) NoDamageEffect
where
q = 5 *.* unitVectorAtAngle dir
randWallReflect :: RandomGen g => Float -> Wall -> State g Float
randWallReflect a wl = do
let (x, y) = _wlLine wl
outa = reflectAngle a x y
a1 = nearestAngleRep outa $ argV (x - y)
a2 = if a1 < outa then a1 + pi else a1 - pi
randPeaked a1 outa a2
makeTeslaArc :: ItemParams -> Point2 -> Float -> World -> (World, ItemParams)
makeTeslaArc ip pos dir w =
( w & randGen .~ g
& cWorld . lWorld . teslaArcs
.:~ TeslaArc
{ _taPoints = map (^. asPos) newarc
, _taArcSteps = newarc
, _taTimer = 2
, _taColor = brightX 100 1.5 col
}
, ip & currentArc ?~ newarc
)
where
(col, g) = takeOne [white, azure, blue, cyan] & runState $ _randGen w
newarc = createArc ip w pos dir & evalState $ _randGen w
createArc ::
ItemParams ->
World ->
Point2 ->
Float ->
State StdGen [ArcStep]
createArc arcparams@Arcing{_currentArc = Nothing} w p dir = createNewArc arcparams w p dir
createArc arcparams w p dir = updateArc arcparams w p dir
createNewArc ::
ItemParams ->
World ->
Point2 ->
Float ->
State StdGen [ArcStep]
createNewArc arcparams w p dir =
take (_arcNumber arcparams)
<$> unfoldrMID (doArcStep (_newArcStep arcparams) arcparams w) (ArcStep p dir NothingID)
updateArc ::
ItemParams ->
World ->
Point2 ->
Float ->
State StdGen [ArcStep]
updateArc ip w p dir = take (_arcNumber ip) <$> zipArcs ip w (ArcStep p dir NothingID) carc
where
carc = tail $ fromJust $ _currentArc ip
zipArcs ::
ItemParams ->
World ->
ArcStep ->
[ArcStep] ->
State StdGen [ArcStep]
zipArcs ip w x (y : ys) =
(x :) <$> do
defaultnext <- doArcStep (_newArcStep ip) ip w x
case defaultnext of
Nothing -> return []
Just z@(ArcStep _ _ (CrID _)) -> return [z]
Just z@(ArcStep _ _ (WlID _)) -> return [z]
Just z -> do
p <- randInCirc 5
let csize = _arcSize ip
center = _asPos x +.+ csize *.* unitVectorAtAngle (_asDir x)
newp = _asPos y +.+ p
--newdir = argV $ newp -.- _asPos x
newdir = _asDir x
if dist newp center < csize
then zipArcs ip w (y & asPos .~ newp & asDir .~ newdir) ys
else zipArcs ip w z ys
zipArcs ip w y _ = createNewArc ip w (_asPos y) (_asDir y)
doArcStep :: NextArcStep -> ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep)
doArcStep nas = case nas of
DefaultArcStep -> defaultArcStep
EndArc -> const $ const $ const $ return Nothing
defaultArcStep ::
RandomGen g =>
ItemParams ->
World ->
ArcStep ->
State g (Maybe ArcStep)
defaultArcStep _ _ (ArcStep _ _ (CrID _)) = return Nothing
defaultArcStep _ _ (ArcStep _ _ (WlID _)) = return Nothing
defaultArcStep itparams w (ArcStep p dir _) = do
let csize = _arcSize itparams
--rot <- takeOne [pi/4,negate pi/4]
rot <- takeOne [0]
let center = csize *.* rotateV rot (unitVectorAtAngle dir) +.+ p
newp <- (center +.+) <$> randInCirc csize
let mcr =
listToMaybe
. sortOn (dist center . _crPos)
. filter (\cr -> dist center (_crPos cr) < csize)
. IM.elems
$ w ^. cWorld . lWorld . creatures --_creatures (_cWorld w)
mwl =
listToMaybe
. sortOn (dist p . fst)
. mapMaybe (\q -> sequence $ collidePointWallsFilter (const True) p (center +.+ q) w)
-- collidePointWallsWall and wlsnearpoint
$ polyCirc 6 csize
f (q, wl) = ArcStep q dir (WlID $ _wlID wl)
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (CrID $ _crID cr)
return . listToMaybe . sortOn (dist p . (^. asPos)) $
ArcStep newp dir NothingID : catMaybes [fmap f mwl, fmap g mcr]
-15
View File
@@ -1,15 +0,0 @@
module Dodge.Tesla.Arc.Draw where
import Dodge.Data.TeslaArc
import Geometry
import Picture
drawTeslaArc :: TeslaArc -> Picture
drawTeslaArc pt =
setLayer BloomNoZWrite $
fold
[ setDepth 20.5 $ color (brightX 2 1 $ _taColor pt) $ thickLine 3 ps
, setDepth 20 $ color (V4 0 0 0 0.5) $ thickLine 10 ps
]
where
ps = _taPoints pt
-7
View File
@@ -1,7 +0,0 @@
module Dodge.Tesla.Ball where
import Dodge.Data.World
import Geometry
makeTeslaBallAt :: Point2 -> World -> World
makeTeslaBallAt _ = id
-14
View File
@@ -1,14 +0,0 @@
module Dodge.Tesla.ItemParams where
import Dodge.Data.ArcStep
import Dodge.Data.Item.Params
teslaParams :: ItemParams
teslaParams =
Arcing
{ _currentArc = Nothing
, _arcSize = 20
, _arcNumber = 10
, _newArcStep = DefaultArcStep --defaultArcStep
, _previousArcEffect = NoPreviousArcEffect
}
+1 -1
View File
@@ -47,7 +47,7 @@ import Dodge.SmoothScroll
import Dodge.SoundLogic
import Dodge.Spark
import Dodge.Terminal.Type
import Dodge.Tesla.Arc
import Dodge.Tesla
import Dodge.TmTm
import Dodge.TractorBeam.Update
import Dodge.Update.Camera
+13 -2
View File
@@ -573,6 +573,7 @@ Draw src/Dodge/Shockwave/Draw.hs 1;" m
Draw src/Dodge/Spark/Draw.hs 1;" m
Draw src/Dodge/Targeting/Draw.hs 1;" m
Draw src/Dodge/Tesla/Arc/Draw.hs 1;" m
Draw src/Dodge/Tesla/Draw.hs 1;" m
Draw src/Dodge/TractorBeam/Draw.hs 1;" m
Draw src/Dodge/Wall/Draw.hs 1;" m
DrawBlankProjectile src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" C
@@ -3700,6 +3701,7 @@ createGas src/Dodge/Gas.hs 8;" f
createHeadLamp src/Dodge/Euse.hs 135;" f
createItemYou src/Dodge/Inventory/Add.hs 95;" f
createLightMap src/Render.hs 26;" f
createNewArc src/Dodge/Tesla.hs 81;" f
createNewArc src/Dodge/Tesla/Arc.hs 90;" f
createPathGrid src/Dodge/Room/Path.hs 21;" f
createProjectile src/Dodge/HeldUse.hs 575;" f
@@ -3816,6 +3818,7 @@ defaultAimMvType src/Dodge/Default/Creature.hs 116;" f
defaultAimParams src/Dodge/Default/Item/Use/AimParams.hs 9;" f
defaultAimingCrit src/Dodge/Default/Creature.hs 125;" f
defaultApplyDamage src/Dodge/Creature/Damage.hs 20;" f
defaultArcStep src/Dodge/Tesla.hs 133;" f
defaultArcStep src/Dodge/Tesla/Arc.hs 140;" f
defaultArcStep src/Dodge/Tesla/Arc/Default.hs 15;" f
defaultAudition src/Dodge/Default/Creature.hs 93;" f
@@ -3936,6 +3939,7 @@ divideLineOddNumPoints src/Geometry.hs 278;" f
doAfterPlacement src/Dodge/Layout.hs 86;" f
doAfterPlacements src/Dodge/Layout.hs 83;" f
doAnyEquipmentEffect src/Dodge/Creature/State.hs 180;" f
doArcStep src/Dodge/Tesla.hs 128;" f
doArcStep src/Dodge/Tesla/Arc.hs 135;" f
doBackspace src/Dodge/Update/Input/Text.hs 31;" f
doBlBl src/Dodge/WorldEffect.hs 90;" f
@@ -4131,6 +4135,7 @@ drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f
drawTargeting src/Dodge/Targeting/Draw.hs 13;" f
drawTerminalDisplay src/Dodge/Render/HUD.hs 351;" f
drawTeslaArc src/Dodge/Tesla/Arc/Draw.hs 7;" f
drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f
drawText src/Picture/Base.hs 220;" f
drawTitle src/Dodge/Render/MenuScreen.hs 58;" f
drawTitleBackground src/Dodge/Render/List.hs 44;" f
@@ -4643,7 +4648,7 @@ lasSensorTurretTest src/Dodge/Room/LasTurret.hs 104;" f
lasTunnel src/Dodge/Room/LasTurret.hs 123;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 164;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 38;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 48;" f
laserLinkTest src/Dodge/Item/Grammar.hs 119;" f
lastMap src/Dodge/DoubleTree.hs 174;" f
launcher src/Dodge/Item/Held/Launcher.hs 12;" f
@@ -4802,6 +4807,7 @@ makeSwitch src/Dodge/LevelGen/Switch.hs 52;" f
makeSwitchSPic src/Dodge/LevelGen/Switch.hs 40;" f
makeTermLine src/Dodge/Terminal.hs 120;" f
makeTermPara src/Dodge/Terminal.hs 123;" f
makeTeslaArc src/Dodge/Tesla.hs 65;" f
makeTeslaArc src/Dodge/Tesla/Arc.hs 65;" f
makeTeslaBallAt src/Dodge/Tesla/Ball.hs 6;" f
makeTeslaExplosionAt src/Dodge/WorldEvent/Explosion.hs 40;" f
@@ -5299,6 +5305,7 @@ randPeaked src/RandomHelp.hs 133;" f
randPeakedParam src/RandomHelp.hs 125;" f
randProb src/RandomHelp.hs 68;" f
randSpark src/Dodge/Spark.hs 74;" f
randWallReflect src/Dodge/Tesla.hs 57;" f
randWallReflect src/Dodge/Tesla/Arc.hs 57;" f
randomChallenges src/Dodge/Room/Start.hs 62;" f
randomCompass src/Dodge/Layout.hs 59;" f
@@ -5836,6 +5843,7 @@ terminalShape src/Dodge/Machine/Draw.hs 32;" f
terminalWheelEvent src/Dodge/Update/Scroll.hs 78;" f
teslaGun src/Dodge/Item/Held/BatteryGuns.hs 21;" f
teslaGunPic src/Dodge/Item/Draw/SPic.hs 386;" f
teslaParams src/Dodge/Item/Held/BatteryGuns.hs 37;" f
teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f
testCrossWalls src/Dodge/Room/Path.hs 47;" f
testEvent src/Dodge/Event/Test.hs 10;" f
@@ -5912,7 +5920,7 @@ torso src/Dodge/Creature/Picture.hs 105;" f
tractCr src/Dodge/TractorBeam/Update.hs 28;" f
tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f
tractorBeamAt src/Dodge/HeldUse.hs 347;" f
tractorGun src/Dodge/Item/Held/BatteryGuns.hs 60;" f
tractorGun src/Dodge/Item/Held/BatteryGuns.hs 70;" f
tractorGunPic src/Dodge/Item/Draw/SPic.hs 413;" f
tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f
tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f
@@ -6014,6 +6022,7 @@ unusedSpotNearInLink src/Dodge/PlacementSpot.hs 191;" f
upHammer src/Dodge/Default.hs 76;" f
upProjectile src/Dodge/Projectile/Update.hs 26;" f
updateAllNodes src/TreeHelp.hs 85;" f
updateArc src/Dodge/Tesla.hs 91;" f
updateArc src/Dodge/Tesla/Arc.hs 100;" f
updateAttachedItems src/Dodge/Creature/State.hs 256;" f
updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 455;" f
@@ -6109,6 +6118,7 @@ updateSounds src/Sound.hs 66;" f
updateSpark src/Dodge/Spark.hs 19;" f
updateSparks src/Dodge/Update.hs 564;" f
updateTempLightSource src/Dodge/LightSource/Update.hs 7;" f
updateTeslaArc src/Dodge/Tesla.hs 23;" f
updateTeslaArc src/Dodge/Tesla/Arc.hs 23;" f
updateTeslaArcs src/Dodge/Update.hs 546;" f
updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f
@@ -6290,6 +6300,7 @@ zConnect src/Dodge/Render/Connectors.hs 17;" f
zConnectCol src/Dodge/Render/Connectors.hs 28;" f
zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f
zeroZ src/Geometry/Vector.hs 8;" f
zipArcs src/Dodge/Tesla.hs 103;" f
zipArcs src/Dodge/Tesla/Arc.hs 110;" f
zipCount src/Dodge/Tree/Shift.hs 129;" f
zipCountDown src/Dodge/Room/Procedural.hs 118;" f