Object Examine Text Overhaul (#20923)

Extends and reworks how various extended information text (desc_info,
desc_build, desc_upgrades) are handled to make object interactions and
mechanics A.) much more clearly documented in-game and B.) much easier
to support from the back-end.

Almost certainly a candidate for test merge.

Assembly/Disassembly instructions are noticeably sporadic, largely due
to our current lack of a unified framework. That's a future thing I'd
like to attack so that it can be handled programmatically, but for now I
only targeted the biggest culprits as I came across them.

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
This commit is contained in:
Batrachophreno
2025-07-21 15:35:14 +00:00
committed by GitHub
parent 827985ea9f
commit 387cee9243
391 changed files with 4203 additions and 2828 deletions
+8 -8
View File
@@ -15,6 +15,14 @@
var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = null
/obj/item/device/assembly_holder/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1 || src.loc == user)
if (src.secured)
. += SPAN_NOTICE("\The [src] is ready!")
else
. += SPAN_NOTICE("\The [src] can be attached!")
/obj/item/device/assembly_holder/Initialize(mapload, ...)
. = ..()
become_hearing_sensitive()
@@ -82,14 +90,6 @@
if(master)
master.update_icon()
/obj/item/device/assembly_holder/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 1 || src.loc == user)
if (src.secured)
. += SPAN_NOTICE("\The [src] is ready!")
else
. += SPAN_NOTICE("\The [src] can be attached!")
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
if(a_left)
a_left.HasProximity(AM)
+5 -5
View File
@@ -15,6 +15,11 @@
var/obj/effect/beam/i_beam/first = null
var/turf/beam_origin //If we're not on this turf anymore, we've moved. Catches holder.master movements when we're attached to bombs and stuff.
/obj/item/device/assembly/infra/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/direction_text = dir2text(dir)
. += SPAN_NOTICE("It is facing [direction_text].")
/obj/item/device/assembly/infra/activate()
if(!..())
return FALSE //Cooldown check
@@ -58,11 +63,6 @@
to_chat(user, SPAN_NOTICE("You rotate \the [src] to face [direction_text]."))
QDEL_NULL(first)
/obj/item/device/assembly/infra/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
var/direction_text = dir2text(dir)
. += SPAN_NOTICE("It is facing [direction_text].")
/obj/item/device/assembly/infra/process()
if(!on || !secured)
+9
View File
@@ -20,6 +20,15 @@
var/datum/radio_frequency/radio_connection
var/deadman = FALSE
/obj/item/device/assembly/signaler/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Signalers can be attached to a variety of machinery to remotely activate them."
. += "Signalers can be to individual wires within machinery; when a signal is received, it will pulse the wire much like a multitool."
/obj/item/device/assembly/signaler/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Signalers can be attached to a variety of machinery to do unspeakable harm or serve as fantastic diversions."
/obj/item/device/assembly/signaler/Initialize()
. = ..()
set_frequency(frequency)
@@ -4,8 +4,6 @@
/obj/machinery/atmospherics/binary/circulator
name = "circulator"
desc = "A gas circulator turbine and heat exchanger."
desc_info = "This generates electricity, depending on the difference in temperature between each side of the machine. The meter in \
the center of the machine gives an indicator of how much elecrtricity is being generated."
icon = 'icons/obj/power.dmi'
icon_state = "circ-unassembled"
anchored = FALSE
@@ -26,6 +24,11 @@
density = TRUE
/obj/machinery/atmospherics/binary/circulator/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This generates electricity, depending on the difference in temperature between each side of the machine."
. += "The meter in the center of the machine gives an indicator of how much elecrtricity is being generated."
/obj/machinery/atmospherics/binary/circulator/Initialize()
. = ..()
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
@@ -5,7 +5,6 @@
/obj/machinery/atmospherics/binary/passive_gate
name = "pressure regulator"
desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. Does not require power."
desc_info = "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate. If the light is green, it is flowing."
icon = 'icons/atmos/passive_gate.dmi'
icon_state = "map"
level = 1
@@ -26,8 +25,14 @@
var/broadcast_status_next_process = FALSE
/obj/machinery/atmospherics/binary/passive_gate/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate."
. += "If the light is green, it is flowing."
/obj/machinery/atmospherics/binary/passive_gate/on
unlocked = 1
/obj/machinery/atmospherics/binary/passive_gate/on/input
regulate_mode = REGULATE_INPUT
@@ -15,7 +15,6 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/binary/pump
name = "gas pump"
desc = "A pump."
desc_info = "This moves gas from one pipe to another. A higher target pressure demands more energy. The side with the colored end is the output."
icon = 'icons/atmos/pump.dmi'
icon_state = "map_off"
level = 1
@@ -37,6 +36,11 @@ Thus, the two variables affect pump operation are set in New():
var/broadcast_status_next_process = FALSE
/obj/machinery/atmospherics/binary/pump/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This moves gas from one pipe to another. A higher target pressure demands more energy."
. += "The side with the colored end is the output."
/obj/machinery/atmospherics/binary/pump/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
@@ -5,8 +5,6 @@
name = "omni gas filter"
icon_state = "map_filter"
base_icon = "filter"
desc_info = "Filters gas from a custom input direction, with up to two filtered outputs and a 'everything else' \
output. The filtered output's arrows glow orange."
var/list/active_filters = new()
var/datum/omni_port/input
@@ -20,6 +18,11 @@
var/list/filtering_outputs = list() //maps gasids to gas_mixtures
/obj/machinery/atmospherics/omni/filter/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Filters gas from a custom input direction, with up to two filtered outputs and an 'everything else' output."
. += "The filtered output's arrows glow orange."
/obj/machinery/atmospherics/omni/filter/Initialize()
. = ..()
rebuild_filtering_list()
@@ -5,7 +5,6 @@
name = "omni gas mixer"
icon_state = "map_mixer"
base_icon = "mixer"
desc_info = "Combines gas from custom input and output directions. The percentage of combined gas can be defined."
use_power = POWER_USE_IDLE
idle_power_usage = 150 //internal circuitry, friction losses and stuff
@@ -25,6 +24,10 @@
var/list/mixing_inputs = list()
/obj/machinery/atmospherics/omni/mixer/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Combines gas from custom input and output directions. The percentage of combined gas can be defined."
/obj/machinery/atmospherics/omni/mixer/Initialize()
. = ..()
if(mapper_set())
@@ -1,7 +1,6 @@
/obj/machinery/atmospherics/tvalve
name = "manual switching valve"
desc = "A pipe valve."
desc_info = "Click this to toggle the mode. The direction with the green light is where the gas will flow."
icon = 'icons/atmos/tvalve.dmi'
icon_state = "map_tvalve0"
@@ -18,6 +17,10 @@
var/datum/pipe_network/network_node2
var/datum/pipe_network/network_node3
/obj/machinery/atmospherics/tvalve/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click this to toggle the mode. The direction with the green light is where the gas will flow."
/obj/machinery/atmospherics/tvalve/bypass
icon_state = "map_tvalve1"
state = 1
@@ -4,9 +4,6 @@
/obj/machinery/atmospherics/unary/freezer
name = "gas cooling system"
desc = "Cools gas when connected to pipe network."
desc_info = "Cools down the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \
It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \
screwdriver, and then using a crowbar."
icon = 'icons/obj/machinery/sleeper.dmi'
icon_state = "freezer_0"
density = 1
@@ -31,12 +28,18 @@
/obj/item/stack/cable_coil{amount = 2}
)
component_hint_bin = "Upgraded <b>matter bins</b> will improve cooling efficiency and increase the volume of air it can cool at once."
component_hint_cap = "Upgraded <b>capacitors</b> will increase maximum power setting."
component_hint_servo = "Upgraded <b>manipulators</b> will improve cooling efficiency."
parts_power_mgmt = FALSE
/obj/machinery/atmospherics/unary/freezer/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Cools down the gas of the pipe it is connected to. It uses massive amounts of electricity while on."
/obj/machinery/atmospherics/unary/freezer/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>matter bins</b> will improve cooling efficiency and increase the volume of air it can cool at once."
. += "Upgraded <b>capacitors</b> will increase maximum power setting."
. += "Upgraded <b>manipulators</b> will improve cooling efficiency."
/obj/machinery/atmospherics/unary/freezer/Initialize()
initialize_directions = dir
. = ..()
@@ -186,8 +189,3 @@
return TRUE
return ..()
/obj/machinery/atmospherics/unary/freezer/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(panel_open)
. += "The maintenance hatch is open."
@@ -4,9 +4,6 @@
/obj/machinery/atmospherics/unary/heater
name = "gas heating system"
desc = "Heats gas when connected to a pipe network."
desc_info = "Heats up the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \
It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \
screwdriver, and then using a crowbar."
icon = 'icons/obj/machinery/sleeper.dmi'
icon_state = "heater_0"
density = 1
@@ -30,8 +27,14 @@
/obj/item/stack/cable_coil{amount = 5}
)
component_hint_bin = "Upgraded <b>matter bins</b> will increase maximum temperature setting and the volume of air it can heat at once."
component_hint_cap = "Upgraded <b>capacitors</b> will increase maximum power setting and maximum temperature setting."
/obj/machinery/atmospherics/unary/heater/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "heats up the gas of the pipe it is connected to. It uses massive amounts of electricity while on."
/obj/machinery/atmospherics/unary/heater/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>matter bins</b> will increase maximum temperature setting and the volume of air it can heat at once."
. += "Upgraded <b>capacitors</b> will increase maximum power setting and maximum temperature setting."
/obj/machinery/atmospherics/unary/heater/Initialize()
initialize_directions = dir
@@ -171,8 +174,3 @@
return TRUE
return ..()
/obj/machinery/atmospherics/unary/heater/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(panel_open)
. += "The maintenance hatch is open."
@@ -5,8 +5,6 @@
/obj/machinery/atmospherics/unary/outlet_injector
name = "air injector"
desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate."
desc_info = "Outputs the pipe's gas into the atmosphere, similar to an airvent. It can be controlled by a nearby atmospherics computer. \
A green light on it means it is on."
icon = 'icons/atmos/injector.dmi'
icon_state = "map_injector"
@@ -26,6 +24,12 @@
level = 1
/obj/machinery/atmospherics/unary/outlet_injector/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Outputs the pipe's gas into the atmosphere, similar to an airvent."
. += "It can be controlled by a nearby atmospherics computer."
. += "A green light on it means it is on."
/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more.
@@ -10,7 +10,6 @@
/obj/machinery/atmospherics/unary/vent_pump
name = "air vent"
desc = "Has a valve and pump attached to it."
desc_info = "This pumps the contents of the attached pipe out into the atmosphere, if needed. It can be controlled from an Air Alarm."
icon = 'icons/atmos/vent_pump.dmi'
icon_state = "map_vent"
@@ -51,6 +50,20 @@
var/broadcast_status_next_process = FALSE
/obj/machinery/atmospherics/unary/vent_pump/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This pumps the contents of the attached pipe out into the atmosphere, if needed."
. += "It can be controlled from an Air Alarm."
/obj/machinery/atmospherics/unary/vent_pump/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1)
. += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s at [round(last_power_draw)] W."
else
. += "You are too far away to read the gauge."
if(welded)
. += "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_pump/on
use_power = POWER_USE_IDLE
icon_state = "map_vent_out"
@@ -455,15 +468,6 @@
return ..()
/obj/machinery/atmospherics/unary/vent_pump/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 1)
. += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s at [round(last_power_draw)] W."
else
. += "You are too far away to read the gauge."
if(welded)
. += "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_pump/power_change()
var/old_stat = stat
..()
@@ -1,8 +1,6 @@
/obj/machinery/atmospherics/unary/vent_scrubber
name = "air scrubber"
desc = "Has a valve and pump attached to it."
desc_info = "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe. \
It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm."
icon = 'icons/atmos/vent_scrubber.dmi'
icon_state = "map_scrubber_off"
@@ -33,6 +31,21 @@
var/broadcast_status_next_process = FALSE
/obj/machinery/atmospherics/unary/vent_scrubber/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe."
. += "It can be controlled from an Air Alarm."
. += "It can be configured to drain all air rapidly with a 'panic siphon' from an air alarm."
/obj/machinery/atmospherics/unary/vent_scrubber/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1)
. += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s at [round(last_power_draw)] W."
else
. += "You are too far away to read the gauge."
if(welded)
. += "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_scrubber/on
use_power = POWER_USE_IDLE
icon_state = "map_scrubber_on"
@@ -416,12 +429,3 @@
return TRUE
return ..()
/obj/machinery/atmospherics/unary/vent_scrubber/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 1)
. += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s at [round(last_power_draw)] W."
else
. += "You are too far away to read the gauge."
if(welded)
. += "It seems welded shut."
@@ -1,7 +1,6 @@
/obj/machinery/atmospherics/valve
name = "manual valve"
desc = "A pipe valve."
desc_info = "Click this to turn the valve. If red, the pipes on each end are seperated. Otherwise, they are connected."
icon = 'icons/atmos/valve.dmi'
icon_state = "map_valve0"
@@ -15,6 +14,15 @@
var/datum/pipe_network/network_node1
var/datum/pipe_network/network_node2
/obj/machinery/atmospherics/valve/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += "It is [open ? "open" : "closed"]."
/obj/machinery/atmospherics/valve/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click this to turn the valve."
. += "If red, the pipes on each end are seperated. Otherwise, they are connected."
/obj/machinery/atmospherics/valve/open
open = 1
icon_state = "map_valve1"
@@ -323,7 +331,3 @@
new /obj/item/pipe(loc, make_from=src)
qdel(src)
return TRUE
/obj/machinery/atmospherics/valve/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
. += "It is [open ? "open" : "closed"]."
+5 -1
View File
@@ -1,5 +1,4 @@
/obj/machinery/atmospherics/pipe/simple/heat_exchanging
desc_info = "This radiates heat from the pipe's gas to space, cooling it down."
icon = 'icons/atmos/heat.dmi'
icon_state = "intact"
pipe_icon = "hepipe"
@@ -19,6 +18,11 @@
volume = ATMOS_DEFAULT_VOLUME_HE_PIPE
// BubbleWrap
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This radiates heat from the pipe's gas to space, cooling it down."
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize()
. = ..()
initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe
+32 -70
View File
@@ -1,6 +1,4 @@
/obj/machinery/atmospherics/pipe
desc_info = "This pipe, and all other pipes, can be connected or disconnected by a wrench. The internal pressure of the pipe must \
be below 300 kPa to do this. More pipes can be obtained from the pipe dispenser."
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke
var/datum/pipeline/parent
@@ -16,18 +14,17 @@
buckle_require_restraints = 1
buckle_lying = -1
/obj/machinery/atmospherics/pipe/drain_power()
return -1
/obj/machinery/atmospherics/pipe/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This pipe, and all other pipes, can be safely connected or disconnected by a pipe wrench. The internal pressure of the pipe must \
be below 300 kPa to do this."
. += "Using a regular wrench on a pressurized pipe is not a good idea."
. += "Special pipe types, like Supply, Scrubber, Fuel, and Aux, will not connect to normal pipes or to each other. If you want to connect them, use \
a Universal Adapter pipe."
. += "Use an Analyzer on a pipe to get details on its contents."
/obj/machinery/atmospherics/pipe/Initialize()
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/unsimulated/wall))
level = 1
. = ..()
desc_info += "<br>Most pipes and atmospheric devices can be connected or disconnected with a wrench. The pipe's pressure must not be too high, \
or if it is a device, it must be turned off first."
/obj/machinery/atmospherics/pipe/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/machinery/atmospherics/pipe/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/pipe_color_check = pipe_color || PIPE_COLOR_GREY
var/found_color_name = "Unknown"
for(var/color_name in GLOB.pipe_colors)
@@ -37,6 +34,14 @@
break
. += "This pipe is: <span style='color:[pipe_color_check == PIPE_COLOR_GREY ? COLOR_GRAY : pipe_color_check]'>[capitalize(found_color_name)]</span>"
/obj/machinery/atmospherics/pipe/drain_power()
return -1
/obj/machinery/atmospherics/pipe/Initialize()
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/unsimulated/wall))
level = 1
. = ..()
/obj/machinery/atmospherics/pipe/hides_under_flooring()
return level != 2
@@ -351,16 +356,12 @@
return null
/obj/machinery/atmospherics/pipe/simple/visible
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact"
level = 2
/obj/machinery/atmospherics/pipe/simple/visible/scrubbers
name = "Scrubbers pipe"
desc = "A one meter section of scrubbers pipe."
desc_info = "This is a special 'scrubbers' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -369,8 +370,6 @@
/obj/machinery/atmospherics/pipe/simple/visible/supply
name = "Air supply pipe"
desc = "A one meter section of supply pipe"
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -379,8 +378,6 @@
/obj/machinery/atmospherics/pipe/simple/visible/fuel
name = "Fuel pipe"
desc = "A one meter section of fuel pipe."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -389,8 +386,6 @@
/obj/machinery/atmospherics/pipe/simple/visible/aux
name = "Auxiliary pipe"
desc = "A one meter section of auxiliary pipe."
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -425,8 +420,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers
name = "Scrubbers pipe"
desc = "A one meter section of scrubbers pipe."
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -435,8 +428,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply
name = "Air supply pipe"
desc = "A one meter section of supply pipe."
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -445,8 +436,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/fuel
name = "Fuel pipe"
desc = "A one meter section of fuel pipe."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -455,8 +444,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/aux
name = "Auxiliary pipe"
desc = "A one meter section of auxiliary pipe."
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "intact-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -486,7 +473,6 @@
/obj/machinery/atmospherics/pipe/manifold
name = "pipe manifold"
desc = "A manifold composed of regular pipes."
desc_info = "A normal pipe with three ends to connect to."
icon = 'icons/atmos/manifold.dmi'
icon_state = ""
@@ -680,8 +666,6 @@
/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers
name = "scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes"
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -690,8 +674,6 @@
/obj/machinery/atmospherics/pipe/manifold/visible/supply
name = "air supply pipe manifold"
desc = "A manifold composed of supply pipes."
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -700,8 +682,6 @@
/obj/machinery/atmospherics/pipe/manifold/visible/fuel
name = "fuel pipe manifold"
desc = "A manifold composed of fuel piping."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -710,8 +690,6 @@
/obj/machinery/atmospherics/pipe/manifold/visible/aux
name = "auxiliary pipe manifold"
desc = "A manifold composed of auxiliary piping."
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -746,8 +724,6 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers
name = "scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes."
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -756,8 +732,6 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply
name = "air supply pipe manifold"
desc = "A manifold composed of supply pipes."
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -766,8 +740,6 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/fuel
name = "Fuel pipe manifold"
desc = "A manifold composed of fuel pipes."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -776,8 +748,6 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/aux
name = "Auxiliary pipe"
desc = "A manifold composed of auxiliary pipes."
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -807,7 +777,6 @@
/obj/machinery/atmospherics/pipe/manifold4w
name = "4-way pipe manifold"
desc = "A manifold composed of regular pipes."
desc_info = "This is a four-way pipe."
icon = 'icons/atmos/manifold.dmi'
icon_state = ""
@@ -1003,8 +972,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers
name = "4-way scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes."
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -1013,8 +980,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/supply
name = "4-way air supply pipe manifold"
desc = "A manifold composed of supply pipes"
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -1023,8 +988,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel
name = "4-way fuel pipe manifold"
desc = "A manifold composed of fuel pipes."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -1033,8 +996,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/aux
name = "4-way auxiliary pipe manifold"
desc = "A manifold composed of auxiliary pipes"
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -1069,8 +1030,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers
name = "4-way scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes."
desc_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
icon_connect_type = "-scrubbers"
@@ -1079,8 +1038,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply
name = "4-way air supply pipe manifold"
desc = "A manifold composed of supply pipes."
desc_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY
icon_connect_type = "-supply"
@@ -1089,8 +1046,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel
name = "4-way fuel pipe manifold"
desc = "A manifold composed of fuel pipes."
desc_info = "This is a special 'fuel' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-fuel"
connect_types = CONNECT_TYPE_FUEL
icon_connect_type = "-fuel"
@@ -1099,8 +1054,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/aux
name = "4-way auxiliary pipe manifold"
desc = "A manifold composed of auxiliary pipes."
desc_info = "This is a special 'aux' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
icon_state = "map_4way-aux"
connect_types = CONNECT_TYPE_AUX
icon_connect_type = "-aux"
@@ -1130,7 +1083,6 @@
/obj/machinery/atmospherics/pipe/cap
name = "pipe endcap"
desc = "An endcap for pipes"
desc_info = "This is a cosmetic attachment, as pipes do not spill their contents into the air."
icon = 'icons/atmos/pipes.dmi'
icon_state = ""
level = 2
@@ -1142,6 +1094,10 @@
var/obj/machinery/atmospherics/node
/obj/machinery/atmospherics/pipe/cap/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This is a cosmetic attachment, as pipes do not spill their contents into the air."
/obj/machinery/atmospherics/pipe/cap/Initialize()
initialize_directions = dir
. = ..()
@@ -1465,11 +1421,15 @@
/obj/machinery/atmospherics/pipe/simple/visible/universal
name = "universal pipe adapter"
desc = "An adapter for regular, supply, scrubbers, fuel, and auxiliary pipes."
desc_info = "This allows you to connect 'normal' pipes, blue 'supply' pipes, red 'scrubber' pipes, yellow 'fuel' pipes, and cyan 'aux' pipes together."
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_AUX
icon_state = "map_universal"
gfi_layer_rotation = GFI_ROTATION_OVERDIR
/obj/machinery/atmospherics/pipe/simple/visible/universal/mechanics_hints(mob/user, distance, is_adjacent)
. = list()
. += "This allows you to connect 'normal' pipes, blue 'supply' pipes, red 'scrubber' pipes, yellow 'fuel' pipes, and cyan 'aux' pipes together."
. += ..()
/obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0)
if(!check_icon_cache())
return
@@ -1497,16 +1457,18 @@
..()
queue_icon_update()
/obj/machinery/atmospherics/pipe/simple/hidden/universal
name = "universal pipe adapter"
desc = "An adapter for regular, supply, scrubbers, fuel, and auxiliary pipes."
desc_info = "This allows you to connect 'normal' pipes, blue 'supply' pipes, red 'scrubber' pipes, yellow 'fuel' pipes, and cyan 'aux' pipes together."
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_AUX
icon_state = "map_universal"
gfi_layer_rotation = GFI_ROTATION_OVERDIR
/obj/machinery/atmospherics/pipe/simple/hidden/universal/mechanics_hints(mob/user, distance, is_adjacent)
. = list()
. += "This allows you to connect 'normal' pipes, blue 'supply' pipes, red 'scrubber' pipes, yellow 'fuel' pipes, and cyan 'aux' pipes together."
. += ..()
/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0)
if(!check_icon_cache())
return
+14 -14
View File
@@ -15,6 +15,20 @@
//Card information here
/obj/item/battle_monsters/card/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(facedown && src.loc != user)
. += SPAN_NOTICE("You can't examine \the [src] while it's face down!")
return
if(trap_datum)
SSbattle_monsters.ExamineTrapCard(user,trap_datum)
else if(spell_datum)
SSbattle_monsters.ExamineSpellCard(user,spell_datum)
else
SSbattle_monsters.ExamineMonsterCard(user,prefix_datum,root_datum,suffix_datum)
/obj/item/battle_monsters/card/Initialize(var/mapload,var/prefix,var/root,var/title,var/trap,var/spell)
. = ..()
Generate_Card(prefix, root, title, trap, spell)
@@ -164,20 +178,6 @@
transform = M
/obj/item/battle_monsters/card/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(facedown && src.loc != user)
. += SPAN_NOTICE("You can't examine \the [src] while it's face down!")
return
if(trap_datum)
SSbattle_monsters.ExamineTrapCard(user,trap_datum)
else if(spell_datum)
SSbattle_monsters.ExamineSpellCard(user,spell_datum)
else
SSbattle_monsters.ExamineMonsterCard(user,prefix_datum,root_datum,suffix_datum)
/obj/item/battle_monsters/card/MouseEntered(location, control, params)
. = ..()
if(!facedown || Adjacent(usr))
+10 -6
View File
@@ -1,7 +1,6 @@
/obj/item/cargo_backpack
name = "cargo pack"
desc = "A robust set of rigs and buckles that allows the wearer to carry two additional Orion Express delivery packages on their back."
desc_info = "To load packages onto your back, equip this item on the back slot, then click on it with a package in-hand. To unload a package, click on this item with an empty hand."
icon = 'icons/obj/orion_delivery.dmi'
icon_state = "package_pack"
item_state = "package_pack"
@@ -13,15 +12,20 @@
var/list/contained_packages
/obj/item/cargo_backpack/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To load packages onto your back, equip this item on the back slot, then click on it with a package in-hand."
. += "To unload a package, click on this item with an empty hand."
/obj/item/cargo_backpack/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(length(contained_packages))
. += SPAN_NOTICE("\[?\] There are some packages loaded. <a href='byond://?src=[REF(src)];show_package_data=1>\[Show Package Data\]</a>")
/obj/item/cargo_backpack/Destroy()
QDEL_LIST(contained_packages)
return ..()
/obj/item/cargo_backpack/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(length(contained_packages))
. += FONT_SMALL(SPAN_NOTICE("\[?\] There are some packages loaded. <a href='byond://?src=[REF(src)];show_package_data=1>\[Show Package Data\]</a>"))
/obj/item/cargo_backpack/Topic(href, href_list)
if(href_list["show_package_data"])
ui_interact(usr)
+23 -23
View File
@@ -7,12 +7,7 @@
desc_extended = "\
This package makes use of the small-scale shipping network of Orion Express. \
It is a common sight all over the Spur, where Orion Express services depend on ordinary people and ships picking up and delivering packages for each other, \
with Orion Express only delivering to automated stations and other distribution points.\
"
desc_info = "\
You can deliver this package to a cargo delivery point. \
An additional 2% is added to your account on delivery, or paid to you directly. Can be loaded into a cargo pack.\
"
with Orion Express only delivering to automated stations and other distribution points."
icon = 'icons/obj/orion_delivery.dmi'
icon_state = "express_package"
item_state = "express_package"
@@ -37,6 +32,23 @@
/// If true, pay_amount goes into Operations Account
var/pays_horizon_account = TRUE
/obj/item/cargo_package/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can deliver this package to a cargo delivery point."
. += "An additional 2% is added to your account on delivery, or paid to you directly. Can be loaded into a cargo pack."
/obj/item/cargo_package/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(delivery_point_id)
// if name not already set by cargo receptacle, acquire the sector name instead
if(delivery_site == "Unknown")
if(delivery_point_sector)
var/obj/effect/overmap/visitable/delivery_sector = delivery_point_sector.resolve()
if(delivery_sector)
delivery_site = delivery_sector.name
. += SPAN_NOTICE("The label on the package reads: SITE: <b>[delivery_site]</b> | COORD: <b>[delivery_point_coordinates]</b> | ID: <b>[delivery_point_id]</b>")
. += SPAN_NOTICE("The price tag on the package reads: <b>[pay_amount]电</b>.")
/obj/item/cargo_package/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point)
. = ..()
pay_amount = rand(4, 7) * 1000
@@ -55,18 +67,6 @@
delivery_point_coordinates = "[delivery_point.x]-[delivery_point.y]"
pay_amount = pay_amount * delivery_point.payment_modifier
/obj/item/cargo_package/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(delivery_point_id)
// if name not already set by cargo receptacle, acquire the sector name instead
if(delivery_site == "Unknown")
if(delivery_point_sector)
var/obj/effect/overmap/visitable/delivery_sector = delivery_point_sector.resolve()
if(delivery_sector)
delivery_site = delivery_sector.name
. += SPAN_NOTICE("The label on the package reads: SITE: <b>[delivery_site]</b> | COORD: <b>[delivery_point_coordinates]</b> | ID: <b>[delivery_point_id]</b>")
. += SPAN_NOTICE("The price tag on the package reads: <b>[pay_amount]电</b>.")
/obj/item/cargo_package/do_additional_pickup_checks(var/mob/living/carbon/human/user)
if(!ishuman(user))
return FALSE
@@ -126,6 +126,11 @@
/// Whether this package is guaranteed to deliver to the horizon or not
var/horizon_delivery = FALSE
/obj/item/cargo_package/offship/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(!delivery_point_id)
. += SPAN_NOTICE("Delivery site still being calculated, please check back later!")
/obj/item/cargo_package/offship/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point)
. = ..()
@@ -140,10 +145,5 @@
return
setup_delivery_point(selected_delivery_point)
/obj/item/cargo_package/offship/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(!delivery_point_id)
. += SPAN_NOTICE("Delivery site still being calculated, please check back later!")
/obj/item/cargo_package/offship/to_horizon
horizon_delivery = TRUE
+6 -6
View File
@@ -9,12 +9,7 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l
desc_extended = "\
These are set up by Orion to expand its small-scale shipping network, especially in more remote areas, like outer edges of the Frontier or Coalition. \
It is a common sight all over the Spur, however, where Orion Express services depend on ordinary people and ships picking up and delivering packages for each other, \
with Orion Express only delivering to automated stations and other distribution points.\
"
desc_info = "\
This is a delivery point for Orion Express cargo packages. \
To finish the delivery, have a cargo package in your hand and click on the delivery point.\
"
with Orion Express only delivering to automated stations and other distribution points."
icon = 'icons/obj/orion_delivery.dmi'
icon_state = "delivery_point"
@@ -31,6 +26,11 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l
/// Maximum amount of packages that can spawn for this receptacle. INTEGER
var/max_spawn = 4
/obj/structure/cargo_receptacle/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This is a delivery point for Orion Express cargo packages."
. += "To finish the delivery, have a cargo package in your hand and click on the delivery point."
/obj/structure/cargo_receptacle/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
+4 -1
View File
@@ -3,7 +3,6 @@
name = "Human Resources Recorder"
desc = "A modified recorder used for interviews by human resources personnel around the galaxy."
desc_extended = "This recorder is a modified version of a standard universal recorder. It features additional audit-proof records keeping, access controls and is tied to a central management system."
desc_info = "This recorder records the fingerprints of the interviewee, to do so, interact with this recorder when asked."
w_class = WEIGHT_CLASS_TINY
timestamp = list() //This actually turns timestamp into a string later on
@@ -31,6 +30,10 @@
var/interviewee_name = null
var/date_string = null
/obj/item/device/taperecorder/cciaa/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This recorder records the fingerprints of the interviewee, to do so, interact with this recorder when asked."
/obj/item/device/taperecorder/cciaa/hear_talk(mob/living/M as mob, msg, var/verb="says")
if(recording && !paused)
timestamp = "[get_time()]"
+11 -5
View File
@@ -382,10 +382,6 @@
/obj/item/gun/energy/chameleon
name = "desert eagle"
desc = null
desc_info = null //The chameleon gun adopts the desc_info of the weapon it is impersonating as, to make meta-ing harder.
desc_antag = "This gun is actually a hologram projector that can alter its appearance to mimick other weapons. To change the appearance, use \
the appropriate verb in the chameleon items tab. Any beams or projectiles fired from this gun are actually holograms and useless for actual combat. \
Projecting these holograms over distance uses a little bit of charge."
icon = 'icons/obj/guns/deagle.dmi'
icon_state = "deagle"
w_class = WEIGHT_CLASS_NORMAL
@@ -401,6 +397,17 @@
var/obj/projectile/copy_projectile
var/global/list/gun_choices
/obj/item/gun/energy/chameleon/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Exactly as it appears, officer."
/obj/item/gun/energy/chameleon/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This gun is actually a hologram projector that can alter its appearance to mimick other weapons. "
. += "To change the appearance, use the appropriate verb in the chameleon items tab."
. += "Any beams or projectiles fired from this gun are actually holograms and useless for actual combat."
. += "Projecting these holograms over distance uses a little bit of charge."
/obj/item/gun/energy/chameleon/Initialize()
. = ..()
@@ -447,7 +454,6 @@
if(istype(E))
copy_projectile = E.projectile_type
desc = E.desc
desc_info = E.desc_info
else
copy_projectile = null
+13 -13
View File
@@ -1148,6 +1148,19 @@
valid_accessory_slots = list(ACCESSORY_SLOT_UTILITY, ACCESSORY_SLOT_UTILITY_MINOR, ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_GENERIC, ACCESSORY_SLOT_CAPE)
restricted_accessory_slots = list(ACCESSORY_SLOT_UTILITY)
/obj/item/clothing/under/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(has_sensor)
switch(src.sensor_mode)
if(SUIT_SENSOR_OFF)
. += "Its sensors appear to be disabled."
if(SUIT_SENSOR_BINARY)
. += "Its binary life sensors appear to be enabled."
if(SUIT_SENSOR_VITAL)
. += "Its vitals tracker appears to be enabled."
if(SUIT_SENSOR_TRACKING)
. += "Its vitals tracker and tracking beacon appear to be enabled."
/obj/item/clothing/under/attack_hand(var/mob/user)
if(LAZYLEN(accessories))
..()
@@ -1271,19 +1284,6 @@
M.update_inv_w_uniform()
playsound(M, /singleton/sound_category/rustle_sound, 15, TRUE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE)
/obj/item/clothing/under/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(has_sensor)
switch(src.sensor_mode)
if(SUIT_SENSOR_OFF)
. += "Its sensors appear to be disabled."
if(SUIT_SENSOR_BINARY)
. += "Its binary life sensors appear to be enabled."
if(SUIT_SENSOR_VITAL)
. += "Its vitals tracker appears to be enabled."
if(SUIT_SENSOR_TRACKING)
. += "Its vitals tracker and tracking beacon appear to be enabled."
/obj/item/clothing/under/proc/set_sensors(mob/user as mob)
var/mob/M = user
if (isobserver(M) || user.incapacitated())
+4 -1
View File
@@ -1109,7 +1109,6 @@ BLIND // can't see anything
/obj/item/clothing/glasses/thermal/aviator
name = "aviators"
desc = "A pair of designer sunglasses. They should put HUDs in these."
desc_antag = "Modified aviator glasses with a toggled thermal-vision mode."
icon_state = "aviator_thr"
off_state = "aviator_off"
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
@@ -1117,6 +1116,10 @@ BLIND // can't see anything
activation_sound = 'sound/effects/pop.ogg'
prescription = 7
/obj/item/clothing/glasses/thermal/aviator/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Modified aviator glasses with a toggled thermal-vision mode."
/obj/item/clothing/glasses/thermal/aviator/verb/toggle()
set category = "Object"
set name = "Toggle Aviators"
@@ -56,7 +56,6 @@
/obj/item/clothing/gloves/latex
name = "latex gloves"
desc = "Sterile latex gloves."
desc_info = "You can make balloons with these using some cable coil."
icon_state = "latex"
item_state = "latex"
siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC)
@@ -67,6 +66,10 @@
pickup_sound = 'sound/items/pickup/rubber.ogg'
var/balloon = /obj/item/toy/balloon/latex
/obj/item/clothing/gloves/latex/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can make balloons with these using some cable coil."
/obj/item/clothing/gloves/latex/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = attacking_item
+5 -1
View File
@@ -234,7 +234,6 @@
/obj/item/clothing/head/cone
name = "warning cone"
desc = "This cone is trying to warn you of something!"
desc_info = "It looks like you can wear it in your head slot."
icon_state = "cone"
item_state = "cone"
drop_sound = 'sound/items/drop/shoes.ogg'
@@ -247,3 +246,8 @@
body_parts_covered = HEAD
attack_verb = list("warned", "cautioned", "smashed")
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/cone/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "It looks like you can wear it in your head slot."
+8 -2
View File
@@ -8,7 +8,10 @@
/obj/item/clothing/mask/gas/voice
var/obj/item/voice_changer/changer
origin_tech = list(TECH_ILLEGAL = 4)
desc_antag = "This mask can be used to change the owner's voice."
/obj/item/clothing/mask/gas/voice/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This mask can be used to change the owner's voice."
/obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer()
set category = "Object"
@@ -42,7 +45,10 @@
/obj/item/clothing/mask/gas/vaurca/filter/voice
var/obj/item/voice_changer/changer
origin_tech = list(TECH_ILLEGAL = 4)
desc_antag = "A Lii'draic filter port that allows to change voices."
/obj/item/clothing/mask/gas/vaurca/filter/voice/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "A Lii'draic filter port that allows to change voices."
/obj/item/clothing/mask/gas/vaurca/filter/voice/verb/Toggle_Voice_Changer()
set category = "Object"
+4 -1
View File
@@ -38,11 +38,14 @@
/obj/item/clothing/ring/reagent/sleepy
name = "silver ring"
desc = "A ring made from what appears to be silver."
desc_antag = "This ring has a hidden injector that will activate when worn, administering a strong sedative. It is safe to hold in your hands."
icon_state = "material"
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
reagents_to_add = list(/singleton/reagent/polysomnine = 10)
/obj/item/clothing/ring/reagent/sleepy/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This ring has a hidden injector that will activate when worn, administering a strong sedative. It is safe to hold in your hands."
//Seals and Signet Rings
/obj/item/clothing/ring/seal/mason
+4 -1
View File
@@ -4,7 +4,6 @@
/obj/item/clothing/suit/armor/riot/laser_tag
name = "laser tag armor"
desc = "A set of laser tag armor. Very swanky."
desc_info = "You can alt-click this while holding or wearing it to set how many laser tag shots you want to be able to take before going down."
icon = 'icons/obj/item/clothing/suit/armor/laser_tag.dmi'
icon_state = "vest"
item_state = "vest"
@@ -23,6 +22,10 @@
var/set_health = 3
var/current_health
/obj/item/clothing/suit/armor/riot/laser_tag/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can alt-click this while holding or wearing it to set how many laser tag shots you want to be able to take before going down."
/obj/item/clothing/suit/armor/riot/laser_tag/Initialize(mapload, material_key)
. = ..()
get_tag_color(laser_tag_color)
+7 -7
View File
@@ -19,6 +19,13 @@
drop_sound = 'sound/items/drop/toolbox.ogg'
pickup_sound = 'sound/items/pickup/toolbox.ogg'
/obj/item/clothing/shoes/magboots/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/state = "disabled"
if(item_flags & ITEM_FLAG_NO_SLIP)
state = "enabled"
. += "Its mag-pulse traction system appears to be [state]."
/obj/item/clothing/shoes/magboots/Destroy()
. = ..()
src.shoes = null
@@ -106,13 +113,6 @@
if (.)
INVOKE_ASYNC(src, PROC_REF(update_wearer))
/obj/item/clothing/shoes/magboots/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
var/state = "disabled"
if(item_flags & ITEM_FLAG_NO_SLIP)
state = "enabled"
. += "Its mag-pulse traction system appears to be [state]."
/obj/item/clothing/shoes/magboots/hegemony
name = "hegemony magboots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear. This variant is frequently seen in the Hegemony Navy."
+14 -8
View File
@@ -42,30 +42,36 @@
/obj/item/clothing/head/helmet/space/syndicate/covert
name = "softsuit helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
desc_antag = "This helmet is specially armored for additional protection, compared to a standard softsuit helmet."
icon = 'icons/obj/item/clothing/softsuits/softsuit.dmi'
icon_state = "softsuit_helmet"
item_state = "softsuit_helmet"
contained_sprite = TRUE
/obj/item/clothing/head/helmet/space/syndicate/covert/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/clothing/head/helmet/space/syndicate/covert/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This helmet has extra armor compared to a standard softsuit helmet."
/obj/item/clothing/head/helmet/space/syndicate/covert/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1)
. += SPAN_NOTICE("This helmet has extra armor compared to a normal softsuit helmet.")
. += SPAN_ALERT("This helmet has extra armor compared to a normal softsuit helmet.")
/obj/item/clothing/suit/space/syndicate/covert
name = "softsuit"
desc = "A suit that protects against low pressure environments."
desc_antag = "This suit is specially armored for additional protection, compared to a standard softsuit."
icon = 'icons/obj/item/clothing/softsuits/softsuit.dmi'
icon_state = "softsuit"
item_state = "softsuit"
contained_sprite = TRUE
/obj/item/clothing/suit/space/syndicate/covert/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/clothing/suit/space/syndicate/covert/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This suit is specially armored for additional protection, compared to a standard softsuit."
/obj/item/clothing/suit/space/syndicate/covert/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1)
. += SPAN_NOTICE("This suit has extra armor compared to a normal softsuit.")
. += SPAN_ALERT("This suit has extra armor compared to a normal softsuit.")
//Green syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/green
+5 -1
View File
@@ -687,7 +687,6 @@
name = "wet floor sign"
desc = "Caution! Wet Floor!"
desc_extended = "Used by the janitor to passive-aggressively point at when you eventually slip on one of their mopped floors."
desc_info = "Alt-click, or click in-hand to toggle the caution lights. It looks like you can wear it in your suit slot."
icon = 'icons/obj/janitor.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_janitor.dmi',
@@ -705,6 +704,11 @@
attack_verb = list("warned", "cautioned", "smashed")
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/caution/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "ALT-click, or click in-hand to toggle the caution lights."
. += "It looks like you could wear it in your suit slot if you really wanted to."
/obj/item/clothing/suit/caution/attack_self()
toggle()
+4 -1
View File
@@ -134,7 +134,6 @@
/obj/item/clothing/accessory/armor_plate
name = "corporate armor plate"
desc = "A particularly light-weight armor plate in stylish corporate black. Unfortunately, not very good if you hold it with your hands."
desc_info = "These items must be hooked onto plate carriers for them to work!"
icon = 'icons/obj/item/clothing/suit/armor/modular_armor/modular_armor.dmi'
icon_state = "plate_sec"
item_state = "plate_sec"
@@ -151,6 +150,10 @@
BOMB = ARMOR_BOMB_PADDED
)
/obj/item/clothing/accessory/armor_plate/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "These must be attached to plate carriers for them to work."
/obj/item/clothing/accessory/armor_plate/before_attached(var/obj/item/clothing/clothing, var/mob/user)
if(!clothing.valid_accessory_slots || !(slot in clothing.valid_accessory_slots))
return
@@ -272,8 +272,6 @@
/obj/item/clothing/accessory/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
desc_info = "Click on the UI action button toggle between the examination modes. Automatic will use the stethoscope on the person you're \
examining when adjacent to them, automatically using it on the selected body part. Manual will make it so you don't automatically use it via examine."
icon = 'icons/obj/item/clothing/accessory/stethoscope.dmi'
icon_state = "stethoscope"
item_state = "stethoscope"
@@ -281,6 +279,12 @@
flippable = 1
var/auto_examine = FALSE
/obj/item/clothing/accessory/stethoscope/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click on the UI action button toggle between the examination modes."
. += "Automatic will use the stethoscope on the person you're examining when adjacent to them, automatically using it on the selected body part."
. += "Manual will make it so you don't automatically use it via examine."
/obj/item/clothing/accessory/stethoscope/attack(mob/living/target_mob, mob/living/user, target_zone)
var/mob/living/carbon/human/M = target_mob
@@ -2,7 +2,6 @@
/obj/item/clothing/accessory/leg_guard
name = "corporate leg guards"
desc = "These will protect your legs."
desc_info = "These items must be hooked onto plate carriers for them to work!"
icon = 'icons/obj/item/clothing/suit/armor/modular_armor/modular_armor.dmi'
icon_state = "legguards_sec"
item_state = "legguards_sec"
@@ -21,6 +20,10 @@
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
/obj/item/clothing/accessory/leg_guard/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "These must be attached to plate carriers for them to work."
/obj/item/clothing/accessory/leg_guard/before_attached(var/obj/item/clothing/clothing, var/mob/user)
if(!clothing.valid_accessory_slots || !(slot in clothing.valid_accessory_slots))
return
+4 -2
View File
@@ -1,14 +1,16 @@
/obj/item/clothing/under/color
name = "grey jumpsuit"
desc = "A basic jumpsuit."
desc_info = "Jumpsuits can have their sleeves rolled up/down via the Roll Up/Down Sleeves verb, and also have their upper body part be up/down via the \
the Rolled Up/Down verb."
icon = 'icons/obj/item/clothing/under/jumpsuits.dmi'
icon_state = "grey"
item_state = "grey"
item_icons = null
contained_sprite = TRUE
/obj/item/clothing/under/color/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Jumpsuits can have their sleeves rolled up/down via the Roll Up/Down Sleeves verb, and also have their upper body part be up/down via the Rolled Up/Down verb."
/obj/item/clothing/under/color/colorable
name = "colorable jumpsuit"
desc = "A colorable non-descript jumpsuit."
@@ -12,7 +12,6 @@
/obj/machinery/appliance
name = "cooker"
desc = DESC_PARENT
desc_info = "Control-click this to change its temperature."
icon = 'icons/obj/machinery/cooking_machines.dmi'
var/appliancetype = 0
density = 1
@@ -55,8 +54,19 @@
var/place_verb = "into"
var/combine_first = FALSE//If 1, this appliance will do combination cooking before checking recipes
component_hint_cap = "Upgraded <b>capacitors</b> will increase heating power."
component_hint_scan = "Upgraded <b>scanning modules</b> will increase heating power and improve power efficiency."
/obj/machinery/appliance/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Control-click this to change its temperature."
/obj/machinery/appliance/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>capacitors</b> will increase heating power."
. += "Upgraded <b>scanning modules</b> will increase heating power and improve power efficiency."
/obj/machinery/appliance/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent)
. += list_contents(user)
/obj/machinery/appliance/Initialize()
. = ..()
@@ -76,11 +86,6 @@
qdel(CI)
return ..()
/obj/machinery/appliance/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(is_adjacent)
. += list_contents(user)
/obj/machinery/appliance/proc/list_contents(var/mob/user)
. = list()
if (isemptylist(cooking_objs))
@@ -18,8 +18,8 @@
var/temperature = T20C
var/starts_with = list()
/obj/machinery/appliance/cooker/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/machinery/appliance/cooker/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if (is_adjacent)
if (!stat)
if (temperature < min_temp)
@@ -22,6 +22,15 @@
var/appliancetype // Bitfield, uses the same as appliances
w_class = WEIGHT_CLASS_NORMAL
/obj/item/reagent_containers/cooking_container/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(length(contents))
var/string = "It contains:</br><ul><li>"
string += jointext(contents, "</li><li>") + "</li></ul>"
. += string
if(reagents.total_volume)
. += "It contains <b>[reagents.total_volume] units</b> of reagents total."
/obj/item/reagent_containers/cooking_container/on_reagent_change()
. = ..()
update_icon()
@@ -38,39 +47,6 @@
. = ..()
update_icon()
/obj/item/reagent_containers/cooking_container/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(length(contents))
. += SPAN_NOTICE(get_content_info())
if(reagents.total_volume)
. += SPAN_NOTICE(get_reagent_info())
/obj/item/reagent_containers/cooking_container/proc/get_content_info()
var/string = "It contains:</br><ul><li>"
string += jointext(contents, "</li><li>") + "</li></ul>"
return string
/obj/item/reagent_containers/cooking_container/proc/get_reagent_info()
return "It contains [reagents.total_volume] units of reagents."
/obj/item/reagent_containers/cooking_container/MouseEntered(location, control, params)
. = ..()
var/list/modifiers = params2list(params)
if(modifiers["shift"] && get_dist(usr, src) <= 2)
params = replacetext(params, "shift=1;", "") // tooltip doesn't appear unless this is stripped
var/description
if(length(contents))
description = get_content_info()
if(reagents.total_volume)
if(!description)
description = ""
description += get_reagent_info()
openToolTip(usr, src, params, name, description)
/obj/item/reagent_containers/cooking_container/MouseExited(location, control, params)
. = ..()
closeToolTip(usr)
/obj/item/reagent_containers/cooking_container/attackby(obj/item/attacking_item, mob/user)
if(is_type_in_list(attacking_item, insertable))
if (!can_fit(attacking_item))
@@ -153,7 +129,6 @@
if((max_space - total) >= I.w_class)
return TRUE
//Takes a reagent holder as input and distributes its contents among the items in the container
//Distribution is weighted based on the volume already present in each item
/obj/item/reagent_containers/cooking_container/proc/soak_reagent(var/datum/reagents/holder)
@@ -296,10 +271,9 @@
volume = 15 // for things like jelly sandwiches etc
max_space = 25
/obj/item/reagent_containers/cooking_container/board/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(length(contents) || reagents?.total_volume)
. += SPAN_NOTICE("To attempt cooking: click and hold, then drag this onto your character.")
/obj/item/reagent_containers/cooking_container/board/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "After adding food ingredients, click-drag this onto your character to attempt to cook/prepare them."
/obj/item/reagent_containers/cooking_container/board/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params)
if(over != user || use_check(user))
@@ -1,7 +1,6 @@
/obj/machinery/appliance/cooker/oven
name = "oven"
desc = "Cookies are ready, dear."
desc_info = "Control-click this to change its temperature. Alt-click to open or close the oven door."
icon_state = "ovenopen"
cook_type = "baked"
appliancetype = OVEN
@@ -48,6 +47,10 @@
"Macaron" = /obj/item/reagent_containers/food/snacks/variable/macaron,
)
/obj/machinery/appliance/cooker/oven/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Alt-click to open or close the oven door."
/obj/machinery/appliance/cooker/oven/Initialize()
. = ..()
oven_loop = new(src)
+11 -11
View File
@@ -21,6 +21,17 @@
var/list/packed_things
/// Contains cart_griddle, cart_smartfridge, cart_table, cart_cent
/obj/machinery/food_cart/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(stat & BROKEN)
return
if(cart_griddle.stat & BROKEN)
. += SPAN_WARNING("The stand's [SPAN_BOLD("grill")] is completely broken!")
else
. += SPAN_NOTICE("The stand's [SPAN_BOLD("grill")] is intact.")
. += SPAN_NOTICE("The stand's [SPAN_BOLD("fridge")] seems fine.") //weirdly enough, these fridges don't break
. += SPAN_NOTICE("The stand's [SPAN_BOLD("table")] seems fine.")
/obj/machinery/food_cart/Initialize(mapload)
. = ..()
cart_griddle = new(src)
@@ -41,17 +52,6 @@
packed_things.Cut()
return ..()
/obj/machinery/food_cart/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(stat & BROKEN)
return
if(cart_griddle.stat & BROKEN)
. += SPAN_WARNING("The stand's [SPAN_BOLD("grill")] is completely broken!")
else
. += SPAN_NOTICE("The stand's [SPAN_BOLD("grill")] is intact.")
. += SPAN_NOTICE("The stand's [SPAN_BOLD("fridge")] seems fine.") //weirdly enough, these fridges don't break
. += SPAN_NOTICE("The stand's [SPAN_BOLD("table")] seems fine.")
/**
* Retract the structures into the food cart
*/
+14 -11
View File
@@ -8,9 +8,6 @@ Plates that can hold your cooking stuff
/obj/item/reagent_containers/bowl
name = "bowl"
desc = "A small bowl for serving liquid meals in."
desc_info = "Click with food to put food on.<br>\
- Click with cutlery to eat some.<br>\
- Click it with the active hand to remove food."
icon = 'icons/obj/kitchen.dmi'
icon_state = "bowl"
fragile = 3
@@ -19,8 +16,14 @@ Plates that can hold your cooking stuff
atom_flags = ATOM_FLAG_OPEN_CONTAINER
var/grease = FALSE
/obj/item/reagent_containers/bowl/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/reagent_containers/bowl/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click with food to put food into it."
. += "If it has food on it, click with cutlery to scoop some food up."
. += "If it has food on it, click it with the active hand to remove the food."
/obj/item/reagent_containers/bowl/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(grease)
. += SPAN_WARNING("\The [name] looks a little unclean.")
@@ -108,18 +111,18 @@ Plates that can hold your cooking stuff
icon_state = "plate"
var/obj/item/holding
/obj/item/reagent_containers/bowl/plate/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(holding)
. += "It looks like there is \a [SPAN_INFO(holding.name)] on \the [src]."
. += SPAN_INFO(" - [holding.desc]")
/obj/item/reagent_containers/bowl/plate/Destroy()
if(holding)
holding = null
qdel(holding)
return ..()
/obj/item/reagent_containers/bowl/plate/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(holding)
. += "It looks like there is \a [SPAN_INFO(holding.name)] on \the [src]."
. += SPAN_INFO(" - [holding.desc]")
/obj/item/reagent_containers/bowl/plate/attackby(obj/item/attacking_item, mob/user)
if((istype(attacking_item, /obj/item/reagent_containers/food/snacks) || istype(attacking_item, /obj/item/trash)) && !holding)
user.unEquip(attacking_item)
@@ -2,8 +2,6 @@
/obj/machinery/microscope
name = "high powered electron microscope"
desc = "A highly advanced microscope capable of zooming up to 3000x."
desc_info = "Use a microscope slide or a fingerprint card on this machine to insert it.\
\nAlt click to remove any object within it."
icon = 'icons/obj/forensics.dmi'
icon_state = "microscope"
anchored = 1
@@ -34,6 +32,11 @@
*/
var/allowed_analysis = MICROSCOPE_ALL
/obj/machinery/microscope/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use a microscope slide or a fingerprint card on this machine to insert it."
. += "Alt-click to remove any object within it."
/obj/machinery/microscope/attackby(obj/item/attacking_item, mob/user)
if(sample)
@@ -1,11 +1,15 @@
/obj/item/forensics/slide
name = "microscope slide"
desc = "A pair of thin glass panes used in the examination of samples beneath a microscope."
desc_info = "Used with fibers and GSR swab tests to examine the samples in the microscope. To empty them, use in hand."
icon_state = "slide"
var/obj/item/forensics/swab/has_swab
var/obj/item/sample/fibers/has_sample
/obj/item/forensics/slide/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Used with fibers and GSR swab tests to examine the samples in the microscope."
. += "To empty them, use in hand."
/obj/item/forensics/slide/Initialize(mapload, ...)
. = ..()
create_reagents(5)
@@ -3,7 +3,6 @@
/obj/item/evidencebag
name = "evidence bag"
desc = "An empty evidence bag."
desc_info = "Click drag this onto an object to put it inside. Click it in-hand to remove an object from it."
icon = 'icons/obj/forensics.dmi'
icon_state = "evidenceobj"
item_state = ""
@@ -11,6 +10,11 @@
var/obj/item/stored_item = null
var/label_text = ""
/obj/item/evidencebag/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click drag this onto an object to put it inside."
. += "Click it in-hand to remove an object from it."
/obj/item/evidencebag/Initialize()
. = ..()
AddComponent(/datum/component/base_name, name)
@@ -80,19 +80,26 @@
/obj/item/sample/fibers
name = "fiber bag"
desc = "Used to hold fiber evidence for the detective."
desc_info = "Holds various fibre evidence. Place it in a slide and the slide into a microscope to check them."
icon_state = "fiberbag"
/obj/item/sample/fibers/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Holds various fibre evidence. Place it in a slide and the slide into a microscope to check them."
/obj/item/sample/print
name = "fingerprint card"
desc = "Records a set of fingerprints."
desc_info = "A sample card for fingerprints. Risks putting your own prints on it if touched without gloves.\
\nPlace the card in a microscope to examine the contents. \
\nUse in hand to put your prints on it.\nTarget hands and click another creature to take their prints."
icon = 'icons/obj/card.dmi'
icon_state = "fingerprint0"
item_state = "paper"
/obj/item/sample/print/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "A sample card for fingerprints. Risks putting your own prints on it if touched without gloves."
. += "Place the card in a microscope to examine the contents."
. += "Use in hand to put your prints on it."
. += "Target hands and click another creature to take their prints."
/obj/item/sample/print/attack_self(var/mob/user)
if(LAZYLEN(evidence))
return
@@ -159,13 +166,16 @@
/obj/item/forensics/sample_kit
name = "fiber collection kit"
desc = "A magnifying glass and tweezers. Used to lift suit fibers."
desc_info = "Click drag it on to an object to collect evidence. Alternatively click on non-help intent."
icon_state = "m_glass"
w_class = WEIGHT_CLASS_SMALL
item_flags = ITEM_FLAG_NO_BLUDGEON
var/evidence_type = "fiber"
var/evidence_path = /obj/item/sample/fibers
/obj/item/forensics/sample_kit/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click drag it onto an object to collect fiber evidence. Alternatively, click on an object with non-Help intent."
/obj/item/forensics/sample_kit/proc/can_take_sample(var/mob/user, var/atom/supplied)
return (supplied.suit_fibers && supplied.suit_fibers.len)
+10 -7
View File
@@ -1,13 +1,6 @@
/obj/item/forensics/swab
name = "swab kit"
desc = "A sterilized cotton swab and vial used to take forensic samples."
desc_info = "Swab kits can be used to gather blood with DNA attached to it by clicking the blood. \
If it fails to collect a sample, it means that particular bit of blood has no associated DNA. \
\nThey can also collect DNA samples directly from people by targetting their mouth to take a saliva sample. \
\nGunshot Residue (GSR) can be collected from someones hands by targetting them. If they are wearing gloves, \
the residue will be taken from the gloves instead. \
\n\nGSR samples are put in a slide and examined in a microscope. \
\nBlood and DNA samples are checked in the DNA analyzer"
icon_state = "swab"
var/list/gsr
var/list/dna
@@ -15,6 +8,16 @@
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/forensics/swab/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Swab kits can be used to gather blood with DNA attached to it by clicking the blood."
. += "If it fails to collect a sample, it means that particular bit of blood has no associated DNA."
. += "They can also collect DNA samples directly from people by targetting their mouth to take a saliva sample."
. += "Gunshot Residue (GSR) can be collected from someones hands by targetting them. If they are wearing gloves, \
the residue will be taken from the gloves instead."
. += "GSR samples are put in a slide and examined in a microscope."
. += "Blood and DNA samples are checked in the DNA analyzer."
/obj/item/forensics/swab/proc/is_used()
return used
+5 -1
View File
@@ -1,7 +1,6 @@
/obj/machinery/orderterminal
name = "Idris Ordering Terminal"
desc = "An ordering terminal designed by Idris for quicker expedition."
desc_info = "To edit the menu, select 'Toggle Lock' while wearing an ID with kitchen access. \nAll credits from the machine will automatically go to the civilian account."
icon = 'icons/obj/machinery/wall/terminals.dmi'
icon_state = "kitchenterminal"
anchored = 1
@@ -24,6 +23,11 @@
var/ticket_number = 1
req_one_access = list(ACCESS_BAR, ACCESS_KITCHEN) // Access to change the menu
/obj/machinery/orderterminal/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To edit the menu, select 'Toggle Lock' while wearing an ID with kitchen access."
. += "All credits from the machine will automatically go to the civilian account."
/obj/machinery/orderterminal/Initialize()
. = ..()
machine_id = "Idris Ordering Terminal #[SSeconomy.num_financial_terminals++]"
+14 -9
View File
@@ -31,11 +31,16 @@
/obj/item/deck/cards
name = "deck of cards"
desc = "A simple deck of playing cards."
desc_info = "Ctrl-click to draw/deal. Alt-click to shuffle."
icon_state = "deck"
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
hand_type = /obj/item/hand/cards
/obj/item/deck/cards/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "CTRL-click to draw/deal."
. += "ALT-click to shuffle."
/obj/item/deck/Initialize()
. = ..()
generate_deck()
@@ -283,6 +288,14 @@
var/concealed = TRUE
var/list/cards = list()
/obj/item/hand/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if((!concealed || src.loc == user) && length(cards))
if(length(cards) > 1)
. += "It contains: "
for(var/datum/playingcard/P in cards)
. += "The [P.name]. [P.desc ? "<i>[P.desc]</i>" : ""]"
/obj/item/hand/cards
deck_type = /obj/item/deck/cards
@@ -356,14 +369,6 @@
playsound(src, 'sound/items/cards/cardflip.ogg', 50, TRUE)
balloon_alert_to_viewers("[concealed ? "conceals" : "reveals"] their hand.")
/obj/item/hand/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if((!concealed || src.loc == user) && length(cards))
if(length(cards) > 1)
. += "It contains: "
for(var/datum/playingcard/P in cards)
. += "The [P.name]. [P.desc ? "<i>[P.desc]</i>" : ""]"
/obj/item/hand/update_icon(var/direction = 0)
if(randpixel)
randpixel = 0
+4 -1
View File
@@ -5,7 +5,6 @@
being able to be purchased from an online marketplace hosted by InUs. Thousands of popular and obscure titles are available on the \
console. Besides being the perfect present, it's also capable of video streaming and sharing files over authorized \
connections. A quick and easy way to upload your latest montage to the extranet."
desc_info = "You can ALT-click the game-helm to open it up and turn it on. Click on the open device to play."
icon = 'icons/obj/gamehelm.dmi'
w_class = WEIGHT_CLASS_SMALL
update_icon_on_init = TRUE
@@ -47,6 +46,10 @@
var/muted = FALSE
/obj/item/gamehelm/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can ALT-click the game-helm to open it up and turn it on. Click on the open device to play."
/obj/item/gamehelm/update_icon()
ClearOverlays()
if(open)
@@ -16,6 +16,13 @@
matter = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_PLASTIC = 1000, MATERIAL_OSMIUM = 500)
dir = SOUTH
/obj/item/mech_component/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(ready_to_install())
. += SPAN_NOTICE("It is ready for installation.")
else
. += get_missing_parts_text(user)
/obj/item/mech_component/pickup(mob/user)
pixel_x = initial(pixel_x)
pixel_y = initial(pixel_y)
@@ -33,13 +40,6 @@
for(var/obj/item/thing in contents)
thing.emp_act(severity)
/obj/item/mech_component/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(ready_to_install())
. += SPAN_NOTICE("It is ready for installation.")
else
. += get_missing_parts_text(user)
/obj/item/mech_component/set_dir()
..(SOUTH)
+25 -17
View File
@@ -370,6 +370,21 @@
desc = "A replaceable drill head usually used in exosuit drills."
icon_state = "drill_head"
/obj/item/material/drill_head/condition_hints(mob/user, distance, is_adjacent)
. += ..()
var/percentage = get_durability_percentage()
var/descriptor = SPAN_DANGER("It looks close to breaking")
if(percentage > 10)
descriptor = SPAN_ALERT("It is very worn")
if(percentage > 50)
descriptor = SPAN_ALERT("It is fairly worn")
if(percentage > 75)
descriptor = SPAN_ALERT("It shows some signs of wear")
if(percentage > 95)
descriptor = SPAN_NOTICE("It shows no wear")
. += descriptor
/obj/item/material/drill_head/Initialize(newloc, material_key)
. = ..()
durability = 2 * material.integrity
@@ -377,21 +392,6 @@
/obj/item/material/drill_head/proc/get_durability_percentage()
return (durability * 100) / (2 * material.integrity)
/obj/item/material/drill_head/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
var/percentage = get_durability_percentage()
var/descriptor = "looks close to breaking"
if(percentage > 10)
descriptor = "is very worn"
if(percentage > 50)
descriptor = "is fairly worn"
if(percentage > 75)
descriptor = "shows some signs of wear"
if(percentage > 95)
descriptor = "shows no wear"
. += SPAN_NOTICE("It [descriptor].")
/obj/item/mecha_equipment/drill
name = "drill"
desc = "This is the drill that'll pierce the heavens!"
@@ -726,7 +726,6 @@
/obj/item/mecha_equipment/phazon
name = "phazon bluespace transmission system"
desc = "A large back-mounted device that grants the exosuit it's mounted to the ability to semi-shift into bluespace, allowing it to pass through dense objects."
desc_info = "It needs an anomaly core to function. You can install some simply by using a core on it."
icon_state = "mecha_phazon"
restricted_hardpoints = list(HARDPOINT_BACK)
w_class = WEIGHT_CLASS_HUGE
@@ -736,6 +735,16 @@
var/obj/item/anomaly_core/AC
var/image/anomaly_overlay
/obj/item/mecha_equipment/phazon/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
if(!AC)
. += "It needs an anomaly core to function. You can install one by using a core on it."
/obj/item/mecha_equipment/phazon/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
if(AC)
. += "The anomaly core could be extracted if the securing <b>bolts</b> are undone."
/obj/item/mecha_equipment/phazon/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/anomaly_core))
if(AC)
@@ -744,7 +753,6 @@
user.drop_from_inventory(attacking_item, src)
AC = attacking_item
to_chat(user, SPAN_NOTICE("You insert \the [AC] into \the [src]."))
desc_info = "\The [src] has an anomaly core installed! You can use a wrench to remove it."
anomaly_overlay = image(AC.icon, null, AC.icon_state)
anomaly_overlay.pixel_y = 3
AddOverlays(anomaly_overlay)
+18 -18
View File
@@ -28,6 +28,24 @@
var/list/owned_bee_swarms = list()
/obj/machinery/beehive/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += SPAN_NOTICE("\The [src] is holding <b>[frames]/[maxFrames]</b> frames.")
if(is_adjacent)
if(bee_count)
if(closed)
. += FONT_SMALL(SPAN_NOTICE("You can hear buzzing from within \the [src]."))
else
. += FONT_SMALL(SPAN_WARNING("The lid is <b>open</b>. The bees can't grow and produce honey until it's <b>closed!</b>"))
. += FONT_SMALL(SPAN_NOTICE("You can see bees buzzing around within \the [src]."))
else
if(closed)
. += FONT_SMALL(SPAN_NOTICE("\The [src] lies silent."))
else
. += FONT_SMALL(SPAN_NOTICE("You can see bees buzzing around within \the [src]."))
if(honeycombs / 100 > 1)
. += SPAN_NOTICE("\The [src] has a frame full of honeycombs which you can harvest.")
/obj/machinery/beehive/update_icon()
ClearOverlays()
icon_state = "beehive"
@@ -46,24 +64,6 @@
if(81 to 100)
AddOverlays("bees3")
/obj/machinery/beehive/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
. += SPAN_NOTICE("\The [src] is holding <b>[frames]/[maxFrames]</b> frames.")
if(is_adjacent)
if(bee_count)
if(closed)
. += FONT_SMALL(SPAN_NOTICE("You can hear buzzing from within \the [src]."))
else
. += FONT_SMALL(SPAN_WARNING("The lid is <b>open</b>. The bees can't grow and produce honey until it's <b>closed!</b>"))
. += FONT_SMALL(SPAN_NOTICE("You can see bees buzzing around within \the [src]."))
else
if(closed)
. += FONT_SMALL(SPAN_NOTICE("\The [src] lies silent."))
else
. += FONT_SMALL(SPAN_NOTICE("You can see bees buzzing around within \the [src]."))
if(honeycombs / 100 > 1)
. += SPAN_NOTICE("\The [src] has a frame full of honeycombs which you can harvest.")
/obj/machinery/beehive/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.iscrowbar())
closed = !closed
@@ -1,7 +1,6 @@
/obj/item/bee_smoker
name = "bee smoker"
desc = "An archaic contraption that slowly burns welding fuel to create thick clouds of smoke, and directs it with attached bellows, used to control angry bees and calm them before harvesting honey."
desc_antag = "This device can be used to blind people in short range."
icon = 'icons/obj/beekeeping.dmi'
icon_state = "bee_smoker"
item_state = "bee_smoker"
@@ -9,8 +8,12 @@
w_class = WEIGHT_CLASS_BULKY
var/max_fuel = 60
/obj/item/bee_smoker/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/bee_smoker/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This device can be used to blind people in short range."
/obj/item/bee_smoker/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent)
. += SPAN_NOTICE("It has <b>[get_fuel()]/[max_fuel]</b> welding fuel left.")
+3 -3
View File
@@ -695,9 +695,9 @@
else if(dead)
remove_dead(user)
/// TODO: Need to modernise this.
/obj/machinery/portable_atmospherics/hydroponics/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/machinery/portable_atmospherics/hydroponics/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(!seed)
. += "[src] is empty."
return
+4 -1
View File
@@ -192,7 +192,6 @@
icon = 'icons/obj/library.dmi'
contained_sprite = TRUE
icon_state = "book"
desc_antag = "As a Cultist, this item can be reforged to become a cult tome."
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
@@ -207,6 +206,10 @@
drop_sound = 'sound/items/drop/book.ogg'
pickup_sound = 'sound/items/pickup/book.ogg'
/obj/item/book/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "As a Cultist, this item can be reforged to become a cult tome."
/obj/item/book/attack_self(var/mob/user as mob)
if(carved)
if(store)
+5 -1
View File
@@ -1,6 +1,5 @@
// Stacked resources. They use a material datum for a lot of inherited values.
/obj/item/stack/material
desc_info = "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it."
force = 11
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
@@ -16,6 +15,11 @@
var/painted_colour
var/use_material_sound = TRUE
/obj/item/stack/material/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use in your hand to bring up the crafting menu."
. += "If you have enough sheets, click on something on the list to build it."
/obj/item/stack/material/Initialize(mapload, amount)
. = ..()
randpixel_xy()
+8 -4
View File
@@ -36,14 +36,18 @@
default_type = MATERIAL_CLOTH
/obj/item/stack/material/cyborg/glass
desc_info = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets.<br>\
As a synthetic, you can acquire more sheets of glass by recharging."
icon_state = "sheet-glass"
default_type = MATERIAL_GLASS
/obj/item/stack/material/cyborg/glass/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "As a synthetic, you can replenish your material supplies by recharging."
/obj/item/stack/material/cyborg/glass/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use in your hand to build a window."
/obj/item/stack/material/cyborg/glass/reinforced
desc_info = "Use in your hand to build a window. Reinforced glass is much stronger against damage.<br>\
As a synthetic, you can gain more reinforced glass by recharging."
icon_state = "sheet-rglass"
default_type = MATERIAL_GLASS_REINFORCED
charge_costs = list(500, 1000)
+27 -23
View File
@@ -12,7 +12,6 @@
/obj/machinery/mining/drill
name = "mining drill head"
desc = "A large industrial drill. Its bore does not penetrate deep enough to access the sublevels."
desc_info = "You can upgrade this machine with better matter bins, capacitors, micro lasers, and power cells. You can also attach a mining satchel that has a warp pack and a linked ore box to it, to bluespace teleport any mined ore directly into the linked ore box."
icon_state = "mining_drill"
var/braces_needed = 2
var/list/supports = list()
@@ -58,10 +57,6 @@
/obj/item/cell/high
)
component_hint_bin = "Upgraded <b>matter bins</b> will increase ore capacity."
component_hint_cap = "Upgraded <b>capacitors</b> will improve power efficiency."
component_hint_laser = "Upgraded <b>micro-lasers</b> will increase the amount of ore harvested."
parts_power_mgmt = FALSE
/// The list of ores currently held within the mining drill
@@ -70,26 +65,18 @@
/// The last time the stored ores were updated, used as a cooldown to not nuke the server
var/last_stored_ore_update = 0
/obj/machinery/mining/drill/Initialize()
. = ..()
spark_system = bind_spark(src, 3)
/obj/machinery/mining/drill/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Attaching a mining satchel with a warp extraction pack and a linked ore box to this drill will bluespace-teleport any mined ore directly into the linked ore box."
/obj/machinery/mining/drill/Destroy()
QDEL_NULL(attached_satchel)
QDEL_NULL(spark_system)
return ..()
/obj/machinery/mining/drill/proc/update_ore_count()
stored_ores = list()
for(var/obj/item/ore/O in contents)
if(stored_ores[O.name])
stored_ores[O.name]++
else
stored_ores[O.name] = 1
/obj/machinery/mining/drill/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/machinery/mining/drill/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>matter bins</b> will increase ore capacity."
. += "Upgraded <b>capacitors</b> will improve power efficiency."
. += "Upgraded <b>micro-lasers</b> will increase the amount of ore harvested."
/obj/machinery/mining/drill/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(need_player_check)
. += SPAN_WARNING("The drill error light is flashing. The cell panel is [panel_open ? "open" : "closed"].")
else
@@ -123,6 +110,23 @@
for(var/ore in stored_ores)
. += SPAN_NOTICE("- [stored_ores[ore]] [ore]")
/obj/machinery/mining/drill/Initialize()
. = ..()
spark_system = bind_spark(src, 3)
/obj/machinery/mining/drill/Destroy()
QDEL_NULL(attached_satchel)
QDEL_NULL(spark_system)
return ..()
/obj/machinery/mining/drill/proc/update_ore_count()
stored_ores = list()
for(var/obj/item/ore/O in contents)
if(stored_ores[O.name])
stored_ores[O.name]++
else
stored_ores[O.name] = 1
/obj/machinery/mining/drill/process()
if(need_player_check)
return
+5 -4
View File
@@ -12,7 +12,6 @@
/obj/machinery/mineral/processing_unit_console
name = "ore redemption console"
desc = "A handy console which can be use to retrieve mining points for use in the mining vendor, or to set processing values for various ore types."
desc_info = "Up to date settings for the refinery can be found in the Aurorastation Guide to Mining wikipage."
icon = 'icons/obj/machinery/wall/terminals.dmi'
icon_state = "production_console"
density = FALSE
@@ -36,9 +35,11 @@
/obj/item/stock_parts/console_screen
)
component_hint_cap = "Upgraded <b>capacitors</b> will increase the amount of ore smelted per second."
component_hint_laser = "Upgraded <b>micro-lasers</b> will increase the amount of ore smelted per second."
component_hint_scan = "Upgraded <b>scanning modules</b> will increase the amount of ore smelted per second."
/obj/machinery/mineral/processing_unit_console/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>capacitors</b> will increase the amount of ore smelted per second."
. += "Upgraded <b>micro-lasers</b> will increase the amount of ore smelted per second."
. += "Upgraded <b>scanning modules</b> will increase the amount of ore smelted per second."
/obj/machinery/mineral/processing_unit_console/Initialize(mapload, d, populate_components)
. = ..()
+4 -4
View File
@@ -1,7 +1,6 @@
/obj/machinery/mineral/rigpress
name = "hardsuit module press"
desc = "This machine converts certain items permanently into hardsuit modules."
desc_info = "The following devices can be made:"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "coinpress0"
density = TRUE
@@ -19,12 +18,13 @@
/obj/item/gun/energy/vaurca/thermaldrill = /obj/item/rig_module/mounted/thermalldrill
)
/obj/machinery/mineral/rigpress/Initialize()
. = ..()
/obj/machinery/mineral/rigpress/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "The following devices can be made:"
for(var/press_type in press_types)
var/obj/item/base = press_type
var/obj/item/product = press_types[press_type]
desc_info += "\n[initial(base.name)] -> [initial(product.name)]"
. += "[initial(base.name)] -> [initial(product.name)]"
/obj/machinery/mineral/rigpress/update_icon()
if(pressing)
+6 -2
View File
@@ -963,12 +963,16 @@ GLOBAL_LIST_INIT_TYPED(total_extraction_beacons, /obj/structure/extraction_point
/obj/item/warp_core
name = "warp extraction beacon signaller"
desc = "Emits a signal which Warp-Item recovery devices can lock onto. Activate in hand to create a beacon."
desc_info = "You can activate this item in-hand to create a static beacon, or you can click on an ore box with it to allow the ore box to be linked to warp packed mining satchels."
desc = "Emits a signal which Warp-Item recovery devices can lock onto."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "subspace_amplifier"
origin_tech = list(TECH_BLUESPACE = 1, TECH_PHORON = 1, TECH_ENGINEERING = 2)
/obj/item/warp_core/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can activate this item in-hand to create a static beacon."
. += "You can click on an ore box with it to allow the ore box to be linked to warp extraction pack-enabled mining satchels."
/obj/item/warp_core/attack_self(mob/user)
to_chat(user, SPAN_NOTICE("You start placing down the beacon..."))
if(do_after(user, 15))
+4 -5
View File
@@ -26,15 +26,14 @@
/// The anchor used to render the ore pings on top of, this follows us around as the ore detector resets its blips
var/obj/item/detector_anchor/anchor
/obj/item/ore_detector/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "ALT-click to set the type of ore you wish to search for."
/obj/item/ore_detector/Initialize(mapload, ...)
. = ..()
anchor = new /obj/item/detector_anchor(src)
/obj/item/ore_detector/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 1)
. += FONT_SMALL(SPAN_NOTICE("Alt-click to set the ore you wish to search for."))
/obj/item/ore_detector/Destroy()
deactivate()
QDEL_NULL(anchor)
+9 -6
View File
@@ -1,7 +1,6 @@
/obj/item/storage/bag/ore
name = "mining satchel"
desc = "This little bugger can be used to store and transport ores."
desc_info = "You can attach a warp extraction pack to it, then click on an ore box that has a warp extraction beacon signaller attached to it to link them. Then ore put into this will be bluespace teleported into the ore box."
icon = 'icons/obj/storage/bags.dmi'
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
@@ -16,6 +15,15 @@
var/linked_beacon = FALSE // can't hold an actual beacon beclause storage code a shit
var/linked_beacon_uses = 3 // to hold the amount of uses the beacon had, storage code a shit.
/obj/item/storage/bag/ore/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can attach a warp extraction pack to it, then click on an ore box that has a warp extraction beacon signaller attached to it to link them. Then ore put into this will be bluespace teleported into the ore box."
/obj/item/storage/bag/ore/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent && linked_beacon)
. += FONT_SMALL(SPAN_NOTICE("It has a <b>warp extraction pack</b> attached."))
/obj/item/storage/bag/ore/Destroy()
if(listeningTo)
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
@@ -48,11 +56,6 @@
if(location)
pickup_items_from_loc_and_feedback(user, location, explicit_request = FALSE)
/obj/item/storage/bag/ore/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(is_adjacent && linked_beacon)
. += FONT_SMALL(SPAN_NOTICE("It has a <b>warp extraction pack</b> inside."))
/obj/item/storage/bag/ore/drone
// this used to be 400. The inventory system FUCKING DIED at this.
max_storage_space = 200
+26 -23
View File
@@ -4,7 +4,6 @@
/obj/structure/ore_box
name = "ore box"
desc = "A heavy box used for storing ore."
desc_info = "You can attach a warp extraction beacon signaller to this, then click on it with an ore satchel that has a warp extraction pack attached, to link them."
icon = 'icons/obj/mining.dmi'
icon_state = "orebox0"
density = TRUE
@@ -13,6 +12,32 @@
var/obj/item/warp_core/warp_core // to set up the bluespace network
var/list/stored_ore = list()
/obj/structure/ore_box/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can attach a warp extraction beacon signaller to this, then click on it with an ore satchel that has a warp extraction pack attached, to link them."
/obj/structure/ore_box/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(!is_adjacent) //Can only check the contents of ore boxes if you can physically reach them.
return
add_fingerprint(user)
if(warp_core)
. += FONT_SMALL(SPAN_NOTICE("It has a <b>warp extraction beacon signaller</b> attached to it."))
if(!length(contents))
. += SPAN_NOTICE("It is empty.")
return
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
. += SPAN_NOTICE("It holds:")
for(var/ore in stored_ore)
. += SPAN_NOTICE("- [stored_ore[ore]] [ore]")
/obj/structure/ore_box/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/ore))
user.drop_from_inventory(attacking_item, src)
@@ -71,28 +96,6 @@
else
stored_ore[O.name] = 1
/obj/structure/ore_box/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(!is_adjacent) //Can only check the contents of ore boxes if you can physically reach them.
return
add_fingerprint(user)
if(warp_core)
. += FONT_SMALL(SPAN_NOTICE("It has a <b>warp extraction beacon signaller</b> attached to it."))
if(!length(contents))
. += SPAN_NOTICE("It is empty.")
return
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
. += SPAN_NOTICE("It holds:")
for(var/ore in stored_ore)
. += SPAN_NOTICE("- [stored_ore[ore]] [ore]")
/obj/structure/ore_box/verb/empty_box()
set name = "Empty Ore Box"
set category = "Object"
@@ -1,7 +1,6 @@
/obj/machinery/slime_extractor
name = "slime core extractor"
desc = "A bulky machine that, when fed a slime corpse, rapidly extracts the held cores."
desc_info = "This machine can be upgraded with a micro laser to increase its extraction speed, or a matter bin to increase its slime capacity. It will place slime extracts into a slime extract bag if it's adjacent to the machine."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "slime_extractor"
density = TRUE
@@ -19,14 +18,20 @@
/obj/item/stack/cable_coil{amount = 5}
)
component_hint_bin = "Upgraded <b>matter bins</b> will increase slime capacity."
component_hint_laser = "Upgraded <b>micro-lasers</b> will increase extraction speed."
/obj/machinery/slime_extractor/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "It will place slime extracts into a slime extract bag automatically if it's adjacent to the machine."
/obj/machinery/slime_extractor/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
. += FONT_SMALL(SPAN_NOTICE("It can hold <b>[slime_limit] slime\s</b> at a time."))
/obj/machinery/slime_extractor/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>matter bins</b> will increase slime capacity."
. += "Upgraded <b>micro-lasers</b> will increase extraction speed."
/obj/machinery/slime_extractor/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += "It can hold <b>[slime_limit] slime\s</b> at a time."
if(length(extract_slimes))
. += FONT_SMALL(SPAN_WARNING("It is currently processing <b>[length(extract_slimes)] slime\s</b>."))
. += "It is currently processing <b>[length(extract_slimes)] slime\s</b>."
/obj/machinery/slime_extractor/update_icon()
ClearOverlays()
@@ -101,7 +106,6 @@
qdel(extracted_slime)
update_icon()
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
@@ -103,10 +103,13 @@
/obj/item/robot_emag
name = "cryptographic sequencer"
desc = "It's a card with a magnetic strip attached to some circuitry. This one is modified to be used by a robot."
desc_antag = "This emag has an unlimited number of uses, however, each use will drain a little bit of your power cell."
icon = 'icons/obj/card.dmi'
icon_state = "emag"
/obj/item/robot_emag/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This emag has an unlimited number of uses, however, each use will drain a little bit of your power cell."
/obj/item/robot_emag/afterattack(var/atom/target, var/mob/living/user, proximity) //possible spaghetti code, but should work
if(!target)
return
@@ -2,7 +2,6 @@
name = "inductive charger"
desc = "A phoron-enhanced induction charger hooked up to its attached stationbound's internal cell."
desc_extended = "Harnessing the energy potential found in phoron structures, NanoTrasen engineers have created a portable device capable of highly efficient wireless charging. The expense and limit of energy output of using this method of charging prevents it from being used on a large scale, being far outclassed by Phoron-Supermatter charging systems."
desc_info = "Click on an adjacent object that contains or is a power cell to attempt to find and charge it. After a successful charge, the inductive charger recharge in a few minutes. The amount transferred can be adjusted by alt clicking it."
icon = 'icons/obj/item/inductive_charger.dmi'
icon_state = "inductive_charger"
item_state = "inductive_charger"
@@ -16,6 +15,17 @@
maptext_x = 3
maptext_y = 2
/obj/item/inductive_charger/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click on an adjacent object that contains or is a power cell to attempt to find and charge it."
. += "ALT-click to adjust the transferred amount"
. += "After a successful charge, the inductive charger recharge in a few minutes."
/obj/item/inductive_charger/handheld/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(cell)
. += SPAN_NOTICE("Cell Charge: [cell.percent()]%")
/obj/item/inductive_charger/set_initial_maptext()
held_maptext = SMALL_FONTS(7, "Ready")
@@ -103,11 +113,6 @@
if(ispath(cell))
cell = new cell(src)
/obj/item/inductive_charger/handheld/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(cell)
. += SPAN_NOTICE("Cell Charge: [cell.percent()]%")
/obj/item/inductive_charger/handheld/get_cell()
return cell
@@ -15,11 +15,14 @@
/obj/item/borg/sight/thermal
name = "\proper thermal vision"
desc_antag = "Having this device on your hotbar will allow you to see in enhanced thermal vision, which allows you to see heat signatures through solid walls."
sight_mode = BORGTHERM
icon_state = "thermal"
icon = 'icons/obj/clothing/glasses.dmi'
/obj/item/borg/sight/thermal/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Having this device on your hotbar will allow you to see in enhanced thermal vision, which allows you to see heat signatures through solid walls."
/obj/item/borg/sight/meson
name = "\proper meson vision"
sight_mode = BORGMESON
@@ -16,16 +16,16 @@
var/stored_doors = 5
var/mode = MODE_WALL // 0 - Walls 1 - Doors
/obj/item/inflatable_dispenser/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += SPAN_NOTICE("It has <b>[stored_walls] wall segment\s</b> and <b>[stored_doors] door segment\s</b> stored.")
. += SPAN_NOTICE("It is set to deploy <b>[mode ? "doors" : "walls"]</b>.")
/obj/item/inflatable_dispenser/Initialize(mapload, ...)
. = ..()
stored_walls = max_walls
stored_doors = max_doors
/obj/item/inflatable_dispenser/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
. += SPAN_NOTICE("It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored.")
. += SPAN_NOTICE("It is set to deploy [mode ? "doors" : "walls"]")
/obj/item/inflatable_dispenser/attack_self(mob/user)
if(!deploying)
mode = !mode
@@ -1,7 +1,7 @@
/mob/living/simple_animal/cosmozoan
name = "cosmozoan"
desc = "These jellyfish-like entities drift through asteroid fields, emitting a soft glow."
desc_info = "Schools of Cosmozoans often congregate in asteroid fields, though they have rarely been witnessed in greater number and size in the Frontier. Their origin remains a mystery but it is believed they predate early man. This belief landed them the name Cosmozoa."
desc_extended = "Schools of Cosmozoans often congregate in asteroid fields, though they have rarely been witnessed in greater number and size in the Frontier. Their origin remains a mystery but it is believed they predate early man. This belief landed them the name Cosmozoa."
icon_state = "cosmozoan"
icon_living = "cosmozoan"
icon_dead = "cosmozoan_dead"
@@ -2,7 +2,6 @@
name = "tablet computer"
lexical_name = "tablet"
desc = "A portable device for your needs on the go."
desc_info = "To deploy the charging cable on this device, either drag and drop it over a nearby APC, or click on the APC with the computer in hand."
icon = 'icons/obj/modular_tablet.dmi'
icon_state = "tablet"
icon_state_unpowered = "tablet"
@@ -15,6 +14,10 @@
w_class = WEIGHT_CLASS_SMALL
looping_sound = FALSE
/obj/item/modular_computer/handheld/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To deploy the charging cable on this device, either drag and drop it over a nearby APC, or click on the APC with the computer in hand."
/obj/item/modular_computer/handheld/Initialize()
. = ..()
set_icon()
@@ -3,7 +3,6 @@
name = "laptop computer"
lexical_name = "laptop"
desc = "A portable computer."
desc_info = "You can alt-click the laptop while it's set down on surface to open it up and work with it. Left clicking while it is open will allow you to operate it."
hardware_flag = PROGRAM_LAPTOP
can_reset = TRUE
icon_state_unpowered = "laptop-open"
@@ -21,6 +20,11 @@
broken_damage = 25
var/icon_state_closed = "laptop-closed"
/obj/item/modular_computer/laptop/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "ALT-click the laptop while it's set down on a surface to open or close it."
. += "Left-click on it while it is open to operate it."
/obj/item/modular_computer/laptop/AltClick()
if(use_check(usr))
return
@@ -1,13 +1,17 @@
/obj/item/paper_scanner
name = "paper scanner"
desc = "A simple device that can be used to scan paper or paper bundles in order to digitize them."
desc_info = "Alt-click it while it's in one of your hands to eject the portable drive. Click paper or a paper bundle with it to digitize it and store it in the inserted drive."
icon = 'icons/obj/devices/paperscanner.dmi'
icon_state = "paperscanner"
item_state = "paperscanner"
contained_sprite = TRUE
var/obj/item/computer_hardware/hard_drive/portable/drive
/obj/item/paper_scanner/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Click paper or a paper bundle with it to digitize it and store it in the inserted drive."
. += "ALT-click it while it's in one of your hands to eject the portable drive."
/obj/item/paper_scanner/Initialize(mapload, ...)
. = ..()
drive = new /obj/item/computer_hardware/hard_drive/portable(src)
+10 -2
View File
@@ -18,13 +18,17 @@
/obj/effect/hoist_hook
name = "hoist clamp"
desc = "A clamp used to lift people or things."
desc_info = "To use the hook, click drag the object you want to it to attach it.\nTo remove an object from the hook, click drag the hook to a nearby turf."
icon = 'icons/obj/hoists.dmi'
icon_state = "hoist_hook"
var/obj/structure/hoist/source_hoist
can_buckle = TRUE
anchored = TRUE
/obj/effect/hoist_hook/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To use the hook, click drag the object you want to it to attach it."
. += "To remove an object from the hook, click drag the hook to a nearby turf."
/obj/effect/hoist_hook/attack_hand(mob/living/user)
if (use_check_and_message(user, USE_DISALLOW_SILICONS))
return
@@ -96,7 +100,6 @@
/obj/structure/hoist
icon = 'icons/obj/hoists.dmi'
icon_state = "hoist_base"
desc_info = "To use the hook, click drag the object you want to it to attach it.\nTo remove an object from the hook, click drag the hook to a nearby turf."
var/broken = 0
density = TRUE
anchored = TRUE
@@ -106,6 +109,11 @@
var/movedir = UP
var/obj/effect/hoist_hook/source_hook
/obj/structure/hoist/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To use the hook, click drag the object you want to it to attach it."
. += "To remove an object from the hook, click drag the hook to a nearby turf."
/obj/structure/hoist/Initialize(mapload, ndir)
. = ..()
dir = ndir
+6 -3
View File
@@ -118,7 +118,6 @@
/obj/structure/fuel_port //empty
name = "fuel port"
desc = "The fuel input port of the shuttle. Holds one fuel tank. Use a crowbar to open and close it."
desc_info = "The fuel port must be wrenched and welded in place before it can be loaded and used by the shuttle."
icon = 'icons/turf/shuttle.dmi'
icon_state = "fuel_port"
density = 0
@@ -132,8 +131,12 @@
var/parent_shuttle
var/port_item_path = /obj/item/fuel_port
/obj/structure/fuel_port/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/structure/fuel_port/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
. += "The fuel port must be wrenched and welded in place before it can be loaded and used by the shuttle."
/obj/structure/fuel_port/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
switch(state)
if(FUEL_PORT_UNSECURED)
. += SPAN_NOTICE("\The [src] is in place, but not attached to anything.")
@@ -10,6 +10,13 @@
var/obj/machinery/ship_weapon/weapon
var/weapon_id //Used to connect weapon systems to the relevant ammunition loader.
/obj/machinery/ammunition_loader/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use a multitool to check or update the weapon loader's internal network ID for linking purposes. You probably don't need to do this."
/obj/machinery/ammunition_loader/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
/obj/machinery/ammunition_loader/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
@@ -57,6 +64,8 @@
if(istype(CL.carrying[1], /obj/item/ship_ammunition))
var/obj/item/ship_ammunition/SA = CL.carrying[1]
return load_ammo(SA, HV)
else
to_chat(user, SPAN_WARNING("\The [CL] does not appear to be holding any compatible ammunition."))
if(istype(attacking_item, /obj/item/device/multitool))
to_chat(user, SPAN_NOTICE("You hook up the tester's wires to \the [src]: its identification tag is <b>[weapon_id]</b>."))
var/new_id = input(user, "Change the identification tag?", "Identification Tag", weapon_id)
@@ -31,6 +31,28 @@
var/cookoff_heavy = 2
var/cookoff_light = 3
/obj/item/ship_ammunition/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Using a pen on \the [src] will let you write a lovely message on it for your intended target; this message is detectable on the overmap by ship sensors."
. += "Some types of ammunition are especially flammable, fragile, etc. They can cook off if not stored and handled very carefully."
/obj/item/ship_ammunition/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(written_message)
if(distance > 3)
. += "It has something written on it, but you'd need to get closer to tell what the writing says."
else
. += "It has a message written on the casing: <span class='notice'><i>[written_message]</i></span>."
/obj/item/ship_ammunition/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
if(ammunition_flags & SHIP_AMMO_FLAG_INFLAMMABLE)
. += "This ammunition is flammable, and will cook off and explode when exposed to fire."
if(ammunition_flags & SHIP_AMMO_FLAG_VULNERABLE)
. += "This ammunition is vulnerable, and will cook off and explode on impact if shot at or attacked."
if(ammunition_flags & SHIP_AMMO_FLAG_VERY_FRAGILE)
. += "This ammunition is very fragile, and will cook off and explode on impact if thrown, or even just dropped with the Harm intent!"
/obj/item/ship_ammunition/Initialize()
. = ..()
update_status()
@@ -57,14 +79,6 @@
return
return ..()
/obj/item/ship_ammunition/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(written_message)
if(distance > 3)
. += "It has something written on it, but you'd need to get closer to tell what the writing says."
else
. += "It has a message written on the casing: <span class='notice'><i>[written_message]</i></span>."
/obj/item/ship_ammunition/do_additional_pickup_checks(var/mob/user)
if(ammunition_flags & SHIP_AMMO_FLAG_VERY_HEAVY)
if(ishuman(user))
+42 -23
View File
@@ -30,6 +30,48 @@
var/list/obj/structure/ship_weapon_dummy/connected_dummies = list()
var/obj/structure/ship_weapon_dummy/barrel
/obj/machinery/ship_weapon/condition_hints(mob/user, distance, is_adjacent)
. += ..()
var/ratio = (damage / max_damage) * 100
switch(ratio)
if(1 to 10)
. += SPAN_NOTICE("It looks to be in tip top shape apart from a few minor scratches and dings.")
if(10 to 20)
. += SPAN_ALERT("It has some kinks and bends here and there.")
if(20 to 40)
. += SPAN_ALERT("It has a few holes through which you can see some machinery.")
if(40 to 60)
. += SPAN_WARNING("Some fairly important parts are missing... but it should work anyway.")
if(60 to 80)
. += SPAN_WARNING("It needs repairs direly. Both aiming and firing components are missing or broken. It has a lot of holes, too. It definitely wouldn't \
pass inspection.")
if(90 to 100)
. += SPAN_DANGER("It's falling apart! Just touching it might make the whole thing collapse!")
else //At roundstart, weapons start with 0 damage, so it'd be 0 / 1000 * 100 -> 0
. += SPAN_NOTICE("It looks to be in tip top shape and not damaged at all.")
/obj/machinery/ship_weapon/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use a multitool to check or update the weapon's internal network ID for linking purposes. You probably don't need to do this."
. += "To load a ship weapon, you must use a nearby Ammunition Loader linked to it."
. += "This weapon is LOUD when it fires; you probably want to wear ear protection when nearby."
/obj/machinery/ship_weapon/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
var/ratio = (damage / max_damage) * 100
if(ratio > 0)
. += "The damage can be repaired with a <b>welder</b>, but given the size of \the [src] it will take a lot of time and welding fuel."
/obj/machinery/ship_weapon/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/loaded_ammo_count_txt = num2text(length(ammunition))
var/max_ammo_txt = num2text(max_ammo)
. += "\the [src] can load a maximum of [max_ammo_txt] [max_ammo == 1 ? "round" : "rounds"] at a time."
if(length(ammunition) >= max_ammo)
. += "\the [src] is fully loaded with ammunition!"
else
. += SPAN_NOTICE("\the [src] is currently loaded with [loaded_ammo_count_txt] [length(ammunition) == 1 ? "round" : "rounds"] of ammunition.")
/obj/machinery/ship_weapon/Initialize(mapload)
..()
appearance_flags &= ~TILE_BOUND //NOT BOUND BY ANY LIMITS
@@ -70,29 +112,6 @@
if(damage >= max_damage)
qdel(src)
/obj/machinery/ship_weapon/proc/get_damage_description()
var/ratio = (damage / max_damage) * 100
switch(ratio)
if(1 to 10)
. = "It looks to be in tip top shape."
if(10 to 20)
. = "It has some kinks and bends here and there."
if(20 to 40)
. = "It has a few holes through which you can see some machinery."
if(40 to 60)
. = SPAN_WARNING("Some fairly important parts are missing... but it should work anyway.")
if(60 to 80)
. = SPAN_DANGER("It needs repairs direly. Both aiming and firing components are missing or broken. It has a lot of holes, too. It definitely wouldn't \
pass inspection.")
if(90 to 100)
. = SPAN_DANGER("It's falling apart! Just touching it might make the whole thing collapse!")
else //At roundstart, weapons start with 0 damage, so it'd be 0 / 1000 * 100 -> 0
return "It looks to be in tip top shape and not damaged at all."
/obj/machinery/ship_weapon/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
. += get_damage_description()
/obj/machinery/ship_weapon/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/device/multitool))
to_chat(user, SPAN_NOTICE("You hook up the tester to \the [src]'s wires: its identification tag is <b>[weapon_id]></b>."))
@@ -496,14 +496,14 @@
if(heat_percentage > 85)
AddOverlays("sensors-effect-hot")
/obj/machinery/shipsensors/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/machinery/shipsensors/condition_hints(mob/user, distance, is_adjacent)
. += ..()
if(health <= 0)
. += "\The [src] is wrecked."
else if(health < max_health * 0.25)
. += SPAN_DANGER("\The [src] looks like it's about to break!")
else if(health < max_health * 0.5)
. += SPAN_DANGER("\The [src] looks seriously damaged!")
. += SPAN_ALERT("\The [src] looks seriously damaged!")
else if(health < max_health * 0.75)
. += "\The [src] shows signs of damage!"
@@ -579,14 +579,11 @@
if(use_power && health == 0)
toggle()
/obj/machinery/shipsensors/RefreshParts()
GetPartUpgradeDesc()
// For small shuttles
/obj/machinery/shipsensors/weak
heat_reduction = 1.7 // Can sustain range 4
max_range = 7
desc = "Miniturized gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements."
desc = "Miniaturized gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements."
deep_scan_range = 0
component_types = list(
/obj/item/circuitboard/shipsensors/weak,
+4 -2
View File
@@ -4,8 +4,6 @@ with an /obj/effect/overmap/visitable/ship present elsewhere on that z level, or
somewhere on that shuttle. Subtypes of these can be then used to perform ship overmap movement functions.
*/
/obj/machinery/computer/ship
desc_antag = "These consoles, especially the ones that handle piloting and weaponry, may be access-locked.\
You can remove this lock with <b>wirecutters</b>, but it would take awhile! Alternatively, you can also use a cryptographic sequencer (emag) for instant removal."
/// Weakrefs to mobs in direct-view mode.
var/list/viewers
/// How much the view is increased by when the mob is in overmap mode.
@@ -19,6 +17,10 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
/// For hotwiring, how many cycles are needed. This decreases by 1 each cycle and triggers at 0
var/hotwire_progress = 8
/obj/machinery/computer/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Consoles like these are typically access-locked."
. += "You can remove this lock with <b>wirecutters</b>, but it would take awhile! Alternatively, you can also use a cryptographic sequencer (emag) for instant removal."
/obj/machinery/computer/ship/proc/display_reconnect_dialog(var/mob/user, var/flavor)
var/datum/browser/popup = new (user, "[src]", "[src]")
+4 -1
View File
@@ -1,7 +1,6 @@
/obj/item/clipboard
name = "clipboard"
desc = "When other writing surfaces are unavailable."
desc_info = "You can store a pen in this."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "clipboard"
item_state = "clipboard"
@@ -15,6 +14,10 @@
var/ui_open = FALSE
slot_flags = SLOT_BELT
/obj/item/clipboard/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can store a pen in this."
/obj/item/clipboard/Initialize()
. = ..()
update_icon()
+6 -3
View File
@@ -2,7 +2,6 @@
name = "journal"
desc = "A journal, kind of like a folder, but bigger! And personal."
var/closed_desc
desc_info = "Alt-click this while it's on your person or next to you to open this journal.\nWhile the journal is open, use it in hand or use a pen on it to access the contents."
icon = 'icons/obj/library.dmi'
icon_state = "journal"
item_state = "journal"
@@ -20,6 +19,11 @@
var/open = FALSE
var/list/indices
/obj/item/journal/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "ALT-click this while it's on your person or next to you to open this journal."
. += "While the journal is open, use it in hand or use a pen on it to access the contents."
/obj/item/journal/Destroy()
for(var/obj/item/folder/embedded/E as anything in indices)
qdel(E)
@@ -109,7 +113,7 @@
/obj/item/journal/notepad
name = "notepad"
desc = "A notepad for jotting down notes in meetings or interrogations."
desc_info = "Alt-click this while it's on your person or next to you to open this notepad.\nWhile the notepad is open, use it in hand or use a pen on it to access the contents."
icon = 'icons/obj/library.dmi'
icon_state = "notepad"
item_state = "notepad"
@@ -140,7 +144,6 @@
/obj/item/journal/notepad/scc
name = "scc notepad"
desc = "A notepad for jotting down notes in corporate meetings. This one is navy blue with a gold SCC logo on the front."
desc_info = "Alt-click this while it's on your person or next to you to open this notepad.\nWhile the notepad is open, use it in hand or use a pen on it to access the contents."
icon_state = "notepad_scc"
item_state = "notepad_scc"
color = COLOR_WHITE
+12 -12
View File
@@ -62,6 +62,18 @@
var/can_change_icon_state = TRUE
var/set_unsafe_on_init = FALSE
/obj/item/paper/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if (old_name && (icon_state == "paper_plane" || icon_state == "paper_swan"))
. += SPAN_NOTICE("You're going to have to unfold it before you can read it.")
return
if(name != initial(name))
. += "It's titled '[name]'."
if(distance <= 1)
show_content(user)
else
. += SPAN_NOTICE("You have to go closer if you want to read it.")
/obj/item/paper/Initialize(mapload, text, title)
. = ..()
base_state = initial(icon_state)
@@ -119,18 +131,6 @@
if(new_text)
free_space -= length(strip_html_properly(new_text))
/obj/item/paper/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if (old_name && (icon_state == "paper_plane" || icon_state == "paper_swan"))
. += SPAN_NOTICE("You're going to have to unfold it before you can read it.")
return
if(name != initial(name))
. += "It's titled '[name]'."
if(distance <= 1)
show_content(user)
else
. += SPAN_NOTICE("You have to go closer if you want to read it.")
/obj/item/paper/proc/show_content(mob/user, forceshow)
simple_asset_ensure_is_sent(user, /datum/asset/simple/paper)
var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE)
+11 -7
View File
@@ -23,6 +23,17 @@
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
/obj/item/paper_bundle/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Both papers and photos can be added to a paper bundle."
/obj/item/paper_bundle/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent)
src.show_content(user)
else
. += SPAN_NOTICE("It is too far away to read.")
/obj/item/paper_bundle/attackby(obj/item/attacking_item, mob/user)
..()
@@ -98,13 +109,6 @@
else
to_chat(user, SPAN_WARNING("You must hold \the [P] steady to burn \the [src]."))
/obj/item/paper_bundle/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(is_adjacent)
src.show_content(user)
else
. += SPAN_NOTICE("It is too far away.")
/obj/item/paper_bundle/proc/show_content(mob/user as mob)
var/dat
var/obj/item/W = pages[page]
+7 -11
View File
@@ -13,6 +13,13 @@
var/amount = 30 //How much paper is in the bin.
var/list/papers = new/list() //List of papers put in the bin for reference.
/obj/item/paper_bin/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent)
if(amount)
. += SPAN_NOTICE("There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.")
else
. += SPAN_NOTICE("There are no papers in the bin.")
/obj/item/paper_bin/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params)
if((over == user && (!( user.restrained() ) && (!( user.stat ) && (user.contents.Find(src) || in_range(src, user))))))
@@ -29,7 +36,6 @@
to_chat(H, SPAN_NOTICE("You pick up the [src]."))
H.put_in_hands(src)
return
/obj/item/paper_bin/attack_hand(mob/user as mob)
@@ -76,7 +82,6 @@
add_fingerprint(user)
return
/obj/item/paper_bin/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/paper))
var/obj/item/paper/i = attacking_item
@@ -85,15 +90,6 @@
papers.Add(i)
amount++
/obj/item/paper_bin/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(is_adjacent)
if(amount)
. += SPAN_NOTICE("There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.")
else
. += SPAN_NOTICE("There are no papers in the bin.")
/obj/item/paper_bin/update_icon()
if(amount < 1)
icon_state = "paper_bin0"
+1 -1
View File
@@ -15,7 +15,7 @@
/obj/item/pen
name = "pen"
desc = "An instrument for writing or drawing. This one is in black."
desc_info = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available:
desc_extended = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available:
<br>
Pen and crayon commands
\[br\] : Creates a linebreak.
+11 -11
View File
@@ -45,6 +45,14 @@ GLOBAL_VAR_INIT(photo_count, 0)
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
/obj/item/photo/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(distance <= 1)
show(user)
. += SPAN_NOTICE("[picture_desc]")
else
. += SPAN_NOTICE("You are too far away to discern its contents.")
/obj/item/photo/New()
. = ..()
id = GLOB.photo_count++
@@ -59,14 +67,6 @@ GLOBAL_VAR_INIT(photo_count, 0)
scribble = txt
..()
/obj/item/photo/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 1)
show(user)
. += SPAN_NOTICE("[picture_desc]")
else
. += SPAN_NOTICE("You are too far away to discern its contents.")
/obj/item/photo/proc/show(mob/user as mob)
send_rsc(user, img, "tmp_photo_[id].png")
var/dat = "<html><head><title>[name]</title></head>" \
@@ -155,10 +155,10 @@ GLOBAL_VAR_INIT(photo_count, 0)
var/icon_off = "camera_off"
var/size = 3
/obj/item/device/camera/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/device/camera/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(is_adjacent)
. += SPAN_NOTICE("It has <b>[pictures_left]</b> photos left.")
. += SPAN_NOTICE("It has <b>[pictures_left] photos</b> left.")
/obj/item/device/camera/verb/change_size()
set name = "Set Photo Focus"
+9 -2
View File
@@ -5,7 +5,6 @@
/obj/item/portable_typewriter
name = "portable typewriter"
desc = "A reasonably lightweight typewriter designed to be moved around."
desc_info = "You can alt-click this to eject the paper. Click and drag onto yourself while adjacent to type on the typewriter."
desc_extended = "The National Typist Company in the People's Republic of Adhomai was once the largest producer of \
typewriters on the planet. With the introduction of human technology, however, these items - \
which were once staples of Tajaran offices - have slowly become more uncommon. That \
@@ -21,6 +20,11 @@
var/obj/item/paper/stored_paper = null
var/obj/item/pen/pen
/obj/item/portable_typewriter/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can ALT-click this to eject the paper."
. += "Click and drag \the [src] onto yourself while adjacent to type on it."
/obj/item/portable_typewriter/Initialize()
. = ..()
@@ -119,7 +123,6 @@
/obj/item/typewriter_case
name = "typewriter case"
desc = "A large briefcase-esque place to store one's typewriter."
desc_info = "You can alt-click on this case to open and close it. A typewriter can only be removed or added when it is open!"
desc_extended = "The National Typist Company in the People's Republic of Adhomai was once the largest producer of \
typewriters on the planet. With the introduction of human technology, however, these items - \
which were once staples of Tajaran offices - have slowly become more uncommon. That \
@@ -139,6 +142,10 @@
var/obj/item/portable_typewriter/machine
var/opened = FALSE
/obj/item/typewriter_case/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "You can ALT-click on this case to open and close it. A typewriter can only be removed or added when it is open!"
/obj/item/typewriter_case/Initialize()
. = ..()
if(!machine)
@@ -1,7 +1,6 @@
/obj/item/am_containment
name = "antimatter containment jar"
desc = "Holds antimatter. Warranty void if exposed to matter."
desc_antag = "Antimatter is extremely volatile, and containment jars are not particularly strong. Weak explosions will reduce the container's integrity, and larger ones will cause it to explode immediately."
icon = 'icons/obj/machinery/antimatter.dmi'
icon_state = "jar"
force = 18
@@ -13,6 +12,9 @@
var/stability = 100 //TODO: add all the stability things to this so its not very safe if you keep hitting in on things
var/exploded = FALSE
/obj/item/am_containment/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Antimatter is extremely volatile, and containment jars are not particularly strong. Weak explosions will reduce the container's integrity, and larger ones will cause it to explode immediately."
/obj/item/am_containment/proc/boom()
var/percent = 0
if(fuel)
+12 -2
View File
@@ -1,8 +1,6 @@
/obj/machinery/power/am_control_unit
name = "antimatter control unit"
desc = "The control unit for an antimatter reactor. Probably safe."
desc_info = "Use a wrench to attach the control unit to the ground, then arrange the reactor sections nearby. Reactor sections can only be activated if they are near the control unit, but otherwise are not restricted in how they must be placed."
desc_antag = "The antimatter engine will quickly destabilize if the fuel injection rate is set too high, causing a large explosion."
icon = 'icons/obj/machinery/new_ame.dmi'
icon_state = "control"
var/icon_mod = "on" // on, critical, or fuck
@@ -32,6 +30,18 @@
var/stored_power = 0 //Power to deploy per tick
/obj/machinery/power/am_control_unit/assembly_hints(mob/user, distance, is_adjacent)
. += ..()
if(!anchored)
. += "First secure the control unit to the ground with some <b>bolts</b>."
else
. += "Arrange the reactor sections nearby and activate them."
. += "Reactor sections can only be activated if they are near the control unit, but otherwise are not restricted in how they must be placed."
/obj/machinery/power/am_control_unit/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "The antimatter engine will quickly destabilize if the fuel injection rate is set too high, causing a large explosion."
/obj/machinery/power/am_control_unit/Destroy()//Perhaps damage and run stability checks rather than just del on the others
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
AMS.control_unit = null
+12 -3
View File
@@ -11,8 +11,6 @@
/obj/machinery/am_shielding
name = "antimatter reactor section"
desc = "A shielding component for an antimatter reactor. Looks delicate."
desc_info = "Antimatter shielding sections must be beside an anchored control unit or another shielding section. If either are destroyed, the section will disappear."
desc_antag = "Antimatter shielding sections are delicate. Attacking the shielding unit with a damaging object will reduce its stability, as will explosions. If the stability hits zero, the reactor may explode."
icon = 'icons/obj/machinery/new_ame.dmi'
icon_state = "shield"
anchored = TRUE
@@ -30,6 +28,14 @@
var/dirs = 0
var/mapped = FALSE //Set to 1 to ignore usual suicide if it doesn't immediately find a control_unit
/obj/machinery/am_shielding/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Antimatter shielding sections must be beside an anchored control unit or another shielding section. If either are destroyed, the section will disappear."
/obj/machinery/am_shielding/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Antimatter shielding sections are delicate. Attacking the shielding unit with a damaging object will reduce its stability, as will explosions. If the stability hits zero, the reactor may explode."
// Stupidly easy way to use it in maps
/obj/machinery/am_shielding/map
mapped = TRUE
@@ -215,7 +221,6 @@
/obj/item/device/am_shielding_container
name = "packaged antimatter reactor section"
desc = "A section of antimatter reactor shielding. Do not eat."
desc_info = "To deploy, drop near an antimatter control unit or an existing deployed section and use your multitool on it."
icon = 'icons/obj/machinery/antimatter.dmi'
icon_state = "box"
item_state = "electronic"
@@ -223,6 +228,10 @@
throw_speed = 1
throw_range = 2
/obj/item/device/am_shielding_container/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "To deploy, drop near an antimatter control unit or an existing deployed section and use your multitool on it."
/obj/item/device/am_shielding_container/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.ismultitool() && isturf(loc))
if(locate(/obj/machinery/am_shielding) in loc)
+14 -7
View File
@@ -71,13 +71,6 @@
ABSTRACT_TYPE(/obj/machinery/power/apc)
name = "area power controller"
desc = "A control terminal for the area electrical systems."
desc_info = "An APC (Area Power Controller) regulates and supplies backup power for the area they are in. Their power channels are divided \
out into 'environmental' (Items that manipulate airflow and temperature), 'lighting' (the lights), and 'equipment' (Everything else that consumes power). \
Power consumption and backup power cell charge can be seen from the interface, further controls (turning a specific channel on, off or automatic, \
toggling the APC's ability to charge the backup cell, or toggling power for the entire area via master breaker) first requires the interface to be unlocked \
with an ID with Engineering access or by one of the station's robots or the artificial intelligence."
desc_antag = "This can be emagged to unlock it. It will cause the APC to have a blue error screen. \
Wires can be pulsed remotely with a signaler attached to it. A powersink will also drain any APCs connected to the same wire the powersink is on."
icon = 'icons/obj/machinery/power/apc.dmi'
icon_state = "apc0"
@@ -144,6 +137,20 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
var/charge_mode = CHARGE_MODE_CHARGE // if we're actually able to charge
var/last_time = 1
/obj/machinery/power/apc/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "An APC (Area Power Controller) regulates and supplies backup power for the area they are in."
. += "Their power channels are divided into 'environmental' (items that manipulate airflow and temperature), 'lighting' (lights), and 'equipment' (everything else that consumes power)."
. += "Power consumption and backup power cell charge can be seen from the interface; further controls (turning a specific channel on, off or automatic, \
toggling the APC's ability to charge the backup cell, or toggling power for the entire area via master breaker) first requires the interface to be unlocked \
with an ID with Engineering access or by one of the ship's robots or AI."
/obj/machinery/power/apc/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This can be emagged to unlock it; it will cause the APC to have a blue error screen."
. += "Wires can be pulsed remotely with a signaler attached to them."
. += "A powersink will drain any APCs connected to the same powernet (wires) the powersink is on"
/obj/machinery/power/apc/Initialize(mapload, var/ndir, var/building=0)
. = ..(mapload)
wires = new(src)
+13 -7
View File
@@ -18,6 +18,19 @@
var/RCon_tag = "NO_TAG"
var/update_locked = 0
/obj/machinery/power/breakerbox/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "A breaker brox functions as an electrical passthrough; if enabled, power will flow freely around it. In substations, this means that the PSU/SMES will be bypassed."
. += "Toggling the breaker box has a sixty-second cooldown time."
. += "A multitool can be used to update or clear the breaker's RCON tag."
/obj/machinery/power/breakerbox/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(on)
. += "It seems to be online."
else
. += "It seems to be offline."
/obj/machinery/power/breakerbox/Initialize()
LAZYADD(SSmachinery.breaker_boxes, src)
return ..()
@@ -40,13 +53,6 @@
/obj/machinery/power/breakerbox/activated/LateInitialize()
set_state(1)
/obj/machinery/power/breakerbox/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(on)
. += SPAN_GOOD("It seems to be online.")
else
. += SPAN_BAD("It seems to be offline.")
/obj/machinery/power/breakerbox/attack_ai(mob/user)
if(!ai_can_interact(user))
return
+5 -6
View File
@@ -47,8 +47,8 @@ By design, d1 is the smallest direction and d2 is the highest
color = COLOR_RED
var/obj/machinery/power/breakerbox/breaker_box
/obj/structure/cable/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/structure/cable/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/found_color_name = "Unknown"
for(var/color_name in GLOB.cable_coil_colours)
var/color_value = GLOB.cable_coil_colours[color_name]
@@ -530,9 +530,8 @@ By design, d1 is the smallest direction and d2 is the highest
update_icon()
update_wclass()
/obj/item/stack/cable_coil/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
/obj/item/stack/cable_coil/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
var/found_color_name = "Unknown"
for(var/color_name in GLOB.cable_coil_colours)
var/color_value = GLOB.cable_coil_colours[color_name]
@@ -542,7 +541,7 @@ By design, d1 is the smallest direction and d2 is the highest
. += "This cable is: <span style='color:[color]'>[found_color_name]</span>"
if(!uses_charge)
. += "There [src.amount == 1 ? "is" : "are"] <b>[src.amount]</b> [src.singular_name]\s of cable in the coil."
. += "There [src.amount == 1 ? "is" : "are"] <b>[src.amount] [src.singular_name]\s</b> of cable in the coil."
else
. += "You have enough charge to produce <b>[get_amount()]</b>."
+14 -14
View File
@@ -2,6 +2,20 @@
// charge from 0 to 100%
// fits in APC to provide backup power
/obj/item/cell/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Injecting 5 units of phoron into a power cell with a syringe will rig it to explode!"
. += "The higher the charge in the cell, the bigger and more damaging the explosion will be."
. += "When rigged, the cell will explode immediately whenever it is next charged or discharged."
/obj/item/cell/feedback_hints(mob/user, distance, is_adjacent)
if(distance > 1)
return
. = list()
. += ..()
. += "The manufacturer's label states this cell has a power rating of [maxcharge]J, and that you should not swallow it."
. += "The charge meter reads [round(src.percent() )]%."
/obj/item/cell/Initialize()
. = ..()
@@ -103,20 +117,6 @@
SEND_SIGNAL(src, COMSIG_CELL_CHARGE, charge)
return amount_used
/obj/item/cell/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance > 1)
return
if(maxcharge <= 2500)
. += "[desc]"
. += "The manufacturer's label states this cell has a power rating of [maxcharge]J, and that you should not swallow it."
. += "The charge meter reads [round(src.percent() )]%."
else
. += "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]J!"
. += "The charge meter reads [round(src.percent() )]%."
/obj/item/cell/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/reagent_containers/syringe))
var/obj/item/reagent_containers/syringe/S = attacking_item
+6 -5
View File
@@ -43,6 +43,12 @@ GLOBAL_LIST_INIT_TYPED(rad_collectors, /obj/machinery/power/rad_collector, list(
/// How long to wait between alert messages, if radiation input exceeds safe levels
var/alert_delay = 10 SECONDS
/obj/machinery/power/rad_collector/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if (..(user, 3))
var/last_power_kw = round(last_power / 1000, 0.1)
. += "The meter indicates that \the [src] is collecting [last_power_kw] kW."
/obj/machinery/power/rad_collector/Initialize()
. = ..()
GLOB.rad_collectors += src
@@ -178,11 +184,6 @@ GLOBAL_LIST_INIT_TYPED(rad_collectors, /obj/machinery/power/rad_collector, list(
desc += " This one is destroyed beyond repair."
update_icon()
/obj/machinery/power/rad_collector/get_examine_text(user, distance, is_adjacent, infix, suffix)
. = ..()
if (..(user, 3))
. += "The meter indicates that \the [src] is collecting [last_power] W."
/obj/machinery/power/rad_collector/return_air()
if(loaded_tank)
return loaded_tank.return_air()
+5 -3
View File
@@ -26,11 +26,13 @@
/obj/item/circuitboard/crystal_agitator
)
component_hint_cap = "Upgraded <b>capacitors</b> will reduce active power usage."
component_hint_servo = "Upgraded <b>manipulators</b> will increase agitation speed."
parts_power_mgmt = FALSE
/obj/machinery/power/crystal_agitator/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Upgraded <b>capacitors</b> will reduce active power usage."
. += "Upgraded <b>manipulators</b> will increase agitation speed."
/obj/machinery/power/crystal_agitator/Initialize()
. = ..()
connect_to_network()
+5
View File
@@ -22,6 +22,11 @@
var/randomize_color = TRUE
var/list/randomized_colors = LIGHT_STANDARD_COLORS
/obj/item/light/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Injecting 5 units of phoron into a light bulb/tube with a syringe will rig it to explode!"
. += "When rigged, the light will explode immediately when it is next turned on."
/obj/item/light/Initialize()
. = ..()
if(randomize_range)

Some files were not shown because too many files have changed in this diff Show More