Randomise volleyGun bursts

This commit is contained in:
2025-06-26 12:04:05 +01:00
parent 2f0e039d39
commit d0f20da9f1
3 changed files with 19 additions and 7 deletions
+2 -1
View File
@@ -28,7 +28,8 @@ heldTriggerType = \case
BLUNDERBUSS -> HammerTrigger BLUNDERBUSS -> HammerTrigger
GRAPECANNON{} -> HammerTrigger GRAPECANNON{} -> HammerTrigger
MINIGUNX{} -> AutoTrigger MINIGUNX{} -> AutoTrigger
VOLLEYGUN i -> BurstTrigger $ fmap (3*) [1 .. i-1] --VOLLEYGUN i -> BurstTrigger $ fmap (3*) [1 .. i-1]
VOLLEYGUN i -> VolleyGunTrigger i
RIFLE -> HammerTrigger RIFLE -> HammerTrigger
ALTERIFLE -> HammerTrigger ALTERIFLE -> HammerTrigger
AUTORIFLE -> AutoTrigger AUTORIFLE -> AutoTrigger
+1
View File
@@ -12,6 +12,7 @@ data TriggerType
| NoTrigger | NoTrigger
| AlwaysSingleTrigger | AlwaysSingleTrigger
| BurstTrigger [Int] | BurstTrigger [Int]
| VolleyGunTrigger Int
deriving (Eq, Show, Read) deriving (Eq, Show, Read)
--deriveJSON defaultOptions ''TriggerType --deriveJSON defaultOptions ''TriggerType
+16 -6
View File
@@ -80,20 +80,30 @@ hammerCheck ::
Creature -> Creature ->
World -> World ->
World World
hammerCheck f pt it cr hammerCheck f pt it cr w
| BurstTrigger is <- itemTriggerType (it ^. ldtValue) | BurstTrigger is <- itemTriggerType (it ^. ldtValue)
, pt == InitialPress = , pt == InitialPress = w & f it cr & cWorld . lWorld . delayedEvents .++~ map g is
f it cr . (cWorld . lWorld . delayedEvents .++~ map g is) | BurstTrigger{} <- itemTriggerType (it ^. ldtValue) = w
| BurstTrigger{} <- itemTriggerType (it ^. ldtValue) = id | VolleyGunTrigger i <- itemTriggerType (it ^. ldtValue)
, pt == InitialPress = let (is,gen) = getVolleyBurst i (w ^. randGen)
in w & f it cr
& cWorld . lWorld . delayedEvents .++~ map g is
& randGen .~ gen
| VolleyGunTrigger{} <- itemTriggerType (it ^. ldtValue) = w
| t <- itemTriggerType (it ^. ldtValue) | t <- itemTriggerType (it ^. ldtValue)
, t == HammerTrigger || t == AlwaysSingleTrigger , t == HammerTrigger || t == AlwaysSingleTrigger
, isNothing $ lookup MakeAutoLink (it ^. ldtRight) , isNothing $ lookup MakeAutoLink (it ^. ldtRight)
, pt /= InitialPress = , pt /= InitialPress =
id w
| otherwise = f it cr | otherwise = f it cr w
where where
g x = (x, WdWdBurstFireRepetition (_crID cr) (it ^?! ldtValue . itLocation . ilInvID)) g x = (x, WdWdBurstFireRepetition (_crID cr) (it ^?! ldtValue . itLocation . ilInvID))
getVolleyBurst :: (Random a, RandomGen b, Num a) => Int -> b -> ([a], b)
getVolleyBurst i g = let (is,g') = runState (replicateM (i-1) (state $ randomR (0,6))) g
in (scanl1 (+) is, g')
{- | Applies a world effect after an item use cooldown check. {- | Applies a world effect after an item use cooldown check.
input buffering? input buffering?
-} -}