Merge branch 'master' into upstream-merge-31877
This commit is contained in:
@@ -477,14 +477,17 @@ Class Procs:
|
||||
// Hook for html_interface module to prevent updates to clients who don't have this as their active machine.
|
||||
/obj/machinery/proc/hiIsValidClient(datum/html_interface_client/hclient, datum/html_interface/hi)
|
||||
if (hclient.client.mob && (hclient.client.mob.stat == 0 || IsAdminGhost(hclient.client.mob)))
|
||||
if (isAI(hclient.client.mob) || IsAdminGhost(hclient.client.mob)) return TRUE
|
||||
else return hclient.client.mob.machine == src && Adjacent(hclient.client.mob)
|
||||
if (isAI(hclient.client.mob) || IsAdminGhost(hclient.client.mob))
|
||||
return TRUE
|
||||
else
|
||||
return hclient.client.mob.machine == src && Adjacent(hclient.client.mob)
|
||||
else
|
||||
return FALSE
|
||||
|
||||
// Hook for html_interface module to unset the active machine when the window is closed by the player.
|
||||
/obj/machinery/proc/hiOnHide(datum/html_interface_client/hclient)
|
||||
if (hclient.client.mob && hclient.client.mob.machine == src) hclient.client.mob.unset_machine()
|
||||
if (hclient.client.mob && hclient.client.mob.machine == src)
|
||||
hclient.client.mob.unset_machine()
|
||||
|
||||
/obj/machinery/proc/can_be_overridden()
|
||||
. = 1
|
||||
|
||||
@@ -8,9 +8,11 @@
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption) return
|
||||
if(!signal || signal.encryption)
|
||||
return
|
||||
|
||||
if(id_tag != signal.data["tag"] || !signal.data["command"]) return
|
||||
if(id_tag != signal.data["tag"] || !signal.data["command"])
|
||||
return
|
||||
|
||||
switch(signal.data["command"])
|
||||
if("open")
|
||||
@@ -63,12 +65,14 @@
|
||||
|
||||
/obj/machinery/door/airlock/open(surpress_send)
|
||||
. = ..()
|
||||
if(!surpress_send) send_status()
|
||||
if(!surpress_send)
|
||||
send_status()
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/close(surpress_send)
|
||||
. = ..()
|
||||
if(!surpress_send) send_status()
|
||||
if(!surpress_send)
|
||||
send_status()
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/proc/set_frequency(new_frequency)
|
||||
@@ -148,4 +152,4 @@
|
||||
|
||||
/obj/machinery/airlock_sensor/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -1,72 +1,71 @@
|
||||
/obj/machinery/camera
|
||||
|
||||
var/list/localMotionTargets = list()
|
||||
var/detectTime = 0
|
||||
var/area/ai_monitored/area_motion = null
|
||||
var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm()
|
||||
|
||||
/obj/machinery/camera/process()
|
||||
// motion camera event loop
|
||||
if(!isMotion())
|
||||
. = PROCESS_KILL
|
||||
return
|
||||
if (detectTime > 0)
|
||||
var/elapsed = world.time - detectTime
|
||||
if (elapsed > alarm_delay)
|
||||
triggerAlarm()
|
||||
else if (detectTime == -1)
|
||||
for (var/mob/target in getTargetList())
|
||||
if (target.stat == DEAD || (!area_motion && !in_range(src, target)))
|
||||
//If not part of a monitored area and the camera is not in range or the target is dead
|
||||
lostTarget(target)
|
||||
|
||||
/obj/machinery/camera/proc/getTargetList()
|
||||
if(area_motion)
|
||||
return area_motion.motionTargets
|
||||
return localMotionTargets
|
||||
|
||||
/obj/machinery/camera/proc/newTarget(mob/target)
|
||||
if(isAI(target))
|
||||
return 0
|
||||
if (detectTime == 0)
|
||||
detectTime = world.time // start the clock
|
||||
var/list/targets = getTargetList()
|
||||
if (!(target in targets))
|
||||
targets += target
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
var/area/ai_monitored/A = get_area(src)
|
||||
if(istype(A))
|
||||
A.motioncameras -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/proc/lostTarget(mob/target)
|
||||
var/list/targets = getTargetList()
|
||||
if (target in targets)
|
||||
targets -= target
|
||||
if (targets.len == 0)
|
||||
cancelAlarm()
|
||||
|
||||
/obj/machinery/camera/proc/cancelAlarm()
|
||||
if (detectTime == -1)
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.cancelAlarm("Motion", get_area(src), src)
|
||||
detectTime = 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/proc/triggerAlarm()
|
||||
if (!detectTime) return 0
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src)
|
||||
detectTime = -1
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj)
|
||||
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
|
||||
if (!area_motion)
|
||||
if(isliving(AM))
|
||||
newTarget(AM)
|
||||
|
||||
/obj/machinery/camera
|
||||
|
||||
var/list/localMotionTargets = list()
|
||||
var/detectTime = 0
|
||||
var/area/ai_monitored/area_motion = null
|
||||
var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm()
|
||||
|
||||
/obj/machinery/camera/process()
|
||||
// motion camera event loop
|
||||
if(!isMotion())
|
||||
. = PROCESS_KILL
|
||||
return
|
||||
if (detectTime > 0)
|
||||
var/elapsed = world.time - detectTime
|
||||
if (elapsed > alarm_delay)
|
||||
triggerAlarm()
|
||||
else if (detectTime == -1)
|
||||
for (var/targetref in getTargetList())
|
||||
var/mob/target = locate(targetref) in GLOB.mob_list
|
||||
if (target.stat == DEAD || QDELETED(target) || (!area_motion && !in_range(src, target)))
|
||||
//If not part of a monitored area and the camera is not in range or the target is dead
|
||||
lostTarget(target)
|
||||
|
||||
/obj/machinery/camera/proc/getTargetList()
|
||||
if(area_motion)
|
||||
return area_motion.motionTargets
|
||||
return localMotionTargets
|
||||
|
||||
/obj/machinery/camera/proc/newTarget(mob/target)
|
||||
if(isAI(target))
|
||||
return 0
|
||||
if (detectTime == 0)
|
||||
detectTime = world.time // start the clock
|
||||
var/list/targets = getTargetList()
|
||||
targets |= "\ref[target]"
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
var/area/ai_monitored/A = get_area(src)
|
||||
if(istype(A))
|
||||
A.motioncameras -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/proc/lostTarget(mob/target)
|
||||
var/list/targets = getTargetList()
|
||||
targets -= "\ref[target]"
|
||||
if (targets.len == 0)
|
||||
cancelAlarm()
|
||||
|
||||
/obj/machinery/camera/proc/cancelAlarm()
|
||||
if (detectTime == -1)
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.cancelAlarm("Motion", get_area(src), src)
|
||||
detectTime = 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/proc/triggerAlarm()
|
||||
if (!detectTime)
|
||||
return 0
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src)
|
||||
detectTime = -1
|
||||
return 1
|
||||
|
||||
/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj)
|
||||
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
|
||||
if (!area_motion)
|
||||
if(isliving(AM))
|
||||
newTarget(AM)
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
for(var/obj/machinery/camera/autoname/C in GLOB.machines)
|
||||
if(C == src) continue
|
||||
if(C == src)
|
||||
continue
|
||||
var/area/CA = get_area(C)
|
||||
if(CA.type == A.type)
|
||||
if(C.number)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src)
|
||||
|
||||
if(clonemind.changeling)
|
||||
var/obj/item/organ/brain/B = H.getorganslot("brain")
|
||||
var/obj/item/organ/brain/B = H.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
B.vital = FALSE
|
||||
B.decoy_override = TRUE
|
||||
|
||||
|
||||
@@ -61,6 +61,14 @@
|
||||
for(var/datum/surgery/procedure in patient.surgeries)
|
||||
dat += "[capitalize(procedure.name)]<BR>"
|
||||
var/datum/surgery_step/surgery_step = procedure.get_surgery_step()
|
||||
dat += "Next step: [capitalize(surgery_step.name)]<BR>"
|
||||
dat += "Next step: [capitalize(surgery_step.name)]"
|
||||
if(surgery_step.repeatable)
|
||||
dat += " or "
|
||||
var/datum/surgery_step/next_step = procedure.get_surgery_next_step()
|
||||
if(next_step)
|
||||
dat += "[capitalize(next_step.name)]"
|
||||
else
|
||||
dat += "finish operation"
|
||||
dat += "<BR>"
|
||||
dat += "</div>"
|
||||
return dat
|
||||
return dat
|
||||
|
||||
@@ -60,12 +60,14 @@
|
||||
radio_connection = SSradio.add_object(src, receive_frequency, GLOB.RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption) return
|
||||
if(!signal || signal.encryption)
|
||||
return
|
||||
|
||||
var/zone = signal.data["zone"]
|
||||
var/severity = signal.data["alert"]
|
||||
|
||||
if(!zone || !severity) return
|
||||
if(!zone || !severity)
|
||||
return
|
||||
|
||||
minor_alarms -= zone
|
||||
priority_alarms -= zone
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
playsound(src.loc, P.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>You start deconstructing the frame...</span>")
|
||||
if(do_after(user, 20*P.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
M.add_fingerprint(user)
|
||||
|
||||
@@ -537,10 +537,13 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
/obj/machinery/computer/card/proc/eject_id_scan(mob/user)
|
||||
if(scan)
|
||||
scan.forceMove(drop_location())
|
||||
user.put_in_hands(scan)
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(scan)
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
scan = null
|
||||
else //switching the ID with the one you're holding
|
||||
if(issilicon(user) || !Adjacent(user))
|
||||
return
|
||||
var/obj/item/I = user.get_active_held_item()
|
||||
if(istype(I, /obj/item/card/id))
|
||||
if(!user.transferItemToLoc(I,src))
|
||||
@@ -555,12 +558,15 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
GLOB.data_core.manifest_modify(modify.registered_name, modify.assignment)
|
||||
modify.update_label()
|
||||
modify.forceMove(drop_location())
|
||||
user.put_in_hands(modify)
|
||||
if(!issilicon(user) && Adjacent(user))
|
||||
user.put_in_hands(modify)
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
modify = null
|
||||
region_access = null
|
||||
head_subordinates = null
|
||||
else //switching the ID with the one you're holding
|
||||
if(issilicon(user) || !Adjacent(user))
|
||||
return
|
||||
var/obj/item/I = user.get_active_held_item()
|
||||
if(istype(I, /obj/item/card/id))
|
||||
if (!user.transferItemToLoc(I,src))
|
||||
|
||||
@@ -103,9 +103,12 @@
|
||||
if (I && istype(I))
|
||||
if(ACCESS_CAPTAIN in I.access)
|
||||
var/old_level = GLOB.security_level
|
||||
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
|
||||
if(!tmp_alertlevel)
|
||||
tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel < SEC_LEVEL_GREEN)
|
||||
tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel > SEC_LEVEL_BLUE)
|
||||
tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
|
||||
set_security_level(tmp_alertlevel)
|
||||
if(GLOB.security_level != old_level)
|
||||
to_chat(usr, "<span class='notice'>Authorization confirmed. Modifying security level.</span>")
|
||||
@@ -230,7 +233,8 @@
|
||||
|
||||
if("securitylevel")
|
||||
src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
|
||||
if(!tmp_alertlevel) tmp_alertlevel = 0
|
||||
if(!tmp_alertlevel)
|
||||
tmp_alertlevel = 0
|
||||
state = STATE_CONFIRM_LEVEL
|
||||
if("changeseclevel")
|
||||
state = STATE_ALERT_LEVEL
|
||||
@@ -356,11 +360,15 @@
|
||||
make_announcement(usr, 1)
|
||||
if("ai-securitylevel")
|
||||
src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
|
||||
if(!tmp_alertlevel) tmp_alertlevel = 0
|
||||
if(!tmp_alertlevel)
|
||||
tmp_alertlevel = 0
|
||||
var/old_level = GLOB.security_level
|
||||
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
|
||||
if(!tmp_alertlevel)
|
||||
tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel < SEC_LEVEL_GREEN)
|
||||
tmp_alertlevel = SEC_LEVEL_GREEN
|
||||
if(tmp_alertlevel > SEC_LEVEL_BLUE)
|
||||
tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
|
||||
set_security_level(tmp_alertlevel)
|
||||
if(GLOB.security_level != old_level)
|
||||
//Only notify the admins if an actual change happened
|
||||
@@ -670,7 +678,8 @@
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
if(!frequency) return
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
|
||||
@@ -93,7 +93,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
/datum/crewmonitor/proc/show(mob/mob, z)
|
||||
if (mob.client)
|
||||
sendResources(mob.client)
|
||||
if (!z) z = mob.z
|
||||
if (!z)
|
||||
z = mob.z
|
||||
|
||||
if (z > 0 && src.interfaces)
|
||||
var/datum/html_interface/hi
|
||||
@@ -160,7 +161,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
pos = H.z == 0 || U.sensor_mode == SENSOR_COORDS ? get_turf(H) : null
|
||||
|
||||
// Special case: If the mob is inside an object confirm the z-level on turf level.
|
||||
if (H.z == 0 && (!pos || pos.z != z)) continue
|
||||
if (H.z == 0 && (!pos || pos.z != z))
|
||||
continue
|
||||
|
||||
I = H.wear_id ? H.wear_id.GetID() : null
|
||||
|
||||
@@ -173,8 +175,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
assignment = ""
|
||||
ijob = 80
|
||||
|
||||
if (U.sensor_mode >= SENSOR_LIVING) life_status = (!H.stat ? "true" : "false")
|
||||
else life_status = null
|
||||
if (U.sensor_mode >= SENSOR_LIVING)
|
||||
life_status = (!H.stat ? "true" : "false")
|
||||
else
|
||||
life_status = null
|
||||
|
||||
if (U.sensor_mode >= SENSOR_VITALS)
|
||||
dam1 = round(H.getOxyLoss(),1)
|
||||
@@ -188,7 +192,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
dam4 = null
|
||||
|
||||
if (U.sensor_mode >= SENSOR_COORDS)
|
||||
if (!pos) pos = get_turf(H)
|
||||
if (!pos)
|
||||
pos = get_turf(H)
|
||||
var/area/player_area = get_area(H)
|
||||
|
||||
area = format_text(player_area.name)
|
||||
@@ -208,13 +213,15 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
var/z = ""
|
||||
|
||||
for (z in src.interfaces)
|
||||
if (src.interfaces[z] == hi) break
|
||||
if (src.interfaces[z] == hi)
|
||||
break
|
||||
|
||||
if(hclient.client.mob && IsAdminGhost(hclient.client.mob))
|
||||
return TRUE
|
||||
|
||||
if (hclient.client.mob && hclient.client.mob.stat == 0 && hclient.client.mob.z == text2num(z))
|
||||
if (isAI(hclient.client.mob)) return TRUE
|
||||
if (isAI(hclient.client.mob))
|
||||
return TRUE
|
||||
else if (iscyborg(hclient.client.mob))
|
||||
return (locate(/obj/machinery/computer/crew, range(world.view, hclient.client.mob))) || (locate(/obj/item/device/sensor_device, hclient.client.mob.contents))
|
||||
else
|
||||
@@ -238,8 +245,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
|
||||
var/obj/machinery/camera/C = locate(/obj/machinery/camera) in range(5, tile)
|
||||
|
||||
if (!C) C = locate(/obj/machinery/camera) in urange(10, tile)
|
||||
if (!C) C = locate(/obj/machinery/camera) in urange(15, tile)
|
||||
if (!C)
|
||||
C = locate(/obj/machinery/camera) in urange(10, tile)
|
||||
if (!C)
|
||||
C = locate(/obj/machinery/camera) in urange(15, tile)
|
||||
|
||||
if (C)
|
||||
addtimer(CALLBACK(src, .proc/update_ai, AI, C, AI.eyeobj.loc), min(30, get_dist(get_turf(C), AI.eyeobj) / 4))
|
||||
@@ -254,7 +263,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
|
||||
. = ..()
|
||||
|
||||
if (old_z != src.z) GLOB.crewmonitor.queueUpdate(old_z)
|
||||
if (old_z != src.z)
|
||||
GLOB.crewmonitor.queueUpdate(old_z)
|
||||
GLOB.crewmonitor.queueUpdate(src.z)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
ShowInterface(user)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change)
|
||||
if(!user) return
|
||||
if(!user)
|
||||
return
|
||||
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window
|
||||
if(!(in_range(src, user) || issilicon(user)))
|
||||
popup.close()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//computer that handle the points and teleports the prisoner
|
||||
/obj/machinery/computer/gulag_teleporter_computer
|
||||
name = "labor camp teleporter console"
|
||||
desc = "Used to send criminals to the Labor Camp"
|
||||
desc = "Used to send criminals to the Labor Camp."
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(ACCESS_ARMORY)
|
||||
|
||||
@@ -82,7 +82,8 @@
|
||||
if(hacking || emagged)
|
||||
screen = 2
|
||||
else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
|
||||
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver
|
||||
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
|
||||
message = noserver
|
||||
screen = 0
|
||||
|
||||
switch(screen)
|
||||
@@ -267,7 +268,8 @@
|
||||
|
||||
//Turn the server on/off.
|
||||
if (href_list["active"])
|
||||
if(auth) linkedServer.active = !linkedServer.active
|
||||
if(auth)
|
||||
linkedServer.active = !linkedServer.active
|
||||
//Find a server
|
||||
if (href_list["find"])
|
||||
if(GLOB.message_servers && GLOB.message_servers.len > 1)
|
||||
@@ -468,4 +470,4 @@
|
||||
info = "<center><h2>Daily Key Reset</h2></center><br>The new message monitor key is '[server.decryptkey]'.<br>Please keep this a secret and away from the clown.<br>If necessary, change the password to a more secure one."
|
||||
info_links = info
|
||||
add_overlay("paper_words")
|
||||
break
|
||||
break
|
||||
|
||||
@@ -140,4 +140,4 @@
|
||||
|
||||
/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"
|
||||
desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition."
|
||||
|
||||
@@ -95,7 +95,8 @@
|
||||
if(!usr.transferItemToLoc(I, src))
|
||||
return
|
||||
inserted_id = I
|
||||
else to_chat(usr, "<span class='danger'>No valid ID.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>No valid ID.</span>")
|
||||
else if(inserted_id)
|
||||
switch(href_list["id"])
|
||||
if("eject")
|
||||
|
||||
@@ -246,14 +246,16 @@
|
||||
note = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/door/airlock/proc/unzap() //for addtimer
|
||||
justzap = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
|
||||
if(!issilicon(usr))
|
||||
if(src.isElectrified())
|
||||
if(!src.justzap)
|
||||
if(src.shock(user, 100))
|
||||
src.justzap = TRUE
|
||||
spawn (10)
|
||||
justzap = FALSE
|
||||
if(isElectrified())
|
||||
if(!justzap)
|
||||
if(shock(user, 100))
|
||||
justzap = TRUE
|
||||
addtimer(CALLBACK(src, .proc/unzap), 10)
|
||||
return
|
||||
else /*if(src.justzap)*/
|
||||
return
|
||||
@@ -325,33 +327,34 @@
|
||||
if(src.secondsMainPowerLost > 0)
|
||||
src.secondsMainPowerLost = 0
|
||||
|
||||
/obj/machinery/door/airlock/proc/loseMainPower()
|
||||
if(src.secondsMainPowerLost <= 0)
|
||||
src.secondsMainPowerLost = 60
|
||||
if(src.secondsBackupPowerLost < 10)
|
||||
src.secondsBackupPowerLost = 10
|
||||
if(!src.spawnPowerRestoreRunning)
|
||||
spawnPowerRestoreRunning = TRUE
|
||||
spawn(0)
|
||||
var/cont = 1
|
||||
while (cont)
|
||||
sleep(10)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
cont = 0
|
||||
if(secondsMainPowerLost>0)
|
||||
if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2))
|
||||
secondsMainPowerLost -= 1
|
||||
updateDialog()
|
||||
cont = 1
|
||||
/obj/machinery/door/airlock/proc/handlePowerRestore()
|
||||
var/cont = TRUE
|
||||
while (cont)
|
||||
sleep(10)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
cont = FALSE
|
||||
if(secondsMainPowerLost>0)
|
||||
if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2))
|
||||
secondsMainPowerLost -= 1
|
||||
updateDialog()
|
||||
cont = TRUE
|
||||
if(secondsBackupPowerLost>0)
|
||||
if(!wires.is_cut(WIRE_BACKUP1) && !wires.is_cut(WIRE_BACKUP2))
|
||||
secondsBackupPowerLost -= 1
|
||||
updateDialog()
|
||||
cont = TRUE
|
||||
spawnPowerRestoreRunning = FALSE
|
||||
updateDialog()
|
||||
|
||||
if(secondsBackupPowerLost>0)
|
||||
if(!wires.is_cut(WIRE_BACKUP1) && !wires.is_cut(WIRE_BACKUP2))
|
||||
secondsBackupPowerLost -= 1
|
||||
updateDialog()
|
||||
cont = 1
|
||||
spawnPowerRestoreRunning = FALSE
|
||||
updateDialog()
|
||||
/obj/machinery/door/airlock/proc/loseMainPower()
|
||||
if(secondsMainPowerLost <= 0)
|
||||
secondsMainPowerLost = 60
|
||||
if(secondsBackupPowerLost < 10)
|
||||
secondsBackupPowerLost = 10
|
||||
if(!spawnPowerRestoreRunning)
|
||||
spawnPowerRestoreRunning = TRUE
|
||||
INVOKE_ASYNC(src, .proc/handlePowerRestore)
|
||||
|
||||
/obj/machinery/door/airlock/proc/loseBackupPower()
|
||||
if(src.secondsBackupPowerLost < 60)
|
||||
@@ -792,6 +795,13 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/proc/electrified_loop()
|
||||
while (secondsElectrified > 0)
|
||||
secondsElectrified--
|
||||
if(secondsElectrified <= 0)
|
||||
set_electrified(NOT_ELECTRIFIED)
|
||||
updateUsrDialog()
|
||||
sleep(10)
|
||||
|
||||
/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0)
|
||||
// If you add an if(..()) check you must first remove the var/nowindow parameter.
|
||||
@@ -936,13 +946,7 @@
|
||||
shockedby += "\[[time_stamp()]\][usr](ckey:[usr.ckey])"
|
||||
add_logs(usr, src, "electrified")
|
||||
set_electrified(30)
|
||||
spawn(10)
|
||||
while (secondsElectrified > 0)
|
||||
secondsElectrified--
|
||||
if(secondsElectrified <= 0)
|
||||
set_electrified(NOT_ELECTRIFIED)
|
||||
updateUsrDialog()
|
||||
sleep(10)
|
||||
addtimer(CALLBACK(src, .proc/electrified_loop), 10)
|
||||
if(6)
|
||||
//electrify door indefinitely
|
||||
if(wires.is_cut(WIRE_SHOCK))
|
||||
@@ -1266,19 +1270,11 @@
|
||||
if(!beingcrowbarred) //being fireaxe'd
|
||||
var/obj/item/twohanded/fireaxe/F = I
|
||||
if(F.wielded)
|
||||
spawn(0)
|
||||
if(density)
|
||||
open(2)
|
||||
else
|
||||
close(2)
|
||||
INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to be wielding the fire axe to do that!</span>")
|
||||
else
|
||||
spawn(0)
|
||||
if(density)
|
||||
open(2)
|
||||
else
|
||||
close(2)
|
||||
INVOKE_ASYNC(src, (density ? .proc/open : .proc/close), 2)
|
||||
|
||||
if(istype(I, /obj/item/crowbar/power))
|
||||
if(isElectrified())
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
sub_door = TRUE
|
||||
explosion_block = 1
|
||||
safe = FALSE
|
||||
layer = BELOW_OPEN_DOOR_LAYER
|
||||
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)
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
/obj/machinery/door/poddoor/shutters
|
||||
gender = PLURAL
|
||||
name = "shutters"
|
||||
desc = "Heavy duty metal shutters that opens mechanically."
|
||||
icon = 'icons/obj/doors/shutters.dmi'
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
damage_deflection = 20
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/preopen
|
||||
icon_state = "open"
|
||||
/obj/machinery/door/poddoor/shutters
|
||||
gender = PLURAL
|
||||
name = "shutters"
|
||||
desc = "Heavy duty metal shutters that opens mechanically."
|
||||
icon = 'icons/obj/doors/shutters.dmi'
|
||||
layer = SHUTTER_LAYER
|
||||
damage_deflection = 20
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/preopen
|
||||
icon_state = "open"
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
|
||||
|
||||
//shutters look like ass with things on top of them.
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/New()
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER //to handle /obj/machinery/door/New() resetting the layer.
|
||||
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/open(ignorepower = 0)
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/close(ignorepower = 0)
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
opacity = 0
|
||||
|
||||
|
||||
//shutters look like ass with things on top of them.
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/New()
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER //to handle /obj/machinery/door/New() resetting the layer.
|
||||
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/open(ignorepower = 0)
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/close(ignorepower = 0)
|
||||
..()
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
var/receive_tag = signal.data["tag"]
|
||||
if(!receive_tag) return
|
||||
if(!receive_tag)
|
||||
return
|
||||
|
||||
if(receive_tag==sensor_tag)
|
||||
if(signal.data["pressure"])
|
||||
@@ -206,7 +207,7 @@
|
||||
icon_state = "airlock_control_standby"
|
||||
|
||||
name = "airlock console"
|
||||
density = FALSE
|
||||
density = FALSE
|
||||
|
||||
frequency = 1449
|
||||
power_channel = ENVIRON
|
||||
@@ -220,7 +221,7 @@
|
||||
var/sanitize_external
|
||||
|
||||
/obj/machinery/embedded_controller/radio/airlock_controller/Initialize(mapload)
|
||||
. = ..()
|
||||
. = ..()
|
||||
if(!mapload)
|
||||
return
|
||||
|
||||
@@ -292,4 +293,4 @@
|
||||
</div>
|
||||
[state_options]"}
|
||||
|
||||
return output
|
||||
return output
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
var/datum/computer/file/embedded_program/program
|
||||
|
||||
name = "embedded controller"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
|
||||
var/on = TRUE
|
||||
var/on = TRUE
|
||||
|
||||
/obj/machinery/embedded_controller/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
@@ -44,7 +44,8 @@
|
||||
return 0
|
||||
|
||||
/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
if(!signal || signal.encryption) return
|
||||
if(!signal || signal.encryption)
|
||||
return
|
||||
|
||||
if(program)
|
||||
program.receive_signal(signal, receive_method, receive_param)
|
||||
@@ -73,11 +74,11 @@
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
/obj/machinery/embedded_controller/radio/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
SSradio.remove_object(src,frequency)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/embedded_controller/radio/Initialize()
|
||||
. = ..()
|
||||
. = ..()
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/obj/item/wallframe/firealarm
|
||||
name = "fire alarm frame"
|
||||
desc = "Used for building fire alarms"
|
||||
desc = "Used for building fire alarms."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "fire_bitem"
|
||||
result_path = /obj/machinery/firealarm
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/gulag_item_reclaimer
|
||||
name = "equipment reclaimer station"
|
||||
desc = "Used to reclaim your items after you finish your sentence at the labor camp"
|
||||
desc = "Used to reclaim your items after you finish your sentence at the labor camp."
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "dorm_taken"
|
||||
req_access = list(ACCESS_SECURITY) //REQACCESS TO ACCESS ALL STORED ITEMS
|
||||
|
||||
@@ -10,15 +10,14 @@
|
||||
var/mob/living/carbon/attached = null
|
||||
var/mode = IV_INJECTING
|
||||
var/obj/item/reagent_containers/beaker = null
|
||||
var/list/drip_containers = list(/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/food,
|
||||
/obj/item/reagent_containers/glass)
|
||||
var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/food,
|
||||
/obj/item/reagent_containers/glass))
|
||||
|
||||
/obj/machinery/iv_drip/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
drip_containers = typecacheof(drip_containers)
|
||||
|
||||
|
||||
/obj/machinery/iv_drip/Destroy()
|
||||
attached = null
|
||||
QDEL_NULL(beaker)
|
||||
|
||||
@@ -1,72 +1,71 @@
|
||||
// the light switch
|
||||
// can have multiple per area
|
||||
// can also operate on non-loc area through "otherarea" var
|
||||
/obj/machinery/light_switch
|
||||
name = "light switch"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "light1"
|
||||
// the light switch
|
||||
// can have multiple per area
|
||||
// can also operate on non-loc area through "otherarea" var
|
||||
/obj/machinery/light_switch
|
||||
name = "light switch"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "light1"
|
||||
anchored = TRUE
|
||||
desc = "Make dark."
|
||||
var/on = TRUE
|
||||
var/area/area = null
|
||||
var/otherarea = null
|
||||
// luminosity = 1
|
||||
|
||||
/obj/machinery/light_switch/Initialize()
|
||||
var/area/area = null
|
||||
var/otherarea = null
|
||||
|
||||
/obj/machinery/light_switch/Initialize()
|
||||
. = ..()
|
||||
area = get_area(src)
|
||||
|
||||
if(otherarea)
|
||||
area = locate(text2path("/area/[otherarea]"))
|
||||
|
||||
if(!name)
|
||||
name = "light switch ([area.name])"
|
||||
|
||||
on = area.lightswitch
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/light_switch/proc/updateicon()
|
||||
if(stat & NOPOWER)
|
||||
icon_state = "light-p"
|
||||
else
|
||||
if(on)
|
||||
icon_state = "light1"
|
||||
else
|
||||
icon_state = "light0"
|
||||
|
||||
/obj/machinery/light_switch/examine(mob/user)
|
||||
..()
|
||||
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)
|
||||
|
||||
on = !on
|
||||
|
||||
for(var/area/A in area.related)
|
||||
A.lightswitch = on
|
||||
A.updateicon()
|
||||
|
||||
for(var/obj/machinery/light_switch/L in A)
|
||||
L.on = on
|
||||
L.updateicon()
|
||||
|
||||
area.power_change()
|
||||
|
||||
/obj/machinery/light_switch/power_change()
|
||||
|
||||
if(!otherarea)
|
||||
if(powered(LIGHT))
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/light_switch/emp_act(severity)
|
||||
if(!(stat & (BROKEN|NOPOWER)))
|
||||
power_change()
|
||||
..()
|
||||
area = get_area(src)
|
||||
|
||||
if(otherarea)
|
||||
area = locate(text2path("/area/[otherarea]"))
|
||||
|
||||
if(!name)
|
||||
name = "light switch ([area.name])"
|
||||
|
||||
on = area.lightswitch
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/light_switch/proc/updateicon()
|
||||
if(stat & NOPOWER)
|
||||
icon_state = "light-p"
|
||||
else
|
||||
if(on)
|
||||
icon_state = "light1"
|
||||
else
|
||||
icon_state = "light0"
|
||||
|
||||
/obj/machinery/light_switch/examine(mob/user)
|
||||
..()
|
||||
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)
|
||||
|
||||
on = !on
|
||||
|
||||
for(var/area/A in area.related)
|
||||
A.lightswitch = on
|
||||
A.updateicon()
|
||||
|
||||
for(var/obj/machinery/light_switch/L in A)
|
||||
L.on = on
|
||||
L.updateicon()
|
||||
|
||||
area.power_change()
|
||||
|
||||
/obj/machinery/light_switch/power_change()
|
||||
|
||||
if(!otherarea)
|
||||
if(powered(LIGHT))
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/light_switch/emp_act(severity)
|
||||
if(!(stat & (BROKEN|NOPOWER)))
|
||||
power_change()
|
||||
..()
|
||||
|
||||
@@ -166,7 +166,8 @@
|
||||
|
||||
|
||||
/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the pulling
|
||||
if(pulling) return
|
||||
if(pulling)
|
||||
return
|
||||
while(on)
|
||||
|
||||
pulling = 1
|
||||
@@ -333,7 +334,8 @@
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/magnetic_controller/proc/MagnetMove()
|
||||
if(looping) return
|
||||
if(looping)
|
||||
return
|
||||
|
||||
while(moving && rpath.len >= 1)
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ Buildable meters
|
||||
|
||||
/obj/item/pipe
|
||||
name = "pipe"
|
||||
desc = "A pipe"
|
||||
var/pipe_type = 0
|
||||
desc = "A pipe."
|
||||
var/pipe_type
|
||||
var/pipename
|
||||
force = 7
|
||||
throwforce = 7
|
||||
@@ -19,35 +19,22 @@ Buildable meters
|
||||
item_state = "buildpipe"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
level = 2
|
||||
var/flipped = FALSE
|
||||
var/is_bent = FALSE
|
||||
var/piping_layer = PIPING_LAYER_DEFAULT
|
||||
var/RPD_type //TEMP: kill this once RPDs get a rewrite pls
|
||||
|
||||
var/static/list/pipe_types = list(
|
||||
PIPE_SIMPLE, \
|
||||
PIPE_LAYER_MANIFOLD, \
|
||||
PIPE_MANIFOLD, \
|
||||
PIPE_4WAYMANIFOLD, \
|
||||
PIPE_HE, \
|
||||
PIPE_HE_MANIFOLD, \
|
||||
PIPE_HE_4WAYMANIFOLD, \
|
||||
PIPE_JUNCTION, \
|
||||
\
|
||||
PIPE_CONNECTOR, \
|
||||
PIPE_UVENT, \
|
||||
PIPE_SCRUBBER, \
|
||||
PIPE_INJECTOR, \
|
||||
PIPE_HEAT_EXCHANGE, \
|
||||
\
|
||||
PIPE_PUMP, \
|
||||
PIPE_PASSIVE_GATE, \
|
||||
PIPE_VOLUME_PUMP, \
|
||||
PIPE_MVALVE, \
|
||||
PIPE_DVALVE, \
|
||||
\
|
||||
PIPE_GAS_FILTER, \
|
||||
PIPE_GAS_MIXER, \
|
||||
)
|
||||
/obj/item/pipe/directional
|
||||
RPD_type = PIPE_UNARY
|
||||
/obj/item/pipe/binary
|
||||
RPD_type = PIPE_BINARY
|
||||
/obj/item/pipe/binary/bendable
|
||||
RPD_type = PIPE_BENDABLE
|
||||
/obj/item/pipe/trinary
|
||||
RPD_type = PIPE_TRINARY
|
||||
/obj/item/pipe/trinary/flippable
|
||||
RPD_type = PIPE_TRIN_M
|
||||
var/flipped = FALSE
|
||||
/obj/item/pipe/quaternary
|
||||
RPD_type = PIPE_QUAD
|
||||
|
||||
/obj/item/pipe/examine(mob/user)
|
||||
..()
|
||||
@@ -55,35 +42,27 @@ Buildable meters
|
||||
|
||||
/obj/item/pipe/Initialize(mapload, _pipe_type, _dir, obj/machinery/atmospherics/make_from)
|
||||
if(make_from)
|
||||
setDir(make_from.dir)
|
||||
pipename = make_from.name
|
||||
add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY)
|
||||
|
||||
if(make_from.type in pipe_types)
|
||||
pipe_type = make_from.type
|
||||
setPipingLayer(make_from.piping_layer)
|
||||
else //make pipe_type a value we can work with
|
||||
for(var/P in pipe_types)
|
||||
if(istype(make_from, P))
|
||||
pipe_type = P
|
||||
break
|
||||
|
||||
var/obj/machinery/atmospherics/components/trinary/triP = make_from
|
||||
if(istype(triP) && triP.flipped)
|
||||
flipped = TRUE
|
||||
setDir(turn(dir, -45))
|
||||
make_from_existing(make_from)
|
||||
else
|
||||
pipe_type = _pipe_type
|
||||
setDir(_dir)
|
||||
|
||||
if(_dir in GLOB.diagonals)
|
||||
is_bent = TRUE
|
||||
|
||||
update()
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
pixel_x += rand(-5, 5)
|
||||
pixel_y += rand(-5, 5)
|
||||
return ..()
|
||||
|
||||
/obj/item/pipe/proc/make_from_existing(obj/machinery/atmospherics/make_from)
|
||||
setDir(make_from.dir)
|
||||
pipename = make_from.name
|
||||
add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY)
|
||||
pipe_type = make_from.type
|
||||
|
||||
/obj/item/pipe/trinary/flippable/make_from_existing(obj/machinery/atmospherics/components/trinary/make_from)
|
||||
..()
|
||||
if(make_from.flipped)
|
||||
do_a_flip()
|
||||
|
||||
/obj/item/pipe/dropped()
|
||||
if(loc)
|
||||
setPipingLayer(piping_layer)
|
||||
@@ -91,73 +70,19 @@ Buildable meters
|
||||
|
||||
/obj/item/pipe/proc/setPipingLayer(new_layer = PIPING_LAYER_DEFAULT)
|
||||
var/obj/machinery/atmospherics/fakeA = get_pipe_cache(pipe_type)
|
||||
var/nolayer = (fakeA.pipe_flags & PIPING_ALL_LAYER)
|
||||
if(nolayer)
|
||||
|
||||
if(fakeA.pipe_flags & PIPING_ALL_LAYER)
|
||||
new_layer = PIPING_LAYER_DEFAULT
|
||||
piping_layer = new_layer
|
||||
if(pipe_type != PIPE_LAYER_MANIFOLD)
|
||||
pixel_x = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
|
||||
pixel_y = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
|
||||
layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE)
|
||||
|
||||
//update the name and icon of the pipe item depending on the type
|
||||
GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
"[PIPE_SIMPLE]" = "simple", \
|
||||
"[PIPE_MANIFOLD]" = "manifold", \
|
||||
"[PIPE_LAYER_MANIFOLD]" = "layer_manifold", \
|
||||
"[PIPE_4WAYMANIFOLD]" = "manifold4w", \
|
||||
"[PIPE_HE]" = "he", \
|
||||
"[PIPE_HE_MANIFOLD]" = "he_manifold", \
|
||||
"[PIPE_HE_4WAYMANIFOLD]" = "he_manifold4w", \
|
||||
"[PIPE_JUNCTION]" = "junction", \
|
||||
\
|
||||
"[PIPE_CONNECTOR]" = "connector", \
|
||||
"[PIPE_UVENT]" = "uvent", \
|
||||
"[PIPE_SCRUBBER]" = "scrubber", \
|
||||
"[PIPE_INJECTOR]" = "injector", \
|
||||
"[PIPE_HEAT_EXCHANGE]" = "heunary", \
|
||||
\
|
||||
"[PIPE_PUMP]" = "pump", \
|
||||
"[PIPE_PASSIVE_GATE]" = "passivegate", \
|
||||
"[PIPE_VOLUME_PUMP]" = "volumepump", \
|
||||
"[PIPE_MVALVE]" = "mvalve", \
|
||||
"[PIPE_DVALVE]" = "dvalve", \
|
||||
\
|
||||
"[PIPE_GAS_FILTER]" = "filter", \
|
||||
"[PIPE_GAS_MIXER]" = "mixer", \
|
||||
))
|
||||
pixel_x += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
|
||||
pixel_y += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
|
||||
layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE)
|
||||
|
||||
/obj/item/pipe/proc/update()
|
||||
var/list/nlist = list(\
|
||||
"[PIPE_SIMPLE]" = "pipe", \
|
||||
"[PIPE_SIMPLE]_b" = "bent pipe", \
|
||||
"[PIPE_MANIFOLD]" = "manifold", \
|
||||
"[PIPE_LAYER_MANIFOLD]" = "layer manifold", \
|
||||
"[PIPE_4WAYMANIFOLD]" = "4-way manifold", \
|
||||
"[PIPE_HE]" = "h/e pipe", \
|
||||
"[PIPE_HE]_b" = "bent h/e pipe", \
|
||||
"[PIPE_HE_MANIFOLD]" = "h/e manifold", \
|
||||
"[PIPE_HE_4WAYMANIFOLD]"= "h/e 4-way manifold", \
|
||||
"[PIPE_JUNCTION]" = "junction", \
|
||||
\
|
||||
"[PIPE_CONNECTOR]" = "connector", \
|
||||
"[PIPE_UVENT]" = "vent", \
|
||||
"[PIPE_SCRUBBER]" = "scrubber", \
|
||||
"[PIPE_INJECTOR]" = "injector", \
|
||||
"[PIPE_HEAT_EXCHANGE]" = "heat exchanger", \
|
||||
\
|
||||
"[PIPE_PUMP]" = "pump", \
|
||||
"[PIPE_PASSIVE_GATE]" = "passive gate", \
|
||||
"[PIPE_VOLUME_PUMP]" = "volume pump", \
|
||||
"[PIPE_MVALVE]" = "manual valve", \
|
||||
"[PIPE_DVALVE]" = "digital valve", \
|
||||
\
|
||||
"[PIPE_GAS_FILTER]" = "gas filter", \
|
||||
"[PIPE_GAS_MIXER]" = "gas mixer", \
|
||||
)
|
||||
//fix_pipe_type()
|
||||
name = nlist["[pipe_type][is_bent ? "_b" : ""]"] + " fitting"
|
||||
icon_state = GLOB.pipeID2State["[pipe_type]"]
|
||||
var/obj/machinery/atmospherics/A = get_pipe_cache(pipe_type)
|
||||
name = "[A.name] fitting"
|
||||
icon_state = A.pipe_state
|
||||
|
||||
// rotate the pipe item clockwise
|
||||
|
||||
@@ -170,11 +95,8 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
return
|
||||
|
||||
setDir(turn(dir, -90))
|
||||
|
||||
fixdir()
|
||||
|
||||
return
|
||||
|
||||
/obj/item/pipe/verb/flip()
|
||||
set category = "Object"
|
||||
set name = "Flip Pipe"
|
||||
@@ -183,16 +105,15 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
if ( usr.stat || usr.restrained() || !usr.canmove )
|
||||
return
|
||||
|
||||
if (pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER))
|
||||
setDir(turn(dir, flipped )? 45 : -45)
|
||||
flipped = !flipped
|
||||
return
|
||||
do_a_flip()
|
||||
|
||||
/obj/item/pipe/proc/do_a_flip()
|
||||
setDir(turn(dir, -180))
|
||||
|
||||
fixdir()
|
||||
|
||||
return
|
||||
/obj/item/pipe/trinary/flippable/do_a_flip()
|
||||
setDir(turn(dir, flipped ? 45 : -45))
|
||||
flipped = !flipped
|
||||
|
||||
/obj/item/pipe/AltClick(mob/user)
|
||||
..()
|
||||
@@ -207,21 +128,21 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
/obj/item/pipe/Move()
|
||||
var/old_dir = dir
|
||||
..()
|
||||
setDir(old_dir )//pipes changing direction when moved is just annoying and buggy
|
||||
|
||||
/obj/item/pipe/proc/unflip(direction)
|
||||
if(direction in GLOB.diagonals)
|
||||
return turn(direction, 45)
|
||||
|
||||
return direction
|
||||
setDir(old_dir) //pipes changing direction when moved is just annoying and buggy
|
||||
|
||||
//Helper to clean up dir
|
||||
/obj/item/pipe/proc/fixdir()
|
||||
if((pipe_type in list (PIPE_SIMPLE, PIPE_HE, PIPE_MVALVE, PIPE_DVALVE, PIPE_LAYER_MANIFOLD)) && !is_bent)
|
||||
if(dir==SOUTH)
|
||||
setDir(NORTH)
|
||||
else if(dir==WEST)
|
||||
setDir(EAST)
|
||||
return
|
||||
|
||||
/obj/item/pipe/binary/fixdir()
|
||||
if(dir == SOUTH)
|
||||
setDir(NORTH)
|
||||
else if(dir == WEST)
|
||||
setDir(EAST)
|
||||
|
||||
/obj/item/pipe/trinary/flippable/fixdir()
|
||||
if(dir in GLOB.diagonals)
|
||||
setDir(turn(dir, 45))
|
||||
|
||||
/obj/item/pipe/attack_self(mob/user)
|
||||
return rotate()
|
||||
@@ -245,16 +166,14 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
add_fingerprint(user)
|
||||
|
||||
fixdir()
|
||||
if(pipe_type in list(PIPE_GAS_MIXER, PIPE_GAS_FILTER))
|
||||
setDir(unflip(dir))
|
||||
|
||||
var/obj/machinery/atmospherics/fakeA = get_pipe_cache(pipe_type, dir)
|
||||
|
||||
for(var/obj/machinery/atmospherics/M in loc)
|
||||
if((M.pipe_flags & PIPING_ONE_PER_TURF) && (fakeA.pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers.
|
||||
if((M.pipe_flags & fakeA.pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers.
|
||||
to_chat(user, "<span class='warning'>Something is hogging the tile!</span>")
|
||||
return TRUE
|
||||
if((M.piping_layer != piping_layer) && !((M.pipe_flags & PIPING_ALL_LAYER) || (pipe_type == PIPE_LAYER_MANIFOLD)))
|
||||
if((M.piping_layer != piping_layer) && !((M.pipe_flags | fakeA.pipe_flags) & PIPING_ALL_LAYER)) //don't continue if either pipe goes across all layers
|
||||
continue
|
||||
if(M.GetInitDirections() & fakeA.GetInitDirections()) // matches at least one direction on either type of pipe
|
||||
to_chat(user, "<span class='warning'>There is already a pipe at that location!</span>")
|
||||
@@ -262,16 +181,8 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
// no conflicts found
|
||||
|
||||
var/obj/machinery/atmospherics/A = new pipe_type(loc)
|
||||
A.setDir(dir)
|
||||
A.SetInitDirections()
|
||||
|
||||
if(pipename)
|
||||
A.name = pipename
|
||||
|
||||
var/obj/machinery/atmospherics/components/trinary/T = A
|
||||
if(istype(T))
|
||||
T.flipped = flipped
|
||||
A.on_construction(pipe_type, color, piping_layer)
|
||||
build_pipe(A)
|
||||
A.on_construction(color, piping_layer)
|
||||
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
user.visible_message( \
|
||||
@@ -281,24 +192,32 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/pipe/suicide_act(mob/user)
|
||||
if(pipe_type in list(PIPE_PUMP, PIPE_PASSIVE_GATE, PIPE_VOLUME_PUMP))
|
||||
user.visible_message("<span class='suicide'>[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
for(var/i=1 to 20)
|
||||
C.vomit(0, TRUE, FALSE, 4, FALSE)
|
||||
if(prob(20))
|
||||
C.spew_organ()
|
||||
sleep(5)
|
||||
C.blood_volume = 0
|
||||
return(OXYLOSS|BRUTELOSS)
|
||||
else
|
||||
return ..()
|
||||
/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A)
|
||||
A.setDir(dir)
|
||||
A.SetInitDirections()
|
||||
|
||||
if(pipename)
|
||||
A.name = pipename
|
||||
|
||||
/obj/item/pipe/trinary/flippable/build_pipe(obj/machinery/atmospherics/components/trinary/T)
|
||||
..()
|
||||
T.flipped = flipped
|
||||
|
||||
/obj/item/pipe/directional/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
for(var/i=1 to 20)
|
||||
C.vomit(0, TRUE, FALSE, 4, FALSE)
|
||||
if(prob(20))
|
||||
C.spew_organ()
|
||||
sleep(5)
|
||||
C.blood_volume = 0
|
||||
return(OXYLOSS|BRUTELOSS)
|
||||
|
||||
/obj/item/pipe_meter
|
||||
name = "meter"
|
||||
desc = "A meter that can be laid on pipes"
|
||||
desc = "A meter that can be laid on pipes."
|
||||
icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi'
|
||||
icon_state = "meter"
|
||||
item_state = "buildpipe"
|
||||
@@ -332,4 +251,3 @@ GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
piping_layer = new_layer
|
||||
pixel_x = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
|
||||
pixel_y = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
|
||||
|
||||
|
||||
@@ -17,30 +17,30 @@
|
||||
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>
|
||||
<b>Pipes:</b><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_SIMPLE];dir=1'>Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_SIMPLE];dir=5'>Bent Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_MANIFOLD];dir=1'>Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_LAYER_MANIFOLD];dir=1'>Layer Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_4WAYMANIFOLD];dir=1'>4-Way Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_MVALVE];dir=1'>Manual Valve</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_DVALVE];dir=1'>Digital Valve</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/simple];dir=1'>Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/simple];dir=5'>Bent Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/manifold];dir=1'>Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/layer_manifold];dir=1'>Layer Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/manifold4w];dir=1'>4-Way Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/binary/valve];dir=1'>Manual Valve</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/binary/valve/digital];dir=1'>Digital Valve</A><BR>
|
||||
<b>Devices:</b><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_CONNECTOR];dir=1'>Connector</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_UVENT];dir=1'>Vent</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_PUMP];dir=1'>Gas Pump</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_PASSIVE_GATE];dir=1'>Passive Gate</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_VOLUME_PUMP];dir=1'>Volume Pump</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_SCRUBBER];dir=1'>Scrubber</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/unary/portables_connector];dir=1'>Connector</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/unary/vent_pump];dir=1'>Vent</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/binary/pump];dir=1'>Gas Pump</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/binary/passive_gate];dir=1'>Passive Gate</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/binary/volume_pump];dir=1'>Volume Pump</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/unary/vent_scrubber];dir=1'>Scrubber</A><BR>
|
||||
<A href='?src=\ref[src];makemeter=1'>Meter</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_GAS_FILTER];dir=1'>Gas Filter</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_GAS_MIXER];dir=1'>Gas Mixer</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/trinary/filter];dir=1'>Gas Filter</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/trinary/mixer];dir=1'>Gas Mixer</A><BR>
|
||||
<b>Heat exchange:</b><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_HE];dir=1'>Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_HE];dir=5'>Bent Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_HE_MANIFOLD];dir=1'>Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_HE_4WAYMANIFOLD];dir=1'>4-Way Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_JUNCTION];dir=1'>Junction</A><BR>
|
||||
<A href='?src=\ref[src];make=[PIPE_HEAT_EXCHANGE];dir=1'>Heat Exchanger</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/heat_exchanging/simple];dir=1'>Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/heat_exchanging/simple];dir=5'>Bent Pipe</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/heat_exchanging/manifold];dir=1'>Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w];dir=1'>4-Way Manifold</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/pipe/heat_exchanging/junction];dir=1'>Junction</A><BR>
|
||||
<A href='?src=\ref[src];make=[/obj/machinery/atmospherics/components/unary/heat_exchanger];dir=1'>Heat Exchanger</A><BR>
|
||||
"}
|
||||
|
||||
|
||||
|
||||
@@ -624,6 +624,15 @@
|
||||
/obj/machinery/porta_turret/centcom_shuttle/setup()
|
||||
return
|
||||
|
||||
/obj/machinery/porta_turret/centcom_shuttle/weak
|
||||
max_integrity = 120
|
||||
integrity_failure = 60
|
||||
name = "Old Laser Turret"
|
||||
desc = "A turret built with substandard parts and run down further with age. Still capable of delivering lethal lasers to the odd space carp, but not much else."
|
||||
stun_projectile = /obj/item/projectile/beam/weak
|
||||
lethal_projectile = /obj/item/projectile/beam/weak
|
||||
faction = "neutral"
|
||||
|
||||
////////////////////////
|
||||
//Turret Control Panel//
|
||||
////////////////////////
|
||||
@@ -790,7 +799,7 @@
|
||||
|
||||
/obj/item/wallframe/turret_control
|
||||
name = "turret control frame"
|
||||
desc = "Used for building turret control panels"
|
||||
desc = "Used for building turret control panels."
|
||||
icon_state = "apc"
|
||||
result_path = /obj/machinery/turretid
|
||||
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
@@ -343,7 +343,8 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
if (sending)
|
||||
var/pass = 0
|
||||
for (var/obj/machinery/message_server/MS in GLOB.machines)
|
||||
if(!MS.active) continue
|
||||
if(!MS.active)
|
||||
continue
|
||||
MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority)
|
||||
pass = 1
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/obj/structure/emergency_shield/invoker
|
||||
name = "Invoker's Shield"
|
||||
desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals"
|
||||
desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals."
|
||||
color = "#FF0000"
|
||||
max_integrity = 20
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
icon = 'icons/obj/singularity.dmi'
|
||||
icon_state = "beacon"
|
||||
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
|
||||
stat = 0
|
||||
verb_say = "states"
|
||||
@@ -20,7 +20,8 @@
|
||||
|
||||
/obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null)
|
||||
if(surplus() < 1500)
|
||||
if(user) to_chat(user, "<span class='notice'>The connected wire doesn't have enough current.</span>")
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>The connected wire doesn't have enough current.</span>")
|
||||
return
|
||||
for(var/obj/singularity/singulo in GLOB.singularities)
|
||||
if(singulo.z == z)
|
||||
@@ -54,13 +55,13 @@
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(active)
|
||||
to_chat(user, "<span class='warning'>You need to deactivate the beacon first!</span>")
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
anchored = FALSE
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='notice'>You unscrew the beacon from the floor.</span>")
|
||||
disconnect_from_network()
|
||||
return
|
||||
@@ -68,7 +69,7 @@
|
||||
if(!connect_to_network())
|
||||
to_chat(user, "<span class='warning'>This device must be placed over an exposed, powered cable node!</span>")
|
||||
return
|
||||
anchored = TRUE
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='notice'>You screw the beacon to the floor and attach the cable.</span>")
|
||||
return
|
||||
else
|
||||
@@ -105,8 +106,8 @@
|
||||
name = "suspicious beacon"
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "beacon"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a special beacon to your location</i>."
|
||||
origin_tech = "bluespace=6;syndicate=5"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
@@ -515,7 +515,7 @@
|
||||
|
||||
/obj/item/device/syndicatedetonator
|
||||
name = "big red button"
|
||||
desc = "Your standard issue bomb synchronizing button. Five second safety delay to prevent 'accidents'"
|
||||
desc = "Your standard issue bomb synchronizing button. Five second safety delay to prevent 'accidents'."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "bigred"
|
||||
item_state = "electronic"
|
||||
|
||||
@@ -60,7 +60,8 @@
|
||||
dat += "<br>Identification String: <a href='?src=\ref[src];input=id'>NULL</a>"
|
||||
dat += "<br>Network: <a href='?src=\ref[src];input=network'>[network]</a>"
|
||||
dat += "<br>Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]"
|
||||
if(hide) dat += "<br>Shadow Link: ACTIVE</a>"
|
||||
if(hide)
|
||||
dat += "<br>Shadow Link: ACTIVE</a>"
|
||||
|
||||
//Show additional options for certain machines.
|
||||
dat += Options_Menu()
|
||||
|
||||
@@ -44,10 +44,10 @@
|
||||
/obj/machinery/teleport/hub/CollidedWith(atom/movable/AM)
|
||||
if(z == ZLEVEL_CENTCOM)
|
||||
to_chat(AM, "You can't use this here.")
|
||||
return
|
||||
if(is_ready())
|
||||
teleport(AM)
|
||||
use_power(5000)
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W))
|
||||
|
||||
@@ -796,7 +796,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
//This one's from bay12
|
||||
/obj/machinery/vending/cart
|
||||
name = "\improper PTech"
|
||||
desc = "Cartridges for PDAs"
|
||||
desc = "Cartridges for PDAs."
|
||||
product_slogans = "Carts to go!"
|
||||
icon_state = "cart"
|
||||
icon_deny = "cart-deny"
|
||||
@@ -890,7 +890,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/security
|
||||
name = "\improper SecTech"
|
||||
desc = "A security equipment vendor"
|
||||
desc = "A security equipment vendor."
|
||||
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
|
||||
icon_state = "sec"
|
||||
icon_deny = "sec-deny"
|
||||
@@ -1006,7 +1006,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/dinnerware
|
||||
name = "\improper Plasteel Chef's Dinnerware Vendor"
|
||||
desc = "A kitchen and restaurant equipment vendor"
|
||||
desc = "A kitchen and restaurant equipment vendor."
|
||||
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
|
||||
icon_state = "dinnerware"
|
||||
products = list(/obj/item/storage/bag/tray = 8, /obj/item/kitchen/fork = 6, /obj/item/kitchen/knife = 6, /obj/item/kitchen/rollingpin = 2, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, /obj/item/clothing/suit/apron/chef = 2, /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, /obj/item/reagent_containers/food/condiment/saltshaker = 5, /obj/item/reagent_containers/food/condiment/peppermill = 5, /obj/item/reagent_containers/glass/bowl = 20)
|
||||
@@ -1016,7 +1016,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/sovietsoda
|
||||
name = "\improper BODA"
|
||||
desc = "Old sweet water vending machine"
|
||||
desc = "Old sweet water vending machine."
|
||||
icon_state = "sovietsoda"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30)
|
||||
|
||||
Reference in New Issue
Block a user