269 lines
8.8 KiB
Haskell
269 lines
8.8 KiB
Haskell
{-# LANGUAGE TupleSections #-}
|
|
|
|
module Dodge.Combine.Combinations
|
|
( itemCombinations
|
|
, flatItemCombinations
|
|
, bulletWeapons
|
|
) where
|
|
|
|
--import Data.Bifunctor
|
|
import Dodge.Item.Ammo
|
|
import Dodge.Data.Item
|
|
import Dodge.Item
|
|
import LensHelp
|
|
|
|
watchCombinations :: [([(ItAmount, ItemType)], Item)]
|
|
watchCombinations =
|
|
[ po [LEFT STOPWATCH, LEFT REWINDWATCH] scrollWatch
|
|
, po [CRAFT TIMEMODULE, CRAFT MICROCHIP, CRAFT HARDDRIVE] scrollWatch
|
|
, po [CRAFT TIMEMODULE, CRAFT MICROCHIP, CRAFT RAM] scrollWatch
|
|
]
|
|
where
|
|
po xs it = (map o xs, it)
|
|
o = (1,)
|
|
|
|
backpackCombinations :: [([(ItAmount,ItemType)],Item)]
|
|
backpackCombinations =
|
|
[ po [CRAFT HOSE, CRAFT STEELDRUM] fuelPack
|
|
]
|
|
where
|
|
po xs it = (map o xs, it)
|
|
o = (1,)
|
|
|
|
--hatCombinations :: [([(ItAmount,ItemBaseType)],Item)]
|
|
--hatCombinations =
|
|
-- [ po [EQUIP HAT, CRAFT (TARGETMODULE tt)] (targetingHat tt) | tt <- [minBound..]
|
|
-- ]
|
|
-- where
|
|
-- po xs it = (map o xs, it)
|
|
-- o = (1,)
|
|
|
|
magazineCombinations :: [([(ItAmount,ItemType)],Item)]
|
|
magazineCombinations =
|
|
[ po [CRAFT TIN, CRAFT SPRING] tinMag
|
|
]
|
|
where
|
|
po xs it = (map o xs, it)
|
|
o = (1,)
|
|
|
|
flatItemCombinations :: [([ItemType], Item)]
|
|
flatItemCombinations = map (over _1 (concatMap f)) itemCombinations
|
|
where
|
|
f (x,it) = replicate (_getItAmount x) it
|
|
|
|
itemCombinations :: [([(ItAmount, ItemType)], Item)]
|
|
itemCombinations =
|
|
watchCombinations ++
|
|
backpackCombinations ++
|
|
-- hatCombinations ++
|
|
magazineCombinations ++
|
|
[ po [CRAFT PIPE, CRAFT HARDWARE] (bangStick 1)
|
|
, po [HELD (BANGSTICK 1), CRAFT TIN] pistol
|
|
, po [HELD PISTOL, CRAFT SPRING] autoPistol
|
|
, po [HELD AUTOPISTOL, cr PLANK] smg
|
|
, po [HELD AUTOPISTOL, cr SPRING] machinePistol
|
|
, po [cr CAN, cr HARDWARE] bangCone
|
|
, po [HELD BANGCONE, cr PLANK] blunderbuss
|
|
, po [HELD BLUNDERBUSS, cr STEELDRUM] (grapeCannon 1)
|
|
, po [HELD (BANGSTICK 1), cr PLANK] rifle
|
|
, po [HELD (BANGSTICK 1), HELD (BANGSTICK 1), HELD (BANGSTICK 1)] (volleyGun 3)
|
|
-- , po [HELD RIFLE, cr TIN] repeater
|
|
, po [HELD RIFLE, cr SPRING] autoRifle
|
|
, po [HELD RIFLE, cr CAN] burstRifle
|
|
]
|
|
++ [ po [cr MOTOR, HELD (VOLLEYGUN i)] $ miniGunX i | i <- [3 .. 10]
|
|
]
|
|
++ [ po [HELD AMR, cr PIPE] sniperRifle
|
|
, po [HELD RIFLE, cr PIPE] amr
|
|
, po [HELD AMR, cr SPRING] autoAmr
|
|
-- , po [HELD AMR, cr MOTOR] machineGun
|
|
, p [p 2 $ cr TUBE, o $ cr HARDWARE] launcher
|
|
, p [p 2 $ cr TUBE, o $ HELD LAUNCHER] (launcherX 2)
|
|
]
|
|
++ [p [p 2 $ cr TUBE, o $ HELD (LAUNCHERX i)] (launcherX (i + 1)) | i <- [2 .. 9]]
|
|
++ [ po [cr LIGHTER, cr PUMP, cr CAN] flameSpitter
|
|
, po [HELD FLAMESPITTER, cr CAN, cr PUMP] blowTorch
|
|
, po [HELD FLAMESPITTER, cr STEELDRUM] flameThrower
|
|
, po [HELD FLAMETHROWER, cr STEELDRUM] flameWall
|
|
, po [HELD FLAMETHROWER, cr PUMP] flameTorrent
|
|
, p [o $ cr PRISM, o $ cr TRANSFORMER, o $ cr PIPE] laser
|
|
-- , po [HELD LASGUN, HELD LASGUN, cr HARDWARE] dualBeam
|
|
-- , po [HELD LASGUN, cr TRANSFORMER] (lasWide 2)
|
|
-- , po [HELD LASGUN, HELD LASGUN, HELD LASGUN, cr HARDWARE] lasCircle
|
|
, p [o $ cr TRANSFORMER, p 2 $ cr CAN] sparkGun
|
|
, p [o (HELD SPARKGUN), p 2 $ cr PIPE] teslaGun
|
|
, p [o $ cr TELEPORTMODULE, p 2 $ cr MICROCHIP] blinkGun
|
|
, p [o $ LEFT BLINKER, p 2 $ cr MICROCHIP] unsafeBlinkGun
|
|
, po [cr MAGNET, cr TIN] magShield
|
|
, p [p 2 $ cr PIPE, o $ cr PLATE, o $ cr MOTOR] powerLegs
|
|
, p [p 4 $ cr CAN] plateCraft
|
|
, p [p 3 $ cr TIN] plateCraft
|
|
, p [p 2 $ cr STEELDRUM] plateCraft
|
|
, p [p 2 $ cr PLATE] flatShield
|
|
, po [cr MICROCHIP, cr PRISM] (makeTypeCraft LIGHTSENSOR)
|
|
, po [cr MICROCHIP, cr MICROPHONE] (makeTypeCraft SOUNDSENSOR)
|
|
, po [cr MICROCHIP, cr THERMOMETER] (makeTypeCraft HEATSENSOR)
|
|
, po [cr MICROCHIP, cr TRANSMITTER, cr LIGHTSENSOR] (clickDetector ITEMDETECTOR)
|
|
, po [cr MICROCHIP, cr TRANSMITTER, cr SOUNDSENSOR] (clickDetector WALLDETECTOR)
|
|
, po [cr MICROCHIP, cr TRANSMITTER, cr HEATSENSOR] (clickDetector CREATUREDETECTOR)
|
|
, po [AMMOMAG BATTERY, cr LED] torch
|
|
, po [hd TORCH, eq HAT] headLamp
|
|
-- , po [cr LIGHTER, cr THERMOMETER, cr MICROCHIP] (energyBallCraft IncBall)
|
|
-- , po [cr TRANSFORMER, AMMOMAG BATTERY, cr MICROCHIP] (energyBallCraft TeslaBall)
|
|
]
|
|
-- ++ map (\i -> po [HELD (LASWIDE i), cr TRANSFORMER] $ lasWide (i + 1)) [2 .. 9]
|
|
++ map (\i -> po [cr PIPE, HELD (BANGSTICK i)] $ bangStick (i + 1)) [1 .. 8]
|
|
++ map (\i -> po [hd (VOLLEYGUN i), HELD (BANGSTICK 1)] $ volleyGun (i + 1)) [3 .. 5]
|
|
++ map (\i -> po [hd (MINIGUNX i), HELD (BANGSTICK 1)] $ miniGunX (i + 1)) [3 .. 15]
|
|
++ map (\i -> po [hd (GRAPECANNON i), cr STEELDRUM] $ grapeCannon (i + 1)) [1, 2, 3]
|
|
-- ++ [ po (_iyBase (_itType it) : mtype) $ it & itType . iyModules . ix modtype .~ m
|
|
-- | (modtype, is, ms) <- moduleCombinations
|
|
-- , it <- is
|
|
-- , (mtype, m) <- ms
|
|
-- ]
|
|
where
|
|
p = (,)
|
|
po xs it = (map o xs, it)
|
|
o = (1,)
|
|
cr = CRAFT
|
|
hd = HELD
|
|
eq = EQUIP
|
|
|
|
-- so there are two requirements for a module combination: the module slot must
|
|
-- exist on the item, and the item must be in the given list below
|
|
-- these two requirements should probably be combined
|
|
--moduleCombinations :: [(ModuleSlot, [Item], [([ItemBaseType], ItemModuleType)])]
|
|
--moduleCombinations =
|
|
-- [
|
|
-- ( ModHeldAttach
|
|
-- ,
|
|
-- [ rifle
|
|
-- , autoRifle
|
|
-- , burstRifle
|
|
-- ]
|
|
-- ,
|
|
-- [ amod [cr TAPE, HELD TORCH] ATTACHTORCH
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModAutoMag
|
|
-- ,
|
|
-- [ autoRifle
|
|
-- , autoPistol
|
|
-- , smg
|
|
-- ]
|
|
-- ,
|
|
-- [ amod [cr MAGNET, cr HARDWARE] MAGNETMAG
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModBulletCollision
|
|
-- , bulletWeapons
|
|
-- ,
|
|
-- [ amod [cr (BULBODYCRAFT be)] (BULBODY be) | be <- [minBound..]
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModBulletPayload
|
|
-- , bulletMagazines
|
|
-- ,
|
|
-- [ amod [cr (ENERGYBALLCRAFT x)] (BULPAY (BulBall x)) | x <- [minBound ..]
|
|
-- ] ++
|
|
-- [ amod [cr GASINJECTOR] (BULPAY BulGas)
|
|
-- , amod [cr FRAGCRAFT] (BULPAY BulFrag)
|
|
-- , amod [cr FLAKCRAFT] (BULPAY BulFlak)
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModTarget
|
|
-- , homingLaunchers ++ bulletWeapons
|
|
-- ,
|
|
-- [ amod [cr MICROCHIP, cr HEATSENSOR] (TARGET TargetRBCreature)
|
|
-- , amod [cr MICROCHIP, cr LIGHTSENSOR] (TARGET TARGETLASER)
|
|
-- , amod [cr MICROCHIP, cr SOUNDSENSOR] (TARGET TargetRBPress)
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModBulletTrajectory
|
|
-- , bulletWeapons
|
|
-- ,
|
|
-- [ amod [cr MAGNET, cr MICROCHIP, cr HARDWARE] (BULTRAJ MagnetTrajectoryType)
|
|
-- , amod [cr MICROCHIP, cr HARDWARE] (BULTRAJ FlechetteTrajectoryType)
|
|
-- , amod [cr ANTIMATTER, cr HARDWARE] (BULTRAJ BezierTrajectoryType)
|
|
-- ]
|
|
-- )
|
|
-- ,
|
|
-- ( ModDualBeam
|
|
-- ,[]
|
|
---- , [dualBeam]
|
|
-- ,
|
|
-- [ amod [cr (ENERGYBALLCRAFT IncBall)] INCENDLAS
|
|
-- , amod [cr TRANSFORMER] SPLITLAS
|
|
-- , amod [cr (ENERGYBALLCRAFT TeslaBall)] STATICLAS
|
|
-- ]
|
|
-- )
|
|
---- ,
|
|
---- ( ModTeleport
|
|
---- , teleportableWeapons
|
|
---- ,
|
|
---- [ amod [cr TELEPORTMODULE, cr MICROCHIP] WEPTELE
|
|
---- ]
|
|
---- )
|
|
-- ,
|
|
-- ( ModLauncherHoming
|
|
-- , homingLaunchers
|
|
-- ,
|
|
-- [ amod [cr MICROCHIP, cr TRANSMITTER] LAUNCHHOME
|
|
-- ]
|
|
-- )
|
|
--
|
|
-- ]
|
|
-- where
|
|
-- amod = (,)
|
|
-- cr = CRAFT
|
|
|
|
|
|
--batteryGuns :: [Item]
|
|
--batteryGuns =
|
|
-- [ teslaGun
|
|
-- , sparkGun
|
|
-- , lasGun
|
|
-- ]
|
|
-- ++ [ lasWide i | i <- [2 .. 10]
|
|
-- ]
|
|
|
|
--teleportableWeapons :: [Item]
|
|
--teleportableWeapons = bulletWeapons ++ batteryGuns ++ homingLaunchers
|
|
|
|
--bulletMagazines :: [Item]
|
|
--bulletMagazines =
|
|
-- [tinMag
|
|
-- ,revolveMag
|
|
-- ,drumMag
|
|
-- ,beltMag
|
|
-- ]
|
|
|
|
bulletWeapons :: [Item]
|
|
bulletWeapons =
|
|
[bangStick i | i <- [1 .. 9]]
|
|
++ [volleyGun i | i <- [3 .. 6]]
|
|
++ [miniGunX i | i <- [3 .. 16]]
|
|
++ [grapeCannon i | i <- [1, 2, 3, 4]]
|
|
++ [ pistol
|
|
, autoPistol
|
|
, smg
|
|
, machinePistol
|
|
, rifle
|
|
-- , repeater
|
|
, autoRifle
|
|
, burstRifle
|
|
, bangCone
|
|
, blunderbuss
|
|
-- , machineGun
|
|
, elephantGun
|
|
, sniperRifle
|
|
, amr
|
|
, autoAmr
|
|
, bangRod
|
|
]
|