Refactor damages to materials

This commit is contained in:
2025-06-22 08:31:18 +01:00
parent df3fde5d3e
commit 9fa3e060d7
17 changed files with 576 additions and 609 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -197,7 +197,7 @@ moveBullet pt = pt & buPos +~ _buVel pt & buOldPos .~ _buPos pt
stopBulletAt :: Point2 -> Bullet -> Bullet stopBulletAt :: Point2 -> Bullet -> Bullet
stopBulletAt hitp pt = stopBulletAt hitp pt =
pt pt
& buPos .~ hitp + squashNormalizeV (_buPos pt - hitp) & buPos .~ hitp
& buOldPos .~ _buPos pt & buOldPos .~ _buPos pt
& buVel .~ 0 & buVel .~ 0
+19 -16
View File
@@ -9,22 +9,25 @@ import Dodge.Spark
import Geometry import Geometry
import LensHelp import LensHelp
applyCreatureDamage :: [Damage] -> Creature -> World -> World --applyCreatureDamage :: [Damage] -> Creature -> World -> World
applyCreatureDamage dms cr = case crMaterial (cr ^. crType) of --applyCreatureDamage dms cr =
Flesh -> defaultApplyDamage dms cr -- case crMaterial (cr ^. crType) of
Crystal -> id -- Flesh -> defaultApplyDamage dms cr
_ -> defaultApplyDamage dms cr -- Crystal -> id
-- _ -> defaultApplyDamage dms cr
defaultApplyDamage :: [Damage] -> Creature -> World -> World --defaultApplyDamage :: [Damage] -> Creature -> World -> World
defaultApplyDamage ds cr w = --defaultApplyDamage ds cr w =
foldl' (applyIndividualDamage cr) w ds' applyCreatureDamage :: [Damage] -> Creature -> World -> World
& cWorld . lWorld . creatures . ix (_crID cr) %~ doPoisonDam applyCreatureDamage dms cr w = foldl' (applyIndividualDamage cr) w dms
where -- foldl' (applyIndividualDamage cr) w ds'
(ps, ds') = partition isPoison ds -- & cWorld . lWorld . creatures . ix (_crID cr) %~ doPoisonDam
isPoison Poison{} = True -- where
isPoison _ = False -- (ps, ds') = partition isPoison ds
poisonDam = quot (max 0 (sum (map _dmAmount ps))) 10 -- isPoison Poison{} = True
doPoisonDam = crHP -~ poisonDam -- isPoison _ = False
-- poisonDam = quot (max 0 (sum (map _dmAmount ps))) 10
-- doPoisonDam = crHP -~ poisonDam
--applyDamageEffect :: Damage -> DamageEffect -> Creature -> World -> World --applyDamageEffect :: Damage -> DamageEffect -> Creature -> World -> World
--applyDamageEffect dm de cr = case de of --applyDamageEffect dm de cr = case de of
@@ -64,5 +67,5 @@ damageHP :: Creature -> Int -> World -> World
damageHP cr x = damageHP cr x =
cWorld . lWorld . creatures . ix (_crID cr) cWorld . lWorld . creatures . ix (_crID cr)
%~ ( (crHP -~ x) %~ ( (crHP -~ x)
. (crPastDamage +~ x) . (crPain +~ x)
) )
+1 -1
View File
@@ -204,7 +204,7 @@ targetYouWhenCognizant w cr = case cr ^? crPerception . cpAwareness . ix 0 of
searchIfDamaged :: Creature -> Creature searchIfDamaged :: Creature -> Creature
searchIfDamaged cr searchIfDamaged cr
| _crPastDamage cr > 0 | _crPain cr > 0
&& _apStrategy (_crActionPlan cr) == WatchAndWait = && _apStrategy (_crActionPlan cr) == WatchAndWait =
cr & crPerception . cpVigilance .~ Vigilant cr & crPerception . cpVigilance .~ Vigilant
& crActionPlan . apStrategy & crActionPlan . apStrategy
+5 -5
View File
@@ -106,7 +106,7 @@ corpseOrGib :: Creature -> World -> World
corpseOrGib cr = case cr ^? crDamage . to maxDamageType . _Just . _1 of corpseOrGib cr = case cr ^? crDamage . to maxDamageType . _Just . _1 of
Just CookingDamage -> addcorpse (thecorpse & cpSPic %~ scorchSPic) Just CookingDamage -> addcorpse (thecorpse & cpSPic %~ scorchSPic)
Just PoisonDamage -> addcorpse (thecorpse & cpSPic %~ poisonSPic) Just PoisonDamage -> addcorpse (thecorpse & cpSPic %~ poisonSPic)
Just PhysicalDamage | _crPastDamage cr > 200 -> addCrGibs cr Just PhysicalDamage | _crPain cr > 200 -> addCrGibs cr
_ -> addcorpse thecorpse _ -> addcorpse thecorpse
where where
addcorpse ctype = plNew (cWorld . lWorld . corpses) cpID ctype addcorpse ctype = plNew (cWorld . lWorld . corpses) cpID ctype
@@ -130,15 +130,15 @@ doDamage cr = applyPastDamages cr . applyCreatureDamage (cr ^. crDamage) cr
-- TODO generalise shake to arbitrary damage amounts -- TODO generalise shake to arbitrary damage amounts
applyPastDamages :: Creature -> World -> World applyPastDamages :: Creature -> World -> World
applyPastDamages cr w applyPastDamages cr w
| _crPastDamage cr > 200 = dojitter 3 100 | _crPain cr > 200 = dojitter 3 100
| _crPastDamage cr > 20 = dojitter 2 10 | _crPain cr > 20 = dojitter 2 10
| _crPastDamage cr > 0 = dojitter 1 1 | _crPain cr > 0 = dojitter 1 1
| otherwise = w | otherwise = w
where where
dojitter x y = dojitter x y =
let (p, g) = runState (randInCirc x) (_randGen w) let (p, g) = runState (randInCirc x) (_randGen w)
in w & cWorld . lWorld . creatures . ix (_crID cr) %~ crMvBy p in w & cWorld . lWorld . creatures . ix (_crID cr) %~ crMvBy p
& cWorld . lWorld . creatures . ix (_crID cr) . crPastDamage -~ y & cWorld . lWorld . creatures . ix (_crID cr) . crPain -~ y
& randGen .~ g & randGen .~ g
-- a loop going over all root inventory items -- a loop going over all root inventory items
+40 -26
View File
@@ -6,18 +6,19 @@ module Dodge.Damage (
damageDirection, damageDirection,
damageCrWlID, damageCrWlID,
maxDamageType, maxDamageType,
damThingHitWith,
) where ) where
import Dodge.WorldEvent.ThingsHit
import Geometry.Data
import Dodge.Data.Damage.Type
import Geometry.Vector
import ListHelp
import Dodge.Data.CrWlID
import Dodge.Data.World
import LensHelp
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
import Dodge.Data.CrWlID
import Dodge.Data.Damage.Type
import Dodge.Data.World
import Dodge.WorldEvent.ThingsHit
import FoldableHelp import FoldableHelp
import Geometry.Data
import Geometry.Vector
import LensHelp
import ListHelp
damageCrWlID :: Damage -> CrWlID -> World -> World damageCrWlID :: Damage -> CrWlID -> World -> World
damageCrWlID dam = \case damageCrWlID dam = \case
@@ -35,19 +36,19 @@ damageDirection :: [Damage] -> Maybe Float
damageDirection ds = safeArgV =<< safeHead (ds ^.. each . dmVector) damageDirection ds = safeArgV =<< safeHead (ds ^.. each . dmVector)
dmType :: Damage -> DamageType dmType :: Damage -> DamageType
dmType = \case dmType = \case
Piercing {} -> PhysicalDamage Piercing{} -> PhysicalDamage
Blunt {} -> PhysicalDamage Blunt{} -> PhysicalDamage
Sparking {} -> CookingDamage Sparking{} -> CookingDamage
Crushing {} -> PhysicalDamage Crushing{} -> PhysicalDamage
Shattering {} -> PhysicalDamage Shattering{} -> PhysicalDamage
Flaming {} -> CookingDamage Flaming{} -> CookingDamage
Lasering {} -> CookingDamage Lasering{} -> CookingDamage
Flashing {} -> CookingDamage Flashing{} -> CookingDamage
Electrical {} -> CookingDamage Electrical{} -> CookingDamage
Explosive {} -> PhysicalDamage Explosive{} -> PhysicalDamage
Poison {} -> PoisonDamage Poison{} -> PoisonDamage
Enterrement {} -> PhysicalDamage Enterrement{} -> PhysicalDamage
collectDamageTypes :: [Damage] -> M.Map DamageType Int collectDamageTypes :: [Damage] -> M.Map DamageType Int
collectDamageTypes = foldl' (flip f) M.empty collectDamageTypes = foldl' (flip f) M.empty
@@ -58,11 +59,24 @@ maxDamageType :: [Damage] -> Maybe (DamageType, Int)
maxDamageType = safeMinimumOn (negate . snd) . M.assocs . collectDamageTypes maxDamageType = safeMinimumOn (negate . snd) . M.assocs . collectDamageTypes
damageInCircle :: (Point2 -> Damage) -> Point2 -> Float -> World -> World damageInCircle :: (Point2 -> Damage) -> Point2 -> Float -> World -> World
damageInCircle f p r w = w damageInCircle f p r w =
& cWorld . lWorld . wallDamages %~ dowldams w
& cWorld . lWorld . creatures %~ docrdams & cWorld . lWorld . wallDamages %~ dowldams
& cWorld . lWorld . creatures %~ docrdams
where where
dowldams wds = foldl' g wds (wlsHitRadial p r w) dowldams wds = foldl' g wds (wlsHitRadial p r w)
docrdams crs = foldl' h crs (crsHitRadial p r w) docrdams crs = foldl' h crs (crsHitRadial p r w)
g wds (x,wl) = wds & at (_wlID wl) . non mempty .:~ f x g wds (x, wl) = wds & at (_wlID wl) . non mempty .:~ f x
h crs (x,cr) = crs & ix (_crID cr) . crDamage .:~ f x h crs (x, cr) = crs & ix (_crID cr) . crDamage .:~ f x
damThingHitWith ::
(Point2 -> Damage) ->
Maybe (Point2, Either Creature Wall) ->
World ->
World
damThingHitWith f = \case
Just (p, Left cr) ->
cWorld . lWorld . creatures . ix (_crID cr) . crDamage .:~ f p
Just (p, Right wl) ->
cWorld . lWorld . wallDamages . at (_wlID wl) . non mempty .:~ f p
Nothing -> id
+1 -1
View File
@@ -47,7 +47,7 @@ data Creature = Creature
, _crManipulation :: Manipulation , _crManipulation :: Manipulation
, _crEquipment :: M.Map EquipSite Int , _crEquipment :: M.Map EquipSite Int
, _crDamage :: [Damage] , _crDamage :: [Damage]
, _crPastDamage :: Int , _crPain :: Int
, _crStance :: Stance , _crStance :: Stance
, _crActionPlan :: ActionPlan , _crActionPlan :: ActionPlan
, _crPerception :: Perception , _crPerception :: Perception
+1
View File
@@ -37,6 +37,7 @@ data SoundOrigin
| Explosion Int | Explosion Int
| Tap Int | Tap Int
| EBSound Int | EBSound Int
| DamageHitSound Int
deriving (Eq, Ord, Show, Read) --Generic, Flat) deriving (Eq, Ord, Show, Read) --Generic, Flat)
+1 -1
View File
@@ -29,7 +29,7 @@ defaultCreature =
, _crDamage = [] , _crDamage = []
-- , _crCorpse = MakeDefaultCorpse -- , _crCorpse = MakeDefaultCorpse
-- , _crMaterial = Flesh -- , _crMaterial = Flesh
, _crPastDamage = 0 , _crPain = 0
-- , _crInvEquipped = mempty -- , _crInvEquipped = mempty
, _crEquipment = M.empty , _crEquipment = M.empty
-- , _crInvHotkeys = mempty -- , _crInvHotkeys = mempty
+2 -5
View File
@@ -2,12 +2,11 @@ module Dodge.Laser.Update (
updateLaser, updateLaser,
) where ) where
import Dodge.Damage
import Control.Lens import Control.Lens
--import Data.Maybe
import Dodge.Data.World import Dodge.Data.World
import Dodge.Item.Location import Dodge.Item.Location
import Dodge.Item.Weapon.LaserPath import Dodge.Item.Weapon.LaserPath
import Dodge.WorldEvent.Damage
import Geometry import Geometry
import Picture.Base import Picture.Base
@@ -16,9 +15,7 @@ updateLaser w pt =
( case _lpType pt of ( case _lpType pt of
DamageLaser dam -> DamageLaser dam ->
damThingHitWith damThingHitWith
(\p1 p2 p3 -> Lasering dam p2 (p3 - p1)) (\p2 -> Lasering dam p2 (xp - sp))
sp
xp
thHit thHit
w w
TargetingLaser itid -> w & pointerToItemID itid . itTargeting . itTgPos ?~ last ps TargetingLaser itid -> w & pointerToItemID itid . itTargeting . itTgPos ?~ last ps
+98 -20
View File
@@ -1,39 +1,117 @@
module Dodge.Material.Damage where module Dodge.Material.Damage (damageMaterial) where
import RandomHelp
import Dodge.SoundLogic
import Color
import Dodge.WorldEvent.Cloud
import Dodge.Data.World import Dodge.Data.World
import Dodge.Spark import Dodge.Spark
import Geometry import Geometry
import Control.Lens
damageMaterial :: damageMaterial ::
Damage -> Damage ->
Material -> Material ->
Float -> -- the angle of the hit surface, in radians Float -> -- the direction of the hit surface, in radians
World -> World ->
(Int, World) World
damageMaterial dm mt = case mt of damageMaterial dm mt = case mt of
Stone -> damageStone dm Stone -> damageStone dm
Metal -> damageMetal dm
Flesh -> damageFlesh dm
Dirt -> damageDirt dm
-- Glass -> damageGlass dm
_ -> defDamageMaterial dm _ -> defDamageMaterial dm
defDamageMaterial :: Damage -> Float -> World -> (Int, World) defDamageMaterial :: Damage -> Float -> World -> World
defDamageMaterial dm _ w = (_dmAmount dm, w) defDamageMaterial _ _ w = w
damageStone :: Damage -> Float -> World -> (Int, World) damageStone :: Damage -> Float -> World -> World
damageStone dm dir = case dm of damageStone dm dir w = w & case dm of
Lasering _ p t -> a 0 $ makeSpark FireSpark (outTo p t) (argV $ reflectIn t v) Lasering _ p t -> makeSpark FireSpark (outTo p t) (argV $ reflectIn v t)
Piercing x p t -> a x $ makeSpark NormalSpark (outTo p t) (argV $ reflectIn t v) Piercing _ p t -> makeSpark NormalSpark (outTo p t) (argV $ reflectIn v t)
Blunt x p t -> a x $ makeSpark NormalSpark (outTo p t) (argV $ reflectIn t v) . smokeCloudAt white 20 200 1 (addZ 20 (outTo p t))
Shattering {} -> a 0 id . randsound p [slapS,slap1S]
Crushing {} -> a 0 id Blunt _ p t -> smokeCloudAt white 20 200 1 (addZ 20 (outTo p t))
Explosive {} -> a 0 id Shattering _ p t -> smokeCloudAt white 20 200 1 (addZ 20 (outTo p t))
Sparking {} -> a 0 id Crushing{} -> id
Flaming {} -> a 0 id Explosive{} -> id
Electrical {} -> a 0 id Sparking{} -> id
Poison {} -> a 0 id Flaming{} -> id
Enterrement {} -> a 0 id Electrical{} -> id
Flashing {} -> a 0 id Poison{} -> id
Enterrement{} -> id
Flashing{} -> id
where
randsound p xs = let (x,g) = runState (takeOne xs) $ _randGen w
in soundStart so p x Nothing . set randGen g
so = DamageHitSound (w ^. cWorld . lWorld . lClock)
v = unitVectorAtAngle dir
outTo x t = x -.- squashNormalizeV t
damageMetal :: Damage -> Float -> World -> World
damageMetal dm dir w = w & case dm of
Lasering _ p t -> makeSpark FireSpark (outTo p t) (argV $ reflectIn v t)
Piercing _ p t -> makeSpark NormalSpark (outTo p t) (argV $ reflectIn v t)
. randsound p [tingS,ting1S]
Blunt _ p t -> id
Shattering _ p t -> id
Crushing{} -> id
Explosive{} -> id
Sparking{} -> id
Flaming{} -> id
Electrical{} -> id
Poison{} -> id
Enterrement{} -> id
Flashing{} -> id
where where
v = unitVectorAtAngle dir v = unitVectorAtAngle dir
a x f w = (x, f w) outTo x t = x -.- squashNormalizeV t
randsound p xs = let (x,g) = runState (takeOne xs) $ _randGen w
in soundStart so p x Nothing . set randGen g
so = DamageHitSound (w ^. cWorld . lWorld . lClock)
damageFlesh :: Damage -> Float -> World -> World
damageFlesh dm dir w = w & case dm of
Lasering _ p t -> id
Piercing _ p t -> randsound p [blood1S,blood2S,blood4S,blood5S,blood6S,blood7S,blood8S]
Blunt _ p t -> id
Shattering _ p t -> id
Crushing{} -> id
Explosive{} -> id
Sparking{} -> id
Flaming{} -> id
Electrical{} -> id
Poison{} -> id
Enterrement{} -> id
Flashing{} -> id
where
randsound p xs = let (x,g) = runState (takeOne xs) $ _randGen w
in soundStart so p x Nothing . set randGen g
so = DamageHitSound (w ^. cWorld . lWorld . lClock)
v = unitVectorAtAngle dir
outTo x t = x -.- squashNormalizeV t
damageDirt :: Damage -> Float -> World -> World
damageDirt dm dir w = w & case dm of
Lasering _ p t -> makeSpark FireSpark (outTo p t) (argV $ reflectIn v t)
Piercing _ p t -> smokeCloudAt orange 20 200 1 (addZ 20 (outTo p t))
. randsound p [slapS,slap1S]
Blunt _ p t -> smokeCloudAt orange 20 200 1 (addZ 20 (outTo p t))
Shattering _ p t -> smokeCloudAt orange 20 200 1 (addZ 20 (outTo p t))
Crushing{} -> id
Explosive{} -> id
Sparking{} -> id
Flaming{} -> id
Electrical{} -> id
Poison{} -> id
Enterrement{} -> id
Flashing{} -> id
where
randsound p xs = let (x,g) = runState (takeOne xs) $ _randGen w
in soundStart so p x Nothing . set randGen g
so = DamageHitSound (w ^. cWorld . lWorld . lClock)
v = unitVectorAtAngle dir
outTo x t = x -.- squashNormalizeV t outTo x t = x -.- squashNormalizeV t
--damageGlass :: Damage -> Float -> World -> (World,Int) --damageGlass :: Damage -> Float -> World -> (World,Int)
+4 -9
View File
@@ -13,30 +13,25 @@ fallSmallBounceDamage :: Prop -> World -> World
fallSmallBounceDamage pr w = fallSmallBounceDamage pr w =
w w
& dodamage & dodamage
& cWorld . lWorld . props . ix (_prID pr) %~ fallSmallBounce' w & cWorld . lWorld . props . ix (_prID pr) %~ fallMovement w
where where
p = _prPos pr p = _prPos pr
v = _prVel pr v = _prVel pr
dodamage dodamage
| _prPosZ pr < 25 = damageInCircle (const thedam) p 5 | _prPosZ pr < 25 = damageInCircle (const thedam) p 5
-- cWorld . lWorld . creatures . each %~ dodamage'
| otherwise = id | otherwise = id
thedam = Crushing (floor . (* 10) . max 0 . subtract 5 . abs $ _prVelZ pr) v thedam = Crushing (floor . (* 10) . max 0 . subtract 5 . abs $ _prVelZ pr) v
fallSmallBounce :: Prop -> World -> World fallSmallBounce :: Prop -> World -> World
fallSmallBounce pr w = fallSmallBounce pr w = w & cWorld . lWorld . props . ix (_prID pr) %~ fallMovement w
w
& cWorld . lWorld . props . ix (_prID pr) %~ fallSmallBounce' w
fallSmallBounce' :: World -> Prop -> Prop fallMovement :: World -> Prop -> Prop
fallSmallBounce' w pr fallMovement w pr
| newposz < 0 && velz < (-2) = | newposz < 0 && velz < (-2) =
pr pr
& prVelZ %~ ((* 0.5) . negate) & prVelZ %~ ((* 0.5) . negate)
-- & pjPos +~ (0.5*.* vel)
& updateWithVel (0.5 *.* vel) & updateWithVel (0.5 *.* vel)
& prVel %~ (0.5 *.*) & prVel %~ (0.5 *.*)
-- & pjPos +~ (0.5*.* vel)
| newposz < 0 = | newposz < 0 =
pr & prUpdate .~ PropUpdateId pr & prUpdate .~ PropUpdateId
& prPosZ .~ 0 & prPosZ .~ 0
+329 -319
View File
@@ -1,235 +1,240 @@
-- generated at 2025-06-09 10:19:06.449705157 UTC -- generated at 2025-06-22 07:24:07.993044373 UTC
module Dodge.SoundLogic.ExternallyGeneratedSounds where module Dodge.SoundLogic.ExternallyGeneratedSounds where
import Sound.Data import Sound.Data
soundToVol :: SoundID -> Float soundToVol :: SoundID -> Float
soundToVol v = case _getSoundID v of soundToVol v = case _getSoundID v of
0 -> 500 0 -> 200
1 -> 500 1 -> 500
2 -> 500 2 -> 500
3 -> 2000 3 -> 500
4 -> 500 4 -> 2000
5 -> 1000 5 -> 500
6 -> 40 6 -> 1000
7 -> 100 7 -> 40
8 -> 100 8 -> 100
9 -> 500 9 -> 100
10 -> 200 10 -> 500
11 -> 500 11 -> 200
12 -> 300 12 -> 500
13 -> 100 13 -> 300
14 -> 500 14 -> 100
15 -> 1000 15 -> 500
16 -> 40 16 -> 1000
17 -> 2000 17 -> 40
18 -> 100 18 -> 2000
19 -> 50 19 -> 100
20 -> 200 20 -> 50
21 -> 50 21 -> 200
22 -> 2000 22 -> 50
23 -> 200 23 -> 2000
24 -> 40 24 -> 200
25 -> 300 25 -> 40
26 -> 500 26 -> 300
27 -> 2000 27 -> 500
28 -> 500 28 -> 2000
29 -> 100 29 -> 500
30 -> 200 30 -> 100
31 -> 1000 31 -> 200
32 -> 100 32 -> 1000
33 -> 100 33 -> 100
34 -> 1000 34 -> 100
35 -> 1000 35 -> 1000
36 -> 40 36 -> 1000
37 -> 400 37 -> 40
38 -> 2000 38 -> 400
39 -> 100 39 -> 2000
40 -> 300 40 -> 100
41 -> 50 41 -> 300
42 -> 2000 42 -> 50
43 -> 50 43 -> 2000
44 -> 1000 44 -> 50
45 -> 8000 45 -> 1000
46 -> 2000 46 -> 8000
47 -> 2000 47 -> 2000
48 -> 1000 48 -> 2000
49 -> 2000 49 -> 1000
50 -> 100 50 -> 200
51 -> 40 51 -> 2000
52 -> 40 52 -> 100
53 -> 2000 53 -> 40
54 -> 100 54 -> 40
55 -> 500 55 -> 2000
56 -> 40 56 -> 100
57 -> 300 57 -> 500
58 -> 300 58 -> 40
59 -> 100 59 -> 300
60 -> 2000 60 -> 300
61 -> 1000 61 -> 100
62 -> 1000 62 -> 2000
63 -> 1000 63 -> 1000
64 -> 1000 64 -> 1000
65 -> 1000 65 -> 1000
66 -> 40 66 -> 1000
67 -> 50 67 -> 1000
68 -> 1000 68 -> 40
69 -> 500 69 -> 50
70 -> 500 70 -> 1000
71 -> 100 71 -> 500
72 -> 1000 72 -> 500
73 -> 20 73 -> 100
74 -> 500 74 -> 1000
75 -> 300 75 -> 20
76 -> 200 76 -> 500
77 -> 500 77 -> 300
78 -> 1000 78 -> 200
79 -> 200 79 -> 500
80 -> 1000 80 -> 1000
81 -> 2000 81 -> 200
82 -> 500 82 -> 1000
83 -> 100 83 -> 2000
84 -> 1000 84 -> 500
85 -> 300 85 -> 100
86 -> 2000 86 -> 1000
87 -> 2000 87 -> 300
88 -> 100 88 -> 2000
89 -> 500 89 -> 2000
90 -> 2000 90 -> 100
91 -> 100 91 -> 500
92 -> 300 92 -> 2000
93 -> 1000 93 -> 100
94 -> 200 94 -> 300
95 -> 100 95 -> 1000
96 -> 1000 96 -> 200
97 -> 2000 97 -> 100
98 -> 1000 98 -> 1000
99 -> 100 99 -> 2000
100 -> 200 100 -> 1000
101 -> 500 101 -> 100
102 -> 100 102 -> 200
103 -> 2000 103 -> 500
104 -> 1000 104 -> 100
105 -> 2000 105 -> 2000
106 -> 2000 106 -> 1000
107 -> 200 107 -> 2000
108 -> 100 108 -> 2000
109 -> 200 109 -> 200
110 -> 100
111 -> 200
_ -> 50 _ -> 50
soundToOnomato :: SoundID -> String soundToOnomato :: SoundID -> String
soundToOnomato v = case _getSoundID v of soundToOnomato v = case _getSoundID v of
0 -> "DEDUM" 0 -> "TING"
1 -> "CUHRUP" 1 -> "DEDUM"
2 -> "SCREE" 2 -> "CUHRUP"
3 -> "BRDBRDBRD" 3 -> "SCREE"
4 -> "DEDEDA" 4 -> "BRDBRDBRD"
5 -> "CRNK" 5 -> "DEDEDA"
6 -> "CLNK" 6 -> "CRNK"
7 -> "SKWLCH" 7 -> "CLNK"
8 -> "WRR" 8 -> "SKWLCH"
9 -> "TINKLE" 9 -> "WRR"
10 -> "SKREL" 10 -> "TINKLE"
11 -> "TRINKL" 11 -> "SKREL"
12 -> "BWAAH" 12 -> "TRINKL"
13 -> "SQLEE" 13 -> "BWAAH"
14 -> "DNDNDNDN" 14 -> "SQLEE"
15 -> "CRMBL" 15 -> "DNDNDNDN"
16 -> "TIP" 16 -> "CRMBL"
17 -> "TATATA" 17 -> "TIP"
18 -> "SPRT" 18 -> "TATATA"
19 -> "BLIH" 19 -> "SPRT"
20 -> "SQWCH" 20 -> "BLIH"
21 -> "HMM" 21 -> "SQWCH"
22 -> "PEW" 22 -> "HMM"
23 -> "CRAKLE" 23 -> "PEW"
24 -> "TAP" 24 -> "CRAKLE"
25 -> "DWAAH" 25 -> "TAP"
26 -> "PRUM" 26 -> "DWAAH"
27 -> "BANGG" 27 -> "PRUM"
28 -> "CRTINK" 28 -> "BANGG"
29 -> "PHF" 29 -> "CRTINK"
30 -> "CRNCH" 30 -> "PHF"
31 -> "ZHM" 31 -> "CRNCH"
32 -> "CLCLH" 32 -> "ZHM"
33 -> "THUD" 33 -> "CLCLH"
34 -> "TRWNG" 34 -> "THUD"
35 -> "CRASH" 35 -> "TRWNG"
36 -> "TAPTIP" 36 -> "CRASH"
37 -> "CRNKCRNKCRNK" 37 -> "TAPTIP"
38 -> "CHUGUGUG" 38 -> "CRNKCRNKCRNK"
39 -> "SKWLL" 39 -> "CHUGUGUG"
40 -> "WRRR" 40 -> "SKWLL"
41 -> "HSSS" 41 -> "WRRR"
42 -> "BOOM" 42 -> "HSSS"
43 -> "HSS" 43 -> "BOOM"
44 -> "TAKH" 44 -> "HSS"
45 -> "RINGGG" 45 -> "TAKH"
46 -> "CRH" 46 -> "RINGGG"
47 -> "UGGAUGGA" 47 -> "CRH"
48 -> "CRUMPLE" 48 -> "UGGAUGGA"
49 -> "CREUH" 49 -> "CRUMPLE"
50 -> "SMACK" 50 -> "TING"
51 -> "CLICK" 51 -> "CREUH"
52 -> "TIPTOP" 52 -> "SMACK"
53 -> "CRUH" 53 -> "CLICK"
54 -> "CHNKCHNKCHUNK" 54 -> "TIPTOP"
55 -> "CLKCLK" 55 -> "CRUH"
56 -> "TIPTAP" 56 -> "CHNKCHNKCHUNK"
57 -> "TNKTNKTNK" 57 -> "CLKCLK"
58 -> "CHPCHPCHP" 58 -> "TIPTAP"
59 -> "SLP" 59 -> "TNKTNKTNK"
60 -> "SCREE" 60 -> "CHPCHPCHP"
61 -> "DHDHL" 61 -> "SLP"
62 -> "BRAP" 62 -> "SCREE"
63 -> "CRSK" 63 -> "DHDHL"
64 -> "CRNKL" 64 -> "BRAP"
65 -> "TRNKL" 65 -> "CRSK"
66 -> "TAPP" 66 -> "CRNKL"
67 -> "SHUHP" 67 -> "TRNKL"
68 -> "CRUMBL" 68 -> "TAPP"
69 -> "DEDEDUM" 69 -> "SHUHP"
70 -> "TAK" 70 -> "CRUMBL"
71 -> "SPLRT" 71 -> "DEDEDUM"
72 -> "CRISH" 72 -> "TAK"
73 -> "SWSH" 73 -> "SPLRT"
74 -> "BIPBIPBIP" 74 -> "CRISH"
75 -> "BEP" 75 -> "SWSH"
76 -> "CRSKRL" 76 -> "BIPBIPBIP"
77 -> "KRTNKL" 77 -> "BEP"
78 -> "CRSNK" 78 -> "CRSKRL"
79 -> "SHTCK" 79 -> "KRTNKL"
80 -> "TTRKL" 80 -> "CRSNK"
81 -> "UGGAUGGA" 81 -> "SHTCK"
82 -> "DUDURAH" 82 -> "TTRKL"
83 -> "KKSQWL" 83 -> "UGGAUGGA"
84 -> "CRMPL" 84 -> "DUDURAH"
85 -> "BWEP" 85 -> "KKSQWL"
86 -> "CHUGUGUG" 86 -> "CRMPL"
87 -> "BANG" 87 -> "BWEP"
88 -> "SLPP" 88 -> "CHUGUGUG"
89 -> "DEDA" 89 -> "BANG"
90 -> "WHSSH" 90 -> "SLPP"
91 -> "HNH" 91 -> "DEDA"
92 -> "BWAH" 92 -> "WHSSH"
93 -> "CRUNK" 93 -> "HNH"
94 -> "SQWLTCH" 94 -> "BWAH"
95 -> "DRR" 95 -> "CRUNK"
96 -> "TRNKL" 96 -> "SQWLTCH"
97 -> "BRAP" 97 -> "DRR"
98 -> "BLPCHCH" 98 -> "TRNKL"
99 -> "SKLE" 99 -> "BRAP"
100 -> "ZMM" 100 -> "BLPCHCH"
101 -> "WRRR" 101 -> "SKLE"
102 -> "FWUMP" 102 -> "ZMM"
103 -> "BRAHCHCH" 103 -> "WRRR"
104 -> "BWMP" 104 -> "FWUMP"
105 -> "BRPBRPBRP" 105 -> "BRAHCHCH"
106 -> "WE-OH" 106 -> "BWMP"
107 -> "THCK" 107 -> "BRPBRPBRP"
108 -> "FHP" 108 -> "WE-OH"
109 -> "QWLPH" 109 -> "THCK"
110 -> "FHP"
111 -> "QWLPH"
_ -> error "unitialised sound" _ -> error "unitialised sound"
soundPathList :: [String] soundPathList :: [String]
soundPathList = soundPathList =
[ "dedum.DEDUM.500.wav" [ "ting1.TING.200.wav"
, "dedum.DEDUM.500.wav"
, "insert.CUHRUP.500.wav" , "insert.CUHRUP.500.wav"
, "tone440sawtoothquiet.SCREE.500.wav" , "tone440sawtoothquiet.SCREE.500.wav"
, "mini1.BRDBRDBRD.2000.wav" , "mini1.BRDBRDBRD.2000.wav"
@@ -278,6 +283,7 @@ soundPathList =
, "seagullCry1.CRH.2000.wav" , "seagullCry1.CRH.2000.wav"
, "seagullBark.UGGAUGGA.2000.wav" , "seagullBark.UGGAUGGA.2000.wav"
, "stone3.CRUMPLE.1000.wav" , "stone3.CRUMPLE.1000.wav"
, "ting.TING.200.wav"
, "seagullCry2.CREUH.2000.wav" , "seagullCry2.CREUH.2000.wav"
, "hit1.SMACK.100.wav" , "hit1.SMACK.100.wav"
, "click1.CLICK.40.wav" , "click1.CLICK.40.wav"
@@ -340,223 +346,227 @@ soundPathList =
, "whiteNoiseFadeIn.FHP.100.wav" , "whiteNoiseFadeIn.FHP.100.wav"
, "gut1.QWLPH.200.wav" , "gut1.QWLPH.200.wav"
] ]
ting1S :: SoundID
ting1S = SoundID 0
dedumS :: SoundID dedumS :: SoundID
dedumS = SoundID 0 dedumS = SoundID 1
insertS :: SoundID insertS :: SoundID
insertS = SoundID 1 insertS = SoundID 2
tone440sawtoothquietS :: SoundID tone440sawtoothquietS :: SoundID
tone440sawtoothquietS = SoundID 2 tone440sawtoothquietS = SoundID 3
mini1S :: SoundID mini1S :: SoundID
mini1S = SoundID 3 mini1S = SoundID 4
dededaS :: SoundID dededaS :: SoundID
dededaS = SoundID 4 dededaS = SoundID 5
glassShat3S :: SoundID glassShat3S :: SoundID
glassShat3S = SoundID 5 glassShat3S = SoundID 6
tapQuietS :: SoundID tapQuietS :: SoundID
tapQuietS = SoundID 6 tapQuietS = SoundID 7
blood8S :: SoundID blood8S :: SoundID
blood8S = SoundID 7 blood8S = SoundID 8
fireS :: SoundID fireS :: SoundID
fireS = SoundID 8 fireS = SoundID 9
smallGlass4S :: SoundID smallGlass4S :: SoundID
smallGlass4S = SoundID 9 smallGlass4S = SoundID 10
gut4S :: SoundID gut4S :: SoundID
gut4S = SoundID 10 gut4S = SoundID 11
smallGlass1S :: SoundID smallGlass1S :: SoundID
smallGlass1S = SoundID 11 smallGlass1S = SoundID 12
sineRaisePitchTwoSecS :: SoundID sineRaisePitchTwoSecS :: SoundID
sineRaisePitchTwoSecS = SoundID 12 sineRaisePitchTwoSecS = SoundID 13
blood7S :: SoundID blood7S :: SoundID
blood7S = SoundID 13 blood7S = SoundID 14
combineS :: SoundID combineS :: SoundID
combineS = SoundID 14 combineS = SoundID 15
stone4S :: SoundID stone4S :: SoundID
stone4S = SoundID 15 stone4S = SoundID 16
foot1S :: SoundID foot1S :: SoundID
foot1S = SoundID 16 foot1S = SoundID 17
autoBS :: SoundID autoBS :: SoundID
autoBS = SoundID 17 autoBS = SoundID 18
blood2S :: SoundID blood2S :: SoundID
blood2S = SoundID 18 blood2S = SoundID 19
healS :: SoundID healS :: SoundID
healS = SoundID 19 healS = SoundID 20
gut3S :: SoundID gut3S :: SoundID
gut3S = SoundID 20 gut3S = SoundID 21
fridgeHumS :: SoundID fridgeHumS :: SoundID
fridgeHumS = SoundID 21 fridgeHumS = SoundID 22
seagullWhistle1S :: SoundID seagullWhistle1S :: SoundID
seagullWhistle1S = SoundID 22 seagullWhistle1S = SoundID 23
elecCrackleS :: SoundID elecCrackleS :: SoundID
elecCrackleS = SoundID 23 elecCrackleS = SoundID 24
foot2S :: SoundID foot2S :: SoundID
foot2S = SoundID 24 foot2S = SoundID 25
skwareFadeTwoSecS :: SoundID skwareFadeTwoSecS :: SoundID
skwareFadeTwoSecS = SoundID 25 skwareFadeTwoSecS = SoundID 26
insertOneS :: SoundID insertOneS :: SoundID
insertOneS = SoundID 26 insertOneS = SoundID 27
bangEchoS :: SoundID bangEchoS :: SoundID
bangEchoS = SoundID 27 bangEchoS = SoundID 28
smallGlass3S :: SoundID smallGlass3S :: SoundID
smallGlass3S = SoundID 28 smallGlass3S = SoundID 29
whiteNoiseFadeOutS :: SoundID whiteNoiseFadeOutS :: SoundID
whiteNoiseFadeOutS = SoundID 29 whiteNoiseFadeOutS = SoundID 30
gut2S :: SoundID gut2S :: SoundID
gut2S = SoundID 30 gut2S = SoundID 31
teleS :: SoundID teleS :: SoundID
teleS = SoundID 31 teleS = SoundID 32
blood5S :: SoundID blood5S :: SoundID
blood5S = SoundID 32 blood5S = SoundID 33
hitS :: SoundID hitS :: SoundID
hitS = SoundID 33 hitS = SoundID 34
metal7S :: SoundID metal7S :: SoundID
metal7S = SoundID 34 metal7S = SoundID 35
stone1S :: SoundID stone1S :: SoundID
stone1S = SoundID 35 stone1S = SoundID 36
twoStep1S :: SoundID twoStep1S :: SoundID
twoStep1S = SoundID 36 twoStep1S = SoundID 37
wrench1S :: SoundID wrench1S :: SoundID
wrench1S = SoundID 37 wrench1S = SoundID 38
seagullChatterS :: SoundID seagullChatterS :: SoundID
seagullChatterS = SoundID 38 seagullChatterS = SoundID 39
blood4S :: SoundID blood4S :: SoundID
blood4S = SoundID 39 blood4S = SoundID 40
fireFadeS :: SoundID fireFadeS :: SoundID
fireFadeS = SoundID 40 fireFadeS = SoundID 41
foamSprayLoopS :: SoundID foamSprayLoopS :: SoundID
foamSprayLoopS = SoundID 41 foamSprayLoopS = SoundID 42
explosionS :: SoundID explosionS :: SoundID
explosionS = SoundID 42 explosionS = SoundID 43
foamSprayFadeOutS :: SoundID foamSprayFadeOutS :: SoundID
foamSprayFadeOutS = SoundID 43 foamSprayFadeOutS = SoundID 44
tap2S :: SoundID tap2S :: SoundID
tap2S = SoundID 44 tap2S = SoundID 45
tinitusS :: SoundID tinitusS :: SoundID
tinitusS = SoundID 45 tinitusS = SoundID 46
seagullCry1S :: SoundID seagullCry1S :: SoundID
seagullCry1S = SoundID 46 seagullCry1S = SoundID 47
seagullBarkS :: SoundID seagullBarkS :: SoundID
seagullBarkS = SoundID 47 seagullBarkS = SoundID 48
stone3S :: SoundID stone3S :: SoundID
stone3S = SoundID 48 stone3S = SoundID 49
tingS :: SoundID
tingS = SoundID 50
seagullCry2S :: SoundID seagullCry2S :: SoundID
seagullCry2S = SoundID 49 seagullCry2S = SoundID 51
hit1S :: SoundID hit1S :: SoundID
hit1S = SoundID 50 hit1S = SoundID 52
click1S :: SoundID click1S :: SoundID
click1S = SoundID 51 click1S = SoundID 53
twoStepSlowS :: SoundID twoStepSlowS :: SoundID
twoStepSlowS = SoundID 52 twoStepSlowS = SoundID 54
seagullCryS :: SoundID seagullCryS :: SoundID
seagullCryS = SoundID 53 seagullCryS = SoundID 55
crankSlowS :: SoundID crankSlowS :: SoundID
crankSlowS = SoundID 54 crankSlowS = SoundID 56
primeS :: SoundID primeS :: SoundID
primeS = SoundID 55 primeS = SoundID 57
twoStepS :: SoundID twoStepS :: SoundID
twoStepS = SoundID 56 twoStepS = SoundID 58
reloadS :: SoundID reloadS :: SoundID
reloadS = SoundID 57 reloadS = SoundID 59
reload1S :: SoundID reload1S :: SoundID
reload1S = SoundID 58 reload1S = SoundID 60
slapS :: SoundID slapS :: SoundID
slapS = SoundID 59 slapS = SoundID 61
tone440sawtoothS :: SoundID tone440sawtoothS :: SoundID
tone440sawtoothS = SoundID 60 tone440sawtoothS = SoundID 62
metal3S :: SoundID metal3S :: SoundID
metal3S = SoundID 61 metal3S = SoundID 63
tap3S :: SoundID tap3S :: SoundID
tap3S = SoundID 62 tap3S = SoundID 64
glassShat4S :: SoundID glassShat4S :: SoundID
glassShat4S = SoundID 63 glassShat4S = SoundID 65
glassShat2S :: SoundID glassShat2S :: SoundID
glassShat2S = SoundID 64 glassShat2S = SoundID 66
metal1S :: SoundID metal1S :: SoundID
metal1S = SoundID 65 metal1S = SoundID 67
foot3S :: SoundID foot3S :: SoundID
foot3S = SoundID 66 foot3S = SoundID 68
pickUpS :: SoundID pickUpS :: SoundID
pickUpS = SoundID 67 pickUpS = SoundID 69
stone5S :: SoundID stone5S :: SoundID
stone5S = SoundID 68 stone5S = SoundID 70
dededumS :: SoundID dededumS :: SoundID
dededumS = SoundID 69 dededumS = SoundID 71
tap1S :: SoundID tap1S :: SoundID
tap1S = SoundID 70 tap1S = SoundID 72
blood1S :: SoundID blood1S :: SoundID
blood1S = SoundID 71 blood1S = SoundID 73
metal4S :: SoundID metal4S :: SoundID
metal4S = SoundID 72 metal4S = SoundID 74
knifeS :: SoundID knifeS :: SoundID
knifeS = SoundID 73 knifeS = SoundID 75
computerBeepingS :: SoundID computerBeepingS :: SoundID
computerBeepingS = SoundID 74 computerBeepingS = SoundID 76
tone440S :: SoundID tone440S :: SoundID
tone440S = SoundID 75 tone440S = SoundID 77
gut6S :: SoundID gut6S :: SoundID
gut6S = SoundID 76 gut6S = SoundID 78
smallGlass2S :: SoundID smallGlass2S :: SoundID
smallGlass2S = SoundID 77 smallGlass2S = SoundID 79
glassShat1S :: SoundID glassShat1S :: SoundID
glassShat1S = SoundID 78 glassShat1S = SoundID 80
disconnectItemS :: SoundID disconnectItemS :: SoundID
disconnectItemS = SoundID 79 disconnectItemS = SoundID 81
metal5S :: SoundID metal5S :: SoundID
metal5S = SoundID 80 metal5S = SoundID 82
seagullBarkTransformedS :: SoundID seagullBarkTransformedS :: SoundID
seagullBarkTransformedS = SoundID 81 seagullBarkTransformedS = SoundID 83
ejectS :: SoundID ejectS :: SoundID
ejectS = SoundID 82 ejectS = SoundID 84
blood3S :: SoundID blood3S :: SoundID
blood3S = SoundID 83 blood3S = SoundID 85
stone2S :: SoundID stone2S :: SoundID
stone2S = SoundID 84 stone2S = SoundID 86
tone440raiseS :: SoundID tone440raiseS :: SoundID
tone440raiseS = SoundID 85 tone440raiseS = SoundID 87
seagullChatter1S :: SoundID seagullChatter1S :: SoundID
seagullChatter1S = SoundID 86 seagullChatter1S = SoundID 88
bangS :: SoundID bangS :: SoundID
bangS = SoundID 87 bangS = SoundID 89
slap1S :: SoundID slap1S :: SoundID
slap1S = SoundID 88 slap1S = SoundID 90
dedaS :: SoundID dedaS :: SoundID
dedaS = SoundID 89 dedaS = SoundID 91
missileLaunchS :: SoundID missileLaunchS :: SoundID
missileLaunchS = SoundID 90 missileLaunchS = SoundID 92
gruntS :: SoundID gruntS :: SoundID
gruntS = SoundID 91 gruntS = SoundID 93
sineRaisePitchOneSecS :: SoundID sineRaisePitchOneSecS :: SoundID
sineRaisePitchOneSecS = SoundID 92 sineRaisePitchOneSecS = SoundID 94
metal2S :: SoundID metal2S :: SoundID
metal2S = SoundID 93 metal2S = SoundID 95
gut5S :: SoundID gut5S :: SoundID
gut5S = SoundID 94 gut5S = SoundID 96
slideDoorS :: SoundID slideDoorS :: SoundID
slideDoorS = SoundID 95 slideDoorS = SoundID 97
metal6S :: SoundID metal6S :: SoundID
metal6S = SoundID 96 metal6S = SoundID 98
autoGunS :: SoundID autoGunS :: SoundID
autoGunS = SoundID 97 autoGunS = SoundID 99
oldMachineBootS :: SoundID oldMachineBootS :: SoundID
oldMachineBootS = SoundID 98 oldMachineBootS = SoundID 100
blood6S :: SoundID blood6S :: SoundID
blood6S = SoundID 99 blood6S = SoundID 101
buzzS :: SoundID buzzS :: SoundID
buzzS = SoundID 100 buzzS = SoundID 102
fireLoudS :: SoundID fireLoudS :: SoundID
fireLoudS = SoundID 101 fireLoudS = SoundID 103
tap4S :: SoundID tap4S :: SoundID
tap4S = SoundID 102 tap4S = SoundID 104
shotgunS :: SoundID shotgunS :: SoundID
shotgunS = SoundID 103 shotgunS = SoundID 105
sawtoothFailS :: SoundID sawtoothFailS :: SoundID
sawtoothFailS = SoundID 104 sawtoothFailS = SoundID 106
miniS :: SoundID miniS :: SoundID
miniS = SoundID 105 miniS = SoundID 107
seagullWhistleS :: SoundID seagullWhistleS :: SoundID
seagullWhistleS = SoundID 106 seagullWhistleS = SoundID 108
connectItemS :: SoundID connectItemS :: SoundID
connectItemS = SoundID 107 connectItemS = SoundID 109
whiteNoiseFadeInS :: SoundID whiteNoiseFadeInS :: SoundID
whiteNoiseFadeInS = SoundID 108 whiteNoiseFadeInS = SoundID 110
gut1S :: SoundID gut1S :: SoundID
gut1S = SoundID 109 gut1S = SoundID 111
+10 -5
View File
@@ -6,21 +6,26 @@ module Dodge.Wall.Damage (
damageWall, damageWall,
) where ) where
import Geometry.Vector
import Dodge.Material.Damage
import Dodge.Block import Dodge.Block
import Dodge.Data.World import Dodge.Data.World
import Dodge.Wall.DamageEffect
import LensHelp import LensHelp
-- maybeDestroyDoor should rather happen during the door mechanism update -- maybeDestroyDoor should rather happen during the door mechanism update
damageWall :: Damage -> Wall -> World -> World damageWall :: Damage -> Wall -> World -> World
damageWall dt wl w = case _wlStructure wl of damageWall dt wl w = case _wlStructure wl of
MachinePart mcid -> w' & cWorld . lWorld . machines . ix mcid . mcDamage .:~ dt MachinePart mcid -> w' & cWorld . lWorld . machines . ix mcid . mcDamage .:~ dt
BlockPart blid -> w' & cWorld . lWorld . blocks . ix blid . blHP -~ x & maybeDestroyBlock blid BlockPart blid ->
DoorPart drid -> w' & cWorld . lWorld . doors . ix drid . drHP -~ x & maybeDestroyDoor drid w' & cWorld . lWorld . blocks . ix blid . blHP -~ x
& maybeDestroyBlock blid
DoorPart drid ->
w' & cWorld . lWorld . doors . ix drid . drHP -~ x
& maybeDestroyDoor drid
_ -> w' _ -> w'
where where
x = dt' ^. dmAmount x = dt ^. dmAmount
(w', dt') = damageWallEffect dt wl w w' = damageMaterial dt (_wlMaterial wl) (argV $ uncurry (-) (_wlLine wl)) w
-- block destruction is convoluted... -- block destruction is convoluted...
maybeDestroyBlock :: Int -> World -> World maybeDestroyBlock :: Int -> World -> World
-116
View File
@@ -1,116 +0,0 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Wall.DamageEffect where
import Dodge.Base.Wall
import Dodge.Block
import Dodge.Data.World
import Dodge.Spark
import Dodge.Wall.Dust
import Geometry
import LensHelp
damageWallEffect :: Damage -> Wall -> World -> (World, Damage)
damageWallEffect dm wl = (,dm) . case _wlMaterial wl of
Stone -> stoneWallDamage dm wl
Glass -> glassWallDamage dm wl
Dirt -> dirtWallDamage dm wl
Crystal -> crystalWallDamage dm wl
Metal -> stoneWallDamage dm wl
Wood -> stoneWallDamage dm wl
Electronics -> stoneWallDamage dm wl
Flesh -> stoneWallDamage dm wl
-- there is quite a lot of duplication here, should be sorted out
stoneWallDamage :: Damage -> Wall -> World -> World
stoneWallDamage dm wl = case dm of
Piercing _ p t -> makeSpark NormalSpark (outTo p t)
(reflDirWall p (p+t) wl) . wlDustAt wl (outTo p t)
Lasering _ p t -> makeSpark FireSpark (outTo p t) (reflDirWall p (p+t) wl)
Blunt _ p t -> wlDustAt wl (outTo p t)
Shattering _ p t -> muchWlDustAt wl (outTo p t)
Crushing {} -> id
Explosive {} -> id
Sparking {} -> id
Flaming {} -> id
Electrical {} -> id
Poison {} -> id
Enterrement {} -> id
Flashing {} -> id
where
outTo x y = x -.- squashNormalizeV y
-- d = _dmAmount dm
-- sp = _dmFrom dm
-- p = _dmAt dm
-- outTo = p +.+ squashNormalizeV (sp -.- p)
glassWallDamage :: Damage -> Wall -> World -> World
glassWallDamage dm wl w =
w & case dm of
Lasering _ p t -> makeSpark FireSpark (outTo p t) (reflDirWall p (p+t) wl)
Piercing _ p t -> dosplint . makeSpark NormalSpark (outTo p t) (reflDirWall p (p+t) wl) . wlDustAt wl (outTo p t)
Blunt _ p t -> dosplint . wlDustAt wl (outTo p t)
Shattering _ p t -> dosplint . muchWlDustAt wl (outTo p t)
Crushing {} -> dosplint
Explosive {} -> dosplint
Sparking {} -> id
Flaming {} -> id
Electrical {} -> id
Poison {} -> id
Enterrement {} -> id
Flashing {} -> id
where
mbl = do
blid <- wl ^? wlStructure . wsBlock
w ^? cWorld . lWorld . blocks . ix blid
-- d :: Int
-- d = max 1 $ maybe 1 (subtract 1 . _blHP) mbl
dosplint = maybe id splinterBlock mbl
-- sp = _dmFrom dm
-- p = _dmAt dm
--outTo = p +.+ squashNormalizeV (sp -.- p)
outTo p t = p -.- squashNormalizeV t
crystalWallDamage :: Damage -> Wall -> World -> World
crystalWallDamage dm wl = case dm of
Lasering _ p t -> makeSpark FireSpark (outTo p t) (reflDirWall p (p+t) wl)
Piercing _ p t -> makeSpark NormalSpark (outTo p t) (reflDirWall p (p+t) wl) . wlDustAt wl (outTo p t)
Blunt _ p t -> wlDustAt wl (outTo p t)
Shattering _ p t -> muchWlDustAt wl (outTo p t)
Crushing {} -> id
Explosive {} -> id
Sparking {} -> id
Flaming {} -> id
Electrical {} -> id
Poison {} -> id
Enterrement {} -> id
Flashing {} -> id
where
-- a x f w = (f w)
--d = _dmAmount dm
--sp = _dmFrom dm
--p = _dmAt dm
--outTo = p +.+ squashNormalizeV (sp -.- p)
outTo p t = p -.- squashNormalizeV t
dirtWallDamage :: Damage -> Wall -> World -> World
dirtWallDamage dm wl = case dm of
Lasering _ p t -> wlDustAt wl (outTo p t)
Piercing _ p t -> wlDustAt wl (outTo p t)
Blunt _ p t -> wlDustAt wl (outTo p t)
Shattering _ p t -> muchWlDustAt wl (outTo p t)
Crushing _ _ -> id
Explosive _ _ -> id
Sparking {} -> id
Flaming {} -> id
Electrical {} -> id
Poison {} -> id
Enterrement {} -> id
Flashing {} -> id
where
--a x f w = (f w)
--d = _dmAmount dm
--sp = _dmFrom dm
--p = _dmAt dm
--outTo = p +.+ squashNormalizeV (sp -.- p)
outTo p t = p -.- squashNormalizeV t
-20
View File
@@ -1,20 +0,0 @@
module Dodge.WorldEvent.Damage (
damThingHitWith,
) where
import Dodge.Data.World
import Dodge.Wall.Damage
import Geometry
import LensHelp
damThingHitWith ::
(Point2 -> Point2 -> Point2 -> Damage) ->
Point2 ->
Point2 ->
Maybe (Point2, Either Creature Wall) ->
World ->
World
damThingHitWith partDT sp ep mayEiCrWl = case mayEiCrWl of
Just (hitp, Left cr) -> cWorld . lWorld . creatures . ix (_crID cr) . crDamage .:~ partDT sp hitp ep
Just (hitp, Right wl) -> damageWall (partDT sp hitp ep) wl
Nothing -> id
+63 -63
View File
@@ -460,9 +460,10 @@ Damage src/Dodge/Data/Damage.hs 10;" m
Damage src/Dodge/Machine/Damage.hs 1;" m Damage src/Dodge/Machine/Damage.hs 1;" m
Damage src/Dodge/Material/Damage.hs 1;" m Damage src/Dodge/Material/Damage.hs 1;" m
Damage src/Dodge/Wall/Damage.hs 4;" m Damage src/Dodge/Wall/Damage.hs 4;" m
Damage src/Dodge/WorldEvent/Damage.hs 1;" m Damage src/Dodge/WorldEvent/Damage.hs 2;" m
DamageCircle src/Dodge/DamageCircle.hs 1;" m DamageCircle src/Dodge/DamageCircle.hs 1;" m
DamageEffect src/Dodge/Wall/DamageEffect.hs 2;" m DamageEffect src/Dodge/Wall/DamageEffect.hs 2;" m
DamageHitSound src/Dodge/Data/SoundOrigin.hs 40;" C
DamageLaser src/Dodge/Data/Laser.hs 17;" C DamageLaser src/Dodge/Data/Laser.hs 17;" C
DamageSensor src/Dodge/Data/Machine/Sensor.hs 20;" C DamageSensor src/Dodge/Data/Machine/Sensor.hs 20;" C
DamageType src/Dodge/Data/Damage/Type.hs 3;" t DamageType src/Dodge/Data/Damage/Type.hs 3;" t
@@ -2436,7 +2437,7 @@ _crMvAim src/Dodge/Data/Creature.hs 42;" f
_crMvDir src/Dodge/Data/Creature.hs 41;" f _crMvDir src/Dodge/Data/Creature.hs 41;" f
_crName src/Dodge/Data/Creature.hs 60;" f _crName src/Dodge/Data/Creature.hs 60;" f
_crOldPos src/Dodge/Data/Creature.hs 39;" f _crOldPos src/Dodge/Data/Creature.hs 39;" f
_crPastDamage src/Dodge/Data/Creature.hs 50;" f _crPain src/Dodge/Data/Creature.hs 50;" f
_crPerception src/Dodge/Data/Creature.hs 53;" f _crPerception src/Dodge/Data/Creature.hs 53;" f
_crPos src/Dodge/Data/Creature.hs 38;" f _crPos src/Dodge/Data/Creature.hs 38;" f
_crStance src/Dodge/Data/Creature.hs 51;" f _crStance src/Dodge/Data/Creature.hs 51;" f
@@ -3381,14 +3382,14 @@ annoToRoomTree src/Dodge/Annotation.hs 17;" f
anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f
anythingHitCirc src/Dodge/Base/Collide.hs 247;" f anythingHitCirc src/Dodge/Base/Collide.hs 247;" f
applyCME src/Dodge/HeldUse.hs 364;" f applyCME src/Dodge/HeldUse.hs 364;" f
applyCreatureDamage src/Dodge/Creature/Damage.hs 12;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 21;" f
applyEventIO src/Loop.hs 89;" f applyEventIO src/Loop.hs 89;" f
applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyGravityPU src/Dodge/Projectile/Update.hs 56;" f
applyIndividualDamage src/Dodge/Creature/Damage.hs 47;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 50;" f
applyInvLock src/Dodge/HeldUse.hs 423;" f applyInvLock src/Dodge/HeldUse.hs 423;" f
applyMagnetsToBul src/Dodge/Bullet.hs 30;" f applyMagnetsToBul src/Dodge/Bullet.hs 30;" f
applyPastDamages src/Dodge/Creature/State.hs 131;" f applyPastDamages src/Dodge/Creature/State.hs 131;" f
applyPiercingDamage src/Dodge/Creature/Damage.hs 52;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 55;" f
applyPosition src/Sound.hs 111;" f applyPosition src/Sound.hs 111;" f
applyRecoil src/Dodge/HeldUse.hs 455;" f applyRecoil src/Dodge/HeldUse.hs 455;" f
applyResFactor src/Dodge/Data/Config.hs 110;" f applyResFactor src/Dodge/Data/Config.hs 110;" f
@@ -3657,7 +3658,7 @@ clusterFunc src/Dodge/Combine/Graph.hs 119;" f
cogRaised src/Dodge/Creature/Perception.hs 102;" f cogRaised src/Dodge/Creature/Perception.hs 102;" f
colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f colCrWall src/Dodge/WallCreatureCollisions.hs 28;" f
colCrsWalls src/Dodge/WallCreatureCollisions.hs 18;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 18;" f
collectDamageTypes src/Dodge/Damage.hs 51;" f collectDamageTypes src/Dodge/Damage.hs 53;" f
collectInvItems src/Dodge/Update/Input/InGame.hs 298;" f collectInvItems src/Dodge/Update/Input/InGame.hs 298;" f
collideCircWalls src/Dodge/Base/Collide.hs 159;" f collideCircWalls src/Dodge/Base/Collide.hs 159;" f
collidePoint src/Dodge/Base/Collide.hs 50;" f collidePoint src/Dodge/Base/Collide.hs 50;" f
@@ -3725,8 +3726,8 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 38;" f
crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 52;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 52;" f
crHasTarget src/Dodge/Creature/Test.hs 63;" f crHasTarget src/Dodge/Creature/Test.hs 63;" f
crHasTargetLOS src/Dodge/Creature/Test.hs 66;" f crHasTargetLOS src/Dodge/Creature/Test.hs 66;" f
crHit src/Dodge/WorldEvent/ThingsHit.hs 68;" f crHit src/Dodge/WorldEvent/ThingsHit.hs 64;" f
crIXsNearCirc src/Dodge/Zoning/Creature.hs 35;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 32;" f
crIXsNearPoint src/Dodge/Zoning/Creature.hs 14;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 14;" f
crInAimStance src/Dodge/Creature/Test.hs 92;" f crInAimStance src/Dodge/Creature/Test.hs 92;" f
crIntelligence src/Dodge/Creature/Statistics.hs 34;" f crIntelligence src/Dodge/Creature/Statistics.hs 34;" f
@@ -3754,7 +3755,7 @@ crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f
crUpdateItemLocations src/Dodge/Inventory/Location.hs 42;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 42;" f
crVocalizationSound src/Dodge/Creature/Vocalization.hs 13;" f crVocalizationSound src/Dodge/Creature/Vocalization.hs 13;" f
crWarningSounds src/Dodge/Creature/Vocalization.hs 23;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 23;" f
crZoneSize src/Dodge/Zoning/Creature.hs 44;" f crZoneSize src/Dodge/Zoning/Creature.hs 41;" f
craftInfo src/Dodge/Item/Info.hs 168;" f craftInfo src/Dodge/Item/Info.hs 168;" f
craftItemSPic src/Dodge/Item/Draw/SPic.hs 57;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 57;" f
crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 451;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 451;" f
@@ -3779,20 +3780,20 @@ creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 52;" f
creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 73;" f creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 73;" f
creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 62;" f creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 62;" f
critInDeadEnd src/Dodge/Room/Room.hs 232;" f critInDeadEnd src/Dodge/Room/Room.hs 232;" f
crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 29;" f
crossPic src/Dodge/Render/Label.hs 27;" f crossPic src/Dodge/Render/Label.hs 27;" f
crossProd src/Geometry/Vector3D.hs 41;" f crossProd src/Geometry/Vector3D.hs 41;" f
crossV src/Geometry/Vector.hs 178;" f crossV src/Geometry/Vector.hs 178;" f
crsHit src/Dodge/WorldEvent/ThingsHit.hs 42;" f crsHit src/Dodge/WorldEvent/ThingsHit.hs 38;" f
crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 103;" f crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 99;" f
crsItmsUnused src/Dodge/Room/Containing.hs 45;" f crsItmsUnused src/Dodge/Room/Containing.hs 45;" f
crsNearCirc src/Dodge/Zoning/Creature.hs 38;" f crsNearCirc src/Dodge/Zoning/Creature.hs 35;" f
crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f crsNearPoint src/Dodge/Zoning/Creature.hs 17;" f
crsNearRect src/Dodge/Zoning/Creature.hs 41;" f crsNearRect src/Dodge/Zoning/Creature.hs 38;" f
crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f crsNearSeg src/Dodge/Zoning/Creature.hs 23;" f
crystalDebris src/Dodge/Block/Debris.hs 176;" f crystalDebris src/Dodge/Block/Debris.hs 176;" f
crystalLine src/Dodge/Placement/Instance/Wall.hs 55;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 55;" f
crystalWallDamage src/Dodge/Wall/DamageEffect.hs 74;" f crystalWallDamage src/Dodge/Wall/DamageEffect.hs 76;" f
cubeShape src/Dodge/Block/Debris.hs 196;" f cubeShape src/Dodge/Block/Debris.hs 196;" f
cullPoint src/Dodge/Render/ShapePicture.hs 68;" f cullPoint src/Dodge/Render/ShapePicture.hs 68;" f
cullPretty src/AesonHelp.hs 14;" f cullPretty src/AesonHelp.hs 14;" f
@@ -3818,27 +3819,27 @@ cylinderOnSeg src/Geometry.hs 122;" f
cylinderPoly src/Shape.hs 87;" f cylinderPoly src/Shape.hs 87;" f
cylinderRoundIndices src/Shader/Poke.hs 389;" f cylinderRoundIndices src/Shader/Poke.hs 389;" f
dShadCol src/Dodge/Render/List.hs 215;" f dShadCol src/Dodge/Render/List.hs 215;" f
damThingHitWith src/Dodge/WorldEvent/Damage.hs 10;" f damThingHitWith src/Dodge/Damage.hs 72;" f
damToExpBarrel src/Dodge/Barreloid.hs 49;" f damToExpBarrel src/Dodge/Barreloid.hs 49;" f
damageBlocksBy src/Dodge/Wall/Damage.hs 36;" f damageBlocksBy src/Dodge/Wall/Damage.hs 42;" f
damageCircle src/Dodge/DamageCircle.hs 12;" f damageCircle src/Dodge/DamageCircle.hs 12;" f
damageCodeCommand src/Dodge/Terminal.hs 232;" f damageCodeCommand src/Dodge/Terminal.hs 232;" f
damageCrCircle src/Dodge/DamageCircle.hs 33;" f damageCrCircle src/Dodge/DamageCircle.hs 33;" f
damageCrCircle src/Dodge/EnergyBall.hs 128;" f damageCrWl src/Dodge/Damage.hs 29;" f
damageCrWl src/Dodge/Damage.hs 28;" f damageCrWlID src/Dodge/Damage.hs 23;" f
damageCrWlID src/Dodge/Damage.hs 22;" f damageDirection src/Dodge/Damage.hs 35;" f
damageDirection src/Dodge/Damage.hs 33;" f damageFlesh src/Dodge/Material/Damage.hs 68;" f
damageHP src/Dodge/Creature/Damage.hs 63;" f damageHP src/Dodge/Creature/Damage.hs 66;" f
damageInCircle src/Dodge/Damage.hs 59;" f damageInCircle src/Dodge/Damage.hs 61;" f
damageMaterial src/Dodge/Material/Damage.hs 7;" f damageMaterial src/Dodge/Material/Damage.hs 12;" f
damageMetal src/Dodge/Material/Damage.hs 50;" 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 27;" f
damageThingHit src/Dodge/Bullet.hs 176;" f damageThingHit src/Dodge/Bullet.hs 176;" 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 17;" f
damageWallEffect src/Dodge/Wall/DamageEffect.hs 12;" f damageWallEffect src/Dodge/Wall/DamageEffect.hs 12;" f
damageWlCircle src/Dodge/DamageCircle.hs 26;" f damageWlCircle src/Dodge/DamageCircle.hs 26;" f
damageWlCircle src/Dodge/EnergyBall.hs 125;" f
dampField src/Dodge/Magnet.hs 8;" f dampField src/Dodge/Magnet.hs 8;" f
damsToExpBarrel src/Dodge/Barreloid.hs 46;" f damsToExpBarrel src/Dodge/Barreloid.hs 46;" f
dark src/Color.hs 108;" f dark src/Color.hs 108;" f
@@ -3878,12 +3879,11 @@ dedaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 521;" f
dededaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 351;" f dededaS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 351;" f
dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 481;" f dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 481;" f
dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 343;" f dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 343;" f
defDamageMaterial src/Dodge/Material/Damage.hs 17;" f defDamageMaterial src/Dodge/Material/Damage.hs 24;" f
defLSPic src/Dodge/LightSource/Draw.hs 10;" f defLSPic src/Dodge/LightSource/Draw.hs 10;" f
defSPic src/Dodge/Item/Draw/SPic.hs 299;" f defSPic src/Dodge/Item/Draw/SPic.hs 299;" f
defaultAimMvType src/Dodge/Creature/MoveType.hs 16;" f defaultAimMvType src/Dodge/Creature/MoveType.hs 16;" f
defaultAimingCrit src/Dodge/Default/Creature.hs 105;" f defaultAimingCrit src/Dodge/Default/Creature.hs 105;" f
defaultApplyDamage src/Dodge/Creature/Damage.hs 18;" f
defaultArcStep src/Dodge/Tesla/Arc.hs 140;" f defaultArcStep src/Dodge/Tesla/Arc.hs 140;" f
defaultArcStep src/Dodge/Tesla/Arc/Default.hs 15;" f defaultArcStep src/Dodge/Tesla/Arc/Default.hs 15;" f
defaultAudition src/Dodge/Default/Creature.hs 90;" f defaultAudition src/Dodge/Default/Creature.hs 90;" f
@@ -3975,7 +3975,7 @@ dim src/Color.hs 112;" f
dirtColor src/Dodge/Block/Debris.hs 160;" f dirtColor src/Dodge/Block/Debris.hs 160;" f
dirtDebris src/Dodge/Block/Debris.hs 154;" f dirtDebris src/Dodge/Block/Debris.hs 154;" f
dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f
dirtWallDamage src/Dodge/Wall/DamageEffect.hs 96;" f dirtWallDamage src/Dodge/Wall/DamageEffect.hs 98;" f
disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 501;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 501;" f
disconnectTerminal src/Dodge/Terminal.hs 217;" f disconnectTerminal src/Dodge/Terminal.hs 217;" f
displayConfig src/Dodge/Menu.hs 213;" f displayConfig src/Dodge/Menu.hs 213;" f
@@ -3993,7 +3993,7 @@ divideDoorPane src/Dodge/Placement/Instance/Door.hs 59;" f
divideLine src/Geometry.hs 247;" f divideLine src/Geometry.hs 247;" f
divideLineExact src/Geometry.hs 275;" f divideLineExact src/Geometry.hs 275;" f
divideLineOddNumPoints src/Geometry.hs 260;" f divideLineOddNumPoints src/Geometry.hs 260;" f
dmType src/Dodge/Damage.hs 36;" f dmType src/Dodge/Damage.hs 38;" f
doAfterPlacement src/Dodge/Layout.hs 86;" f doAfterPlacement src/Dodge/Layout.hs 86;" f
doAfterPlacements src/Dodge/Layout.hs 83;" f doAfterPlacements src/Dodge/Layout.hs 83;" f
doAimTwist src/Dodge/Creature/YourControl.hs 140;" f doAimTwist src/Dodge/Creature/YourControl.hs 140;" f
@@ -4150,7 +4150,7 @@ drawJumpDown src/Dodge/Render/Picture.hs 175;" f
drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f
drawLampCover src/Dodge/Prop/Draw.hs 47;" f drawLampCover src/Dodge/Prop/Draw.hs 47;" f
drawLaser src/Dodge/Laser/Draw.hs 6;" f drawLaser src/Dodge/Laser/Draw.hs 6;" f
drawLaser src/Dodge/Laser/Update.hs 34;" f drawLaser src/Dodge/Laser/Update.hs 31;" f
drawLightSource src/Dodge/LightSource/Draw.hs 7;" f drawLightSource src/Dodge/LightSource/Draw.hs 7;" f
drawLinearShockwave src/Dodge/LinearShockwave/Draw.hs 10;" f drawLinearShockwave src/Dodge/LinearShockwave/Draw.hs 10;" f
drawList src/Dodge/Render/List.hs 209;" f drawList src/Dodge/Render/List.hs 209;" f
@@ -4237,11 +4237,11 @@ dtToLRAdjEither src/Dodge/DoubleTree.hs 114;" f
dtToRootIntMap' src/Dodge/DoubleTree.hs 92;" f dtToRootIntMap' src/Dodge/DoubleTree.hs 92;" f
dtToUpDownAdj src/Dodge/DoubleTree.hs 96;" f dtToUpDownAdj src/Dodge/DoubleTree.hs 96;" f
dummyMenuOption src/Dodge/Menu/Option.hs 74;" f dummyMenuOption src/Dodge/Menu/Option.hs 74;" f
ebColor src/Dodge/EnergyBall.hs 96;" f ebColor src/Dodge/EnergyBall.hs 94;" f
ebDamage src/Dodge/EnergyBall.hs 104;" f ebDamage src/Dodge/EnergyBall.hs 102;" f
ebEffect src/Dodge/EnergyBall.hs 51;" f ebEffect src/Dodge/EnergyBall.hs 49;" f
ebFlicker src/Dodge/EnergyBall.hs 89;" f ebFlicker src/Dodge/EnergyBall.hs 87;" f
ebtToDamage src/Dodge/EnergyBall.hs 117;" f ebtToDamage src/Dodge/EnergyBall.hs 107;" f
edgeFormatting src/Dodge/Combine/Graph.hs 131;" f edgeFormatting src/Dodge/Combine/Graph.hs 131;" f
edgeToPic src/Dodge/Debug/Picture.hs 431;" f edgeToPic src/Dodge/Debug/Picture.hs 431;" f
effectOnEquip src/Dodge/Equipment.hs 32;" f effectOnEquip src/Dodge/Equipment.hs 32;" f
@@ -4260,7 +4260,7 @@ encircleP src/Dodge/Creature/Boid.hs 28;" f
endArcPos src/Dodge/Tesla.hs 87;" f endArcPos src/Dodge/Tesla.hs 87;" f
endCombineRegex src/Dodge/Update/Input/InGame.hs 267;" f endCombineRegex src/Dodge/Update/Input/InGame.hs 267;" f
endRegex src/Dodge/Update/Input/InGame.hs 254;" f endRegex src/Dodge/Update/Input/InGame.hs 254;" f
energyBallAt src/Dodge/EnergyBall.hs 66;" f energyBallAt src/Dodge/EnergyBall.hs 64;" f
enterCombineInv src/Dodge/DisplayInventory.hs 323;" f enterCombineInv src/Dodge/DisplayInventory.hs 323;" f
epText src/Dodge/Inventory/SelectionList.hs 75;" f epText src/Dodge/Inventory/SelectionList.hs 75;" f
eqConstr src/SameConstr.hs 17;" f eqConstr src/SameConstr.hs 17;" f
@@ -4304,8 +4304,8 @@ extractRoomPos src/Dodge/RoomPos.hs 6;" f
faceEdges src/Polyhedra.hs 65;" f faceEdges src/Polyhedra.hs 65;" f
facesToVF src/Polyhedra/Geodesic.hs 69;" f facesToVF src/Polyhedra/Geodesic.hs 69;" f
fadeTLS src/Dodge/LightSource/Update.hs 14;" f fadeTLS src/Dodge/LightSource/Update.hs 14;" f
fallSmallBounce src/Dodge/Prop/Moving.hs 31;" f fallMovement src/Dodge/Prop/Moving.hs 28;" f
fallSmallBounce' src/Dodge/Prop/Moving.hs 36;" f fallSmallBounce src/Dodge/Prop/Moving.hs 25;" f
fallSmallBounceDamage src/Dodge/Prop/Moving.hs 12;" f fallSmallBounceDamage src/Dodge/Prop/Moving.hs 12;" f
farWallDistDirection src/Dodge/Update/Camera.hs 233;" f farWallDistDirection src/Dodge/Update/Camera.hs 233;" f
fdiv src/ShortShow.hs 26;" f fdiv src/ShortShow.hs 26;" f
@@ -4330,7 +4330,7 @@ firstBreather src/Dodge/Room/Breather.hs 9;" f
firstWorldLoad appDodge/Main.hs 77;" f firstWorldLoad appDodge/Main.hs 77;" f
fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f
fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f fixedSizePicClampArrow src/Dodge/Picture/SizeInvariant.hs 57;" f
flFlicker src/Dodge/Flame.hs 50;" f flFlicker src/Dodge/Flame.hs 36;" f
flameMuzzles src/Dodge/HeldUse.hs 288;" f flameMuzzles src/Dodge/HeldUse.hs 288;" f
flameShield src/Dodge/Item/Equipment.hs 33;" f flameShield src/Dodge/Item/Equipment.hs 33;" f
flameSize src/Dodge/Flame/Size.hs 5;" f flameSize src/Dodge/Flame/Size.hs 5;" f
@@ -4470,7 +4470,7 @@ glassShat3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 353;" f
glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 469;" f glassShat4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 469;" f
glassSwitchBack src/Dodge/Room/Room.hs 70;" f glassSwitchBack src/Dodge/Room/Room.hs 70;" f
glassSwitchBackCrits src/Dodge/Room/Room.hs 99;" f glassSwitchBackCrits src/Dodge/Room/Room.hs 99;" f
glassWallDamage src/Dodge/Wall/DamageEffect.hs 47;" f glassWallDamage src/Dodge/Wall/DamageEffect.hs 49;" f
glauncherPic src/Dodge/Item/Draw/SPic.hs 393;" f glauncherPic src/Dodge/Item/Draw/SPic.hs 393;" f
glushortSize src/Shader/Parameters.hs 25;" f glushortSize src/Shader/Parameters.hs 25;" f
goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f goToPostStrat src/Dodge/Creature/Strategy.hs 10;" f
@@ -4899,16 +4899,16 @@ 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 71;" f makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 71;" f
makeFlak src/Dodge/Bullet.hs 141;" f makeFlak src/Dodge/Bullet.hs 141;" f
makeFlame src/Dodge/Flame.hs 57;" f makeFlame src/Dodge/Flame.hs 43;" f
makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 54;" f makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 54;" f
makeFlamelet src/Dodge/EnergyBall.hs 23;" f makeFlamelet src/Dodge/EnergyBall.hs 21;" f
makeFlamerSmokeAt src/Dodge/WorldEvent/Cloud.hs 68;" f makeFlamerSmokeAt src/Dodge/WorldEvent/Cloud.hs 68;" f
makeFlashBall src/Dodge/EnergyBall.hs 86;" f makeFlashBall src/Dodge/EnergyBall.hs 84;" f
makeFragBullets src/Dodge/Bullet.hs 126;" f makeFragBullets src/Dodge/Bullet.hs 126;" f
makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 13;" f makeGasCloud src/Dodge/WorldEvent/SpawnParticle.hs 13;" f
makeGrid src/Grid.hs 46;" f makeGrid src/Grid.hs 46;" f
makeIntInterval src/Dodge/Zoning/Base.hs 35;" f makeIntInterval src/Dodge/Zoning/Base.hs 35;" f
makeMovingEB src/Dodge/EnergyBall.hs 76;" f makeMovingEB src/Dodge/EnergyBall.hs 74;" f
makeMuzzleFlare src/Dodge/HeldUse.hs 647;" f makeMuzzleFlare src/Dodge/HeldUse.hs 647;" f
makeParagraph src/Justify.hs 6;" f makeParagraph src/Justify.hs 6;" f
makePathBetween src/Dodge/Path.hs 35;" f makePathBetween src/Dodge/Path.hs 35;" f
@@ -4942,7 +4942,7 @@ makeTypeCraft src/Dodge/Item/Craftable.hs 18;" f
makeTypeCraftNum src/Dodge/Item/Craftable.hs 12;" f makeTypeCraftNum src/Dodge/Item/Craftable.hs 12;" f
mapper src/Dodge/Item/Scope.hs 70;" f mapper src/Dodge/Item/Scope.hs 70;" f
maxAmmo src/Dodge/Item/MaxAmmo.hs 6;" f maxAmmo src/Dodge/Item/MaxAmmo.hs 6;" f
maxDamageType src/Dodge/Damage.hs 56;" f maxDamageType src/Dodge/Damage.hs 58;" f
maxInvSlots src/Dodge/Inventory/CheckSlots.hs 27;" f maxInvSlots src/Dodge/Inventory/CheckSlots.hs 27;" f
maxShowX src/Dodge/Combine/Graph.hs 50;" f maxShowX src/Dodge/Combine/Graph.hs 50;" f
maxViewDistance src/Dodge/Viewpoints.hs 26;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f
@@ -4951,8 +4951,8 @@ maybeClearDoorPath src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 71;" f
maybeClearDoorPaths src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 68;" f maybeClearDoorPaths src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 68;" f
maybeClearPath src/Dodge/Block.hs 75;" f maybeClearPath src/Dodge/Block.hs 75;" f
maybeClearPaths src/Dodge/Block.hs 72;" f maybeClearPaths src/Dodge/Block.hs 72;" f
maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 32;" f
maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 37;" f
maybeExitCombine src/Dodge/Update/Input/InGame.hs 536;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 536;" f
maybeOpenConsole src/Dodge/Update.hs 125;" f maybeOpenConsole src/Dodge/Update.hs 125;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f
@@ -5008,7 +5008,7 @@ midPadL src/Padding.hs 33;" f
midPoint src/Geometry.hs 83;" f midPoint src/Geometry.hs 83;" f
midWall src/Dodge/Placement/Instance/Wall.hs 27;" f midWall src/Dodge/Placement/Instance/Wall.hs 27;" f
minAndMax src/FoldableHelp.hs 109;" f minAndMax src/FoldableHelp.hs 109;" f
minCrIXOn src/Dodge/Zoning/Creature.hs 50;" f minCrIXOn src/Dodge/Zoning/Creature.hs 47;" f
minOn src/FoldableHelp.hs 35;" f minOn src/FoldableHelp.hs 35;" f
mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 349;" f mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 349;" f
miniGunCrit src/Dodge/Creature.hs 64;" f miniGunCrit src/Dodge/Creature.hs 64;" f
@@ -5920,7 +5920,7 @@ stone3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 439;" f
stone4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 373;" f stone4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 373;" f
stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 479;" f stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 479;" f
stoneDebris src/Dodge/Block/Debris.hs 137;" f stoneDebris src/Dodge/Block/Debris.hs 137;" f
stoneWallDamage src/Dodge/Wall/DamageEffect.hs 25;" f stoneWallDamage src/Dodge/Wall/DamageEffect.hs 27;" f
stopAllSounds src/Sound.hs 125;" f stopAllSounds src/Sound.hs 125;" f
stopBulletAt src/Dodge/Bullet.hs 197;" f stopBulletAt src/Dodge/Bullet.hs 197;" f
stopPushing src/Dodge/Block.hs 107;" f stopPushing src/Dodge/Block.hs 107;" f
@@ -6014,10 +6014,10 @@ thickCircle src/Picture/Base.hs 272;" f
thickLine src/Picture/Base.hs 244;" f thickLine src/Picture/Base.hs 244;" f
thickLineCol src/Picture/Base.hs 255;" f thickLineCol src/Picture/Base.hs 255;" f
thinHighBar src/Dodge/Room/Foreground.hs 77;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f
thingHit src/Dodge/WorldEvent/ThingsHit.hs 65;" f thingHit src/Dodge/WorldEvent/ThingsHit.hs 61;" f
thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 53;" f thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 49;" f
thingsHit src/Dodge/WorldEvent/ThingsHit.hs 29;" f thingsHit src/Dodge/WorldEvent/ThingsHit.hs 31;" f
thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 73;" f thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 70;" f
threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f
throwItem src/Dodge/Creature/Action.hs 205;" f throwItem src/Dodge/Creature/Action.hs 205;" f
tileTexCoords src/Tile.hs 11;" f tileTexCoords src/Tile.hs 11;" f
@@ -6203,7 +6203,7 @@ updateDelayedEvents src/Dodge/Update.hs 797;" f
updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f
updateDistortion src/Dodge/Distortion.hs 5;" f updateDistortion src/Dodge/Distortion.hs 5;" f
updateDistortions src/Dodge/Update.hs 532;" f updateDistortions src/Dodge/Update.hs 532;" f
updateEnergyBall src/Dodge/EnergyBall.hs 37;" f updateEnergyBall src/Dodge/EnergyBall.hs 35;" f
updateEnergyBalls src/Dodge/Update.hs 597;" f updateEnergyBalls src/Dodge/Update.hs 597;" f
updateEnterRegex src/Dodge/Update/Input/InGame.hs 480;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 480;" f
updateExpBarrel src/Dodge/Barreloid.hs 20;" f updateExpBarrel src/Dodge/Barreloid.hs 20;" f
@@ -6228,7 +6228,7 @@ updateItemWithOrientation src/Dodge/Creature/State.hs 271;" f
updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f
updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f
updateLampoid src/Dodge/Lampoid.hs 12;" f updateLampoid src/Dodge/Lampoid.hs 12;" f
updateLaser src/Dodge/Laser/Update.hs 14;" f updateLaser src/Dodge/Laser/Update.hs 13;" f
updateLasers src/Dodge/Update.hs 433;" f updateLasers src/Dodge/Update.hs 433;" f
updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f
updateLongPressInGame src/Dodge/Update/Input/InGame.hs 413;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 413;" f
@@ -6412,8 +6412,8 @@ wlOpaqueDraw src/Dodge/Render/Walls.hs 45;" f
wlSeeThroughDraw src/Dodge/Render/Walls.hs 48;" f wlSeeThroughDraw src/Dodge/Render/Walls.hs 48;" f
wlZoneSize src/Dodge/Zoning/Wall.hs 52;" f wlZoneSize src/Dodge/Zoning/Wall.hs 52;" f
wlsFromIXs src/Dodge/Zoning/Wall.hs 35;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 35;" f
wlsHit src/Dodge/WorldEvent/ThingsHit.hs 88;" f wlsHit src/Dodge/WorldEvent/ThingsHit.hs 84;" f
wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 96;" f wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 92;" f
wlsNearCirc src/Dodge/Zoning/Wall.hs 49;" f wlsNearCirc src/Dodge/Zoning/Wall.hs 49;" f
wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f
wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f
@@ -6457,13 +6457,13 @@ zipCount src/Dodge/Tree/Shift.hs 129;" f
zipCountDown src/Dodge/Room/Procedural.hs 118;" f zipCountDown src/Dodge/Room/Procedural.hs 118;" f
zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f
zoneClouds src/Dodge/Update.hs 440;" f zoneClouds src/Dodge/Update.hs 440;" f
zoneCreature src/Dodge/Zoning/Creature.hs 57;" f zoneCreature src/Dodge/Zoning/Creature.hs 54;" f
zoneCreatures src/Dodge/Update.hs 482;" f zoneCreatures src/Dodge/Update.hs 482;" f
zoneExtract src/Dodge/Zoning/Base.hs 52;" f zoneExtract src/Dodge/Zoning/Base.hs 52;" f
zoneMonoid src/Dodge/Zoning/Base.hs 83;" f zoneMonoid src/Dodge/Zoning/Base.hs 83;" f
zoneOfCirc src/Dodge/Zoning/Base.hs 24;" f zoneOfCirc src/Dodge/Zoning/Base.hs 24;" f
zoneOfCl src/Dodge/Zoning/Cloud.hs 24;" f zoneOfCl src/Dodge/Zoning/Cloud.hs 24;" f
zoneOfCr src/Dodge/Zoning/Creature.hs 47;" f zoneOfCr src/Dodge/Zoning/Creature.hs 44;" f
zoneOfPe src/Dodge/Zoning/Pathing.hs 49;" f zoneOfPe src/Dodge/Zoning/Pathing.hs 49;" f
zoneOfPn src/Dodge/Zoning/Pathing.hs 27;" f zoneOfPn src/Dodge/Zoning/Pathing.hs 27;" f
zoneOfPoint src/Dodge/Zoning/Base.hs 44;" f zoneOfPoint src/Dodge/Zoning/Base.hs 44;" f