From 37e26f53e68acbdbf39d22b6854c4e9b0ae780c8 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 12 Jan 2023 12:51:24 +0000 Subject: [PATCH] Tweak module display and logic --- data/texture/charMap.png | Bin 3446 -> 3503 bytes src/Dodge/Combine/Combinations.hs | 15 ++-- src/Dodge/Combine/Module.hs | 7 +- src/Dodge/Creature.hs | 26 +++---- src/Dodge/Creature/HandPos.hs | 1 - src/Dodge/Data/Bullet.hs | 3 +- src/Dodge/Data/Equipment/Misc.hs | 1 - src/Dodge/Data/Item/Combine.hs | 14 ++-- src/Dodge/Default/Item/Use/Equipment.hs | 2 +- src/Dodge/Floor.hs | 2 +- src/Dodge/Inventory.hs | 1 - src/Dodge/Item/Craftable.hs | 18 +++-- src/Dodge/Item/Draw/SPic.hs | 72 +++++++++++++++++-- src/Dodge/Item/Info.hs | 40 +++++++---- src/Dodge/Item/Module.hs | 88 ++++++++++++++++++++++++ src/Dodge/LockAndKey.hs | 10 +-- src/Dodge/Module.hs | 9 ++- src/Dodge/Module/Info.hs | 15 ++++ src/Dodge/Render/HUD.hs | 6 +- 19 files changed, 250 insertions(+), 80 deletions(-) create mode 100644 src/Dodge/Item/Module.hs create mode 100644 src/Dodge/Module/Info.hs diff --git a/data/texture/charMap.png b/data/texture/charMap.png index 98dbb0151ad7cb2afaa5e234024f1ceb41ccf565..464c28b76c1b3c4af7e2b0677038c552f2554d7e 100644 GIT binary patch delta 3449 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 z9XhcOm|zOd$+YVM000000N_1%A%gdwzykmP00000DEuG-00000000020000000000 b@B#b-23Wl=Fv`=?00000NkvXXu0mjfDbv(3 delta 3391 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 VurRTvkNp4u002ovPDHLkV1mI>nUnwk diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 052087183..e6b1eb35c 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -94,8 +94,8 @@ itemCombinations = , po [cr MICROCHIP, cr TRANSMITTER, cr HEATSENSOR] (autoDetector CREATUREDETECTOR) , po [cr BATTERY, cr LED] torch , po [hd TORCH, eq HAT] headLamp - , po [cr LIGHTER, cr THERMOMETER, cr MICROCHIP] (makeTypeCraft INCENDIARYMODULE) - , po [cr TRANSFORMER, cr BATTERY, cr MICROCHIP] (makeTypeCraft STATICMODULE) + , po [cr LIGHTER, cr THERMOMETER, cr MICROCHIP] (bulletPayloadCraft IncBall) + , po [cr TRANSFORMER, cr BATTERY, cr MICROCHIP] (bulletPayloadCraft TeslaBall) ] ++ map (\i -> po [HELD (LASWIDE i), cr TRANSFORMER] $ lasWide (i + 1)) [2 .. 9] ++ map (\i -> po [cr PIPE, HELD (BANGSTICK i)] $ bangStick (i + 1)) [1 .. 8] @@ -159,17 +159,14 @@ moduleCombinations = ( ModBulletCollision , bulletWeapons , - [ amod [cr BOUNCEMODULE] BOUNCEBUL - , amod [cr PENMODULE] PENBUL + [ amod [cr (BULBODYMODULE be)] (BULBODY be) | be <- [minBound..] ] ) , ( ModBulletPayload , bulletWeapons , - [ amod [cr INCENDIARYMODULE] INCENDBUL - , amod [cr STATICMODULE] STATICBUL - , amod [cr CONCUSSMODULE] CONCUSBUL + [ amod [cr (BULPAYLOADMODULE x)] (BULPAY x) | x <- [minBound ..] ] ) , @@ -194,9 +191,9 @@ moduleCombinations = ( ModDualBeam , [dualBeam] , - [ amod [cr INCENDIARYMODULE] INCENDLAS + [ amod [cr (BULPAYLOADMODULE IncBall)] INCENDLAS , amod [cr TRANSFORMER] SPLITLAS - , amod [cr STATICMODULE] STATICLAS + , amod [cr (BULPAYLOADMODULE TeslaBall)] STATICLAS ] ) , diff --git a/src/Dodge/Combine/Module.hs b/src/Dodge/Combine/Module.hs index 19f30160f..92f9d99a6 100644 --- a/src/Dodge/Combine/Module.hs +++ b/src/Dodge/Combine/Module.hs @@ -13,11 +13,8 @@ moduleModification imt = case imt of DRUMMAG -> itUse . heldConsumption . laMax .~ 45 BELTMAG -> itUse . heldConsumption . laMax .~ 150 MAGNETMAG -> itUse . heldDelay . rateMax .~ 4 - INCENDBUL -> itUse . heldConsumption . laAmmoType . amBullet . buSpawn .~ BulBall IncBall - BOUNCEBUL -> itUse . heldConsumption . laAmmoType . amBullet . buEffect .~ BounceBullet - PENBUL -> itUse . heldConsumption . laAmmoType . amBullet . buEffect .~ PenetrateBullet - STATICBUL -> itUse . heldConsumption . laAmmoType . amBullet . buSpawn .~ BulBall TeslaBall - CONCUSBUL -> itUse . heldConsumption . laAmmoType . amBullet . buSpawn .~ BulBall ConcBall + BULPAY thepayload -> itUse . heldConsumption . laAmmoType . amBullet . buSpawn .~ BulBall thepayload + BULBODY thebody -> itUse . heldConsumption . laAmmoType . amBullet . buEffect .~ thebody TARGET t -> itUse . useTargeting ?~ t MAGNETTRAJ -> (itUse . heldConsumption . laAmmoType . amBullet . buTrajectory .~ MagnetTrajectory 0) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 947fa855d..11a94cfcb 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -176,16 +176,18 @@ inventoryX c = case c of , makeTypeCraftNum 5 TRANSFORMER , makeTypeCraftNum 5 PRISM , makeTypeCraftNum 5 LIGHTER - , makeTypeCraftNum 5 INCENDIARYMODULE + , makeTypeCraftNum 5 (BULPAYLOADMODULE IncBall) ] 'G' -> [ autoPistol , pistol , makeTypeCraftNum 2 HARDWARE , makeTypeCraftNum 2 MAGNET - , makeTypeCraftNum 5 INCENDIARYMODULE - , makeTypeCraftNum 5 CONCUSSMODULE - , makeTypeCraftNum 5 STATICMODULE + , makeTypeCraftNum 5 (BULPAYLOADMODULE IncBall) + , makeTypeCraftNum 5 (BULPAYLOADMODULE TeslaBall) + , makeTypeCraftNum 5 (BULPAYLOADMODULE ConcBall) + , makeTypeCraftNum 5 (BULBODYMODULE BounceBullet) + , makeTypeCraftNum 5 (BULBODYMODULE PenetrateBullet) ] 'H' -> [shatterGun] 'I' -> @@ -212,11 +214,11 @@ inventoryX c = case c of , makeTypeCraftNum 1 LIGHTSENSOR , makeTypeCraftNum 1 SOUNDSENSOR , makeTypeCraftNum 1 HEATSENSOR - , makeTypeCraftNum 1 BOUNCEMODULE - , makeTypeCraftNum 1 PENMODULE - , makeTypeCraftNum 1 INCENDIARYMODULE - , makeTypeCraftNum 1 CONCUSSMODULE - , makeTypeCraftNum 1 STATICMODULE + , makeTypeCraftNum 1 (BULBODYMODULE BounceBullet) + , makeTypeCraftNum 1 (BULBODYMODULE PenetrateBullet) + , makeTypeCraftNum 1 (BULPAYLOADMODULE IncBall) + , makeTypeCraftNum 1 (BULPAYLOADMODULE TeslaBall) + , makeTypeCraftNum 1 (BULPAYLOADMODULE ConcBall) ] 'L' -> [scrollWatch] 'M' -> stackedInventory @@ -236,9 +238,9 @@ testInventory = , flatShield , sniperRifle , makeTypeCraftNum 1 MOTOR - , makeTypeCraft INCENDIARYMODULE - , makeTypeCraft STATICMODULE - , makeTypeCraft CONCUSSMODULE + , makeTypeCraft (BULPAYLOADMODULE IncBall) + , makeTypeCraft (BULPAYLOADMODULE TeslaBall) + , makeTypeCraft (BULPAYLOADMODULE ConcBall) , teleportModule , makeTypeCraftNum 10 HARDWARE , makeTypeCraftNum 3 SPRING diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index 20e1eba2f..666700a58 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -13,7 +13,6 @@ aimingWeaponHandlePos cr it = case it ^? itUse . heldAim . aimStance of Just TwoHandTwist -> -5 Just OneHand -> 14 Just TwoHandFlat -> 1.2 * _crRad cr --- Just LeaveHolstered -> 0 Nothing -> 0 aimingWeaponZeroPos :: Creature -> Item -> Float diff --git a/src/Dodge/Data/Bullet.hs b/src/Dodge/Data/Bullet.hs index fe35a9c62..32e8ba4aa 100644 --- a/src/Dodge/Data/Bullet.hs +++ b/src/Dodge/Data/Bullet.hs @@ -43,7 +43,7 @@ data BulletEffect | PenetrateBullet deriving (Eq, Ord, Show, Enum, Bounded, Read) --Generic, Flat) -data BulletSpawn = BulBall EnergyBallType | BulSpark +data BulletSpawn = BulBall {_spawnEBT :: EnergyBallType} | BulSpark deriving (Show, Eq, Ord, Read) --Generic, Flat) data BulletTrajectory @@ -54,6 +54,7 @@ data BulletTrajectory deriving (Show, Eq, Ord, Read) --Generic, Flat) makeLenses ''Bullet +makeLenses ''BulletSpawn deriveJSON defaultOptions ''EnergyBallType deriveJSON defaultOptions ''BulletUpdateMod deriveJSON defaultOptions ''BulletEffect diff --git a/src/Dodge/Data/Equipment/Misc.hs b/src/Dodge/Data/Equipment/Misc.hs index c7ca321d2..56a3f1461 100644 --- a/src/Dodge/Data/Equipment/Misc.hs +++ b/src/Dodge/Data/Equipment/Misc.hs @@ -14,7 +14,6 @@ data EquipSite | GoesOnBack | GoesOnWrist | GoesOnLegs - | GoesOnSpecial deriving (Eq,Ord,Show,Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 014cc5363..21a0fa61a 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -67,13 +67,10 @@ data CraftType | BATTERY | FUELCELL | PORTABLEFUSION - | INCENDIARYMODULE - | STATICMODULE - | CONCUSSMODULE | FRAGMODULE | FLASHMODULE - | BOUNCEMODULE - | PENMODULE + | BULPAYLOADMODULE EnergyBallType + | BULBODYMODULE BulletEffect | TELEPORTMODULE | TIMEMODULE | SIZEMODULE @@ -186,11 +183,8 @@ data ItemModuleType | DRUMMAG | BELTMAG | MAGNETMAG - | INCENDBUL - | BOUNCEBUL - | PENBUL - | STATICBUL - | CONCUSBUL + | BULPAY EnergyBallType + | BULBODY BulletEffect | TARGET TargetType | MAGNETTRAJ | FLECHETRAJ diff --git a/src/Dodge/Default/Item/Use/Equipment.hs b/src/Dodge/Default/Item/Use/Equipment.hs index eb108e710..cc3c8b0ea 100644 --- a/src/Dodge/Default/Item/Use/Equipment.hs +++ b/src/Dodge/Default/Item/Use/Equipment.hs @@ -6,7 +6,7 @@ import Dodge.Data.Item.Use.Equipment defaultEquip :: EquipEffect defaultEquip = EquipEffect - { _eeSite = GoesOnSpecial + { _eeSite = GoesOnHead , _eeUse = EDoNothing , _eeOnEquip = EDoNothing , _eeOnRemove = EDoNothing diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 5e27e5a0d..cac079316 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -23,7 +23,7 @@ initialAnoTree = [ IntAnno $ AnTree . startRoom , IntAnno $ PassthroughLockKeyLists - [(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE, HELD SPARKGUN])] + [(sensorRoomRunPast ELECTRICAL, takeOne [CRAFT (BULPAYLOADMODULE TeslaBall), HELD SPARKGUN])] itemRooms , IntAnno $ AnTree . lasSensorTurretTest , -- , AnRoom $ tanksRoom [] [] <&> rmPmnts .~ [] diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index f90b2079a..7ab6873cd 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -297,7 +297,6 @@ equipSiteToPositions es = case es of GoesOnBack -> [OnBack] GoesOnWrist -> [OnLeftWrist, OnRightWrist] GoesOnLegs -> [OnLegs] - GoesOnSpecial -> [OnSpecial] closeObjScrollDir :: Float -> World -> World closeObjScrollDir x diff --git a/src/Dodge/Item/Craftable.hs b/src/Dodge/Item/Craftable.hs index b92165b20..ac53f3679 100644 --- a/src/Dodge/Item/Craftable.hs +++ b/src/Dodge/Item/Craftable.hs @@ -16,17 +16,23 @@ makeTypeCraftNum i ct = makeTypeCraft :: CraftType -> Item makeTypeCraft = makeTypeCraftNum 1 +bulletPayloadCraft :: EnergyBallType -> Item +bulletPayloadCraft ebt = + makeTypeCraft (BULPAYLOADMODULE ebt) + & itInvSize .~ 1 + & itInvColor .~ chartreuse + incendiaryModule :: Item -incendiaryModule = - makeTypeCraft INCENDIARYMODULE +incendiaryModule = bulletPayloadCraft IncBall + +bulletBodyCraft :: BulletEffect -> Item +bulletBodyCraft ebt = + makeTypeCraft (BULBODYMODULE ebt) & itInvSize .~ 1 & itInvColor .~ chartreuse bounceModule :: Item -bounceModule = - makeTypeCraft BOUNCEMODULE - & itInvSize .~ 1 - & itInvColor .~ chartreuse +bounceModule = bulletBodyCraft BounceBullet teleportModule :: Item teleportModule = diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 428f85bce..9bc8243ff 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -9,10 +9,11 @@ import LensHelp import Picture import Shape import ShapePicture +import qualified Data.Map.Strict as M itemSPic :: Item -> SPic itemSPic it = - foldMap (modulesSPic it) (_iyModules $ _itType it) <> case it ^. itType . iyBase of + M.foldMapWithKey (modulesSPic it) (_iyModules $ _itType it) <> case it ^. itType . iyBase of NoItemType -> over _1 (colorSH magenta) defSPic CRAFT _ -> defSPic HELD ht -> heldItemSPic ht it @@ -55,6 +56,56 @@ leftItemSPic lt _ = case lt of BLINKER -> defSPic _ -> defSPic +magazinePosition :: HeldItemType -> Maybe (Point3, Point3) +magazinePosition hit = case hit of + FLATSHIELD -> Nothing + FORCEFIELDGUN -> Nothing + TORCH -> Nothing + BANGSTICK _ -> Nothing + PISTOL -> Just (V3 5 2 0, V3 0 1 0) + REVOLVER -> Nothing + REVOLVERX _ -> Nothing + MACHINEPISTOL -> Just (V3 5 2 0, V3 0 1 0) + AUTOPISTOL -> Just (V3 5 2 0, V3 0 1 0) + SMG -> Just (V3 7 (-2) 0 , V3 0 0 0) + BANGCONE -> Nothing + BLUNDERBUSS -> Nothing + GRAPECANNON _ -> Nothing + MINIGUNX _ -> Nothing + VOLLEYGUN _ -> Nothing + RIFLE -> Nothing + REPEATER -> Just (V3 10 (-2) 0 , V3 0 0 0) + AUTORIFLE -> Just (V3 10 (-2) 0 , V3 0 0 0) + BURSTRIFLE -> Just (V3 10 (-2) 0 , V3 0 0 0) + BANGROD -> Nothing + ELEPHANTGUN -> Nothing + AMR -> Just (V3 10 (-2) 0 , V3 0 0 0) + AUTOAMR -> Just (V3 10 (-2) 0 , V3 0 0 0) + SNIPERRIFLE -> Nothing + MACHINEGUN -> Just (V3 10 (-2) 0 , V3 0 0 0) + FLAMESPITTER -> Nothing + FLAMETHROWER -> Nothing + FLAMETORRENT -> Nothing + FLAMEWALL -> Nothing + BLOWTORCH -> Nothing + SPARKGUN -> Nothing + TESLAGUN -> Nothing + LASGUN -> Nothing + LASCIRCLE -> Nothing + DUALBEAM -> Nothing + LASWIDE _ -> Nothing + --SONICGUN -> noPic baseSonicShape + TRACTORGUN -> Nothing + LAUNCHER -> Nothing + LAUNCHERX _ -> Nothing + REMOTELAUNCHER -> Nothing + POISONSPRAYER -> Nothing + DRONELAUNCHER -> Nothing + SHATTERGUN -> Nothing + HELDDETECTOR _ -> Nothing + KEYCARD _ -> Nothing + BINOCULARS -> Nothing + heldItemSPic :: HeldItemType -> Item -> SPic heldItemSPic ht it = case ht of FLATSHIELD -> flatShieldEquipSPic @@ -131,8 +182,8 @@ torchShape = bot = upperPrismPoly 0.5 $ rectXH 9 2 back = upperPrismPoly 3 $ rectXH 1 2 -modulesSPic :: Item -> ItemModuleType -> SPic -modulesSPic it imt = case imt of +modulesSPic :: Item -> ModuleSlot -> ItemModuleType -> SPic +modulesSPic it _ imt = case imt of ATTACHTORCH -> noPic (overPosSH (+.+.+ _dimAttachPos (_itDimension it)) torchShape) _ -> mempty @@ -189,12 +240,23 @@ makeSingleClipAt p it = case it ^? itUse . heldConsumption . laLoaded of makeTinClipAt :: Float -> Point3 -> Item -> Shape makeTinClipAt r p it = translateSH p . overPosSH (rotate3z r) $ - upperPrismPoly 1 $ + (upperPrismPoly 1 $ reverse $ - rectNSWE 0 (- y) (-2) 2 + rectNSWE 0 (- y) (-2) 2) <> tips where y = fromIntegral y' * 0.3 y' = fromMaybe 0 $ it ^? itUse . heldConsumption . laLoaded + tips = fromMaybe mempty $ do + ebt <- it ^? itUse . heldConsumption . laAmmoType . amBullet . buSpawn . spawnEBT + return $ colorSH (bulletPayloadColor ebt) $ upperPrismPoly 1.1 $ + reverse $ + rectNSWE 0 (- y) (-2) (-1) + +bulletPayloadColor :: EnergyBallType -> Color +bulletPayloadColor ebt = case ebt of + IncBall -> orange + TeslaBall -> cyan + ConcBall -> white volleyGunSPic :: Int -> Item -> SPic volleyGunSPic i it = diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 00e2c99b0..b5023adef 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -1,5 +1,6 @@ module Dodge.Item.Info where +import Dodge.Module.Info import Data.Char import Dodge.Data.Item import qualified Data.Map.Strict as M @@ -8,11 +9,12 @@ import LensHelp itemInfo :: Item -> String itemInfo itm = itmBaseInfo itm ++ " " ++ itmUsageInfo itm ++ itmSpaceInfo itm + ++ itmModuleInfo (itm ^. itType . iyModules) itmSpaceInfo :: Item -> String itmSpaceInfo itm = case (ceiling $ _itInvSize itm) of - 1 -> "It takes up one inventory slot. " - x -> "It takes up " ++ showInt x ++ " inventory slots. " + 1 -> " It takes up one inventory slot. " + x -> " It takes up " ++ showInt x ++ " inventory slots. " itmBaseInfo :: Item -> String itmBaseInfo itm = case itm ^. itType . iyBase of @@ -180,13 +182,10 @@ craftInfo fit = case fit of BATTERY -> "A store of electical potential energy." FUELCELL -> "A devices that converts chemical energy into electricity." PORTABLEFUSION -> "A miniature nuclear reactor." - INCENDIARYMODULE -> "A device that converts projectiles into incendiary projectiles." - STATICMODULE -> "A device that converts projectiles into electrostatic projectiles." - CONCUSSMODULE -> "A device that converts projectiles into concussive projectiles." + BULPAYLOADMODULE ebt -> "A device that converts projectiles into " ++ displayBulletPayload ebt ++ " projectiles." FRAGMODULE -> "A device that converts projectiles into fragmentation projectiles." FLASHMODULE -> "A device that converts projectiles into flashbang projectiles." - BOUNCEMODULE -> "A device that converts projectiles into bouncing projectiles." - PENMODULE -> "A device that converts projectiles into pentrating projectiles." + BULBODYMODULE be -> "A device that converts projectiles into " ++ displayBulletBody be ++ " projectiles." TELEPORTMODULE -> "A device that allows for near-instant translocation across space." TIMEMODULE -> "A device that can affect temporality." SIZEMODULE -> "A device that can affect physical size." @@ -231,23 +230,36 @@ equipSiteInfo es = case es of GoesOnBack -> " on the back" GoesOnWrist -> " on a wrist" GoesOnLegs -> " on both legs" - GoesOnSpecial -> " in a unique location" itmModuleInfo :: M.Map ModuleSlot ItemModuleType -> String itmModuleInfo m | m == mempty = "" - | otherwise = "Modifications can be made " + | otherwise = mms ++ ems + where + (mademods,emptymods) = M.partition (/= EMPTYMODULE) m + mms | mademods == mempty = "" + | otherwise = " Modifications have been made " + ++ makeCommaList (map moduleInfo $ M.keys mademods) + ems | emptymods == mempty = "" + | otherwise = " Modifications can be made " + ++ makeCommaList (map moduleInfo $ M.keys emptymods) + +makeCommaList :: [String] -> String +makeCommaList [] = "" +makeCommaList (x:[]) = x ++ "." +makeCommaList (x:y:[]) = x ++ " and " ++ y ++ "." +makeCommaList (x:xs) = x ++ ", " ++ makeCommaList xs moduleInfo :: ModuleSlot -> String moduleInfo imt = case imt of - ModBulletCollision -> "that affect how fired bullets collide with objects" - ModBulletPayload -> "that change bullet payloads" + ModBulletCollision -> "to affect how fired bullets collide with objects" + ModBulletPayload -> "to bullet payloads" ModRifleMag -> "to the magazine" ModAutoMag -> "to the magazine" - ModTarget -> "to add a targeting system" - ModBulletTrajectory -> "to the trajectory of fired bullets" + ModTarget -> "to add a targeting system or scope" + ModBulletTrajectory -> "to utilize any installed targeting system to affect the trajectory of fired bullets" ModLauncherHoming -> "to add a homing system" ModBattery -> "to its battery system" ModTeleport -> "to add a teleporation system" ModDualBeam -> "to the dual beams" - ModHeldAttach -> "by adding an attachment" + ModHeldAttach -> "to add an attachment that may have any number of effects" diff --git a/src/Dodge/Item/Module.hs b/src/Dodge/Item/Module.hs new file mode 100644 index 000000000..d16835b91 --- /dev/null +++ b/src/Dodge/Item/Module.hs @@ -0,0 +1,88 @@ +module Dodge.Item.Module where + +import Dodge.Data.Item.Combine +import Geometry.Data + +moduleAttachPosition :: ItemBaseType -> ModuleSlot -> (Point3, Point3) +moduleAttachPosition ibt ms = case ms of + ModBulletCollision -> (V3 (x - 2.5) y (0.5 * z) , V3 0 1 0) + ModBulletPayload -> (V3 (-x) 0 (0.5 * z), V3 (-1) 0 0) + ModRifleMag -> undefined + ModAutoMag -> undefined + ModTarget -> (V3 0 0 z, V3 0 0 1) + ModBulletTrajectory -> undefined + ModLauncherHoming -> undefined + ModBattery -> undefined + ModTeleport -> undefined + ModDualBeam -> undefined + ModHeldAttach -> undefined + where + V3 x y z = itBounds ibt + +itBounds :: ItemBaseType -> Point3 +itBounds ibt = case ibt of + HELD hit -> heldBounds hit + _ -> V3 0 0 0 + + +heldBounds :: HeldItemType -> Point3 +heldBounds hit = case hit of + BANGSTICK _ -> V3 0 0 0 + PISTOL -> bss + REVOLVER -> bss + REVOLVERX _ -> bss + MACHINEPISTOL -> bss + AUTOPISTOL -> bss + SMG -> smgs + BANGCONE -> cs + BLUNDERBUSS -> bbs + GRAPECANNON _ -> bbs + MINIGUNX _ -> minis + VOLLEYGUN _ -> undefined + RIFLE -> rs + REPEATER -> rs + AUTORIFLE -> rs + BURSTRIFLE -> rs + BANGROD -> amrs + ELEPHANTGUN -> amrs + AMR -> amrs + AUTOAMR -> amrs + SNIPERRIFLE -> amrs + MACHINEGUN -> amrs + FLAMESPITTER -> fs + FLAMETHROWER -> fs + FLAMETORRENT -> fs + FLAMEWALL -> fs + BLOWTORCH -> fs + SPARKGUN -> ts + TESLAGUN -> ts + LASGUN -> ls + LASCIRCLE -> ls + DUALBEAM -> ls + LASWIDE _ -> ls + TRACTORGUN -> ls + LAUNCHER -> launchs + LAUNCHERX _ -> launchs + REMOTELAUNCHER -> launchs + POISONSPRAYER -> fs + DRONELAUNCHER -> fs + SHATTERGUN -> launchs + FORCEFIELDGUN -> launchs + HELDDETECTOR _ -> launchs + TORCH -> launchs + BINOCULARS -> launchs + FLATSHIELD -> launchs + KEYCARD _ -> launchs + where + bss = V3 10 2 3 + smgs = V3 20 2 3 + cs = V3 5 2 3 + bbs = V3 20 2 3 + minis = V3 10 2 3 + rs = V3 25 2 3 + amrs = V3 30 2 3 + fs = V3 10 2 3 + ts = V3 10 2 3 + ls = V3 30 2 3 + launchs = V3 10 10 10 + diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index 32bb38872..ff62ac618 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -25,8 +25,8 @@ lockRoomMultiItems = lockRoomKeyItems :: RandomGen g => [(Int -> State g (MetaTree Room String), State g ItemBaseType)] lockRoomKeyItems = [ (lasCenSensEdge, takeOne [HELD LAUNCHER, HELD LASGUN, HELD SPARKGUN, HELD FLATSHIELD, HELD FORCEFIELDGUN]) - , (sensorRoomRunPast ELECTRICAL, takeOne [CRAFT STATICMODULE, HELD SPARKGUN]) - , (sensorRoomRunPast FLAMING, takeOne [HELD FLAMESPITTER, CRAFT INCENDIARYMODULE]) + , (sensorRoomRunPast ELECTRICAL, takeOne [CRAFT (BULPAYLOADMODULE TeslaBall), HELD SPARKGUN]) + , (sensorRoomRunPast FLAMING, takeOne [HELD FLAMESPITTER, CRAFT (BULPAYLOADMODULE IncBall)]) , (sensorRoomRunPast LASERING, return $ HELD LASGUN) , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3)) , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD]) @@ -107,17 +107,17 @@ itemRooms = ] ) , - ( CRAFT INCENDIARYMODULE + ( CRAFT (BULPAYLOADMODULE IncBall) , join $ takeOne [ rc [incendiaryModule] ] ) , - ( CRAFT STATICMODULE + ( CRAFT (BULPAYLOADMODULE TeslaBall) , join $ takeOne - [ rc [makeTypeCraft STATICMODULE] + [ rc [makeTypeCraft (BULPAYLOADMODULE TeslaBall)] ] ) ] diff --git a/src/Dodge/Module.hs b/src/Dodge/Module.hs index b75bebfda..b9b4cf1ea 100644 --- a/src/Dodge/Module.hs +++ b/src/Dodge/Module.hs @@ -6,6 +6,7 @@ module Dodge.Module ( import qualified Data.Map.Strict as M import Dodge.Data.Item +import Dodge.Module.Info moduleSizes :: Item -> Int moduleSizes = sum . fmap moduleSize . _iyModules . _itType @@ -24,11 +25,8 @@ moduleName imt = case imt of DRUMMAG -> Just "+DRUM MAG" BELTMAG -> Just "+BELT FEED" MAGNETMAG -> Just "+MAGNET FEED" - INCENDBUL -> Just "+INCENDIARY" - BOUNCEBUL -> Just "+BOUNCE" - PENBUL -> Just "+PENETRATE" - STATICBUL -> Just "+STATIC" - CONCUSBUL -> Just "+CONCUSS" + BULPAY thepayload -> Just $ "+" ++ displayBulletPayload thepayload + BULBODY thebody -> Just $ "+" ++ displayBulletBody thebody TARGET TargetRBCreature -> Just "+CREATURETARGETING" TARGET TargetLaser -> Just "+LASERTARGETING" TARGET TargetRBPress -> Just "+POSTIONALTARGETING" @@ -45,6 +43,7 @@ moduleName imt = case imt of 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 -- . fmap fromModuleType diff --git a/src/Dodge/Module/Info.hs b/src/Dodge/Module/Info.hs new file mode 100644 index 000000000..a248da6d3 --- /dev/null +++ b/src/Dodge/Module/Info.hs @@ -0,0 +1,15 @@ +module Dodge.Module.Info where +--import qualified Data.Map.Strict as M +import Dodge.Data.Item + +displayBulletBody :: BulletEffect -> String +displayBulletBody be = case be of + DestroyBullet -> "DESBUL-shouldn't display" + BounceBullet -> "BOUNCING" + PenetrateBullet -> "PENETRATING" + +displayBulletPayload :: EnergyBallType -> String +displayBulletPayload ebt = case ebt of + IncBall -> "INCENDIARY" + TeslaBall -> "STATIC" + ConcBall -> "CONCUSSIVE" diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 6ad57ca8d..513fe2ef6 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -126,13 +126,13 @@ drawExamineInventory cfig mtweaki w = closeObjectInfo :: Int -> Either FloorItem Button -> String closeObjectInfo n x = case x of - Left (FlIt {_flIt = itm}) -> "On the floor" ++ floorItemPickupInfo n itm ++ itemInfo itm + Left (FlIt {_flIt = itm}) -> itemInfo itm ++ " It is on the floor" ++ floorItemPickupInfo n itm Right _ -> "Some sort of switch or button." floorItemPickupInfo :: Int -> Item -> String floorItemPickupInfo n itm - | n >= ceiling (_itInvSize itm) = ", but you have space to pick it up. " - | otherwise = ", and you don't have space to pick it up. " + | n >= ceiling (_itInvSize itm) = ", but you have space to pick it up." + | otherwise = ", and you don't have space to pick it up." yourAugmentedItem :: (Item -> a) -> a -> (Either FloorItem Button -> a) -> World -> a yourAugmentedItem f x g w