137 lines
3.7 KiB
Haskell
137 lines
3.7 KiB
Haskell
module Dodge.Item.Weapon.BulletGun.Rod
|
|
( bangRod
|
|
, elephantGun
|
|
, amr
|
|
, autoAmr
|
|
, sniperRifle
|
|
, machineGun
|
|
) where
|
|
import Dodge.Data
|
|
import Dodge.Item.Weapon.BulletGun.Clip
|
|
--import Dodge.ChainEffect
|
|
--import Dodge.TweakBullet
|
|
import Dodge.Default.Weapon
|
|
--import Dodge.Item.Weapon.InventoryDisplay
|
|
import Dodge.Default
|
|
import Dodge.Item.Weapon.ZoomScope
|
|
--import Dodge.Item.Attachment
|
|
import Dodge.Item.Weapon.ExtraEffect
|
|
--import Dodge.Item.Weapon.InventoryDisplay
|
|
import Dodge.Item.Weapon.AmmoParams
|
|
--import Dodge.Item.Draw
|
|
import Dodge.Item.Weapon.Bullet
|
|
import Dodge.Item.Weapon.TriggerType
|
|
import Dodge.SoundLogic.LoadSound
|
|
import Picture
|
|
import Geometry
|
|
import ShapePicture
|
|
import Shape
|
|
--import Sound.Data
|
|
import LensHelp
|
|
|
|
--import Data.Maybe
|
|
--import qualified Data.Sequence as Seq
|
|
--import Control.Lens
|
|
--import Control.Monad.State
|
|
--import System.Random
|
|
|
|
bangRod :: Item
|
|
bangRod = defaultGun
|
|
{ _itName = "BANGROD"
|
|
, _itType = BANGROD
|
|
, _itParams = BulletShooter
|
|
{ _muzVel = 0.8
|
|
, _rifling = 1
|
|
, _bore = 2
|
|
, _gunBarrels = SingleBarrel 0.1
|
|
, _recoil = 50
|
|
, _torqueAfter = 0.3
|
|
, _randomOffset = 0
|
|
}
|
|
, _itUse = ruseAmmoParamsRate 12 upHammer
|
|
[ ammoHammerCheck
|
|
, useTimeCheck
|
|
, withSoundStart bangEchoS
|
|
, useAmmoAmount 1
|
|
, withTorqueAfter
|
|
, applyInaccuracy
|
|
, withThickSmokeI
|
|
, withMuzFlareI
|
|
, withRecoil
|
|
]
|
|
, _itDimension = ItemDimension
|
|
{ _dimRad = 12
|
|
, _dimCenter = V3 5 0 0
|
|
, _dimPortage = HeldItem
|
|
{_handlePos = 5
|
|
,_muzPos = 30
|
|
}
|
|
, _dimSPic = \it -> noPic $ baseRodShape
|
|
<> makeSingleClipAt (V3 5 0 3) it
|
|
}
|
|
, _itConsumption = defaultAmmo
|
|
{ _aoType = basicBullet
|
|
, _ammoBaseMax = 1
|
|
, _reloadTime = 20
|
|
, _reloadType = ActiveClear
|
|
}
|
|
}
|
|
& itUse . useAim . aimSpeed .~ 0.2
|
|
& itUse . useAim . aimRange .~ 1
|
|
& itUse . useAim . aimStance .~ OneHand
|
|
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
|
|
baseRodShape :: Shape
|
|
baseRodShape = colorSH orange $ upperPrismPoly 3 $ rectXH 20 2
|
|
baseAMRShape :: Shape
|
|
baseAMRShape = colorSH orange $ upperPrismPoly 3 $ rectXH 30 2
|
|
elephantGun :: Item
|
|
elephantGun = bangRod
|
|
& itName .~ "ELEPHANTGUN"
|
|
& itType .~ ELEPHANTGUN
|
|
& itUse . useAim . aimStance .~ TwoHandTwist
|
|
& itParams . gunBarrels .~ SingleBarrel 0.05
|
|
& itDimension . dimSPic .~ (\it -> noPic $ baseAMRShape
|
|
<> makeSingleClipAt (V3 5 0 3) it
|
|
)
|
|
& itUse . useMods .~
|
|
[ ammoHammerCheck
|
|
, useTimeCheck
|
|
, withSoundStart bangEchoS
|
|
, useAmmoAmount 1
|
|
, withTorqueAfter
|
|
, applyInaccuracy
|
|
, withThickSmokeI
|
|
, withMuzFlareI
|
|
, withRecoil
|
|
]
|
|
& itParams . recoil .~ 50
|
|
& itParams . torqueAfter .~ 0.1
|
|
amr :: Item
|
|
amr = elephantGun
|
|
& itName .~ "ANTIMATERIELRIFLE"
|
|
& itType .~ AMR
|
|
& itConsumption . ammoBaseMax .~ 15
|
|
& itDimension . dimSPic .~ (\it -> noPic $ baseAMRShape
|
|
<> makeTinClipAt 0 (V3 10 (-2) 0) it
|
|
)
|
|
|
|
autoAmr :: Item
|
|
autoAmr = amr
|
|
& itName .~ "AUTOAMR"
|
|
& itType .~ AUTOAMR
|
|
& itUse . useMods %~ ((ammoCheckI :) . tail)
|
|
|
|
sniperRifle :: Item
|
|
sniperRifle = elephantGun
|
|
& itName .~ "SNIPERRIFLE"
|
|
& itType .~ SNIPERRIFLE
|
|
& itParams . gunBarrels .~ SingleBarrel 0
|
|
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
|
|
& itScroll .~ zoomLongGun
|
|
& itScope .~ ZoomScope (V2 0 0) 0 1 False
|
|
& itTargeting .~ targetLaser
|
|
machineGun :: Item
|
|
machineGun = bangRod
|
|
& itName .~ "MACHINEGUN"
|
|
& itType .~ MACHINEGUN
|