diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index eb24a78dd..b700ec8b1 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -130,6 +130,14 @@ moduleCombinations = ,amod [cr MOTOR,cr HARDWARE] BELTMAG ] ) + , ( ModHeldAttach + , [rifle + ,autoRifle + ,burstRifle + ] + , [amod [cr DUCTTAPE,HELD TORCH] ATTACHTORCH + ] + ) , ( ModAutoMag , [autoRifle ,autoPistol diff --git a/src/Dodge/Combine/Data.hs b/src/Dodge/Combine/Data.hs index cf15f8b6c..69a376d6c 100644 --- a/src/Dodge/Combine/Data.hs +++ b/src/Dodge/Combine/Data.hs @@ -22,6 +22,7 @@ data CraftType | TUBE | HARDWARE | SPRING + | DUCTTAPE | CAN | TIN | DRUM @@ -197,6 +198,7 @@ data ItemModuleType | WEPTELE | LAUNCHHOME | EXTRABATTERY + | ATTACHTORCH deriving (Eq,Ord,Show) data Detector @@ -215,7 +217,7 @@ data ModuleSlot | ModBattery | ModTeleport | ModDualBeam - | ModAlongsideWeapon + | ModHeldAttach deriving (Eq,Ord,Show) makeLenses ''ItemType diff --git a/src/Dodge/Combine/Module.hs b/src/Dodge/Combine/Module.hs index fbb57bac4..47faa88aa 100644 --- a/src/Dodge/Combine/Module.hs +++ b/src/Dodge/Combine/Module.hs @@ -38,6 +38,7 @@ moduleModification imt = case imt of WEPTELE -> makeDirectedTele LAUNCHHOME -> itConsumption . laAmmoType . amPjCreation .~ fireTrackingShell EXTRABATTERY -> itConsumption . laMax +~ 1000 + ATTACHTORCH -> itUse . heldAttachment .~ Torch where f ameff = itConsumption . laAmmoType . amBulEff .~ ameff makeDirectedTele it = it diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index fe48ecc14..059c4ab38 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -11,7 +11,7 @@ import Dodge.Prop.Gib import Dodge.Base import Dodge.Creature.State.WalkCycle import Dodge.Creature.Impulse.Movement ---import Dodge.Creature.Test +import Dodge.LightSource.Torch --import Dodge.Base import Dodge.SoundLogic import RandomHelp @@ -24,12 +24,12 @@ import Picture import Shape import ShapePicture import qualified IntMapHelp as IM +import LensHelp --import StrictHelp --import FoldableHelp import Data.Function -import Control.Lens --import qualified Data.IntSet as IS --import Data.Maybe --import Control.Applicative @@ -212,7 +212,20 @@ equipmentEffects cr = flip (foldr $ useEquipment cr) (IM.keys $ _crInvEquipped c invSideEff :: Creature -> World -> World invSideEff cr w = weaponReloadSounds cr $ IM.foldrWithKey f w (_crInv cr) where - f i it w' = doItemTargeting i cr w' & maybe id (\g -> g it cr) (it ^? itEffect . ieInv) + f i it w' = itemInvSideEffect cr it + $ doItemTargeting i cr w' & maybe id (\g -> g it cr) (it ^? itEffect . ieInv) + +itemInvSideEffect :: Creature -> Item -> World -> World +itemInvSideEffect cr it + | hastorchattach = createAttachLight cr it + | otherwise = id + where + hastorchattach = it ^? itType . iyModules . ix ModHeldAttach == Just ATTACHTORCH && _itIsHeld it + +createAttachLight :: Creature -> Item -> World -> World +createAttachLight cr it = createTorchLightOffset cr it attachoff + where + attachoff = it ^?! itUse . heldAttachPos itemUpdate :: Creature -> Int -> Item -> Item itemUpdate cr i diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 4470da730..689416ae9 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -11,7 +11,7 @@ import Geometry import Data.Maybe itemSPic :: Item -> SPic -itemSPic it = modulesSPic it <> case it ^. itType . iyBase of +itemSPic it = foldMap (modulesSPic it) (_iyModules $ _itType it) $ case it ^. itType . iyBase of HELD ht -> heldItemSPic ht it LEFT lt -> leftItemSPic lt it EQUIP et -> equipItemSPic et it @@ -116,8 +116,10 @@ torchShape = colorSH blue back = upperPrismPoly 3 $ rectXH 1 2 -modulesSPic :: Item -> SPic -modulesSPic _ = mempty +modulesSPic :: Item -> ItemModuleType -> SPic -> SPic +modulesSPic it imt = case imt of + ATTACHTORCH -> (<> noPic (overPosSH (+.+.+ _heldAttachPos (_itUse it)) torchShape)) + _ -> id baseStickShapeX :: Item -> Int -> Shape baseStickShapeX it i = foldMap f [0..i-1] diff --git a/src/Dodge/Item/Equipment.hs b/src/Dodge/Item/Equipment.hs index 59fe65715..656b4c644 100644 --- a/src/Dodge/Item/Equipment.hs +++ b/src/Dodge/Item/Equipment.hs @@ -17,6 +17,7 @@ module Dodge.Item.Equipment , flameShield ) where import Dodge.Data +import Dodge.LightSource.Torch import Dodge.Item.Draw import Dodge.Item.Equipment.Booster import Dodge.LightSource @@ -114,11 +115,11 @@ torch = defaultWeapon & itUse . useAim . aimMuzPos .~ 10 createHeldLight :: Creature -> Int -> World -> World -createHeldLight cr i w = w - & tempLightSources .:~ tlsTimeRadColPos 1 250 0.7 - (p +.+.+ rotate3 (_crDir cr) (heldItemOffset itm cr (V3 8 0 1.5))) +createHeldLight cr i = createTorchLightOffset cr itm 0 +-- tempLightSources .:~ tlsTimeRadColPos 1 250 0.7 +-- (p +.+.+ rotate3 (_crDir cr) (heldItemOffset itm cr (V3 8 0 1.5))) where - p = addZ 0 $ _crPos cr +-- p = addZ 0 $ _crPos cr itm = cr ^?! crInv . ix i flatShield :: Item diff --git a/src/Dodge/Item/Weapon/BulletGun/Cane.hs b/src/Dodge/Item/Weapon/BulletGun/Cane.hs index 30414d7c0..72bd646a7 100644 --- a/src/Dodge/Item/Weapon/BulletGun/Cane.hs +++ b/src/Dodge/Item/Weapon/BulletGun/Cane.hs @@ -124,6 +124,7 @@ rifle = defaultBangCane & itUse . useAim . aimRange .~ 1 -- & itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 2} + & itType . iyModules . at ModHeldAttach ?~ EMPTYMODULE repeater :: Item repeater = rifle & itType . iyModules . at ModRifleMag ?~ EMPTYMODULE diff --git a/src/Dodge/Module.hs b/src/Dodge/Module.hs index 3a2448462..dec31069f 100644 --- a/src/Dodge/Module.hs +++ b/src/Dodge/Module.hs @@ -45,6 +45,7 @@ moduleName imt = case imt of WEPTELE -> Just "+DIRECTEDTELE" LAUNCHHOME -> Just "+TARGET HOMING" EXTRABATTERY -> Just "+BATTERY" + ATTACHTORCH -> Just "+TORCH" --moduleFold :: (m -> m -> m) -> (ItemModule -> Maybe m) -> m -> Item -> m --moduleFold g f e = foldr (g . fromMaybe e . f) e