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 =
[ po [PIPE, HARDWARE] (bangStick 1)
, po [BANGSTICK 1, TIN] pistol
, po [PISTOL, SPRING, HARDWARE] autoPistol
, po [AUTOPISTOL, PLANK, HARDWARE] smg
, po [AUTOPISTOL, HARDWARE] machinePistol
, po [BANGSTICK 1,CAN] revolver
, po [REVOLVER, SPRING, HARDWARE] $ revolverX 1
[ po [CRAFT PIPE, CRAFT HARDWARE] (bangStick 1)
, po [BANGSTICK 1, CRAFT TIN] pistol
, po [PISTOL, CRAFT SPRING, cr HARDWARE] autoPistol
, po [AUTOPISTOL, cr PLANK, cr HARDWARE] smg
, po [AUTOPISTOL, cr HARDWARE] machinePistol
, po [BANGSTICK 1,cr CAN] revolver
, po [REVOLVER, cr SPRING, cr HARDWARE] $ revolverX 1
, po [TUBE,HARDWARE] bangCone
, po [BANGCONE,PLANK] blunderbuss
, po [BLUNDERBUSS,TUBE] bigBlunderbuss
, po [BIGBLUNDERBUSS,TUBE] biggerBlunderbuss
, po [BIGGERBLUNDERBUSS,TUBE] biggestBlunderbuss
, po [BANGCONE,PUMP,HARDWARE] $ grenadeLauncher 1
, po [GRENADELAUNCHER 1,MOTOR,DRUM] $ grenadeLauncher 2
, po [cr TUBE,cr HARDWARE] bangCone
, po [BANGCONE,cr PLANK] blunderbuss
, po [BLUNDERBUSS,cr TUBE] bigBlunderbuss
, po [BIGBLUNDERBUSS,cr TUBE] biggerBlunderbuss
, po [BIGGERBLUNDERBUSS,cr TUBE] biggestBlunderbuss
-- , po [BANGCONE,PUMP,HARDWARE] $ grenadeLauncher 1
-- , po [GRENADELAUNCHER 1,MOTOR,DRUM] $ grenadeLauncher 2
, p [p 2 PIPE,o HARDWARE] bangCane
, p [p 2 PIPE,o BANGCANE] (bangCaneX 2)
, po [BANGCANE,TIN] rifle
, po [RIFLE,PLANK] repeater
, po [REPEATER,SPRING,HARDWARE] autoRifle
, po [REPEATER,SPRING,CAN] burstRifle
, po [BURSTRIFLE,SPRING,HARDWARE] fastBurstRifle
, po [FASTBURSTRIFLE,SPRING,HARDWARE] completeBurstRifle
, po [MOTOR,BANGCANEX 3] $ miniGunX 3
, po [MOTOR,BANGCANEX 4] $ miniGunX 4
, po [MOTOR,BANGCANEX 5] $ miniGunX 5
, po [MOTOR,BANGCANEX 6] $ miniGunX 6
, p [p 2 $ cr PIPE,o $ cr HARDWARE] bangCane
, p [p 2 $ cr PIPE,o BANGCANE] (bangCaneX 2)
, po [BANGCANE,cr TIN] rifle
, po [RIFLE,cr PLANK] repeater
, po [REPEATER,cr SPRING,cr HARDWARE] autoRifle
, po [REPEATER,cr SPRING,cr CAN] burstRifle
, po [BURSTRIFLE,cr SPRING,cr HARDWARE] fastBurstRifle
, po [FASTBURSTRIFLE,cr SPRING,cr HARDWARE] completeBurstRifle
, po [cr MOTOR,BANGCANEX 3] $ miniGunX 3
, po [cr MOTOR,BANGCANEX 4] $ miniGunX 4
, po [cr MOTOR,BANGCANEX 5] $ miniGunX 5
, po [cr MOTOR,BANGCANEX 6] $ miniGunX 6
, p [p 3 PIPE,o HARDWARE] bangRod
, po [BANGROD,PLANK,HARDWARE] elephantGun
, po [ELEPHANTGUN,HARDWARE,PRISM] sniperRifle
, po [ELEPHANTGUN,HARDWARE,TIN] amr
, po [AMR,HARDWARE,SPRING] autoAmr
, po [BANGROD,PLATE,DRUM,MOTOR] machineGun
, p [p 3 $ cr PIPE,o $ cr HARDWARE] bangRod
, po [BANGROD,cr PLANK,cr HARDWARE] elephantGun
, po [ELEPHANTGUN,cr HARDWARE,cr PRISM] sniperRifle
, po [ELEPHANTGUN,cr HARDWARE,cr TIN] amr
, po [AMR,cr HARDWARE,cr SPRING] autoAmr
, po [BANGROD,cr PLATE,cr DRUM,cr MOTOR] machineGun
, p [p 2 TUBE,o HARDWARE] launcher
, p [p 2 TUBE,o LAUNCHER] (launcherX 2)
] ++ [ p [p 2 TUBE,o $ LAUNCHERX i] (launcherX (i+1)) | i <- [2..9]]
, p [p 2 $ cr TUBE,o $ cr HARDWARE] launcher
, p [p 2 $ cr TUBE,o LAUNCHER] (launcherX 2)
] ++ [ p [p 2 $ cr TUBE,o $ LAUNCHERX i] (launcherX (i+1)) | i <- [2..9]]
++
[ po [LIGHTER,PUMP,CAN] flameSpitter
, po [FLAMESPITTER,CAN,PUMP] blowTorch
, po [FLAMESPITTER,DRUM] flameThrower
, po [FLAMETHROWER,DRUM] flameWall
, po [FLAMETHROWER,PUMP] flameTorrent
[ po [cr LIGHTER,cr PUMP,cr CAN] flameSpitter
, po [FLAMESPITTER,cr CAN,cr PUMP] blowTorch
, po [FLAMESPITTER,cr DRUM] flameThrower
, po [FLAMETHROWER,cr DRUM] flameWall
, po [FLAMETHROWER,cr PUMP] flameTorrent
, p [o PRISM,o TRANSFORMER,o PIPE] lasGun
, p [o LASGUN,o PRISM] lasGunSway
, p [o LASGUN,o HARDWARE] lasGunSwing
, p [o $ cr PRISM,o $ cr TRANSFORMER,o $ cr PIPE] lasGun
, p [o LASGUN,o $ cr PRISM] lasSway
, p [o LASGUN,o $ cr HARDWARE] lasSwing
-- , p [o LASGUN,o PIPE] lasGunPulse
, p [o LASGUN,p 2 PIPE] lasGunDual
, p [o LASGUN,o PIPE, o PRISM] lasGunWidePulse
, p [o LASGUN,o TRANSFORMER,o PRISM] (lasGunWide 2)
, p [o LASGUN,p 2 $ cr PIPE] lasDual
, p [o LASGUN,o $ cr PIPE, o $ cr PRISM] lasWidePulse
, p [o LASGUN,o $ cr TRANSFORMER,o $ cr PRISM] (lasWide 2)
, p [o TRANSFORMER,p 2 CAN] sparkGun
, p [o SPARKGUN,p 2 PIPE] teslaGun
, p [o $ cr TRANSFORMER,p 2 $ cr CAN] sparkGun
, p [o SPARKGUN,p 2 $ cr PIPE] teslaGun
, p [o TELEPORTMODULE,p 2 MICROCHIP] blinkGun
, p [o BLINKER, p 2 MICROCHIP] unsafeBlinkGun
, p [o $ cr TELEPORTMODULE,p 2 $ cr MICROCHIP] blinkGun
, 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 3 TIN] plateCraft
, p [p 2 DRUM] plateCraft
, p [p 4 $ cr CAN] plateCraft
, p [p 3 $ cr TIN] 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,HARDWARE] $ lasGunFocus i) [1..10]
++ map (\i -> po [PIPE,BANGSTICK i] $ bangStick (i+1)) [1..8]
++ map (\i -> po [REVOLVERX i,CAN] $ revolverX (i+1)) [1..5]
++ map (\i -> p [o (BANGCANEX i),p 2 PIPE] $ bangCaneX (i+1)) [1..5]
++ map (\i -> po [LASGUNWIDE i,cr TRANSFORMER,cr PRISM] $ lasWide (i+1)) [1..9]
++ map (\i -> po [LASGUNWIDE i,cr HARDWARE] $ lasFocus i) [1..10]
++ map (\i -> po [cr PIPE,BANGSTICK i] $ bangStick (i+1)) [1..8]
++ map (\i -> po [REVOLVERX i,cr CAN] $ revolverX (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]
++ [ po (_iyBase (_itType it):mtype) $ it & itType . iyModules . ix modtype .~ m
@@ -102,6 +102,7 @@ itemCombinations =
p = (,)
po xs it = (map o xs,it)
o = (1,)
cr = CRAFT
moduleCombinations :: [( ModuleSlot, [Item], [([ItemBaseType],ItemModuleType)] )]
moduleCombinations =
@@ -111,8 +112,8 @@ moduleCombinations =
,burstRifle
,fastBurstRifle
]
, [amod [DRUM,HARDWARE] DRUMMAG
,amod [MOTOR,HARDWARE] BELTMAG
, [amod [cr DRUM,cr HARDWARE] DRUMMAG
,amod [cr MOTOR,cr HARDWARE] BELTMAG
]
)
, ( ModAutoMag
@@ -120,56 +121,57 @@ moduleCombinations =
,autoPistol
,smg
]
, [amod [MAGNET,HARDWARE] MAGNETMAG
, [amod [cr MAGNET,cr HARDWARE] MAGNETMAG
]
)
, ( ModBullet
, bulletWeapons
, [amod [INCENDIARYMODULE] INCENDBUL
,amod [BOUNCEMODULE] BOUNCEBUL
,amod [STATICMODULE] STATICBUL
,amod [CONCUSSMODULE] CONCUSBUL
, [amod [cr INCENDIARYMODULE] INCENDBUL
,amod [cr BOUNCEMODULE] BOUNCEBUL
,amod [cr STATICMODULE] STATICBUL
,amod [cr CONCUSSMODULE] CONCUSBUL
]
)
, ( ModTarget
, homingLaunchers ++ bulletWeapons
, [amod [MICROCHIP,CREATURESENSOR] TARGCR
,amod [MICROCHIP,PRISM] TARGLAS
,amod [MICROCHIP,TIN] TARGPOS
, [amod [cr MICROCHIP,cr CREATURESENSOR] TARGCR
,amod [cr MICROCHIP,cr PRISM] TARGLAS
,amod [cr MICROCHIP,cr TIN] TARGPOS
]
)
, ( ModBulletTrajectory
, bulletWeapons
, [amod [MAGNET,MICROCHIP,HARDWARE] MAGNETTRAJ
,amod [MICROCHIP,HARDWARE] FLECHETRAJ
,amod [ANTIMATTER,HARDWARE] BEZIERTRAJ
, [amod [cr MAGNET, cr MICROCHIP,cr HARDWARE] MAGNETTRAJ
,amod [cr MICROCHIP, cr HARDWARE] FLECHETRAJ
,amod [cr ANTIMATTER,cr HARDWARE] BEZIERTRAJ
]
)
, ( ModDualBeam
, [lasGunDual]
, [amod [INCENDIARYMODULE] INCENDLAS
,amod [TRANSFORMER] SPLITLAS
,amod [STATICMODULE] STATICLAS
, [lasDual]
, [amod [cr INCENDIARYMODULE] INCENDLAS
,amod [cr TRANSFORMER] SPLITLAS
,amod [cr STATICMODULE] STATICLAS
]
)
, ( ModTeleport
, teleportableWeapons
, [amod [TELEPORTMODULE,MICROCHIP] WEPTELE
, [amod [cr TELEPORTMODULE,cr MICROCHIP] WEPTELE
]
)
, ( ModLauncherHoming
, homingLaunchers
, [ amod [MICROCHIP,TRANSMITTER] LAUNCHHOME
, [ amod [cr MICROCHIP,cr TRANSMITTER] LAUNCHHOME
]
)
, ( ModBattery
, batteryGuns
, [amod [BATTERY] EXTRABATTERY
, [amod [cr BATTERY] EXTRABATTERY
]
)
]
where
amod = (,)
cr = CRAFT
homingLaunchers :: [Item]
homingLaunchers = launcher : [launcherX i | i <- [2..10]]
@@ -179,12 +181,12 @@ batteryGuns =
[ teslaGun
, sparkGun
, lasGun
, lasGunSway
, lasGunSwing
, lasSway
, lasSwing
] ++
[ lasGunWide i | i <- [1..10]
[ lasWide i | i <- [1..10]
] ++
[ lasGunFocus i | i <- [1..10]]
[ lasFocus i | i <- [1..10]]
teleportableWeapons :: [Item]
teleportableWeapons = bulletWeapons ++ batteryGuns ++ homingLaunchers
+101 -96
View File
@@ -2,110 +2,23 @@
module Dodge.Combine.Data
where
import Dodge.Equipment.Data
import Dodge.Data.ItemAmount
import Control.Lens
import qualified Data.Map.Strict as M
-- this should probably store loaded ammo
data ItemType = ItemType
{_iyBase :: ItemBaseType
{_iyBase :: ItemBaseType
,_iyModules :: M.Map ModuleSlot ItemModuleType
,_iyStack :: Stack
}
deriving (Eq,Ord,Show)
-- TODO make this an enum somehow...?
data ItemBaseType
= NOTDEFINED
| EFFGUN String
| AUTOEFFGUN String
-- 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
data Stack = NoStack | Stack IcAmount
deriving (Eq,Ord,Show)
data CraftType
= PIPE
| TUBE
| HARDWARE
| SPRING
@@ -151,12 +64,104 @@ data ItemBaseType
| TIMEMODULE
| SIZEMODULE
| 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
--
| MEDKIT Int
| CRAFT CraftType
--
| NoCombineType
deriving (Eq,Ord,Show)
data ItemModuleType
+5 -5
View File
@@ -13,7 +13,7 @@ import Dodge.Creature.State.Data
import Dodge.Creature.Update
import Dodge.Prop.Gib
--import Dodge.Item.Weapon.Grenade
import Dodge.Item.Weapon.Booster
import Dodge.Item.Equipment.Booster
import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.Drone
import Dodge.Item.Craftable
@@ -253,9 +253,9 @@ testInventory = IM.fromList $ zip [0..]
, flatShield
, sniperRifle
, makeTypeCraftNum 1 MOTOR
, makeModule INCENDIARYMODULE
, makeModule STATICMODULE
, makeModule CONCUSSMODULE
, makeTypeCraft INCENDIARYMODULE
, makeTypeCraft STATICMODULE
, makeTypeCraft CONCUSSMODULE
-- , bounceModule
-- , medkit 50 & itConsumption . itAmount .~ 3
, teleportModule
@@ -302,7 +302,7 @@ stackedInventory = IM.fromList $ zip [0..]
,flameThrower
,poisonSprayer
,launcher
,lasDrones
,droneLauncher
--,lasGun
--,grenade
--,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
defaultItemType :: ItemType
defaultItemType = ItemType NOTDEFINED mempty
defaultItemType = ItemType NOTDEFINED mempty NoStack
+1 -1
View File
@@ -46,7 +46,7 @@ initialAnoTree = OnwardList
, AnRoom pistolerRoom
, AnRoom doubleCorridorBarrels
, IntAnno $ PassthroughLockKeyLists
[(sensorRoomRunPast ELECTRICAL, takeOne [STATICMODULE,SPARKGUN] )] itemRooms
[(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE,SPARKGUN] )] itemRooms
, IntAnno $ PassthroughLockKeyLists keyCardRunPastRand itemRooms
, IntAnno $ AnTree . warningRooms
, AnTree $ rToOnward "chaseCrit+armourChaseCrit rectRoom"
+247 -1
View File
@@ -1,9 +1,255 @@
module Dodge.Item
( module Dodge.Item.Weapon
, module Dodge.Item.Consumable
, module Dodge.Item.Equipment
, module Dodge.Item.PassKey
, module Dodge.Item.Craftable
, itemFromBase
, baseToFamily
) where
--import Dodge.Data
import Dodge.Data
import Dodge.Item.Weapon
import Dodge.Item.Equipment
import Dodge.Item.Consumable
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 Control.Lens
makeTypeCraftNum :: Int -> ItemBaseType -> Item
makeTypeCraftNum :: Int -> CraftType -> Item
makeTypeCraftNum i ct = defaultCraftable
{ _itInvSize = 0.5
, _itCurseStatus = Uncursed
, _itConsumption = ItemItselfConsumable $ IcAmount i
}
& itType . iyBase .~ ct
& itType . iyBase .~ CRAFT ct
makeTypeCraft :: ItemBaseType -> Item
makeTypeCraft :: CraftType -> Item
makeTypeCraft = makeTypeCraftNum 1
makeModule :: ItemBaseType -> Item
makeModule ct = makeTypeCraft ct
& itInvSize .~ 1
& itInvColor .~ chartreuse
incendiaryModule :: Item
incendiaryModule = makeTypeCraft INCENDIARYMODULE
& 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.Item.Draw
import Dodge.Item.Equipment.Shape
import Dodge.Item.Equipment.Booster
import Dodge.LightSource
import Dodge.Default
import Dodge.Default.Wall
@@ -134,17 +150,6 @@ flatShieldEquipSPic _ =
( colorSH yellow $ upperPrismPoly 10 (rectWH 2 10)
, 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 crid = defaultWall
@@ -1,4 +1,4 @@
module Dodge.Item.Weapon.Booster
module Dodge.Item.Equipment.Booster
( boosterGun
) where
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.BatteryGuns
, module Dodge.Item.Weapon.Launcher
, module Dodge.Item.Weapon.Drone
) where
import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.BulletGuns
import Dodge.Item.Weapon.Drone
import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.SonicGuns
import Dodge.Item.Weapon.ExtraEffect
@@ -22,7 +25,6 @@ import Dodge.Item.Weapon.UseEffect
import Dodge.Item.Weapon.Remote
import Dodge.Item.Weapon.Grenade
import Dodge.Item.Weapon.Spawn
import Dodge.Item.Weapon.Utility
import Dodge.Item.Weapon.Radar
import Dodge.Item.Weapon.SprayGuns
import Dodge.Item.Weapon.BatteryGuns
+21 -21
View File
@@ -1,12 +1,12 @@
module Dodge.Item.Weapon.BatteryGuns
( lasGun
, lasGunDual
, lasGunWide
, lasGunWidePulse
, lasGunSway
, lasGunSwing
, lasGunFocus
, lasGunPulse
, lasDual
, lasWide
, lasWidePulse
, lasSway
, lasSwing
, lasFocus
, lasPulse
, sparkGun
, teslaGun
, teslaParams
@@ -104,8 +104,8 @@ teslaGunPic _ = noPic $ colorSH blue $
where
xa = 1
xb = 9
lasGunPulse :: Item
lasGunPulse = lasGun
lasPulse :: Item
lasPulse = lasGun
& itType . iyBase .~ LASPULSE
& itUse . useMods .~
[ ammoCheckI
@@ -123,8 +123,8 @@ lasGunPulse = lasGun
frac it = 0.5 * (1 + sin (pi * fromIntegral (_lasCycle $ _itParams it) * 0.1))
lasGunWide :: Int -> Item
lasGunWide n = lasGun
lasWide :: Int -> Item
lasWide n = lasGun
& itType . iyBase .~ LASGUNWIDE n
& itParams . lasColor .~ orange
& itParams . lasDamage .~ 2
@@ -143,8 +143,8 @@ lasGunWide n = lasGun
where
n' = 9 * n
xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
lasGunWidePulse :: Item
lasGunWidePulse = lasGun
lasWidePulse :: Item
lasWidePulse = lasGun
& itType . iyBase .~ LASGUNWIDEPULSE
& itParams . lasColor .~ orange
& itParams . lasDamage .~ 2
@@ -170,8 +170,8 @@ lasGunWidePulse = lasGun
xs it = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
where
n' = (ceiling $ (150 :: Float) * frac it) :: Int
lasGunSway :: Item
lasGunSway = lasGun
lasSway :: Item
lasSway = lasGun
& itType . iyBase .~ LASGUNSWAY
& itParams . lasColor .~ orange
& itParams . lasDamage .~ 11
@@ -192,8 +192,8 @@ lasGunSway = lasGun
x it = [ 15 * sin (pi * fromIntegral x' * 0.05) ]
where
x' = _lasCycle $ _itParams it
lasGunFocus :: Int -> Item
lasGunFocus n = lasGunWide n
lasFocus :: Int -> Item
lasFocus n = lasWide n
& itType . iyBase .~ LASGUNFOCUS n
& itParams . lasColor .~ red
& itUse . useMods .~
@@ -208,8 +208,8 @@ lasGunFocus n = lasGunWide n
n' = 9 * n
xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ]
lasGunDual :: Item
lasGunDual = lasGun
lasDual :: Item
lasDual = lasGun
& itType . iyBase .~ LASGUNDUAL
& itParams .~ DualBeam
{ _phaseV = 1
@@ -233,8 +233,8 @@ lasGunDual = lasGun
& useAim . aimStance .~ TwoHandTwist
)
& itType . iyModules . at ModDualBeam ?~ EMPTYMODULE
lasGunSwing :: Item
lasGunSwing = lasGun
lasSwing :: Item
lasSwing = lasGun
& itType . iyBase .~ LASGUNSWING
& itParams . lasColor .~ orange
& itUse . useMods .~
+2 -2
View File
@@ -18,8 +18,8 @@ import Control.Lens
--import Control.Monad.State
--import System.Random
lasDrones :: Item
lasDrones = defaultGun
droneLauncher :: Item
droneLauncher = defaultGun
{ _itConsumption = defaultAmmo
{ _laType = DroneAmmo { _amString = "LASDRONE" }
, _laMax = 2
+7 -7
View File
@@ -28,10 +28,10 @@ lockRoomMultiItems =
lockRoomKeyItems :: RandomGen g => [ (Int -> State g (MetaTree Room String) , State g ItemBaseType ) ]
lockRoomKeyItems =
[(lasCenSensEdge, takeOne [LAUNCHER,LASGUN,SPARKGUN,FLATSHIELD,FORCEFIELDGUN] )
,(sensorRoomRunPast ELECTRICAL, takeOne [STATICMODULE,SPARKGUN] )
,(sensorRoomRunPast FLAMING, takeOne [FLAMESPITTER, INCENDIARYMODULE] )
,(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE,SPARKGUN] )
,(sensorRoomRunPast FLAMING, takeOne [FLAMESPITTER, CRAFT INCENDIARYMODULE] )
,(sensorRoomRunPast LASERING, return LASGUN )
,(const slowDoorRoomRunPast, return MINIGUN)
,(const slowDoorRoomRunPast, return $ MINIGUNX 3)
,(const longRoomRunPast, takeOne [SNIPERRIFLE,FLATSHIELD])
,(const glassLessonRunPast, takeOne [LASGUN])
,(const $ lasTunnelRunPast 400, takeOne [FLATSHIELD,FORCEFIELDGUN])
@@ -47,7 +47,7 @@ itemRooms =
, rc $ map makeTypeCraft [TUBE,TUBE,HARDWARE]
]
)
, (MINIGUN , join $ takeOne
, (MINIGUNX 3 , join $ takeOne
[roomMiniIntro
, rc $ map makeTypeCraft ([MOTOR,HARDWARE] ++ replicate 6 PIPE)
] )
@@ -80,12 +80,12 @@ itemRooms =
[rc [keyCard 0]
]
)
, (INCENDIARYMODULE , join $ takeOne
, (CRAFT INCENDIARYMODULE , join $ takeOne
[rc [incendiaryModule]
]
)
, (STATICMODULE , join $ takeOne
[rc [makeModule STATICMODULE]
, (CRAFT STATICMODULE , join $ takeOne
[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