diff --git a/data/texture/charMap.png b/data/texture/charMap.png index 7700bf053..98dbb0151 100644 Binary files a/data/texture/charMap.png and b/data/texture/charMap.png differ diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 88950a4d7..0f0c79bcd 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -19,9 +19,19 @@ watchCombinations = po xs it = (map o xs, it) o = (1,) +backpackCombinations :: [([(ItAmount,ItemBaseType)],Item)] +backpackCombinations = + [ po [CRAFT HOSE, CRAFT STEELDRUM] fuelPack + ] + where + po xs it = (map o xs, it) + o = (1,) + + itemCombinations :: [([(ItAmount, ItemBaseType)], Item)] itemCombinations = watchCombinations ++ + backpackCombinations ++ [ po [CRAFT PIPE, CRAFT HARDWARE] (bangStick 1) , po [HELD (BANGSTICK 1), CRAFT TIN] pistol , po [HELD PISTOL, CRAFT SPRING] autoPistol @@ -31,7 +41,7 @@ itemCombinations = , po [HELD REVOLVER, cr SPRING] $ revolverX 1 , po [cr CAN, cr HARDWARE] bangCone , po [HELD BANGCONE, cr PLANK] blunderbuss - , po [HELD BLUNDERBUSS, cr DRUM] (grapeCannon 1) + , po [HELD BLUNDERBUSS, cr STEELDRUM] (grapeCannon 1) , po [HELD (BANGSTICK 1), cr PLANK] rifle , po [HELD (BANGSTICK 1), HELD (BANGSTICK 1), HELD (BANGSTICK 1)] (volleyGun 3) , po [HELD RIFLE, cr TIN] repeater @@ -50,8 +60,8 @@ itemCombinations = ++ [p [p 2 $ cr TUBE, o $ HELD (LAUNCHERX i)] (launcherX (i + 1)) | i <- [2 .. 9]] ++ [ po [cr LIGHTER, cr PUMP, cr CAN] flameSpitter , po [HELD FLAMESPITTER, cr CAN, cr PUMP] blowTorch - , po [HELD FLAMESPITTER, cr DRUM] flameThrower - , po [HELD FLAMETHROWER, cr DRUM] flameWall + , po [HELD FLAMESPITTER, cr STEELDRUM] flameThrower + , po [HELD FLAMETHROWER, cr STEELDRUM] flameWall , po [HELD FLAMETHROWER, cr PUMP] flameTorrent , p [o $ cr PRISM, o $ cr TRANSFORMER, o $ cr PIPE] lasGun , po [HELD LASGUN, HELD LASGUN, cr HARDWARE] dualBeam @@ -65,10 +75,10 @@ itemCombinations = , p [p 2 $ cr PIPE, o $ cr PLATE, o $ cr MOTOR] powerLegs , p [p 4 $ cr CAN] plateCraft , p [p 3 $ cr TIN] plateCraft - , p [p 2 $ cr DRUM] plateCraft + , p [p 2 $ cr STEELDRUM] plateCraft , p [p 2 $ cr PLATE] flatShield , po [cr MICROCHIP, cr PRISM] (makeTypeCraft LIGHTSENSOR) - , po [cr MICROCHIP, cr MAGNET] (makeTypeCraft SOUNDSENSOR) + , po [cr MICROCHIP, cr MICROPHONE] (makeTypeCraft SOUNDSENSOR) , po [cr MICROCHIP, cr THERMOMETER] (makeTypeCraft HEATSENSOR) , po [cr MICROCHIP, cr TRANSMITTER, cr LIGHTSENSOR] (autoDetector ITEMDETECTOR) , po [cr MICROCHIP, cr TRANSMITTER, cr SOUNDSENSOR] (autoDetector WALLDETECTOR) @@ -83,7 +93,7 @@ itemCombinations = ++ map (\i -> po [hd (REVOLVERX i), cr CAN] $ revolverX (i + 1)) [1 .. 5] ++ map (\i -> po [hd (VOLLEYGUN i), HELD (BANGSTICK 1)] $ volleyGun (i + 1)) [3 .. 5] ++ map (\i -> po [hd (MINIGUNX i), HELD (BANGSTICK 1)] $ miniGunX (i + 1)) [3 .. 15] - ++ map (\i -> po [hd (GRAPECANNON i), cr DRUM] $ grapeCannon (i + 1)) [1, 2, 3] + ++ map (\i -> po [hd (GRAPECANNON i), cr STEELDRUM] $ grapeCannon (i + 1)) [1, 2, 3] ++ [ po (_iyBase (_itType it) : mtype) $ it & itType . iyModules . ix modtype .~ m | (modtype, is, ms) <- moduleCombinations , it <- is @@ -110,7 +120,7 @@ moduleCombinations = , burstRifle ] , - [ amod [cr DRUM, cr HARDWARE] DRUMMAG + [ amod [cr STEELDRUM, cr HARDWARE] DRUMMAG , amod [cr MOTOR, cr HARDWARE] BELTMAG ] ) @@ -122,7 +132,7 @@ moduleCombinations = , burstRifle ] , - [ amod [cr DUCTTAPE, HELD TORCH] ATTACHTORCH + [ amod [cr TAPE, HELD TORCH] ATTACHTORCH ] ) , diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 7e4822407..569a77d8f 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -157,7 +157,7 @@ inventoryX c = case c of , makeTypeCraftNum 1 SPRING , makeTypeCraftNum 1 PLANK , makeTypeCraftNum 1 PLATE - , makeTypeCraftNum 1 DRUM + , makeTypeCraftNum 1 STEELDRUM , makeTypeCraftNum 1 MOTOR ] 'F' -> @@ -171,7 +171,7 @@ inventoryX c = case c of , makeTypeCraftNum 5 MAGNET , makeTypeCraftNum 5 PLANK , makeTypeCraftNum 5 PLATE - , makeTypeCraftNum 5 DRUM + , makeTypeCraftNum 5 STEELDRUM , makeTypeCraftNum 5 MOTOR , makeTypeCraftNum 5 TRANSFORMER , makeTypeCraftNum 5 PRISM diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 989315ef0..fd4b737ea 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -29,17 +29,20 @@ data CraftType | TUBE | HARDWARE | SPRING - | DUCTTAPE + + | HOSE + | TAPE + | CAN | TIN - | DRUM + | STEELDRUM | PLANK - | SHARDGLASS + | GLASSSHARD + | SCRAPMETAL | PUMP | MOTOR | TRANSFORMER | PRISM - | THERMOMETER | LIGHTER | MAGNET | ANTIMATTER @@ -57,6 +60,8 @@ data CraftType | LIGHTSENSOR | SOUNDSENSOR | HEATSENSOR + | MICROPHONE + | THERMOMETER | CREATURESENSOR | WIRE | BATTERY @@ -106,6 +111,7 @@ data EquipItemType | JUMPLEGS | JETPACK + | FUELPACK | AUTODETECTOR Detector deriving (Eq,Ord,Show,Read) diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index 2c1a4a362..ffdee08e2 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -43,6 +43,7 @@ itemFromEquipType et = case et of SPEEDLEGS -> speedLegs JUMPLEGS -> jumpLegs JETPACK -> jetPack + FUELPACK -> fuelPack AUTODETECTOR d -> autoDetector d itemFromLeftType :: LeftItemType -> Item diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index f48d15a2c..714fc98fd 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -43,7 +43,12 @@ equipItemSPic et _ = case et of JETPACK -> (,) emptySH $ setDepth 20 $ - pictures [color yellow $ polygon $ reverse $ rectNSWE 5 (-5) (-11) (-3)] + pictures [color yellow $ polygon $ reverse $ rectNSWE 5 (-5) (-4) (-4)] + FUELPACK -> + (,) emptySH $ + setDepth 20 $ + --pictures [color yellow $ polygon $ reverse $ rectNSWE 5 (-5) (-11) (-3)] + pictures [color yellow $ polygon $ reverse $ polyCirc 3 5] AUTODETECTOR dt -> noPic (colorSH (detectorColor dt) $ upperPrismPoly 3 $ rectWH 2 2) leftItemSPic :: LeftItemType -> Item -> SPic diff --git a/src/Dodge/Item/Equipment.hs b/src/Dodge/Item/Equipment.hs index 8c1080718..a094e8ecd 100644 --- a/src/Dodge/Item/Equipment.hs +++ b/src/Dodge/Item/Equipment.hs @@ -9,6 +9,7 @@ module Dodge.Item.Equipment ( frontArmour, headLamp, jetPack, + fuelPack, speedLegs, jumpLegs, flameShield, @@ -49,6 +50,11 @@ wristArmour = & itUse . equipEffect . eeOnRemove .~ EoffWristShield & itType . iyBase .~ EQUIP WRISTARMOUR +fuelPack :: Item +fuelPack = + defaultEquipment + & itUse . equipEffect . eeSite .~ GoesOnBack + & itType . iyBase .~ EQUIP FUELPACK jetPack :: Item jetPack = diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 4f3055599..54c28cfd2 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -1,12 +1,237 @@ module Dodge.Item.Info where import Dodge.Data.Item +import qualified Data.Map.Strict as M +import LensHelp -itmBaseInfo :: ItemBaseType -> String -itmBaseInfo t = case t of - HELD _ -> "THIS ITEM CAN BE HELD." - LEFT _ -> "THIS ITEM CAN BE EQUIPPED. WHEN EQUIPPED, IT CAN BE ACTIVATED." - EQUIP _ -> "THIS ITEM CAN BE EQUIPPED." - Consumable _ -> "THIS ITEM CAN BE CONSUMED." - CRAFT _ -> "THIS ITEM SEEMS USELESS ON ITS OWN." +itmInfo :: Item -> String +itmInfo itm = itmBaseInfo itm ++ " " ++ itmUsageInfo itm + +itmBaseInfo :: Item -> String +itmBaseInfo itm = case (itm ^. itType . iyBase) of + HELD hit -> heldInfo hit + LEFT lit -> leftInfo lit + EQUIP eit -> equipInfo eit + Consumable cit -> consumableInfo cit + CRAFT fit -> craftInfo fit _ -> "THIS SHOULD NOT BE DISPLAYED" + +showInt :: Int -> String +showInt i = case i of + 0 -> "ZERO" + 1 -> "ONE" + 2 -> "TWO" + 3 -> "THREE" + 4 -> "FOUR" + 5 -> "FIVE" + 6 -> "SIX" + 7 -> "SEVEN" + 8 -> "EIGHT" + 9 -> "NINE" + 10 -> "TEN" + 11 -> "ELEVEN" + 12 -> "A DOZEN" + _ -> "MANY" + +heldInfo :: HeldItemType -> String +heldInfo hit = case hit of + BANGSTICK 1 -> "A MAKESHIFT FIREARM WITH A SHORT BARREL THAT REQUIRES RELOADING AFTER EACH SHOT." + BANGSTICK i -> showInt i++" SMALL GUN BARRELS STRAPPED TOGETHER. EACH BARREL MUST BE INDIVIDUALLY LOADED, BUT NOT ALL NEED BE LOADED FOR THE WEAPON TO FIRE. ALL LOADED BARRELS DISCHARGE SIMULATNEOUSLY, WITH SIGNIFICANT SPREAD." + PISTOL -> "A SMALL FIREARM FED BY A MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + REVOLVER -> "A SMALL FIREARM FED BY A REVOLVING CYLINDER. SINGLE SHOT AND LOAD." + REVOLVERX i -> "A SMALL FIREARM FED BY "++ showInt i++ "REVOLVING CYLINDERS." + MACHINEPISTOL -> "A SMALL FIREARM AUTOMATICALLY, AND EXTREMELY RAPIDLY, FED BY A MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + AUTOPISTOL -> "A SMALL FIREARM AUTOMATICALLY FED BY A MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + SMG -> "A SMALL FIREARM WITH AN ATTACHED STOCK FOR STABILITY." + BANGCONE -> "A CONTAINER FOR DEBRIS. EXPOSIVE ACTION PROPELS THE DEBRIS AWAY FROM THE USER. QUITE UNWEILDY." + BLUNDERBUSS -> "A CONTAINER FOR DEBRIS ON THE END OF A STICK. EXPLOSIVE ACTION PROPELS THE DEBRIS AWAY FROM THE USER." + GRAPECANNON 1 -> "A LARGE CONTAINER FOR DEBRIS ON THE END OF A STICK. EXPLOSIVE ACTION PROPELS THE DEBRIS AWAY FROM THE USER." + GRAPECANNON i -> "AN "++ replicate (i-1) 'X' ++"L CONTAINER FOR DEBRIS ON THE END OF A STICK. EXPLOSIVE ACTION PROPELS THE DEBRIS AWAY FROM THE USER." + MINIGUNX i -> showInt i ++ " GUN BARRELS THAT REVOLVE RAPIDLY AROUND A CENTRAL STICK. REQUIRES CONSIDERABLE TIME TO WARM UP, BUT HAS AN EXTREMELY RAPID RATE OF FIRE. IT IS ALSO EXTREMELY DIFFICULT TO STABILISE." + VOLLEYGUN i -> showInt i ++ " GUN BARRELS LINED UP TO BE ROUGHLY PARALLEL. EACH BARREL MUST BE INDIVIDUALLY LOADED, BUT NOT ALL NEED BE LOADED FOR THE WEAPON TO FIRE. ALL LOADED BARRELS DISCHARGE SIMULTANEOUSLY." + RIFLE -> "A MAKESHIFT FIREARM WITH A MID LENGTH BARREL THAT REQUIRES RELOADING AFTER EACH SHOT." + REPEATER -> "A FIREARM FED BY A MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + AUTORIFLE -> "A FIREARM AUTOMATICALLY FED BY A MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + BURSTRIFLE -> "A FIREARM THAT RAPIDLY FIRES THREE PROJECTILES FROM ITS MAKESHIFT MAGAZINE. THE ENTIRE MAGAZINE MUST BE REPLACED WHEN RELOADING THE WEAPON." + BANGROD -> "A FIREARM WITH A LONG BARREL THAT REQUIRES RELOADING AFTER EACH SHOT." + ELEPHANTGUN -> "A FIREARM WITH A LONG BARREL THAT REQUIRES RELOADING AFTER EACH SHOT. ITS STOPPING POWER IS ONLY NOMINAL." + AMR -> "A MAKESHIFT ANTIMATERIEL RIFLE, DESIGNED TO DISABLE MILITARY EQUIPMENT. ITS LONG BARREL IS FED BY A MAKESHIFT MAGAZINE THAT MUST BE REPLACED WHEN RELOADING THE WEAPON." + AUTOAMR -> "A MAKESHIFT AUTOMATIC ANTIMATERIEL RIFLE, DESIGNED TO DISABLE MILITARY EQUIPMENT. ITS LONG BARREL IS FED BY A MAKESHIFT MAGAZINE THAT MUST BE REPLACED WHEN RELOADING THE WEAPON." + SNIPERRIFLE -> "A FIREARM DESIGNED WITH LONG RANGE CAPABILITY IN MIND. ITS LONG BARREL REQUIRES RELOADING AFTER EACH SHOT." + MACHINEGUN -> "A HEAVY FIREARM WHOSE RATE OF FIRE INCREASES DURING A BARRAGE." + FLAMESPITTER -> "A WEAPON THAT SQUIRTS OUT GLOBULES OF BURNING FUEL." + FLAMETHROWER -> "A WEAPON THAT SQUIRTS OUT BURNING FUEL." + FLAMETORRENT -> "A WEAPON THAT STREAMS OUT BURNING FUEL IN A TORRENT." + FLAMEWALL -> "A WEAPON THAT SQUIRTS OUT BURNING FUEL ALL AROUND THE USER." + BLOWTORCH -> "A WEAPON THAT PRODUCES A CONCENTRATED FLAME." + SPARKGUN -> "A WEAPON THAT PRODUCES AN ARC OF ELECTRICITY. THE ARC WILL ATTEMPT TO DISCHARGE AT A NEARBY OBJECT." + TESLAGUN -> "A WEAPON THAT DISCHARGES A SUSTAINED ARC OF ELECTRICITY. THE ARC WILL ATTEMPT TO DISCHARGE AT A NEARBY OBJECT." + LASGUN -> "A WEAPON THAT CONTINUOUSLY EMITS PHOTONS IN A NARROW BEAM." + LASCIRCLE -> "A EXTENSIVE CONFIGURATION OF PRISMS AND MIRRORS THAT PRODUCES MULTIPLE LASER BEAMS AROUND ITS USER." + DUALBEAM -> "A WEAPON THAT EMITS TWO BEAMS THAT CONVERGE AT A SELECTABLE POINT IN FRONT OF THE USER." + LASWIDE _ -> "A WEAPON THAT CONTINUOUSLY EMITS PHOTONS IN A NARROW BEAM. THE BEAM EXPANDS AS THE WEAPON HEATS UP." + TRACTORGUN -> "AN ITEM THAT PRODUCES A BEAM OF GRAVITONS." + LAUNCHER -> "A LARGE TUBE THAT CAN LAUNCH SELF PROPELLED PROJECTILES. MOVING THE TUBE AFTER LAUNCH WILL CAUSE THE PROJECTILE TO SPIN." + LAUNCHERX i -> showInt i++" TUBES THAT CAN LAUNCH SELF PROPELLED PROJECTILES. TUBES THAT DO NOT FACE FORWARD LAUNCH THEIR PROJECITLES AT AN ANGLE." + REMOTELAUNCHER -> "A LARGE TUBE THAT CAN LAUNCH SELF PROPELLED PROJECTILES. CONTAINS A TRANSMITTER ALLOWING FOR REMOTE CONTROL OF LAUNCHED PROJECTILES." + POISONSPRAYER -> "A WEAPON THAT RELEASES NOXIOUS GASES." + DRONELAUNCHER -> "A DEVICE FOR LAUNCHING DRONES." + SHATTERGUN -> "A SEISMIC DEVICE THAT SHATTERS HARD ITEMS IN ITS LINE OF FIRE." + FORCEFIELDGUN -> "A DEVICE THAT PRODUCES A DURABLE FORCEFIELD." + HELDDETECTOR d -> "A DEVICE THAT DETECTS "++detectorInfo d ++" IN AN EXPANDING RADIUS." + TORCH -> "A STICK WITH A LIGHT ON THE END." + FLATSHIELD -> "A PANEL OF METAL THAT BLOCKS UNWANTED OBJECTS FROM THE FRONT OF THE USER." + KEYCARD i -> "A KEYCARD. IT IS LABELLED " ++ show i++ "." + +leftInfo :: LeftItemType -> String +leftInfo lit = case lit of + BOOSTER -> "A DEVICE THAT ALLOWS TRAVEL AT SPEED." + STOPWATCH -> "A DEVICE THAT TEMPORARILY PAUSES TIME." + REWINDWATCH -> "A DEVICE THAT REWINDS TIME A SHORT AMOUNT." + SCROLLWATCH -> "A DEVICE THAT CAN BE USED TO SCROLL THROUGH RECENT EVENTS." + BLINKER -> "A DEVICE THAT ALLOWS LOCAL TELEPORTATION." + BLINKERUNSAFE -> "A DEVICE THAT ALLOWS LOCAL TELEPORTATION. POTENTIALLY HAZARDOUS AROUND WALLS." + SHRINKER -> "A DEVICE THAT SHRINKS THE USER." + SPAWNER -> "A DEVICE THAT SPAWNS CREATURES." + +equipInfo :: EquipItemType -> String +equipInfo eit = case eit of + MAGSHIELD -> "A DEVICE DESIGNED TO REPULSE NEARBY METALLIC OBJECTS." + FLAMESHIELD -> "A DEVICE DESIGNED TO REPULSE NEARBY FLAMES." + FRONTARMOUR -> "A DEVICE DESIGNED TO SHIELD FROM THE FRONT." + WRISTARMOUR -> "A DEVICE THAT PROJECTS A FORCEFIELD." + INVISIBILITYEQUIPMENT _ -> "A DEVICE THAT BENDS LIGHT AROUND ITS USER." + BRAINHAT -> "AN IQ ENHANCER. USELESS." + HAT -> "A HAT" + HEADLAMP -> "A TORCH STRAPPED TO A HAT." + POWERLEGS -> "STRENGTH ENHANCING LEGS." + SPEEDLEGS -> "SPEED ENHANCING LEGS." + JUMPLEGS -> "JUMP ENHANCING LEGS." + + JETPACK -> "A DEVICE ENABLING FLIGHT." + FUELPACK -> "A LIQUID CONTAINER WITH ATTACHED HOSE." + + AUTODETECTOR d -> "A DEVICE THAT DETECTS "++detectorInfo d ++" IN AN EXPANDING RADIUS. PULSES AUTOMATICALLY. " + +consumableInfo :: ConsumableItemType -> String +consumableInfo cit = case cit of + MEDKIT _ -> "A SELF-USE HEALING KIT." + EXPLOSIVES -> "EXPLOSIVES." + +craftInfo :: CraftType -> String +craftInfo fit = case fit of + PIPE -> "A RIGID CYLINDER." + TUBE -> "A WIDE RIGID CYLINDER." + HARDWARE -> "A COLLECTION OF EQUIPMENT AND DEVICES USEFUL FOR GENERAL CONSTRUCTION." + SPRING -> "AN OBJECT THAT EXERTS AN OPPOSING FORCE WHEN COMPRESSED OR STRETCHED." + + HOSE -> "A FLEXIBLE CYLINDER." + TAPE -> "A STRIP OF MATERIAL WITH AN ADHESIVE SIDE." + + CAN -> "A SMALL METAL CYLINDRICAL CONTAINER." + TIN -> "A SMALL METAL CONTINER." + STEELDRUM -> "A METAL CYLINDRICAL CONTAINER." + PLANK -> "A STURDY PIECE OF WOOD." + GLASSSHARD -> "A BROKEN PIECE OF GLASS." + SCRAPMETAL -> "A BROKEN PIECE OF METAL." + PUMP -> "A DEVICE THAT CAN CREATE PRESSURE." + MOTOR -> "A DEVICE THAT CAN CREATE ROTATIONAL FORCE." + TRANSFORMER -> "A DEVICE THAT CAN STEP UP OR DOWN VOLTAGE AND CURRENT." + PRISM -> "AN OBJECT THAT REFRACTS LIGHT." + THERMOMETER -> "AN OBJECT THAT MEASURES TEMPERATURE." + LIGHTER -> "A DEVICE THAT CAN CREATE A SMALL FLAME." + MAGNET -> "A DEVICE THAT ATTRACTS ACCORDING TO ITS DIPOLES." + ANTIMATTER -> "A COLLECTION OF MATERIAL WITH INVERSE QUANTUM VALUES." + PLATE -> "A FLAT RIGID SHEET." + TRANSMITTER -> "A DEVICE THAT CAN EMIT RADIO SIGNALS." + MICROCHIP -> "A MINITURIZED COLLECTION OF ELECTRONIC CIRCUITS." + HARDDRIVE -> "A DEVICE DESIGNED TO STORE DATA WHEN UNPOWERED." + RAM -> "A DEVICE THAT CAN STORE DATA WHEN POWERED." + AIUNIT -> "A GENERAL PURPOSE ARTIFICIAL INTELLIGENCE UNIT." + CAMERA -> "A DEVICE DESIGNED TO CAPTURE LIGHT SIGNALS." + MINIDISPLAY -> "A DEVICE DESIGNED TO DISPLAY PICTURES." + LED -> "A LIGHT EMITTING DIODE." + NAILBOX -> "A BOX OF WOOD FASTENINGS." + IRONBAR -> "A RIGID PIECE OF METAL." + LIGHTSENSOR -> "A DEVICE THAT DETECTS PHOTONS." + HEATSENSOR -> "AN OBJECT THAT DETECTS TEMPERATURE." + SOUNDSENSOR -> "A DEVICE THAT DETECTS AIR VIBRATION." + MICROPHONE -> "A DEVICE THAT MEASURES AIR VIBRATION." + CREATURESENSOR -> "A DEVICE FOR DETECTING LIVING BEINGS." + WIRE -> "A SMALL THIN OBJECT THAT CONDUCTS ELECTRICITY." + 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." + 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." + 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." + GRAVITYMODULE -> "A DEVICE THAT CAN AFFECT GRAVITATIONAL FIELDS." + + +detectorInfo :: Detector -> String +detectorInfo d = case d of + ITEMDETECTOR -> "ITEMS" + CREATUREDETECTOR -> "CREATURES" + WALLDETECTOR -> "WALLS" + +itmUsageInfo :: Item -> String +itmUsageInfo itm = case (itm ^. itType . iyBase) of + HELD _ -> heldPositionInfo itm + LEFT _ -> "THIS ITEM CAN BE EQUIPPED" ++ itmEquipSiteInfo itm + ++ ". WHEN EQUIPPED, IT CAN BE ACTIVATED." + EQUIP _ -> "THIS ITEM CAN BE EQUIPPED " ++ itmEquipSiteInfo itm ++ "." + Consumable _ -> "THIS ITEM CAN BE CONSUMED." + CRAFT _ -> "" + _ -> "THIS SHOULD NOT BE DISPLAYED" + +heldPositionInfo :: Item -> String +heldPositionInfo itm = case itm ^? itUse . heldAim . aimStance of + Nothing -> undefined + Just as -> aimStanceInfo as + +aimStanceInfo :: AimStance -> String +aimStanceInfo as = case as of + TwoHandTwist -> "IT IS HELD IN TWO HANDS ALONG ITS LENGTH." + TwoHandFlat -> "IT IS HELD IN TWO HANDS AT ITS SIDES." + OneHand -> "IT IS HELD IN ONE HAND." + LeaveHolstered -> "IT IS TO BE LEFT HOLSTERED." + +itmEquipSiteInfo :: Item -> String +itmEquipSiteInfo itm = case itm ^? itUse . equipEffect . eeSite of + Nothing -> "" + Just es -> equipSiteInfo es + +equipSiteInfo :: EquipSite -> String +equipSiteInfo es = case es of + GoesOnHead -> " ON THE HEAD" + GoesOnChest -> " ON THE CHEST" + 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 = "IT CANNOT BE MODIFIED WITHOUT CHANGING ITS FORM ENTIRELY." + | otherwise = "IT CAN BE MODIFIED " + +moduleInfo :: ModuleSlot -> String +moduleInfo imt = case imt of + ModBullet -> "WITH A NEW BULLET TYPE" + ModBulletSpawn -> "TO CHANGE ITS BULLET PAYLOAD" + ModRifleMag -> "TO CHANGE ITS MAGAZINE" + ModAutoMag -> "TO CHANGE ITS MAGAZINE" + ModTarget -> "BY ADDING A TARGETING SYSTEM" + ModBulletTrajectory -> "TO CHANGE THE TRAJECTORY OF FIRED BULLETS" + ModLauncherHoming -> "TO CHANGE ITS HOMING SYSTEM" + ModBattery -> "TO CHANGE ITS BATTERY SYSTEM" + ModTeleport -> "TO CHANGE ITS TELEPORT SYSTEM" + ModDualBeam -> "TO CHANGE ITS DUAL BEAMS" + ModHeldAttach -> "BY ADDING AN ATTACHEMENT" diff --git a/src/Dodge/LockAndKey.hs b/src/Dodge/LockAndKey.hs index 5ca8fd77c..32bb38872 100644 --- a/src/Dodge/LockAndKey.hs +++ b/src/Dodge/LockAndKey.hs @@ -82,7 +82,7 @@ itemRooms = , join $ takeOne [ rc $ map makeTypeCraft [PLATE, PLATE] - , rc $ map makeTypeCraft [DRUM, DRUM, PLATE] + , rc $ map makeTypeCraft [STEELDRUM, STEELDRUM, PLATE] ] ) , diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 10f972e09..6f2c50e1a 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -3,6 +3,7 @@ module Dodge.Render.HUD ( drawHUD, ) where +import Justify import Control.Lens import qualified Data.Map.Strict as M import Data.Maybe @@ -90,7 +91,7 @@ drawSubInventory subinv cfig w = case subinv of ExamineInventory mtweaki -> titledSub "EXAMINE" - (defaultSubInvSelectionList & slItems .~ ammoTweakSelectionItems itm) + (defaultSubInvSelectionList & slItems .~ ammoTweakSelectionItems itm ++ map f (mitmInfo itm)) <> examineInventoryExtra mtweaki itm cfig DisplayTerminal tid -> displayTerminal tid cfig (w ^. cWorld . lWorld) CombineInventory mi -> @@ -103,6 +104,16 @@ drawSubInventory subinv cfig w = case subinv of invHead cfig subtitle <> drawSelectionList secondColumnParams cfig subitems itm = yourItem w + f str = + SelectionItem + { _siPictures = [text str] + , _siHeight = 1 + , _siIsSelectable = True + , _siWidth = length str + , _siColor = white + , _siOffX = 0 + , _siPayload = () + } drawNoSubInventory :: Configuration -> World -> Picture drawNoSubInventory cfig w = @@ -139,7 +150,7 @@ examineInventoryExtra mtweaki mitm cfig = -- consider moving this functionality out into a tweaks module tparam <- mitm ^? _Just . itTweaks . tweakParams . ix tweaki return $ listCursorNSW subInvX 60 cfig tweaki white (length $ showTweak tparam) 15 - , drawSelectionList thirdColumnParams cfig (thirdColumnPara (itmInfo mitm)) +-- , drawSelectionList thirdColumnParams cfig (thirdColumnPara (itmInfo mitm)) ] combineInventoryExtra :: Maybe Int -> Configuration -> World -> Picture @@ -170,32 +181,28 @@ secondColumnParams = & ldpPosY .~ 60 & ldpCursorType .~ BorderCursor [North, South, West] -thirdColumnParams :: ListDisplayParams -thirdColumnParams = - defaultListDisplayParams - & ldpPosX .~ 9 * fromIntegral topInvW + 275 - & ldpPosY .~ 60 +--thirdColumnParams :: ListDisplayParams +--thirdColumnParams = +-- defaultListDisplayParams +-- & ldpPosX .~ 9 * fromIntegral topInvW + 275 +-- & ldpPosY .~ 60 -thirdColumnPara :: [String] -> SelectionList () -thirdColumnPara strs = SelectionList (map f strs) Nothing (length strs) - where - f str = - SelectionItem - { _siPictures = [text str] - , _siHeight = 1 - , _siIsSelectable = True - , _siWidth = length str - , _siColor = white - , _siOffX = 0 - , _siPayload = () - } +--thirdColumnPara :: [String] -> SelectionList () +--thirdColumnPara strs = SelectionList (map f strs) Nothing (length strs) +-- where +-- f str = +-- SelectionItem +-- { _siPictures = [text str] +-- , _siHeight = 1 +-- , _siIsSelectable = True +-- , _siWidth = length str +-- , _siColor = white +-- , _siOffX = 0 +-- , _siPayload = () +-- } -itmInfo :: Maybe Item -> [String] -itmInfo mit = fromMaybe [] $ do - itm <- mit - return $ - itmBaseInfo (itm ^. itType . iyBase) : - (map show . M.assocs . _iyModules $ _itType itm) +mitmInfo :: Maybe Item -> [String] +mitmInfo = maybe [] $ makeParagraph 60 . itmInfo displayTerminal :: Int -> Configuration -> LWorld -> Picture displayTerminal tid cfig w = fromMaybe mempty $ do diff --git a/src/Dodge/Room/Breather.hs b/src/Dodge/Room/Breather.hs index 8c7c0b9a5..57f29c5ed 100644 --- a/src/Dodge/Room/Breather.hs +++ b/src/Dodge/Room/Breather.hs @@ -16,6 +16,6 @@ firstBreather = do , [itemFromBase $ CRAFT CAN] , [itemFromBase $ CRAFT TIN] , [itemFromBase $ CRAFT PLANK] - , [itemFromBase $ CRAFT DRUM] + , [itemFromBase $ CRAFT STEELDRUM] ] roomsContaining [] itms