From ad998fb62221d1bdf8331de25898fc32e83c5619 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 8 May 2026 10:45:05 +0100 Subject: [PATCH] Remove destroyed creatures rather than setting flag Sill only set flag for avatar --- src/Dodge/Barreloid.hs | 4 ++-- src/Dodge/Base/Collide.hs | 2 +- src/Dodge/Creature/Test.hs | 2 +- src/Dodge/Creature/Update.hs | 9 +++++---- src/Dodge/Data/Creature.hs | 9 ++++++++- src/Dodge/TestString.hs | 1 - src/Dodge/Update.hs | 17 +++++++++-------- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/Dodge/Barreloid.hs b/src/Dodge/Barreloid.hs index e7452acae..b8a0ece73 100644 --- a/src/Dodge/Barreloid.hs +++ b/src/Dodge/Barreloid.hs @@ -30,7 +30,7 @@ updateExpBarrel ps cr w = case cr ^. crHP of HP _ -> w & makeExplosionAt (CrIndirectO (cr ^. crID)) ((cr ^. crPos) & _z +~ 20) 0 - & cWorld . lWorld . creatures . ix (_crID cr) . crHP .~ CrDestroyed Gibbed + & cWorld . lWorld . creatures . at (_crID cr) .~ Nothing _ -> w where f w' p = makeSpark NormalSpark (p + normalizeV p + cr ^. crPos . _xy) (argV p) w' @@ -43,7 +43,7 @@ updateExpBarrel ps cr w = case cr ^. crHP of updateBarrel :: Creature -> World -> World updateBarrel cr = case cr ^. crHP of HP x | x > 0 -> doDamage (cr ^. crID) - HP _ -> cWorld . lWorld . creatures . ix (_crID cr) . crHP .~ CrDestroyed Gibbed + HP _ -> cWorld . lWorld . creatures . at (_crID cr) .~ Nothing _ -> id damsToExpBarrel :: [Damage] -> Creature -> Creature diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 799efdc0f..9d2bfa15c 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -199,7 +199,7 @@ crHeight cr = case cr ^. crHP of BarrelCrit{} -> 20 _ -> error $ "Need to define crHeight for this crType:\n" <> unlines (prettyShort (cr ^. crType)) CrIsCorpse{} -> Just 5 - CrDestroyed{} -> Nothing + AvatarDestroyed{} -> Nothing wallToSurface :: Wall -> (Point3, Point3, [(Point3, Point3)]) wallToSurface wl = (g x, g $ vNormal (x - y), [(g x, g (y - x)), (g y, g (x - y))]) diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index 6266c343a..466b193ea 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -138,7 +138,7 @@ hasAutoDoorBody cr = crittype && notdestroyed notdestroyed = case cr ^. crHP of HP {} -> True CrIsCorpse {} -> True - CrDestroyed {} -> False + AvatarDestroyed {} -> False crittype = case cr ^. crType of SlimeCrit {} -> False BeeCrit {} -> False diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 18c3a7328..accd3e4a0 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -46,10 +46,11 @@ import qualified Data.IntSet as IS -- allow for knockbacks etc to be determined as well as intended movements updateCreature :: Creature -> World -> World updateCreature cr - | cr ^. crPos . _z < negate 300 = (tocr . crHP .~ CrDestroyed Pitted) . destroyAllInvItems cr + | cr ^. crPos . _z < negate 300 = (cWorld . lWorld . creatures . at (cr ^. crID) %~ destroyCreature) + . destroyAllInvItems cr | otherwise = case cr ^. crHP of CrIsCorpse{} -> cleardamage . updateCarriage (_crID cr) . damageCorpse (_crID cr) cr - CrDestroyed{} -> id + AvatarDestroyed{} -> id HP{} -> cleardamage . updateLivingCreature cr where cleardamage = tocr . crDamage .~ mempty @@ -251,7 +252,7 @@ updateCalmBee cr cid w slimeCritUpdate :: Int -> World -> World slimeCritUpdate cid w - | r < 5 = w & cWorld . lWorld . creatures . ix cid . crHP .~ CrDestroyed Gibbed + | r < 5 = w & cWorld . lWorld . creatures . at cid .~ Nothing | Just hitp <- w ^? cWorld . lWorld . creatures . ix cid . crDamage . ix 0 . dmPos , Just hitv <- w ^? cWorld . lWorld . creatures . ix cid . crDamage . ix 0 . dmVector , Just w' <- splitSlimeCrit' hitp hitv cid cr w = w' @@ -459,7 +460,7 @@ corpseOrGib cr w = Just PhysicalDamage | _crPain cr > 300 -> makeCrGibs cr - . sethp (CrDestroyed Gibbed) + . (cWorld . lWorld . creatures . at (cr ^. crID) %~ destroyCreature) . dodeathsound GibsDeath _ -> sethp (CrIsCorpse thecorpse) diff --git a/src/Dodge/Data/Creature.hs b/src/Dodge/Data/Creature.hs index 5bdee9e04..b5b261944 100644 --- a/src/Dodge/Data/Creature.hs +++ b/src/Dodge/Data/Creature.hs @@ -63,7 +63,14 @@ data Creature = Creature data CrHP = HP Int | CrIsCorpse SPic - | CrDestroyed CrDestructionType + | AvatarDestroyed +-- | CrDestroyed CrDestructionType + +destroyCreature :: Maybe Creature -> Maybe Creature +destroyCreature mcr + | Just cr <- mcr + , _crID cr == 0 = Just cr{_crHP = AvatarDestroyed} + | otherwise = Nothing data CrDestructionType = Gibbed | Pitted | Swallowed diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 9b59ef9fe..8d7aaeb87 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -51,7 +51,6 @@ crslime :: Creature -> Int crslime cr = case cr ^. crType of SlimeCrit {_slimeSlime=r} | HP{} <- cr ^. crHP -> r -- r ^ (2::Int) HiveCrit {_hiveSlime=x} -> x - BeeCrit {} | CrDestroyed{} <- cr ^. crHP -> 0 BeeCrit {_beeSlime=x} -> 400 + x _ -> 0 diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 1c55e5ee5..0833ff1f6 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -611,13 +611,14 @@ setOldPos cr = cr & crOldPos .~ _crPos cr zoneCreatures :: World -> World zoneCreatures w = - w & crZoning .~ foldl' zoneCreature mempty (IM.filter zonableCreature $ w ^. cWorld . lWorld . creatures) +-- w & crZoning .~ foldl' zoneCreature mempty (IM.filter zonableCreature $ w ^. cWorld . lWorld . creatures) + w & crZoning .~ foldl' zoneCreature mempty (w ^. cWorld . lWorld . creatures) -zonableCreature :: Creature -> Bool -zonableCreature cr = case cr ^. crHP of - HP{} -> True - CrIsCorpse{} -> True - CrDestroyed{} -> False +--zonableCreature :: Creature -> Bool +--zonableCreature cr = case cr ^. crHP of +-- HP{} -> True +-- CrIsCorpse{} -> True +-- AvatarDestroyed{} -> False updateCreatureSoundPositions :: World -> World updateCreatureSoundPositions w = @@ -1005,7 +1006,7 @@ canSpring cr = cr ^. crPos . _z >= 0 && case cr ^. crHP of HP{} -> True CrIsCorpse{} -> True - CrDestroyed{} -> False + AvatarDestroyed{} -> False crCrSpring :: Creature -> Creature -> World -> World crCrSpring c1 c2 @@ -1087,7 +1088,7 @@ feedSlime s c w = fromMaybe w $ do & slimeSuck s c else w - & cWorld . lWorld . creatures . ix (c ^. crID) . crHP .~ CrDestroyed Swallowed + & cWorld . lWorld . creatures . at (c ^. crID) %~ destroyCreature & cWorld . lWorld . creatures . ix (s ^. crID) %~ f & slimeEatSound (s ^. crID) (s ^. crPos . _xy) where