diff --git a/src/Dodge/Barreloid.hs b/src/Dodge/Barreloid.hs index 19c175101..fdf5f5459 100644 --- a/src/Dodge/Barreloid.hs +++ b/src/Dodge/Barreloid.hs @@ -23,7 +23,7 @@ updateExpBarrel cr w | otherwise = makeExplosionAt (_crPos cr) 0 $ stopSounds w & cWorld . lWorld . creatures . at (_crID cr) .~ Nothing where g = _randGen w - damages = _csDamage $ _crState cr + damages = cr ^. crDamage pierceSparks :: [World -> World] pierceSparks = zipWith @@ -32,7 +32,7 @@ updateExpBarrel cr w as as = randomRs (-0.7, 0.7) g poss = _piercedPoints $ _barrelType $ _crType cr - newCr = Just $ applyFuseDamage $ set (crState . csDamage) [] $ damsToExpBarrel damages cr + newCr = Just $ applyFuseDamage $ set crDamage [] $ damsToExpBarrel damages cr applyFuseDamage cr' = cr' & crHP %~ subtract (length . _piercedPoints . _barrelType $ _crType cr') diff --git a/src/Dodge/Bullet.hs b/src/Dodge/Bullet.hs index c67742569..dd0b6f768 100644 --- a/src/Dodge/Bullet.hs +++ b/src/Dodge/Bullet.hs @@ -175,7 +175,7 @@ setFromToDams bu p = case _buPayload bu of damageThingHit :: Bullet -> (Point2, Either Creature Wall) -> World -> World 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) . crDamage .++~ 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 diff --git a/src/Dodge/Creature/Action/Blink.hs b/src/Dodge/Creature/Action/Blink.hs index 62a493543..8231ea1ec 100644 --- a/src/Dodge/Creature/Action/Blink.hs +++ b/src/Dodge/Creature/Action/Blink.hs @@ -67,8 +67,7 @@ unsafeBlinkAction cr w | otherwise = w & blinkActionFail cr - & cWorld . lWorld . creatures . ix cid . crState . csDamage - .:~ Enterrement 100000000 + & cWorld . lWorld . creatures . ix cid . crDamage .:~ Enterrement 100000000 where success = fromMaybe True $ do wl <- snd $ collidePointWallsFilter (const True) mwp cpos w diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index 3c7839a3d..2915d5885 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -86,7 +86,7 @@ followImpulse cr w imp = case imp of posFromID cid' = w ^?! cWorld . lWorld . creatures . ix cid' . crPos rr a = randomR (- a, a) $ _randGen w hitCr i = - ( cWorld . lWorld . creatures . ix i . crState . csDamage + ( cWorld . lWorld . creatures . ix i . crDamage .:~ Blunt 100 (posFromID i) (posFromID i-cpos)-- (PushBackDamage 5) ) . soundStart (CrSound cid) cpos hitS Nothing diff --git a/src/Dodge/Creature/Inanimate.hs b/src/Dodge/Creature/Inanimate.hs index 51ef9d809..c9369f632 100644 --- a/src/Dodge/Creature/Inanimate.hs +++ b/src/Dodge/Creature/Inanimate.hs @@ -19,10 +19,6 @@ barrel = defaultInanimate { _crHP = 500 , _crType = BarrelCrit PlainBarrel - , _crState = - defaultState --- { _csSpState = Barrel [] --- } , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] } @@ -31,10 +27,6 @@ explosiveBarrel = defaultInanimate { _crHP = 400 , _crType = BarrelCrit (ExplosiveBarrel []) - , _crState = - defaultState --- { _csSpState = Barrel [] --- } , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] } -- & crMaterial .~ Crystal diff --git a/src/Dodge/Creature/LauncherCrit.hs b/src/Dodge/Creature/LauncherCrit.hs index c1933ed00..595b84243 100644 --- a/src/Dodge/Creature/LauncherCrit.hs +++ b/src/Dodge/Creature/LauncherCrit.hs @@ -13,7 +13,6 @@ launcherCrit :: Creature launcherCrit = defaultCreature { _crInv = IM.fromList [(0, rLauncher)] - , _crState = defaultState , _crHP = 300 } -- & crType . skinUpper .~ lightx4 red diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 77c62afbe..ebfdde015 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -93,7 +93,7 @@ deadRot cr = overPosSH (Q.rotateToZ d) maybe (V3 1 0 0) (addZ 0 . unitVectorAtAngle . subtract (_crDir cr + pi)) - (damageDirection . _csDamage $ _crState cr) + (damageDirection $ _crDamage cr) scalp :: Creature -> Shape {-# INLINE scalp #-} diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 3d08c1c2d..8ec59ae31 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -77,7 +77,7 @@ checkDeath :: Creature -> World -> World checkDeath cr w | _crHP cr > 0 = w - & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] + & cWorld . lWorld . creatures . ix (_crID cr) . crDamage .~ [] | _crHP cr <= -200 = w & dropByState cr -- the order of @@ -86,7 +86,7 @@ checkDeath cr w & addCrGibs cr | _crHP cr > -200 && _crDeathTimer cr < 5 = w - & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] + & cWorld . lWorld . creatures . ix (_crID cr) . crDamage .~ [] & cWorld . lWorld . creatures . ix (_crID cr) . crDeathTimer +~ 1 | otherwise = w @@ -104,7 +104,7 @@ checkDeath cr w -- could look at the amount of damage here (given by maxDamage) too corpseOrGib :: Creature -> World -> World -corpseOrGib cr = case cr ^? crState . csDamage . to maxDamageType . _Just . _1 of +corpseOrGib cr = case cr ^? crDamage . to maxDamageType . _Just . _1 of Just CookingDamage -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ scorchSPic) Just PoisonDamage -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ poisonSPic) Just PhysicalDamage | _crPastDamage cr > 200 -> addCrGibs cr @@ -134,7 +134,7 @@ dropByState cr w = foldl' (flip (dropItem cr)) w $ IM.keys $ _crInv cr doDamage :: Creature -> World -> World doDamage cr = applyPastDamages cr . applyCreatureDamage dams cr where - dams = _csDamage $ _crState cr + dams = cr ^. crDamage -- TODO generalise shake to arbitrary damage amounts applyPastDamages :: Creature -> World -> World diff --git a/src/Dodge/Damage.hs b/src/Dodge/Damage.hs index e736e5c7e..18b1cc32c 100644 --- a/src/Dodge/Damage.hs +++ b/src/Dodge/Damage.hs @@ -20,11 +20,11 @@ import FoldableHelp damageCrWlID :: Damage -> CrWlID -> World -> World damageCrWlID dam = \case NothingID -> id - CrID cid -> cWorld . lWorld . creatures . ix cid . crState . csDamage .:~ dam + CrID cid -> cWorld . lWorld . creatures . ix cid . crDamage .:~ dam WlID wlid -> cWorld . lWorld . wallDamages %~ IM.insertWith (++) wlid [dam] damageCrWl :: Damage -> Either Creature Wall -> World -> World -damageCrWl dt (Left cr) = cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .:~ dt +damageCrWl dt (Left cr) = cWorld . lWorld . creatures . ix (_crID cr) . crDamage .:~ dt damageCrWl dt (Right wl) = cWorld . lWorld . wallDamages %~ IM.insertWith (++) (_wlID wl) [dt] -- could sort for damage amount as well diff --git a/src/Dodge/Data/Creature.hs b/src/Dodge/Data/Creature.hs index d00ad6c9a..e295bb2e4 100644 --- a/src/Dodge/Data/Creature.hs +++ b/src/Dodge/Data/Creature.hs @@ -46,7 +46,7 @@ data Creature = Creature , _crInv :: IM.IntMap Item , _crManipulation :: Manipulation , _crEquipment :: M.Map EquipSite Int - , _crState :: CreatureState + , _crDamage :: [Damage] , _crPastDamage :: Int , _crStance :: Stance , _crActionPlan :: ActionPlan diff --git a/src/Dodge/Data/Creature/State.hs b/src/Dodge/Data/Creature/State.hs index 2eeb38bcd..ed40d3ba1 100644 --- a/src/Dodge/Data/Creature/State.hs +++ b/src/Dodge/Data/Creature/State.hs @@ -10,18 +10,6 @@ import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.IntSet as IS -import Dodge.Data.Damage - -data CreatureState = CrSt - { _csDamage :: [Damage] --- , _csSpState :: CrSpState - } - deriving (Eq, Ord, Show, Read) --Generic, Flat) - ---data CrSpState --- = Barrel -- {_piercedPoints :: [Point2]} --- | GenCr --- deriving (Eq, Ord, Show, Read) --Generic, Flat) data Faction = GenericFaction Int @@ -44,10 +32,6 @@ data CrGroup | ShieldGroup deriving (Eq, Ord, Show, Read) --Generic, Flat) -makeLenses ''CreatureState ---makeLenses ''CrSpState makeLenses ''CrGroup ---deriveJSON defaultOptions ''CrSpState deriveJSON defaultOptions ''Faction deriveJSON defaultOptions ''CrGroup -deriveJSON defaultOptions ''CreatureState diff --git a/src/Dodge/Default/Creature.hs b/src/Dodge/Default/Creature.hs index adfea4d4d..32c2e2bec 100644 --- a/src/Dodge/Default/Creature.hs +++ b/src/Dodge/Default/Creature.hs @@ -26,7 +26,7 @@ defaultCreature = , _crInv = IM.empty , _crManipulation = Manipulator SelNothing -- , _crInvCapacity = 25 - , _crState = defaultState + , _crDamage = [] -- , _crCorpse = MakeDefaultCorpse -- , _crMaterial = Flesh , _crPastDamage = 0 @@ -108,10 +108,10 @@ defaultAimingCrit = defaultCreature yourDefaultStrideLength :: Int yourDefaultStrideLength = 40 -defaultState :: CreatureState -defaultState = - CrSt - { _csDamage = [] --- , _csSpState = GenCr --- , _csDropsOnDeath = DropAll - } +--defaultState :: CreatureState +--defaultState = +-- CrSt +-- { _csDamage = [] +---- , _csSpState = GenCr +---- , _csDropsOnDeath = DropAll +-- } diff --git a/src/Dodge/EnergyBall.hs b/src/Dodge/EnergyBall.hs index 0d336f411..2d08cbf81 100644 --- a/src/Dodge/EnergyBall.hs +++ b/src/Dodge/EnergyBall.hs @@ -126,4 +126,4 @@ damageWlCircle :: Damage -> IM.IntMap [Damage] -> (Point2, Wall) -> IM.IntMap [D damageWlCircle dam wls (_, wl) = wls & at (_wlID wl) . non mempty .:~ dam damageCrCircle :: Damage -> IM.IntMap Creature -> (Point2, Creature) -> IM.IntMap Creature -damageCrCircle dam crs (_, cr) = crs & ix (_crID cr) . crState . csDamage .:~ dam +damageCrCircle dam crs (_, cr) = crs & ix (_crID cr) . crDamage .:~ dam diff --git a/src/Dodge/Flame.hs b/src/Dodge/Flame.hs index 5fc71c203..d2ca362b7 100644 --- a/src/Dodge/Flame.hs +++ b/src/Dodge/Flame.hs @@ -41,7 +41,7 @@ updateFlame w pt (crsHitRadial ep r w) r = flameSize pt damcr w' (_, cr) = - w' & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage + w' & cWorld . lWorld . creatures . ix (_crID cr) . crDamage .:~ Flaming 1 damwl w' (_, wl) = w' & cWorld . lWorld . wallDamages . at (_wlID wl) diff --git a/src/Dodge/Prop/Gib.hs b/src/Dodge/Prop/Gib.hs index dbbb2047a..fb0ed2d6a 100644 --- a/src/Dodge/Prop/Gib.hs +++ b/src/Dodge/Prop/Gib.hs @@ -33,7 +33,7 @@ aGib = } addCrGibs :: Creature -> World -> World -addCrGibs cr = case damageDirection $ _csDamage $ _crState cr of +addCrGibs cr = case damageDirection $ _crDamage cr of Nothing -> addGibAt 25 (_skinHead skin) cpos . addGibsAt 3 7 (_skinLower skin) cpos diff --git a/src/Dodge/Prop/Moving.hs b/src/Dodge/Prop/Moving.hs index b4f8c2b54..7babff61c 100644 --- a/src/Dodge/Prop/Moving.hs +++ b/src/Dodge/Prop/Moving.hs @@ -22,7 +22,7 @@ fallSmallBounceDamage pr w = | otherwise = id dodamage' cr | dist (_crPos cr) p < crRad (cr ^. crType) + 5 = - cr & crState . csDamage + cr & crDamage .:~ Crushing (floor . (* 10) . max 0 . subtract 5 . abs $ _prVelZ pr) v --(p -.- v) p (p +.+ v) | otherwise = cr diff --git a/src/Dodge/Shockwave/Update.hs b/src/Dodge/Shockwave/Update.hs index 465e1d96c..209560a36 100644 --- a/src/Dodge/Shockwave/Update.hs +++ b/src/Dodge/Shockwave/Update.hs @@ -37,9 +37,7 @@ moveShockwave w sw -- this is not expansive enough damCr cr | _crID cr `elem` is || dist (_crPos cr) p >= rad + crRad (cr ^. crType) = cr - | otherwise = - cr & crState . csDamage - .:~ Explosive dam p + | otherwise = cr & crDamage .:~ Explosive dam p --where -- cpos = _crPos cr @@ -61,9 +59,7 @@ moveInverseShockwave w sw -- hitBlocks = wallsOnCirc' p rad $ wallsNearPoint' p w damCr cr | dist (_crPos cr) p >= rad + crRad (cr ^. crType) = cr - | otherwise = - cr & crState . csDamage - .:~ Explosive 1 p + | otherwise = cr & crDamage .:~ Explosive 1 p --where -- cpos = _crPos cr diff --git a/src/Dodge/Update/Cloud.hs b/src/Dodge/Update/Cloud.hs index 9383cc1ab..83909055f 100644 --- a/src/Dodge/Update/Cloud.hs +++ b/src/Dodge/Update/Cloud.hs @@ -13,7 +13,6 @@ cloudPoisonDamage c w = w & dodamagesto (filter f $ crsNearPoint clpos w) dodamagesto :: [Creature] -> World -> World dodamagesto scrs mcrs = foldl' (flip doDam) mcrs scrs doDam cr = - cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage - .:~ Poison 1 + cWorld . lWorld . creatures . ix (_crID cr) . crDamage .:~ Poison 1 f cr = dist3 (addZ 20 $ _crPos cr) (_clPos c) < crRad (cr ^. crType) + _clRad c + 10 clpos = stripZ $ _clPos c diff --git a/src/Dodge/WorldEvent/Damage.hs b/src/Dodge/WorldEvent/Damage.hs index 63959bcd8..fbb026ab4 100644 --- a/src/Dodge/WorldEvent/Damage.hs +++ b/src/Dodge/WorldEvent/Damage.hs @@ -15,6 +15,6 @@ damThingHitWith :: World -> World damThingHitWith partDT sp ep mayEiCrWl = case mayEiCrWl of - Just (hitp, Left cr) -> cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .:~ partDT sp hitp ep + 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