diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index a4e68be96..6602aea75 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -211,7 +211,7 @@ unsafeBlinkAction cr w $ inverseShockwaveAt cpos 40 2 2 w | otherwise = w & blinkActionFail cr - & creatures . ix cid . crState . crDamage .:~ + & creatures . ix cid . crState . csDamage .:~ Damage ENTERREMENT 10000 mwp mwp mwp NoDamageEffect where success = fromMaybe True $ do diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index 67f86c334..4a5912ff0 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -92,7 +92,7 @@ followImpulse cr w imp = case imp of cid = _crID cr posFromID cid' = _crPos $ _creatures w IM.! cid' rr a = randomR (-a,a) $ _randGen w - hitCr i = (creatures . ix i . crState . crDamage + hitCr i = (creatures . ix i . crState . csDamage .:~ Damage BLUNT 100 cpos (posFromID i) (posFromID i) NoDamageEffect ) . soundStart (CrSound cid) cpos hitS Nothing diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index b65bce137..3b0bbe84c 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -12,7 +12,7 @@ import Data.Maybe useItem :: Creature -> World -> World useItem cr' w = fromMaybe (f w) $ do - cr <- w ^? creatures . ix (_crID cr') + cr <- w ^? creatures . ix (_crID cr') it <- cr ^? crInv . ix (_crInvSel cr) return $ itemEffect cr it w where diff --git a/src/Dodge/Creature/Inanimate.hs b/src/Dodge/Creature/Inanimate.hs index fbf747f7a..1e56b2a44 100644 --- a/src/Dodge/Creature/Inanimate.hs +++ b/src/Dodge/Creature/Inanimate.hs @@ -37,7 +37,7 @@ barrel = defaultInanimate , color (greyN 0.5) $ circleSolid 8 ] , _crState = defaultState - {_crSpState = Barrel [] + {_csSpState = Barrel [] } , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] } @@ -51,7 +51,7 @@ explosiveBarrel = defaultInanimate . upperPrismPoly 20 $ polyCirc 4 10 , _crState = defaultState - {_crSpState = Barrel [] + {_csSpState = Barrel [] } , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] ,_crApplyDamage = \_ _ -> id @@ -68,7 +68,7 @@ updateExpBarrel cr w | otherwise = makeExplosionAt (_crPos cr) $ stopSounds w & creatures . at (_crID cr) .~ Nothing where g = _randGen w - damages = _crDamage $ _crState cr + damages = _csDamage $ _crState cr pierceSparks :: [World -> World] pierceSparks = zipWith4 (\p a -> createBarrelSpark (_crPos cr +.+ p) (a + argV p) (Just $ _crID cr)) @@ -76,10 +76,10 @@ updateExpBarrel cr w as = randomRs (-0.7,0.7) g colids = randomRs (0,11) g times = randomRs (2,5) g - poss = _piercedPoints $ _crSpState $ _crState cr - newCr = Just $ applyFuseDamage $ set (crState . crDamage) [] $ damToExpBarrel damages cr + poss = _piercedPoints $ _csSpState $ _crState cr + newCr = Just $ applyFuseDamage $ set (crState . csDamage) [] $ damToExpBarrel damages cr applyFuseDamage cr' = cr' & crHP %~ - subtract (length . _piercedPoints . _crSpState $ _crState cr') + subtract (length . _piercedPoints . _csSpState $ _crState cr') hiss | null poss = id | otherwise = soundMultiFrom [BarrelHiss 0,BarrelHiss 1] (_crPos cr) foamSprayLoopS (Just 1) stopSounds = stopSoundFrom (BarrelHiss 0) . stopSoundFrom (BarrelHiss 1) @@ -93,7 +93,7 @@ damToExpBarrel ds cr = foldr damToExpBarrel' (foldr damToExpBarrel' cr pierceDam damToExpBarrel' :: Damage -> Creature -> Creature damToExpBarrel' dm cr = case _dmType dm of - PIERCING -> over (crState . crSpState . piercedPoints) ((:) $ int -.- _crPos cr) + PIERCING -> over (crState . csSpState . piercedPoints) ((:) $ int -.- _crPos cr) $ cr & crHP -~ div amount 200 POISONDAM -> cr SPARKING -> cr diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index a4e18386c..c84bdf6ea 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -211,7 +211,7 @@ deadRot :: Creature -> Shape -> Shape deadRot cr = overPosSH (Q.rotateToZ d) where d = maybe (V3 1 0 0) (addZ 0 . unitVectorAtAngle . subtract (_crDir cr+pi)) - (damageDirection . _crDamage $ _crState cr) + (damageDirection . _csDamage $ _crState cr) scalp :: Creature -> Shape {-# INLINE scalp #-} diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 541e0ffd0..a1f3ee7c9 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -81,10 +81,11 @@ checkDeath cr w removecr | _crID cr == 0 = (creatures . ix (_crID cr) . crUpdate .~ const id) . (creatures . ix (_crID cr) . crPict .~ const mempty) - . (creatures . ix (_crID cr) . crHP .~ 0) -- hack to get around player creature being killed but left with more than 0 hp + . (creatures . ix (_crID cr) . crHP .~ 0) + -- hack to get around player creature being killed but left with more than 0 hp | otherwise = creatures . at (_crID cr) .~ Nothing corpseOrGib :: Creature -> World -> World -corpseOrGib cr w = case maxDamageType (_crDamage (_crState cr)) of +corpseOrGib cr w = case maxDamageType (_csDamage (_crState cr)) of Just (FLAMING,_) -> w & plNew corpses cpID (thecorpse & cpPict %~ fmap scorchSPic) Just (ELECTRICAL,_) -> w & plNew corpses cpID thecorpse Just (POISONDAM,_) -> w & plNew corpses cpID (thecorpse & cpPict %~ fmap poisonSPic) @@ -139,21 +140,21 @@ internalUpdate cr = creatures . ix (_crID cr) %~ -- | Drop items according to the creature state. -- TODO make sure this doesn't mess up any ItemPosition dropByState :: Creature -> World -> World -dropByState cr w = foldr (dropItem cr) w $ case cr ^. crState . crDropsOnDeath of +dropByState cr w = foldr (dropItem cr) w $ case cr ^. crState . csDropsOnDeath of DropAll -> IM.keys $ _crInv cr DropSpecific xs -> xs DropAmount n -> take n $ evalState (shuffle $ IM.keys $ _crInv cr) (_randGen w) clearDamage :: Creature -> World -> World clearDamage cr w = w - & creatures . ix (_crID cr) . crState . crDamage .~ [] + & creatures . ix (_crID cr) . crState . csDamage .~ [] doDamage :: Creature -> World -> World doDamage cr w = w & applyPastDamages cr & _crApplyDamage cr dams cr where - dams = _crDamage $ _crState cr + dams = _csDamage $ _crState cr -- TODO generalise shake to arbitrary damage amounts applyPastDamages :: Creature -> World -> World diff --git a/src/Dodge/Damage.hs b/src/Dodge/Damage.hs index 925be5312..f19c47797 100644 --- a/src/Dodge/Damage.hs +++ b/src/Dodge/Damage.hs @@ -8,7 +8,7 @@ import LensHelp import qualified Data.Map.Strict as M damageCrWall :: Damage -> Either Creature Wall -> World -> World -damageCrWall dt (Left cr) = creatures . ix (_crID cr) . crState . crDamage .:~ dt +damageCrWall dt (Left cr) = creatures . ix (_crID cr) . crState . csDamage .:~ dt damageCrWall dt (Right wl) = damageWall dt wl damageDirection :: [Damage] -> Maybe Float diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 2744e5e37..38653e8c1 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -1341,10 +1341,9 @@ isMovementDam dm = case _dmType dm of _ -> False data CreatureState = CrSt - { _crDamage :: [Damage] --- , _crPastDamage :: V.Vector [Damage] - , _crSpState :: CrSpState - , _crDropsOnDeath :: CreatureDropType + { _csDamage :: [Damage] + , _csSpState :: CrSpState + , _csDropsOnDeath :: CreatureDropType } data EffectArguments diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index da14db57b..4134c12a3 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -148,10 +148,10 @@ yourDefaultStrideLength = 40 defaultState :: CreatureState defaultState = CrSt - { _crDamage = [] + { _csDamage = [] -- , _crPastDamage = V.fromList $ replicate 20 [] - , _crSpState = GenCr - , _crDropsOnDeath = DropAll + , _csSpState = GenCr + , _csDropsOnDeath = DropAll } defaultEquipment :: Item diff --git a/src/Dodge/Particle/HitEffect/ExpireAndDamage.hs b/src/Dodge/Particle/HitEffect/ExpireAndDamage.hs index 7fa54f99e..bcab3b08e 100644 --- a/src/Dodge/Particle/HitEffect/ExpireAndDamage.hs +++ b/src/Dodge/Particle/HitEffect/ExpireAndDamage.hs @@ -21,7 +21,7 @@ doDamages :: (Particle -> Point2 -> [Damage]) -> World -> World doDamages fdm (p,thhit) bt = case thhit of - Left cr -> creatures . ix (_crID cr) . crState . crDamage .++~ dams + Left cr -> creatures . ix (_crID cr) . crState . csDamage .++~ dams Right wl -> wallDamages %~ IM.insertWith (++) (_wlID wl) dams where dams = fdm bt p diff --git a/src/Dodge/Prop/Gib.hs b/src/Dodge/Prop/Gib.hs index 28ffd9f98..6a7433e91 100644 --- a/src/Dodge/Prop/Gib.hs +++ b/src/Dodge/Prop/Gib.hs @@ -42,7 +42,7 @@ drawGib x pr = flesh <> skin addCrGibs :: Creature -> World -> World -addCrGibs cr w = case damageDirection $ _crDamage $ _crState cr of +addCrGibs cr w = case damageDirection $ _csDamage $ _crState cr of Nothing -> w & 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 81b751f42..bef7e9433 100644 --- a/src/Dodge/Prop/Moving.hs +++ b/src/Dodge/Prop/Moving.hs @@ -29,7 +29,7 @@ fallSmallBounceDamage pr w = w | _pjPosZ pr < 25 = creatures %~ fmap dodamage' | otherwise = id dodamage' cr - | dist (_crPos cr) p < _crRad cr + 5 = cr & crState . crDamage + | dist (_crPos cr) p < _crRad cr + 5 = cr & crState . csDamage .:~ Damage CRUSHING (floor . (*10) . max 0 . subtract 5 . abs $ _pjVelZ pr) (p -.- v) p (p +.+ v) NoDamageEffect | otherwise = cr diff --git a/src/Dodge/Room/Boss.hs b/src/Dodge/Room/Boss.hs index c1ba0807d..39a9840d0 100644 --- a/src/Dodge/Room/Boss.hs +++ b/src/Dodge/Room/Boss.hs @@ -62,7 +62,7 @@ armouredChasers = do let theCrits = zipWith3 (\p a c -> sPS p a (PutCrit c)) ps as cs treeFromPost [corridor,corridor] <$> (randomMediumRoom <&> rmPmnts %~ (++ theCrits)) where - cs = (armourChaseCrit & crState . crDropsOnDeath .~ DropSpecific [0]) + cs = (armourChaseCrit & crState . csDropsOnDeath .~ DropSpecific [0]) : replicate 4 chaseCrit randomMediumRoom :: RandomGen g => State g Room diff --git a/src/Dodge/Room/NoNeedWeapon.hs b/src/Dodge/Room/NoNeedWeapon.hs index d46e6d151..1de6b8110 100644 --- a/src/Dodge/Room/NoNeedWeapon.hs +++ b/src/Dodge/Room/NoNeedWeapon.hs @@ -29,7 +29,7 @@ centerVaultExplosiveExit = do [sPS (V2 0 110) 0 $ PutCrit explosiveBarrel ,sPS (V2 5 115) 0 $ PutCrit explosiveBarrel ,sPS (V2 0 120) 0 $ PutCrit explosiveBarrel - ,sPS (V2 0 0) 0 $ PutCrit (cr & crState . crDropsOnDeath .~ DropAll) + ,sPS (V2 0 0) 0 $ PutCrit (cr & crState . csDropsOnDeath .~ DropAll) ] centerVaultRoom 120 120 50 <&> rmPmnts %~ (extraPS ++) --r <- centerVaultRoom 120 120 50 <&> rmPmnts %~ (extraPS ++) diff --git a/src/Dodge/WorldEvent/Damage.hs b/src/Dodge/WorldEvent/Damage.hs index 8c995b10d..6bbd0c4ef 100644 --- a/src/Dodge/WorldEvent/Damage.hs +++ b/src/Dodge/WorldEvent/Damage.hs @@ -14,6 +14,6 @@ damThingHitWith -> World -> World damThingHitWith partDT sp ep mayEiCrWl = case mayEiCrWl of - Just (hitp,Left cr) -> creatures . ix (_crID cr) . crState . crDamage .:~ partDT sp hitp ep + Just (hitp,Left cr) -> creatures . ix (_crID cr) . crState . csDamage .:~ partDT sp hitp ep Just (hitp,Right wl) -> damageWall (partDT sp hitp ep) wl Nothing -> id diff --git a/src/Dodge/WorldEvent/Shockwave.hs b/src/Dodge/WorldEvent/Shockwave.hs index 050b3ca6e..d744afaa0 100644 --- a/src/Dodge/WorldEvent/Shockwave.hs +++ b/src/Dodge/WorldEvent/Shockwave.hs @@ -67,7 +67,7 @@ mvShockwave is w pt hitBlocks = wallsOnCirc p rad $ wallsNearPoint p w damCr cr | _crID cr `elem` is || dist (_crPos cr) p >= rad + _crRad cr = cr - | otherwise = cr & crState . crDamage .:~ + | otherwise = cr & crState . csDamage .:~ Damage PUSHDAM dam cpos cpos cpos (PushBackDamage (25 * push *.* squashNormalizeV (_crPos cr -.- p))) where @@ -107,7 +107,7 @@ moveInverseShockwave w pt hitBlocks = wallsOnCirc p rad $ wallsNearPoint p w damCr cr | dist (_crPos cr) p >= rad + _crRad cr = cr - | otherwise = cr & crState . crDamage .:~ + | otherwise = cr & crState . csDamage .:~ Damage PUSHDAM 1 cpos cpos cpos (PushBackDamage $ 25 *.* squashNormalizeV (p -.- cpos)) where cpos = _crPos cr diff --git a/src/Dodge/WorldEvent/SpawnParticle.hs b/src/Dodge/WorldEvent/SpawnParticle.hs index 18c6b6e3b..6d5088656 100644 --- a/src/Dodge/WorldEvent/SpawnParticle.hs +++ b/src/Dodge/WorldEvent/SpawnParticle.hs @@ -232,7 +232,7 @@ cloudPoisonDamage c w = w & creatures %~ flip (foldr (IM.adjust doDam)) damagedC where damagedCrs = IM.keys $ IM.filter f $ creaturesNearPoint clpos w f cr = dist3 (addZ 20 $ _crPos cr) (_clPos c) < _crRad cr + _clRad c + 10 - doDam cr = cr & crState . crDamage .:~ Damage POISONDAM 1 clpos clpos clpos NoDamageEffect + doDam cr = cr & crState . csDamage .:~ Damage POISONDAM 1 clpos clpos clpos NoDamageEffect clpos = stripZ $ _clPos c incBall :: RandomGen g => Point2 -> State g Particle