diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 628afa0f5e9..7c2e3163fff 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -16,6 +16,13 @@ #define DIAG_MECH_HUD "11"// Mech health bar #define STATUS_HUD_OOC "12"// STATUS_HUD without virus db check for someone being ill. #define DIAG_BOT_HUD "13"// Bot HUDS +#define PLANT_NUTRIENT_HUD "15"// Plant nutrient level +#define PLANT_WATER_HUD "16"// Plant water level +#define PLANT_STATUS_HUD "17"// Plant harvest/dead +#define PLANT_HEALTH_HUD "18"// Plant health +#define PLANT_TOXIN_HUD "19"// Toxin level +#define PLANT_PEST_HUD "20"// Pest level +#define PLANT_WEED_HUD "21"// Weed level //for antag huds. these are used at the /mob level #define SPECIALROLE_HUD "13" @@ -28,16 +35,17 @@ #define DATA_HUD_MEDICAL_BASIC 3 #define DATA_HUD_MEDICAL_ADVANCED 4 #define DATA_HUD_DIAGNOSTIC 5 +#define DATA_HUD_HYDROPONIC 6 //NATIONS -#define GAME_HUD_NATIONS 6 +#define GAME_HUD_NATIONS 7 //antag HUD defines -#define ANTAG_HUD_CULT 7 -#define ANTAG_HUD_REV 8 -#define ANTAG_HUD_OPS 9 -#define ANTAG_HUD_WIZ 10 -#define ANTAG_HUD_SHADOW 11 -#define ANTAG_HUD_TRAITOR 12 -#define ANTAG_HUD_NINJA 13 //For Daves Rework -#define ANTAG_HUD_CHANGELING 14 -#define ANTAG_HUD_VAMPIRE 15 -#define ANTAG_HUD_ABDUCTOR 16 //For Fox +#define ANTAG_HUD_CULT 8 +#define ANTAG_HUD_REV 9 +#define ANTAG_HUD_OPS 10 +#define ANTAG_HUD_WIZ 11 +#define ANTAG_HUD_SHADOW 12 +#define ANTAG_HUD_TRAITOR 13 +#define ANTAG_HUD_NINJA 14 //For Daves Rework +#define ANTAG_HUD_CHANGELING 15 +#define ANTAG_HUD_VAMPIRE 16 +#define ANTAG_HUD_ABDUCTOR 17 //For Fox diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 28781979b77..c29b5daf5b3 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -6,7 +6,8 @@ var/datum/atom_hud/huds = list( \ DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \ DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ - DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), + DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \ + DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(), \ GAME_HUD_NATIONS = new/datum/atom_hud/antag(), \ ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ @@ -17,7 +18,7 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden()\ ) /datum/atom_hud diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 529b07ffdbb..13752088a18 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -46,6 +46,9 @@ /datum/atom_hud/data/diagnostic hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD) +/datum/atom_hud/data/hydroponic + hud_icons = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD) + /* MED/SEC/DIAG HUD HOOKS */ /* @@ -314,3 +317,81 @@ holder.icon_state = "hudmove" else holder.icon_state = "" + +/*~~~~~~~~~~~~~~ + PLANT HUD +~~~~~~~~~~~~~~~*/ +/proc/RoundPlantBar(value) + switch(value * 100) + if(1 to 10) + return "10" + if(10 to 20) + return "20" + if(20 to 30) + return "30" + if(30 to 40) + return "40" + if(40 to 50) + return "50" + if(50 to 60) + return "60" + if(60 to 70) + return "70" + if(70 to 80) + return "80" + if(80 to 90) + return "90" + if(90 to INFINITY) + return "max" + else + return "zero" + return "zero" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_nutrient() + var/image/holder = hud_list[PLANT_NUTRIENT_HUD] + holder.icon_state = "hudnutrient[RoundPlantBar(nutrilevel/maxnutri)]" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_water() + var/image/holder = hud_list[PLANT_WATER_HUD] + holder.icon_state = "hudwater[RoundPlantBar(waterlevel/maxwater)]" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_status() + var/image/holder = hud_list[PLANT_STATUS_HUD] + if(!seed) + holder.icon_state = "" + return + if(harvest) + holder.icon_state = "hudharvest" + return + if(dead) + holder.icon_state = "huddead" + return + holder.icon_state = "" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_health() + var/image/holder = hud_list[PLANT_HEALTH_HUD] + if(!seed) + holder.icon_state = "" + return + holder.icon_state = "hudplanthealth[RoundPlantBar(health/seed.get_trait(TRAIT_ENDURANCE))]" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_toxin() + var/image/holder = hud_list[PLANT_TOXIN_HUD] + if(toxins < 1) // You don't want to see these icons if the value is small + holder.icon_state = "" + return + holder.icon_state = "hudtoxin[RoundPlantBar(toxins/10)]" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_pest() + var/image/holder = hud_list[PLANT_PEST_HUD] + if(pestlevel < 1) // You don't want to see these icons if the value is small + holder.icon_state = "" + return + holder.icon_state = "hudpest[RoundPlantBar(pestlevel/10)]" + +/obj/machinery/portable_atmospherics/hydroponics/proc/plant_hud_set_weed() + var/image/holder = hud_list[PLANT_WEED_HUD] + if(weedlevel < 1) // You don't want to see these icons if the value is small + holder.icon_state = "" + return + holder.icon_state = "hudweed[RoundPlantBar(weedlevel/10)]" \ No newline at end of file diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 4c6fed0eec4..25a0833c304 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -114,4 +114,19 @@ prescription_upgradable = 1 /obj/item/clothing/glasses/hud/security/sunglasses/prescription - prescription = 1 \ No newline at end of file + prescription = 1 + +/obj/item/clothing/glasses/hud/hydroponic + name = "Hydroponic HUD" + desc = "A heads-up display capable of analyzing the health and status of plants growing in hydro trays and soil." + icon_state = "hydroponichud" + HUDType = DATA_HUD_HYDROPONIC + +/obj/item/clothing/glasses/hud/hydroponic/night + name = "Night Vision Hydroponic HUD" + desc = "A hydroponic HUD fitted with a light amplifier." + icon_state = "hydroponichudnight" + item_state = "glasses" + darkness_view = 8 + see_darkness = 0 + prescription_upgradable = 0 \ No newline at end of file diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 553251a2ee8..817f002f014 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -251,4 +251,4 @@ if(!user.put_in_active_hand(QB)) QB.forceMove(get_turf(src)) visible_message("[user] removes the queen from the apiary.") - queen_bee = null + queen_bee = null \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index b45fd4070fe..e9c63ed8794 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -7,6 +7,8 @@ flags = OPENCONTAINER volume = 100 + hud_possible = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD) + var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. var/base_name = "tray" @@ -73,10 +75,12 @@ if(weedlevel > 0) nymph.reagents.add_reagent("nutriment", weedlevel) weedlevel = 0 + plant_hud_set_weed() nymph.visible_message("[nymph] begins rooting through [src], ripping out weeds and eating them noisily.","You begin rooting through [src], ripping out weeds and eating them noisily.") else if(nymph.nutrition > 100 && nutrilevel < 10) nymph.nutrition -= ((10-nutrilevel)*5) nutrilevel = 10 + plant_hud_set_nutrient() nymph.visible_message("[nymph] secretes a trickle of green liquid, refilling [src].","You secrete a trickle of green liquid, refilling [src].") else nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.") @@ -85,6 +89,17 @@ /obj/machinery/portable_atmospherics/hydroponics/New() ..() + var/datum/atom_hud/data/hydroponic/hydro_hud = huds[DATA_HUD_HYDROPONIC] + prepare_huds() + hydro_hud.add_to_hud(src) + plant_hud_set_nutrient() + plant_hud_set_water() + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_toxin() + plant_hud_set_pest() + plant_hud_set_weed() + component_parts = list() component_parts += new /obj/item/weapon/circuitboard/hydroponics(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) @@ -101,6 +116,7 @@ if(closed_system) flags &= ~OPENCONTAINER + /obj/machinery/portable_atmospherics/hydroponics/upgraded/New() ..() component_parts = list() @@ -118,6 +134,8 @@ maxnutri = tmp_capacity * 5 // Up to 30 //waterlevel = maxwater //nutrilevel = 3 + plant_hud_set_nutrient() + plant_hud_set_water() /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) @@ -150,12 +168,18 @@ die() check_level_sanity() update_icon() + plant_hud_set_status() + plant_hud_set_health() /obj/machinery/portable_atmospherics/hydroponics/proc/die() dead = 1 harvest = 0 weedlevel += 1 * HYDRO_SPEED_MULTIPLIER pestlevel = 0 + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_weed() + plant_hud_set_pest() //Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) @@ -233,6 +257,9 @@ pestlevel = 0 sampled = 0 update_icon() + plant_hud_set_weed() + plant_hud_set_status() + plant_hud_set_health() visible_message("[src] has been overtaken by [seed.display_name].") return @@ -391,6 +418,14 @@ toxins = max(0,min(toxins,10)) yield_mod = min(100, yield_mod) + plant_hud_set_nutrient() + plant_hud_set_water() + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_toxin() + plant_hud_set_pest() + plant_hud_set_weed() + /obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species() var/previous_plant = seed.display_name @@ -409,6 +444,9 @@ harvest = 0 weedlevel = 0 + plant_hud_set_health() + plant_hud_set_weed() + update_icon() visible_message("\red The \blue [previous_plant] \red has suddenly mutated into \blue [seed.display_name]!") @@ -585,6 +623,7 @@ user.visible_message("[user] starts uprooting the weeds.", "You remove the weeds from the [src].") weedlevel = 0 update_icon() + plant_hud_set_weed() else to_chat(user, "This plot is completely devoid of weeds. It doesn't need uprooting.") diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index d272e49f0c8..03568731dc5 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -21,6 +21,7 @@ // Bonus chance if the tray is unoccupied. if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 6 : 3)) weedlevel += 1 * HYDRO_SPEED_MULTIPLIER + plant_hud_set_weed() // There's a chance for a weed explosion to happen if the weeds take over. // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. @@ -48,8 +49,10 @@ // Maintain tray nutrient and water levels. if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + plant_hud_set_nutrient() if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 0 && waterlevel > 0 && prob(25)) waterlevel -= max(0,seed.get_trait(TRAIT_WATER_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + plant_hud_set_water() // Make sure the plant is not starving or thirsty. Adequate // water and nutrients will cause a plant to become healthier. @@ -91,6 +94,7 @@ if(toxins > seed.get_trait(TRAIT_TOXINS_TOLERANCE)) health -= toxin_uptake toxins -= toxin_uptake + plant_hud_set_toxin() // Check for pests and weeds. // Some carnivorous plants happily eat pests. @@ -100,6 +104,7 @@ pestlevel -= HYDRO_SPEED_MULTIPLIER else if(pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER + plant_hud_set_pest() // Some plants thrive and live off of weeds. if(weedlevel > 0) @@ -108,6 +113,7 @@ weedlevel -= HYDRO_SPEED_MULTIPLIER else if(weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER + plant_hud_set_weed() // Handle life and death. // If the plant gets too old, begin killing it each cycle diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index 8a056d3e67d..0f23b2a6532 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -21,6 +21,16 @@ build_path = /obj/item/clothing/glasses/hud/health category = list("Equipment") +/datum/design/health_hud_night + name = "Night Vision Health Scanner HUD" + desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." + id = "health_hud_night" + req_tech = list("biotech" = 4, "magnets" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_SILVER = 250) + build_path = /obj/item/clothing/glasses/hud/health/night + category = list("Equipment") + /datum/design/magboots name = "Magnetic Boots" desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." @@ -41,14 +51,14 @@ build_path = /obj/item/clothing/glasses/night category = list("Equipment") -/datum/design/health_hud_night - name = "Night Vision Health Scanner HUD" - desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." - id = "health_hud_night" - req_tech = list("biotech" = 4, "magnets" = 5) +/datum/design/security_hud + name = "Security HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." + id = "security_hud" + req_tech = list("magnets" = 3, "combat" = 2) build_type = PROTOLATHE - materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_SILVER = 250) - build_path = /obj/item/clothing/glasses/hud/health/night + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/clothing/glasses/hud/security category = list("Equipment") /datum/design/security_hud_night @@ -61,16 +71,6 @@ build_path = /obj/item/clothing/glasses/hud/security/night category = list("Equipment") -/datum/design/nvgmesons - name = "Night Vision Optical Meson Scanners" - desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." - id = "nvgmesons" - req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 400, MAT_PLASMA = 250, MAT_URANIUM = 1000) - build_path = /obj/item/clothing/glasses/meson/night - category = list("Equipment") - /datum/design/mesons name = "Optical Meson Scanners" desc = "Used for seeing walls, floors, and stuff through anything." @@ -81,14 +81,14 @@ build_path = /obj/item/clothing/glasses/meson category = list("Equipment") -/datum/design/security_hud - name = "Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." - id = "security_hud" - req_tech = list("magnets" = 3, "combat" = 2) +/datum/design/nvgmesons + name = "Night Vision Optical Meson Scanners" + desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." + id = "nvgmesons" + req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) build_type = PROTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/clothing/glasses/hud/security + materials = list(MAT_METAL = 300, MAT_GLASS = 400, MAT_PLASMA = 250, MAT_URANIUM = 1000) + build_path = /obj/item/clothing/glasses/meson/night category = list("Equipment") /datum/design/air_horn @@ -170,3 +170,23 @@ materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 300) build_path = /obj/item/clothing/glasses/hud/diagnostic/night category = list("Equipment") + +/datum/design/hydroponic_hud + name = "Hydroponic HUD" + desc = "A HUD used to analyze the health and status of plants growing in hydro trays and soil." + id = "hydroponic_hud" + req_tech = list("magnets" = 3, "biotech" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/clothing/glasses/hud/hydroponic + category = list("Equipment") + +/datum/design/hydroponic_hud_night + name = "Night Vision Hydroponic HUD" + desc = "A HUD used to analyze the health and status of plants growing in low-light environments." + id = "hydroponic_hud_night" + req_tech = list("magnets" = 5, "biotech" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 200) + build_path = /obj/item/clothing/glasses/hud/hydroponic/night + category = list("Equipment") \ No newline at end of file diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 28399ab1ce1..402bf49bd5c 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index a6dd62c013e..92d1ac397ef 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 6ad7d94bda7..0fc42d7bd4d 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ