diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 751f5faa94..2e46046a7e 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -615,7 +615,7 @@
if(do_after(mob_viewer, 35, null, mob_viewer))
if(isliving(mob_viewer))
var/mob/living/L = mob_viewer
- to_chat(mob_viewer, "You succesfuly remove the durathread strand.")
+ to_chat(mob_viewer, "You successfully remove the durathread strand.")
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 016f226399..495e90d305 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -220,6 +220,12 @@
T -= M.rating*0.2
prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
+/obj/machinery/autolathe/examine(mob/user)
+ . += ..()
+ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Storing up to [materials.max_amount] material units.
Material consumption at [prod_coeff*100]%."
+
/obj/machinery/autolathe/proc/main_win(mob/user)
var/dat = "
Autolathe Menu:
"
dat += materials_printout()
@@ -380,4 +386,4 @@
//Called when the object is constructed by an autolathe
//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes
/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A)
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index a982411692..fc6cac785a 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -28,6 +28,8 @@
. += "There's [charging ? "a" : "no"] cell in the charger."
if(charging)
. += "Current charge: [round(charging.percent(), 1)]%."
+ if(in_range(user, src) || isobserver(user))
+ . += "
The status display reads: Charge rate at [charge_rate]J per cycle."
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 413621d8b9..711b221c54 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -102,8 +102,13 @@
/obj/machinery/clonepod/examine(mob/user)
. = ..()
var/mob/living/mob_occupant = occupant
+ . += "
The linking device can be scanned with a multitool."
if(mess)
. += "It's filled with blood and viscera. You swear you can see it moving..."
+ if(in_range(user, src) || isobserver(user))
+ . += "
The status display reads: Cloning speed at [speed_coeff*50]%.
Predicted amount of cellular damage: [100-heal_level]%."
+ if(efficiency > 5)
+ to_chat(user, "
Pod has been upgraded to support autoprocessing.")
if(is_operational() && mob_occupant)
if(mob_occupant.stat != DEAD)
. += "Current clone cycle is [round(get_completion())]% complete."
diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm
index 21fb70c38c..c52cf29660 100644
--- a/code/game/machinery/computer/teleporter.dm
+++ b/code/game/machinery/computer/teleporter.dm
@@ -44,7 +44,7 @@
data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]
"
if(calibrating)
data += "Calibration: In Progress"
- else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
+ else if(power_station.teleporter_hub.calibrated || power_station.efficiency >= 3)
data += "Calibration: Optimal"
else
data += "Calibration: Sub-Optimal"
@@ -84,14 +84,14 @@
if(!target)
say("Error: No target set to calibrate to.")
return
- if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
+ if(power_station.teleporter_hub.calibrated || power_station.efficiency >= 3)
say("Hub is already calibrated!")
return
say("Processing hub calibration to target...")
calibrating = 1
power_station.update_icon()
- spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration
+ spawn(50 * (3 - power_station.efficiency)) //Better parts mean faster calibration
calibrating = 0
if(check_hub_connection())
power_station.teleporter_hub.calibrated = 1
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index f62dceff6c..cff2e361bd 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -27,6 +27,13 @@
for(var/obj/item/stock_parts/micro_laser/P in component_parts)
damage_coeff = P.rating
+/obj/machinery/dna_scannernew/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Radiation pulse accuracy increased by factor [precision_coeff**2].
Radiation pulse damage decreased by factor [damage_coeff**2]."
+ if(scan_level >= 3)
+ . += "Scanner has been upgraded to support autoprocessing."
+
/obj/machinery/dna_scannernew/update_icon()
//no power or maintenance
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 0429db5792..f5bf8c8a1b 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -32,7 +32,7 @@
CalculateAffectingAreas()
/obj/machinery/door/firedoor/examine(mob/user)
- ..()
+ . = ..()
if(!density)
. += "It is open, but could be pried closed."
else if(!welded)
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index e1f9824524..40430b37b7 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -129,7 +129,7 @@
/obj/machinery/harvester/proc/end_harvesting()
harvesting = FALSE
open_machine()
- say("Subject has been succesfuly harvested.")
+ say("Subject has been successfully harvested.")
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, 0)
/obj/machinery/harvester/screwdriver_act(mob/living/user, obj/item/I)
@@ -191,4 +191,6 @@
if(state_open)
. += "[src] must be closed before harvesting."
else if(!harvesting)
- . += "Alt-click [src] to start harvesting."
\ No newline at end of file
+ . += "Alt-click [src] to start harvesting."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Harvest speed at [interval*0.1] seconds per organ."
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 40fc52d6a1..f3e446c686 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -143,6 +143,11 @@ GLOBAL_LIST_EMPTY(network_holopads)
holograph_range += 1 * B.rating
holo_range = holograph_range
+/obj/machinery/holopad/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Current projection range: [holo_range] units."
+
/obj/machinery/holopad/attackby(obj/item/P, mob/user, params)
if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
return
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 5418dcdb97..b4a9584368 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -23,6 +23,11 @@
E += M.rating*15
range = E
+/obj/machinery/launchpad/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Maximum range: [range] units."
+
/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params)
if(stationary)
if(default_deconstruction_screwdriver(user, "lpad-idle-o", "lpad-idle", I))
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index bf9400219b..28afea817b 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -144,7 +144,7 @@
// Set this limb up using the specias name and body zone
limb.icon_state = "[selected_category]_[limb.body_zone]"
limb.name = "\improper synthetic [selected_category] [parse_zone(limb.body_zone)]"
- limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]"
+ limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]."
limb.species_id = selected_category
limb.update_icon_dropped()
@@ -158,6 +158,11 @@
T -= M.rating*0.2
prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
+/obj/machinery/limbgrower/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Storing up to [reagents.maximum_volume]u of synthflesh.
Synthflesh consumption at [prod_coeff*100]%."
+
/obj/machinery/limbgrower/proc/main_win(mob/user)
var/dat = "Limb Grower Menu:
"
dat += "
Chemical Storage"
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index a581981746..2211397f3e 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -23,6 +23,23 @@
for(var/obj/item/stock_parts/capacitor/C in component_parts)
recharge_coeff = C.rating
+/obj/machinery/recharger/examine(mob/user)
+ . = ..()
+ if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
+ . += "
You're too far away to examine [src]'s contents and display!"
+ return
+
+ if(charging)
+ . += {"
\The [src] contains:
+
- \A [charging]."}
+
+ if(!(stat & (NOPOWER|BROKEN)))
+ . += "
The status display reads:"
+ . += "
- Recharging [recharge_coeff*10]% cell charge per cycle."
+ if(charging)
+ var/obj/item/stock_parts/cell/C = charging.get_cell()
+ . += "
- \The [charging]'s cell is at [C.percent()]%."
+
/obj/machinery/recharger/proc/setCharging(new_charging)
charging = new_charging
if (new_charging)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index cd5f7ad6bf..374c0c71b9 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -50,6 +50,13 @@
for(var/obj/item/stock_parts/cell/C in component_parts)
recharge_speed *= C.maxcharge / 10000
+/obj/machinery/recharge_station/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "
The status display reads: Recharging [recharge_speed]J per cycle."
+ if(repairs)
+ to_chat(user, "
[src] has been upgraded to support automatic repairs.")
+
/obj/machinery/recharge_station/process()
if(!is_operational())
return
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index c879ca73e8..538017eaef 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -41,9 +41,10 @@
/obj/machinery/recycler/examine(mob/user)
. = ..()
- . += "The power light is [(stat & NOPOWER) ? "off" : "on"]."
- . += "The safety-mode light is [safety_mode ? "on" : "off"]."
- . += "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."
+ . += "Reclaiming [amount_produced]% of materials salvaged."
+ . += {"The power light is [(stat & NOPOWER) ? "off" : "on"].
+ The safety-mode light is [safety_mode ? "on" : "off"].
+ The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."}
/obj/machinery/recycler/power_change()
..()
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 984a911d32..6eca52aa0e 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -52,6 +52,8 @@
. += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
else
. += "There is no power cell installed."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Temperature range at [settableTemperatureRange]°C.
Heating power at [heatingPower*0.001]kJ.
Power consumption at [(efficiency*-0.0025)+150]%." //100%, 75%, 50%, 25%
/obj/machinery/space_heater/update_icon()
if(on)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index ae71a0b844..3cc71df0f1 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -11,7 +11,7 @@
idle_power_usage = 10
active_power_usage = 2000
circuit = /obj/item/circuitboard/machine/teleporter_hub
- var/accurate = FALSE
+ var/accuracy = 0
var/obj/machinery/teleport/station/power_station
var/calibrated //Calibration prevents mutation
@@ -29,7 +29,12 @@
var/A = 0
for(var/obj/item/stock_parts/matter_bin/M in component_parts)
A += M.rating
- accurate = A
+ accuracy = A
+
+/obj/machinery/teleport/hub/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Probability of malfunction decreased by [(accuracy*25)-25]%."
/obj/machinery/teleport/hub/proc/link_power_station()
if(power_station)
@@ -69,13 +74,13 @@
if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
use_power(5000)
- if(!calibrated && iscarbon(M) && prob(30 - ((accurate) * 10))) //oh dear a problem
+ if(!calibrated && iscarbon(M) && prob(30 - ((accuracy) * 10))) //oh dear a problem
var/mob/living/carbon/C = M
if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE))
to_chat(C, "You hear a buzzing in your ears.")
C.set_species(/datum/species/fly)
log_game("[C] ([key_name(C)]) was turned into a fly person")
- C.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0)
+ C.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0)
calibrated = FALSE
return
@@ -102,7 +107,7 @@
/obj/machinery/teleport/station
- name = "station"
+ name = "teleporter station"
desc = "The power control station for a bluespace teleporter. Used for toggling power, and can activate a test-fire to prevent malfunctions."
icon_state = "controller"
use_power = IDLE_POWER_USE
@@ -125,6 +130,15 @@
E += C.rating
efficiency = E - 1
+/obj/machinery/teleport/station/examine(mob/user)
+ . = ..()
+ if(!panel_open)
+ . += "The panel is screwed in, obstructing the linking device and wiring panel."
+ else
+ . += "The linking device is now able to be scanned with a multitool.
The wiring can be connected to a nearby console and hub with a pair of wirecutters."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: This station can be linked to [efficiency] other station(s)."
+
/obj/machinery/teleport/station/proc/link_console_and_hub()
for(var/direction in GLOB.cardinals)
teleporter_hub = locate(/obj/machinery/teleport/hub, get_step(src, direction))
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index bc8a675085..90f037c279 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -36,6 +36,11 @@
MC += C.rating
max_charge = MC * 25
+/obj/machinery/mech_bay_recharge_port/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Base recharge rate at [max_charge]J per cycle."
+
/obj/machinery/mech_bay_recharge_port/process()
if(stat & NOPOWER || !recharge_console)
return
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 61c0a8bd37..98e4eb4258 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -62,6 +62,11 @@
T += Ml.rating
time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01)
+/obj/machinery/mecha_part_fabricator/examine(mob/user)
+ . = ..()
+ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Storing up to [materials.max_amount] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%."
/obj/machinery/mecha_part_fabricator/emag_act()
. = ..()
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index cc470466df..1f2f1ddda2 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -56,6 +56,14 @@
else
return ..()
+/obj/item/laser_pointer/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ if(!diode)
+ . += "The diode is missing."
+ else
+ . += "A class [diode.rating] laser diode is installed. It is screwed in place."
+
/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
laser_act(target, user, params)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 4e91ee50c3..539b5ce57a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -57,6 +57,11 @@
heat_capacity = initial(heat_capacity) / C
conduction_coefficient = initial(conduction_coefficient) * C
+/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) //this is leaving out everything but efficiency since they follow the same idea of "better matter bin, better results"
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Efficiency at [efficiency*100]%."
+
/obj/machinery/atmospherics/components/unary/cryo_cell/Destroy()
QDEL_NULL(radio)
QDEL_NULL(beaker)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 27ee54815f..f3b8e466f3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -66,10 +66,12 @@ God bless America.
oil_use = initial(oil_use) - (oil_efficiency * 0.0095)
fry_speed = oil_efficiency
-/obj/machinery/deepfryer/examine()
+/obj/machinery/deepfryer/examine(mob/user)
. = ..()
if(frying)
. += "You can make out \a [frying] in the oil."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Frying at [fry_speed*100]% speed.
Using [oil_use*10] units of oil per second."
/obj/machinery/deepfryer/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/reagent_containers/pill))
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index e5c5a4f933..4406491f10 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -30,6 +30,14 @@
if(M.rating >= 2)
ignore_clothing = TRUE
+/obj/machinery/gibber/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Outputting [meat_produced] meat slab(s) after [gibtime*0.1] seconds of processing."
+ for(var/obj/item/stock_parts/manipulator/M in component_parts)
+ if(M.rating >= 2)
+ . += "Gibber has been upgraded to process inorganic materials."
+
/obj/machinery/gibber/update_icon()
cut_overlays()
if (dirty)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index c25cb2288f..3d7341308b 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -1,6 +1,6 @@
/obj/machinery/monkey_recycler
name = "monkey recycler"
- desc = "A machine used for recycling dead monkeys into monkey cubes. It currently produces 1 cube for every 5 monkeys inserted." // except it literally never does
+ desc = "A machine used for recycling dead monkeys into monkey cubes." // except it literally never does
icon = 'icons/obj/kitchen.dmi'
icon_state = "grinder"
layer = BELOW_OBJ_LAYER
@@ -22,7 +22,11 @@
cubes_made = M.rating
cube_production = cubes_made
required_grind = req_grind
- src.desc = "A machine used for recycling dead monkeys into monkey cubes. It currently produces [cubes_made] cube(s) for every [required_grind] monkey(s) inserted."
+
+/obj/machinery/monkey_recycler/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Producing [cube_production] cubes for every monkey inserted."
/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params)
if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O))
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index 35ce25bbaf..b81c127523 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -21,6 +21,11 @@
for(var/obj/item/stock_parts/manipulator/M in component_parts)
rating_speed = M.rating
+/obj/machinery/processor/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Outputting [rating_amount] item(s) at [rating_speed*100]% speed."
+
/obj/machinery/processor/proc/process_food(datum/food_processor_process/recipe, atom/movable/what)
if (recipe.output && loc && !QDELETED(src))
for(var/i = 0, i < rating_amount, i++)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 893a53ede7..7619f68448 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -33,6 +33,11 @@
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
max_n_of_items = 1500 * B.rating
+/obj/machinery/smartfridge/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: This unit can hold a maximum of [max_n_of_items] items."
+
/obj/machinery/smartfridge/power_change()
..()
update_icon()
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index e946973ded..2376010408 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -52,6 +52,12 @@
productivity = P
max_items = max_storage
+
+/obj/machinery/biogenerator/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Productivity at [productivity*100]%.
Matter consumption reduced by [(efficiency*25)-25]%.
Machine can hold up to [max_items] pieces of produce."
+
/obj/machinery/biogenerator/on_reagent_change(changetype) //When the reagents change, change the icon as well.
update_icon()
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 2d0d2c5282..1cd63db6da 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -46,6 +46,11 @@
maxwater = tmp_capacity * 50 // Up to 300
maxnutri = tmp_capacity * 5 // Up to 30
+/obj/machinery/hydroponics/constructable/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Tray efficiency at [rating*100]%."
+
/obj/machinery/hydroponics/Destroy()
if(myseed)
qdel(myseed)
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index 5af19b8431..617b980654 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -56,6 +56,11 @@
for(var/obj/item/stock_parts/manipulator/M in component_parts)
seed_multiplier = M.rating
+/obj/machinery/seed_extractor/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Extracting [seed_multiplier] seed(s) per piece of produce.
Machine can store up to [max_seeds]% seeds."
+
/obj/machinery/seed_extractor/attackby(obj/item/O, mob/user, params)
if(default_deconstruction_screwdriver(user, "sextractor_open", "sextractor", O))
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 9ae6c69847..3a6a98d681 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -103,6 +103,8 @@
. += "The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle."
if(crit_fail)
. += "The generator seems to have broken down."
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Fuel efficiency increased by [(consumption*100)-100]%."
/obj/machinery/power/port_gen/pacman/HasFuel()
if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index 45d1c0fc00..afbeef30a1 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -36,6 +36,11 @@
power_gen = initial(power_gen) * part_level
+/obj/machinery/power/rtg/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Power generation now at [power_gen*0.001]kW."
+
/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I))
return
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d6f51497cd..d8b0ede3a2 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -68,6 +68,11 @@
sparks.attach(src)
sparks.set_up(1, TRUE, src)
+/obj/machinery/power/emitter/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Emitting one beam each [fire_delay*0.1] seconds.
Power consumption at [active_power_usage]W."
+
/obj/machinery/power/emitter/ComponentInitialize()
. = ..()
AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES)
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 2265f806a5..e29ffa865e 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -36,6 +36,11 @@
zap_cooldown -= (C.rating * 20)
input_power_multiplier = power_multiplier
+/obj/machinery/power/tesla_coil/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Power generation at [input_power_multiplier*100]%.
Shock interval at [zap_cooldown*0.1] seconds."
+
/obj/machinery/power/tesla_coil/on_construction()
if(anchored)
connect_to_network()
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 85ee7589b9..423aaae3f9 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -94,6 +94,11 @@
E += M.rating
efficiency = E / 6
+/obj/machinery/power/compressor/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Efficiency at [efficiency*100]%."
+
/obj/machinery/power/compressor/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I))
return
@@ -176,6 +181,11 @@
P += C.rating
productivity = P / 6
+/obj/machinery/power/turbine/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Productivity at [productivity*100]%."
+
/obj/machinery/power/turbine/locate_machinery()
if(compressor)
return
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 424f2bce30..ce839f33d7 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -113,7 +113,9 @@
if(panel_open)
. += "[src]'s maintenance hatch is open!"
if(in_range(user, src) || isobserver(user))
- . += "The status display reads:
Recharging [recharge_amount] power units per interval.
Power efficiency increased by [(powerefficiency*1000)-100]%."
+ . += "The status display reads:\n\
+ Recharging [recharge_amount] power units per interval.\n\
+ Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%."
switch(macrotier)
if(1)
. += "Macro granularity at 5u."
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index b4f14c69a7..f4014387c6 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -52,6 +52,11 @@
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
heater_coefficient *= M.rating
+/obj/machinery/chem_heater/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Heating reagents at [heater_coefficient*1000]% speed."
+
/obj/machinery/chem_heater/process()
..()
if(stat & NOPOWER)
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index bff8df8816..681195bcc3 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -82,6 +82,11 @@
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
badThingCoeff += M.rating
+/obj/machinery/rnd/experimentor/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Malfunction probability reduced by [badThingCoeff]%.
Cooldown interval between experiments at [resetTime*0.1] seconds."
+
/obj/machinery/rnd/experimentor/proc/checkCircumstances(obj/item/O)
//snowflake check to only take "made" bombs
if(istype(O, /obj/item/transfer_valve))
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index d93355b36c..659a83c703 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -73,6 +73,12 @@
total_rating = max(1, total_rating)
efficiency_coeff = total_rating
+/obj/machinery/rnd/production/examine(mob/user)
+ . = ..()
+ var/datum/component/remote_materials/materials = GetComponent(/datum/component/remote_materials)
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Storing up to [materials.local_size] material units locally.
Material usage efficiency at [efficiency_coeff*100]%."
+
//we eject the materials upon deconstruction.
/obj/machinery/rnd/production/on_deconstruction()
for(var/obj/item/reagent_containers/glass/G in component_parts)
diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm
index 1fc2633989..515231c24c 100644
--- a/code/modules/research/nanites/nanite_chamber.dm
+++ b/code/modules/research/nanites/nanite_chamber.dm
@@ -29,6 +29,11 @@
for(var/obj/item/stock_parts/scanning_module/P in component_parts)
scan_level += P.rating
+/obj/machinery/nanite_chamber/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Scanning module has been upgraded to level [scan_level]."
+
/obj/machinery/nanite_chamber/proc/set_busy(status, message, working_icon)
busy = status
busy_message = message