diff --git a/src/Dodge/Combine/Combinations.hs b/src/Dodge/Combine/Combinations.hs index 843ecf451..052087183 100644 --- a/src/Dodge/Combine/Combinations.hs +++ b/src/Dodge/Combine/Combinations.hs @@ -156,7 +156,7 @@ moduleCombinations = ] ) , - ( ModBullet + ( ModBulletCollision , bulletWeapons , [ amod [cr BOUNCEMODULE] BOUNCEBUL @@ -164,7 +164,7 @@ moduleCombinations = ] ) , - ( ModBulletSpawn + ( ModBulletPayload , bulletWeapons , [ amod [cr INCENDIARYMODULE] INCENDBUL diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index 60d524079..20e1eba2f 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -13,7 +13,7 @@ aimingWeaponHandlePos cr it = case it ^? itUse . heldAim . aimStance of Just TwoHandTwist -> -5 Just OneHand -> 14 Just TwoHandFlat -> 1.2 * _crRad cr - Just LeaveHolstered -> 0 +-- Just LeaveHolstered -> 0 Nothing -> 0 aimingWeaponZeroPos :: Creature -> Item -> Float diff --git a/src/Dodge/Creature/Info.hs b/src/Dodge/Creature/Info.hs index 7050e0d8a..0566d659b 100644 --- a/src/Dodge/Creature/Info.hs +++ b/src/Dodge/Creature/Info.hs @@ -1,7 +1,36 @@ -module Dodge.Creature.Info where +module Dodge.Creature.Info ( + yourInfo, +) where import Dodge.Data.Creature import LensHelp yourInfo :: Creature -> String -yourInfo cr = "You can carry a maximum of " ++ show (cr ^. crInvCapacity) ++ " individual items. " +yourInfo cr = + yourStatsInfo cr + ++ " You can carry a maximum of " ++ show (cr ^. crInvCapacity) ++ " individual items. " + ++ " You can't remember your name." + +statsModifier :: Int -> String -> String -> String -> String +statsModifier x s1 s2 s3 + | x < 15 = "extremely " ++ s1 + | x < 30 = "very " ++ s1 + | x < 45 = "quite " ++ s1 + | x < 55 = "of average " ++ s2 + | x < 70 = "quite " ++ s3 + | x < 85 = "very " ++ s3 + | x < 100 = "extremely " ++ s3 + | otherwise = "super-humanly " ++ s3 + +yourStatsInfo :: Creature -> String +yourStatsInfo cr = + "You are " ++ statsModifier str "weak" "strength" "strong" ++ conj + ++ statsModifier dex "clumsy." "dexterity." "dexterous." + where + str = cr ^. crStatistics . strength + dex = cr ^. crStatistics . dexterity + conj + | (str < 45 && dex < 45) || (str > 55 && dex > 55) || (mid str && mid dex) = + " and " + | otherwise = " but " + mid x = x > 45 && x < 55 diff --git a/src/Dodge/Data/Item/Combine.hs b/src/Dodge/Data/Item/Combine.hs index 5be3b480e..014cc5363 100644 --- a/src/Dodge/Data/Item/Combine.hs +++ b/src/Dodge/Data/Item/Combine.hs @@ -211,8 +211,8 @@ data Detector deriving (Eq, Ord, Show, Read) --Generic, Flat) data ModuleSlot - = ModBullet - | ModBulletSpawn + = ModBulletCollision + | ModBulletPayload | ModRifleMag | ModAutoMag | ModTarget diff --git a/src/Dodge/Data/Item/Use.hs b/src/Dodge/Data/Item/Use.hs index e27f1d661..416683afa 100644 --- a/src/Dodge/Data/Item/Use.hs +++ b/src/Dodge/Data/Item/Use.hs @@ -70,7 +70,7 @@ data AimStance = TwoHandTwist | TwoHandFlat | OneHand - | LeaveHolstered +-- | LeaveHolstered deriving (Eq) --deriving (Eq, Show, Ord, Enum, Read) --Generic, Flat) diff --git a/src/Dodge/Default/Item.hs b/src/Dodge/Default/Item.hs index ff4a098ef..7bc751c73 100644 --- a/src/Dodge/Default/Item.hs +++ b/src/Dodge/Default/Item.hs @@ -64,8 +64,8 @@ defaultBulletWeapon = defaultWeapon & itUse . heldConsumption .~ defaultBulletLoadable & itUse . heldUse .~ HeldUseAmmoParams -- useAmmoParams - & itType . iyModules . at ModBullet ?~ EMPTYMODULE - & itType . iyModules . at ModBulletSpawn ?~ EMPTYMODULE + & itType . iyModules . at ModBulletCollision ?~ EMPTYMODULE + & itType . iyModules . at ModBulletPayload ?~ EMPTYMODULE & itType . iyModules . at ModBulletTrajectory ?~ EMPTYMODULE defaultWeapon :: Item diff --git a/src/Dodge/Item/Info.hs b/src/Dodge/Item/Info.hs index 63064c819..00e2c99b0 100644 --- a/src/Dodge/Item/Info.hs +++ b/src/Dodge/Item/Info.hs @@ -93,35 +93,35 @@ heldInfo hit = case hit of 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." + 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" + 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." TARGETINGHAT tt -> "Headwear that "++ targetingInfo tt - HEADLAMP -> "A TORCH STRAPPED TO A HAT." - POWERLEGS -> "STRENGTH ENHANCING LEGS." - SPEEDLEGS -> "SPEED ENHANCING LEGS." - JUMPLEGS -> "JUMP ENHANCING LEGS." + 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." - BATTERYPACK -> "A COLLECTION OF BATTERIES WITH A UNIVERSAL ADAPTER." + JETPACK -> "A device enabling flight." + FUELPACK -> "A liquid container with attached hose." + BATTERYPACK -> "A collection of batteries with a universal adapter." - AUTODETECTOR d -> "A DEVICE THAT DETECTS "++detectorInfo d ++" IN AN EXPANDING RADIUS. PULSES AUTOMATICALLY. " + AUTODETECTOR d -> "A device that detects "++detectorInfo d ++" in an expanding radius. Pulses automatically. " targetingInfo :: TargetType -> String targetingInfo tt = case tt of @@ -133,81 +133,81 @@ targetingInfo tt = case tt of consumableInfo :: ConsumableItemType -> String consumableInfo cit = case cit of - MEDKIT _ -> "A SELF-USE HEALING KIT." - EXPLOSIVES -> "EXPLOSIVES." + 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." + 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." + 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." + 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." - TARGETMODULE _ -> "A TARGETING MODULE." + TARGETMODULE _ -> "A targeting module." detectorInfo :: Detector -> String detectorInfo d = case d of - ITEMDETECTOR -> "ITEMS" - CREATUREDETECTOR -> "CREATURES" - WALLDETECTOR -> "WALLS" + 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." + 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" @@ -216,38 +216,38 @@ heldPositionInfo = maybe undefined aimStanceInfo . (^? itUse . heldAim . aimStan 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." + 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 = maybe "" equipSiteInfo . (^? itUse . equipEffect . eeSite) 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" + 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 " + | m == mempty = "" + | otherwise = "Modifications can be made " 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" + ModBulletCollision -> "that affect how fired bullets collide with objects" + ModBulletPayload -> "that change bullet payloads" + ModRifleMag -> "to the magazine" + ModAutoMag -> "to the magazine" + ModTarget -> "to add a targeting system" + ModBulletTrajectory -> "to 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" diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index b00a57656..6ad57ca8d 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}) -> "It is on the floor " ++ floorItemPickupInfo n itm ++ itemInfo itm - Right _ -> "It is some sort of switch or button." + Left (FlIt {_flIt = itm}) -> "On the floor" ++ floorItemPickupInfo n itm ++ itemInfo 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. " + | 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