|
|
|
@@ -125,7 +125,7 @@ withThickSmokeI eff item cr w = eff item cr
|
|
|
|
|
-- fire.
|
|
|
|
|
ammoCheckI :: ChainEffect
|
|
|
|
|
ammoCheckI eff item cr w
|
|
|
|
|
| _laLoaded (_itConsumption item) <= 0 = fromMaybe w (startReloadingWeapon cr w)
|
|
|
|
|
| _laLoaded (_itConsumption item) <= 0 = w -- fromMaybe w (startReloadingWeapon cr w)
|
|
|
|
|
-- | _reloadState (_itConsumption item) /= Nothing' = w
|
|
|
|
|
| otherwise = eff item cr $ w & creatures . ix (_crID cr) %~ crStopReloading
|
|
|
|
|
|
|
|
|
@@ -133,7 +133,7 @@ ammoCheckI eff item cr w
|
|
|
|
|
-- hammer is down?
|
|
|
|
|
ammoHammerCheck :: ChainEffect
|
|
|
|
|
ammoHammerCheck eff it cr w
|
|
|
|
|
| _laLoaded (_itConsumption it) <= 0 = fromMaybe w (startReloadingWeapon cr w)
|
|
|
|
|
| _laLoaded (_itConsumption it) <= 0 = w -- fromMaybe w (startReloadingWeapon cr w)
|
|
|
|
|
& setHammerDown
|
|
|
|
|
| otherwise = case it ^? itUse . useHammer . hammerPosition of
|
|
|
|
|
Just HammerUp -> eff it cr $ setHammerDown w & creatures . ix (_crID cr) %~ crStopReloading
|
|
|
|
@@ -173,15 +173,15 @@ rateIncAB exeffFirst exeffCont eff item cr w
|
|
|
|
|
itRef = _crInvSel cr
|
|
|
|
|
pointItem = creatures . ix cid . crInv . ix itRef
|
|
|
|
|
currentRate = _rateMax (_useDelay (_itUse item))
|
|
|
|
|
repeatFire = _laReloadState (_itConsumption item) == Nothing' && _rateTime (_useDelay (_itUse item)) == 1
|
|
|
|
|
firstFire = _laReloadState (_itConsumption item) == Nothing' && _rateTime (_useDelay (_itUse item)) == 0
|
|
|
|
|
repeatFire = _laTransfer (_itConsumption item) == NoTransfer && _rateTime (_useDelay (_itUse item)) == 1
|
|
|
|
|
firstFire = _laTransfer (_itConsumption item) == NoTransfer && _rateTime (_useDelay (_itUse item)) == 0
|
|
|
|
|
{- | Apply effect after a warm up. -}
|
|
|
|
|
-- note this is quite unsafe, requires the item to have the correct delay type
|
|
|
|
|
withWarmUp
|
|
|
|
|
:: SoundID -- ^ warm up sound id
|
|
|
|
|
-> ChainEffect
|
|
|
|
|
withWarmUp soundID f item cr w
|
|
|
|
|
| _laReloadState (_itConsumption item) /= Nothing' = w
|
|
|
|
|
| _laTransfer (_itConsumption item) /= NoTransfer = w
|
|
|
|
|
| curWarmUp < maxWarmUp = w
|
|
|
|
|
& pointerToItem . itUse . useDelay . warmTime +~ 2
|
|
|
|
|
& soundContinue (CrWeaponSound cid 0) (_crPos cr) soundID (Just 2)
|
|
|
|
@@ -317,16 +317,16 @@ ammoUseCheck f item cr w
|
|
|
|
|
| fireCondition = f item cr w & pointerToItem %~
|
|
|
|
|
( itUseAmmo 1
|
|
|
|
|
. (itUse . useDelay . rateTime .~ _rateMax ( _useDelay (_itUse item)) ))
|
|
|
|
|
| reloadCondition = fromMaybe w $ startReloadingWeapon cr w
|
|
|
|
|
-- | reloadCondition = fromMaybe w $ startReloadingWeapon cr w
|
|
|
|
|
| otherwise = w
|
|
|
|
|
where
|
|
|
|
|
cid = _crID cr
|
|
|
|
|
itRef = _crInvSel cr
|
|
|
|
|
pointerToItem = creatures . ix cid . crInv . ix itRef
|
|
|
|
|
fireCondition = _laReloadState (_itConsumption item) == Nothing'
|
|
|
|
|
fireCondition = _laTransfer (_itConsumption item) == NoTransfer
|
|
|
|
|
&& _rateTime (_useDelay (_itUse item)) == 0
|
|
|
|
|
&& _laLoaded (_itConsumption item) > 0
|
|
|
|
|
reloadCondition = _laLoaded (_itConsumption item) == 0
|
|
|
|
|
-- reloadCondition = _laLoaded (_itConsumption item) == 0
|
|
|
|
|
{- | Applies a world effect after a hammer position check.
|
|
|
|
|
Arbitrary inventory position. -}
|
|
|
|
|
hammerCheckL
|
|
|
|
@@ -353,16 +353,16 @@ shootL f item cr w
|
|
|
|
|
| fireCondition = f item cr w & pointerToItem %~
|
|
|
|
|
( itUseAmmo 1
|
|
|
|
|
. (itUse . useDelay . rateTime .~ _rateMax (_useDelay (_itUse item))) )
|
|
|
|
|
| reloadCondition = fromMaybe w $ startReloadingWeapon cr w
|
|
|
|
|
-- | reloadCondition = fromMaybe w $ startReloadingWeapon cr w
|
|
|
|
|
| otherwise = w
|
|
|
|
|
where
|
|
|
|
|
cid = _crID cr
|
|
|
|
|
invid = fromJust $ _itInvPos item
|
|
|
|
|
pointerToItem = creatures . ix cid . crInv . ix invid
|
|
|
|
|
fireCondition = _laReloadState (_itConsumption item) == Nothing'
|
|
|
|
|
fireCondition = _laTransfer (_itConsumption item) == NoTransfer
|
|
|
|
|
&& _rateTime (_useDelay (_itUse item)) == 0
|
|
|
|
|
&& _laLoaded (_itConsumption item) > 0
|
|
|
|
|
reloadCondition = _laLoaded (_itConsumption item) == 0
|
|
|
|
|
-- reloadCondition = _laLoaded (_itConsumption item) == 0
|
|
|
|
|
withItem :: (Item -> ChainEffect) -> ChainEffect
|
|
|
|
|
withItem g f it = g it f it
|
|
|
|
|
withItemUpdate :: (Item -> Item) -> (Item -> ChainEffect) -> ChainEffect
|
|
|
|
|