From d0f20da9f124bcbee104dbe72942ca2aeca49e87 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 26 Jun 2025 12:04:05 +0100 Subject: [PATCH] Randomise volleyGun bursts --- src/Dodge/BaseTriggerType.hs | 3 ++- src/Dodge/Data/TriggerType.hs | 1 + src/Dodge/HeldUse.hs | 22 ++++++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/Dodge/BaseTriggerType.hs b/src/Dodge/BaseTriggerType.hs index a42921bd5..1dd63ce4c 100644 --- a/src/Dodge/BaseTriggerType.hs +++ b/src/Dodge/BaseTriggerType.hs @@ -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 diff --git a/src/Dodge/Data/TriggerType.hs b/src/Dodge/Data/TriggerType.hs index 23b9c5c02..9ee9ab215 100644 --- a/src/Dodge/Data/TriggerType.hs +++ b/src/Dodge/Data/TriggerType.hs @@ -12,6 +12,7 @@ data TriggerType | NoTrigger | AlwaysSingleTrigger | BurstTrigger [Int] + | VolleyGunTrigger Int deriving (Eq, Show, Read) --deriveJSON defaultOptions ''TriggerType diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 312436511..44527b916 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -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? -}