261 lines
5.4 KiB
Haskell
261 lines
5.4 KiB
Haskell
{-# LANGUAGE DeriveAnyClass #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Dodge.Data.Item.Combine where
|
|
|
|
import Control.Lens
|
|
import Data.Aeson
|
|
import Data.Aeson.TH
|
|
import qualified Data.Map.Strict as M
|
|
import Dodge.Data.Equipment.Misc
|
|
import Dodge.Data.Item.Targeting
|
|
import Dodge.Data.Item.Use.Consumption
|
|
|
|
data ItemType = ItemType
|
|
{ _iyBase :: ItemBaseType
|
|
, _iyModules :: M.Map ModuleSlot ItemModuleType
|
|
}
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data Stack = NoStack | Stack ItAmount
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data CraftType
|
|
= PIPE
|
|
| TUBE
|
|
| HARDWARE
|
|
| SPRING
|
|
| HOSE
|
|
| TAPE
|
|
| CAN
|
|
| TIN
|
|
| STEELDRUM
|
|
| PLANK
|
|
| GLASSSHARD
|
|
| SCRAPMETAL
|
|
| PUMP
|
|
| MOTOR
|
|
| TRANSFORMER
|
|
| PRISM
|
|
| LIGHTER
|
|
| MAGNET
|
|
| ANTIMATTER
|
|
| PLATE
|
|
| TRANSMITTER
|
|
| MICROCHIP
|
|
| HARDDRIVE
|
|
| RAM
|
|
| AIUNIT
|
|
| CAMERA
|
|
| MINIDISPLAY -- visual display unit
|
|
| LED
|
|
| NAILBOX
|
|
| IRONBAR
|
|
| LIGHTSENSOR
|
|
| SOUNDSENSOR
|
|
| HEATSENSOR
|
|
| MICROPHONE
|
|
| THERMOMETER
|
|
| CREATURESENSOR
|
|
| WIRE
|
|
| BATTERY
|
|
| FUELCELL
|
|
| PORTABLEFUSION
|
|
| FRAGMODULE
|
|
| FLASHMODULE
|
|
| GASINJECTOR
|
|
| FLAKCRAFT
|
|
| FRAGCRAFT
|
|
| ENERGYBALLCRAFT EnergyBallType
|
|
| BULBODYCRAFT BulletEffect
|
|
| TELEPORTMODULE
|
|
| TIMEMODULE
|
|
| SIZEMODULE
|
|
| GRAVITYMODULE
|
|
| TARGETMODULE TargetType
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat)
|
|
|
|
data ItemBaseType
|
|
= HELD {_ibtHeld :: HeldItemType}
|
|
| LEFT {_ibtLeft :: LeftItemType}
|
|
| EQUIP {_ibtEquip :: EquipItemType}
|
|
| CONSUMABLE {_ibtConsumable :: ConsumableItemType}
|
|
| CRAFT CraftType
|
|
| ATTACH AttachType
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data AttachType
|
|
= SCROLLATTACH ScrollAttachType
|
|
| AMMOATTACH AmmoAttachType
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data ScrollAttachType
|
|
= ZOOMSCOPE
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
data AmmoAttachType
|
|
= TINMAG
|
|
| DRUMMAG
|
|
| BULLETBELT
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
|
|
data ConsumableItemType
|
|
= MEDKIT Int
|
|
| EXPLOSIVES
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data EquipItemType
|
|
= MAGSHIELD
|
|
| FLAMESHIELD
|
|
| FRONTARMOUR
|
|
| WRISTARMOUR
|
|
| INVISIBILITYEQUIPMENT EquipSite
|
|
| BRAINHAT
|
|
| HAT
|
|
| TARGETINGHAT TargetType
|
|
| HEADLAMP
|
|
| POWERLEGS
|
|
| SPEEDLEGS
|
|
| JUMPLEGS
|
|
| JETPACK
|
|
| FUELPACK
|
|
| BULLETBELTPACK
|
|
| BULLETBELTBRACER
|
|
| BATTERYPACK
|
|
| AUTODETECTOR Detector
|
|
deriving (Eq, Ord, Show, Read)
|
|
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data LeftItemType
|
|
= BOOSTER
|
|
| STOPWATCH
|
|
| REWINDWATCH
|
|
| SCROLLWATCH
|
|
| BLINKER
|
|
| BLINKERUNSAFE
|
|
| SHRINKER
|
|
| SPAWNER
|
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data HeldItemType
|
|
= BANGSTICK {_xNum :: Int}
|
|
| PISTOL
|
|
| REVOLVER
|
|
| REVOLVERX {_xNum :: Int}
|
|
| MACHINEPISTOL
|
|
| AUTOPISTOL
|
|
| SMG
|
|
| BANGCONE
|
|
| BLUNDERBUSS
|
|
| GRAPECANNON {_xNum :: Int}
|
|
| MINIGUNX {_xNum :: Int}
|
|
| VOLLEYGUN {_xNum :: Int}
|
|
| RIFLE
|
|
| REPEATER
|
|
| AUTORIFLE
|
|
| BURSTRIFLE
|
|
| BANGROD
|
|
| ELEPHANTGUN
|
|
| AMR
|
|
| AUTOAMR
|
|
| SNIPERRIFLE
|
|
| MACHINEGUN
|
|
| FLAMESPITTER
|
|
| FLAMETHROWER
|
|
| FLAMETORRENT
|
|
| FLAMEWALL
|
|
| BLOWTORCH
|
|
| SPARKGUN
|
|
| TESLAGUN
|
|
| LASGUN
|
|
| LASCIRCLE
|
|
| DUALBEAM
|
|
| LASWIDE {_xNum :: Int}
|
|
| TRACTORGUN
|
|
| LAUNCHER
|
|
| LAUNCHERX {_xNum :: Int}
|
|
| REMOTELAUNCHER
|
|
| POISONSPRAYER
|
|
| DRONELAUNCHER
|
|
| SHATTERGUN
|
|
| FORCEFIELDGUN
|
|
| HELDDETECTOR Detector
|
|
| TORCH
|
|
| BINOCULARS
|
|
| FLATSHIELD
|
|
| KEYCARD Int
|
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data ItemModuleType
|
|
= EMPTYMODULE
|
|
| MAGNETMAG
|
|
| BULPAY BulletSpawn
|
|
| BULBODY BulletEffect
|
|
| BULTRAJ {_imtBulletTrajectoryType :: BulletTrajectoryType}
|
|
| TARGET {_imtTargetType :: TargetType}
|
|
| INCENDLAS
|
|
| SPLITLAS
|
|
| STATICLAS
|
|
| WEPTELE
|
|
| LAUNCHHOME
|
|
| EXTRABATTERY
|
|
| ATTACHTORCH
|
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data Detector
|
|
= ITEMDETECTOR
|
|
| CREATUREDETECTOR
|
|
| WALLDETECTOR
|
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data ModuleSlot
|
|
= ModBulletCollision
|
|
| ModBulletPayload
|
|
| ModRifleMag
|
|
| ModAutoMag
|
|
| ModTarget
|
|
| ModBulletTrajectory
|
|
| ModLauncherHoming
|
|
| ModBattery
|
|
| ModTeleport
|
|
| ModDualBeam
|
|
| ModHeldAttach
|
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
makeLenses ''ItemType
|
|
makeLenses ''ItemBaseType
|
|
makeLenses ''HeldItemType
|
|
makeLenses ''ItemModuleType
|
|
deriveJSON defaultOptions ''Stack
|
|
deriveJSON defaultOptions ''CraftType
|
|
deriveJSON defaultOptions ''ConsumableItemType
|
|
deriveJSON defaultOptions ''AmmoAttachType
|
|
deriveJSON defaultOptions ''ScrollAttachType
|
|
deriveJSON defaultOptions ''AttachType
|
|
deriveJSON defaultOptions ''Detector
|
|
deriveJSON defaultOptions ''EquipItemType
|
|
deriveJSON defaultOptions ''LeftItemType
|
|
deriveJSON defaultOptions ''HeldItemType
|
|
deriveJSON defaultOptions ''ItemModuleType
|
|
deriveJSON defaultOptions ''ModuleSlot
|
|
deriveJSON defaultOptions ''ItemBaseType
|
|
deriveJSON defaultOptions ''ItemType
|
|
|
|
instance ToJSONKey ModuleSlot
|
|
|
|
instance FromJSONKey ModuleSlot
|