Fix enemy stride/footsteps

This commit is contained in:
2025-10-17 22:32:40 +01:00
parent f969056912
commit f3fafc6bf2
12 changed files with 254 additions and 245 deletions
+6 -7
View File
@@ -5,7 +5,7 @@ module Dodge.Creature.ChaseCrit (
) where ) where
--import Dodge.Data.Equipment.Misc --import Dodge.Data.Equipment.Misc
--import Control.Lens import Control.Lens
import Dodge.Data.Creature import Dodge.Data.Creature
import Dodge.Default import Dodge.Default
--import Dodge.Item.Equipment --import Dodge.Item.Equipment
@@ -27,12 +27,11 @@ invisibleChaseCrit =
chaseCrit :: Creature chaseCrit :: Creature
chaseCrit = chaseCrit =
defaultCreature defaultCreature
{ _crName = "chaseCrit" & crName .~ "chaseCrit"
, _crHP = HP 150 & crHP .~ HP 150
, _crInv = mempty & crFaction .~ ColorFaction green
, _crFaction = ColorFaction green & crVocalization .~ chaseCritVocalization
, _crVocalization = chaseCritVocalization & crStance . strideLength .~ 30
}
chaseCritVocalization :: Vocalization chaseCritVocalization :: Vocalization
chaseCritVocalization = Vocalization (50, 200) 0 chaseCritVocalization = Vocalization (50, 200) 0
+1
View File
@@ -45,6 +45,7 @@ followImpulse cr w imp = case imp of
Bark sid -> (soundStart (CrMouth cid) cpos sid Nothing, resetCrVocCoolDown w cr) Bark sid -> (soundStart (CrMouth cid) cpos sid Nothing, resetCrVocCoolDown w cr)
Move p -> crup $ crMvBy p (w ^. cWorld . lWorld) cr Move p -> crup $ crMvBy p (w ^. cWorld . lWorld) cr
MoveForward x -> crup $ crMvForward x (w ^. cWorld . lWorld) cr MoveForward x -> crup $ crMvForward x (w ^. cWorld . lWorld) cr
MoveNoStride p -> crup $ crMvByNoStride p (w ^. cWorld . lWorld) cr
Turn a -> crup $ cr & crDir +~ a Turn a -> crup $ cr & crDir +~ a
TurnToward p a -> crup $ creatureTurnToward p a cr TurnToward p a -> crup $ creatureTurnToward p a cr
TurnTo p -> crup $ creatureTurnTo p cr TurnTo p -> crup $ creatureTurnTo p cr
+14
View File
@@ -3,6 +3,7 @@ module Dodge.Creature.Impulse.Movement (
creatureTurnTowardDir, creatureTurnTowardDir,
crMvAbsolute, crMvAbsolute,
crMvBy, crMvBy,
crMvByNoStride,
crMvForward, crMvForward,
creatureTurnTo, creatureTurnTo,
) where ) where
@@ -26,6 +27,14 @@ crMvBy ::
Creature Creature
crMvBy p lw cr = crMvAbsolute lw (rotateV (_crDir cr) p) cr crMvBy p lw cr = crMvAbsolute lw (rotateV (_crDir cr) p) cr
crMvByNoStride ::
-- | Movement translation vector, will be made relative to creature direction
Point2 ->
LWorld ->
Creature ->
Creature
crMvByNoStride p lw cr = crMvAbsoluteNoStride lw (rotateV (_crDir cr) p) cr
crMvAbsolute :: LWorld -> Point2 -> Creature -> Creature crMvAbsolute :: LWorld -> Point2 -> Creature -> Creature
crMvAbsolute lw p' cr = crMvAbsolute lw p' cr =
advanceStepCounter (magV p) cr advanceStepCounter (magV p) cr
@@ -34,6 +43,11 @@ crMvAbsolute lw p' cr =
where where
p = strengthFactor (getCrMoveSpeed lw cr) *.* p' p = strengthFactor (getCrMoveSpeed lw cr) *.* p'
crMvAbsoluteNoStride :: LWorld -> Point2 -> Creature -> Creature
crMvAbsoluteNoStride lw p' cr = cr & crPos . _xy +~ p
where
p = strengthFactor (getCrMoveSpeed lw cr) *.* p'
strengthFactor :: Int -> Float strengthFactor :: Int -> Float
strengthFactor i strengthFactor i
| i > 50 = 1 | i > 50 = 1
+1 -1
View File
@@ -10,7 +10,7 @@ import Sound.Data
updateWalkCycle :: Int -> World -> World updateWalkCycle :: Int -> World -> World
updateWalkCycle cid w updateWalkCycle cid w
| Just cr <- w ^? cWorld . lWorld . creatures . ix 0 | Just cr <- w ^? cWorld . lWorld . creatures . ix cid
, Walking x ff <- cr ^. crStance . carriage , Walking x ff <- cr ^. crStance . carriage
, x >= cr ^. crStance . strideLength = , x >= cr ^. crStance . strideLength =
w w
+1
View File
@@ -47,6 +47,7 @@ updateCreature' cr =
LampCrit{} -> updateLampoid cr LampCrit{} -> updateLampoid cr
BarrelCrit bt -> updateBarreloid bt cr BarrelCrit bt -> updateBarreloid bt cr
AvatarDead -> id AvatarDead -> id
ChaseCrit {} -> crUpdate updateHumanoid cr
_ -> crUpdate updateHumanoid cr _ -> crUpdate updateHumanoid cr
{- | this seems to work, but I am not sure about the ordering: {- | this seems to work, but I am not sure about the ordering:
+1
View File
@@ -27,6 +27,7 @@ data ActionPlan
data Impulse data Impulse
= Move Point2 = Move Point2
| MoveForward Float | MoveForward Float
| MoveNoStride Point2
| Turn Float | Turn Float
| RandomTurn Float | RandomTurn Float
| RandomImpulse RandImpulse -- (State StdGen Impulse) | RandomImpulse RandImpulse -- (State StdGen Impulse)
+1 -1
View File
@@ -108,7 +108,7 @@ defaultAimingCrit :: Creature
defaultAimingCrit = defaultCreature defaultAimingCrit = defaultCreature
yourDefaultStrideLength :: Float yourDefaultStrideLength :: Float
yourDefaultStrideLength = 40 yourDefaultStrideLength = 35
--defaultState :: CreatureState --defaultState :: CreatureState
--defaultState = --defaultState =
+2 -20
View File
@@ -179,26 +179,8 @@ updateHumanoid cr = case cr ^?! crType of
-- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait]) -- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait])
-- ] -- ]
humanoidAIList :: humanoidAIList :: [World -> Creature -> Creature] -> Creature -> World -> World
[World -> Creature -> Creature] -> humanoidAIList = impulsiveAIBefore . chainCreatureUpdates
Creature ->
World ->
World
humanoidAIList
= impulsiveAIBefore . chainCreatureUpdates
---- bit of a hack to get new random generators after each creature's update
--defaultImpulsive ::
-- [World -> Creature -> Creature] ->
-- Creature ->
-- World ->
-- World
--defaultImpulsive
-- = fmap (fmap updateRandGen) . crUpdate . impulsiveAIBefore . chainCreatureUpdates
-- where
-- updateRandGen w =
-- let (_, g) = randomR (0, 1 :: Int) (_randGen w)
-- in w & randGen .~ g
chooseMovementPistol :: Creature -> World -> Action chooseMovementPistol :: Creature -> World -> Action
chooseMovementPistol cr w = chooseMovementPistol cr w =
+1 -1
View File
@@ -7,4 +7,4 @@ import RandomHelp
doRandImpulse :: RandImpulse -> State StdGen Impulse doRandImpulse :: RandImpulse -> State StdGen Impulse
doRandImpulse ri = case ri of doRandImpulse ri = case ri of
RandImpulseList xs -> takeOne xs RandImpulseList xs -> takeOne xs
RandImpulseCircMove r -> Move <$> randInCirc r RandImpulseCircMove r -> MoveNoStride <$> randInCirc r
+3 -3
View File
@@ -399,9 +399,9 @@ critsRoom :: Int -> State LayoutVars (Tree Room)
critsRoom i = critsRoom i =
join $ join $
takeOne takeOne
-- [ return <$> roomCCrits i [ return <$> roomCCrits i
-- , return <$> critsPillarRoom i , return <$> critsPillarRoom i
[ return <$> glassSwitchBackCrits i , return <$> glassSwitchBackCrits i
] ]
-- cor <- shuffleLinks corridor -- cor <- shuffleLinks corridor
+5
View File
@@ -1,5 +1,6 @@
module Dodge.Room.Tutorial where module Dodge.Room.Tutorial where
--import Dodge.Room.LongDoor
import Dodge.Layout import Dodge.Layout
import Dodge.Item.Held.Utility import Dodge.Item.Held.Utility
import Control.Monad import Control.Monad
@@ -42,6 +43,10 @@ tutAnoTree = do
foldMTRS foldMTRS
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
, corDoor , corDoor
-- , corDoor
-- , tToBTree "t" . return . cleatOnward <$> slowDoorRoom
-- , corDoor
-- , corDoor
, tutHub , tutHub
, tutLight , tutLight
, tutDrop , tutDrop
+218 -212
View File
File diff suppressed because it is too large Load Diff