Make items recoverable from base type

This commit is contained in:
2022-06-14 22:09:26 +01:00
parent f3e1a34164
commit 485c42eb24
15 changed files with 537 additions and 241 deletions
+87 -85
View File
@@ -16,81 +16,81 @@ import LensHelp
itemCombinations :: [([(IcAmount,ItemBaseType)],Item)] itemCombinations :: [([(IcAmount,ItemBaseType)],Item)]
itemCombinations = itemCombinations =
[ po [PIPE, HARDWARE] (bangStick 1) [ po [CRAFT PIPE, CRAFT HARDWARE] (bangStick 1)
, po [BANGSTICK 1, TIN] pistol , po [BANGSTICK 1, CRAFT TIN] pistol
, po [PISTOL, SPRING, HARDWARE] autoPistol , po [PISTOL, CRAFT SPRING, cr HARDWARE] autoPistol
, po [AUTOPISTOL, PLANK, HARDWARE] smg , po [AUTOPISTOL, cr PLANK, cr HARDWARE] smg
, po [AUTOPISTOL, HARDWARE] machinePistol , po [AUTOPISTOL, cr HARDWARE] machinePistol
, po [BANGSTICK 1,CAN] revolver , po [BANGSTICK 1,cr CAN] revolver
, po [REVOLVER, SPRING, HARDWARE] $ revolverX 1 , po [REVOLVER, cr SPRING, cr HARDWARE] $ revolverX 1
, po [TUBE,HARDWARE] bangCone , po [cr TUBE,cr HARDWARE] bangCone
, po [BANGCONE,PLANK] blunderbuss , po [BANGCONE,cr PLANK] blunderbuss
, po [BLUNDERBUSS,TUBE] bigBlunderbuss , po [BLUNDERBUSS,cr TUBE] bigBlunderbuss
, po [BIGBLUNDERBUSS,TUBE] biggerBlunderbuss , po [BIGBLUNDERBUSS,cr TUBE] biggerBlunderbuss
, po [BIGGERBLUNDERBUSS,TUBE] biggestBlunderbuss , po [BIGGERBLUNDERBUSS,cr TUBE] biggestBlunderbuss
, po [BANGCONE,PUMP,HARDWARE] $ grenadeLauncher 1 -- , po [BANGCONE,PUMP,HARDWARE] $ grenadeLauncher 1
, po [GRENADELAUNCHER 1,MOTOR,DRUM] $ grenadeLauncher 2 -- , po [GRENADELAUNCHER 1,MOTOR,DRUM] $ grenadeLauncher 2
, p [p 2 PIPE,o HARDWARE] bangCane , p [p 2 $ cr PIPE,o $ cr HARDWARE] bangCane
, p [p 2 PIPE,o BANGCANE] (bangCaneX 2) , p [p 2 $ cr PIPE,o BANGCANE] (bangCaneX 2)
, po [BANGCANE,TIN] rifle , po [BANGCANE,cr TIN] rifle
, po [RIFLE,PLANK] repeater , po [RIFLE,cr PLANK] repeater
, po [REPEATER,SPRING,HARDWARE] autoRifle , po [REPEATER,cr SPRING,cr HARDWARE] autoRifle
, po [REPEATER,SPRING,CAN] burstRifle , po [REPEATER,cr SPRING,cr CAN] burstRifle
, po [BURSTRIFLE,SPRING,HARDWARE] fastBurstRifle , po [BURSTRIFLE,cr SPRING,cr HARDWARE] fastBurstRifle
, po [FASTBURSTRIFLE,SPRING,HARDWARE] completeBurstRifle , po [FASTBURSTRIFLE,cr SPRING,cr HARDWARE] completeBurstRifle
, po [MOTOR,BANGCANEX 3] $ miniGunX 3 , po [cr MOTOR,BANGCANEX 3] $ miniGunX 3
, po [MOTOR,BANGCANEX 4] $ miniGunX 4 , po [cr MOTOR,BANGCANEX 4] $ miniGunX 4
, po [MOTOR,BANGCANEX 5] $ miniGunX 5 , po [cr MOTOR,BANGCANEX 5] $ miniGunX 5
, po [MOTOR,BANGCANEX 6] $ miniGunX 6 , po [cr MOTOR,BANGCANEX 6] $ miniGunX 6
, p [p 3 PIPE,o HARDWARE] bangRod , p [p 3 $ cr PIPE,o $ cr HARDWARE] bangRod
, po [BANGROD,PLANK,HARDWARE] elephantGun , po [BANGROD,cr PLANK,cr HARDWARE] elephantGun
, po [ELEPHANTGUN,HARDWARE,PRISM] sniperRifle , po [ELEPHANTGUN,cr HARDWARE,cr PRISM] sniperRifle
, po [ELEPHANTGUN,HARDWARE,TIN] amr , po [ELEPHANTGUN,cr HARDWARE,cr TIN] amr
, po [AMR,HARDWARE,SPRING] autoAmr , po [AMR,cr HARDWARE,cr SPRING] autoAmr
, po [BANGROD,PLATE,DRUM,MOTOR] machineGun , po [BANGROD,cr PLATE,cr DRUM,cr MOTOR] machineGun
, p [p 2 TUBE,o HARDWARE] launcher , p [p 2 $ cr TUBE,o $ cr HARDWARE] launcher
, p [p 2 TUBE,o LAUNCHER] (launcherX 2) , p [p 2 $ cr TUBE,o LAUNCHER] (launcherX 2)
] ++ [ p [p 2 TUBE,o $ LAUNCHERX i] (launcherX (i+1)) | i <- [2..9]] ] ++ [ p [p 2 $ cr TUBE,o $ LAUNCHERX i] (launcherX (i+1)) | i <- [2..9]]
++ ++
[ po [LIGHTER,PUMP,CAN] flameSpitter [ po [cr LIGHTER,cr PUMP,cr CAN] flameSpitter
, po [FLAMESPITTER,CAN,PUMP] blowTorch , po [FLAMESPITTER,cr CAN,cr PUMP] blowTorch
, po [FLAMESPITTER,DRUM] flameThrower , po [FLAMESPITTER,cr DRUM] flameThrower
, po [FLAMETHROWER,DRUM] flameWall , po [FLAMETHROWER,cr DRUM] flameWall
, po [FLAMETHROWER,PUMP] flameTorrent , po [FLAMETHROWER,cr PUMP] flameTorrent
, p [o PRISM,o TRANSFORMER,o PIPE] lasGun , p [o $ cr PRISM,o $ cr TRANSFORMER,o $ cr PIPE] lasGun
, p [o LASGUN,o PRISM] lasGunSway , p [o LASGUN,o $ cr PRISM] lasSway
, p [o LASGUN,o HARDWARE] lasGunSwing , p [o LASGUN,o $ cr HARDWARE] lasSwing
-- , p [o LASGUN,o PIPE] lasGunPulse -- , p [o LASGUN,o PIPE] lasGunPulse
, p [o LASGUN,p 2 PIPE] lasGunDual , p [o LASGUN,p 2 $ cr PIPE] lasDual
, p [o LASGUN,o PIPE, o PRISM] lasGunWidePulse , p [o LASGUN,o $ cr PIPE, o $ cr PRISM] lasWidePulse
, p [o LASGUN,o TRANSFORMER,o PRISM] (lasGunWide 2) , p [o LASGUN,o $ cr TRANSFORMER,o $ cr PRISM] (lasWide 2)
, p [o TRANSFORMER,p 2 CAN] sparkGun , p [o $ cr TRANSFORMER,p 2 $ cr CAN] sparkGun
, p [o SPARKGUN,p 2 PIPE] teslaGun , p [o SPARKGUN,p 2 $ cr PIPE] teslaGun
, p [o TELEPORTMODULE,p 2 MICROCHIP] blinkGun , p [o $ cr TELEPORTMODULE,p 2 $ cr MICROCHIP] blinkGun
, p [o BLINKER, p 2 MICROCHIP] unsafeBlinkGun , p [o BLINKER, p 2 $ cr MICROCHIP] unsafeBlinkGun
, po [MAGNET,TIN] magShield , po [cr MAGNET,cr TIN] magShield
, p [p 2 PIPE,o PLATE,o MOTOR] powerLegs , p [p 2 $ cr PIPE,o $ cr PLATE,o $ cr MOTOR] powerLegs
, p [p 4 CAN] plateCraft , p [p 4 $ cr CAN] plateCraft
, p [p 3 TIN] plateCraft , p [p 3 $ cr TIN] plateCraft
, p [p 2 DRUM] plateCraft , p [p 2 $ cr DRUM] plateCraft
, p [p 2 PLATE] flatShield , p [p 2 $ cr PLATE] flatShield
] ]
++ map (\i -> po [LASGUNWIDE i,TRANSFORMER,PRISM] $ lasGunWide (i+1)) [1..9] ++ map (\i -> po [LASGUNWIDE i,cr TRANSFORMER,cr PRISM] $ lasWide (i+1)) [1..9]
++ map (\i -> po [LASGUNWIDE i,HARDWARE] $ lasGunFocus i) [1..10] ++ map (\i -> po [LASGUNWIDE i,cr HARDWARE] $ lasFocus i) [1..10]
++ map (\i -> po [PIPE,BANGSTICK i] $ bangStick (i+1)) [1..8] ++ map (\i -> po [cr PIPE,BANGSTICK i] $ bangStick (i+1)) [1..8]
++ map (\i -> po [REVOLVERX i,CAN] $ revolverX (i+1)) [1..5] ++ map (\i -> po [REVOLVERX i,cr CAN] $ revolverX (i+1)) [1..5]
++ map (\i -> p [o (BANGCANEX i),p 2 PIPE] $ bangCaneX (i+1)) [1..5] ++ map (\i -> p [o (BANGCANEX i),p 2 $ cr PIPE] $ bangCaneX (i+1)) [1..5]
++ map (\i -> po [MINIGUNX i,BANGCANE] $ miniGunX (i+1)) [3..15] ++ map (\i -> po [MINIGUNX i,BANGCANE] $ miniGunX (i+1)) [3..15]
++ [ po (_iyBase (_itType it):mtype) $ it & itType . iyModules . ix modtype .~ m ++ [ po (_iyBase (_itType it):mtype) $ it & itType . iyModules . ix modtype .~ m
@@ -102,6 +102,7 @@ itemCombinations =
p = (,) p = (,)
po xs it = (map o xs,it) po xs it = (map o xs,it)
o = (1,) o = (1,)
cr = CRAFT
moduleCombinations :: [( ModuleSlot, [Item], [([ItemBaseType],ItemModuleType)] )] moduleCombinations :: [( ModuleSlot, [Item], [([ItemBaseType],ItemModuleType)] )]
moduleCombinations = moduleCombinations =
@@ -111,8 +112,8 @@ moduleCombinations =
,burstRifle ,burstRifle
,fastBurstRifle ,fastBurstRifle
] ]
, [amod [DRUM,HARDWARE] DRUMMAG , [amod [cr DRUM,cr HARDWARE] DRUMMAG
,amod [MOTOR,HARDWARE] BELTMAG ,amod [cr MOTOR,cr HARDWARE] BELTMAG
] ]
) )
, ( ModAutoMag , ( ModAutoMag
@@ -120,56 +121,57 @@ moduleCombinations =
,autoPistol ,autoPistol
,smg ,smg
] ]
, [amod [MAGNET,HARDWARE] MAGNETMAG , [amod [cr MAGNET,cr HARDWARE] MAGNETMAG
] ]
) )
, ( ModBullet , ( ModBullet
, bulletWeapons , bulletWeapons
, [amod [INCENDIARYMODULE] INCENDBUL , [amod [cr INCENDIARYMODULE] INCENDBUL
,amod [BOUNCEMODULE] BOUNCEBUL ,amod [cr BOUNCEMODULE] BOUNCEBUL
,amod [STATICMODULE] STATICBUL ,amod [cr STATICMODULE] STATICBUL
,amod [CONCUSSMODULE] CONCUSBUL ,amod [cr CONCUSSMODULE] CONCUSBUL
] ]
) )
, ( ModTarget , ( ModTarget
, homingLaunchers ++ bulletWeapons , homingLaunchers ++ bulletWeapons
, [amod [MICROCHIP,CREATURESENSOR] TARGCR , [amod [cr MICROCHIP,cr CREATURESENSOR] TARGCR
,amod [MICROCHIP,PRISM] TARGLAS ,amod [cr MICROCHIP,cr PRISM] TARGLAS
,amod [MICROCHIP,TIN] TARGPOS ,amod [cr MICROCHIP,cr TIN] TARGPOS
] ]
) )
, ( ModBulletTrajectory , ( ModBulletTrajectory
, bulletWeapons , bulletWeapons
, [amod [MAGNET,MICROCHIP,HARDWARE] MAGNETTRAJ , [amod [cr MAGNET, cr MICROCHIP,cr HARDWARE] MAGNETTRAJ
,amod [MICROCHIP,HARDWARE] FLECHETRAJ ,amod [cr MICROCHIP, cr HARDWARE] FLECHETRAJ
,amod [ANTIMATTER,HARDWARE] BEZIERTRAJ ,amod [cr ANTIMATTER,cr HARDWARE] BEZIERTRAJ
] ]
) )
, ( ModDualBeam , ( ModDualBeam
, [lasGunDual] , [lasDual]
, [amod [INCENDIARYMODULE] INCENDLAS , [amod [cr INCENDIARYMODULE] INCENDLAS
,amod [TRANSFORMER] SPLITLAS ,amod [cr TRANSFORMER] SPLITLAS
,amod [STATICMODULE] STATICLAS ,amod [cr STATICMODULE] STATICLAS
] ]
) )
, ( ModTeleport , ( ModTeleport
, teleportableWeapons , teleportableWeapons
, [amod [TELEPORTMODULE,MICROCHIP] WEPTELE , [amod [cr TELEPORTMODULE,cr MICROCHIP] WEPTELE
] ]
) )
, ( ModLauncherHoming , ( ModLauncherHoming
, homingLaunchers , homingLaunchers
, [ amod [MICROCHIP,TRANSMITTER] LAUNCHHOME , [ amod [cr MICROCHIP,cr TRANSMITTER] LAUNCHHOME
] ]
) )
, ( ModBattery , ( ModBattery
, batteryGuns , batteryGuns
, [amod [BATTERY] EXTRABATTERY , [amod [cr BATTERY] EXTRABATTERY
] ]
) )
] ]
where where
amod = (,) amod = (,)
cr = CRAFT
homingLaunchers :: [Item] homingLaunchers :: [Item]
homingLaunchers = launcher : [launcherX i | i <- [2..10]] homingLaunchers = launcher : [launcherX i | i <- [2..10]]
@@ -179,12 +181,12 @@ batteryGuns =
[ teslaGun [ teslaGun
, sparkGun , sparkGun
, lasGun , lasGun
, lasGunSway , lasSway
, lasGunSwing , lasSwing
] ++ ] ++
[ lasGunWide i | i <- [1..10] [ lasWide i | i <- [1..10]
] ++ ] ++
[ lasGunFocus i | i <- [1..10]] [ lasFocus i | i <- [1..10]]
teleportableWeapons :: [Item] teleportableWeapons :: [Item]
teleportableWeapons = bulletWeapons ++ batteryGuns ++ homingLaunchers teleportableWeapons = bulletWeapons ++ batteryGuns ++ homingLaunchers
+100 -95
View File
@@ -2,6 +2,7 @@
module Dodge.Combine.Data module Dodge.Combine.Data
where where
import Dodge.Equipment.Data import Dodge.Equipment.Data
import Dodge.Data.ItemAmount
import Control.Lens import Control.Lens
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
@@ -9,103 +10,15 @@ import qualified Data.Map.Strict as M
data ItemType = ItemType data ItemType = ItemType
{_iyBase :: ItemBaseType {_iyBase :: ItemBaseType
,_iyModules :: M.Map ModuleSlot ItemModuleType ,_iyModules :: M.Map ModuleSlot ItemModuleType
,_iyStack :: Stack
} }
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
-- TODO make this an enum somehow...? data Stack = NoStack | Stack IcAmount
data ItemBaseType deriving (Eq,Ord,Show)
= NOTDEFINED
| EFFGUN String data CraftType
| AUTOEFFGUN String = PIPE
-- Weapons
| BANGSTICK Int
| PISTOL
| REVOLVER
| REVOLVERX Int
| HVAUTOGUN
| LTAUTOGUN
| MACHINEPISTOL
| AUTOPISTOL
| SMG
| BANGCONE
| BLUNDERBUSS
| BIGBLUNDERBUSS
| BIGGERBLUNDERBUSS
| BIGGESTBLUNDERBUSS
| GRAPESHOTCANNON
| GRENADELAUNCHER Int -- number of chambers that can be reloaded
-- | MORTARCONE / HANDMORTAR
| BANGCANE
| MINIGUN
| MINIGUNX Int
| BANGCANEX Int
| RIFLE
| REPEATER
| AUTORIFLE
| BURSTRIFLE
| FASTBURSTRIFLE
| COMPLETEBURSTRIFLE
| BANGROD
| ELEPHANTGUN
| AMR
| AUTOAMR
| SNIPERRIFLE
| MACHINEGUN
| FLAMESPITTER
| FLAMETHROWER
| FLAMETORRENT
| FLAMEWALL
| BLOWTORCH
| AUTOGUN
| SPREADGUN
| MULTGUN
| LONGGUN
| SPARKGUN
| TESLAGUN
| LASGUN
| LASPULSE
| LASGUNDUAL
| LASGUNSWING
| LASGUNSWAY
| LASGUNWIDEPULSE
| LASGUNWIDE Int
| LASGUNFOCUS Int
| SONICGUN
| TRACTORGUN
| LAUNCHER
| LAUNCHERX Int
-- | TRACKINGLAUNCHER
| REMOTELAUNCHER
| POISONSPRAYER
| DRONELAUNCHER
| GRENADE
| REMOTEBOMB
-- Utility items
| BOOSTER
| REWINDER
| BLINKER
| BLINKERUNSAFE
| FORCEFIELDGUN
| SHRINKER
| SPAWNER
-- Equipment
| CLICKDETECTOR Detector
| AUTODETECTOR Detector
| MAGSHIELD
| FLAMESHIELD
| FRONTARMOUR
| WRISTARMOUR
| INVISIBILITYEQUIPMENT EquipSite
| BRAINHAT
| HEADLAMP
| HEADLAMP1
| POWERLEGS
| SPEEDLEGS
| JUMPLEGS
| FLATSHIELD
| JETPACK
-- Crafting
| PIPE
| TUBE | TUBE
| HARDWARE | HARDWARE
| SPRING | SPRING
@@ -151,12 +64,104 @@ data ItemBaseType
| TIMEMODULE | TIMEMODULE
| SIZEMODULE | SIZEMODULE
| GRAVITYMODULE | GRAVITYMODULE
deriving (Eq,Ord,Show,Enum)
-- TODO make this an enum somehow...?
data ItemBaseType
= NOTDEFINED
| EFFGUN String
| AUTOEFFGUN String
-- Weapons
| BANGSTICK Int
| PISTOL
| REVOLVER
| REVOLVERX Int
| MACHINEPISTOL
| AUTOPISTOL
| SMG
| BANGCONE
| BLUNDERBUSS
| BIGBLUNDERBUSS
| BIGGERBLUNDERBUSS
| BIGGESTBLUNDERBUSS
-- | GRAPESHOTCANNON
-- | GRENADELAUNCHER Int -- number of chambers that can be reloaded
-- | MORTARCONE / HANDMORTAR
| BANGCANE
-- | MINIGUN
| MINIGUNX Int
| BANGCANEX Int
| RIFLE
| REPEATER
| AUTORIFLE
| BURSTRIFLE
| FASTBURSTRIFLE
| COMPLETEBURSTRIFLE
| BANGROD
| ELEPHANTGUN
| AMR
| AUTOAMR
| SNIPERRIFLE
| MACHINEGUN
| FLAMESPITTER
| FLAMETHROWER
| FLAMETORRENT
| FLAMEWALL
| BLOWTORCH
| AUTOGUN
-- | SPREADGUN
-- | MULTGUN
| LONGGUN
| SPARKGUN
| TESLAGUN
| LASGUN
| LASPULSE
| LASGUNDUAL
| LASGUNSWING
| LASGUNSWAY
| LASGUNWIDEPULSE
| LASGUNWIDE Int
| LASGUNFOCUS Int
| SONICGUN
| TRACTORGUN
| LAUNCHER
| LAUNCHERX Int
-- | TRACKINGLAUNCHER
| REMOTELAUNCHER
| POISONSPRAYER
| DRONELAUNCHER
-- | GRENADE
-- | REMOTEBOMB
-- Utility items
| BOOSTER
| REWINDER
| BLINKER
| BLINKERUNSAFE
| FORCEFIELDGUN
| SHRINKER
| SPAWNER
-- Equipment
| CLICKDETECTOR Detector
| AUTODETECTOR Detector
| MAGSHIELD
| FLAMESHIELD
| FRONTARMOUR
| WRISTARMOUR
| INVISIBILITYEQUIPMENT EquipSite
| BRAINHAT
| HEADLAMP
| HEADLAMP1
| POWERLEGS
| SPEEDLEGS
| JUMPLEGS
| FLATSHIELD
| JETPACK
-- --
| KEYCARD Int | KEYCARD Int
-- --
| MEDKIT Int | MEDKIT Int
| CRAFT CraftType
-- --
| NoCombineType
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ItemModuleType data ItemModuleType
+5 -5
View File
@@ -13,7 +13,7 @@ import Dodge.Creature.State.Data
import Dodge.Creature.Update import Dodge.Creature.Update
import Dodge.Prop.Gib import Dodge.Prop.Gib
--import Dodge.Item.Weapon.Grenade --import Dodge.Item.Weapon.Grenade
import Dodge.Item.Weapon.Booster import Dodge.Item.Equipment.Booster
import Dodge.Item.Weapon.Utility import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.Drone import Dodge.Item.Weapon.Drone
import Dodge.Item.Craftable import Dodge.Item.Craftable
@@ -253,9 +253,9 @@ testInventory = IM.fromList $ zip [0..]
, flatShield , flatShield
, sniperRifle , sniperRifle
, makeTypeCraftNum 1 MOTOR , makeTypeCraftNum 1 MOTOR
, makeModule INCENDIARYMODULE , makeTypeCraft INCENDIARYMODULE
, makeModule STATICMODULE , makeTypeCraft STATICMODULE
, makeModule CONCUSSMODULE , makeTypeCraft CONCUSSMODULE
-- , bounceModule -- , bounceModule
-- , medkit 50 & itConsumption . itAmount .~ 3 -- , medkit 50 & itConsumption . itAmount .~ 3
, teleportModule , teleportModule
@@ -302,7 +302,7 @@ stackedInventory = IM.fromList $ zip [0..]
,flameThrower ,flameThrower
,poisonSprayer ,poisonSprayer
,launcher ,launcher
,lasDrones ,droneLauncher
--,lasGun --,lasGun
--,grenade --,grenade
--,ltAutoGun,flamer,multGun,spreadGun,remoteLauncher --,ltAutoGun,flamer,multGun,spreadGun,remoteLauncher
+1 -1
View File
@@ -85,5 +85,5 @@ maybeWarmupStatus it = case it ^? itUse . useDelay . warmMax of
in Just $ Prelude.take (5 - Prelude.length n) "*WARM" ++ n in Just $ Prelude.take (5 - Prelude.length n) "*WARM" ++ n
defaultItemType :: ItemType defaultItemType :: ItemType
defaultItemType = ItemType NOTDEFINED mempty defaultItemType = ItemType NOTDEFINED mempty NoStack
+1 -1
View File
@@ -46,7 +46,7 @@ initialAnoTree = OnwardList
, AnRoom pistolerRoom , AnRoom pistolerRoom
, AnRoom doubleCorridorBarrels , AnRoom doubleCorridorBarrels
, IntAnno $ PassthroughLockKeyLists , IntAnno $ PassthroughLockKeyLists
[(sensorRoomRunPast ELECTRICAL, takeOne [STATICMODULE,SPARKGUN] )] itemRooms [(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE,SPARKGUN] )] itemRooms
, IntAnno $ PassthroughLockKeyLists keyCardRunPastRand itemRooms , IntAnno $ PassthroughLockKeyLists keyCardRunPastRand itemRooms
, IntAnno $ AnTree . warningRooms , IntAnno $ AnTree . warningRooms
, AnTree $ rToOnward "chaseCrit+armourChaseCrit rectRoom" , AnTree $ rToOnward "chaseCrit+armourChaseCrit rectRoom"
+247 -1
View File
@@ -1,9 +1,255 @@
module Dodge.Item module Dodge.Item
( module Dodge.Item.Weapon ( module Dodge.Item.Weapon
, module Dodge.Item.Consumable , module Dodge.Item.Consumable
, module Dodge.Item.Equipment
, module Dodge.Item.PassKey , module Dodge.Item.PassKey
, module Dodge.Item.Craftable
, itemFromBase
, baseToFamily
) where ) where
--import Dodge.Data import Dodge.Data
import Dodge.Item.Weapon import Dodge.Item.Weapon
import Dodge.Item.Equipment
import Dodge.Item.Consumable import Dodge.Item.Consumable
import Dodge.Item.PassKey import Dodge.Item.PassKey
import Dodge.Item.Family
import Dodge.Item.Craftable
-- this is not ideal, should fold the itemtype into a stackable/unstackable type
itemFromBase :: ItemBaseType -> Item
itemFromBase ibt = case ibt of
NOTDEFINED -> error "cannot create undefined item"
EFFGUN _ -> undefined
AUTOEFFGUN _ -> undefined
-- Weapons
BANGSTICK i -> bangStick i
PISTOL -> pistol
REVOLVER -> revolver
REVOLVERX i -> revolverX i
MACHINEPISTOL -> machinePistol
AUTOPISTOL -> autoPistol
SMG -> smg
BANGCONE -> bangCone
BLUNDERBUSS -> blunderbuss
BIGBLUNDERBUSS -> bigBlunderbuss
BIGGERBLUNDERBUSS -> biggerBlunderbuss
BIGGESTBLUNDERBUSS -> biggestBlunderbuss
-- GRAPESHOTCANNON -> grapeShotCannon
--GRENADELAUNCHER Int -- number of chambers that can be reloaded
-- --| MORTARCONE / HANDMORTAR
BANGCANE -> bangCane
MINIGUNX i -> miniGunX i
BANGCANEX i -> bangCaneX i
RIFLE -> rifle
REPEATER -> repeater
AUTORIFLE -> autoRifle
BURSTRIFLE -> burstRifle
FASTBURSTRIFLE -> fastBurstRifle
COMPLETEBURSTRIFLE -> completeBurstRifle
BANGROD -> bangRod
ELEPHANTGUN -> elephantGun
AMR -> amr
AUTOAMR -> autoAmr
SNIPERRIFLE -> sniperRifle
MACHINEGUN -> machineGun
FLAMESPITTER -> flameSpitter
FLAMETHROWER -> flameThrower
FLAMETORRENT -> flameTorrent
FLAMEWALL -> flameWall
BLOWTORCH -> blowTorch
AUTOGUN -> autoGun
-- SPREADGUN -> spreadGun
-- MULTGUN -> multGun
LONGGUN -> longGun
SPARKGUN -> sparkGun
TESLAGUN -> teslaGun
LASGUN -> lasGun
LASPULSE -> lasPulse
LASGUNDUAL -> lasDual
LASGUNSWING -> lasSwing
LASGUNSWAY -> lasSway
LASGUNWIDEPULSE -> lasWidePulse
LASGUNWIDE i -> lasWide i
LASGUNFOCUS i -> lasFocus i
SONICGUN -> sonicGun
TRACTORGUN -> tractorGun
LAUNCHER -> launcher
LAUNCHERX i -> launcherX i
-- --| TRACKINGLAUNCHER
REMOTELAUNCHER -> remoteLauncher
POISONSPRAYER -> poisonSprayer
DRONELAUNCHER -> droneLauncher
--GRENADE
--REMOTEBOMB
-- Utility items
BOOSTER -> boosterGun
REWINDER -> rewindGun
BLINKER -> blinkGun
BLINKERUNSAFE -> unsafeBlinkGun
FORCEFIELDGUN -> forceFieldGun
SHRINKER -> shrinkGun
SPAWNER -> error "need to datify creatures first"
-- Equipment
CLICKDETECTOR d -> clickDetector d
AUTODETECTOR d -> autoDetector d
MAGSHIELD -> magShield
FLAMESHIELD -> flameShield
FRONTARMOUR -> frontArmour
WRISTARMOUR -> wristArmour
INVISIBILITYEQUIPMENT GoesOnWrist -> wristInvisibility
INVISIBILITYEQUIPMENT _ -> error "need to define invisibility for more than wrist"
BRAINHAT -> brainHat
HEADLAMP -> headLamp
HEADLAMP1 -> headLamp1
POWERLEGS -> powerLegs
SPEEDLEGS -> speedLegs
JUMPLEGS -> jumpLegs
FLATSHIELD -> flatShield
JETPACK -> jetPack
CRAFT cr -> makeTypeCraft cr
KEYCARD i -> keyCard i
MEDKIT i -> medkit i
--
-- Crafting
--PIPE
--TUBE
--HARDWARE
--SPRING
--CAN
--TIN
--DRUM
--PLANK
--SHARDGLASS
--PUMP
--MOTOR
--TRANSFORMER
--PRISM
--LIGHTER
--MAGNET
--ANTIMATTER
--PLATE
--TRANSMITTER
--MICROCHIP
--AIUNIT
--CAMERA
--MINIDISPLAY -- visual display unit
--LED
--NAILBOX
--IRONBAR
--LIGHTSENSOR
--SOUNDSENSOR
--HEATSENSOR
--CREATURESENSOR
--WIRE
--BATTERY
--FUELCELL
--PORTABLEFUSION
-- Modules
-- bullet
--INCENDIARYMODULE
--STATICMODULE
--CONCUSSMODULE
--FRAGMODULE
--FLASHMODULE
--BOUNCEMODULE
--
--TELEPORTMODULE
--TIMEMODULE
--SIZEMODULE
--GRAVITYMODULE
--
--
--NoCombineType
--
baseToFamily :: ItemBaseType -> ItemFamily
baseToFamily ibt = case ibt of
NOTDEFINED -> undefined
EFFGUN _ -> HeldFamily
AUTOEFFGUN _ -> HeldFamily
BANGSTICK _ -> HeldFamily
PISTOL -> HeldFamily
REVOLVER -> HeldFamily
REVOLVERX _ -> HeldFamily
MACHINEPISTOL -> HeldFamily
AUTOPISTOL -> HeldFamily
SMG -> HeldFamily
BANGCONE -> HeldFamily
BLUNDERBUSS -> HeldFamily
BIGBLUNDERBUSS -> HeldFamily
BIGGERBLUNDERBUSS -> HeldFamily
BIGGESTBLUNDERBUSS -> HeldFamily
-- | GRAPESHOTCANNON -> HeldFamily
-- | GRENADELAUNCHER In-> HeldFamilyt -- number of chambers that can be reloaded
-- | MORTARCONE / HANDM-> HeldFamilyORTAR
BANGCANE -> HeldFamily
-- | MINIGUN -> HeldFamily
MINIGUNX _ -> HeldFamily
BANGCANEX _ -> HeldFamily
RIFLE -> HeldFamily
REPEATER -> HeldFamily
AUTORIFLE -> HeldFamily
BURSTRIFLE -> HeldFamily
FASTBURSTRIFLE -> HeldFamily
COMPLETEBURSTRIFLE -> HeldFamily
BANGROD -> HeldFamily
ELEPHANTGUN -> HeldFamily
AMR -> HeldFamily
AUTOAMR -> HeldFamily
SNIPERRIFLE -> HeldFamily
MACHINEGUN -> HeldFamily
FLAMESPITTER -> HeldFamily
FLAMETHROWER -> HeldFamily
FLAMETORRENT -> HeldFamily
FLAMEWALL -> HeldFamily
BLOWTORCH -> HeldFamily
AUTOGUN -> HeldFamily
-- | SPREADGUN -> HeldFamily
-- | MULTGUN -> HeldFamily
LONGGUN -> HeldFamily
SPARKGUN -> HeldFamily
TESLAGUN -> HeldFamily
LASGUN -> HeldFamily
LASPULSE -> HeldFamily
LASGUNDUAL -> HeldFamily
LASGUNSWING -> HeldFamily
LASGUNSWAY -> HeldFamily
LASGUNWIDEPULSE -> HeldFamily
LASGUNWIDE _ -> HeldFamily
LASGUNFOCUS _ -> HeldFamily
SONICGUN -> HeldFamily
TRACTORGUN -> HeldFamily
LAUNCHER -> HeldFamily
LAUNCHERX _ -> HeldFamily
-- | TRACKINGLAUNCHER -> HeldFamily
REMOTELAUNCHER -> HeldFamily
POISONSPRAYER -> HeldFamily
DRONELAUNCHER -> HeldFamily
-- | GRENADE
-- | REMOTEBOMB
BOOSTER -> LeftClickFamily
REWINDER -> LeftClickFamily
BLINKER -> LeftClickFamily
BLINKERUNSAFE -> LeftClickFamily
FORCEFIELDGUN -> LeftClickFamily
SHRINKER -> LeftClickFamily
SPAWNER -> LeftClickFamily
CLICKDETECTOR _ -> HeldFamily
AUTODETECTOR _ -> LeftClickFamily
MAGSHIELD -> EquipmentFamily
FLAMESHIELD -> EquipmentFamily
FRONTARMOUR -> EquipmentFamily
WRISTARMOUR -> EquipmentFamily
INVISIBILITYEQUIPMENT _ -> EquipmentFamily
BRAINHAT -> EquipmentFamily
HEADLAMP -> EquipmentFamily
HEADLAMP1 -> EquipmentFamily
POWERLEGS -> EquipmentFamily
SPEEDLEGS -> EquipmentFamily
JUMPLEGS -> EquipmentFamily
FLATSHIELD -> EquipmentFamily
JETPACK -> EquipmentFamily
CRAFT _ -> CraftingFamily
KEYCARD _ -> HeldFamily
MEDKIT _ -> ConsumableFamily
+3 -8
View File
@@ -9,22 +9,17 @@ import Color
--import Geometry --import Geometry
import Control.Lens import Control.Lens
makeTypeCraftNum :: Int -> ItemBaseType -> Item makeTypeCraftNum :: Int -> CraftType -> Item
makeTypeCraftNum i ct = defaultCraftable makeTypeCraftNum i ct = defaultCraftable
{ _itInvSize = 0.5 { _itInvSize = 0.5
, _itCurseStatus = Uncursed , _itCurseStatus = Uncursed
, _itConsumption = ItemItselfConsumable $ IcAmount i , _itConsumption = ItemItselfConsumable $ IcAmount i
} }
& itType . iyBase .~ ct & itType . iyBase .~ CRAFT ct
makeTypeCraft :: ItemBaseType -> Item makeTypeCraft :: CraftType -> Item
makeTypeCraft = makeTypeCraftNum 1 makeTypeCraft = makeTypeCraftNum 1
makeModule :: ItemBaseType -> Item
makeModule ct = makeTypeCraft ct
& itInvSize .~ 1
& itInvColor .~ chartreuse
incendiaryModule :: Item incendiaryModule :: Item
incendiaryModule = makeTypeCraft INCENDIARYMODULE incendiaryModule = makeTypeCraft INCENDIARYMODULE
& itInvSize .~ 1 & itInvSize .~ 1
+17 -12
View File
@@ -1,7 +1,23 @@
module Dodge.Item.Equipment where module Dodge.Item.Equipment
( module Dodge.Item.Equipment.Booster
, magShield
, powerLegs
, flatShield
, wristInvisibility
, wristArmour
, brainHat
, frontArmour
, headLamp
, headLamp1
, jetPack
, speedLegs
, jumpLegs
, flameShield
) where
import Dodge.Data import Dodge.Data
import Dodge.Item.Draw import Dodge.Item.Draw
import Dodge.Item.Equipment.Shape import Dodge.Item.Equipment.Shape
import Dodge.Item.Equipment.Booster
import Dodge.LightSource import Dodge.LightSource
import Dodge.Default import Dodge.Default
import Dodge.Default.Wall import Dodge.Default.Wall
@@ -134,17 +150,6 @@ flatShieldEquipSPic _ =
( colorSH yellow $ upperPrismPoly 10 (rectWH 2 10) ( colorSH yellow $ upperPrismPoly 10 (rectWH 2 10)
, mempty , mempty
) )
effectOnEquip :: (Creature -> Item -> World -> World) -> ItEffect
effectOnEquip f = ItInvEffectID
{ _ieInv = g f
, _ieMID = Nothing
}
where
g f' itm cr w
| _crInvSel cr == invid = f' cr (_crInv (_creatures w IM.! _crID cr) IM.! invid) w
| otherwise = w
where
invid = fromJust $ _itInvPos itm
shieldWall :: Int -> Wall shieldWall :: Int -> Wall
shieldWall crid = defaultWall shieldWall crid = defaultWall
@@ -1,4 +1,4 @@
module Dodge.Item.Weapon.Booster module Dodge.Item.Equipment.Booster
( boosterGun ( boosterGun
) where ) where
import Dodge.Data import Dodge.Data
+7
View File
@@ -0,0 +1,7 @@
module Dodge.Item.Family where
data ItemFamily = HeldFamily
| CraftingFamily
| EquipmentFamily
| LeftClickFamily
| ConsumableFamily
+3 -1
View File
@@ -13,8 +13,11 @@ module Dodge.Item.Weapon
, module Dodge.Item.Weapon.SprayGuns , module Dodge.Item.Weapon.SprayGuns
, module Dodge.Item.Weapon.BatteryGuns , module Dodge.Item.Weapon.BatteryGuns
, module Dodge.Item.Weapon.Launcher , module Dodge.Item.Weapon.Launcher
, module Dodge.Item.Weapon.Drone
) where ) where
import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.BulletGuns import Dodge.Item.Weapon.BulletGuns
import Dodge.Item.Weapon.Drone
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.SonicGuns import Dodge.Item.Weapon.SonicGuns
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
@@ -22,7 +25,6 @@ import Dodge.Item.Weapon.UseEffect
import Dodge.Item.Weapon.Remote import Dodge.Item.Weapon.Remote
import Dodge.Item.Weapon.Grenade import Dodge.Item.Weapon.Grenade
import Dodge.Item.Weapon.Spawn import Dodge.Item.Weapon.Spawn
import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.Radar import Dodge.Item.Weapon.Radar
import Dodge.Item.Weapon.SprayGuns import Dodge.Item.Weapon.SprayGuns
import Dodge.Item.Weapon.BatteryGuns import Dodge.Item.Weapon.BatteryGuns
+21 -21
View File
@@ -1,12 +1,12 @@
module Dodge.Item.Weapon.BatteryGuns module Dodge.Item.Weapon.BatteryGuns
( lasGun ( lasGun
, lasGunDual , lasDual
, lasGunWide , lasWide
, lasGunWidePulse , lasWidePulse
, lasGunSway , lasSway
, lasGunSwing , lasSwing
, lasGunFocus , lasFocus
, lasGunPulse , lasPulse
, sparkGun , sparkGun
, teslaGun , teslaGun
, teslaParams , teslaParams
@@ -104,8 +104,8 @@ teslaGunPic _ = noPic $ colorSH blue $
where where
xa = 1 xa = 1
xb = 9 xb = 9
lasGunPulse :: Item lasPulse :: Item
lasGunPulse = lasGun lasPulse = lasGun
& itType . iyBase .~ LASPULSE & itType . iyBase .~ LASPULSE
& itUse . useMods .~ & itUse . useMods .~
[ ammoCheckI [ ammoCheckI
@@ -123,8 +123,8 @@ lasGunPulse = lasGun
frac it = 0.5 * (1 + sin (pi * fromIntegral (_lasCycle $ _itParams it) * 0.1)) frac it = 0.5 * (1 + sin (pi * fromIntegral (_lasCycle $ _itParams it) * 0.1))
lasGunWide :: Int -> Item lasWide :: Int -> Item
lasGunWide n = lasGun lasWide n = lasGun
& itType . iyBase .~ LASGUNWIDE n & itType . iyBase .~ LASGUNWIDE n
& itParams . lasColor .~ orange & itParams . lasColor .~ orange
& itParams . lasDamage .~ 2 & itParams . lasDamage .~ 2
@@ -143,8 +143,8 @@ lasGunWide n = lasGun
where where
n' = 9 * n n' = 9 * n
xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ] xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
lasGunWidePulse :: Item lasWidePulse :: Item
lasGunWidePulse = lasGun lasWidePulse = lasGun
& itType . iyBase .~ LASGUNWIDEPULSE & itType . iyBase .~ LASGUNWIDEPULSE
& itParams . lasColor .~ orange & itParams . lasColor .~ orange
& itParams . lasDamage .~ 2 & itParams . lasDamage .~ 2
@@ -170,8 +170,8 @@ lasGunWidePulse = lasGun
xs it = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ] xs it = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
where where
n' = (ceiling $ (150 :: Float) * frac it) :: Int n' = (ceiling $ (150 :: Float) * frac it) :: Int
lasGunSway :: Item lasSway :: Item
lasGunSway = lasGun lasSway = lasGun
& itType . iyBase .~ LASGUNSWAY & itType . iyBase .~ LASGUNSWAY
& itParams . lasColor .~ orange & itParams . lasColor .~ orange
& itParams . lasDamage .~ 11 & itParams . lasDamage .~ 11
@@ -192,8 +192,8 @@ lasGunSway = lasGun
x it = [ 15 * sin (pi * fromIntegral x' * 0.05) ] x it = [ 15 * sin (pi * fromIntegral x' * 0.05) ]
where where
x' = _lasCycle $ _itParams it x' = _lasCycle $ _itParams it
lasGunFocus :: Int -> Item lasFocus :: Int -> Item
lasGunFocus n = lasGunWide n lasFocus n = lasWide n
& itType . iyBase .~ LASGUNFOCUS n & itType . iyBase .~ LASGUNFOCUS n
& itParams . lasColor .~ red & itParams . lasColor .~ red
& itUse . useMods .~ & itUse . useMods .~
@@ -208,8 +208,8 @@ lasGunFocus n = lasGunWide n
n' = 9 * n n' = 9 * n
xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ] xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
lasGunDual :: Item lasDual :: Item
lasGunDual = lasGun lasDual = lasGun
& itType . iyBase .~ LASGUNDUAL & itType . iyBase .~ LASGUNDUAL
& itParams .~ DualBeam & itParams .~ DualBeam
{ _phaseV = 1 { _phaseV = 1
@@ -233,8 +233,8 @@ lasGunDual = lasGun
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
) )
& itType . iyModules . at ModDualBeam ?~ EMPTYMODULE & itType . iyModules . at ModDualBeam ?~ EMPTYMODULE
lasGunSwing :: Item lasSwing :: Item
lasGunSwing = lasGun lasSwing = lasGun
& itType . iyBase .~ LASGUNSWING & itType . iyBase .~ LASGUNSWING
& itParams . lasColor .~ orange & itParams . lasColor .~ orange
& itUse . useMods .~ & itUse . useMods .~
+2 -2
View File
@@ -18,8 +18,8 @@ import Control.Lens
--import Control.Monad.State --import Control.Monad.State
--import System.Random --import System.Random
lasDrones :: Item droneLauncher :: Item
lasDrones = defaultGun droneLauncher = defaultGun
{ _itConsumption = defaultAmmo { _itConsumption = defaultAmmo
{ _laType = DroneAmmo { _amString = "LASDRONE" } { _laType = DroneAmmo { _amString = "LASDRONE" }
, _laMax = 2 , _laMax = 2
+7 -7
View File
@@ -28,10 +28,10 @@ lockRoomMultiItems =
lockRoomKeyItems :: RandomGen g => [ (Int -> State g (MetaTree Room String) , State g ItemBaseType ) ] lockRoomKeyItems :: RandomGen g => [ (Int -> State g (MetaTree Room String) , State g ItemBaseType ) ]
lockRoomKeyItems = lockRoomKeyItems =
[(lasCenSensEdge, takeOne [LAUNCHER,LASGUN,SPARKGUN,FLATSHIELD,FORCEFIELDGUN] ) [(lasCenSensEdge, takeOne [LAUNCHER,LASGUN,SPARKGUN,FLATSHIELD,FORCEFIELDGUN] )
,(sensorRoomRunPast ELECTRICAL, takeOne [STATICMODULE,SPARKGUN] ) ,(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE,SPARKGUN] )
,(sensorRoomRunPast FLAMING, takeOne [FLAMESPITTER, INCENDIARYMODULE] ) ,(sensorRoomRunPast FLAMING, takeOne [FLAMESPITTER, CRAFT INCENDIARYMODULE] )
,(sensorRoomRunPast LASERING, return LASGUN ) ,(sensorRoomRunPast LASERING, return LASGUN )
,(const slowDoorRoomRunPast, return MINIGUN) ,(const slowDoorRoomRunPast, return $ MINIGUNX 3)
,(const longRoomRunPast, takeOne [SNIPERRIFLE,FLATSHIELD]) ,(const longRoomRunPast, takeOne [SNIPERRIFLE,FLATSHIELD])
,(const glassLessonRunPast, takeOne [LASGUN]) ,(const glassLessonRunPast, takeOne [LASGUN])
,(const $ lasTunnelRunPast 400, takeOne [FLATSHIELD,FORCEFIELDGUN]) ,(const $ lasTunnelRunPast 400, takeOne [FLATSHIELD,FORCEFIELDGUN])
@@ -47,7 +47,7 @@ itemRooms =
, rc $ map makeTypeCraft [TUBE,TUBE,HARDWARE] , rc $ map makeTypeCraft [TUBE,TUBE,HARDWARE]
] ]
) )
, (MINIGUN , join $ takeOne , (MINIGUNX 3 , join $ takeOne
[roomMiniIntro [roomMiniIntro
, rc $ map makeTypeCraft ([MOTOR,HARDWARE] ++ replicate 6 PIPE) , rc $ map makeTypeCraft ([MOTOR,HARDWARE] ++ replicate 6 PIPE)
] ) ] )
@@ -80,12 +80,12 @@ itemRooms =
[rc [keyCard 0] [rc [keyCard 0]
] ]
) )
, (INCENDIARYMODULE , join $ takeOne , (CRAFT INCENDIARYMODULE , join $ takeOne
[rc [incendiaryModule] [rc [incendiaryModule]
] ]
) )
, (STATICMODULE , join $ takeOne , (CRAFT STATICMODULE , join $ takeOne
[rc [makeModule STATICMODULE] [rc [makeTypeCraft STATICMODULE]
] ]
) )
] ]
+34
View File
@@ -0,0 +1,34 @@
module Dodge.Room.Breather where
--import Dodge.Cleat
import Dodge.Combine.Data
import Dodge.Data
--import Dodge.PlacementSpot
--import Dodge.RoomLink
--import Dodge.Default.Room
import Dodge.Item
--import Dodge.Creature
--import Dodge.Room.Pillar
--import Dodge.Room.Girder
--import Dodge.Room.Modify.Girder
--import Dodge.LevelGen.Data
import RandomHelp
import Dodge.Tree
--import Dodge.Placement.Instance
--import Dodge.LevelGen.Data
--import Dodge.Room.Procedural
--import Dodge.Room.Corridor
--import Dodge.Room.Tanks
--import Dodge.Room.Link
--import Dodge.Room.Door
--import Dodge.Room.Airlock
import Dodge.Room.Containing
--import Geometry
--import MonadHelp
--import LensHelp
--import qualified Data.Set as S
firstBreather :: State StdGen (MetaTree Room String)
firstBreather = do
itms <- takeOne [[],[itemFromBase $ CRAFT TUBE]]
roomsContaining [] itms