Simplify bullet movement code

This commit is contained in:
2025-01-08 20:27:04 +00:00
parent bd42f44278
commit 97317a621b
2 changed files with 82 additions and 87 deletions
+65 -70
View File
@@ -2,33 +2,27 @@ module Dodge.Bullet (
updateBullet, updateBullet,
) where ) where
import Linear import Data.Bifunctor
import Dodge.Item.Weapon.Bullet
import System.Random
import Data.Foldable import Data.Foldable
import Data.Maybe import Data.Maybe
import Dodge.Creature.Test import Dodge.Creature.Test
import Dodge.Data.World import Dodge.Data.World
import Dodge.EnergyBall import Dodge.EnergyBall
import Dodge.Item.Weapon.Bullet
import Dodge.Movement.Turn import Dodge.Movement.Turn
import Dodge.WorldEvent.SpawnParticle import Dodge.WorldEvent.SpawnParticle
import Dodge.WorldEvent.ThingsHit import Dodge.WorldEvent.ThingsHit
import Geometry import Geometry
import qualified IntMapHelp as IM --import qualified IntMapHelp as IM
import LensHelp import LensHelp
import qualified ListHelp as List import qualified ListHelp as List
import Data.Bifunctor import System.Random
updateBullet :: World -> Bullet -> (World, Maybe Bullet) updateBullet :: World -> Bullet -> (World, Maybe Bullet)
updateBullet w bu updateBullet w bu
| magV (_buVel bu) < 1 = (endspawn w, Nothing) | magV (_buVel bu) < 1 = (useBulletPayload bu (_buPos bu) w, Nothing)
-- have to be slightly carefull not to accelerate bullets using magnets -- have to be slightly carefull not to accelerate bullets using magnets
| otherwise = second (Just . updateBulVel) . hitEffFromBul w $ applyMagnetsToBul bu w | otherwise = second (Just . updateBulVel) . hitEffFromBul w $ applyMagnetsToBul bu w
where
endspawn = fromMaybe id $ do
partspawn <- useBulletPayload bu
return $ partspawn p
p = _buPos bu
-- do we want this to drain energy from the deflection source? -- do we want this to drain energy from the deflection source?
applyMagnetsToBul :: Bullet -> World -> Bullet applyMagnetsToBul :: Bullet -> World -> Bullet
@@ -41,10 +35,10 @@ doMagnetBuBu bu mg
MagnetAlign -> doturntowards mgalignpos MagnetAlign -> doturntowards mgalignpos
MagnetDeflect -> doturntowards mgdeflectpos MagnetDeflect -> doturntowards mgdeflectpos
MagnetAttract -> doturntowards mpos MagnetAttract -> doturntowards mpos
MagnetRepulse -> doturntowards (2*bpos - mpos) MagnetRepulse -> doturntowards (2 * bpos - mpos)
where where
notclose = d > 100 notclose = d > 100
doturntowards p = bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos p doturntowards p = bu & buVel %~ vecTurnTo (10 * pi / (d + 40)) bpos p
bvel = bu ^. buVel bvel = bu ^. buVel
mpos = mg ^. mgPos mpos = mg ^. mgPos
bpos = bu ^. buPos bpos = bu ^. buPos
@@ -58,6 +52,7 @@ doMagnetBuBu bu mg
updateBulVel :: Bullet -> Bullet updateBulVel :: Bullet -> Bullet
updateBulVel bt = bt & buVel .*.*~ _buDrag bt updateBulVel bt = bt & buVel .*.*~ _buDrag bt
--case _buTrajectory bt of --case _buTrajectory bt of
-- BasicBulletTrajectory -> bt & buVel .*.*~ _buDrag bt -- BasicBulletTrajectory -> bt & buVel .*.*~ _buDrag bt
-- MagnetTrajectory tpos -> bt -- MagnetTrajectory tpos -> bt
@@ -113,16 +108,16 @@ bounceDir (_, Right wl) | _wlBouncy wl = Just $ uncurry (-.-) (_wlLine wl)
bounceDir (p, Left cr) | crIsArmouredFrom p cr = Just $ vNormal $ p -.- _crPos cr bounceDir (p, Left cr) | crIsArmouredFrom p cr = Just $ vNormal $ p -.- _crPos cr
bounceDir _ = Nothing bounceDir _ = Nothing
useBulletPayload :: Bullet -> Maybe (Point2 -> World -> World) useBulletPayload :: Bullet -> Point2 -> World -> World
useBulletPayload bu = case _buPayload bu of useBulletPayload bu = case _buPayload bu of
BulSpark -> Nothing BulSpark -> const id
BulFlak -> Just (makeFlak bu) BulFlak -> makeFlak bu
BulFrag -> Just makeFragBullets BulFrag -> makeFragBullets
BulGas -> Just (`makeGasCloud` V2 0 0) BulGas -> (`makeGasCloud` V2 0 0)
BulBall IncBall -> Just incBallAt BulBall IncBall -> incBallAt
BulBall ConcBall -> Just $ \p -> cWorld . lWorld . shockwaves .:~ concBall p BulBall ConcBall -> \p -> cWorld . lWorld . shockwaves .:~ concBall p
BulBall TeslaBall -> Just makeStaticBall BulBall TeslaBall -> makeStaticBall
BulBall FlashBall -> Just makeFlashBall BulBall FlashBall -> makeFlashBall
makeFragBullets :: Point2 -> World -> World makeFragBullets :: Point2 -> World -> World
makeFragBullets p w = w & cWorld . lWorld . bullets .++~ bus makeFragBullets p w = w & cWorld . lWorld . bullets .++~ bus
@@ -130,44 +125,50 @@ makeFragBullets p w = w & cWorld . lWorld . bullets .++~ bus
bus = zipWith f (take 10 as) (take 10 ss) bus = zipWith f (take 10 as) (take 10 ss)
as = randomRs (0, 2 * pi) $ _randGen w as = randomRs (0, 2 * pi) $ _randGen w
ss = randomRs (5, 15) $ _randGen w ss = randomRs (5, 15) $ _randGen w
f a s = defaultBullet & buVel .~ s *.* unitVectorAtAngle a f a s =
& buDrag .~ 0.8 defaultBullet & buVel .~ s *.* unitVectorAtAngle a
& buPos .~ p & buDrag .~ 0.8
& buOldPos .~ p & buPos .~ p
& buWidth .~ 1 & buOldPos .~ p
& buDamages .~ & buWidth .~ 1
[ Damage PIERCING 5 0 0 0 $ PushBackDamage 2 & buDamages .~ [Damage PIERCING 5 0 0 0 $ PushBackDamage 2]
]
makeFlak :: Bullet -> Point2 -> World -> World makeFlak :: Bullet -> Point2 -> World -> World
makeFlak bu _ w = w & cWorld . lWorld . bullets .++~ [f x | x <- xs] makeFlak bu _ w = w & cWorld . lWorld . bullets .++~ [f x | x <- xs]
where where
s = min 10 (0.5 * magV (_buVel bu)) s = min 10 (0.5 * magV (_buVel bu))
xs = take 5 $ randomRs (-s,s) $ _randGen w xs = take 5 $ randomRs (- s, s) $ _randGen w
f x = bu & buVel %~ g x f x =
-- & buTimer .~ 97 bu & buVel %~ g x
& buPayload .~ BulSpark -- & buTimer .~ 97
& buWidth .~ 0.5 & buPayload .~ BulSpark
& buDamages .~ & buWidth .~ 0.5
[ Damage PIERCING 25 0 0 0 $ PushBackDamage 2 & buDamages
] .~ [Damage PIERCING 25 0 0 0 $ PushBackDamage 2]
g x v = v +.+ x *.* normalizeV (vNormal v) g x v = v +.+ x *.* normalizeV (vNormal v)
hitEffFromBul :: World -> Bullet -> (World, Bullet) hitEffFromBul :: World -> Bullet -> (World, Bullet)
hitEffFromBul w bu = case _buEffect bu of hitEffFromBul w bu = case _buEffect bu of
PenetrateBullet -> movePenBullet bu hitstream w PenetrateBullet -> movePenBullet bu hitstream w
BounceBullet -> case List.safeHead hitstream of BounceBullet -> fromMaybe (expireAndDamage bu hitstream w) $ do
Nothing -> (w, moveBullet bu) (hp, crwl) <- hitstream ^? _head
Just (hp, crwl) -> fromMaybe (expireAndDamage bu hitstream w) $ do dir <- bounceDir (hp, crwl)
dir <- bounceDir (hp, crwl) return
return ( w
( w , bu
, bu & buPos .~ hp +.+ normalizeV (_buPos bu -.- hp)
& buPos .~ hp +.+ normalizeV (_buPos bu -.- hp) & buVel %~ reflectIn dir
& buVel %~ reflectIn dir )
-- & buTrajectory .~ BasicBulletTrajectory -- BounceBullet -> case List.safeHead hitstream of
-- & buTimer -~ 1 -- Nothing -> (w, moveBullet bu)
) -- Just (hp, crwl) -> fromMaybe (expireAndDamage bu hitstream w) $ do
-- dir <- bounceDir (hp, crwl)
-- return
-- ( w
-- , bu
-- & buPos .~ hp +.+ normalizeV (_buPos bu -.- hp)
-- & buVel %~ reflectIn dir
-- )
DestroyBullet -> expireAndDamage bu hitstream w DestroyBullet -> expireAndDamage bu hitstream w
where where
ep = sp +.+ _buVel bu ep = sp +.+ _buVel bu
@@ -182,7 +183,9 @@ setFromToDams bu p = map f (_buDamages bu)
damageThingHit :: Bullet -> (Point2, Either Creature Wall) -> World -> World damageThingHit :: Bullet -> (Point2, Either Creature Wall) -> World -> World
damageThingHit bu (p, crwl) = case crwl of damageThingHit bu (p, crwl) = case crwl of
Left cr -> cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .++~ dams Left cr -> cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .++~ dams
Right wl -> cWorld . lWorld . wallDamages %~ IM.insertWith (++) (_wlID wl) dams -- Right wl -> cWorld . lWorld . wallDamages %~ IM.insertWith (++) (_wlID wl) dams
-- hopefully the following doesn't introduce a space leak
Right wl -> cWorld . lWorld . wallDamages . at (_wlID wl) . non mempty <>~ dams
where where
dams = setFromToDams bu p dams = setFromToDams bu p
@@ -196,29 +199,21 @@ expireAndDamage bt things w = case List.safeHead things of
Just x -> (damageThingHit bt x w, stopBulletAt (fst x) bt) Just x -> (damageThingHit bt x w, stopBulletAt (fst x) bt)
moveBullet :: Bullet -> Bullet moveBullet :: Bullet -> Bullet
moveBullet pt = pt moveBullet pt = pt & buPos +~ _buVel pt & buOldPos .~ _buPos pt
& buPos %~ (+.+ _buVel pt)
& buOldPos .~ _buPos pt
stopBulletAt :: Point2 -> Bullet -> Bullet stopBulletAt :: Point2 -> Bullet -> Bullet
stopBulletAt hitp pt = pt stopBulletAt hitp pt =
& buPos .~ hitp +.+ normalizeV (p -.- hitp) pt
& buOldPos .~ p & buPos .~ hitp
& buVel .~ 0 & buOldPos .~ _buPos pt
where & buVel .~ 0
p = _buPos pt
movePenBullet :: movePenBullet :: Bullet -> [(Point2, Either Creature Wall)] -> World -> (World, Bullet)
Bullet ->
[(Point2, Either Creature Wall)] ->
World ->
(World, Bullet)
movePenBullet bu hitstream w = case hitstream of movePenBullet bu hitstream w = case hitstream of
[] -> (w, moveBullet bu) [] -> (w, moveBullet bu)
((p, crwl) : strm) -> ((p, crwl) : strm) | penThing crwl ->
if penThing crwl first (damageThingHit bu (p, crwl)) $ movePenBullet bu strm w
then first (damageThingHit bu (p, crwl)) $ movePenBullet bu strm w _ -> expireAndDamage bu hitstream w
else expireAndDamage bu hitstream w
penThing :: Either Creature Wall -> Bool penThing :: Either Creature Wall -> Bool
penThing (Left _) = True penThing (Left _) = True
+13 -13
View File
@@ -3429,7 +3429,7 @@ applyGravityPU src/Dodge/Projectile/Update.hs 56;" f
applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f
applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f
applyInvLock src/Dodge/HeldUse.hs 177;" f applyInvLock src/Dodge/HeldUse.hs 177;" f
applyMagnetsToBul src/Dodge/Bullet.hs 33;" f applyMagnetsToBul src/Dodge/Bullet.hs 32;" f
applyNoDamage src/Dodge/Creature/Damage.hs 11;" f applyNoDamage src/Dodge/Creature/Damage.hs 11;" f
applyPastDamages src/Dodge/Creature/State.hs 142;" f applyPastDamages src/Dodge/Creature/State.hs 142;" f
applyPiercingDamage src/Dodge/Creature/Damage.hs 57;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 57;" f
@@ -3864,7 +3864,7 @@ damageHP src/Dodge/Creature/Damage.hs 65;" f
damageMaterial src/Dodge/Material/Damage.hs 7;" f damageMaterial src/Dodge/Material/Damage.hs 7;" f
damageSensor src/Dodge/Placement/Instance/Sensor.hs 15;" f damageSensor src/Dodge/Placement/Instance/Sensor.hs 15;" f
damageStone src/Dodge/Material/Damage.hs 20;" f damageStone src/Dodge/Material/Damage.hs 20;" f
damageThingHit src/Dodge/Bullet.hs 182;" f damageThingHit src/Dodge/Bullet.hs 183;" f
damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 45;" f damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 45;" f
damageWall src/Dodge/Wall/Damage.hs 15;" f damageWall src/Dodge/Wall/Damage.hs 15;" f
damageWallEffect src/Dodge/Wall/DamageEffect.hs 11;" f damageWallEffect src/Dodge/Wall/DamageEffect.hs 11;" f
@@ -3985,7 +3985,6 @@ deleteWallFromZones src/Dodge/Wall/Zone.hs 23;" f
deleteWallID src/Dodge/Wall/Delete.hs 13;" f deleteWallID src/Dodge/Wall/Delete.hs 13;" f
deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f
denormalEdges src/Polyhedra.hs 136;" f denormalEdges src/Polyhedra.hs 136;" f
destroyAt src/Dodge/Bullet.hs 203;" f
destroyBlock src/Dodge/Block.hs 56;" f destroyBlock src/Dodge/Block.hs 56;" f
destroyDoor src/Dodge/Block.hs 83;" f destroyDoor src/Dodge/Block.hs 83;" f
destroyInvItem src/Dodge/Inventory.hs 39;" f destroyInvItem src/Dodge/Inventory.hs 39;" f
@@ -4081,7 +4080,7 @@ doItmCrWdWd src/Dodge/Euse.hs 27;" f
doLoop src/Loop.hs 60;" f doLoop src/Loop.hs 60;" f
doMCrAc src/Dodge/CreatureEffect.hs 57;" f doMCrAc src/Dodge/CreatureEffect.hs 57;" f
doMP2Ac src/Dodge/CreatureEffect.hs 73;" f doMP2Ac src/Dodge/CreatureEffect.hs 73;" f
doMagnetBuBu src/Dodge/Bullet.hs 36;" f doMagnetBuBu src/Dodge/Bullet.hs 35;" f
doMagnetBuBu src/Dodge/MagnetBuBu.hs 7;" f doMagnetBuBu src/Dodge/MagnetBuBu.hs 7;" f
doMagnetUpdate src/Dodge/Magnet/Update.hs 6;" f doMagnetUpdate src/Dodge/Magnet/Update.hs 6;" f
doModificationEffect src/Dodge/ModificationEffect.hs 7;" f doModificationEffect src/Dodge/ModificationEffect.hs 7;" f
@@ -4319,7 +4318,7 @@ expandPolyBy src/Dodge/LevelGen/StaticWalls.hs 91;" f
expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f expandPolyByFixed src/Dodge/LevelGen/StaticWalls.hs 97;" f
expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f
expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f
expireAndDamage src/Dodge/Bullet.hs 189;" f expireAndDamage src/Dodge/Bullet.hs 190;" f
expireAndDamageFL src/Dodge/Flame.hs 47;" f expireAndDamageFL src/Dodge/Flame.hs 47;" f
explodeShell src/Dodge/Projectile/Update.hs 238;" f explodeShell src/Dodge/Projectile/Update.hs 238;" f
explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 416;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 416;" f
@@ -4576,7 +4575,7 @@ highBar src/Dodge/Room/Foreground.hs 89;" f
highDiagonalMesh src/Dodge/Room/Foreground.hs 35;" f highDiagonalMesh src/Dodge/Room/Foreground.hs 35;" f
highMesh src/Dodge/Room/Foreground.hs 25;" f highMesh src/Dodge/Room/Foreground.hs 25;" f
hit1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 432;" f hit1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 432;" f
hitEffFromBul src/Dodge/Bullet.hs 155;" f hitEffFromBul src/Dodge/Bullet.hs 157;" f
hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 400;" f hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 400;" f
holdForm src/Dodge/Creature/Boid.hs 136;" f holdForm src/Dodge/Creature/Boid.hs 136;" f
holsterWeapon src/Dodge/Creature/Volition.hs 14;" f holsterWeapon src/Dodge/Creature/Volition.hs 14;" f
@@ -4905,7 +4904,7 @@ makeDefaultCorpse src/Dodge/Corpse/Make.hs 14;" f
makeDoorDebris src/Dodge/Block/Debris.hs 18;" f makeDoorDebris src/Dodge/Block/Debris.hs 18;" f
makeEnumOption src/Dodge/Menu/OptionType.hs 13;" f makeEnumOption src/Dodge/Menu/OptionType.hs 13;" f
makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 72;" f makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 72;" f
makeFlak src/Dodge/Bullet.hs 141;" f makeFlak src/Dodge/Bullet.hs 142;" f
makeFlame src/Dodge/Flame.hs 131;" f makeFlame src/Dodge/Flame.hs 131;" f
makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 55;" f makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 55;" f
makeFlamelet src/Dodge/EnergyBall.hs 17;" f makeFlamelet src/Dodge/EnergyBall.hs 17;" f
@@ -5046,12 +5045,12 @@ modTo src/Geometry/Zone.hs 10;" f
mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 59;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 59;" f
mouseCursorType src/Dodge/Render/Picture.hs 80;" f mouseCursorType src/Dodge/Render/Picture.hs 80;" f
mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f
moveBullet src/Dodge/Bullet.hs 198;" f moveBullet src/Dodge/Bullet.hs 199;" f
moveCombineSel src/Dodge/Update/Scroll.hs 112;" f moveCombineSel src/Dodge/Update/Scroll.hs 112;" f
moveHammerUp src/Dodge/Hammer.hs 5;" f moveHammerUp src/Dodge/Hammer.hs 5;" f
moveInverseShockwave src/Dodge/Shockwave/Update.hs 53;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 53;" f
moveLSThen src/Dodge/Placement/Instance/LightSource.hs 30;" f moveLSThen src/Dodge/Placement/Instance/LightSource.hs 30;" f
movePenBullet src/Dodge/Bullet.hs 213;" f movePenBullet src/Dodge/Bullet.hs 214;" f
moveRoomBy src/Dodge/Room/Link.hs 53;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f
moveShockwave src/Dodge/Shockwave/Update.hs 17;" f moveShockwave src/Dodge/Shockwave/Update.hs 17;" f
moveToSideFirstOutLink src/Dodge/Room/Warning.hs 54;" f moveToSideFirstOutLink src/Dodge/Room/Warning.hs 54;" f
@@ -5186,7 +5185,7 @@ pauseSound src/Dodge/SoundLogic.hs 41;" f
pauseTime src/Dodge/Update.hs 180;" f pauseTime src/Dodge/Update.hs 180;" f
peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f
pedestalRoom src/Dodge/Room/Containing.hs 50;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f
penThing src/Dodge/Bullet.hs 225;" f penThing src/Dodge/Bullet.hs 226;" f
perMat src/MatrixHelper.hs 49;" f perMat src/MatrixHelper.hs 49;" f
perceptionUpdate src/Dodge/Creature/Perception.hs 22;" f perceptionUpdate src/Dodge/Creature/Perception.hs 22;" f
performAction src/Dodge/Creature/Action.hs 92;" f performAction src/Dodge/Creature/Action.hs 92;" f
@@ -5673,7 +5672,7 @@ setCrPosture src/Dodge/Creature/YourControl.hs 172;" f
setDepth src/Picture/Base.hs 128;" f setDepth src/Picture/Base.hs 128;" f
setDirPS src/Dodge/PlacementSpot.hs 49;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f
setFallback src/Dodge/PlacementSpot.hs 127;" f setFallback src/Dodge/PlacementSpot.hs 127;" f
setFromToDams src/Dodge/Bullet.hs 177;" f setFromToDams src/Dodge/Bullet.hs 178;" f
setInLinks src/Dodge/RoomLink.hs 51;" f setInLinks src/Dodge/RoomLink.hs 51;" f
setInLinksByType src/Dodge/RoomLink.hs 54;" f setInLinksByType src/Dodge/RoomLink.hs 54;" f
setInLinksPD src/Dodge/RoomLink.hs 74;" f setInLinksPD src/Dodge/RoomLink.hs 74;" f
@@ -5917,6 +5916,7 @@ stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 468;" f
stoneDebris src/Dodge/Block/Debris.hs 137;" f stoneDebris src/Dodge/Block/Debris.hs 137;" f
stoneWallDamage src/Dodge/Wall/DamageEffect.hs 24;" f stoneWallDamage src/Dodge/Wall/DamageEffect.hs 24;" f
stopAllSounds src/Sound.hs 124;" f stopAllSounds src/Sound.hs 124;" f
stopBulletAt src/Dodge/Bullet.hs 205;" f
stopPushing src/Dodge/Block.hs 107;" f stopPushing src/Dodge/Block.hs 107;" f
stopSoundFrom src/Dodge/SoundLogic.hs 206;" f stopSoundFrom src/Dodge/SoundLogic.hs 206;" f
strFromEquipment src/Dodge/Creature/Statistics.hs 17;" f strFromEquipment src/Dodge/Creature/Statistics.hs 17;" f
@@ -6176,8 +6176,8 @@ updateBarrel src/Dodge/Barreloid.hs 45;" f
updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f
updateBaseWheelEvent src/Dodge/Update/Scroll.hs 28;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 28;" f
updateBounds src/Dodge/Update/Camera.hs 215;" f updateBounds src/Dodge/Update/Camera.hs 215;" f
updateBulVel src/Dodge/Bullet.hs 58;" f updateBulVel src/Dodge/Bullet.hs 57;" f
updateBullet src/Dodge/Bullet.hs 22;" f updateBullet src/Dodge/Bullet.hs 21;" f
updateBullets src/Dodge/Update.hs 523;" f updateBullets src/Dodge/Update.hs 523;" f
updateCamera src/Dodge/Update/Camera.hs 27;" f updateCamera src/Dodge/Update/Camera.hs 27;" f
updateCloseObjects src/Dodge/Inventory.hs 110;" f updateCloseObjects src/Dodge/Inventory.hs 110;" f