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 1c0635fd3d..1be5a40070 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))
+ to_chat(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 97b260f3bf..cdbafbc3e9 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))
+ to_chat(user, "The status display reads: Speed [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..648e9f5e71 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))
+ to_chat(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)
+ to_chat(user, "Scanner has been upgraded to support autoprocessing.")
+
/obj/machinery/dna_scannernew/update_icon()
//no power or maintenance
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index e1f9824524..40e898e29c 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))
+ to_chat(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 b1783ba940..d48a71ce46 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))
+ to_chat(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..4a51a7b0c5 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))
+ to_chat(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..9c2bd0744b 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))
+ to_chat(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 927608d3d5..fcfdcc44bb 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -23,6 +23,11 @@
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) || isobserver(user))
+ to_chat(user, "
The status display reads: Recharging [recharge_coeff*10]% cell charge per cycle.")
+
/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 c0f563d44d..fa438b518b 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))
+ to_chat(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 c8beeb8c83..b7c4d8f5d6 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..968ff69e66 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))
+ to_chat(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..3a52e652d3 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))
+ to_chat(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)
+ to_chat(user, "The panel is screwed in, obstructing the linking device and wiring panel.")
+ else
+ to_chat(user, "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))
+ to_chat(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..9903fa00b1 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))
+ to_chat(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 417fefce6e..eaaef75501 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))
+ to_chat(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 1654ecde41..1f79614da2 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)
+ to_chat(user, "The diode is missing.")
+ else
+ to_chat(user, "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 0a54503be5..291eb40507 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))
+ to_chat(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..253dfcd728 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))
+ to_chat(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..1369341d40 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))
+ to_chat(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)
+ to_chat(user, "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..27c0376f63 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))
+ to_chat(user, "The status display reads: Producing [cube_production] cube(s) for every [required_grind] monkey(s) 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..ae16b9cb66 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))
+ to_chat(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..d259b39b31 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))
+ to_chat(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 ac750a0492..0d19c4d6cc 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))
+ to_chat(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 0b6834c408..2bbb781a03 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))
+ to_chat(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 d9bea64411..226b73c455 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))
+ to_chat(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 a9cd97c331..31a6caf077 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))
+ to_chat(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 9dca8f3124..21095944dd 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))
+ to_chat(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 71a8565d26..7bd5fd0110 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))
+ to_chat(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..8d2b81e48a 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))
+ to_chat(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..8487d72afb 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))
+ to_chat(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))
+ to_chat(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_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index b4f14c69a7..6d6b21bf74 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))
+ to_chat(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 b25ee9bb2d..152f292564 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/reagentgrinder/examine(mob/user)
+ ..()
+ if(in_range(user, src) || isobserver(user))
+ to_chat(user, "The status display reads: Grinding reagents at [speed*100]%.")
+
/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 9ba45fb1a3..44c56835fa 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*50]%."
+
//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..90ee9ddf9f 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))
+ to_chat(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
From bb0d012d7a0ff970c60868c0bbb70c012847812d Mon Sep 17 00:00:00 2001
From: Putnam
Date: Sun, 12 Jan 2020 16:08:49 -0800
Subject: [PATCH 11/41] well that works
---
code/datums/elements/dusts_on_catatonia.dm | 25 +++++++++++++++++++
.../objects/structures/ghost_role_spawners.dm | 1 +
tgstation.dme | 1 +
3 files changed, 27 insertions(+)
create mode 100644 code/datums/elements/dusts_on_catatonia.dm
diff --git a/code/datums/elements/dusts_on_catatonia.dm b/code/datums/elements/dusts_on_catatonia.dm
new file mode 100644
index 0000000000..2922bdf80b
--- /dev/null
+++ b/code/datums/elements/dusts_on_catatonia.dm
@@ -0,0 +1,25 @@
+/datum/element/dusts_on_catatonia
+ element_flags = ELEMENT_DETACH
+ var/list/mob/attached_mobs = list()
+
+/datum/element/dusts_on_catatonia/Attach(datum/target,penalize = FALSE)
+ . = ..()
+ if(!ismob(target))
+ return ELEMENT_INCOMPATIBLE
+ var/mob/M = target
+ if(!(M in attached_mobs))
+ attached_mobs += M
+ START_PROCESSING(SSprocessing,src)
+
+/datum/element/dusts_on_catatonia/Detach(mob/M)
+ . = ..()
+ if(M in attached_mobs)
+ attached_mobs -= M
+ if(!attached_mobs.len)
+ STOP_PROCESSING(SSprocessing,src)
+
+/datum/element/dusts_on_catatonia/process()
+ for(var/mob/M in attached_mobs)
+ if(!M.key && !M.get_ghost())
+ M.dust(force = TRUE)
+ Detach(M)
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 705ca9a884..9c0cc844f9 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -627,6 +627,7 @@
SSjob.equip_loadout(null, new_spawn, FALSE)
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
new_spawn.AddElement(/datum/element/ghost_role_eligibility)
+ new_spawn.AddElement(/datum/element/dusts_on_catatonia)
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
to_chat(new_spawn,"You maybe sharing your cafe with some ninja-captured individuals, so make sure to only interact with the ghosts you hear as a ghost!")
diff --git a/tgstation.dme b/tgstation.dme
index 33a4251dd7..79bc3b58a1 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -469,6 +469,7 @@
#include "code\datums\diseases\advance\symptoms\youth.dm"
#include "code\datums\elements\_element.dm"
#include "code\datums\elements\cleaning.dm"
+#include "code\datums\elements\dusts_on_catatonia.dm"
#include "code\datums\elements\earhealing.dm"
#include "code\datums\elements\ghost_role_eligibility.dm"
#include "code\datums\helper_datums\events.dm"
From 6197920101aad834a80619245d000cc71acfb721 Mon Sep 17 00:00:00 2001
From: Putnam
Date: Sun, 12 Jan 2020 23:40:28 -0800
Subject: [PATCH 12/41] fixed unnecessary typecheck
---
code/datums/elements/dusts_on_catatonia.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/code/datums/elements/dusts_on_catatonia.dm b/code/datums/elements/dusts_on_catatonia.dm
index 2922bdf80b..f5ca5722c4 100644
--- a/code/datums/elements/dusts_on_catatonia.dm
+++ b/code/datums/elements/dusts_on_catatonia.dm
@@ -19,7 +19,8 @@
STOP_PROCESSING(SSprocessing,src)
/datum/element/dusts_on_catatonia/process()
- for(var/mob/M in attached_mobs)
+ for(var/m in attached_mobs)
+ var/mob/M = m
if(!M.key && !M.get_ghost())
M.dust(force = TRUE)
Detach(M)
From 300fdb431c9840006796bfc2cf2f337912dce3bd Mon Sep 17 00:00:00 2001
From: Artur
Date: Fri, 17 Jan 2020 19:46:27 +0100
Subject: [PATCH 13/41] 0 clue if itll even work. Cowabunga it is.
---
code/modules/admin/topic.dm | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 88d4105124..a15ae74218 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -907,12 +907,16 @@
dat += "Alien | "
else
dat += "Alien | "
-
//Gang
if(jobban_isbanned(M, ROLE_GANG) || isbanned_dept)
dat += "Gang | "
else
dat += "Gang | "
+ //Bloodsucker
+ if(jobban_isbanned(M, ROLE_BLOODSUCKER) || isbanned_dept)
+ dat += "Bloodsucker | "
+ else
+ dat += "Bloodsucker | "
//Other Roles (black)
From 2fe23b67dbdd2d4e95ace083605dbaf7a59f318f Mon Sep 17 00:00:00 2001
From: Ghommie <42542238+Ghommie@users.noreply.github.com>
Date: Sat, 18 Jan 2020 03:37:30 +0100
Subject: [PATCH 14/41] fug
---
code/modules/uplink/uplink_items/uplink_clothing.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm
index 2f8391c637..3a3c53288a 100644
--- a/code/modules/uplink/uplink_items/uplink_clothing.dm
+++ b/code/modules/uplink/uplink_items/uplink_clothing.dm
@@ -29,14 +29,14 @@
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/suits/kevlar
- name = "Kevlar sheets"
+ name = "Kevlar Padding"
desc = "An inconspicious kevlar padding meant to be worn underneath jumpsuits, will cushion the wearer from ballistic harm."
item = /obj/item/clothing/accessory/kevlar
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/suits/plastic
- name = "Plastic sheet"
+ name = "Ablative Padding"
desc = "An inconspicious ablative padding meant to be worn underneath jumpsuits, will cushion the wearer from energy lasers harm."
item = /obj/item/clothing/accessory/plastics
cost = 2
From 54a2b32f4241d40fd1989fa1db1c0f895322bbaa Mon Sep 17 00:00:00 2001
From: chefferz
Date: Fri, 17 Jan 2020 23:55:44 -0500
Subject: [PATCH 15/41] Update console.dm
---
code/modules/antagonists/abductor/machinery/console.dm | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index 47294bc766..b8d5b1bf6d 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -46,7 +46,6 @@
dat += "Advanced Baton (2 Credits)
"
dat += "Mental Interface Device (2 Credits)
"
dat += "Reagent Synthesizer (2 Credits)
"
- dat += "Shrink Ray Blaster (2 Credits)
"
dat += "Agent Helmet (1 Credit)
"
dat += "Agent Vest (1 Credit)
"
dat += "Radio Silencer (1 Credit)
"
@@ -119,8 +118,6 @@
Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2)
if("tongue")
Dispense(/obj/item/organ/tongue/abductor)
- if("shrink_ray")
- Dispense(/obj/item/gun/energy/shrink_ray,cost=2)
updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
@@ -245,4 +242,4 @@
new item(drop_location)
else
- say("Insufficent data!")
\ No newline at end of file
+ say("Insufficent data!")
From c612462b8c8ff179e5d5fa1ff006fac709facc39 Mon Sep 17 00:00:00 2001
From: Putnam
Date: Sat, 18 Jan 2020 03:39:27 -0800
Subject: [PATCH 16/41] some demodularization + new eligibility stuff
---
.../datums/elements/ghost_role_eligibility.dm | 2 +
code/modules/admin/admin.dm | 40 +++++++++--
code/modules/admin/topic.dm | 69 ++++++++++++++++++-
modular_citadel/code/modules/admin/admin.dm | 39 -----------
modular_citadel/code/modules/admin/topic.dm | 59 ----------------
tgstation.dme | 2 -
6 files changed, 106 insertions(+), 105 deletions(-)
delete mode 100644 modular_citadel/code/modules/admin/admin.dm
delete mode 100644 modular_citadel/code/modules/admin/topic.dm
diff --git a/code/datums/elements/ghost_role_eligibility.dm b/code/datums/elements/ghost_role_eligibility.dm
index 8ecb579bc8..e57aaddd5a 100644
--- a/code/datums/elements/ghost_role_eligibility.dm
+++ b/code/datums/elements/ghost_role_eligibility.dm
@@ -22,6 +22,8 @@
if(!(M.ckey in timeouts))
timeouts += M.ckey
timeouts[M.ckey] = 0
+ else if(timeouts[M.ckey] == CANT_REENTER_ROUND)
+ return
timeouts[M.ckey] = max(timeouts[M.ckey],penalty)
/datum/element/ghost_role_eligibility/Detach(mob/M)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 88e68158ed..372902e8d6 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -185,7 +185,6 @@
body += "Shade"
body += "
"
- if (M.client)
body += "
"
body += "Other actions:"
body += "
"
@@ -194,9 +193,9 @@
body += "Thunderdome 2 | "
body += "Thunderdome Admin | "
body += "Thunderdome Observer | "
-
- body += usr.client.citaPPoptions(M) // CITADEL
-
+ body += "Make mentor | "
+ body += "Remove mentor"
+ body += "Allow reentering round"
body += "
"
body += "