Randomise volleyGun bursts
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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?
|
||||||
-}
|
-}
|
||||||
|
|||||||
Reference in New Issue
Block a user