//Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters. /obj/item/wirecutters/clippers name = "plant clippers" desc = "A tool used to take samples from plants." icon_state = "plantclippers" item_state = "plantclippers" item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_hydro.dmi', slot_r_hand_str = 'icons/mob/items/righthand_hydro.dmi', ) toolspeed = 0.7 /// Plant clippers have a 40% chance to successfully defuse a bomb, higher than standard because plant clippers are smaller. bomb_defusal_chance = 40 build_from_parts = FALSE /obj/item/wirecutters/clippers/update_icon() var/matrix/tf = matrix() var/obj/item/storage/S = loc if(istype(S, /obj/item/storage) && !S.storage_slots) tf.Turn(-90) //Vertical for storing compactly tf.Translate(-1, 0) //Could do this with pixel_x but let's just update the appearance once. transform = tf /// Like a health analyzer, but for plants! Tells you everything you need to know. /obj/item/analyzer/plant_analyzer name = "plant analyzer" icon = 'icons/obj/item/scanner.dmi' icon_state = "hydro" item_state = "hydro" var/form_title var/last_data matter = list(DEFAULT_WALL_MATERIAL = 80, MATERIAL_GLASS = 20) origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1) /obj/item/analyzer/plant_analyzer/proc/print_report_verb() set name = "Print Plant Report" set category = "Object.Held" set src = usr if(usr.stat || usr.restrained() || usr.lying) return print_report(usr) /obj/item/analyzer/plant_analyzer/Topic(href, href_list) if(..()) return if(href_list["print"]) print_report(usr) /obj/item/analyzer/plant_analyzer/proc/print_report(var/mob/living/user) if(!last_data) to_chat(user, "There is no scan data to print.") return var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) P.set_content_unsafe("paper - [form_title]", "[last_data]") if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand)) user.put_in_hands(P) user.visible_message("\The [src] spits out a piece of paper.") return /obj/item/analyzer/plant_analyzer/attack_self(mob/user as mob) print_report(user) return 0 /obj/item/analyzer/plant_analyzer/afterattack(obj/target, mob/user, flag) if(!flag) return var/datum/seed/grown_seed var/datum/reagents/grown_reagents if(istype(target,/obj/structure/table)) return ..() else if(istype(target,/obj/item/reagent_containers/food/snacks/grown)) var/obj/item/reagent_containers/food/snacks/grown/G = target grown_seed = SSplants.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/grown)) var/obj/item/grown/G = target grown_seed = SSplants.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/seeds)) var/obj/item/seeds/S = target grown_seed = S.seed else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics)) var/obj/machinery/portable_atmospherics/hydroponics/H = target grown_seed = H.seed grown_reagents = H.reagents if(!grown_seed) to_chat(user, SPAN_DANGER("[src] can tell you nothing about \the [target].")) return form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" var/dat = "

Plant data for [form_title]

" user.visible_message(SPAN_NOTICE("[user] runs the scanner over \the [target].")) dat += "

General Data

" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "
Endurance[GET_SEED_TRAIT(grown_seed, TRAIT_ENDURANCE)]
Yield[GET_SEED_TRAIT(grown_seed, TRAIT_YIELD)]
Maturation time[GET_SEED_TRAIT(grown_seed, TRAIT_MATURATION)]
Production time[GET_SEED_TRAIT(grown_seed, TRAIT_PRODUCTION)]
Potency[GET_SEED_TRAIT(grown_seed, TRAIT_POTENCY)]
" if(LAZYLEN(grown_reagents?.reagent_volumes)) dat += "

Reagent Data

" dat += "
This sample contains: " for(var/_R in grown_reagents.reagent_volumes) var/singleton/reagent/R = GET_SINGLETON(_R) dat += "
- [R.name], [REAGENT_VOLUME(grown_reagents, _R)] unit(s)" dat += "

Other Data

" if(GET_SEED_TRAIT(grown_seed, TRAIT_HARVEST_REPEAT)) dat += "This plant can be harvested repeatedly.
" if(GET_SEED_TRAIT(grown_seed, TRAIT_IMMUTABLE) == -1) dat += "This plant is highly mutable.
" else if(GET_SEED_TRAIT(grown_seed, TRAIT_IMMUTABLE) > 0) dat += "This plant does not possess genetics that are alterable.
" if(GET_SEED_TRAIT(grown_seed, TRAIT_REQUIRES_NUTRIENTS)) if(GET_SEED_TRAIT(grown_seed, TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "It consumes a small amount of nutrient fluid.
" else if(GET_SEED_TRAIT(grown_seed, TRAIT_NUTRIENT_CONSUMPTION) > 0.2) dat += "It requires a heavy supply of nutrient fluid.
" else dat += "It requires a supply of nutrient fluid.
" if(GET_SEED_TRAIT(grown_seed, TRAIT_REQUIRES_WATER)) if(GET_SEED_TRAIT(grown_seed, TRAIT_WATER_CONSUMPTION) < 1) dat += "It requires very little water.
" else if(GET_SEED_TRAIT(grown_seed, TRAIT_WATER_CONSUMPTION) > 5) dat += "It requires a large amount of water.
" else dat += "It requires a stable supply of water.
" if(grown_seed.mutants && grown_seed.mutants.len) dat += "It exhibits a high degree of potential subspecies shift.
" dat += "It thrives in a temperature of [GET_SEED_TRAIT(grown_seed, TRAIT_IDEAL_HEAT)] Kelvin." if(GET_SEED_TRAIT(grown_seed, TRAIT_LOWKPA_TOLERANCE) < 20) dat += "
It is well adapted to low pressure levels." if(GET_SEED_TRAIT(grown_seed, TRAIT_HIGHKPA_TOLERANCE) > 220) dat += "
It is well adapted to high pressure levels." if(GET_SEED_TRAIT(grown_seed, TRAIT_HEAT_TOLERANCE) > 30) dat += "
It is well adapted to a range of temperatures." else if(GET_SEED_TRAIT(grown_seed, TRAIT_HEAT_TOLERANCE) < 10) dat += "
It is very sensitive to temperature shifts." dat += "
It thrives in a light level of [GET_SEED_TRAIT(grown_seed, TRAIT_IDEAL_LIGHT)] lumen\s." if(GET_SEED_TRAIT(grown_seed, TRAIT_LIGHT_TOLERANCE) > 10) dat += "
It is well adapted to a range of light levels." else if(GET_SEED_TRAIT(grown_seed, TRAIT_LIGHT_TOLERANCE) < 3) dat += "
It is very sensitive to light level shifts." if(GET_SEED_TRAIT(grown_seed, TRAIT_TOXINS_TOLERANCE) < 3) dat += "
It is highly sensitive to toxins." else if(GET_SEED_TRAIT(grown_seed, TRAIT_TOXINS_TOLERANCE) > 6) dat += "
It is remarkably resistant to toxins." if(GET_SEED_TRAIT(grown_seed, TRAIT_PEST_TOLERANCE) < 3) dat += "
It is highly sensitive to pests." else if(GET_SEED_TRAIT(grown_seed, TRAIT_PEST_TOLERANCE) > 6) dat += "
It is remarkably resistant to pests." if(GET_SEED_TRAIT(grown_seed, TRAIT_WEED_TOLERANCE) < 3) dat += "
It is highly sensitive to weeds." else if(GET_SEED_TRAIT(grown_seed, TRAIT_WEED_TOLERANCE) > 6) dat += "
It is remarkably resistant to weeds." switch(GET_SEED_TRAIT(grown_seed, TRAIT_SPREAD)) if(1) dat += "
It is able to be planted outside of a tray." if(2) dat += "
It is a robust and vigorous vine that will spread rapidly." switch(GET_SEED_TRAIT(grown_seed, TRAIT_CARNIVOROUS)) if(1) dat += "
It is carnivorous and will eat tray pests for sustenance." if(2) dat += "
It is carnivorous and poses a significant threat to living things around it." if(GET_SEED_TRAIT(grown_seed, TRAIT_PARASITE)) dat += "
It is capable of parisitizing and gaining sustenance from tray weeds." if(GET_SEED_TRAIT(grown_seed, TRAIT_ALTER_TEMP)) dat += "
It will periodically alter the local temperature by [GET_SEED_TRAIT(grown_seed, TRAIT_ALTER_TEMP)] degrees Kelvin." if(GET_SEED_TRAIT(grown_seed, TRAIT_BIOLUM)) dat += "
It is [GET_SEED_TRAIT(grown_seed, TRAIT_BIOLUM_COLOUR) ? "bio-luminescent" : "bio-luminescent"]." if(GET_SEED_TRAIT(grown_seed, TRAIT_PRODUCES_POWER)) dat += "
The fruit will function as a battery if prepared appropriately." if(GET_SEED_TRAIT(grown_seed, TRAIT_STINGS)) dat += "
The fruit is covered in stinging spines." if(GET_SEED_TRAIT(grown_seed, TRAIT_JUICY) == 1) dat += "
The fruit is soft-skinned and juicy." else if(GET_SEED_TRAIT(grown_seed, TRAIT_JUICY) == 2) dat += "
The fruit is excessively juicy." if(GET_SEED_TRAIT(grown_seed, TRAIT_EXPLOSIVE)) dat += "
The fruit is internally unstable." if(GET_SEED_TRAIT(grown_seed, TRAIT_TELEPORTING)) dat += "
The fruit is temporal/spatially unstable." if(GET_SEED_TRAIT(grown_seed, TRAIT_EXUDE_GASSES)) dat += "
It will release gas into the environment." if(GET_SEED_TRAIT(grown_seed, TRAIT_CONSUME_GASSES)) dat += "
It will remove gas from the environment." if(dat) last_data = dat dat += "

\[print report\]" user << browse(HTML_SKELETON(dat),"window=plant_analyzer") return