From 779e076c93fe48867ac92bc94d75005cffe2bdc6 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 20 Feb 2022 18:50:11 +0000 Subject: [PATCH] Work on bullet module system --- src/Dodge/Combine.hs | 8 +++++--- src/Dodge/Combine/Combinations.hs | 17 ++++++++++++++++- src/Dodge/Combine/Data.hs | 3 +++ src/Dodge/Creature.hs | 2 ++ src/Dodge/Item/Craftable.hs | 14 ++++++++++++++ src/Dodge/Item/Weapon/BulletGun/Cane.hs | 8 ++++---- 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/Dodge/Combine.hs b/src/Dodge/Combine.hs index 4848494aa..76f73ec72 100644 --- a/src/Dodge/Combine.hs +++ b/src/Dodge/Combine.hs @@ -67,6 +67,7 @@ addModules (ps,it) = (is , ) <$> [ (it & itModules .~ themodules,s) | (themodule where (ms,is) = unzip ps combinedmodules = foldr f [(_itModules it,[])] ms + f :: ItemModules -> [(ItemModules,[String])] -> [(ItemModules,[String])] f ims imss = concatMap (g ims) imss g ims (ims',s) = map (second (s++)) $ combineModules ims ims' @@ -75,10 +76,11 @@ combineModules (ItemModules a1) (ItemModules a2) = [(ItemModules a,ss) | (a,ss) <- combineModule a1 a2] combineModule :: ItemModule a -> ItemModule a -> [(ItemModule a,[String])] -combineModule BlockedModule (ItemModule _ ss _) = [(BlockedModule, "WARNING:REMOVES":ss)] -combineModule BlockedModule _ = [(BlockedModule,["a"])] -combineModule m BlockedModule = [(m,[])] +combineModule (ItemModule _ ss _) BlockedModule = [(BlockedModule, "WARNING:REMOVES":ss)] +combineModule _ BlockedModule = [(BlockedModule, [])] +combineModule BlockedModule m = [(m,[])] combineModule DefaultModule m = [(m,[])] +combineModule (ItemModule _ ss _) m@ItemModule{} = [(m,"WARNING:REMOVES":ss)] combineModule m _ = [(m,[])] toggleCombineInv :: World -> World diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 96b902231..c31856911 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -1,6 +1,8 @@ {-# LANGUAGE TupleSections #-} module Dodge.Combine.Combinations where import Dodge.Data +import Dodge.WorldEvent.HitEffect +import Dodge.Particle.Bullet.HitEffect import Dodge.Item.Equipment import Dodge.Item.Craftable import Dodge.Item.Weapon.BulletGuns @@ -8,6 +10,7 @@ import Dodge.Item.Weapon.BatteryGuns import Dodge.Item.Weapon.Launcher import Dodge.Item.Weapon.SprayGuns +import Control.Lens itemCombinations :: [([(Int,CombineType)],Item)] itemCombinations = [ po [PIPE, HARDWARE] (bangStick 1) @@ -64,8 +67,20 @@ itemCombinations = ++ 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 [MINIGUNX i,BANGCANE] $ miniGunX (i+1)) [3..15] - + ++ [ po [itype,mtype] $ it & itModules . modHitEffect .~ m + | (itype,it) <- firearmTypes , (mtype,m) <- bulletModules + ] where p = (,) po xs it = (map o xs,it) o = (1,) + +firearmTypes :: [(CombineType,Item)] +firearmTypes + = [(BANGSTICK i,bangStick i) | i <- [1..9] ] + ++ [(BANGCANEX i,bangCaneX i) | i <- [1..6] ] +bulletModules :: [(CombineType,ItemModule HitEffect)] +bulletModules = + [(INCENDIARYMODULE, ItemModule (destroyOnImpact bulIncCr bulIncWall) ["+INCENDIARY"] 1 ) + ,(BOUNCEMODULE, ItemModule (destroyOnImpact bulBounceArmCr' bulBounceWall) ["+BOUNCE"] 1 ) + ] diff --git a/src/Dodge/Combine/Data.hs b/src/Dodge/Combine/Data.hs index f591542a7..c42ead7b9 100644 --- a/src/Dodge/Combine/Data.hs +++ b/src/Dodge/Combine/Data.hs @@ -93,5 +93,8 @@ data CombineType | BATTERY | FUELCELL | PORTABLEFUSION + -- Modules + | INCENDIARYMODULE + | BOUNCEMODULE | NoCombineType deriving (Eq,Ord,Show) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 4fbbad8ec..e7196e371 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -167,6 +167,8 @@ startInventory = IM.fromList $ zip [0..] startInvList testInventory :: IM.IntMap Item testInventory = IM.fromList $ zip [0..] [ makeTypeCraftNum 9 PIPE + , incendiaryModule + , bounceModule , makeTypeCraftNum 5 TUBE , makeTypeCraftNum 1 MAGNET , makeTypeCraftNum 5 HARDWARE diff --git a/src/Dodge/Item/Craftable.hs b/src/Dodge/Item/Craftable.hs index c315ea2b1..45ae4607d 100644 --- a/src/Dodge/Item/Craftable.hs +++ b/src/Dodge/Item/Craftable.hs @@ -1,9 +1,13 @@ module Dodge.Item.Craftable where import Dodge.Data import Dodge.Default.Weapon +--import Dodge.Particle.Bullet.HitEffect +--import Dodge.WorldEvent.HitEffect +import Color --import Dodge.Picture.Layer --import Picture --import Geometry +import Control.Lens makeTypeCraftNum :: Int -> CombineType -> Item makeTypeCraftNum i ct = defaultCraftable @@ -16,6 +20,16 @@ makeTypeCraftNum i ct = defaultCraftable makeTypeCraft :: CombineType -> Item makeTypeCraft = makeTypeCraftNum 1 + +incendiaryModule :: Item +incendiaryModule = makeTypeCraft INCENDIARYMODULE + & itInvSize .~ 1 + & itInvColor .~ chartreuse +bounceModule :: Item +bounceModule = makeTypeCraft BOUNCEMODULE + & itInvSize .~ 1 + & itInvColor .~ chartreuse + pipe :: Item pipe = makeTypeCraft PIPE diff --git a/src/Dodge/Item/Weapon/BulletGun/Cane.hs b/src/Dodge/Item/Weapon/BulletGun/Cane.hs index a756a348b..5a3731058 100644 --- a/src/Dodge/Item/Weapon/BulletGun/Cane.hs +++ b/src/Dodge/Item/Weapon/BulletGun/Cane.hs @@ -9,8 +9,8 @@ module Dodge.Item.Weapon.BulletGun.Cane , fastBurstRifle , miniGunX ) where -import Dodge.Particle.Bullet.HitEffect -import Dodge.WorldEvent.HitEffect +--import Dodge.Particle.Bullet.HitEffect +--import Dodge.WorldEvent.HitEffect import Dodge.Item.Weapon.BulletGun.Clip import Dodge.Data --import Dodge.ChainEffect @@ -42,8 +42,6 @@ import Data.Maybe bangCane :: Item bangCane = defaultGun { _itName = "BANGCANE" - , _itModules = ItemModules - { _modHitEffect = ItemModule (destroyOnImpact bulIncCr bulIncWall) ["+INCENDIARY"] 1} , _itType = BANGCANE ,_itParams = BulletShooter { _muzVel = 0.8 @@ -147,6 +145,8 @@ rifle = bangCane , _dimSPic = \it -> noPic $ baseRifleShape <> makeSingleClipAt (V3 5 0 3) it } + , _itModules = ItemModules + { _modHitEffect = DefaultModule } } & itUse . useAim . aimStance .~ TwoHandTwist & itName .~ "RIFLE"