Merge branch 'master' into upstream-merge-36953

This commit is contained in:
deathride58
2018-04-10 07:21:55 +00:00
committed by GitHub
965 changed files with 27057 additions and 24728 deletions
+3 -2
View File
@@ -3,8 +3,9 @@
plane = GAME_PLANE
var/level = 2
var/flags_1 = 0
var/flags_2 = 0
var/flags_1 = NONE
var/flags_2 = NONE
var/interaction_flags_atom = NONE
var/container_type = NONE
var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff.
var/datum/reagents/reagents = null
+8 -10
View File
@@ -292,6 +292,8 @@
/atom/movable/Crossed(atom/movable/AM, oldloc)
SendSignal(COMSIG_MOVABLE_CROSSED, AM)
/atom/movable/Uncrossed(atom/movable/AM)
SendSignal(COMSIG_MOVABLE_UNCROSSED, AM)
//This is tg's equivalent to the byond bump, it used to be called bump with a second arg
//to differentiate it, naturally everyone forgot about this immediately and so some things
@@ -381,6 +383,9 @@
if(throwing)
return 1
if(!isturf(loc))
return 1
if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return 1
@@ -530,9 +535,8 @@
/atom/movable/proc/relay_container_resist(mob/living/user, obj/O)
return
// CITADEL CHANGE - adds final_pixel_y and final_pixel_x to do_attack_animation args
/atom/movable/proc/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y, final_pixel_y, final_pixel_x)
// CITADEL CHANGE - adds final_pixel_y and final_pixel_x to do_attack_animation args // maybe not needed anymore we'll try it
/atom/movable/proc/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
if(!no_effect && (visual_effect_icon || used_item))
do_item_attack_animation(A, visual_effect_icon, used_item)
@@ -540,11 +544,6 @@
return //don't do an animation if attacking self
var/pixel_x_diff = 0
var/pixel_y_diff = 0
if(!final_pixel_y)// CITADEL CHANGE DOGBORG OFFSET
final_pixel_y = initial(pixel_y)
if(!final_pixel_x)
final_pixel_x = initial(pixel_x) //lol copypasta
var/direction = get_dir(src, A)
if(direction & NORTH)
@@ -558,8 +557,7 @@
pixel_x_diff = -8
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
//animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) //CITADEL CHANGE, DOGBORG OFFSET
animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = final_pixel_y, time = 2)
animate(src, pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2)
/atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item)
var/image/I
+2 -3
View File
@@ -94,10 +94,9 @@
main_cult = C.cult_team
..()
/datum/game_mode/proc/add_cultist(datum/mind/cult_mind, stun , equip = FALSE) //BASE
if (!istype(cult_mind))
return 0
return FALSE
var/datum/antagonist/cult/new_cultist = new()
new_cultist.give_equipment = equip
@@ -105,7 +104,7 @@
if(cult_mind.add_antag_datum(new_cultist))
if(stun)
cult_mind.current.Unconscious(100)
return 1
return TRUE
/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun)
if(cult_mind.current)
+3 -1
View File
@@ -8,7 +8,9 @@
var/datum/airlock_maker/maker = null
/obj/structure/door_assembly/attack_hand()
..()
. = ..()
if(.)
return
if(maker)
maker.interact()
+17 -16
View File
@@ -105,24 +105,25 @@
update_icon()
/obj/machinery/pdapainter/attack_hand(mob/user)
if(!..())
add_fingerprint(user)
. = ..()
if(.)
return
if(storedpda)
var/obj/item/device/pda/P
P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
if(!P)
return
if(!in_range(src, user))
return
if(!storedpda)//is the pda still there?
return
storedpda.icon_state = P.icon_state
storedpda.desc = P.desc
ejectpda()
if(storedpda)
var/obj/item/device/pda/P
P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
if(!P)
return
if(!in_range(src, user))
return
if(!storedpda)//is the pda still there?
return
storedpda.icon_state = P.icon_state
storedpda.desc = P.desc
ejectpda()
else
to_chat(user, "<span class='notice'>[src] is empty.</span>")
else
to_chat(user, "<span class='notice'>[src] is empty.</span>")
/obj/machinery/pdapainter/verb/ejectpda()
+34 -40
View File
@@ -92,6 +92,8 @@ Class Procs:
pressure_resistance = 15
max_integrity = 200
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
var/stat = 0
var/use_power = IDLE_POWER_USE
//0 = dont run the auto
@@ -107,11 +109,11 @@ Class Procs:
var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures.
var/list/occupant_typecache //if set, turned into typecache in Initialize, other wise, defaults to mob/living typecache
var/atom/movable/occupant = null
var/interact_open = FALSE // Can the machine be interacted with when in maint/when the panel is open.
var/interact_offline = FALSE // Can the machine be interacted with while de-powered.
var/speed_process = FALSE // Process as fast as possible?
var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
/obj/machinery/Initialize()
if(!armor)
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
@@ -156,7 +158,7 @@ Class Procs:
new /obj/effect/temp_visual/emp(loc)
..()
/obj/machinery/proc/open_machine(drop = 1)
/obj/machinery/proc/open_machine(drop = TRUE)
state_open = TRUE
density = FALSE
if(drop)
@@ -208,25 +210,29 @@ Class Procs:
/obj/machinery/proc/is_operational()
return !(stat & (NOPOWER|BROKEN|MAINT))
/obj/machinery/proc/is_interactable()
if((stat & (NOPOWER|BROKEN)) && !interact_offline)
/obj/machinery/can_interact(mob/user)
var/silicon = issiliconoradminghost(user)
if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE))
return FALSE
if(panel_open && !interact_open)
if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN))
if(!silicon || !(interaction_flags_machine & INTERACT_MACHINE_OPEN_SILICON))
return FALSE
if(!silicon && (interaction_flags_machine & INTERACT_MACHINE_REQUIRES_SILICON))
return FALSE
else if(silicon && !(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON))
return FALSE
return TRUE
////////////////////////////////////////////////////////////////////////////////////////////
//Return a non FALSE value to interrupt attack_hand propagation to subtypes.
/obj/machinery/interact(mob/user, special_state)
add_fingerprint(user)
if(special_state)
ui_interact(user, state = special_state)
else
ui_interact(user)
if(interaction_flags_machine & INTERACT_MACHINE_SET_MACHINE)
user.set_machine(src)
. = ..()
/obj/machinery/ui_status(mob/user)
if(is_interactable())
if(can_interact(user))
return ..()
return UI_CLOSE
@@ -236,18 +242,15 @@ Class Procs:
/obj/machinery/Topic(href, href_list)
..()
if(!is_interactable())
if(!can_interact(usr))
return 1
if(!usr.canUseTopic(src))
return 1
add_fingerprint(usr)
return 0
////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/attack_paw(mob/living/user)
if(user.a_intent != INTENT_HARM)
return attack_hand(user)
@@ -257,32 +260,23 @@ Class Procs:
user.visible_message("<span class='danger'>[user.name] smashes against \the [src.name] with its paws.</span>", null, null, COMBAT_MESSAGE_RANGE)
take_damage(4, BRUTE, "melee", 1)
/obj/machinery/attack_robot(mob/user)
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
return _try_interact(user)
/obj/machinery/attack_ai(mob/user)
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
if(iscyborg(user))// For some reason attack_robot doesn't work
var/mob/living/silicon/robot/R = user
if(R.client && R.client.eye == R && !R.low_power_mode)// This is to stop robots from using cameras to remotely control machines; and from using machines when the borg has no power.
return attack_hand(user)
return attack_robot(user)
else
return attack_hand(user)
return _try_interact(user)
//set_machine must be 0 if clicking the machinery doesn't bring up a dialog
/obj/machinery/attack_hand(mob/user, check_power = 1, set_machine = 1)
if(..())// unbuckling etc
return 1
if((user.lying || user.stat) && !IsAdminGhost(user))
return 1
if(!user.IsAdvancedToolUser() && !IsAdminGhost(user))
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
return 1
if(!is_interactable())
return 1
if(set_machine)
user.set_machine(src)
interact(user)
add_fingerprint(user)
return 0
/obj/machinery/_try_interact(mob/user)
if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK))
return TRUE
return ..()
/obj/machinery/CheckParts(list/parts_list)
..()
@@ -432,8 +426,8 @@ Class Procs:
display_parts(user)
if(shouldplaysound)
W.play_rped_sound()
return 1
return 0
return TRUE
return FALSE
/obj/machinery/proc/display_parts(mob/user)
to_chat(user, "<span class='notice'>It contains the following parts:</span>")
+1 -6
View File
@@ -30,12 +30,7 @@
else
icon_state = "ai-slipper1"
/obj/machinery/ai_slipper/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/ai_slipper/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
/obj/machinery/ai_slipper/interact(mob/user)
if(!allowed(user))
to_chat(user, "<span class='danger'>Access denied.</span>")
return
+3
View File
@@ -113,6 +113,9 @@
icon_state = "airlock_sensor_off"
/obj/machinery/airlock_sensor/attack_hand(mob/user)
. = ..()
if(.)
return
var/datum/signal/signal = new(list(
"tag" = master_tag,
"command" = "cycle"
+4 -1
View File
@@ -104,7 +104,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
//config stuff
/obj/machinery/announcement_system/interact(mob/user)
/obj/machinery/announcement_system/ui_interact(mob/user)
. = ..()
if(!user.canUseTopic(src, !issilicon(user)))
return
if(stat & BROKEN)
@@ -121,6 +122,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
popup.open()
/obj/machinery/announcement_system/Topic(href, href_list)
if(..())
return
if(!usr.canUseTopic(src, !issilicon(usr)))
return
if(stat & BROKEN)
+16 -14
View File
@@ -101,22 +101,24 @@
update_icon()
/obj/machinery/aug_manipulator/attack_hand(mob/user)
if(!..())
add_fingerprint(user)
. = ..()
if(.)
return
add_fingerprint(user)
if(storedpart)
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
if(!augstyle)
return
if(!in_range(src, user))
return
if(!storedpart)
return
storedpart.icon = style_list_icons[augstyle]
eject_part(user)
if(storedpart)
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
if(!augstyle)
return
if(!in_range(src, user))
return
if(!storedpart)
return
storedpart.icon = style_list_icons[augstyle]
eject_part(user)
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user)
if(storedpart)
+4 -2
View File
@@ -12,7 +12,8 @@
idle_power_usage = 10
active_power_usage = 100
circuit = /obj/item/circuitboard/machine/autolathe
layer = BELOW_OBJ_LAYER
var/operating = FALSE
var/list/L = list()
var/list/LL = list()
@@ -57,7 +58,8 @@
QDEL_NULL(wires)
return ..()
/obj/machinery/autolathe/interact(mob/user)
/obj/machinery/autolathe/ui_interact(mob/user)
. = ..()
if(!is_operational())
return
+2 -4
View File
@@ -55,10 +55,8 @@
/obj/machinery/computer/bank_machine/get_spans()
. = ..() | SPAN_ROBOT
/obj/machinery/computer/bank_machine/attack_hand(mob/user)
if(..())
return
src.add_fingerprint(usr)
/obj/machinery/computer/bank_machine/ui_interact(mob/user)
. = ..()
var/dat = "[station_name()] secure vault. Authorized personnel only.<br>"
dat += "Current Balance: [SSshuttle.points] credits.<br>"
if(!siphoning)
+8 -3
View File
@@ -16,7 +16,6 @@
idle_power_usage = 2
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
. = ..()
if(built)
@@ -98,7 +97,7 @@
return
if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1))
return src.attack_hand(user)
return attack_hand(user)
else
return ..()
@@ -114,6 +113,9 @@
if(!panel_open)
return attack_hand(user)
/obj/machinery/button/attack_robot(mob/user)
return attack_ai(user)
/obj/machinery/button/proc/setup_device()
if(id && istype(device, /obj/item/device/assembly/control))
var/obj/item/device/assembly/control/A = device
@@ -121,9 +123,12 @@
initialized_button = 1
/obj/machinery/button/attack_hand(mob/user)
. = ..()
if(.)
return
if(!initialized_button)
setup_device()
src.add_fingerprint(user)
add_fingerprint(user)
if(panel_open)
if(device || board)
if(device)
+3
View File
@@ -79,6 +79,9 @@
updateicon()
/obj/machinery/cell_charger/attack_hand(mob/user)
. = ..()
if(.)
return
if(!charging)
return
+3 -6
View File
@@ -18,12 +18,8 @@
else
return ..()
/obj/machinery/computer/aifixer/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/aifixer/interact(mob/user)
/obj/machinery/computer/aifixer/ui_interact(mob/user)
. = ..()
var/dat = ""
@@ -105,6 +101,7 @@
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
active = TRUE
add_fingerprint(usr)
updateUsrDialog()
/obj/machinery/computer/aifixer/update_icon()
..()
+3 -2
View File
@@ -46,7 +46,8 @@
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
/obj/machinery/computer/apc_control/interact(mob/living/user)
/obj/machinery/computer/apc_control/ui_interact(mob/living/user)
. = ..()
var/dat
if(authenticated)
if(!checking_logs)
@@ -184,7 +185,7 @@
log_activity("checked APCs")
if(href_list["clear_logs"])
logs = list()
interact(usr) //Refresh the UI after a filter changes
ui_interact(usr) //Refresh the UI after a filter changes
/obj/machinery/computer/apc_control/emag_act(mob/user)
if(!authenticated)
+4 -8
View File
@@ -134,10 +134,8 @@
enemy_name = replacetext((name_part1 + name_part2), "the ", "")
name = (name_action + name_part1 + name_part2)
/obj/machinery/computer/arcade/battle/attack_hand(mob/user)
if(..())
return
user.set_machine(src)
/obj/machinery/computer/arcade/battle/ui_interact(mob/user)
. = ..()
var/dat = "<a href='byond://?src=[REF(src)];close=1'>Close</a>"
dat += "<center><h4>[enemy_name]</h4></center>"
@@ -404,13 +402,11 @@
spaceport_freebie = 0
last_spaceport_action = ""
/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user)
if(..())
return
/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user)
. = ..()
if(fuel <= 0 || food <=0 || settlers.len == 0)
gameStatus = ORION_STATUS_GAMEOVER
event = null
user.set_machine(src)
var/dat = ""
if(gameStatus == ORION_STATUS_GAMEOVER)
dat = "<center><h1>Game Over</h1></center>"
+90 -9
View File
@@ -14,6 +14,34 @@
var/frequency = FREQ_ATMOS_STORAGE
var/datum/radio_frequency/radio_connection
/obj/machinery/air_sensor/atmos/toxin_tank
name = "plasma tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_TOX
/obj/machinery/air_sensor/atmos/toxins_mixing_tank
name = "toxins mixing gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB
/obj/machinery/air_sensor/atmos/oxygen_tank
name = "oxygen tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_O2
/obj/machinery/air_sensor/atmos/nitrogen_tank
name = "nitrogen tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_N2
/obj/machinery/air_sensor/atmos/mix_tank
name = "mix tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_MIX
/obj/machinery/air_sensor/atmos/nitrous_tank
name = "nitrous oxide tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_N2O
/obj/machinery/air_sensor/atmos/air_tank
name = "air mix tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_AIR
/obj/machinery/air_sensor/atmos/carbon_tank
name = "carbon dioxide tank gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_CO2
/obj/machinery/air_sensor/atmos/incinerator_tank
name = "incinerator chamber gas sensor"
id_tag = ATMOS_GAS_MONITOR_SENSOR_INCINERATOR
/obj/machinery/air_sensor/update_icon()
icon_state = "gsensor[on]"
@@ -56,6 +84,7 @@
/////////////////////////////////////////////////////////////
// GENERAL AIR CONTROL (a.k.a atmos computer)
/////////////////////////////////////////////////////////////
GLOBAL_LIST_EMPTY(atmos_air_controllers)
/obj/machinery/computer/atmos_control
name = "atmospherics monitoring"
@@ -66,15 +95,17 @@
var/frequency = FREQ_ATMOS_STORAGE
var/list/sensors = list(
"n2_sensor" = "Nitrogen Tank",
"o2_sensor" = "Oxygen Tank",
"co2_sensor" = "Carbon Dioxide Tank",
"tox_sensor" = "Plasma Tank",
"n2o_sensor" = "Nitrous Oxide Tank",
"air_sensor" = "Mixed Air Tank",
"mix_sensor" = "Mix Tank",
"distro_meter" = "Distribution Loop",
"waste_meter" = "Waste Loop",
ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank",
ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank",
ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank",
ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank",
ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank",
ATMOS_GAS_MONITOR_SENSOR_AIR = "Mixed Air Tank",
ATMOS_GAS_MONITOR_SENSOR_MIX = "Mix Tank",
ATMOS_GAS_MONITOR_LOOP_DISTRIBUTION = "Distribution Loop",
ATMOS_GAS_MONITOR_LOOP_ATMOS_WASTE = "Atmos Waste Loop",
ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber",
ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB = "Toxins Mixing Chamber"
)
var/list/sensor_information = list()
var/datum/radio_frequency/radio_connection
@@ -83,9 +114,11 @@
/obj/machinery/computer/atmos_control/Initialize()
. = ..()
GLOB.atmos_air_controllers += src
set_frequency(frequency)
/obj/machinery/computer/atmos_control/Destroy()
GLOB.atmos_air_controllers -= src
SSradio.remove_object(src, frequency)
return ..()
@@ -142,6 +175,54 @@
var/list/input_info
var/list/output_info
/obj/machinery/computer/atmos_control/tank/oxygen_tank
name = "Oxygen Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_O2
output_tag = ATMOS_GAS_MONITOR_OUTPUT_O2
sensors = list(ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank")
/obj/machinery/computer/atmos_control/tank/toxin_tank
name = "Plasma Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_TOX
output_tag = ATMOS_GAS_MONITOR_OUTPUT_TOX
sensors = list(ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank")
/obj/machinery/computer/atmos_control/tank/air_tank
name = "Mixed Air Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_AIR
output_tag = ATMOS_GAS_MONITOR_OUTPUT_AIR
sensors = list(ATMOS_GAS_MONITOR_SENSOR_AIR = "Air Mix Tank")
/obj/machinery/computer/atmos_control/tank/mix_tank
name = "Gas Mix Tank Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_MIX
output_tag = ATMOS_GAS_MONITOR_OUTPUT_MIX
sensors = list(ATMOS_GAS_MONITOR_SENSOR_MIX = "Gas Mix Tank")
/obj/machinery/computer/atmos_control/tank/nitrous_tank
name = "Nitrous Oxide Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_N2O
output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2O
sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank")
/obj/machinery/computer/atmos_control/tank/nitrogen_tank
name = "Nitrogen Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_N2
output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2
sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank")
/obj/machinery/computer/atmos_control/tank/carbon_tank
name = "Carbon Dioxide Supply Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_CO2
output_tag = ATMOS_GAS_MONITOR_OUTPUT_CO2
sensors = list(ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank")
/obj/machinery/computer/atmos_control/tank/incinerator
name = "Incinerator Air Control"
input_tag = ATMOS_GAS_MONITOR_INPUT_INCINERATOR
output_tag = ATMOS_GAS_MONITOR_OUTPUT_INCINERATOR
sensors = list(ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber")
// This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this
/obj/machinery/computer/atmos_control/tank/proc/reconnect(mob/user)
var/list/IO = list()
+9
View File
@@ -51,6 +51,9 @@
return ..()
/obj/machinery/computer/security/attack_hand(mob/user)
. = ..()
if(.)
return
if(stat)
return
if (!network)
@@ -193,3 +196,9 @@
icon_keyboard = "mining_key"
network = list("mine")
circuit = /obj/item/circuitboard/computer/mining
/obj/machinery/computer/security/research
name = "research camera console"
desc = "Used to access the various cameras in science."
network = list("rd")
circuit = /obj/item/circuitboard/computer/research
@@ -80,14 +80,25 @@
if(M == current_user)
remove_eye_control(M)
/obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user)
return TRUE
/obj/machinery/computer/camera_advanced/abductor/can_use(mob/user)
if(!isabductor(user))
return FALSE
return ..()
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
. = ..()
if(.)
return
if(current_user)
to_chat(user, "The console is already in use!")
return
if(..())
return
var/mob/living/L = user
if(!can_use(user))
return
if(!eyeobj)
CreateEye()
@@ -126,7 +137,6 @@
/obj/machinery/computer/camera_advanced/attack_ai(mob/user)
return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise.
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
GrantActions(user)
current_user = user
@@ -289,7 +299,7 @@
warp_action.target = src
actions += warp_action
/obj/machinery/computer/camera_advanced/ratvar/attack_hand(mob/living/user)
/obj/machinery/computer/camera_advanced/ratvar/can_use(mob/living/user)
if(!is_servant_of_ratvar(user))
to_chat(user, "<span class='warning'>[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.</span>")
return
+11 -7
View File
@@ -133,11 +133,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return -1
return 0
/obj/machinery/computer/card/attack_hand(mob/user)
if(..())
return
/obj/machinery/computer/card/ui_interact(mob/user)
. = ..()
user.set_machine(src)
var/dat
if(!SSticker)
return
@@ -346,8 +344,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/card/Topic(href, href_list)
if(..())
@@ -426,9 +422,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/datum/job/J = new jobtype
if(ckey(J.title) == ckey(t1))
jobdatum = J
updateUsrDialog()
break
if(!jobdatum)
to_chat(usr, "<span class='error'>No log exists for this job.</span>")
updateUsrDialog()
return
modify.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
@@ -451,6 +449,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
to_chat(usr, "<span class='error'>Invalid name entered.</span>")
updateUsrDialog()
return
if ("mode")
mode = text2num(href_list["mode_target"])
@@ -466,8 +465,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
updateUsrDialog()
return 0
if(can_open_job(j) != 1)
updateUsrDialog()
return 0
if(opened_positions[edit_job_target] >= 0)
GLOB.time_last_changed_position = world.time / 10
@@ -481,8 +482,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
updateUsrDialog()
return 0
if(can_close_job(j) != 1)
updateUsrDialog()
return 0
//Allow instant closing without cooldown if a position has been opened before
if(opened_positions[edit_job_target] <= 0)
@@ -497,6 +500,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/priority_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(priority_target)
if(!j)
updateUsrDialog()
return 0
var/priority = TRUE
if(j in SSjob.prioritized_jobs)
@@ -504,6 +508,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
priority = FALSE
else if(j.total_positions <= j.current_positions)
to_chat(usr, "<span class='notice'>[j.title] has had all positions filled. Open up more slots before prioritizing it.</span>")
updateUsrDialog()
return
else
SSjob.prioritized_jobs += j
@@ -525,7 +530,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if (modify)
modify.update_label()
updateUsrDialog()
return
/obj/machinery/computer/card/AltClick(mob/user)
if(user.canUseTopic(src))
+2 -11
View File
@@ -143,17 +143,8 @@
else
return ..()
/obj/machinery/computer/cloning/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/cloning/interact(mob/user)
user.set_machine(src)
add_fingerprint(user)
if(..())
return
/obj/machinery/computer/cloning/ui_interact(mob/user)
. = ..()
updatemodules(TRUE)
+14 -16
View File
@@ -117,7 +117,7 @@
var/security_level = get_security_level()
log_game("[key_name(usr)] has changed the security level to [security_level].")
message_admins("[key_name_admin(usr)] has changed the security level to [security_level].")
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> has changed the security level to [security_level] at <span class='name'>[area_name]</span>.</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> has changed the security level to [security_level] at <span class='name'>[area_name]</span>.</span>", usr)
tmp_alertlevel = 0
else
to_chat(usr, "<span class='warning'>You are not authorized to do this!</span>")
@@ -147,7 +147,7 @@
minor_announce(input, title = "Outgoing message to allied station")
log_talk(usr,"[key_name(usr)] has sent a message to the other server: [input]",LOGSAY)
message_admins("[key_name_admin(usr)] has sent a message to the other server.")
deadchat_broadcast("<span class='deadsay bold'>[usr.name] has sent an outgoing message to the other station(s).</span>", usr)
deadchat_broadcast("<span class='deadsay bold'>[usr.real_name] has sent an outgoing message to the other station(s).</span>", usr)
CM.lastTimeUsed = world.time
if("purchase_menu")
@@ -175,7 +175,7 @@
M.existing_shuttle = SSshuttle.emergency
M.action_load(S)
SSshuttle.points -= S.credit_cost
minor_announce("[usr.name] has purchased [S.name] for [S.credit_cost] credits." , "Shuttle Purchase")
minor_announce("[usr.real_name] has purchased [S.name] for [S.credit_cost] credits." , "Shuttle Purchase")
message_admins("[key_name_admin(usr)] purchased [S.name].")
SSblackbox.record_feedback("text", "shuttle_purchase", 1, "[S.name]")
else
@@ -250,13 +250,13 @@
make_maint_all_access()
log_game("[key_name(usr)] enabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] enabled emergency maintenance access.")
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> enabled emergency maintenance access at <span class='name'>[area_name]</span>.</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> enabled emergency maintenance access at <span class='name'>[area_name]</span>.</span>", usr)
state = STATE_DEFAULT
if("disableemergency")
revoke_maint_all_access()
log_game("[key_name(usr)] disabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] disabled emergency maintenance access.")
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> disabled emergency maintenance access at <span class='name'>[area_name]</span>.</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> disabled emergency maintenance access at <span class='name'>[area_name]</span>.</span>", usr)
state = STATE_DEFAULT
// Status display stuff
@@ -290,7 +290,7 @@
CentCom_announce(input, usr)
to_chat(usr, "<span class='notice'>Message transmitted to Central Command.</span>")
log_talk(usr,"[key_name(usr)] has made a CentCom announcement: [input]",LOGSAY)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> has messaged CentCom, \"[input]\" at <span class='name'>[area_name]</span>.</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> has messaged CentCom, \"[input]\" at <span class='name'>[area_name]</span>.</span>", usr)
CM.lastTimeUsed = world.time
// OMG SYNDICATE ...LETTERHEAD
@@ -307,7 +307,7 @@
Syndicate_announce(input, usr)
to_chat(usr, "<span class='danger'>SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.</span>")
log_talk(usr,"[key_name(usr)] has made a Syndicate announcement: [input]",LOGSAY)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> has messaged the Syndicate, \"[input]\" at <span class='name'>[area_name]</span>.</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> has messaged the Syndicate, \"[input]\" at <span class='name'>[area_name]</span>.</span>", usr)
CM.lastTimeUsed = world.time
if("RestoreBackup")
@@ -390,7 +390,7 @@
var/security_level = get_security_level()
log_game("[key_name(usr)] has changed the security level to [security_level].")
message_admins("[key_name_admin(usr)] has changed the security level to [security_level].")
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.name]</span> has changed the security level to [security_level].</span>", usr)
deadchat_broadcast("<span class='deadsay'><span class='name'>[usr.real_name]</span> has changed the security level to [security_level].</span>", usr)
tmp_alertlevel = 0
aistate = STATE_DEFAULT
if("ai-changeseclevel")
@@ -401,13 +401,13 @@
make_maint_all_access()
log_game("[key_name(usr)] enabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] enabled emergency maintenance access.")
deadchat_broadcast("<span class='deadsay bold'>[usr.name] enabled emergency maintenance access.</span>", usr)
deadchat_broadcast("<span class='deadsay bold'>[usr.real_name] enabled emergency maintenance access.</span>", usr)
aistate = STATE_DEFAULT
if("ai-disableemergency")
revoke_maint_all_access()
log_game("[key_name(usr)] disabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] disabled emergency maintenance access.")
deadchat_broadcast("<span class='deadsay bold'>[usr.name] disabled emergency maintenance access.</span>", usr)
deadchat_broadcast("<span class='deadsay bold'>[usr.real_name] disabled emergency maintenance access.</span>", usr)
aistate = STATE_DEFAULT
updateUsrDialog()
@@ -427,14 +427,12 @@
to_chat(user, "<span class='danger'>You scramble the communication routing circuits!</span>")
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
/obj/machinery/computer/communications/attack_hand(mob/user)
if(..())
return
/obj/machinery/computer/communications/ui_interact(mob/user)
. = ..()
if (z > 6)
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
user.set_machine(src)
var/dat = ""
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
var/timeleft = SSshuttle.emergency.timeLeft()
@@ -516,7 +514,7 @@
else
aistate = STATE_MESSAGELIST
attack_hand(user)
return null
return
if(STATE_DELMESSAGE)
if (currmsg)
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=[REF(src)];operation=delmessage2'>OK</A> | <A HREF='?src=[REF(src)];operation=viewmessage'>Cancel</A> \]"
@@ -703,7 +701,7 @@
return
SScommunications.make_announcement(user, is_silicon, input)
var/area/A = get_area(user)
deadchat_broadcast("<span class='deadsay'><span class='name'>[user.name]</span> made an priority announcement at <span class='name'>[A.name]</span>.</span>", user)
deadchat_broadcast("<span class='deadsay'><span class='name'>[user.real_name]</span> made an priority announcement at <span class='name'>[A.name]</span>.</span>", user)
/obj/machinery/computer/communications/proc/post_status(command, data1, data2)
+3 -12
View File
@@ -15,16 +15,7 @@
/obj/machinery/computer/crew/syndie
icon_keyboard = "syndie_key"
/obj/machinery/computer/crew/attack_ai(mob/user)
if(stat & (BROKEN|NOPOWER))
return
GLOB.crewmonitor.show(user,src)
/obj/machinery/computer/crew/attack_hand(mob/user)
if(..())
return
if(stat & (BROKEN|NOPOWER))
return
/obj/machinery/computer/crew/interact(mob/user)
GLOB.crewmonitor.show(user,src)
GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
@@ -181,10 +172,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
pos_y = null
results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
data_by_z["[z]"] = results
last_update["[z]"] = world.time
return results
/datum/crewmonitor/ui_act(action,params)
+4 -8
View File
@@ -60,12 +60,8 @@
break
injectorready = world.time + INJECTOR_TIMEOUT
/obj/machinery/computer/scan_consolenew/attack_hand(mob/user)
if(..())
return
ShowInterface(user)
/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change)
/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, last_change)
. = ..()
if(!user)
return
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window
@@ -461,7 +457,7 @@
connected.locked = TRUE
current_screen = "working"
ShowInterface(usr)
ui_interact(usr)
sleep(radduration*10)
current_screen = "mainmenu"
@@ -507,7 +503,7 @@
if(connected)
connected.locked = locked_state
ShowInterface(usr,last_change)
ui_interact(usr,last_change)
/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd)
var/length = length(input)
@@ -30,14 +30,6 @@
else
return ..()
/obj/machinery/computer/launchpad/attack_ai(mob/user)
attack_hand(user)
/obj/machinery/computer/launchpad/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/launchpad/proc/pad_exists(number)
var/obj/machinery/launchpad/pad = launchpads[number]
if(QDELETED(pad))
@@ -48,7 +40,8 @@
var/obj/machinery/launchpad/pad = launchpads[number]
return pad
/obj/machinery/computer/launchpad/interact(mob/user)
/obj/machinery/computer/launchpad/ui_interact(mob/user)
. = ..()
var/list/t = list()
if(!LAZYLEN(launchpads))
obj_flags &= ~IN_USE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
+4 -2
View File
@@ -36,7 +36,8 @@
circuit = /obj/item/circuitboard/computer/aiupload
/obj/machinery/computer/upload/ai/attack_hand(mob/user)
if(..())
. = ..()
if(.)
return
src.current = select_active_ai(user)
@@ -60,7 +61,8 @@
circuit = /obj/item/circuitboard/computer/borgupload
/obj/machinery/computer/upload/borg/attack_hand(mob/user)
if(..())
. = ..()
if(.)
return
src.current = select_active_free_borg(user)
-1
View File
@@ -191,7 +191,6 @@
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/med_data/Topic(href, href_list)
. = ..()
+4 -14
View File
@@ -39,12 +39,13 @@
if(M.id == id)
M.close()
/obj/machinery/computer/pod/attack_hand(mob/user)
if(..())
/obj/machinery/computer/pod/ui_interact(mob/user)
. = ..()
if(!allowed(user))
to_chat(user, "<span class='warning'>Access denied.</span>")
return
var/dat = ""
user.set_machine(src)
if(connected)
var/d2
if(timing) //door controls do not need timers.
@@ -69,7 +70,6 @@
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
/obj/machinery/computer/pod/process()
if(!..())
return
@@ -115,7 +115,6 @@
M.drive()
updateUsrDialog()
/obj/machinery/computer/pod/old
name = "\improper DoorMex control console"
title = "Door Controls"
@@ -123,21 +122,12 @@
icon_screen = "library"
icon_keyboard = null
/obj/machinery/computer/pod/old/syndicate
name = "\improper ProComp Executive IIc"
desc = "The Syndicate operate on a tight budget. Operates external airlocks."
title = "External Airlock Controls"
req_access = list(ACCESS_SYNDICATE)
/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user)
if(!allowed(user))
to_chat(user, "<span class='notice'>Access denied.</span>")
return
else
..()
/obj/machinery/computer/pod/old/swf
name = "\improper Magix System IV"
desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition."
+2 -4
View File
@@ -15,10 +15,8 @@
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/prisoner/attack_hand(mob/user)
if(..())
return
user.set_machine(src)
/obj/machinery/computer/prisoner/ui_interact(mob/user)
. = ..()
var/dat = ""
if(screen == 0)
dat += "<HR><A href='?src=[REF(src)];lock=1'>Unlock Console</A>"
+2 -6
View File
@@ -22,12 +22,8 @@
return 0
return 1
/obj/machinery/computer/robotics/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/robotics/interact(mob/user)
/obj/machinery/computer/robotics/ui_interact(mob/user)
. = ..()
if (src.z > 6)
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
+2 -3
View File
@@ -54,9 +54,8 @@
return ..()
//Someone needs to break down the dat += into chunks instead of long ass lines.
/obj/machinery/computer/secure_data/attack_hand(mob/user)
if(..())
return
/obj/machinery/computer/secure_data/ui_interact(mob/user)
. = ..()
if(src.z > 6)
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
return
@@ -85,12 +85,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
///////
/obj/machinery/computer/telecrystals/uplinker/attack_hand(mob/user)
if(..())
return
src.add_fingerprint(user)
user.set_machine(src)
/obj/machinery/computer/telecrystals/uplinker/ui_interact(mob/user)
. = ..()
var/dat = ""
if(linkedboss)
dat += "[linkedboss] has [linkedboss.storedcrystals] telecrystals available for distribution. <BR><BR>"
@@ -109,7 +105,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/telecrystals/uplinker/Topic(href, href_list)
if(..())
@@ -164,13 +159,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
/////////
/obj/machinery/computer/telecrystals/boss/attack_hand(mob/user)
if(..())
return
src.add_fingerprint(user)
user.set_machine(src)
/obj/machinery/computer/telecrystals/boss/ui_interact(mob/user)
. = ..()
var/dat = ""
dat += "<a href='byond://?src=[REF(src)];scan=1'>Scan for TC stations.</a><BR>"
dat += "[storedcrystals] telecrystals are available for distribution. <BR>"
@@ -198,7 +188,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/telecrystals/boss/Topic(href, href_list)
if(..())
+2 -9
View File
@@ -45,15 +45,8 @@
else
return ..()
/obj/machinery/computer/teleporter/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/computer/teleporter/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/teleporter/interact(mob/user)
/obj/machinery/computer/teleporter/ui_interact(mob/user)
. = ..()
var/data = "<h3>Teleporter Status</h3>"
if(!power_station)
data += "<div class='statusDisplay'>No power station linked.</div>"
+2 -2
View File
@@ -372,14 +372,14 @@
/obj/machinery/jukebox/disco/proc/dance4(var/mob/living/M)
//var/speed = rand(1,3) CIT CHANGE -- comments this out to prevent compiling errors
set waitfor = 0
/*var/time = 30 CIT CHANGE -- replaces dance4 with rapid spinning so that disco balls dont make weird shit happen
/*var/time = 30
while(time)
sleep(speed)
for(var/i in 1 to speed)
M.setDir(pick(GLOB.cardinals))
for(var/mob/living/carbon/NS in rangers)
NS.lay_down(TRUE) //specifically excludes silicons to prevent pAI chat spam
time--*/
time--*/ //CIT CHANGE -- replaces dance4 with rapid spinning so that disco balls dont make weird shit happen
M.SpinAnimation(1,30)
/obj/machinery/jukebox/disco/proc/dance5(var/mob/living/M)
+1 -4
View File
@@ -144,10 +144,7 @@
return ..()
/obj/machinery/dna_scannernew/attack_hand(mob/user)
if(..(user,1,0)) //don't set the machine, since there's no dialog
return
/obj/machinery/dna_scannernew/interact(mob/user)
toggle_open(user)
/obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user)
+16 -14
View File
@@ -49,7 +49,6 @@
var/normal_integrity = AIRLOCK_INTEGRITY_N
integrity_failure = 70
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N
interact_open = TRUE
autoclose = TRUE
secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
assemblytype = /obj/structure/door_assembly
@@ -57,6 +56,8 @@
explosion_block = 1
hud_possible = list(DIAG_AIRLOCK_HUD)
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
var/security_level = 0 //How much are wires secured
var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
var/hackProof = FALSE // if true, this door can't be hacked by the AI
@@ -730,9 +731,12 @@
shock(user, 100)
/obj/machinery/door/airlock/attack_paw(mob/user)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/door/airlock/attack_hand(mob/user)
. = ..()
if(.)
return
if(!(issilicon(user) || IsAdminGhost(user)))
if(src.isElectrified())
if(src.shock(user, 100))
@@ -749,16 +753,12 @@
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
else
visible_message("<span class='danger'>[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.</span>")
return
if(panel_open)
if(security_level)
to_chat(user, "<span class='warning'>Wires are protected!</span>")
return
wires.interact(user)
else
..()
return
/obj/machinery/door/airlock/attempt_wire_interaction(mob/user)
if(security_level)
to_chat(user, "<span class='warning'>Wires are protected!</span>")
return WIRE_INTERACTION_FAIL
return ..()
/obj/machinery/door/airlock/proc/electrified_loop()
while (secondsElectrified > 0)
@@ -931,8 +931,9 @@
note.forceMove(get_turf(user))
note = null
update_icon()
else if(is_wire_tool(C))
return attack_hand(user)
else if(is_wire_tool(C) && panel_open)
attempt_wire_interaction(user)
return
else if(istype(C, /obj/item/pai_cable))
var/obj/item/pai_cable/cable = C
cable.plugin(src, user)
@@ -1091,7 +1092,7 @@
if(obj_flags & EMAGGED)
return FALSE
use_power(50)
playsound(src, doorOpen, 30)
playsound(src, doorOpen, 30, 1)
if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
src.closeOther.close()
else
@@ -1411,6 +1412,7 @@
if(!ui)
ui = new(user, src, ui_key, "ai_airlock", name, 550, 456, master_ui, state)
ui.open()
return TRUE
/obj/machinery/door/airlock/ui_data()
var/list/data = list()
+5 -5
View File
@@ -13,6 +13,8 @@
CanAtmosPass = ATMOS_PASS_DENSITY
flags_1 = PREVENT_CLICK_UNDER_1
interaction_flags_atom = INTERACT_ATOM_UI_INTERACT
var/secondsElectrified = 0
var/shockedby = list()
var/visible = TRUE
@@ -133,14 +135,12 @@
do_animate("deny")
return
/obj/machinery/door/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/door/attack_hand(mob/user)
. = ..()
if(.)
return
return try_to_activate_door(user)
/obj/machinery/door/attack_tk(mob/user)
if(requiresID() && !allowed(null))
return
+9 -2
View File
@@ -23,6 +23,7 @@
closingLayer = CLOSED_FIREDOOR_LAYER
assemblytype = /obj/structure/firelock_frame
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70)
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
var/boltslocked = TRUE
var/list/affecting_areas
@@ -82,6 +83,9 @@
stat |= NOPOWER
/obj/machinery/door/firedoor/attack_hand(mob/user)
. = ..()
if(.)
return
if(operating || !density)
return
user.changeNext_move(CLICK_CD_MELEE)
@@ -140,14 +144,17 @@
else
close()
/obj/machinery/door/firedoor/attack_ai(mob/user)
/obj/machinery/door/firedoor/interact(mob/user)
if(!issilicon(user))
return TRUE
add_fingerprint(user)
if(welded || operating || stat & NOPOWER)
return
return TRUE
if(density)
open()
else
close()
return TRUE
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
-4
View File
@@ -201,10 +201,6 @@
take_damage(round(exposed_volume / 200), BURN, 0, 0)
..()
/obj/machinery/door/window/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/door/window/emag_act(mob/user)
if(!operating && density && !(obj_flags & EMAGGED))
obj_flags |= EMAGGED
@@ -14,7 +14,7 @@
var/idSelf
/obj/machinery/doorButtons/attackby(obj/O, mob/user)
attack_hand(user)
return attack_hand(user)
/obj/machinery/doorButtons/proc/findObjsByTag()
return
@@ -59,7 +59,8 @@
break
/obj/machinery/doorButtons/access_button/attack_hand(mob/user)
if(..())
. = ..()
if(.)
return
if(busy)
return
@@ -260,7 +261,8 @@
icon_state = "access_control_standby"
/obj/machinery/doorButtons/airlock_controller/attack_hand(mob/user)
if(..())
. = ..()
if(.)
return
var/datum/browser/popup = new(user, "computer", name)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -26,16 +26,14 @@
var/on = TRUE
/obj/machinery/embedded_controller/interact(mob/user)
/obj/machinery/embedded_controller/ui_interact(mob/user)
. = ..()
user.set_machine(src)
var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.set_content(return_text())
popup.open()
/obj/machinery/embedded_controller/attack_hand(mob/user)
interact(user)
/obj/machinery/embedded_controller/update_icon()
/obj/machinery/embedded_controller/proc/return_text()
+1
View File
@@ -47,6 +47,7 @@ The console is located at computer/gulag_teleporter.dm
update_icon()
/obj/machinery/gulag_teleporter/interact(mob/user)
. = ..()
if(locked)
to_chat(user, "<span class='warning'>[src] is locked!</span>")
return
+2 -1
View File
@@ -172,7 +172,8 @@ Possible to do for anyone motivated enough:
return ..()
/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests.
/obj/machinery/holopad/ui_interact(mob/living/carbon/human/user) //Carn: Hologram requests.
. = ..()
if(!istype(user))
return
+10 -12
View File
@@ -2,9 +2,9 @@
name = "igniter"
desc = "It's useful for igniting plasma."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "igniter1"
icon_state = "igniter0"
var/id = null
var/on = TRUE
var/on = FALSE
anchored = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 2
@@ -12,22 +12,20 @@
max_integrity = 300
armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
/obj/machinery/igniter/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/igniter/attack_paw(mob/user)
return src.attack_hand(user)
/obj/machinery/igniter/on
on = TRUE
icon_state = "igniter1"
/obj/machinery/igniter/attack_hand(mob/user)
if(..())
. = ..()
if(.)
return
add_fingerprint(user)
use_power(50)
src.on = !( src.on )
src.icon_state = text("igniter[]", src.on)
return
on = !( on )
icon_state = "igniter[on]"
/obj/machinery/igniter/process() //ugh why is this even in process()?
if (src.on && !(stat & NOPOWER) )
+4
View File
@@ -66,6 +66,7 @@
add_overlay(filling_overlay)
/obj/machinery/iv_drip/MouseDrop(mob/living/target)
. = ..()
if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE) || !isliving(target))
return
@@ -150,6 +151,9 @@
update_icon()
/obj/machinery/iv_drip/attack_hand(mob/user)
. = ..()
if(.)
return
if(!ishuman(user))
return
if(attached)
+2 -6
View File
@@ -37,12 +37,8 @@
..()
to_chat(user, "It is [on? "on" : "off"].")
/obj/machinery/light_switch/attack_paw(mob/user)
src.attack_hand(user)
/obj/machinery/light_switch/attack_hand(mob/user)
/obj/machinery/light_switch/interact(mob/user)
. = ..()
on = !on
for(var/area/A in area.related)
+6 -7
View File
@@ -29,7 +29,7 @@
"human",
"lizard",
"plasmaman",
"special"
"other"
)
/obj/machinery/limbgrower/Initialize()
@@ -37,7 +37,8 @@
stored_research = new /datum/techweb/specialized/autounlocking/limbgrower
. = ..()
/obj/machinery/limbgrower/interact(mob/user)
/obj/machinery/limbgrower/ui_interact(mob/user)
. = ..()
if(!is_operational())
return
@@ -165,9 +166,6 @@
dat += "<table style='width:100%' align='center'><tr>"
for(var/C in categories)
if(C=="special" && !(obj_flags & EMAGGED)) //Only want to show special when console is emagged
continue
dat += "<td><A href='?src=[REF(src)];category=[C];menu=[LIMBGROWER_CATEGORY_MENU]'>[C]</A></td>"
dat += "</tr><tr>"
//one category per line
@@ -222,8 +220,9 @@
/obj/machinery/limbgrower/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
for(var/datum/design/D in SSresearch.techweb_designs)
if((D.build_type & LIMBGROWER) && ("special" in D.category))
for(var/id in SSresearch.techweb_designs)
var/datum/design/D = SSresearch.techweb_designs[id]
if((D.build_type & LIMBGROWER) && ("emagged" in D.category))
stored_research.add_design(D)
to_chat(user, "<span class='warning'>A warning flashes onto the screen, stating that safety overrides have been deactivated!</span>")
obj_flags |= EMAGGED
+2 -8
View File
@@ -238,14 +238,8 @@
if(M.freq == frequency && M.code == code)
magnets.Add(M)
/obj/machinery/magnetic_controller/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/magnetic_controller/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
user.set_machine(src)
/obj/machinery/magnetic_controller/ui_interact(mob/user)
. = ..()
var/dat = "<B>Magnetic Control Console</B><BR><BR>"
if(!autolink)
dat += {"
+3 -4
View File
@@ -108,10 +108,9 @@
/obj/machinery/navbeacon/attack_paw()
return
/obj/machinery/navbeacon/attack_hand(mob/user)
interact(user, 0)
/obj/machinery/navbeacon/interact(mob/user, ai = 0)
/obj/machinery/navbeacon/ui_interact(mob/user)
. = ..()
var/ai = isAI(user)
var/turf/T = loc
if(T.intact)
return // prevent intraction when T-scanner revealed
+2 -6
View File
@@ -263,12 +263,8 @@ GLOBAL_LIST_EMPTY(allCasters)
. = ..()
update_icon()
/obj/machinery/newscaster/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/newscaster/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
/obj/machinery/newscaster/ui_interact(mob/user)
. = ..()
if(ishuman(user) || issilicon(user))
var/mob/living/human_or_robot_user = user
var/dat
+5 -9
View File
@@ -5,15 +5,15 @@
desc = "Dispenses countless types of pipes. Very useful if you need pipes."
density = TRUE
anchored = TRUE
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE
var/wait = 0
var/piping_layer = PIPING_LAYER_DEFAULT
/obj/machinery/pipedispenser/attack_paw(mob/user)
return attack_hand(user)
/obj/machinery/pipedispenser/attack_hand(mob/user)
if(..())
return 1
/obj/machinery/pipedispenser/ui_interact(mob/user)
. = ..()
var/dat = "PIPING LAYER: <A href='?src=[REF(src)];layer_down=1'>--</A><b>[piping_layer]</b><A href='?src=[REF(src)];layer_up=1'>++</A><BR>"
var/recipes = GLOB.atmos_pipe_recipes
@@ -99,9 +99,7 @@
qdel(pipe)
/obj/machinery/pipedispenser/disposal/attack_hand(mob/user)
if(..())
return 1
/obj/machinery/pipedispenser/disposal/interact(mob/user)
var/dat = ""
var/recipes = GLOB.disposal_pipe_recipes
@@ -151,9 +149,7 @@
desc = "Dispenses pipes that will move beings around."
anchored = TRUE
/obj/machinery/pipedispenser/disposal/transit_tube/attack_hand(mob/user)
if(..())
return 1
/obj/machinery/pipedispenser/disposal/transit_tube/interact(mob/user)
var/dat = {"<B>Transit Tubes:</B><BR>
<A href='?src=[REF(src)];tube=[TRANSIT_TUBE_STRAIGHT]'>Straight Tube</A><BR>
@@ -162,18 +162,8 @@
remove_control()
return ..()
/obj/machinery/porta_turret/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/porta_turret/attack_hand(mob/user)
/obj/machinery/porta_turret/ui_interact(mob/user)
. = ..()
if(.)
return
interact(user)
/obj/machinery/porta_turret/interact(mob/user)
var/dat
dat += "Status: <a href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</a><br>"
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<br>"
@@ -819,7 +809,7 @@
user << browse(null, "window=turretid")
else
if (user.machine==src)
src.attack_hand(user)
attack_hand(user)
else
to_chat(user, "<span class='warning'>Access denied.</span>")
@@ -838,7 +828,8 @@
else
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
/obj/machinery/turretid/attack_hand(mob/user as mob)
/obj/machinery/turretid/ui_interact(mob/user)
. = ..()
if ( get_dist(src, user) > 0 )
if ( !(issilicon(user) || IsAdminGhost(user)) )
to_chat(user, "<span class='notice'>You are too far away.</span>")
@@ -846,7 +837,6 @@
user << browse(null, "window=turretid")
return
user.set_machine(src)
var/t = ""
if(locked && !(issilicon(user) || IsAdminGhost(user)))
@@ -873,7 +863,7 @@
toggle_on()
else if (href_list["toggleLethal"])
toggle_lethal()
src.attack_hand(usr)
attack_hand(usr)
/obj/machinery/turretid/proc/toggle_lethal()
lethal = !lethal
@@ -1000,7 +990,8 @@
if(properties["team_color"])
team_color = properties["team_color"]
/obj/machinery/porta_turret/lasertag/interact(mob/user)
/obj/machinery/porta_turret/lasertag/ui_interact(mob/user)
. = ..()
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(team_color == "blue" && istype(H.wear_suit, /obj/item/clothing/suit/redtag))
@@ -1035,4 +1026,4 @@
if(istype(P, /obj/item/projectile/beam/lasertag/bluetag))
on = FALSE
spawn(100)
on = TRUE
on = TRUE
@@ -168,6 +168,9 @@
/obj/machinery/porta_turret_construct/attack_hand(mob/user)
. = ..()
if(.)
return
switch(build_step)
if(PTURRET_GUN_EQUIPPED)
build_step = PTURRET_INTERNAL_ARMOUR_ON
+6
View File
@@ -69,6 +69,9 @@
return ..()
/obj/machinery/quantumpad/attack_hand(mob/user)
. = ..()
if(.)
return
if(panel_open)
to_chat(user, "<span class='warning'>The panel must be closed before operating this machine!</span>")
return
@@ -102,6 +105,9 @@
s.start()
/obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost)
. = ..()
if(.)
return
if(!linked_pad && map_pad_link_id)
initMappedLink()
if(linked_pad)
+2 -4
View File
@@ -73,7 +73,8 @@
return ..()
/obj/machinery/recharger/attack_hand(mob/user)
if(issilicon(user))
. = ..()
if(.)
return
add_fingerprint(user)
@@ -85,9 +86,6 @@
use_power = IDLE_POWER_USE
update_icon()
/obj/machinery/recharger/attack_paw(mob/user)
return attack_hand(user)
/obj/machinery/recharger/attack_tk(mob/user)
if(charging)
charging.update_icon()
+11 -23
View File
@@ -10,6 +10,7 @@
req_access = list(ACCESS_ROBOTICS)
state_open = TRUE
circuit = /obj/item/circuitboard/machine/cyborgrecharger
occupant_typecache = list(/mob/living/silicon/robot)
var/recharge_speed
var/repairs
@@ -47,12 +48,6 @@
open_machine()
..()
/obj/machinery/recharge_station/attack_paw(mob/user)
return attack_hand(user)
/obj/machinery/recharge_station/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params)
if(state_open)
if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P))
@@ -68,12 +63,9 @@
return
return ..()
/obj/machinery/recharge_station/attack_hand(mob/user)
if(..(user,1,set_machine = 0))
return
/obj/machinery/recharge_station/interact(mob/user)
toggle_open()
add_fingerprint(user)
return TRUE
/obj/machinery/recharge_station/proc/toggle_open()
if(state_open)
@@ -82,20 +74,16 @@
open_machine()
/obj/machinery/recharge_station/open_machine()
..()
use_power = IDLE_POWER_USE
. = ..()
if(iscyborg(occupant))
use_power = IDLE_POWER_USE
/obj/machinery/recharge_station/close_machine()
if(!panel_open)
for(var/mob/living/silicon/robot/R in loc)
R.forceMove(src)
occupant = R
. = ..()
if(occupant)
if(iscyborg(occupant))
use_power = ACTIVE_POWER_USE
add_fingerprint(R)
break
state_open = FALSE
density = TRUE
update_icon()
add_fingerprint(occupant)
/obj/machinery/recharge_station/update_icon()
if(is_operational())
@@ -111,7 +99,7 @@
update_icon()
/obj/machinery/recharge_station/proc/process_occupant()
if(occupant)
if(occupant && iscyborg(occupant))
var/mob/living/silicon/robot/R = occupant
restock_modules()
if(repairs)
+2 -3
View File
@@ -129,9 +129,8 @@ GLOBAL_LIST_EMPTY(allConsoles)
GLOB.allConsoles -= src
return ..()
/obj/machinery/requests_console/attack_hand(mob/user)
if(..())
return
/obj/machinery/requests_console/ui_interact(mob/user)
. = ..()
var/dat = ""
if(!open)
switch(screen)
+2 -6
View File
@@ -40,13 +40,9 @@
else
stat |= NOPOWER
/obj/machinery/robotic_fabricator/attack_paw(mob/user)
return src.attack_hand(user)
/obj/machinery/robotic_fabricator/attack_hand(mob/user)
/obj/machinery/robotic_fabricator/ui_interact(mob/user)
. = ..()
var/dat
if (..())
return
if (src.operating)
dat = {"
+6 -3
View File
@@ -120,6 +120,9 @@
update_icon()
/obj/machinery/shieldgen/attack_hand(mob/user)
. = ..()
if(.)
return
if(locked)
to_chat(user, "<span class='warning'>The machine is locked, you are unable to use it!</span>")
return
@@ -358,6 +361,9 @@
return ..()
/obj/machinery/shieldwallgen/attack_hand(mob/user)
. = ..()
if(.)
return
if(!anchored)
to_chat(user, "<span class='warning'>\The [src] needs to be firmly secured to the floor first!</span>")
return
@@ -421,9 +427,6 @@
gen_secondary = null
return ..()
/obj/machinery/shieldwall/attack_hand(mob/user)
return
/obj/machinery/shieldwall/process()
if(needs_power)
if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active)
+2 -8
View File
@@ -108,14 +108,8 @@
spark_system.start()
playsound(src, "sparks", 50, 1)
/obj/machinery/computer/slot_machine/attack_hand(mob/living/user)
. = ..() //Sanity checks.
if(.)
return .
interact(user)
/obj/machinery/computer/slot_machine/interact(mob/living/user)
/obj/machinery/computer/slot_machine/ui_interact(mob/living/user)
. = ..()
var/reeltext = {"<center><font face=\"courier new\">
/*****^*****^*****^*****^*****\\<BR>
| \[[reels[1][1]]\] | \[[reels[2][1]]\] | \[[reels[3][1]]\] | \[[reels[4][1]]\] | \[[reels[5][1]]\] |<BR>
+1 -1
View File
@@ -5,7 +5,7 @@
/obj/machinery/space_heater
anchored = FALSE
density = TRUE
interact_open = TRUE
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN
icon = 'icons/obj/atmos.dmi'
icon_state = "sheater-off"
name = "space heater"
+3 -2
View File
@@ -47,12 +47,13 @@
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
. = ..()
if(.)
return
if(anchored)
return active ? Deactivate(user) : Activate(user)
else
to_chat(user, "<span class='warning'>You need to screw the beacon to the floor first!</span>")
return
/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
+2 -6
View File
@@ -12,6 +12,8 @@
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
resistance_flags = FIRE_PROOF | ACID_PROOF
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_OFFLINE
var/minimum_timer = 90
var/timer_set = 90
var/maximum_timer = 60000
@@ -174,12 +176,6 @@
if((old_integ > obj_integrity) && active && !defused && (payload in src))
to_chat(user, "<span class='warning'>That seems like a really bad idea...</span>")
/obj/machinery/syndicatebomb/attack_hand(mob/user)
interact(user)
/obj/machinery/syndicatebomb/attack_ai()
return
/obj/machinery/syndicatebomb/interact(mob/user)
wires.interact(user)
if(!open_panel)
@@ -17,10 +17,8 @@
req_access = list(ACCESS_TCOMSAT)
circuit = /obj/item/circuitboard/computer/comm_server
/obj/machinery/computer/telecomms/server/attack_hand(mob/user)
if(..())
return
user.set_machine(src)
/obj/machinery/computer/telecomms/server/ui_interact(mob/user)
. = ..()
var/dat = "<TITLE>Telecommunication Server Monitor</TITLE><center><b>Telecommunications Server Monitor</b></center>"
switch(screen)
@@ -77,9 +77,8 @@
GLOB.telecomms_list -= src
. = ..()
/obj/machinery/computer/message_monitor/attack_hand(mob/living/user)
if(..())
return
/obj/machinery/computer/message_monitor/ui_interact(mob/living/user)
. = ..()
//If the computer is being hacked or is emagged, display the reboot message.
if(hacking || (obj_flags & EMAGGED))
message = rebootmsg
@@ -236,7 +235,6 @@
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
return
/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user)
if(isnull(linkedServer))
@@ -19,10 +19,8 @@
var/temp = "" // temporary feedback messages
circuit = /obj/item/circuitboard/computer/comm_monitor
/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user)
if(..())
return
user.set_machine(src)
/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user)
. = ..()
var/dat = "<TITLE>Telecommunications Monitor</TITLE><center><b>Telecommunications Monitor</b></center>"
switch(screen)
@@ -31,24 +31,14 @@
else
return ..()
/obj/machinery/telecomms/attack_ai(mob/user)
attack_hand(user)
/obj/machinery/telecomms/attack_hand(mob/user)
/obj/machinery/telecomms/ui_interact(mob/user)
. = ..()
// You need a multitool to use this, or be silicon
if(!issilicon(user))
// istype returns false if the value is null
if(!istype(user.get_active_held_item(), /obj/item/device/multitool))
return
if(stat & (BROKEN|NOPOWER))
return
var/obj/item/device/multitool/P = get_multitool(user)
user.set_machine(src)
var/dat
dat = "<font face = \"Courier\"><HEAD><TITLE>[name]</TITLE></HEAD><center><H3>[name] Access</H3></center>"
dat += "<br>[temp]<br>"
@@ -38,4 +38,4 @@
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
if(istype(P, /obj/item/device/multitool))
attack_hand(user)
return attack_hand(user)
+9 -17
View File
@@ -77,7 +77,7 @@
to_chat(M, "<span class='italics'>You hear a buzzing in your ears.</span>")
human.set_species(/datum/species/fly)
human.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), IRRADIATE, 0)
human.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0)
calibrated = 0
return
@@ -183,32 +183,24 @@
else
return ..()
/obj/machinery/teleport/station/attack_paw()
src.attack_hand()
/obj/machinery/teleport/station/attack_ai()
src.attack_hand()
/obj/machinery/teleport/station/attack_hand(mob/user)
if(!panel_open)
toggle(user)
/obj/machinery/teleport/station/interact(mob/user)
toggle(user)
/obj/machinery/teleport/station/proc/toggle(mob/user)
if(stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console )
return
if (teleporter_console.target)
if(teleporter_hub.panel_open || teleporter_hub.stat & (BROKEN|NOPOWER))
visible_message("<span class='alert'>The teleporter hub isn't responding.</span>")
to_chat(user, "<span class='alert'>The teleporter hub isn't responding.</span>")
else
src.engaged = !src.engaged
engaged = !engaged
use_power(5000)
visible_message("<span class='notice'>Teleporter [engaged ? "" : "dis"]engaged!</span>")
to_chat(user, "<span class='notice'>Teleporter [engaged ? "" : "dis"]engaged!</span>")
else
visible_message("<span class='alert'>No target detected.</span>")
src.engaged = 0
to_chat(user, "<span class='alert'>No target detected.</span>")
engaged = FALSE
teleporter_hub.update_icon()
src.add_fingerprint(user)
return
add_fingerprint(user)
/obj/machinery/teleport/station/power_change()
..()
+3
View File
@@ -220,6 +220,9 @@
return ..()
/obj/machinery/washing_machine/attack_hand(mob/user)
. = ..()
if(.)
return
if(busy)
to_chat(user, "<span class='warning'>[src] is busy.</span>")
return
+3
View File
@@ -12,6 +12,9 @@
var/insisting = 0
/obj/machinery/wish_granter/attack_hand(mob/living/carbon/user)
. = ..()
if(.)
return
if(charges <= 0)
to_chat(user, "The Wish Granter lies silent.")
return
+5 -1
View File
@@ -8,6 +8,7 @@
var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter
var/projectile_delay = 0
var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the weapon is fired.
var/kickback = TRUE //Will using this weapon in no grav push mecha back.
/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M)
if(..())
@@ -49,7 +50,9 @@
playsound(chassis, fire_sound, 50, 1)
sleep(max(0, projectile_delay))
if(kickback)
chassis.newtonian_move(turn(chassis.dir,180))
chassis.log_message("Fired from [src.name], targeting [target].")
return 1
@@ -152,6 +155,7 @@
energy_drain = 200
equip_cooldown = 150
range = MELEE|RANGED
kickback = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M)
if(..())
-8
View File
@@ -78,14 +78,6 @@
var/obj/machinery/mech_bay_recharge_port/recharge_port
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/mech_bay_power_console/attack_ai(mob/user)
return interact(user)
/obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
+2 -7
View File
@@ -247,14 +247,9 @@
/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran
return round(initial(D.construction_time)*time_coeff, roundto)
/obj/machinery/mecha_part_fabricator/attack_hand(mob/user)
if(!(..()))
return interact(user)
/obj/machinery/mecha_part_fabricator/interact(mob/user as mob)
/obj/machinery/mecha_part_fabricator/ui_interact(mob/user as mob)
. = ..()
var/dat, left_part
if (..())
return
user.set_machine(src)
var/turf/exit = get_step(src,(dir))
if(exit.density)
+2 -5
View File
@@ -9,10 +9,8 @@
var/screen = 0
var/stored_data
/obj/machinery/computer/mecha/attack_hand(mob/user)
if(..())
return
user.set_machine(src)
/obj/machinery/computer/mecha/ui_interact(mob/user)
. = ..()
var/dat = "<html><head><title>[src.name]</title><style>h3 {margin: 0px; padding: 0px;}</style></head><body>"
if(screen == 0)
dat += "<h3>Tracking beacons data</h3>"
@@ -36,7 +34,6 @@
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/mecha/Topic(href, href_list)
if(..())
+4 -1
View File
@@ -55,6 +55,9 @@
/obj/mecha/attack_hand(mob/living/user)
. = ..()
if(.)
return
user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code.
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1)
@@ -319,7 +322,7 @@
if(L)
L.ratvar_act()
/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y)
/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
if(!no_effect)
if(selected)
used_item = selected
+1 -3
View File
@@ -12,6 +12,7 @@
/obj/item/mecha_parts/chassis
name = "Mecha Chassis"
icon_state = "backbone"
interaction_flags_item = NONE //Don't pick us up!!
var/construct_type
/obj/item/mecha_parts/chassis/Initialize()
@@ -19,9 +20,6 @@
if(construct_type)
AddComponent(construct_type)
/obj/item/mecha_parts/chassis/attack_hand()
return
/////////// Ripley
/obj/item/mecha_parts/chassis/ripley
+2
View File
@@ -11,6 +11,8 @@
//Interaction
/atom/movable/attack_hand(mob/living/user)
. = ..()
if(.)
return
if(can_buckle && has_buckled_mobs())
if(buckled_mobs.len > 1)
var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs
+3
View File
@@ -98,6 +98,9 @@
roll_and_drop(user.loc)
/obj/structure/sign/poster/attack_hand(mob/user)
. = ..()
if(.)
return
if(ruined)
return
visible_message("[user] rips [src] in a single, decisive motion!" )
@@ -109,6 +109,9 @@
beauty = -200
/obj/effect/decal/cleanable/vomit/attack_hand(mob/user)
. = ..()
if(.)
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(isflyperson(H))
@@ -286,12 +286,15 @@
move_update_air(T)
/obj/structure/foamedmetal/attack_paw(mob/user)
attack_hand(user)
return attack_hand(user)
/obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1)
/obj/structure/foamedmetal/attack_hand(mob/user)
. = ..()
if(.)
return
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
to_chat(user, "<span class='warning'>You hit [src] but bounce off it!</span>")
+12 -1
View File
@@ -35,6 +35,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
layer = MOB_LAYER
var/jobspawn_override = FALSE
var/delete_after_roundstart = TRUE
var/used = FALSE
/obj/effect/landmark/start/proc/after_round_start()
if(delete_after_roundstart)
qdel(src)
/obj/effect/landmark/start/New()
GLOB.start_landmarks_list += src
@@ -187,12 +192,18 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon_state = "AI"
delete_after_roundstart = FALSE
var/primary_ai = TRUE
var/latejoin_active = TRUE
/obj/effect/landmark/start/ai/after_round_start()
if(latejoin_active && !used)
new /obj/structure/AIcore/latejoin_inactive(loc)
return ..()
/obj/effect/landmark/start/ai/secondary
icon = 'icons/effects/landmarks_static.dmi'
icon_state = "ai_spawn"
primary_ai = FALSE
latejoin_active = FALSE
//Department Security spawns
-1
View File
@@ -121,7 +121,6 @@
if(!victim.client || !istype(victim))
return
to_chat(victim, "<span class='reallybig redtext'>RIP AND TEAR</span>")
SEND_SOUND(victim, sound('sound/misc/e1m1.ogg'))
var/old_color = victim.client.color
var/static/list/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0)
var/static/list/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0)
+3
View File
@@ -57,6 +57,9 @@
return
/obj/effect/portal/attack_hand(mob/user)
. = ..()
if(.)
return
if(get_turf(user) == get_turf(src))
teleport(user)
if(Adjacent(user))
@@ -151,7 +151,7 @@ again.
//shuttle window
/obj/effect/spawner/structure/window/shuttle
name = "reinforced tinted window spawner"
name = "reinforced shuttle window spawner"
icon_state = "swindow_spawner"
spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle)
@@ -225,7 +225,7 @@ again.
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/fulltile)
/obj/effect/spawner/structure/window/hollow/plasma/reinforced
name = "hollow plasma window spawner"
name = "hollow reinforced plasma window spawner"
icon_state = "phrwindow_spawner_full"
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
+2 -1
View File
@@ -99,10 +99,11 @@
. = ..()
/obj/structure/spider/spiderling/Initialize()
. = ..()
pixel_x = rand(6,-6)
pixel_y = rand(6,-6)
START_PROCESSING(SSobj, src)
. = ..()
AddComponent(/datum/component/swarming)
/obj/structure/spider/spiderling/hunter
grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
+14 -4
View File
@@ -49,6 +49,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
//Since any item can now be a piece of clothing, this has to be put here so all items share it.
var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc.
var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP
var/item_color = null //this needs deprecating, soonish
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
@@ -98,6 +100,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/force_string //string form of an item's force. Edit this var only to set a custom force string
var/last_force_string_check = 0
var/tip_timer
var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322
var/trigger_guard = TRIGGER_GUARD_NONE
@@ -238,6 +241,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
return ..()
/obj/item/attack_hand(mob/user)
. = ..()
if(.)
return
if(!user)
return
if(anchored)
@@ -250,7 +256,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
can_handle_hot = TRUE
else if(C.gloves && (C.gloves.max_heat_protection_temperature > 360))
can_handle_hot = TRUE
else if(C.has_trait(TRAIT_RESISTHEAT))
else if(C.has_trait(TRAIT_RESISTHEAT) || C.has_trait(TRAIT_RESISTHEATHANDS))
can_handle_hot = TRUE
if(can_handle_hot)
@@ -272,6 +278,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage
C.update_damage_overlays()
if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup.
return
if(istype(loc, /obj/item/storage))
//If the item is in a storage item, take it out
@@ -281,7 +289,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(throwing)
throwing.finalize(FALSE)
if(loc == user)
if(!user.dropItemToGround(src))
if(!allow_attack_hand_drop(user) || !user.dropItemToGround(src))
return
pickup(user)
@@ -413,9 +421,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
// called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user)
SendSignal(COMSIG_ITEM_PICKUP, user)
item_flags |= IN_INVENTORY
return
/obj/item/proc/allow_attack_hand_drop(mob/user)
return TRUE
// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
/obj/item/proc/on_exit_storage(obj/item/storage/S)
@@ -509,7 +519,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
to_chat(user, "<span class='danger'>You cannot locate any organic eyes on this brain!</span>")
return
if(user.staminaloss >= STAMINA_SOFTCRIT)//CIT CHANGE - makes eyestabbing impossible if you're in stamina softcrit
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes eyestabbing impossible if you're in stamina softcrit
to_chat(user, "<span class='danger'>You're too exhausted for that.</span>")//CIT CHANGE - ditto
return //CIT CHANGE - ditto
+1 -1
View File
@@ -306,7 +306,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
/obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user)
/obj/item/pipe_dispenser/pre_attack(atom/A, mob/user)
if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
return ..()
@@ -18,6 +18,7 @@
var/lastattacker = null
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/cardboard_cutout/attack_hand(mob/living/user)
if(user.a_intent == INTENT_HELP || pushed_over)
return ..()
+13
View File
@@ -290,6 +290,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
desc = "A Shady Jim's Super Slims cigarette."
list_reagents = list("nicotine" = 15, "lipolicide" = 4, "ammonia" = 2, "plantbgone" = 1, "toxin" = 1.5)
/obj/item/clothing/mask/cigarette/xeno
desc = "A Xeno Filtered brand cigarette."
list_reagents = list ("nicotine" = 20, "regen_jelly" = 15, "krokodil" = 4)
// Rollies.
/obj/item/clothing/mask/cigarette/rollie
@@ -609,6 +613,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
. = "<span class='notice'>After some fiddling, [user] manages to light [A] with [src].</span>"
/obj/item/lighter/slime
name = "slime zippo"
desc = "A specialty zippo made from slimes and industry. Has a much hotter flame than normal."
icon_state = "slimezippo"
heat = 3000 //Blue flame!
light_color = LIGHT_COLOR_CYAN
grind_results = list("iron" = 1, "welding_fuel" = 5, "pyroxadone" = 5)
///////////
//ROLLING//
///////////
@@ -236,6 +236,10 @@
name = "Outpost Status Display (Computer Board)"
build_path = /obj/machinery/computer/security/mining
/obj/item/circuitboard/computer/research
name = "Research Monitor (Computer Board)"
build_path = /obj/machinery/computer/security/research
/obj/item/circuitboard/computer/comm_monitor
name = "Telecommunications Monitor (Computer Board)"
build_path = /obj/machinery/computer/telecomms/monitor
+3 -1
View File
@@ -80,6 +80,7 @@
/obj/item/defibrillator/ui_action_click()
toggle_paddles()
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/defibrillator/attack_hand(mob/user)
if(loc == user)
if(slot_flags == SLOT_BACK)
@@ -96,9 +97,10 @@
return
else if(istype(loc, /obj/machinery/defibrillator_mount))
ui_action_click() //checks for this are handled in defibrillator.mount.dm
..()
return ..()
/obj/item/defibrillator/MouseDrop(obj/over_object)
. = ..()
if(ismob(loc))
var/mob/M = loc
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
+1 -1
View File
@@ -167,7 +167,7 @@ GLOBAL_LIST_EMPTY(PDAs)
var/mob/M = usr
if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src))
return attack_self(M)
return
return ..()
/obj/item/device/pda/attack_self(mob/user)
if(!user.IsAdvancedToolUser())
@@ -46,8 +46,11 @@
tracking = null
return ..()
/obj/item/device/camera_bug/interact(mob/user)
ui_interact(user)
/obj/item/device/camera_bug/interact(mob/user = usr)
/obj/item/device/camera_bug/ui_interact(mob/user = usr)
. = ..()
var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src)
popup.set_content(menu(get_cameras()))
popup.open()
@@ -116,6 +116,7 @@
/obj/effect/dummy/chameleon/attackby()
master.disrupt()
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/effect/dummy/chameleon/attack_hand()
master.disrupt()
@@ -36,6 +36,9 @@
interact(user)
/obj/item/device/instrument/interact(mob/user)
ui_interact(user)
/obj/item/device/instrument/ui_interact(mob/user)
if(!user)
return
@@ -87,6 +87,9 @@
return
/obj/item/device/powersink/attack_hand(mob/user)
. = ..()
if(.)
return
switch(mode)
if(DISCONNECTED)
..()
@@ -27,13 +27,14 @@
SSradio.remove_object(src, frequency)
return ..()
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/device/electropack/attack_hand(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
if(src == C.back)
to_chat(user, "<span class='warning'>You need help taking this off!</span>")
return
..()
return ..()
/obj/item/device/electropack/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/clothing/head/helmet))
@@ -86,6 +86,9 @@
interact(user)
/obj/item/device/radio/intercom/attack_hand(mob/user)
. = ..()
if(.)
return
interact(user)
/obj/item/device/radio/intercom/interact(mob/user)

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