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
GRAPECANNON{} -> HammerTrigger
MINIGUNX{} -> AutoTrigger
VOLLEYGUN i -> BurstTrigger $ fmap (3*) [1 .. i-1]
--VOLLEYGUN i -> BurstTrigger $ fmap (3*) [1 .. i-1]
VOLLEYGUN i -> VolleyGunTrigger i
RIFLE -> HammerTrigger
ALTERIFLE -> HammerTrigger
AUTORIFLE -> AutoTrigger
+1
View File
@@ -12,6 +12,7 @@ data TriggerType
| NoTrigger
| AlwaysSingleTrigger
| BurstTrigger [Int]
| VolleyGunTrigger Int
deriving (Eq, Show, Read)
--deriveJSON defaultOptions ''TriggerType
+16 -6
View File
@@ -80,20 +80,30 @@ hammerCheck ::
Creature ->
World ->
World
hammerCheck f pt it cr
hammerCheck f pt it cr w
| BurstTrigger is <- itemTriggerType (it ^. ldtValue)
, pt == InitialPress =
f it cr . (cWorld . lWorld . delayedEvents .++~ map g is)
| BurstTrigger{} <- itemTriggerType (it ^. ldtValue) = id
, pt == InitialPress = w & f it cr & cWorld . lWorld . delayedEvents .++~ map g is
| BurstTrigger{} <- itemTriggerType (it ^. ldtValue) = w
| 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 == HammerTrigger || t == AlwaysSingleTrigger
, isNothing $ lookup MakeAutoLink (it ^. ldtRight)
, pt /= InitialPress =
id
| otherwise = f it cr
w
| otherwise = f it cr w
where
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.
input buffering?
-}