diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index a66b185eb0b..6232ed66147 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -120,6 +120,10 @@ FOODSTUFFS name = "Universal Enzyme (50u)" object = /obj/item/reagent_containers/food/condiment/enzyme +/singleton/biorecipe/food/blood + name = "Synthetic Blood (50u)" + object = /obj/item/reagent_containers/food/condiment/blood + /singleton/biorecipe/food/pepper name = "Pepper Grinder" object = /obj/item/reagent_containers/food/condiment/shaker/peppermill @@ -245,6 +249,28 @@ ITEMS object = /obj/item/storage/bag/plants cost = 250 +// Like soap, but better! +/singleton/biorecipe/item/mop + name = "Mop" + object = /obj/item/mop + cost = 400 + +/singleton/biorecipe/item/filterbox + name = "Cigarette Filters" + object = /obj/item/storage/cigfilters + cost = 200 + +/singleton/biorecipe/item/cigarettepaper + name = "Cigarette Paper" + object = /obj/item/storage/box/fancy/cigpaper + cost = 200 + +// Intended to accomodate hydroponicists preparing their own first-aid kits for themselves or the crew. +/singleton/biorecipe/item/emptyfirstaid + name = "Empty First Aid Kit" + object = /obj/item/storage/firstaid/empty + cost = 200 + /* FLAGS */ @@ -355,6 +381,10 @@ CONSTRUCTION object = /obj/item/stack/material/plastic cost = 75 +/singleton/biorecipe/construction/wood + name = "Wood" + object = /obj/item/stack/material/wood + /* CLOTHING */ diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 394272822d8..f93beca1e55 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -413,37 +413,31 @@ itself in every unconnected station, frontier colony, and doctors office across the spur. The magazine's fame largely comes from its writing, maintaining a perfect blend \ of entertaining commentary and nuanced summaries of recent discoveries." icon_state = "horticulture1" - item_state = "horticulture1" + item_state = "horticulture" /obj/item/toy/comic/magazine/horticulturetoday/issue1 desc = "A staple publication of all things horticulture. This issue is about sunflowers." icon_state = "horticulture1" - item_state = "horticulture1" /obj/item/toy/comic/magazine/horticulturetoday/issue2 desc = "A staple publication of all things horticulture. This issue is about root systems." icon_state = "horticulture2" - item_state = "horticulture2" /obj/item/toy/comic/magazine/horticulturetoday/issue3 desc = "A staple publication of all things horticulture. This issue is about garden flowers." icon_state = "horticulture3" - item_state = "horticulture3" /obj/item/toy/comic/magazine/horticulturetoday/issue4 desc = "A staple publication of all things horticulture. This issue is about wild flowers." icon_state = "horticulture4" - item_state = "horticulture4" /obj/item/toy/comic/magazine/horticulturetoday/issue5 desc = "A staple publication of all things horticulture. This issue is about tomatoes of all kinds." icon_state = "horticulture5" - item_state = "horticulture5" /obj/item/toy/comic/magazine/horticulturetoday/issue6 desc = "A staple publication of all things horticulture. This issue is about the genus Allium. Everything from Onions to Leeks." icon_state = "horticulture6" - item_state = "horticulture6" // // Toy Crossbows diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 395fdfd025e..4a5933f71e7 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -8,49 +8,74 @@ atom_flags = ATOM_FLAG_OPEN_CONTAINER volume = 100 - var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. + /// Set to 0 to stop it from drawing the alert lights. + var/mechanical = 1 var/base_name = "tray" - // Plant maintenance vars. - var/waterlevel = 100 // Water (max 100) - var/nutrilevel = 10 // Nutrient (max 10) - var/pestlevel = 0 // Pests (max 10) - var/weedlevel = 0 // Weeds (max 10) + // --- Plant maintenance vars. --- + /// Water (max 100) + var/waterlevel = 100 + /// Nutrient (max 10) + var/nutrilevel = 10 + /// Pests (max 10) + var/pestlevel = 0 + // Weeds (max 10) + var/weedlevel = 0 var/maxWaterLevel = 100 var/maxNutriLevel = 10 var/maxPestLevel = 10 - var/maxWeedLevel = 0 // Hydroponics systems don't grow weeds irl. Pests are still an issue. + /// Hydroponics systems don't grow weeds irl. Pests are still an issue. + var/maxWeedLevel = 0 - // Tray state vars. - var/dead = 0 // Is it dead? - var/harvest = 0 // Is it ready to harvest? - var/age = 0 // Current plant age - var/sampled = 0 // Have we taken a sample? - var/last_biolum // What was the bioluminescence last tick? + // --- Tray state vars. --- + /// Is it dead? + var/dead = 0 + /// Is it ready to harvest? + var/harvest = 0 + /// Current plant age + var/age = 0 + /// Have we taken a sample? + var/sampled = 0 + /// What was the bioluminescence last tick? + var/last_biolum - // Harvest/mutation mods. - var/yield_mod = 0 // Modifier to yield - var/mutation_mod = 0 // Modifier to mutation chance - var/toxins = 0 // Toxicity in the tray? - var/mutation_level = 0 // When it hits 100, the plant mutates. - var/tray_light = 5 // Supplied lighting. + // --- Harvest/mutation mods. --- + /// Modifier to yield + var/yield_mod = 0 + /// Modifier to mutation chance + var/mutation_mod = 0 + /// Toxicity in the tray? + var/toxins = 0 + /// When it hits 100, the plant mutates. + var/mutation_level = 0 + /// Supplied lighting. + var/tray_light = 5 // Mechanical concerns. - var/health = 0 // Plant health. - var/lastproduce = 0 // Last time tray was harvested - var/lastcycle = 0 // Cycle timing/tracking var. - var/cycledelay = 150 // Delay per cycle. - var/closed_system // If set, the tray will attempt to take atmos from a pipe. - var/force_update // Set this to bypass the cycle time check. - var/obj/temp_chem_holder // Something to hold reagents during process_reagents() + /// Plant health. + var/health = 0 + /// Last time tray was harvested + var/lastproduce = 0 + /// Cycle timing/tracking var. + var/lastcycle = 0 + /// Delay per cycle. + var/cycledelay = 150 + /// If set, the tray will attempt to take atmos from a pipe. + var/closed_system + /// Set this to bypass the cycle time check. + var/force_update + /// Something to hold reagents during process_reagents() + var/obj/temp_chem_holder var/labelled - // Seed details/line data. + /// Seed details/line data. var/datum/seed/seed = null // The currently planted seed - // Reagent information for process(), consider moving this to a controller along - // with cycle information under 'mechanical concerns' at some point. + /** + Reagent information for process(), consider moving this to a controller along + with cycle information under 'mechanical concerns' at some point. + */ var/global/list/toxic_reagents = list( /singleton/reagent/dylovene = -2, /singleton/reagent/toxin = 2, @@ -106,7 +131,7 @@ /singleton/reagent/drink/sodawater = 1 ) - // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). + /// Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). var/global/list/beneficial_reagents = list( /singleton/reagent/alcohol/beer=list( -0.05, 0, 0 ), /singleton/reagent/hydrazine = list( -2, 0, 0 ), @@ -127,8 +152,10 @@ /singleton/reagent/toxin/fertilizer/left4zed = list( 0, 0, 0.2) ) - // Mutagen list specifies minimum value for the mutation to take place, rather - // than a bound as the lists above specify. + /** + Mutagen list specifies minimum value for the mutation to take place, rather + than a bound as the lists above specify. + */ var/global/list/mutagenic_reagents = list( /singleton/reagent/radium = 8, /singleton/reagent/mutagen = 15 @@ -258,7 +285,7 @@ seed.create_spores(get_turf(src)) visible_message(SPAN_DANGER("\The [src] releases its spores!")) -//Process reagents being input into the tray. +/// Process reagents being input into the tray. /obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents() if(!reagents) return @@ -309,7 +336,7 @@ temp_chem_holder.reagents.clear_reagents() check_health() -//Harvests the product of a plant. +/// Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) //Harvest the product of the plant, @@ -342,7 +369,7 @@ check_health() return -//Clears out a dead plant. +/// Clears out a dead plant. /obj/machinery/portable_atmospherics/hydroponics/proc/remove_dead(var/mob/user) if(!user || !dead || !seed) return @@ -363,7 +390,7 @@ check_health() return -// If a weed growth is sufficient, this proc is called. +/// If a weed growth is sufficient, this proc is called. /obj/machinery/portable_atmospherics/hydroponics/proc/weed_invasion() //Remove the seed if something is already planted. @@ -477,6 +504,7 @@ RC.reagents.remove_reagent(/singleton/reagent/water, amountToRemove, 1) waterlevel += amountToRemove user.visible_message("[user] transfers some water to the tray.", "You transfer about [amountToRemove] units of water to the tray.") + playsound(src, /singleton/sound_category/generic_pour_sound, 25, 1) else to_chat(user, SPAN_WARNING("This tray is full of water already.")) return TRUE @@ -498,17 +526,20 @@ to_chat(user, "The plant is dead.") return - // Create a sample. - seed.harvest(user,yield_mod,1) - health -= (rand(3,5)*10) + // Create a sample. Takes a moment. + user.visible_message(SPAN_WARNING("\The [user] begins to sample \the [src]."), SPAN_NOTICE("You begin sampling \the [src].")) + if(do_after(user, 1 SECOND)) + playsound(src, 'sound/items/Wirecutter.ogg', 25, 1) + seed.harvest(user,yield_mod,1) + health -= (rand(3,5)*10) - if(prob(30)) - sampled = 1 + if(prob(30)) + sampled = 1 - // Bookkeeping. - check_health() - force_update = 1 - process() + // Bookkeeping. + check_health() + force_update = 1 + process() return @@ -565,14 +596,33 @@ else if (istype(attacking_item, /obj/item/material/minihoe)) // The minihoe if(weedlevel > 0) - user.visible_message(SPAN_DANGER("[user] starts uprooting the weeds."), - SPAN_DANGER("You remove the weeds from the [src].")) + user.visible_message(SPAN_DANGER("[user] starts uprooting the weeds from \the [src]."), + SPAN_DANGER("You begin to remove the weeds from \the [src].")) - weedlevel = 0 - update_icon() + if(do_after(user, 1 SECOND)) + playsound(src, /singleton/sound_category/shovel_sound, 25, 1) + user.visible_message(SPAN_DANGER("[user] uproots the weeds from \the [src]."), + SPAN_DANGER("You successfully remove the weeds from \the [src].")) + weedlevel = 0 + update_icon() else to_chat(user, SPAN_DANGER("This plot is completely devoid of weeds. It doesn't need uprooting.")) + // Hatchets can uproot the contents of trays to kill the plant with one click. + else if (istype(attacking_item, /obj/item/material/hatchet)) + if(health > 0) + user.visible_message(SPAN_DANGER("[user] begins uprooting the contents of \the [src]."), + SPAN_DANGER("You begin to uproot the contents of \the [src].")) + + if(do_after(user, 2 SECOND)) + playsound(src, /singleton/sound_category/shovel_sound, 25, 1) + user.visible_message(SPAN_DANGER("[user] uproots the contents of \the [src]!"), + SPAN_DANGER("You successfully uproot the contents of \the [src].")) + health = 0 + check_health() + else + to_chat(user, SPAN_DANGER("There is nothing in this plot for you to uproot!")) + else if (istype(attacking_item, /obj/item/storage/bag/plants)) attack_hand(user) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drink/food_drink_species_skrell.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drink/food_drink_species_skrell.dm index a54e7935aac..0cdf2891484 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drink/food_drink_species_skrell.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drink/food_drink_species_skrell.dm @@ -126,7 +126,7 @@ condiment_name = "dyn juice" condiment_desc = "Juice from a Skrell medicinal herb. It's supposed to be diluted." condiment_icon = 'icons/obj/item/reagent_containers/food/drinks/carton.dmi' - condiment_icon_state = "dynjuice" + condiment_icon_state = "dyncarton" /singleton/reagent/drink/dynjuice/hot name = "Dyn Tea" diff --git a/html/changelogs/hazelmouse-bloodreturn.yml b/html/changelogs/hazelmouse-bloodreturn.yml new file mode 100644 index 00000000000..92ae610610c --- /dev/null +++ b/html/changelogs/hazelmouse-bloodreturn.yml @@ -0,0 +1,64 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: hazelmouse + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a few new items to the biogenerator, including synthetic blood, wooden planks, a mop, an empty first-aid kit, cigarette filters, and cigarette papers." + - rscadd: "Hydroponics trays now produce sounds when watered, sampled, and weeded. Sampling and weeding both now have a one second timer for completion." + - rscadd: "Hatchets can now uproot plants growing in soil or in hydroponics trays with a single click." + - bugfix: "Dyn cartons are no longer invisible after being produced from a Condimaster." + - bugfix: "Horticultural magazines no longer have broken sprites." + - imageadd: "Introduced in-hand sprites for horticultural magazines." + - code_imp: "Transitioned some documentation in hydroponics tray code to DMDocs." diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 6aebf935f2c..46db7314468 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ