From 485c42eb24d82456d051e5ab06e5afd1f7d862af Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 14 Jun 2022 22:09:26 +0100 Subject: [PATCH] Make items recoverable from base type --- src/Dodge/Combine/Combinations.hs | 172 ++++++------ src/Dodge/Combine/Data.hs | 197 +++++++------- src/Dodge/Creature.hs | 10 +- src/Dodge/Default/Item.hs | 2 +- src/Dodge/Floor.hs | 2 +- src/Dodge/Item.hs | 248 +++++++++++++++++- src/Dodge/Item/Craftable.hs | 11 +- src/Dodge/Item/Equipment.hs | 29 +- .../Item/{Weapon => Equipment}/Booster.hs | 2 +- src/Dodge/Item/Family.hs | 7 + src/Dodge/Item/Weapon.hs | 4 +- src/Dodge/Item/Weapon/BatteryGuns.hs | 42 +-- src/Dodge/Item/Weapon/Drone.hs | 4 +- src/Dodge/LockAndKey.hs | 14 +- src/Dodge/Room/Breather.hs | 34 +++ 15 files changed, 537 insertions(+), 241 deletions(-) rename src/Dodge/Item/{Weapon => Equipment}/Booster.hs (99%) create mode 100644 src/Dodge/Item/Family.hs create mode 100644 src/Dodge/Room/Breather.hs diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 010664ffe..4be87fad0 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -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 diff --git a/src/Dodge/Combine/Data.hs b/src/Dodge/Combine/Data.hs index 1b6a283c1..2116c7a10 100644 --- a/src/Dodge/Combine/Data.hs +++ b/src/Dodge/Combine/Data.hs @@ -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 diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 8f7981b88..87051e753 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -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 diff --git a/src/Dodge/Default/Item.hs b/src/Dodge/Default/Item.hs index 8b6d74d2c..0db40d39a 100644 --- a/src/Dodge/Default/Item.hs +++ b/src/Dodge/Default/Item.hs @@ -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 diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 11ce87f1d..54598e211 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -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" diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index cd088661f..5ad4561e1 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -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 diff --git a/src/Dodge/Item/Craftable.hs b/src/Dodge/Item/Craftable.hs index c3ccfeaf4..2a6f1f090 100644 --- a/src/Dodge/Item/Craftable.hs +++ b/src/Dodge/Item/Craftable.hs @@ -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 diff --git a/src/Dodge/Item/Equipment.hs b/src/Dodge/Item/Equipment.hs index 7b49f3bbd..748ac72cf 100644 --- a/src/Dodge/Item/Equipment.hs +++ b/src/Dodge/Item/Equipment.hs @@ -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 diff --git a/src/Dodge/Item/Weapon/Booster.hs b/src/Dodge/Item/Equipment/Booster.hs similarity index 99% rename from src/Dodge/Item/Weapon/Booster.hs rename to src/Dodge/Item/Equipment/Booster.hs index c1d583637..8415f969f 100644 --- a/src/Dodge/Item/Weapon/Booster.hs +++ b/src/Dodge/Item/Equipment/Booster.hs @@ -1,4 +1,4 @@ -module Dodge.Item.Weapon.Booster +module Dodge.Item.Equipment.Booster ( boosterGun ) where import Dodge.Data diff --git a/src/Dodge/Item/Family.hs b/src/Dodge/Item/Family.hs new file mode 100644 index 000000000..a2c73a87e --- /dev/null +++ b/src/Dodge/Item/Family.hs @@ -0,0 +1,7 @@ +module Dodge.Item.Family where + +data ItemFamily = HeldFamily + | CraftingFamily + | EquipmentFamily + | LeftClickFamily + | ConsumableFamily diff --git a/src/Dodge/Item/Weapon.hs b/src/Dodge/Item/Weapon.hs index 4089458fe..cedf1d78c 100644 --- a/src/Dodge/Item/Weapon.hs +++ b/src/Dodge/Item/Weapon.hs @@ -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 diff --git a/src/Dodge/Item/Weapon/BatteryGuns.hs b/src/Dodge/Item/Weapon/BatteryGuns.hs index 4aafa7657..874e929f8 100644 --- a/src/Dodge/Item/Weapon/BatteryGuns.hs +++ b/src/Dodge/Item/Weapon/BatteryGuns.hs @@ -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 .~ diff --git a/src/Dodge/Item/Weapon/Drone.hs b/src/Dodge/Item/Weapon/Drone.hs index 69ea51ab4..db78a415b 100644 --- a/src/Dodge/Item/Weapon/Drone.hs +++ b/src/Dodge/Item/Weapon/Drone.hs @@ -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 diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index ff08ba44a..a08c06419 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -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] ] ) ] diff --git a/src/Dodge/Room/Breather.hs b/src/Dodge/Room/Breather.hs new file mode 100644 index 000000000..b05394233 --- /dev/null +++ b/src/Dodge/Room/Breather.hs @@ -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