From 06608c60bf4147e4dbf563f38e789a25ae8d0848 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 1 May 2023 10:21:03 +0100 Subject: [PATCH] Tweak chaseCrit melee striking --- src/Dodge/Creature/Impulse.hs | 4 ++-- src/Dodge/Creature/ReaderUpdate.hs | 7 +++++++ src/Dodge/Data/ActionPlan.hs | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index d75a49e0f..db633f076 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -50,7 +50,7 @@ followImpulse cr w imp = case imp of SwitchToItem i -> crup $ cr & crManipulation . manObject .~ InInventory (SelItem i NoInvSelAction) Melee cid' -> ( hitCr cid' - , crMvBy (10 *.* normalizeV (posFromID cid' -.- cpos)) $ cr & crMeleeCooldown .~ 20 + , crMvAbsolute (10 *.* normalizeV (posFromID cid' -.- cpos)) $ cr & crMeleeCooldown .~ 20 ) RandomTurn a -> (randGen .~ snd (rr a), creatureTurn (fst $ rr a) cr) MakeSound sid -> (soundStart (CrSound (_crID cr)) (_crPos cr) sid Nothing, cr) @@ -83,6 +83,6 @@ followImpulse cr w imp = case imp of rr a = randomR (- a, a) $ _randGen w hitCr i = ( cWorld . lWorld . creatures . ix i . crState . csDamage - .:~ Damage BLUNT 100 cpos (posFromID i) (posFromID i) NoDamageEffect + .:~ Damage BLUNT 100 cpos (posFromID i) (posFromID i) (PushBackDamage 3) ) . soundStart (CrSound cid) cpos hitS Nothing diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index 43f511a8d..b339bfb48 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -36,9 +36,13 @@ overrideMeleeCloseTarget cr = maybe cr (tryMeleeAttack cr) (_targetCr $ _crInten tryMeleeAttack :: Creature -> Creature -> Creature tryMeleeAttack cr tcr | _crMeleeCooldown cr == 0 + && Just (_crID tcr) == cr ^? crActionPlan . apStrategy . meleeTarget && dist tpos cpos < _crRad cr + _crRad tcr + 5 && abs (_crDir cr - argV (tpos -.- cpos)) < pi / 4 = cr & crActionPlan . apImpulse .~ [Melee $ _crID tcr] + & crActionPlan . apAction .~ [DoReplicate 10 NoAction `DoActionThen` DoImpulses + [ChangeStrategy (CloseToMelee $ _crID tcr)] ] + & crActionPlan . apStrategy .~ MeleeStrike | otherwise = cr where cpos = _crPos cr @@ -109,6 +113,7 @@ chaseCritMv :: World -> Creature -> Creature chaseCritMv w cr = case _apStrategy (_crActionPlan cr) of StrategyActions _ _ -> cr WarningCry -> cr + MeleeStrike -> cr _ -> case cr ^? crIntention . mvToPoint . _Just of Just p | dist (_crPos cr) p > _crRad cr -> cr & crActionPlan . apAction .~ [PathTo p] @@ -136,7 +141,9 @@ viewTarget w cr = case cr ^? crIntention . viewPoint . _Just of -- ( TurnToPoint p -- ) & crIntention . viewPoint .~ Nothing + & crActionPlan . apStrategy .~ Investigate | otherwise -> cr & crActionPlan . apAction %~ replaceNullWith (PathTo p) + & crActionPlan . apStrategy .~ Investigate Nothing -> cr replaceNullWith :: a -> [a] -> [a] diff --git a/src/Dodge/Data/ActionPlan.hs b/src/Dodge/Data/ActionPlan.hs index fff119cd9..5f06b87ec 100644 --- a/src/Dodge/Data/ActionPlan.hs +++ b/src/Dodge/Data/ActionPlan.hs @@ -181,6 +181,7 @@ data Strategy | ShootAt Int | FollowImpulses | WatchAndWait + | Investigate | WarningCry | LookAround | CloseToMelee {_meleeTarget :: Int} @@ -218,3 +219,4 @@ concat <$> mapM (deriveJSON defaultOptions) makeLenses ''ActionPlan makeLenses ''Impulse makeLenses ''Action +makeLenses ''Strategy