108 lines
3.5 KiB
Haskell
108 lines
3.5 KiB
Haskell
module Dodge.Item.Held.SprayGuns (
|
|
poisonSprayer,
|
|
flameSpitter,
|
|
blowTorch,
|
|
flameThrower,
|
|
flameTorrent,
|
|
flameWall,
|
|
) where
|
|
|
|
import Dodge.Data.Item
|
|
import Dodge.Default.Item
|
|
import Dodge.Reloading.Action
|
|
import Geometry
|
|
import LensHelp
|
|
|
|
poisonSprayer :: Item
|
|
poisonSprayer =
|
|
flameThrower
|
|
& itType . iyBase .~ HELD POISONSPRAYER
|
|
& itUse . heldConsumption . laAmmoType
|
|
.~ GasAmmo
|
|
{ _amString = "POISONGAS"
|
|
, _amCreateGas = CreatePoisonGas --aGasCloud
|
|
}
|
|
& itUse . heldMods .~ PoisonSprayerMod
|
|
|
|
flameSpitter :: Item
|
|
flameSpitter =
|
|
flameThrower
|
|
& itType . iyBase .~ HELD FLAMESPITTER
|
|
& itUse . heldConsumption . laSource . _InternalSource . iaMax .~ 10
|
|
& itUse . heldConsumption . laSource . _InternalSource . iaCycle .~ [loadEject 5, loadInsert 10, loadPrime 20]
|
|
& itParams . sprayNozzles . ix 0 . nzPressure .~ 4
|
|
& itUse . heldAim . aimStance .~ OneHand
|
|
& itUse . heldDelay .~ FixedRate{_rateMax = 12, _rateTime = 0}
|
|
& itUse . heldMods .~ FlameSpitterMod
|
|
|
|
flameTorrent :: Item
|
|
flameTorrent =
|
|
flameThrower
|
|
& itType . iyBase .~ HELD FLAMETORRENT
|
|
& itUse . heldAim . aimZoom .~ defaultItZoom
|
|
& itParams . sprayNozzles . ix 0
|
|
%~ ( (nzPressure .~ 10)
|
|
. (nzMaxWalkAngle .~ 1.5)
|
|
. (nzWalkSpeed .~ 0.05)
|
|
)
|
|
|
|
blowTorch :: Item
|
|
blowTorch =
|
|
flameThrower
|
|
& itType . iyBase .~ HELD BLOWTORCH
|
|
|
|
flameWall :: Item
|
|
flameWall =
|
|
flameThrower
|
|
& itType . iyBase .~ HELD FLAMEWALL
|
|
& itParams . sprayNozzles .~ zipWith makeNozzle [0, 0.6, -0.6] [2, 2.5, 2.5]
|
|
where
|
|
makeNozzle dir pres =
|
|
Nozzle
|
|
{ _nzPressure = pres
|
|
, _nzDir = dir
|
|
, _nzMaxWalkAngle = 0
|
|
, _nzWalkSpeed = 0
|
|
, _nzCurrentWalkAngle = 0
|
|
, _nzLength = 20
|
|
}
|
|
|
|
flameThrower :: Item
|
|
flameThrower =
|
|
defaultHeldItem
|
|
{ _itParams =
|
|
Sprayer
|
|
{ _sprayNozzles =
|
|
[ Nozzle
|
|
{ _nzPressure = 4
|
|
, _nzDir = 0
|
|
, _nzMaxWalkAngle = 0.2
|
|
, _nzWalkSpeed = 0.01
|
|
, _nzCurrentWalkAngle = 0
|
|
, _nzLength = 10
|
|
}
|
|
]
|
|
}
|
|
}
|
|
& itDimension . dimRad .~ 7
|
|
& itDimension . dimCenter .~ V3 9 0 0
|
|
& itUse . heldUse .~ HeldOverNozzlesUseGasParams -- overNozzles useGasParams
|
|
& itUse . heldDelay .~ NoDelay
|
|
& itUse . heldMods .~ FlameThrowerMod
|
|
& itUse . heldAim . aimWeight .~ 5
|
|
& itUse . heldAim . aimZoom .~ defaultItZoom{_izMax = 5, _izMin = 1.5}
|
|
& itUse . heldAim . aimStance .~ TwoHandTwist
|
|
& itUse . heldAim . aimHandlePos .~ 0
|
|
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 18 0) 0 0]
|
|
& itUse . heldConsumption
|
|
.~ ( defaultLoadable
|
|
& laSource . _InternalSource . iaMax .~ 250
|
|
& laAmmoType
|
|
.~ GasAmmo
|
|
{ _amString = "FLAME"
|
|
, _amCreateGas = CreateFlame --aFlame
|
|
}
|
|
& laSource . _InternalSource . iaCycle .~ [loadEject 5, loadInsert 10, loadPrime 20]
|
|
)
|
|
& itType . iyBase .~ HELD FLAMETHROWER
|