From fcb02850d04c74e8e3dae23f5c23a7995d7e512f Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 25 Sep 2025 08:48:20 +0100 Subject: [PATCH] Move toward not removing creatures on death --- src/Dodge/Data/Creature.hs | 7 ++++++ src/Dodge/Data/Machine/Sensor.hs | 1 + src/Dodge/Machine/Update.hs | 5 ++++ tags | 40 +++++++++++++++++--------------- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/Dodge/Data/Creature.hs b/src/Dodge/Data/Creature.hs index 65830857e..89fc94ab9 100644 --- a/src/Dodge/Data/Creature.hs +++ b/src/Dodge/Data/Creature.hs @@ -66,6 +66,11 @@ data Creature = Creature --deriving (Eq, Ord, Show, Read) --Generic, Flat) +data CrHP + = HP Int + | CrIsCorpse + | CrIsGibs + data Intention = Intention { _targetCr :: Maybe Creature , _mvToPoint :: Maybe Point2 @@ -76,10 +81,12 @@ data Intention = Intention makeLenses ''Creature makeLenses ''Intention +makePrisms ''CrHP concat <$> mapM (deriveJSON defaultOptions) [ ''Creature , ''Intention + , ''CrHP ] diff --git a/src/Dodge/Data/Machine/Sensor.hs b/src/Dodge/Data/Machine/Sensor.hs index e3491c926..80d30afdb 100644 --- a/src/Dodge/Data/Machine/Sensor.hs +++ b/src/Dodge/Data/Machine/Sensor.hs @@ -36,6 +36,7 @@ data ProximitySensorType data ProximityRequirement = RequireHealth {_proxReqMinHealth :: Int} | RequireEquipment {_proxReqEquipment :: ItemType} + | RequireDeadCreatures {_proxReqDead :: [Int]} deriving (Show) makeLenses ''DamageSensor diff --git a/src/Dodge/Machine/Update.hs b/src/Dodge/Machine/Update.hs index fcc7e3ef9..a4984d410 100644 --- a/src/Dodge/Machine/Update.hs +++ b/src/Dodge/Machine/Update.hs @@ -17,6 +17,8 @@ import Dodge.Terminal import Dodge.Terminal.Color import Geometry import LensHelp +import qualified Data.IntMap.Strict as IM +import qualified Data.IntSet as IS updateMachine :: Machine -> World -> World updateMachine mc @@ -195,6 +197,7 @@ sensorReqToString :: ProximityRequirement -> String sensorReqToString = \case RequireHealth x -> "HEALTH ABOVE " ++ show x RequireEquipment x -> itemBaseName x + RequireDeadCreatures is -> "CREATURES DESTROYED: " ++ show is mcProxTest :: World -> ProximityRequirement -> Bool mcProxTest w = \case @@ -203,6 +206,8 @@ mcProxTest w = \case any (\itm -> _itType itm == ct) ((\k -> w ^?! cWorld . lWorld . items . ix k) <$> _crInv cr) + RequireDeadCreatures is -> all (\x -> _crHP x < 0) + (IM.restrictKeys (w ^. cWorld . lWorld . creatures) (IS.fromList is)) where cr = you w diff --git a/tags b/tags index 610e800cd..09da8e137 100644 --- a/tags +++ b/tags @@ -1130,6 +1130,7 @@ RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 35;" C Remove_LOS src/Dodge/Data/Config.hs 77;" C RenderData src/Data/Preload/Render.hs 13;" t ReplaceEquipment src/Dodge/Data/RightButtonOptions.hs 31;" C +RequireDeadCreatures src/Dodge/Data/Machine/Sensor.hs 39;" C RequireEquipment src/Dodge/Data/Machine/Sensor.hs 38;" C RequireHealth src/Dodge/Data/Machine/Sensor.hs 37;" C ResFactor src/Dodge/Data/Config.hs 97;" t @@ -2172,6 +2173,7 @@ _pressPlates src/Dodge/Data/LWorld.hs 137;" f _pressedKeys src/Dodge/Data/Input.hs 37;" f _projectiles src/Dodge/Data/LWorld.hs 108;" f _props src/Dodge/Data/LWorld.hs 106;" f +_proxReqDead src/Dodge/Data/Machine/Sensor.hs 39;" f _proxReqEquipment src/Dodge/Data/Machine/Sensor.hs 38;" f _proxReqMinHealth src/Dodge/Data/Machine/Sensor.hs 37;" f _proxSensorType src/Dodge/Data/Machine/Sensor.hs 28;" f @@ -3894,7 +3896,7 @@ isAmmoIntLink src/Dodge/HeldUse.hs 713;" f isAnimate src/Dodge/Creature/Test.hs 130;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 76;" f -isElectrical src/Dodge/Machine/Update.hs 81;" f +isElectrical src/Dodge/Machine/Update.hs 83;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 197;" f isInLnk src/Dodge/PlacementSpot.hs 168;" f isJust' src/MaybeHelp.hs 29;" f @@ -4188,24 +4190,24 @@ maybeOpenConsole src/Dodge/Update.hs 124;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f -mcApplyDamage src/Dodge/Machine/Update.hs 126;" f -mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 95;" f -mcDamSensorUpdate src/Dodge/Machine/Update.hs 133;" f +mcApplyDamage src/Dodge/Machine/Update.hs 128;" f +mcDamSensorTriggerUpdate src/Dodge/Machine/Update.hs 97;" f +mcDamSensorUpdate src/Dodge/Machine/Update.hs 135;" f mcKillBut src/Dodge/Machine/Destroy.hs 37;" f mcKillTerm src/Dodge/Machine/Destroy.hs 29;" f -mcNoItemsTest src/Dodge/Machine/Update.hs 141;" f -mcPlaySound src/Dodge/Machine/Update.hs 110;" f -mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 101;" f -mcProxSensorUpdate src/Dodge/Machine/Update.hs 136;" f -mcProxTest src/Dodge/Machine/Update.hs 199;" f -mcProximitySensorUpdate src/Dodge/Machine/Update.hs 168;" f +mcNoItemsTest src/Dodge/Machine/Update.hs 143;" f +mcPlaySound src/Dodge/Machine/Update.hs 112;" f +mcProxSensorTriggerUpdate src/Dodge/Machine/Update.hs 103;" f +mcProxSensorUpdate src/Dodge/Machine/Update.hs 138;" f +mcProxTest src/Dodge/Machine/Update.hs 202;" f +mcProximitySensorUpdate src/Dodge/Machine/Update.hs 170;" f mcSPic src/Dodge/Render/ShapePicture.hs 134;" f mcShootAuto src/Dodge/HeldUse.hs 1195;" f mcShootLaser src/Dodge/HeldUse.hs 1188;" f -mcTriggerVal src/Dodge/Machine/Update.hs 107;" f -mcTypeUpdate src/Dodge/Machine/Update.hs 29;" f +mcTriggerVal src/Dodge/Machine/Update.hs 109;" f +mcTypeUpdate src/Dodge/Machine/Update.hs 31;" f mcUseHeld src/Dodge/HeldUse.hs 1107;" f -mcUseItem src/Dodge/Machine/Update.hs 86;" f +mcUseItem src/Dodge/Machine/Update.hs 88;" f megaBattery src/Dodge/Item/Ammo.hs 55;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f megaTinMag src/Dodge/Item/Ammo.hs 23;" f @@ -4904,13 +4906,13 @@ selectCreatureDebugItem src/Dodge/Debug.hs 65;" f selectedItemScroll src/Dodge/Update/Scroll.hs 51;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 53;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 59;" f -senseDamage src/Dodge/Machine/Update.hs 209;" f -sensorReqToString src/Dodge/Machine/Update.hs 194;" f +senseDamage src/Dodge/Machine/Update.hs 214;" f +sensorReqToString src/Dodge/Machine/Update.hs 196;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorSPic src/Dodge/Machine/Draw.hs 81;" f sensorTut src/Dodge/Room/Tutorial.hs 170;" f -sensorTypeDamages src/Dodge/Machine/Update.hs 228;" f +sensorTypeDamages src/Dodge/Machine/Update.hs 233;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f @@ -5226,7 +5228,7 @@ termTextColor src/Dodge/Terminal.hs 46;" f terminalColor src/Dodge/Placement/Instance/Terminal.hs 74;" f terminalReturnEffect src/Dodge/Terminal.hs 168;" f terminalSPic src/Dodge/Machine/Draw.hs 40;" f -terminalScreenGlow src/Dodge/Machine/Update.hs 37;" f +terminalScreenGlow src/Dodge/Machine/Update.hs 39;" f terminalShape src/Dodge/Machine/Draw.hs 43;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 131;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 19;" f @@ -5479,7 +5481,7 @@ updateLasers src/Dodge/Update.hs 419;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 170;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 441;" f -updateMachine src/Dodge/Machine/Update.hs 21;" f +updateMachine src/Dodge/Machine/Update.hs 23;" f updateMagnets src/Dodge/Update.hs 310;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 203;" f updateMouseContext src/Dodge/Update.hs 323;" f @@ -5521,7 +5523,7 @@ updateTeslaArc src/Dodge/Update.hs 566;" f updateTeslaArcs src/Dodge/Update.hs 563;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 8;" f updateTractorBeams src/Dodge/Update.hs 634;" f -updateTurret src/Dodge/Machine/Update.hs 46;" f +updateTurret src/Dodge/Machine/Update.hs 48;" f updateUniverse src/Dodge/Update.hs 72;" f updateUniverseFirst src/Dodge/Update.hs 83;" f updateUniverseLast src/Dodge/Update.hs 134;" f