Randomise volleyGun bursts
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -12,6 +12,7 @@ data TriggerType
|
||||
| NoTrigger
|
||||
| AlwaysSingleTrigger
|
||||
| BurstTrigger [Int]
|
||||
| VolleyGunTrigger Int
|
||||
deriving (Eq, Show, Read)
|
||||
|
||||
--deriveJSON defaultOptions ''TriggerType
|
||||
|
||||
+16
-6
@@ -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?
|
||||
-}
|
||||
|
||||
Reference in New Issue
Block a user