Start unifying heldUse and heldMods
This commit is contained in:
+329
-20
@@ -26,12 +26,321 @@ import qualified IntMapHelp as IM
|
||||
import LensHelp
|
||||
import RandomHelp
|
||||
import Sound.Data
|
||||
import Data.Foldable
|
||||
|
||||
heldEffect :: HeldMod -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
|
||||
heldEffect effecttype = case effecttype of
|
||||
-- HeldModNothing -> const $ const id
|
||||
PoisonSprayerMod -> gasEffect
|
||||
[ useAmmoAmount 1
|
||||
, withSoundForI foamSprayLoopS 5
|
||||
, ammoCheckI
|
||||
]
|
||||
FlameSpitterMod -> gasEffect
|
||||
[ withSidePushAfterI 20
|
||||
, withSidePushI 5
|
||||
, useAmmoAmount 1
|
||||
, withRandomItemParams f
|
||||
, repeatOnFrames [1 .. 9] FlameSpitterRepeatMod
|
||||
, lockInvFor 10
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
]
|
||||
FlameSpitterRepeatMod -> gasEffect
|
||||
[ withSidePushAfterI 20
|
||||
, withSidePushI 5
|
||||
, useAmmoAmount 1
|
||||
, withRandomItemParams f
|
||||
, ammoCheckI
|
||||
]
|
||||
FlameThrowerMod -> gasEffect
|
||||
[ withSidePushAfterI 20
|
||||
, --, withTempLight 1 100 (V3 1 0 0)
|
||||
withSidePushI 5
|
||||
, useAmmoAmount 1
|
||||
, ammoCheckI
|
||||
]
|
||||
LauncherMod -> foldl' (&) usePjCreation
|
||||
--[ useAmmoAmount 1
|
||||
-- , withSoundStart tap4S
|
||||
[ useTimeCheck
|
||||
-- , ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
TeslaMod -> foldl' (&) (shootTeslaArc . _ldtValue)
|
||||
[ useAmmoAmount 1
|
||||
, withSoundForI elecCrackleS 1
|
||||
, withTempLight 1 100 (V3 0 0 1)
|
||||
, ammoCheckI
|
||||
]
|
||||
LasWideMod n -> foldl' (&) (shootLaser . _ldtValue)
|
||||
[ useAmmoAmount 1
|
||||
, withItem $ \it ->
|
||||
duplicateNumBarrels
|
||||
-- ( min
|
||||
-- (it ^?! itUse . heldConsumption . laSource . _InternalSource . iaLoaded)
|
||||
(it ^?! itParams . lasCycle `div` lasWideRate)
|
||||
-- )
|
||||
, withItem $ \it -> withCrPos $ flareCircleAt (_lasColor $ _itParams it) 0.8
|
||||
, withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it))
|
||||
, withSoundForI tone440sawtoothquietS 2
|
||||
, withItemUpdateFirst (increasecycleLasWide n)
|
||||
, ammoCheckI
|
||||
]
|
||||
DualBeamMod -> foldl' (&) (shootDualLaser . _ldtValue)
|
||||
[ useAmmoAmount 1
|
||||
, withSoundForI tone440sawtoothquietS 2
|
||||
, withItem $ \it -> withCrPosShift (V2 0 (- thegapDualBeam it)) $ flareCircleAt (_lasColor2 $ _itParams it) 0.8
|
||||
, withItem $ \it -> withCrPosShift (V2 0 (thegapDualBeam it)) $ flareCircleAt (_lasColor $ _itParams it) 0.8
|
||||
, ammoCheckI
|
||||
]
|
||||
LasMod -> foldl' (&) (shootLaser . _ldtValue)
|
||||
[ useAmmoAmount 1
|
||||
, withItem $ \it -> withCrPos $ flareCircleAt (_lasColor $ _itParams it) 0.8
|
||||
, withSoundForI tone440sawtoothquietS 2
|
||||
, withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it))
|
||||
, duplicateLoadedBarrels
|
||||
, ammoCheckI
|
||||
]
|
||||
LauncherXMod _ -> foldl' (&) usePjCreationX
|
||||
--[ useAmmoAmount i
|
||||
--, withSoundStart tap4S
|
||||
[ useTimeCheck
|
||||
--, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
ShatterMod -> foldl' (&) (shootShatter . _ldtValue)
|
||||
[ useAmmoAmount 1
|
||||
, -- , withSoundStart tap3S
|
||||
useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
BangCaneMod -> bulletGunEffect
|
||||
[ withFlare
|
||||
, withSmoke 1 black 20 200 5
|
||||
, withRecoil
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart tap3S
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
VolleyGunMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAllAmmo
|
||||
, withSoundItemChoiceStart caneStickSoundChoice
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
MultiGunMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAllAmmo
|
||||
, withSoundItemChoiceStart caneStickSoundChoice
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
AutoRifleMod -> bulletGunEffect
|
||||
-- note this is the same as BangCanemMod with the first changed
|
||||
[ withFlare
|
||||
, withSmoke 1 black 20 200 5
|
||||
, withRecoil
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart tap3S
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
]
|
||||
BangRodMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, withThickSmokeI
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart bangEchoS
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
ElephantGunMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, withThickSmokeI
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart bangEchoS
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
AutoAmrMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, withThickSmokeI
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart bangEchoS
|
||||
, useTimeCheck
|
||||
, ammoCheckI -- cf ElephantGun
|
||||
]
|
||||
MachineGunMod -> bulletGunEffect
|
||||
[ withFlare
|
||||
, withThinSmokeI
|
||||
, withSoundStart bangEchoS
|
||||
, rateIncAB (torqueBeforeAtLeast 0.1 0.1) withTorqueAfter
|
||||
, ammoCheckI
|
||||
]
|
||||
BangStickMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, useAllAmmo
|
||||
, withSoundItemChoiceStart bangStickSoundChoice
|
||||
, duplicateLoadedBarrels
|
||||
, withTorqueAfter
|
||||
, withFlare
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
PistolMod -> bulletGunEffect
|
||||
[ withSidePushI 50
|
||||
, withRecoil
|
||||
, withFlare
|
||||
, withTorqueAfter
|
||||
, duplicateLoadedBarrels
|
||||
, withSoundStart tap3S
|
||||
, useAmmoAmount 1
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
AutoPistolMod -> bulletGunEffect
|
||||
[ withFlare
|
||||
, withSidePushI 50
|
||||
, withRecoil
|
||||
, withTorqueAfter
|
||||
, duplicateLoadedBarrels
|
||||
, withSoundStart tap3S
|
||||
, useAmmoAmount 1
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
]
|
||||
MachinePistolMod -> bulletGunEffect
|
||||
[ withFlare
|
||||
, withRecoil
|
||||
, withSidePushI 50
|
||||
, withTorqueAfter
|
||||
, duplicateLoadedBarrels
|
||||
, withSoundStart tap1S
|
||||
, useAmmoAmount 1
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
]
|
||||
BurstRifleMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, duplicateLoadedBarrels
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart tap3S
|
||||
, repeatOnFrames [3, 6] BurstRifleRepeatMod
|
||||
, lockInvFor 7
|
||||
, sideEffectOnFrame 7 (\_ cr -> TorqueCr 0.2 (_crID cr)) --(torqueSideEffect 0.2)
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
BurstRifleRepeatMod -> bulletGunEffect
|
||||
[ withRecoil
|
||||
, withFlare
|
||||
, duplicateLoadedBarrels
|
||||
, useAmmoAmount 1
|
||||
, withSoundStart tap3S
|
||||
, sideEffectOnFrame 7 (\_ cr -> TorqueCr 0.2 (_crID cr)) --(torqueSideEffect 0.2)
|
||||
, ammoCheckI
|
||||
]
|
||||
MiniGunMod i -> bulletGunEffect
|
||||
[ duplicateNumBarrels 1
|
||||
, repeatTransformed
|
||||
[ (id, modcrpos x)
|
||||
| x <- map ((/ (fromIntegral i - 1)) . fromIntegral) [0 .. i -1]
|
||||
]
|
||||
, afterRecoil (fromIntegral i * 5)
|
||||
, torqueBefore (fromIntegral i * 0.05)
|
||||
, withSidePushI (fromIntegral i * 25)
|
||||
, withMuzFlare
|
||||
, withSmoke 1 black 20 200 5
|
||||
, useAmmoAmount i
|
||||
, withSoundForI mini1S 2
|
||||
, withWarmUp crankSlowS
|
||||
, ammoCheckI
|
||||
]
|
||||
SmgMod -> bulletGunEffect
|
||||
[ withFlare
|
||||
, withSidePushI 30
|
||||
, withRecoil
|
||||
, withTorqueAfter
|
||||
, duplicateLoadedBarrels
|
||||
, withSoundStart tap3S
|
||||
, useAmmoAmount 1
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
]
|
||||
BangConeMod -> bulletGunEffect
|
||||
[ withRandomItem coneRandItemParams
|
||||
, withRandomItemUpdate coneRandItemUpdate
|
||||
, withRandomOffset
|
||||
, duplicateLoadedBarrels
|
||||
, duplicateLoaded
|
||||
, withMuzFlare
|
||||
, withRecoil
|
||||
, withTorqueAfter
|
||||
, useAllAmmo
|
||||
, withSoundStart bangEchoS
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
TractorMod -> foldl' (&) (aTractorBeam . _ldtValue) [ammoCheckI]
|
||||
where
|
||||
f = do
|
||||
nzpres <- state $ randomR (3, 4)
|
||||
return $ sprayNozzles . ix 0 . nzPressure .~ nzpres
|
||||
increasecycleLasWide n it = case _heldHammer (_itUse it) of
|
||||
HammerUp -> it & itParams . lasCycle .~ 1
|
||||
_ -> it & itParams . lasCycle %~ (min (n * lasWideRate) . (+ 1))
|
||||
thegapDualBeam = _dbGap . _itParams
|
||||
directedTelPos _ cr w = (p, a)
|
||||
where
|
||||
p = fromMaybe (_crPos cr) $ cr ^? crTargeting . ctPos . _Just
|
||||
a = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- p)
|
||||
modcrpos x cr = fromMaybe cr $ do
|
||||
invid <- cr ^? crManipulation . manObject . inInventory . ispItem
|
||||
return $ cr & crDir %~ tweenAngles x (_crOldDir cr)
|
||||
& crPos %~ alongSegBy x (_crOldPos cr)
|
||||
& crInv . ix (invid + 1) . itUse . amagParams . ampBullet . buDelayFraction .~ x
|
||||
|
||||
gasEffect = foldl' (&) (overNozzles useGasParams)
|
||||
|
||||
bulletGunEffect = foldl' (&) shootBullet
|
||||
|
||||
useMod :: HeldMod ->
|
||||
[(LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World)
|
||||
-> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World]
|
||||
useMod hm = case hm of
|
||||
HeldModNothing -> []
|
||||
-- HeldModNothing -> []
|
||||
PoisonSprayerMod ->
|
||||
[ useAmmoAmount 1
|
||||
, withSoundForI foamSprayLoopS 5
|
||||
@@ -74,15 +383,15 @@ useMod hm = case hm of
|
||||
, withTempLight 1 100 (V3 0 0 1)
|
||||
, ammoCheckI
|
||||
]
|
||||
CircleLaserMod ->
|
||||
[ duplicateItem fLasCircle
|
||||
, useAmmoAmount 1
|
||||
, withSoundForI tone440sawtoothquietS 2
|
||||
, withItem $ \it -> withCrPos $ flareCircleAt (_lasColor $ _itParams it) 0.8
|
||||
, withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it))
|
||||
, withItemUpdateFirst increasecycleLasCircle
|
||||
, ammoCheckI
|
||||
]
|
||||
-- CircleLaserMod ->
|
||||
-- [ duplicateItem fLasCircle
|
||||
-- , useAmmoAmount 1
|
||||
-- , withSoundForI tone440sawtoothquietS 2
|
||||
-- , withItem $ \it -> withCrPos $ flareCircleAt (_lasColor $ _itParams it) 0.8
|
||||
-- , withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it))
|
||||
-- , withItemUpdateFirst increasecycleLasCircle
|
||||
-- , ammoCheckI
|
||||
-- ]
|
||||
LasWideMod n ->
|
||||
[ useAmmoAmount 1
|
||||
, withItem $ \it ->
|
||||
@@ -126,14 +435,14 @@ useMod hm = case hm of
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
AmmoCheckMod -> [ammoCheckI]
|
||||
AmmoUseCheckMod -> [useAmmoAmount 1, useTimeCheck, ammoCheckI]
|
||||
AmmoHammerTimeUseOneMod ->
|
||||
[ useAmmoAmount 1
|
||||
, useTimeCheck
|
||||
, ammoCheckI
|
||||
, blCheck
|
||||
]
|
||||
-- AmmoCheckMod -> [ammoCheckI]
|
||||
-- AmmoUseCheckMod -> [useAmmoAmount 1, useTimeCheck, ammoCheckI]
|
||||
-- AmmoHammerTimeUseOneMod ->
|
||||
-- [ useAmmoAmount 1
|
||||
-- , useTimeCheck
|
||||
-- , ammoCheckI
|
||||
-- , blCheck
|
||||
-- ]
|
||||
BangCaneMod ->
|
||||
[ withFlare
|
||||
, withSmoke 1 black 20 200 5
|
||||
@@ -222,8 +531,8 @@ useMod hm = case hm of
|
||||
, rateIncAB (torqueBeforeAtLeast 0.1 0.1) withTorqueAfter
|
||||
, ammoCheckI
|
||||
]
|
||||
ModWithDirectedTeleport hm' ->
|
||||
reverse $ withPosDirWallCheck directedTelPos : useMod hm'
|
||||
-- ModWithDirectedTeleport hm' ->
|
||||
-- reverse $ withPosDirWallCheck directedTelPos : useMod hm'
|
||||
BangStickMod ->
|
||||
[ withRecoil
|
||||
, useAllAmmo
|
||||
|
||||
Reference in New Issue
Block a user