April sync (#360)
* Maps and things no code/icons * helpers defines globalvars * Onclick world.dm orphaned_procs * subsystems Round vote and shuttle autocall done here too * datums * Game folder * Admin - chatter modules * clothing - mining * modular computers - zambies * client * mob level 1 * mob stage 2 + simple_animal * silicons n brains * mob stage 3 + Alien/Monkey * human mobs * icons updated * some sounds * emitter y u no commit * update tgstation.dme * compile fixes * travis fixes Also removes Fast digest mode, because reasons. * tweaks for travis Mentors are broke again Also fixes Sizeray guns * oxygen loss fix for vore code. * removes unused code * some code updates * bulk fixes * further fixes * outside things * whoops. * Maint bar ported * GLOBs.
This commit is contained in:
@@ -107,10 +107,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
|
||||
if(controls_inside && state == notcontained_state)
|
||||
state = default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it.
|
||||
if(controls_inside && state == GLOB.notcontained_state)
|
||||
state = GLOB.default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it.
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
data["chems"] = list()
|
||||
for(var/chem in available_chems)
|
||||
var/datum/reagent/R = chemical_reagents_list[chem]
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[chem]
|
||||
data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem)))
|
||||
|
||||
data["occupant"] = list()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/cooldown_time = 0
|
||||
var/cooldown_timeleft = 0
|
||||
var/cooldown_on = 0
|
||||
req_access = list(access_ai_upload)
|
||||
req_access = list(GLOB.access_ai_upload)
|
||||
|
||||
/obj/machinery/ai_slipper/power_change()
|
||||
if(stat & BROKEN)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
signal.data["door_status"] = density?("closed"):("open")
|
||||
signal.data["lock_status"] = locked?("locked"):("unlocked")
|
||||
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/open(surpress_send)
|
||||
@@ -75,7 +75,7 @@
|
||||
SSradio.remove_object(src, frequency)
|
||||
if(new_frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK)
|
||||
|
||||
/obj/machinery/door/airlock/Destroy()
|
||||
if(frequency && SSradio)
|
||||
@@ -116,7 +116,7 @@
|
||||
signal.data["tag"] = master_tag
|
||||
signal.data["command"] = "cycle"
|
||||
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
||||
flick("airlock_sensor_cycle", src)
|
||||
|
||||
/obj/machinery/airlock_sensor/process()
|
||||
@@ -133,14 +133,14 @@
|
||||
|
||||
signal.data["pressure"] = num2text(pressure)
|
||||
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
|
||||
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
|
||||
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK)
|
||||
|
||||
/obj/machinery/airlock_sensor/Initialize()
|
||||
..()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var/list/announcement_systems = list()
|
||||
GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
|
||||
/obj/machinery/announcement_system
|
||||
density = 1
|
||||
@@ -27,7 +27,7 @@ var/list/announcement_systems = list()
|
||||
|
||||
/obj/machinery/announcement_system/New()
|
||||
..()
|
||||
announcement_systems += src
|
||||
GLOB.announcement_systems += src
|
||||
radio = new /obj/item/device/radio/headset/ai(src)
|
||||
|
||||
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/announcement_system(null)
|
||||
@@ -62,7 +62,7 @@ var/list/announcement_systems = list()
|
||||
|
||||
/obj/machinery/announcement_system/Destroy()
|
||||
QDEL_NULL(radio)
|
||||
announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!"
|
||||
GLOB.announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!"
|
||||
return ..()
|
||||
|
||||
/obj/machinery/announcement_system/power_change()
|
||||
@@ -103,10 +103,10 @@ var/list/announcement_systems = list()
|
||||
message = "The arrivals shuttle has been damaged. Docking for repairs..."
|
||||
|
||||
if(channels.len == 0)
|
||||
radio.talk_into(src, message, null, list(SPAN_ROBOT))
|
||||
radio.talk_into(src, message, null, list(SPAN_ROBOT), get_default_language())
|
||||
else
|
||||
for(var/channel in channels)
|
||||
radio.talk_into(src, message, channel, list(SPAN_ROBOT))
|
||||
radio.talk_into(src, message, channel, list(SPAN_ROBOT), get_default_language())
|
||||
|
||||
//config stuff
|
||||
|
||||
@@ -132,13 +132,13 @@ var/list/announcement_systems = list()
|
||||
|
||||
if(href_list["ArrivalTopic"])
|
||||
var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival)
|
||||
if(!in_range(src, usr) && src.loc != usr && !isAI(usr))
|
||||
if(!in_range(src, usr) && src.loc != usr && (!isAI(usr) && !IsAdminGhost(usr)))
|
||||
return
|
||||
if(NewMessage)
|
||||
arrival = NewMessage
|
||||
else if(href_list["NewheadTopic"])
|
||||
var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead)
|
||||
if(!in_range(src, usr) && src.loc != usr && !isAI(usr))
|
||||
if(!in_range(src, usr) && src.loc != usr && (!isAI(usr) && !IsAdminGhost(usr)))
|
||||
return
|
||||
if(NewMessage)
|
||||
newhead = NewMessage
|
||||
@@ -156,8 +156,8 @@ var/list/announcement_systems = list()
|
||||
/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
|
||||
. = attack_ai(user)
|
||||
|
||||
/obj/machinery/announcement_system/attack_ai(mob/living/silicon/user)
|
||||
if(!issilicon(user))
|
||||
/obj/machinery/announcement_system/attack_ai(mob/user)
|
||||
if(!issilicon(user) && !IsAdminGhost(user))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='warning'>[src]'s firmware appears to be malfunctioning!</span>")
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
..()
|
||||
assembly = new(src)
|
||||
assembly.state = 4
|
||||
cameranet.cameras += src
|
||||
cameranet.addCamera(src)
|
||||
GLOB.cameranet.cameras += src
|
||||
GLOB.cameranet.addCamera(src)
|
||||
add_to_proximity_list(src, 1) //1 was default of everything
|
||||
/* // Use this to look for cameras that have the same c_tag.
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
@@ -74,9 +74,9 @@
|
||||
if(bug.current == src)
|
||||
bug.current = null
|
||||
bug = null
|
||||
cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that
|
||||
cameranet.cameras -= src
|
||||
cameranet.removeCamera(src)
|
||||
GLOB.cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that
|
||||
GLOB.cameranet.cameras -= src
|
||||
GLOB.cameranet.removeCamera(src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/emp_act(severity)
|
||||
@@ -87,7 +87,7 @@
|
||||
update_icon()
|
||||
var/list/previous_network = network
|
||||
network = list()
|
||||
cameranet.removeCamera(src)
|
||||
GLOB.cameranet.removeCamera(src)
|
||||
stat |= EMPED
|
||||
set_light(0)
|
||||
emped = emped+1 //Increase the number of consecutive EMP's
|
||||
@@ -101,10 +101,10 @@
|
||||
stat &= ~EMPED
|
||||
update_icon()
|
||||
if(can_use())
|
||||
cameranet.addCamera(src)
|
||||
GLOB.cameranet.addCamera(src)
|
||||
emped = 0 //Resets the consecutive EMP count
|
||||
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
|
||||
for(var/mob/O in mob_list)
|
||||
for(var/mob/O in GLOB.mob_list)
|
||||
if (O.client && O.client.eye == src)
|
||||
O.unset_machine()
|
||||
O.reset_perspective(null)
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
/obj/machinery/camera/proc/setViewRange(num = 7)
|
||||
src.view_range = num
|
||||
cameranet.updateVisibility(src, 0)
|
||||
GLOB.cameranet.updateVisibility(src, 0)
|
||||
|
||||
/obj/machinery/camera/proc/shock(mob/living/user)
|
||||
if(!istype(user))
|
||||
@@ -206,7 +206,7 @@
|
||||
info = P.notehtml
|
||||
to_chat(U, "<span class='notice'>You hold \the [itemname] up to the camera...</span>")
|
||||
U.changeNext_move(CLICK_CD_MELEE)
|
||||
for(var/mob/O in player_list)
|
||||
for(var/mob/O in GLOB.player_list)
|
||||
if(isAI(O))
|
||||
var/mob/living/silicon/ai/AI = O
|
||||
if(AI.control_disabled || (AI.stat == DEAD))
|
||||
@@ -278,11 +278,11 @@
|
||||
/obj/machinery/camera/proc/toggle_cam(mob/user, displaymessage = 1)
|
||||
status = !status
|
||||
if(can_use())
|
||||
cameranet.addCamera(src)
|
||||
GLOB.cameranet.addCamera(src)
|
||||
else
|
||||
set_light(0)
|
||||
cameranet.removeCamera(src)
|
||||
cameranet.updateChunk(x, y, z)
|
||||
GLOB.cameranet.removeCamera(src)
|
||||
GLOB.cameranet.updateChunk(x, y, z)
|
||||
var/change_msg = "deactivates"
|
||||
if(status)
|
||||
change_msg = "reactivates"
|
||||
@@ -301,7 +301,7 @@
|
||||
// now disconnect anyone using the camera
|
||||
//Apparently, this will disconnect anyone even if the camera was re-activated.
|
||||
//I guess that doesn't matter since they can't use it anyway?
|
||||
for(var/mob/O in player_list)
|
||||
for(var/mob/O in GLOB.player_list)
|
||||
if (O.client && O.client.eye == src)
|
||||
O.unset_machine()
|
||||
O.reset_perspective(null)
|
||||
@@ -309,12 +309,12 @@
|
||||
|
||||
/obj/machinery/camera/proc/triggerCameraAlarm()
|
||||
alarm_on = 1
|
||||
for(var/mob/living/silicon/S in mob_list)
|
||||
for(var/mob/living/silicon/S in GLOB.mob_list)
|
||||
S.triggerAlarm("Camera", get_area(src), list(src), src)
|
||||
|
||||
/obj/machinery/camera/proc/cancelCameraAlarm()
|
||||
alarm_on = 0
|
||||
for(var/mob/living/silicon/S in mob_list)
|
||||
for(var/mob/living/silicon/S in GLOB.mob_list)
|
||||
S.cancelAlarm("Camera", get_area(src), src)
|
||||
|
||||
/obj/machinery/camera/proc/can_use()
|
||||
@@ -386,7 +386,7 @@
|
||||
return 0
|
||||
|
||||
/obj/machinery/camera/proc/Togglelight(on=0)
|
||||
for(var/mob/living/silicon/ai/A in ai_list)
|
||||
for(var/mob/living/silicon/ai/A in GLOB.ai_list)
|
||||
for(var/obj/machinery/camera/cam in A.lit_cameras)
|
||||
if(cam == src)
|
||||
return
|
||||
@@ -405,8 +405,8 @@
|
||||
assembly.update_icon()
|
||||
|
||||
/obj/machinery/camera/portable/process() //Updates whenever the camera is moved.
|
||||
if(cameranet && get_turf(src) != prev_turf)
|
||||
cameranet.updatePortableCamera(src)
|
||||
if(GLOB.cameranet && get_turf(src) != prev_turf)
|
||||
GLOB.cameranet.updatePortableCamera(src)
|
||||
prev_turf = get_turf(src)
|
||||
|
||||
/obj/machinery/camera/get_remote_view_fullscreens(mob/user)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/obj/machinery/camera/proc/cancelAlarm()
|
||||
if (detectTime == -1)
|
||||
for (var/mob/living/silicon/aiPlayer in player_list)
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.cancelAlarm("Motion", get_area(src), src)
|
||||
detectTime = 0
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
/obj/machinery/camera/proc/triggerAlarm()
|
||||
if (!detectTime) return 0
|
||||
for (var/mob/living/silicon/aiPlayer in player_list)
|
||||
for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
|
||||
if (status)
|
||||
aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src)
|
||||
detectTime = -1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/camera/emp_proof
|
||||
start_active = 1
|
||||
|
||||
/obj/machinery/camera/emp_proof/New()
|
||||
/obj/machinery/camera/emp_proof/Initialize()
|
||||
..()
|
||||
upgradeEmpProof()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
start_active = 1
|
||||
icon_state = "xraycam" // Thanks to Krutchen for the icons.
|
||||
|
||||
/obj/machinery/camera/xray/New()
|
||||
/obj/machinery/camera/xray/Initialize()
|
||||
..()
|
||||
upgradeXRay()
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
start_active = 1
|
||||
name = "motion-sensitive security camera"
|
||||
|
||||
/obj/machinery/camera/motion/New()
|
||||
/obj/machinery/camera/motion/Initialize()
|
||||
..()
|
||||
upgradeMotion()
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/obj/machinery/camera/all
|
||||
start_active = 1
|
||||
|
||||
/obj/machinery/camera/all/New()
|
||||
/obj/machinery/camera/all/Initialize()
|
||||
..()
|
||||
upgradeEmpProof()
|
||||
upgradeXRay()
|
||||
@@ -43,13 +43,17 @@
|
||||
var/number = 0 //camera number in area
|
||||
|
||||
//This camera type automatically sets it's name to whatever the area that it's in is called.
|
||||
/obj/machinery/camera/autoname/New()
|
||||
..()
|
||||
spawn(10)
|
||||
/obj/machinery/camera/autoname/Initialize(mapload)
|
||||
if(mapload)
|
||||
..()
|
||||
return TRUE
|
||||
else
|
||||
if(!initialized)
|
||||
..()
|
||||
number = 1
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
for(var/obj/machinery/camera/autoname/C in machines)
|
||||
for(var/obj/machinery/camera/autoname/C in GLOB.machines)
|
||||
if(C == src) continue
|
||||
var/area/CA = get_area(C)
|
||||
if(CA.type == A.type)
|
||||
@@ -57,7 +61,6 @@
|
||||
number = max(number, C.number+1)
|
||||
c_tag = "[A.name] #[number]"
|
||||
|
||||
|
||||
// CHECKS
|
||||
|
||||
/obj/machinery/camera/proc/isEmpProof()
|
||||
@@ -79,7 +82,7 @@
|
||||
assembly.upgrades.Add(new /obj/item/device/analyzer(assembly))
|
||||
upgrades |= CAMERA_UPGRADE_XRAY
|
||||
|
||||
// If you are upgrading Motion, and it isn't in the camera's New(), add it to the machines list.
|
||||
// If you are upgrading Motion, and it isn't in the camera's Initialize(), add it to the machines list.
|
||||
/obj/machinery/camera/proc/upgradeMotion()
|
||||
assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly))
|
||||
upgrades |= CAMERA_UPGRADE_MOTION
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
return
|
||||
|
||||
var/list/L = list()
|
||||
for (var/obj/machinery/camera/C in cameranet.cameras)
|
||||
for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
|
||||
L.Add(C)
|
||||
|
||||
camera_sort(L)
|
||||
@@ -48,7 +48,7 @@
|
||||
if(usr.stat == 2)
|
||||
return list()
|
||||
|
||||
for(var/mob/living/M in mob_list)
|
||||
for(var/mob/living/M in GLOB.mob_list)
|
||||
if(!M.can_track(usr))
|
||||
continue
|
||||
|
||||
@@ -138,9 +138,9 @@
|
||||
return 0
|
||||
if(iscyborg(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(!(R.camera && R.camera.can_use()) && !cameranet.checkCameraVis(M))
|
||||
if(!(R.camera && R.camera.can_use()) && !GLOB.cameranet.checkCameraVis(M))
|
||||
return 0
|
||||
else if(!cameranet.checkCameraVis(M))
|
||||
else if(!GLOB.cameranet.checkCameraVis(M))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#define CLONE_INITIAL_DAMAGE 190 //Clones in clonepods start with 190 cloneloss damage and 190 brainloss damage, thats just logical
|
||||
#define MINIMUM_HEAL_LEVEL 40
|
||||
|
||||
#define SPEAK(message) radio.talk_into(src, message, radio_channel, get_spans())
|
||||
#define SPEAK(message) radio.talk_into(src, message, radio_channel, get_spans(), get_default_language())
|
||||
|
||||
/obj/machinery/clonepod
|
||||
anchored = 1
|
||||
@@ -15,7 +15,7 @@
|
||||
density = 1
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "pod_0"
|
||||
req_access = list(access_cloning) //For premature unlocking.
|
||||
req_access = list(GLOB.access_cloning) //For premature unlocking.
|
||||
verb_say = "states"
|
||||
var/heal_level //The clone is released once its health reaches this level.
|
||||
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
|
||||
@@ -166,7 +166,7 @@
|
||||
H.hardset_dna(ui, se, H.real_name, null, mrace, features)
|
||||
|
||||
if(efficiency > 2)
|
||||
var/list/unclean_mutations = (not_good_mutations|bad_mutations)
|
||||
var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations)
|
||||
H.dna.remove_mutation_group(unclean_mutations)
|
||||
if(efficiency > 5 && prob(20))
|
||||
H.randmutvg()
|
||||
|
||||
@@ -10,10 +10,11 @@
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/machinery/computer/operating/Initialize()
|
||||
..()
|
||||
find_table()
|
||||
|
||||
/obj/machinery/computer/operating/proc/find_table()
|
||||
for(var/dir in cardinal)
|
||||
for(var/dir in GLOB.cardinal)
|
||||
table = locate(/obj/structure/table/optable, get_step(src, dir))
|
||||
if(table)
|
||||
table.computer = src
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/computer/aifixer
|
||||
name = "\improper AI system integrity restorer"
|
||||
desc = "Used with intelliCards containing nonfunctioning AIs to restore them to working order."
|
||||
req_access = list(access_captain, access_robotics, access_heads)
|
||||
req_access = list(GLOB.access_captain, GLOB.access_robotics, GLOB.access_heads)
|
||||
var/mob/living/silicon/ai/occupier = null
|
||||
var/active = 0
|
||||
circuit = /obj/item/weapon/circuitboard/computer/aifixer
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Used to remotely control the flow of power to different parts of the station."
|
||||
icon_screen = "solar"
|
||||
icon_keyboard = "power_key"
|
||||
req_access = list(access_engine)
|
||||
req_access = list(GLOB.access_engine)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/apc_control
|
||||
light_color = LIGHT_COLOR_YELLOW
|
||||
var/list/apcs //APCs the computer has access to
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/obj/machinery/computer/apc_control/process()
|
||||
apcs = list() //Clear the list every tick
|
||||
for(var/V in apcs_list)
|
||||
for(var/V in GLOB.apcs_list)
|
||||
var/obj/machinery/power/apc/APC = V
|
||||
if(check_apc(APC))
|
||||
apcs[APC.name] = APC
|
||||
@@ -37,9 +37,11 @@
|
||||
active_apc.update_icon()
|
||||
active_apc = null
|
||||
|
||||
/obj/machinery/computer/apc_control/attack_ai(mob/living/AI) //You already have APC access, cheater!
|
||||
AI << "<span class='warning'>[src] does not support AI control.</span>"
|
||||
return
|
||||
/obj/machinery/computer/apc_control/attack_ai(mob/user)
|
||||
if(!IsAdminGhost(user))
|
||||
to_chat(user,"<span class='warning'>[src] does not support AI control.</span>") //You already have APC access, cheater!
|
||||
return
|
||||
..(user)
|
||||
|
||||
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
|
||||
return APC.z == z && !APC.malfhack && !APC.aidisabled && !APC.emagged && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
|
||||
@@ -120,7 +122,7 @@
|
||||
LAZYADD(logs, "<b>-=- Logging restored to full functionality at this point -=-</b>")
|
||||
if(href_list["access_apc"])
|
||||
playsound(src, "terminal_type", 50, 0)
|
||||
var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in apcs_list
|
||||
var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list
|
||||
if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC))
|
||||
to_chat(usr, "<span class='robot danger'>\icon[I] APC does not return interface request. Remote access may be disabled.</span>")
|
||||
return
|
||||
@@ -134,7 +136,7 @@
|
||||
active_apc = null
|
||||
to_chat(usr, "<span class='robot notice'>\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.</span>")
|
||||
log_activity("remotely accessed APC in [get_area(APC)]")
|
||||
APC.interact(usr, not_incapacitated_state)
|
||||
APC.interact(usr, GLOB.not_incapacitated_state)
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
message_admins("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].")
|
||||
log_game("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].")
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
/obj/item/toy/redbutton = 2,
|
||||
/obj/item/toy/talking/owl = 2,
|
||||
/obj/item/toy/talking/griffin = 2,
|
||||
/obj/item/toy/talking/skeleton = 2,
|
||||
/obj/item/weapon/coin/antagtoken = 2,
|
||||
/obj/item/stack/tile/fakespace/loaded = 2,
|
||||
/obj/item/stack/tile/fakepit/loaded = 2,
|
||||
@@ -48,6 +47,9 @@
|
||||
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/machinery/computer/arcade/proc/Reset()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/arcade/New()
|
||||
..()
|
||||
// If it's a generic arcade machine, pick a random arcade
|
||||
@@ -74,8 +76,9 @@
|
||||
"<span class='notice'>[src] dispenses a [prize]!</span>",
|
||||
"<span class='notice'>You hear a chime and a clunk.</span>")
|
||||
|
||||
prize.loc = src.loc
|
||||
prize.loc = loc
|
||||
#undef PULSE_MEDAL
|
||||
|
||||
/obj/machinery/computer/arcade/emp_act(severity)
|
||||
..(severity)
|
||||
|
||||
@@ -91,8 +94,8 @@
|
||||
num_of_prizes = rand(0,2)
|
||||
for(var/i = num_of_prizes; i > 0; i--)
|
||||
empprize = pickweight(prizes)
|
||||
new empprize(src.loc)
|
||||
explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes)
|
||||
new empprize(loc)
|
||||
explosion(loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes)
|
||||
|
||||
|
||||
// ** BATTLE ** //
|
||||
@@ -109,12 +112,11 @@
|
||||
var/player_mp = 10
|
||||
var/enemy_hp = 45 //Enemy health/attack points
|
||||
var/enemy_mp = 20
|
||||
var/gameover = 0
|
||||
var/blocked = 0 //Player cannot attack/heal while set
|
||||
var/gameover = FALSE
|
||||
var/blocked = FALSE //Player cannot attack/heal while set
|
||||
var/turtle = 0
|
||||
|
||||
/obj/machinery/computer/arcade/battle/New()
|
||||
..()
|
||||
/obj/machinery/computer/arcade/battle/Reset()
|
||||
var/name_action
|
||||
var/name_part1
|
||||
var/name_part2
|
||||
@@ -124,20 +126,20 @@
|
||||
name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ")
|
||||
name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers")
|
||||
|
||||
src.enemy_name = replacetext((name_part1 + name_part2), "the ", "")
|
||||
src.name = (name_action + name_part1 + name_part2)
|
||||
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)
|
||||
var/dat = "<a href='byond://?src=\ref[src];close=1'>Close</a>"
|
||||
dat += "<center><h4>[src.enemy_name]</h4></center>"
|
||||
dat += "<center><h4>[enemy_name]</h4></center>"
|
||||
|
||||
dat += "<br><center><h3>[src.temp]</h3></center>"
|
||||
dat += "<br><center>Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]</center>"
|
||||
dat += "<br><center><h3>[temp]</h3></center>"
|
||||
dat += "<br><center>Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]</center>"
|
||||
|
||||
if (src.gameover)
|
||||
if (gameover)
|
||||
dat += "<center><b><a href='byond://?src=\ref[src];newgame=1'>New Game</a>"
|
||||
else
|
||||
dat += "<center><b><a href='byond://?src=\ref[src];attack=1'>Attack</a> | "
|
||||
@@ -147,7 +149,7 @@
|
||||
dat += "</b></center>"
|
||||
var/datum/browser/popup = new(user, "arcade", "Space Villian 2000")
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
@@ -155,48 +157,48 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
if (!src.blocked && !src.gameover)
|
||||
if (!blocked && !gameover)
|
||||
if (href_list["attack"])
|
||||
src.blocked = 1
|
||||
blocked = TRUE
|
||||
var/attackamt = rand(2,6)
|
||||
src.temp = "You attack for [attackamt] damage!"
|
||||
playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.updateUsrDialog()
|
||||
temp = "You attack for [attackamt] damage!"
|
||||
playsound(loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
updateUsrDialog()
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
|
||||
sleep(10)
|
||||
src.enemy_hp -= attackamt
|
||||
src.arcade_action()
|
||||
enemy_hp -= attackamt
|
||||
arcade_action()
|
||||
|
||||
else if (href_list["heal"])
|
||||
src.blocked = 1
|
||||
blocked = TRUE
|
||||
var/pointamt = rand(1,3)
|
||||
var/healamt = rand(6,8)
|
||||
src.temp = "You use [pointamt] magic to heal for [healamt] damage!"
|
||||
playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.updateUsrDialog()
|
||||
temp = "You use [pointamt] magic to heal for [healamt] damage!"
|
||||
playsound(loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
updateUsrDialog()
|
||||
turtle++
|
||||
|
||||
sleep(10)
|
||||
src.player_mp -= pointamt
|
||||
src.player_hp += healamt
|
||||
src.blocked = 1
|
||||
src.updateUsrDialog()
|
||||
src.arcade_action()
|
||||
player_mp -= pointamt
|
||||
player_hp += healamt
|
||||
blocked = TRUE
|
||||
updateUsrDialog()
|
||||
arcade_action()
|
||||
|
||||
else if (href_list["charge"])
|
||||
src.blocked = 1
|
||||
blocked = 1
|
||||
var/chargeamt = rand(4,7)
|
||||
src.temp = "You regain [chargeamt] points"
|
||||
playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.player_mp += chargeamt
|
||||
temp = "You regain [chargeamt] points"
|
||||
playsound(loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
player_mp += chargeamt
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
sleep(10)
|
||||
src.arcade_action()
|
||||
arcade_action()
|
||||
|
||||
if (href_list["close"])
|
||||
usr.unset_machine()
|
||||
@@ -208,31 +210,31 @@
|
||||
player_mp = 10
|
||||
enemy_hp = 45
|
||||
enemy_mp = 20
|
||||
gameover = 0
|
||||
gameover = FALSE
|
||||
turtle = 0
|
||||
|
||||
if(emagged)
|
||||
src.New()
|
||||
Reset()
|
||||
emagged = 0
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/arcade/battle/proc/arcade_action()
|
||||
if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0))
|
||||
if ((enemy_mp <= 0) || (enemy_hp <= 0))
|
||||
if(!gameover)
|
||||
src.gameover = 1
|
||||
src.temp = "[src.enemy_name] has fallen! Rejoice!"
|
||||
playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
gameover = TRUE
|
||||
temp = "[enemy_name] has fallen! Rejoice!"
|
||||
playsound(loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
|
||||
if(emagged)
|
||||
feedback_inc("arcade_win_emagged")
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(src.loc)
|
||||
new /obj/item/clothing/head/collectable/petehat(src.loc)
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(loc)
|
||||
new /obj/item/clothing/head/collectable/petehat(loc)
|
||||
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
src.New()
|
||||
Reset()
|
||||
emagged = 0
|
||||
else
|
||||
feedback_inc("arcade_win_normal")
|
||||
@@ -240,51 +242,51 @@
|
||||
|
||||
else if (emagged && (turtle >= 4))
|
||||
var/boomamt = rand(5,10)
|
||||
src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!"
|
||||
playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.player_hp -= boomamt
|
||||
temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!"
|
||||
playsound(loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
player_hp -= boomamt
|
||||
|
||||
else if ((src.enemy_mp <= 5) && (prob(70)))
|
||||
else if ((enemy_mp <= 5) && (prob(70)))
|
||||
var/stealamt = rand(2,3)
|
||||
src.temp = "[src.enemy_name] steals [stealamt] of your power!"
|
||||
playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.player_mp -= stealamt
|
||||
src.updateUsrDialog()
|
||||
temp = "[enemy_name] steals [stealamt] of your power!"
|
||||
playsound(loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
player_mp -= stealamt
|
||||
updateUsrDialog()
|
||||
|
||||
if (src.player_mp <= 0)
|
||||
src.gameover = 1
|
||||
if (player_mp <= 0)
|
||||
gameover = TRUE
|
||||
sleep(10)
|
||||
src.temp = "You have been drained! GAME OVER"
|
||||
playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
temp = "You have been drained! GAME OVER"
|
||||
playsound(loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
if(emagged)
|
||||
feedback_inc("arcade_loss_mana_emagged")
|
||||
usr.gib()
|
||||
else
|
||||
feedback_inc("arcade_loss_mana_normal")
|
||||
|
||||
else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4))
|
||||
src.temp = "[src.enemy_name] heals for 4 health!"
|
||||
playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.enemy_hp += 4
|
||||
src.enemy_mp -= 4
|
||||
else if ((enemy_hp <= 10) && (enemy_mp > 4))
|
||||
temp = "[enemy_name] heals for 4 health!"
|
||||
playsound(loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
enemy_hp += 4
|
||||
enemy_mp -= 4
|
||||
|
||||
else
|
||||
var/attackamt = rand(3,6)
|
||||
src.temp = "[src.enemy_name] attacks for [attackamt] damage!"
|
||||
playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
src.player_hp -= attackamt
|
||||
temp = "[enemy_name] attacks for [attackamt] damage!"
|
||||
playsound(loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
player_hp -= attackamt
|
||||
|
||||
if ((src.player_mp <= 0) || (src.player_hp <= 0))
|
||||
src.gameover = 1
|
||||
src.temp = "You have been crushed! GAME OVER"
|
||||
playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
if ((player_mp <= 0) || (player_hp <= 0))
|
||||
gameover = TRUE
|
||||
temp = "You have been crushed! GAME OVER"
|
||||
playsound(loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10)
|
||||
if(emagged)
|
||||
feedback_inc("arcade_loss_hp_emagged")
|
||||
usr.gib()
|
||||
else
|
||||
feedback_inc("arcade_loss_hp_normal")
|
||||
|
||||
src.blocked = 0
|
||||
blocked = FALSE
|
||||
return
|
||||
|
||||
|
||||
@@ -295,16 +297,16 @@
|
||||
player_mp = 10
|
||||
enemy_hp = 45
|
||||
enemy_mp = 20
|
||||
gameover = 0
|
||||
blocked = 0
|
||||
gameover = FALSE
|
||||
blocked = FALSE
|
||||
|
||||
emagged = 1
|
||||
emagged = TRUE
|
||||
|
||||
enemy_name = "Cuban Pete"
|
||||
name = "Outbomb Cuban Pete"
|
||||
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
|
||||
@@ -363,8 +365,7 @@
|
||||
var/gameStatus = ORION_STATUS_START
|
||||
var/canContinueEvent = 0
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/New()
|
||||
..()
|
||||
/obj/machinery/computer/arcade/orion_trail/Reset()
|
||||
// Sets up the main trail
|
||||
stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime")
|
||||
stopblurbs = list(
|
||||
@@ -462,7 +463,7 @@
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
@@ -522,12 +523,12 @@
|
||||
M.Weaken(3)
|
||||
say("A sudden gust of powerful wind slams [M] into the floor!")
|
||||
M.take_bodypart_damage(25)
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
playsound(loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>A violent gale blows past you, and you barely manage to stay standing!</span>")
|
||||
if(ORION_TRAIL_COLLISION) //by far the most damaging event
|
||||
if(prob(90))
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 100, 1)
|
||||
playsound(loc, 'sound/effects/bang.ogg', 100, 1)
|
||||
var/turf/open/floor/F
|
||||
for(F in orange(1, src))
|
||||
F.ChangeTurf(F.baseturf)
|
||||
@@ -535,16 +536,16 @@
|
||||
if(hull)
|
||||
sleep(10)
|
||||
say("A new floor suddenly appears around [src]. What the hell?")
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
playsound(loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
var/turf/open/space/T
|
||||
for(T in orange(1, src))
|
||||
T.ChangeTurf(/turf/open/floor/plating/)
|
||||
else
|
||||
say("Something slams into the floor around [src] - luckily, it didn't get through!")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
playsound(loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
if(ORION_TRAIL_MALFUNCTION)
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1)
|
||||
src.visible_message("<span class='danger'>[src] malfunctions, randomizing in-game stats!</span>")
|
||||
playsound(loc, 'sound/effects/EMPulse.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>[src] malfunctions, randomizing in-game stats!</span>")
|
||||
var/oldfood = food
|
||||
var/oldfuel = fuel
|
||||
food = rand(10,80) / rand(1,2)
|
||||
@@ -552,12 +553,12 @@
|
||||
if(electronics)
|
||||
sleep(10)
|
||||
if(oldfuel > fuel && oldfood > food)
|
||||
src.audible_message("<span class='danger'>[src] lets out a somehow reassuring chime.</span>")
|
||||
audible_message("<span class='danger'>[src] lets out a somehow reassuring chime.</span>")
|
||||
else if(oldfuel < fuel || oldfood < food)
|
||||
src.audible_message("<span class='danger'>[src] lets out a somehow ominous chime.</span>")
|
||||
audible_message("<span class='danger'>[src] lets out a somehow ominous chime.</span>")
|
||||
food = oldfood
|
||||
fuel = oldfuel
|
||||
playsound(src.loc, 'sound/machines/chime.ogg', 50, 1)
|
||||
playsound(loc, 'sound/machines/chime.ogg', 50, 1)
|
||||
|
||||
else if(href_list["newgame"]) //Reset everything
|
||||
if(gameStatus == ORION_STATUS_START)
|
||||
@@ -609,7 +610,7 @@
|
||||
event = ORION_TRAIL_BLACKHOLE
|
||||
event()
|
||||
if(emagged) //has to be here because otherwise it doesn't work
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1)
|
||||
playsound(loc, 'sound/effects/supermatter.ogg', 100, 1)
|
||||
say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!")
|
||||
usr.Stun(10) //you can't run :^)
|
||||
var/S = new /obj/singularity/academy(usr.loc)
|
||||
@@ -743,8 +744,8 @@
|
||||
last_spaceport_action = "Traded Food for Fuel"
|
||||
event()
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
busy = 0
|
||||
return
|
||||
|
||||
@@ -990,9 +991,9 @@
|
||||
newcrew = specific
|
||||
else
|
||||
if(prob(50))
|
||||
newcrew = pick(first_names_male)
|
||||
newcrew = pick(GLOB.first_names_male)
|
||||
else
|
||||
newcrew = pick(first_names_female)
|
||||
newcrew = pick(GLOB.first_names_female)
|
||||
if(newcrew)
|
||||
settlers += newcrew
|
||||
alive++
|
||||
@@ -1022,7 +1023,7 @@
|
||||
gameStatus = ORION_STATUS_START
|
||||
say("Congratulations, you made it to Orion!")
|
||||
if(emagged)
|
||||
new /obj/item/weapon/orion_ship(src.loc)
|
||||
new /obj/item/weapon/orion_ship(loc)
|
||||
message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.")
|
||||
log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.")
|
||||
else
|
||||
@@ -1059,7 +1060,7 @@
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
has_id = 1
|
||||
id_job = "Officer"
|
||||
id_access_list = list(access_syndicate)
|
||||
id_access_list = list(GLOB.access_syndicate)
|
||||
|
||||
/obj/item/weapon/orion_ship
|
||||
name = "model settler ship"
|
||||
@@ -1087,18 +1088,18 @@
|
||||
|
||||
to_chat(user, "<span class='warning'>You flip the switch on the underside of [src].</span>")
|
||||
active = 1
|
||||
src.visible_message("<span class='notice'>[src] softly beeps and whirs to life!</span>")
|
||||
playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1)
|
||||
visible_message("<span class='notice'>[src] softly beeps and whirs to life!</span>")
|
||||
playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1)
|
||||
say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.")
|
||||
sleep(20)
|
||||
src.visible_message("<span class='warning'>[src] begins to vibrate...</span>")
|
||||
visible_message("<span class='warning'>[src] begins to vibrate...</span>")
|
||||
say("Uh, Port? Having some issues with our reactor, could you check it out? Over.")
|
||||
sleep(30)
|
||||
say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-")
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1)
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, 1)
|
||||
sleep(3.6)
|
||||
src.visible_message("<span class='userdanger'>[src] explodes!</span>")
|
||||
explosion(src.loc, 2,4,8, flame_range = 16)
|
||||
visible_message("<span class='userdanger'>[src] explodes!</span>")
|
||||
explosion(loc, 2,4,8, flame_range = 16)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "atmos_alert", name, 350, 300, master_ui, state)
|
||||
@@ -58,7 +58,7 @@
|
||||
/obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, receive_frequency)
|
||||
receive_frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, receive_frequency, RADIO_ATMOSIA)
|
||||
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
|
||||
|
||||
@@ -37,13 +37,13 @@
|
||||
var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME]
|
||||
signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA)
|
||||
|
||||
|
||||
/obj/machinery/air_sensor/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/air_sensor/Initialize()
|
||||
..()
|
||||
@@ -94,7 +94,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "atmos_control", name, 400, 925, master_ui, state)
|
||||
@@ -131,7 +131,7 @@
|
||||
/obj/machinery/computer/atmos_control/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA)
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// LARGE TANK CONTROL
|
||||
@@ -177,7 +177,7 @@
|
||||
U.broadcast_status()
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "atmos_control", name, 500, 305, master_ui, state)
|
||||
@@ -211,12 +211,12 @@
|
||||
signal.data += list("tag" = output_tag, "power_toggle" = TRUE)
|
||||
. = TRUE
|
||||
if("pressure")
|
||||
var/target = input("New target pressure:", name, output_info["internal"]) as num|null
|
||||
var/target = input("New target pressure:", name, output_info ? output_info["internal"] : 0) as num|null
|
||||
if(!isnull(target) && !..())
|
||||
target = Clamp(target, 0, 50 * ONE_ATMOSPHERE)
|
||||
signal.data += list("tag" = output_tag, "set_internal_pressure" = target)
|
||||
. = TRUE
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption)
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
//returns the list of cameras accessible from this computer
|
||||
/obj/machinery/computer/security/proc/get_available_cameras()
|
||||
var/list/L = list()
|
||||
for (var/obj/machinery/camera/C in cameranet.cameras)
|
||||
for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
|
||||
if((z > ZLEVEL_SPACEMAX || C.z > ZLEVEL_SPACEMAX) && (C.z != z))//if on away mission, can only recieve feed from same z_level cameras
|
||||
continue
|
||||
L.Add(C)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Used to access the various cameras on the station."
|
||||
icon_screen = "cameras"
|
||||
icon_keyboard = "security_key"
|
||||
var/z_lock = null // Lock use to this zlevel
|
||||
var/mob/camera/aiEye/remote/eyeobj
|
||||
var/mob/living/current_user = null
|
||||
var/list/networks = list("SS13")
|
||||
@@ -49,14 +50,14 @@
|
||||
|
||||
if(!eyeobj.eye_initialized)
|
||||
var/camera_location
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
if(!C.can_use())
|
||||
for(var/obj/machinery/camera/C in GLOB.cameranet.cameras)
|
||||
if(!C.can_use() || z_lock && C.z != z_lock)
|
||||
continue
|
||||
if(C.network&networks)
|
||||
if(C.network & networks)
|
||||
camera_location = get_turf(C)
|
||||
break
|
||||
if(camera_location)
|
||||
eyeobj.eye_initialized = 1
|
||||
eyeobj.eye_initialized = TRUE
|
||||
give_eye_control(L)
|
||||
eyeobj.setLoc(camera_location)
|
||||
else
|
||||
@@ -79,6 +80,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
eyeobj.name = "Camera Eye ([user.name])"
|
||||
user.remote_control = eyeobj
|
||||
user.reset_perspective(eyeobj)
|
||||
eyeobj.setLoc(eyeobj.loc)
|
||||
|
||||
/mob/camera/aiEye/remote
|
||||
name = "Inactive Camera Eye"
|
||||
@@ -107,7 +109,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
return
|
||||
T = get_turf(T)
|
||||
loc = T
|
||||
cameranet.visibility(src)
|
||||
GLOB.cameranet.visibility(src)
|
||||
if(visible_icon)
|
||||
if(eye_user.client)
|
||||
eye_user.client.images -= user_image
|
||||
@@ -124,7 +126,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
for(var/i = 0; i < max(sprint, initial); i += 20)
|
||||
var/turf/step = get_turf(get_step(src, direct))
|
||||
if(step)
|
||||
src.setLoc(step)
|
||||
setLoc(step)
|
||||
|
||||
cooldown = world.timeofday + 5
|
||||
if(acceleration)
|
||||
@@ -152,7 +154,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
C.client.images -= chunk.obscured
|
||||
C.remote_control = null
|
||||
C.unset_machine()
|
||||
src.Remove(C)
|
||||
Remove(C)
|
||||
playsound(remote_eye.origin, 'sound/machines/terminal_off.ogg', 25, 0)
|
||||
|
||||
/datum/action/innate/camera_jump
|
||||
@@ -168,7 +170,9 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
|
||||
var/list/L = list()
|
||||
|
||||
for (var/obj/machinery/camera/cam in cameranet.cameras)
|
||||
for (var/obj/machinery/camera/cam in GLOB.cameranet.cameras)
|
||||
if(origin.z_lock && cam.z != origin.z_lock)
|
||||
continue
|
||||
L.Add(cam)
|
||||
|
||||
camera_sort(L)
|
||||
@@ -176,10 +180,9 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
var/list/T = list()
|
||||
|
||||
for (var/obj/machinery/camera/netcam in L)
|
||||
var/list/tempnetwork = netcam.network&origin.networks
|
||||
var/list/tempnetwork = netcam.network & origin.networks
|
||||
if (tempnetwork.len)
|
||||
T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam
|
||||
|
||||
T["[netcam.c_tag][netcam.can_use() ? null : " (Deactivated)"]"] = netcam
|
||||
|
||||
playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0)
|
||||
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
//Keeps track of the time for the ID console. Having it as a global variable prevents people from dismantling/reassembling it to
|
||||
//increase the slots of many jobs.
|
||||
var/time_last_changed_position = 0
|
||||
GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
|
||||
/obj/machinery/computer/card
|
||||
name = "identification console"
|
||||
desc = "You can use this to manage jobs and ID access."
|
||||
icon_screen = "id"
|
||||
icon_keyboard = "id_key"
|
||||
req_one_access = list(access_heads, access_change_ids)
|
||||
req_one_access = list(GLOB.access_heads, GLOB.access_change_ids)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/card
|
||||
var/obj/item/weapon/card/id/scan = null
|
||||
var/obj/item/weapon/card/id/modify = null
|
||||
@@ -107,8 +107,8 @@ var/time_last_changed_position = 0
|
||||
/obj/machinery/computer/card/proc/can_open_job(datum/job/job)
|
||||
if(job)
|
||||
if(!job_blacklisted(job.title))
|
||||
if((job.total_positions <= player_list.len * (max_relative_positions / 100)))
|
||||
var/delta = (world.time / 10) - time_last_changed_position
|
||||
if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100)))
|
||||
var/delta = (world.time / 10) - GLOB.time_last_changed_position
|
||||
if((change_position_cooldown < delta) || (opened_positions[job.title] < 0))
|
||||
return 1
|
||||
return -2
|
||||
@@ -120,7 +120,7 @@ var/time_last_changed_position = 0
|
||||
if(job)
|
||||
if(!job_blacklisted(job.title))
|
||||
if(job.total_positions > job.current_positions)
|
||||
var/delta = (world.time / 10) - time_last_changed_position
|
||||
var/delta = (world.time / 10) - GLOB.time_last_changed_position
|
||||
if((change_position_cooldown < delta) || (opened_positions[job.title] > 0))
|
||||
return 1
|
||||
return -2
|
||||
@@ -133,11 +133,11 @@ var/time_last_changed_position = 0
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
if(!ticker)
|
||||
if(!SSticker)
|
||||
return
|
||||
if (mode == 1) // accessing crew manifest
|
||||
var/crew = ""
|
||||
for(var/datum/data/record/t in sortRecord(data_core.general))
|
||||
for(var/datum/data/record/t in sortRecord(GLOB.data_core.general))
|
||||
crew += t.fields["name"] + " - " + t.fields["rank"] + "<br>"
|
||||
dat = "<tt><b>Crew Manifest:</b><br>Please use security record computer to modify entries.<br><br>[crew]<a href='?src=\ref[src];choice=print'>Print</a><br><br><a href='?src=\ref[src];choice=mode;mode_target=0'>Access ID modification console.</a><br></tt>"
|
||||
|
||||
@@ -154,7 +154,7 @@ var/time_last_changed_position = 0
|
||||
dat += "<table>"
|
||||
dat += "<tr><td style='width:25%'><b>Job</b></td><td style='width:25%'><b>Slots</b></td><td style='width:25%'><b>Open job</b></td><td style='width:25%'><b>Close job</b><td style='width:25%'><b>Prioritize</b></td></td></tr>"
|
||||
var/ID
|
||||
if(scan && (access_change_ids in scan.access) && !target_dept)
|
||||
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
|
||||
ID = 1
|
||||
else
|
||||
ID = 0
|
||||
@@ -174,7 +174,7 @@ var/time_last_changed_position = 0
|
||||
if(-1)
|
||||
dat += "Denied"
|
||||
if(-2)
|
||||
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - time_last_changed_position), 1)
|
||||
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1)
|
||||
var/mins = round(time_to_wait / 60)
|
||||
var/seconds = time_to_wait - (60*mins)
|
||||
dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]"
|
||||
@@ -190,7 +190,7 @@ var/time_last_changed_position = 0
|
||||
if(-1)
|
||||
dat += "Denied"
|
||||
if(-2)
|
||||
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - time_last_changed_position), 1)
|
||||
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1)
|
||||
var/mins = round(time_to_wait / 60)
|
||||
var/seconds = time_to_wait - (60*mins)
|
||||
dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]"
|
||||
@@ -350,7 +350,7 @@ var/time_last_changed_position = 0
|
||||
switch(href_list["choice"])
|
||||
if ("modify")
|
||||
if (modify)
|
||||
data_core.manifest_modify(modify.registered_name, modify.assignment)
|
||||
GLOB.data_core.manifest_modify(modify.registered_name, modify.assignment)
|
||||
modify.update_label()
|
||||
modify.loc = loc
|
||||
modify.verb_pickup()
|
||||
@@ -388,7 +388,7 @@ var/time_last_changed_position = 0
|
||||
if (check_access(scan))
|
||||
region_access = list()
|
||||
head_subordinates = list()
|
||||
if(access_change_ids in scan.access)
|
||||
if(GLOB.access_change_ids in scan.access)
|
||||
if(target_dept)
|
||||
head_subordinates = get_all_jobs()
|
||||
region_access |= target_dept
|
||||
@@ -398,20 +398,20 @@ var/time_last_changed_position = 0
|
||||
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
|
||||
|
||||
else
|
||||
if((access_hop in scan.access) && ((target_dept==1) || !target_dept))
|
||||
if((GLOB.access_hop in scan.access) && ((target_dept==1) || !target_dept))
|
||||
region_access |= 1
|
||||
region_access |= 6
|
||||
get_subordinates("Head of Personnel")
|
||||
if((access_hos in scan.access) && ((target_dept==2) || !target_dept))
|
||||
if((GLOB.access_hos in scan.access) && ((target_dept==2) || !target_dept))
|
||||
region_access |= 2
|
||||
get_subordinates("Head of Security")
|
||||
if((access_cmo in scan.access) && ((target_dept==3) || !target_dept))
|
||||
if((GLOB.access_cmo in scan.access) && ((target_dept==3) || !target_dept))
|
||||
region_access |= 3
|
||||
get_subordinates("Chief Medical Officer")
|
||||
if((access_rd in scan.access) && ((target_dept==4) || !target_dept))
|
||||
if((GLOB.access_rd in scan.access) && ((target_dept==4) || !target_dept))
|
||||
region_access |= 4
|
||||
get_subordinates("Research Director")
|
||||
if((access_ce in scan.access) && ((target_dept==5) || !target_dept))
|
||||
if((GLOB.access_ce in scan.access) && ((target_dept==5) || !target_dept))
|
||||
region_access |= 5
|
||||
get_subordinates("Chief Engineer")
|
||||
if(region_access)
|
||||
@@ -488,7 +488,7 @@ var/time_last_changed_position = 0
|
||||
|
||||
if("make_job_available")
|
||||
// MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS
|
||||
if(scan && (access_change_ids in scan.access) && !target_dept)
|
||||
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
|
||||
var/edit_job_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(edit_job_target)
|
||||
if(!j)
|
||||
@@ -496,14 +496,14 @@ var/time_last_changed_position = 0
|
||||
if(can_open_job(j) != 1)
|
||||
return 0
|
||||
if(opened_positions[edit_job_target] >= 0)
|
||||
time_last_changed_position = world.time / 10
|
||||
GLOB.time_last_changed_position = world.time / 10
|
||||
j.total_positions++
|
||||
opened_positions[edit_job_target]++
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
|
||||
if("make_job_unavailable")
|
||||
// MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS
|
||||
if(scan && (access_change_ids in scan.access) && !target_dept)
|
||||
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
|
||||
var/edit_job_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(edit_job_target)
|
||||
if(!j)
|
||||
@@ -512,14 +512,14 @@ var/time_last_changed_position = 0
|
||||
return 0
|
||||
//Allow instant closing without cooldown if a position has been opened before
|
||||
if(opened_positions[edit_job_target] <= 0)
|
||||
time_last_changed_position = world.time / 10
|
||||
GLOB.time_last_changed_position = world.time / 10
|
||||
j.total_positions--
|
||||
opened_positions[edit_job_target]--
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
|
||||
if ("prioritize_job")
|
||||
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
|
||||
if(scan && (access_change_ids in scan.access) && !target_dept)
|
||||
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
|
||||
var/priority_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(priority_target)
|
||||
if(!j)
|
||||
@@ -541,7 +541,7 @@ var/time_last_changed_position = 0
|
||||
sleep(50)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
|
||||
var/t1 = "<B>Crew Manifest:</B><BR>"
|
||||
for(var/datum/data/record/t in sortRecord(data_core.general))
|
||||
for(var/datum/data/record/t in sortRecord(GLOB.data_core.general))
|
||||
t1 += t.fields["name"] + " - " + t.fields["rank"] + "<br>"
|
||||
P.info = t1
|
||||
P.name = "paper- 'Crew Manifest'"
|
||||
@@ -560,7 +560,7 @@ var/time_last_changed_position = 0
|
||||
/obj/machinery/computer/card/centcom
|
||||
name = "\improper Centcom identification console"
|
||||
circuit = /obj/item/weapon/circuitboard/computer/card/centcom
|
||||
req_access = list(access_cent_captain)
|
||||
req_access = list(GLOB.access_cent_captain)
|
||||
|
||||
/obj/machinery/computer/card/minor
|
||||
name = "department management console"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_screen = "dna"
|
||||
icon_keyboard = "med_key"
|
||||
circuit = /obj/item/weapon/circuitboard/computer/cloning
|
||||
req_access = list(access_heads) //Only used for record deletion right now.
|
||||
req_access = list(GLOB.access_heads) //Only used for record deletion right now.
|
||||
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
|
||||
var/list/pods //Linked cloning pods
|
||||
var/temp = "Inactive"
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
|
||||
// The communications computer
|
||||
/obj/machinery/computer/communications
|
||||
name = "communications console"
|
||||
desc = "This can be used for various important functions. Still under developement."
|
||||
icon_screen = "comm"
|
||||
icon_keyboard = "tech_key"
|
||||
req_access = list(access_heads)
|
||||
req_access = list(GLOB.access_heads)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/communications
|
||||
var/authenticated = 0
|
||||
var/auth_id = "Unknown" //Who is currently logged in?
|
||||
@@ -44,7 +42,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/communications/New()
|
||||
shuttle_caller_list += src
|
||||
GLOB.shuttle_caller_list += src
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/communications/process()
|
||||
@@ -103,19 +101,19 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
var/obj/item/device/pda/pda = I
|
||||
I = pda.id
|
||||
if (I && istype(I))
|
||||
if(access_captain in I.access)
|
||||
var/old_level = security_level
|
||||
if(GLOB.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
|
||||
set_security_level(tmp_alertlevel)
|
||||
if(security_level != old_level)
|
||||
if(GLOB.security_level != old_level)
|
||||
to_chat(usr, "<span class='notice'>Authorization confirmed. Modifying security level.</span>")
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
//Only notify the admins if an actual change happened
|
||||
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
|
||||
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
|
||||
switch(security_level)
|
||||
switch(GLOB.security_level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
feedback_inc("alert_comms_green",1)
|
||||
if(SEC_LEVEL_BLUE)
|
||||
@@ -168,7 +166,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
to_chat(usr, "You have not met the requirements for purchasing this shuttle.")
|
||||
else
|
||||
if(SSshuttle.points >= S.credit_cost)
|
||||
var/obj/machinery/shuttle_manipulator/M = locate() in machines
|
||||
var/obj/machinery/shuttle_manipulator/M = locate() in GLOB.machines
|
||||
if(M)
|
||||
SSshuttle.shuttle_purchased = TRUE
|
||||
M.unload_preview()
|
||||
@@ -359,16 +357,16 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
if("ai-securitylevel")
|
||||
src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
|
||||
if(!tmp_alertlevel) tmp_alertlevel = 0
|
||||
var/old_level = security_level
|
||||
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
|
||||
set_security_level(tmp_alertlevel)
|
||||
if(security_level != old_level)
|
||||
if(GLOB.security_level != old_level)
|
||||
//Only notify the admins if an actual change happened
|
||||
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
|
||||
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
|
||||
switch(security_level)
|
||||
switch(GLOB.security_level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
feedback_inc("alert_comms_green",1)
|
||||
if(SEC_LEVEL_BLUE)
|
||||
@@ -509,7 +507,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
if(STATE_ALERT_LEVEL)
|
||||
dat += "Current alert level: [get_security_level()]<BR>"
|
||||
if(security_level == SEC_LEVEL_DELTA)
|
||||
if(GLOB.security_level == SEC_LEVEL_DELTA)
|
||||
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
|
||||
else
|
||||
dat += "<A HREF='?src=\ref[src];operation=securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
|
||||
@@ -520,7 +518,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
dat += "<A HREF='?src=\ref[src];operation=swipeidseclevel'>Swipe ID</A> to confirm change.<BR>"
|
||||
if(STATE_TOGGLE_EMERGENCY)
|
||||
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
|
||||
if(emergency_access == 1)
|
||||
if(GLOB.emergency_access == 1)
|
||||
dat += "<b>Emergency Maintenance Access is currently <font color='red'>ENABLED</font></b>"
|
||||
dat += "<BR>Restore maintenance access restrictions? <BR>\[ <A HREF='?src=\ref[src];operation=disableemergency'>OK</A> | <A HREF='?src=\ref[src];operation=viewmessage'>Cancel</A> \]"
|
||||
else
|
||||
@@ -640,14 +638,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
|
||||
if(STATE_ALERT_LEVEL)
|
||||
dat += "Current alert level: [get_security_level()]<BR>"
|
||||
if(security_level == SEC_LEVEL_DELTA)
|
||||
if(GLOB.security_level == SEC_LEVEL_DELTA)
|
||||
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
|
||||
else
|
||||
dat += "<A HREF='?src=\ref[src];operation=ai-securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
|
||||
dat += "<A HREF='?src=\ref[src];operation=ai-securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
|
||||
|
||||
if(STATE_TOGGLE_EMERGENCY)
|
||||
if(emergency_access == 1)
|
||||
if(GLOB.emergency_access == 1)
|
||||
dat += "<b>Emergency Maintenance Access is currently <font color='red'>ENABLED</font></b>"
|
||||
dat += "<BR>Restore maintenance access restrictions? <BR>\[ <A HREF='?src=\ref[src];operation=ai-disableemergency'>OK</A> | <A HREF='?src=\ref[src];operation=ai-viewmessage'>Cancel</A> \]"
|
||||
else
|
||||
@@ -688,7 +686,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/Destroy()
|
||||
shuttle_caller_list -= src
|
||||
GLOB.shuttle_caller_list -= src
|
||||
SSshuttle.autoEvac()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -7,27 +7,22 @@
|
||||
idle_power_usage = 250
|
||||
active_power_usage = 500
|
||||
circuit = /obj/item/weapon/circuitboard/computer/crew
|
||||
var/monitor = null //For VV debugging purposes
|
||||
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/machinery/computer/crew/New()
|
||||
monitor = crewmonitor
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/crew/attack_ai(mob/user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
crewmonitor.show(user)
|
||||
GLOB.crewmonitor.show(user)
|
||||
|
||||
/obj/machinery/computer/crew/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
crewmonitor.show(user)
|
||||
GLOB.crewmonitor.show(user)
|
||||
|
||||
var/global/datum/crewmonitor/crewmonitor = new
|
||||
GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
|
||||
/datum/crewmonitor
|
||||
var/list/jobs
|
||||
@@ -151,7 +146,7 @@ var/global/datum/crewmonitor/crewmonitor = new
|
||||
var/pos_y
|
||||
var/life_status
|
||||
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
// Check if their z-level is correct and if they are wearing a uniform.
|
||||
// Accept H.z==0 as well in case the mob is inside an object.
|
||||
if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under))
|
||||
@@ -256,15 +251,15 @@ var/global/datum/crewmonitor/crewmonitor = new
|
||||
|
||||
. = ..()
|
||||
|
||||
if (old_z != src.z) crewmonitor.queueUpdate(old_z)
|
||||
crewmonitor.queueUpdate(src.z)
|
||||
if (old_z != src.z) GLOB.crewmonitor.queueUpdate(old_z)
|
||||
GLOB.crewmonitor.queueUpdate(src.z)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/datum/crewmonitor/proc/queueUpdate(z)
|
||||
addtimer(CALLBACK(crewmonitor, .proc/update, z), 5, TIMER_UNIQUE)
|
||||
addtimer(CALLBACK(src, .proc/update, z), 5, TIMER_UNIQUE)
|
||||
|
||||
/datum/crewmonitor/proc/sendResources(var/client/client)
|
||||
send_asset(client, "crewmonitor.js")
|
||||
send_asset(client, "crewmonitor.css")
|
||||
SSminimap.send(client)
|
||||
SSminimap.send(client)
|
||||
|
||||
@@ -401,12 +401,12 @@
|
||||
if(buffer_slot["SE"])
|
||||
I = new /obj/item/weapon/dnainjector/timed(loc)
|
||||
var/powers = 0
|
||||
for(var/datum/mutation/human/HM in good_mutations + bad_mutations + not_good_mutations)
|
||||
for(var/datum/mutation/human/HM in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations)
|
||||
if(HM.check_block_string(buffer_slot["SE"]))
|
||||
I.add_mutations.Add(HM)
|
||||
if(HM in good_mutations)
|
||||
if(HM in GLOB.good_mutations)
|
||||
powers += 1
|
||||
if(HM in bad_mutations + not_good_mutations)
|
||||
if(HM in GLOB.bad_mutations + GLOB.not_good_mutations)
|
||||
powers -= 1 //To prevent just unlocking everything to get all powers to a syringe for max tech
|
||||
else
|
||||
I.remove_mutations.Add(HM)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Used to send criminals to the Labor Camp"
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(access_armory)
|
||||
req_access = list(GLOB.access_armory)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/gulag_teleporter_console
|
||||
var/default_goal = 200
|
||||
var/obj/item/weapon/card/id/prisoner/id = null
|
||||
@@ -38,7 +38,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "gulag_console", name, 455, 440, master_ui, state)
|
||||
@@ -55,8 +55,8 @@
|
||||
prisoner_list["name"] = prisoner.real_name
|
||||
if(id)
|
||||
can_teleport = TRUE
|
||||
if(!isnull(data_core.general))
|
||||
for(var/r in data_core.security)
|
||||
if(!isnull(GLOB.data_core.general))
|
||||
for(var/r in GLOB.data_core.security)
|
||||
var/datum/data/record/R = r
|
||||
if(R.fields["name"] == prisoner_list["name"])
|
||||
temporary_record = R
|
||||
@@ -135,7 +135,7 @@
|
||||
/obj/machinery/computer/gulag_teleporter_computer/proc/findteleporter()
|
||||
var/obj/machinery/gulag_teleporter/teleporterf = null
|
||||
|
||||
for(dir in cardinal)
|
||||
for(dir in GLOB.cardinal)
|
||||
teleporterf = locate(/obj/machinery/gulag_teleporter, get_step(src, dir))
|
||||
if(teleporterf && teleporterf.is_operational())
|
||||
return teleporterf
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "This can be used to check medical records."
|
||||
icon_screen = "medcomp"
|
||||
icon_keyboard = "med_key"
|
||||
req_one_access = list(access_medical, access_forensics_lockers)
|
||||
req_one_access = list(GLOB.access_medical, GLOB.access_forensics_lockers)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/med_data
|
||||
var/obj/item/weapon/card/id/scan = null
|
||||
var/authenticated = null
|
||||
@@ -72,11 +72,11 @@
|
||||
</tr>"}
|
||||
|
||||
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
|
||||
if(!isnull(GLOB.data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order))
|
||||
var/blood_type = ""
|
||||
var/b_dna = ""
|
||||
for(var/datum/data/record/E in data_core.medical)
|
||||
for(var/datum/data/record/E in GLOB.data_core.medical)
|
||||
if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
|
||||
blood_type = E.fields["blood_type"]
|
||||
b_dna = E.fields["b_dna"]
|
||||
@@ -98,8 +98,8 @@
|
||||
dat += text("<td>[]</td>", R.fields["p_stat"])
|
||||
dat += text("<td>[]</td></tr>", R.fields["m_stat"])
|
||||
dat += "</table><hr width='75%' />"
|
||||
// if(data_core.general)
|
||||
// for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
// if(GLOB.data_core.general)
|
||||
// for(var/datum/data/record/R in sortRecord(GLOB.data_core.general))
|
||||
// dat += "<A href='?src=\ref[src];d_rec=[R.fields["id"]]'>[R.fields["id"]]: [R.fields["name"]]<BR>"
|
||||
// //Foreach goto(132)
|
||||
dat += text("<HR><A href='?src=\ref[];screen=1'>Back</A>", src)
|
||||
@@ -108,7 +108,7 @@
|
||||
if(4)
|
||||
|
||||
dat += "<table><tr><td><b><font size='4'>Medical Record</font></b></td></tr>"
|
||||
if(active1 in data_core.general)
|
||||
if(active1 in GLOB.data_core.general)
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
|
||||
user << browse_rsc(P1.img, "photo_front")
|
||||
@@ -130,7 +130,7 @@
|
||||
dat += "<tr><td>General Record Lost!</td></tr>"
|
||||
|
||||
dat += "<tr><td><br><b><font size='4'>Medical Data</font></b></td></tr>"
|
||||
if(active2 in data_core.medical)
|
||||
if(active2 in GLOB.data_core.medical)
|
||||
dat += "<tr><td>Blood Type:</td><td><A href='?src=\ref[src];field=blood_type'> [active2.fields["blood_type"]] </A></td></tr>"
|
||||
dat += "<tr><td>DNA:</td><td><A href='?src=\ref[src];field=b_dna'> [active2.fields["b_dna"]] </A></td></tr>"
|
||||
dat += "<tr><td><br>Minor Disabilities:</td><td><br><A href='?src=\ref[src];field=mi_dis'> [active2.fields["mi_dis"]] </A></td></tr>"
|
||||
@@ -172,7 +172,7 @@
|
||||
dat += "<a href='?src=\ref[src];screen=1'>Back</a>"
|
||||
dat += "<br><b>Medical Robots:</b>"
|
||||
var/bdat = null
|
||||
for(var/mob/living/simple_animal/bot/medbot/M in living_mob_list)
|
||||
for(var/mob/living/simple_animal/bot/medbot/M in GLOB.living_mob_list)
|
||||
if(M.z != src.z)
|
||||
continue //only find medibots on the same z-level as the computer
|
||||
var/turf/bl = get_turf(M)
|
||||
@@ -201,9 +201,9 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
if(!(active1 in data_core.general))
|
||||
if(!(active1 in GLOB.data_core.general))
|
||||
src.active1 = null
|
||||
if(!(active2 in data_core.medical))
|
||||
if(!(active2 in GLOB.data_core.medical))
|
||||
src.active2 = null
|
||||
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
|
||||
@@ -293,7 +293,7 @@
|
||||
|
||||
else if(href_list["del_all2"])
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", "records")
|
||||
data_core.medical.Cut()
|
||||
GLOB.data_core.medical.Cut()
|
||||
src.temp = "All records deleted."
|
||||
|
||||
else if(href_list["field"])
|
||||
@@ -464,9 +464,9 @@
|
||||
active2 = null
|
||||
|
||||
else if(href_list["d_rec"])
|
||||
active1 = find_record("id", href_list["d_rec"], data_core.general)
|
||||
active1 = find_record("id", href_list["d_rec"], GLOB.data_core.general)
|
||||
if(active1)
|
||||
active2 = find_record("id", href_list["d_rec"], data_core.medical)
|
||||
active2 = find_record("id", href_list["d_rec"], GLOB.data_core.medical)
|
||||
if(!active2)
|
||||
active1 = null
|
||||
screen = 4
|
||||
@@ -488,12 +488,12 @@
|
||||
R.fields["cdi"] = "None"
|
||||
R.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||
R.fields["notes"] = "No notes."
|
||||
data_core.medical += R
|
||||
GLOB.data_core.medical += R
|
||||
src.active2 = R
|
||||
src.screen = 4
|
||||
|
||||
else if(href_list["add_c"])
|
||||
if(!(active2 in data_core.medical))
|
||||
if(!(active2 in GLOB.data_core.medical))
|
||||
return
|
||||
var/a2 = src.active2
|
||||
var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null)
|
||||
@@ -502,7 +502,7 @@
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1)
|
||||
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1)
|
||||
|
||||
else if(href_list["del_c"])
|
||||
if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
||||
@@ -515,7 +515,7 @@
|
||||
src.active1 = null
|
||||
src.active2 = null
|
||||
t1 = lowertext(t1)
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
for(var/datum/data/record/R in GLOB.data_core.medical)
|
||||
if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
|
||||
src.active2 = R
|
||||
else
|
||||
@@ -523,7 +523,7 @@
|
||||
if(!( src.active2 ))
|
||||
src.temp = text("Could not locate record [].", sanitize(t1))
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.general)
|
||||
for(var/datum/data/record/E in GLOB.data_core.general)
|
||||
if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
|
||||
src.active1 = E
|
||||
else
|
||||
@@ -533,28 +533,28 @@
|
||||
else if(href_list["print_p"])
|
||||
if(!( src.printing ))
|
||||
src.printing = 1
|
||||
data_core.medicalPrintCount++
|
||||
GLOB.data_core.medicalPrintCount++
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
sleep(30)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
|
||||
P.info = "<CENTER><B>Medical Record - (MR-[data_core.medicalPrintCount])</B></CENTER><BR>"
|
||||
if(active1 in data_core.general)
|
||||
P.info = "<CENTER><B>Medical Record - (MR-[GLOB.data_core.medicalPrintCount])</B></CENTER><BR>"
|
||||
if(active1 in GLOB.data_core.general)
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"])
|
||||
if(config.mutant_races)
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
|
||||
else
|
||||
P.info += "<B>General Record Lost!</B><BR>"
|
||||
if(active2 in data_core.medical)
|
||||
if(active2 in GLOB.data_core.medical)
|
||||
P.info += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: []<BR>\nDNA: []<BR>\n<BR>\nMinor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nMajor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nAllergies: []<BR>\nDetails: []<BR>\n<BR>\nCurrent Diseases: [] (per disease info placed in log/comment section)<BR>\nDetails: []<BR>\n<BR>\nImportant Notes:<BR>\n\t[]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src.active2.fields["blood_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"])
|
||||
var/counter = 1
|
||||
while(src.active2.fields[text("com_[]", counter)])
|
||||
P.info += text("[]<BR>", src.active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
P.name = text("MR-[] '[]'", data_core.medicalPrintCount, src.active1.fields["name"])
|
||||
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, src.active1.fields["name"])
|
||||
else
|
||||
P.info += "<B>Medical Record Lost!</B><BR>"
|
||||
P.name = text("MR-[] '[]'", data_core.medicalPrintCount, "Record Lost")
|
||||
P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost")
|
||||
P.info += "</TT>"
|
||||
src.printing = null
|
||||
|
||||
@@ -564,7 +564,7 @@
|
||||
|
||||
/obj/machinery/computer/med_data/emp_act(severity)
|
||||
if(!(stat & (BROKEN|NOPOWER)))
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
for(var/datum/data/record/R in GLOB.data_core.medical)
|
||||
if(prob(10/severity))
|
||||
switch(rand(1,6))
|
||||
if(1)
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
..()
|
||||
//Is the server isn't linked to a server, and there's a server available, default it to the first one in the list.
|
||||
if(!linkedServer)
|
||||
if(message_servers && message_servers.len > 0)
|
||||
linkedServer = message_servers[1]
|
||||
if(GLOB.message_servers && GLOB.message_servers.len > 0)
|
||||
linkedServer = GLOB.message_servers[1]
|
||||
|
||||
/obj/machinery/computer/message_monitor/attack_hand(mob/living/user)
|
||||
if(..())
|
||||
@@ -269,11 +269,11 @@
|
||||
if(auth) linkedServer.active = !linkedServer.active
|
||||
//Find a server
|
||||
if (href_list["find"])
|
||||
if(message_servers && message_servers.len > 1)
|
||||
src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers
|
||||
if(GLOB.message_servers && GLOB.message_servers.len > 1)
|
||||
src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in GLOB.message_servers
|
||||
message = "<span class='alert'>NOTICE: Server selected.</span>"
|
||||
else if(message_servers && message_servers.len > 0)
|
||||
linkedServer = message_servers[1]
|
||||
else if(GLOB.message_servers && GLOB.message_servers.len > 0)
|
||||
linkedServer = GLOB.message_servers[1]
|
||||
message = "<span class='notice'>NOTICE: Only Single Server Detected - Server selected.</span>"
|
||||
else
|
||||
message = noserver
|
||||
@@ -376,7 +376,7 @@
|
||||
if("Recepient")
|
||||
//Get out list of viable PDAs
|
||||
var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas()
|
||||
if(PDAs && PDAs.len > 0)
|
||||
if(GLOB.PDAs && GLOB.PDAs.len > 0)
|
||||
customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs)
|
||||
else
|
||||
customrecepient = null
|
||||
@@ -458,8 +458,8 @@
|
||||
/obj/item/weapon/paper/monitorkey/New()
|
||||
..()
|
||||
spawn(10)
|
||||
if(message_servers)
|
||||
for(var/obj/machinery/message_server/server in message_servers)
|
||||
if(GLOB.message_servers)
|
||||
for(var/obj/machinery/message_server/server in GLOB.message_servers)
|
||||
if(!isnull(server))
|
||||
if(!isnull(server.decryptkey))
|
||||
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."
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
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)
|
||||
req_access = list(GLOB.access_syndicate)
|
||||
|
||||
/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user)
|
||||
if(!allowed(user))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Used to manage tracking implants placed inside criminals."
|
||||
icon_screen = "explosive"
|
||||
icon_keyboard = "security_key"
|
||||
req_access = list(access_brig)
|
||||
req_access = list(GLOB.access_brig)
|
||||
var/id = 0
|
||||
var/temp = null
|
||||
var/status = 0
|
||||
@@ -34,7 +34,7 @@
|
||||
dat += "<H3>Prisoner Implant Management</H3>"
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in tracked_chem_implants)
|
||||
for(var/obj/item/weapon/implant/chem/C in GLOB.tracked_chem_implants)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z))
|
||||
continue//Out of range
|
||||
@@ -47,7 +47,7 @@
|
||||
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font class='bad'>(10)</font>)</A><BR>"
|
||||
dat += "********************************<BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/tracking/T in tracked_implants)
|
||||
for(var/obj/item/weapon/implant/tracking/T in GLOB.tracked_implants)
|
||||
if(!isliving(T.imp_in))
|
||||
continue
|
||||
Tr = get_turf(T)
|
||||
@@ -111,16 +111,16 @@
|
||||
num = min(num,1000) //Cap the quota to the equivilent of 10 minutes.
|
||||
inserted_id.goal = num
|
||||
else if(href_list["inject1"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"]) in tracked_chem_implants
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(1)
|
||||
else if(href_list["inject5"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject5"]) in tracked_chem_implants
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(5)
|
||||
|
||||
else if(href_list["inject10"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject10"]) in tracked_chem_implants
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants
|
||||
if(I && istype(I))
|
||||
I.activate(10)
|
||||
|
||||
@@ -132,8 +132,9 @@
|
||||
|
||||
else if(href_list["warn"])
|
||||
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
|
||||
if(!warning) return
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"]) in tracked_chem_implants
|
||||
if(!warning)
|
||||
return
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants
|
||||
if(I && istype(I) && I.imp_in)
|
||||
var/mob/living/R = I.imp_in
|
||||
to_chat(R, "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
desc = "Used to remotely lockdown or detonate linked Cyborgs."
|
||||
icon_screen = "robot"
|
||||
icon_keyboard = "rd_key"
|
||||
req_access = list(access_robotics)
|
||||
req_access = list(GLOB.access_robotics)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/robotics
|
||||
var/temp = null
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
var/robots = 0
|
||||
for(var/mob/living/silicon/robot/R in mob_list)
|
||||
for(var/mob/living/silicon/robot/R in GLOB.mob_list)
|
||||
if(!can_control(user, R))
|
||||
continue
|
||||
robots++
|
||||
@@ -75,7 +75,7 @@
|
||||
dat += "<BR>"
|
||||
|
||||
var/drones = 0
|
||||
for(var/mob/living/simple_animal/drone/D in mob_list)
|
||||
for(var/mob/living/simple_animal/drone/D in GLOB.mob_list)
|
||||
if(D.hacked)
|
||||
continue
|
||||
drones++
|
||||
@@ -103,7 +103,7 @@
|
||||
|
||||
else if (href_list["killbot"])
|
||||
if(src.allowed(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in silicon_mobs
|
||||
var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs
|
||||
if(can_control(usr, R))
|
||||
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm" && can_control(usr, R) && !..())
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
else if (href_list["stopbot"])
|
||||
if(src.allowed(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in silicon_mobs
|
||||
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs
|
||||
if(can_control(usr, R))
|
||||
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm" && can_control(usr, R) && !..())
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
else if (href_list["magbot"])
|
||||
if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in silicon_mobs
|
||||
var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs
|
||||
if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R))
|
||||
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
|
||||
message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
|
||||
@@ -149,7 +149,7 @@
|
||||
|
||||
else if(href_list["convert"])
|
||||
if(issilicon(usr) && is_special_character(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["convert"]) in silicon_mobs
|
||||
var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs
|
||||
if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr)
|
||||
log_game("[key_name(usr)] converted [R.name] using robotic console!")
|
||||
message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/obj/machinery/computer/secure_data//TODO:SANITY
|
||||
name = "security records console"
|
||||
desc = "Used to view and edit personnel's security records"
|
||||
desc = "Used to view and edit personnel's security records."
|
||||
icon_screen = "security"
|
||||
icon_keyboard = "security_key"
|
||||
req_one_access = list(access_security, access_forensics_lockers)
|
||||
req_one_access = list(GLOB.access_security, GLOB.access_forensics_lockers)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/secure_data
|
||||
var/obj/item/weapon/card/id/scan = null
|
||||
var/authenticated = null
|
||||
@@ -122,10 +122,10 @@
|
||||
<th><A href='?src=\ref[src];choice=Sorting;sort=fingerprint'>Fingerprints</A></th>
|
||||
<th>Criminal Status</th>
|
||||
</tr>"}
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
|
||||
if(!isnull(GLOB.data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order))
|
||||
var/crimstat = ""
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
for(var/datum/data/record/E in GLOB.data_core.security)
|
||||
if((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"]))
|
||||
crimstat = E.fields["criminal"]
|
||||
var/background
|
||||
@@ -163,7 +163,7 @@
|
||||
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
|
||||
if(3)
|
||||
dat += "<font size='4'><b>Security Record</b></font><br>"
|
||||
if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
|
||||
if(istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1))
|
||||
if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
|
||||
user << browse_rsc(P1.img, "photo_front")
|
||||
@@ -189,7 +189,7 @@
|
||||
</td></tr></table></td></tr></table>"}
|
||||
else
|
||||
dat += "<br>General Record Lost!<br>"
|
||||
if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2)))
|
||||
dat += "<font size='4'><b>Security Data</b></font>"
|
||||
dat += "<br>Criminal Status: <A href='?src=\ref[src];choice=Edit Field;field=criminal'>[active2.fields["criminal"]]</A>"
|
||||
dat += "<br><br>Minor Crimes: <A href='?src=\ref[src];choice=Edit Field;field=mi_crim_add'>Add New</A>"
|
||||
@@ -262,9 +262,9 @@ What a mess.*/
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
if(!( data_core.general.Find(active1) ))
|
||||
if(!( GLOB.data_core.general.Find(active1) ))
|
||||
active1 = null
|
||||
if(!( data_core.security.Find(active2) ))
|
||||
if(!( GLOB.data_core.security.Find(active2) ))
|
||||
active2 = null
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
|
||||
usr.set_machine(src)
|
||||
@@ -341,10 +341,10 @@ What a mess.*/
|
||||
if("Browse Record")
|
||||
var/datum/data/record/R = locate(href_list["d_rec"])
|
||||
var/S = locate(href_list["d_rec"])
|
||||
if(!( data_core.general.Find(R) ))
|
||||
if(!( GLOB.data_core.general.Find(R) ))
|
||||
temp = "Record Not Found!"
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
for(var/datum/data/record/E in GLOB.data_core.security)
|
||||
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
S = E
|
||||
active1 = R
|
||||
@@ -355,19 +355,19 @@ What a mess.*/
|
||||
if("Print Record")
|
||||
if(!( printing ))
|
||||
printing = 1
|
||||
data_core.securityPrintCount++
|
||||
GLOB.data_core.securityPrintCount++
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
sleep(30)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
|
||||
P.info = "<CENTER><B>Security Record - (SR-[data_core.securityPrintCount])</B></CENTER><BR>"
|
||||
if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||
P.info = "<CENTER><B>Security Record - (SR-[GLOB.data_core.securityPrintCount])</B></CENTER><BR>"
|
||||
if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))
|
||||
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"])
|
||||
if(config.mutant_races)
|
||||
P.info += "\nSpecies: [active1.fields["species"]]<BR>"
|
||||
P.info += text("\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
|
||||
else
|
||||
P.info += "<B>General Record Lost!</B><BR>"
|
||||
if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||
if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2)))
|
||||
P.info += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: []", active2.fields["criminal"])
|
||||
|
||||
P.info += "<BR>\n<BR>\nMinor Crimes:<BR>\n"
|
||||
@@ -408,10 +408,10 @@ What a mess.*/
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
P.info += text("[]<BR>", active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
P.name = text("SR-[] '[]'", data_core.securityPrintCount, active1.fields["name"])
|
||||
P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, active1.fields["name"])
|
||||
else
|
||||
P.info += "<B>Security Record Lost!</B><BR>"
|
||||
P.name = text("SR-[] '[]'", data_core.securityPrintCount, "Record Lost")
|
||||
P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost")
|
||||
P.info += "</TT>"
|
||||
printing = null
|
||||
if("Print Poster")
|
||||
@@ -439,7 +439,7 @@ What a mess.*/
|
||||
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
|
||||
printing = 1
|
||||
sleep(30)
|
||||
if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))//make sure the record still exists.
|
||||
if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))//make sure the record still exists.
|
||||
var/obj/item/weapon/photo/photo = active1.fields["photo_front"]
|
||||
new /obj/item/weapon/poster/wanted(src.loc, photo.img, wanted_name, info)
|
||||
printing = 0
|
||||
@@ -453,9 +453,9 @@ What a mess.*/
|
||||
|
||||
if("Purge All Records")
|
||||
investigate_log("[usr.name] ([usr.key]) has purged all the security records.", "records")
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
for(var/datum/data/record/R in GLOB.data_core.security)
|
||||
qdel(R)
|
||||
data_core.security.Cut()
|
||||
GLOB.data_core.security.Cut()
|
||||
temp = "All Security records deleted."
|
||||
|
||||
if("Add Entry")
|
||||
@@ -468,7 +468,7 @@ What a mess.*/
|
||||
var/counter = 1
|
||||
while(active2.fields[text("com_[]", counter)])
|
||||
counter++
|
||||
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1)
|
||||
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1)
|
||||
|
||||
if("Delete Record (ALL)")
|
||||
if(active1)
|
||||
@@ -496,7 +496,7 @@ What a mess.*/
|
||||
R.fields["mi_crim"] = list()
|
||||
R.fields["ma_crim"] = list()
|
||||
R.fields["notes"] = "No notes."
|
||||
data_core.security += R
|
||||
GLOB.data_core.security += R
|
||||
active2 = R
|
||||
screen = 3
|
||||
|
||||
@@ -515,7 +515,7 @@ What a mess.*/
|
||||
G.fields["fingerprint"] = "?????"
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
data_core.general += G
|
||||
GLOB.data_core.general += G
|
||||
active1 = G
|
||||
|
||||
//Security Record
|
||||
@@ -527,7 +527,7 @@ What a mess.*/
|
||||
R.fields["mi_crim"] = list()
|
||||
R.fields["ma_crim"] = list()
|
||||
R.fields["notes"] = "No notes."
|
||||
data_core.security += R
|
||||
GLOB.data_core.security += R
|
||||
active2 = R
|
||||
|
||||
//Medical Record
|
||||
@@ -545,7 +545,7 @@ What a mess.*/
|
||||
M.fields["cdi"] = "None"
|
||||
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||
M.fields["notes"] = "No notes."
|
||||
data_core.medical += M
|
||||
GLOB.data_core.medical += M
|
||||
|
||||
|
||||
|
||||
@@ -593,7 +593,7 @@ What a mess.*/
|
||||
active1.fields["age"] = t1
|
||||
if("species")
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = input("Select a species", "Species Selection") as null|anything in roundstart_species
|
||||
var/t1 = input("Select a species", "Species Selection") as null|anything in GLOB.roundstart_species
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
active1.fields["species"] = t1
|
||||
@@ -623,28 +623,28 @@ What a mess.*/
|
||||
var/t2 = stripped_multiline_input(usr, "Please input minor crime details:", "Secure. records", "", null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
data_core.addMinorCrime(active1.fields["id"], crime)
|
||||
var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
GLOB.data_core.addMinorCrime(active1.fields["id"], crime)
|
||||
if("mi_crim_delete")
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(href_list["cdataid"])
|
||||
if(!canUseSecurityRecordsConsole(usr, "delete", null, a2))
|
||||
return
|
||||
data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
GLOB.data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
if("ma_crim_add")
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please input major crime names:", "Secure. records", "", null)
|
||||
var/t2 = stripped_multiline_input(usr, "Please input major crime details:", "Secure. records", "", null)
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, null, a2))
|
||||
return
|
||||
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
data_core.addMajorCrime(active1.fields["id"], crime)
|
||||
var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
|
||||
GLOB.data_core.addMajorCrime(active1.fields["id"], crime)
|
||||
if("ma_crim_delete")
|
||||
if(istype(active1, /datum/data/record))
|
||||
if(href_list["cdataid"])
|
||||
if(!canUseSecurityRecordsConsole(usr, "delete", null, a2))
|
||||
return
|
||||
data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
GLOB.data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"])
|
||||
if("notes")
|
||||
if(istype(active2, /datum/data/record))
|
||||
var/t1 = stripped_input(usr, "Please summarize notes:", "Secure. records", active2.fields["notes"], null)
|
||||
@@ -697,7 +697,7 @@ What a mess.*/
|
||||
if("released")
|
||||
active2.fields["criminal"] = "Discharged"
|
||||
investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [usr.name] ([usr.key]).", "records")
|
||||
for(var/mob/living/carbon/human/H in mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system
|
||||
H.sec_hud_set_security_status()
|
||||
if("Delete Record (Security) Execute")
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", "records")
|
||||
@@ -708,7 +708,7 @@ What a mess.*/
|
||||
if("Delete Record (ALL) Execute")
|
||||
if(active1)
|
||||
investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records")
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
for(var/datum/data/record/R in GLOB.data_core.medical)
|
||||
if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
|
||||
qdel(R)
|
||||
break
|
||||
@@ -742,14 +742,14 @@ What a mess.*/
|
||||
..(severity)
|
||||
return
|
||||
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
for(var/datum/data/record/R in GLOB.data_core.security)
|
||||
if(prob(10/severity))
|
||||
switch(rand(1,8))
|
||||
if(1)
|
||||
if(prob(10))
|
||||
R.fields["name"] = "[pick(lizard_name(MALE),lizard_name(FEMALE))]"
|
||||
else
|
||||
R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]"
|
||||
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
|
||||
if(2)
|
||||
R.fields["sex"] = pick("Male", "Female")
|
||||
if(3)
|
||||
@@ -761,9 +761,9 @@ What a mess.*/
|
||||
if(6)
|
||||
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
|
||||
if(7)
|
||||
R.fields["species"] = pick(roundstart_species)
|
||||
R.fields["species"] = pick(GLOB.roundstart_species)
|
||||
if(8)
|
||||
var/datum/data/record/G = pick(data_core.general)
|
||||
var/datum/data/record/G = pick(GLOB.data_core.general)
|
||||
R.fields["photo_front"] = G.fields["photo_front"]
|
||||
R.fields["photo_side"] = G.fields["photo_side"]
|
||||
continue
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
|
||||
/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "station_alert", name, 300, 500, master_ui, state)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define NUKESCALINGMODIFIER 1
|
||||
|
||||
var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner")
|
||||
GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner"))
|
||||
|
||||
/obj/machinery/computer/telecrystals
|
||||
name = "\improper Telecrystal assignment station"
|
||||
@@ -21,16 +21,13 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
|
||||
var/obj/item/uplinkholder = null
|
||||
var/obj/machinery/computer/telecrystals/boss/linkedboss = null
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/New()
|
||||
/obj/machinery/computer/telecrystals/uplinker/Initialize()
|
||||
..()
|
||||
|
||||
var/ID
|
||||
if(possible_uplinker_IDs.len)
|
||||
ID = pick(possible_uplinker_IDs)
|
||||
possible_uplinker_IDs -= ID
|
||||
name = "[name] [ID]"
|
||||
else
|
||||
name = "[name] [rand(1,999)]"
|
||||
var/ID = pick_n_take(GLOB.possible_uplinker_IDs)
|
||||
if(!ID)
|
||||
ID = rand(1,999)
|
||||
name = "[name] [ID]"
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params)
|
||||
if(uplinkholder)
|
||||
@@ -147,8 +144,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population.
|
||||
..()
|
||||
var/danger
|
||||
danger = joined_player_list.len - ticker.mode.syndicates.len
|
||||
var/danger = GLOB.joined_player_list.len - SSticker.mode.syndicates.len
|
||||
danger = Ceiling(danger, 10)
|
||||
scaleTC(danger)
|
||||
|
||||
|
||||
@@ -37,8 +37,10 @@
|
||||
#define AIRLOCK_DAMAGE_DEFLECTION_N 20 // Normal airlock damage deflection
|
||||
#define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection
|
||||
|
||||
#define NOT_ELECTRIFIED 0
|
||||
#define ELECTRIFIED_PERMANENT -1
|
||||
|
||||
|
||||
var/list/airlock_overlays = list()
|
||||
|
||||
/obj/machinery/door/airlock
|
||||
name = "airlock"
|
||||
@@ -90,13 +92,16 @@ var/list/airlock_overlays = list()
|
||||
hud_possible = list(DIAG_AIRLOCK_HUD)
|
||||
|
||||
var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close
|
||||
var/prying_so_hard = FALSE
|
||||
|
||||
var/static/list/airlock_overlays = list()
|
||||
|
||||
/obj/machinery/door/airlock/Initialize()
|
||||
..()
|
||||
wires = new /datum/wires/airlock(src)
|
||||
if(src.closeOtherId != null)
|
||||
spawn (5)
|
||||
for (var/obj/machinery/door/airlock/A in airlocks)
|
||||
for (var/obj/machinery/door/airlock/A in GLOB.airlocks)
|
||||
if(A.closeOtherId == src.closeOtherId && A != src)
|
||||
src.closeOther = A
|
||||
break
|
||||
@@ -111,7 +116,7 @@ var/list/airlock_overlays = list()
|
||||
if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL)
|
||||
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R
|
||||
prepare_huds()
|
||||
var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC]
|
||||
var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC]
|
||||
diag_hud.add_to_hud(src)
|
||||
diag_hud_set_electrified()
|
||||
|
||||
@@ -208,7 +213,7 @@ var/list/airlock_overlays = list()
|
||||
cyclelinkedairlock.cyclelinkedairlock = null
|
||||
cyclelinkedairlock = null
|
||||
if(id_tag)
|
||||
for(var/obj/machinery/doorButtons/D in machines)
|
||||
for(var/obj/machinery/doorButtons/D in GLOB.machines)
|
||||
D.removeMe(src)
|
||||
return ..()
|
||||
|
||||
@@ -264,7 +269,7 @@ var/list/airlock_overlays = list()
|
||||
user.Weaken(3)
|
||||
|
||||
/obj/machinery/door/airlock/proc/isElectrified()
|
||||
if(src.secondsElectrified != 0)
|
||||
if(src.secondsElectrified != NOT_ELECTRIFIED)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -487,6 +492,9 @@ var/list/airlock_overlays = list()
|
||||
add_overlay(damag_overlay)
|
||||
|
||||
/proc/get_airlock_overlay(icon_state, icon_file)
|
||||
var/obj/machinery/door/airlock/A
|
||||
pass(A) //suppress unused warning
|
||||
var/list/airlock_overlays = A.airlock_overlays
|
||||
var/iconkey = "[icon_state][icon_file]"
|
||||
if(airlock_overlays[iconkey])
|
||||
return airlock_overlays[iconkey]
|
||||
@@ -617,10 +625,10 @@ var/list/airlock_overlays = list()
|
||||
|
||||
if(wires.is_cut(WIRE_SHOCK))
|
||||
t1 += text("Electrification wire is cut.<br>\n")
|
||||
if(src.secondsElectrified==-1)
|
||||
if(secondsElectrified==ELECTRIFIED_PERMANENT)
|
||||
t1 += text("Door is electrified indefinitely. <A href='?src=\ref[];aiDisable=5'>Un-electrify it?</a><br>\n", src)
|
||||
else if(src.secondsElectrified>0)
|
||||
t1 += text("Door is electrified temporarily ([] seconds). <A href='?src=\ref[];aiDisable=5'>Un-electrify it?</a><br>\n", src.secondsElectrified, src)
|
||||
else if(secondsElectrified>NOT_ELECTRIFIED)
|
||||
t1 += text("Door is electrified temporarily ([] seconds). <A href='?src=\ref[];aiDisable=5'>Un-electrify it?</a><br>\n", secondsElectrified, src)
|
||||
else
|
||||
t1 += text("Door is not electrified. <A href='?src=\ref[];aiEnable=5'>Electrify it for 30 seconds?</a> Or, <A href='?src=\ref[];aiEnable=6'>Electrify it indefinitely until someone cancels the electrification?</a><br>\n", src, src)
|
||||
|
||||
@@ -792,9 +800,7 @@ var/list/airlock_overlays = list()
|
||||
//un-electrify door
|
||||
if(wires.is_cut(WIRE_SHOCK))
|
||||
to_chat(usr, text("Can't un-electrify the airlock - The electrification wire is cut."))
|
||||
else if(secondsElectrified==-1)
|
||||
set_electrified(0)
|
||||
else if(secondsElectrified>0)
|
||||
else if(isElectrified())
|
||||
set_electrified(0)
|
||||
|
||||
if(8)
|
||||
@@ -871,33 +877,33 @@ var/list/airlock_overlays = list()
|
||||
//electrify door for 30 seconds
|
||||
if(wires.is_cut(WIRE_SHOCK))
|
||||
to_chat(usr, text("The electrification wire has been cut.<br>\n"))
|
||||
else if(src.secondsElectrified==-1)
|
||||
else if(secondsElectrified==ELECTRIFIED_PERMANENT)
|
||||
to_chat(usr, text("The door is already indefinitely electrified. You'd have to un-electrify it before you can re-electrify it with a non-forever duration.<br>\n"))
|
||||
else if(src.secondsElectrified!=0)
|
||||
else if(isElectrified())
|
||||
to_chat(usr, text("The door is already electrified. You can't re-electrify it while it's already electrified.<br>\n"))
|
||||
else
|
||||
shockedby += "\[[time_stamp()]\][usr](ckey:[usr.ckey])"
|
||||
add_logs(usr, src, "electrified")
|
||||
set_electrified(30)
|
||||
spawn(10)
|
||||
while (src.secondsElectrified>0)
|
||||
src.secondsElectrified-=1
|
||||
if(src.secondsElectrified<0)
|
||||
set_electrified(0)
|
||||
src.updateUsrDialog()
|
||||
while (secondsElectrified > 0)
|
||||
secondsElectrified--
|
||||
if(secondsElectrified <= 0)
|
||||
set_electrified(NOT_ELECTRIFIED)
|
||||
updateUsrDialog()
|
||||
sleep(10)
|
||||
if(6)
|
||||
//electrify door indefinitely
|
||||
if(wires.is_cut(WIRE_SHOCK))
|
||||
to_chat(usr, text("The electrification wire has been cut.<br>\n"))
|
||||
else if(src.secondsElectrified==-1)
|
||||
else if(secondsElectrified==ELECTRIFIED_PERMANENT)
|
||||
to_chat(usr, text("The door is already indefinitely electrified.<br>\n"))
|
||||
else if(src.secondsElectrified!=0)
|
||||
else if(isElectrified())
|
||||
to_chat(usr, text("The door is already electrified. You can't re-electrify it while it's already electrified.<br>\n"))
|
||||
else
|
||||
shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")
|
||||
add_logs(usr, src, "electrified")
|
||||
set_electrified(-1)
|
||||
set_electrified(ELECTRIFIED_PERMANENT)
|
||||
|
||||
if (8) // Not in order >.>
|
||||
// Safeties! Maybe we do need some stinking safeties!
|
||||
@@ -1221,10 +1227,13 @@ var/list/airlock_overlays = list()
|
||||
return
|
||||
|
||||
var/time_to_open = 5
|
||||
if(hasPower())
|
||||
if(hasPower() && !prying_so_hard)
|
||||
time_to_open = 50
|
||||
playsound(src, 'sound/machines/airlock_alien_prying.ogg',100,1) //is it aliens or just the CE being a dick?
|
||||
if(do_after(user, time_to_open,target = src))
|
||||
prying_so_hard = TRUE
|
||||
var/result = do_after(user, time_to_open,target = src)
|
||||
prying_so_hard = FALSE
|
||||
if(result)
|
||||
open(2)
|
||||
if(density && !open(2))
|
||||
to_chat(user, "<span class='warning'>Despite your attempts, the [src] refuses to open.</span>")
|
||||
@@ -1274,7 +1283,7 @@ var/list/airlock_overlays = list()
|
||||
|
||||
if(!density)
|
||||
return 1
|
||||
if(!ticker || !ticker.mode)
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return 0
|
||||
operating = 1
|
||||
update_icon(AIRLOCK_OPENING, 1)
|
||||
@@ -1465,7 +1474,7 @@ var/list/airlock_overlays = list()
|
||||
safe = FALSE //DOOR CRUSH
|
||||
close()
|
||||
bolt() //Bolt it!
|
||||
set_electrified(-1) //Shock it!
|
||||
set_electrified(ELECTRIFIED_PERMANENT) //Shock it!
|
||||
if(origin)
|
||||
shockedby += "\[[time_stamp()]\][origin](ckey:[origin.ckey])"
|
||||
|
||||
@@ -1474,7 +1483,7 @@ var/list/airlock_overlays = list()
|
||||
// Must be powered and have working AI wire.
|
||||
if(canAIControl(src) && !stat)
|
||||
unbolt()
|
||||
set_electrified(0)
|
||||
set_electrified(NOT_ELECTRIFIED)
|
||||
open()
|
||||
safe = TRUE
|
||||
|
||||
@@ -1546,3 +1555,26 @@ var/list/airlock_overlays = list()
|
||||
qdel(src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
#undef AIRLOCK_CLOSED
|
||||
#undef AIRLOCK_CLOSING
|
||||
#undef AIRLOCK_OPEN
|
||||
#undef AIRLOCK_OPENING
|
||||
#undef AIRLOCK_DENY
|
||||
#undef AIRLOCK_EMAG
|
||||
|
||||
#undef AIRLOCK_SECURITY_NONE
|
||||
#undef AIRLOCK_SECURITY_METAL
|
||||
#undef AIRLOCK_SECURITY_PLASTEEL_I_S
|
||||
#undef AIRLOCK_SECURITY_PLASTEEL_I
|
||||
#undef AIRLOCK_SECURITY_PLASTEEL_O_S
|
||||
#undef AIRLOCK_SECURITY_PLASTEEL_O
|
||||
#undef AIRLOCK_SECURITY_PLASTEEL
|
||||
|
||||
#undef AIRLOCK_INTEGRITY_N
|
||||
#undef AIRLOCK_INTEGRITY_MULTIPLIER
|
||||
#undef AIRLOCK_DAMAGE_DEFLECTION_N
|
||||
#undef AIRLOCK_DAMAGE_DEFLECTION_R
|
||||
|
||||
#undef NOT_ELECTRIFIED
|
||||
#undef ELECTRIFIED_PERMANENT
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj/item/weapon/electronics/airlock
|
||||
name = "airlock electronics"
|
||||
req_access = list(access_maint_tunnels)
|
||||
req_access = list(GLOB.access_maint_tunnels)
|
||||
|
||||
var/list/accesses = list()
|
||||
var/one_access = 0
|
||||
|
||||
/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = hands_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/machinery/door/airlock/alarmlock/Initialize()
|
||||
..()
|
||||
SSradio.remove_object(src, air_frequency)
|
||||
air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM)
|
||||
air_connection = SSradio.add_object(src, air_frequency, GLOB.RADIO_TO_AIRALARM)
|
||||
open()
|
||||
|
||||
/obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_state = "frame"
|
||||
desc = "A remote control for a door."
|
||||
req_access = list(access_security)
|
||||
req_access = list(GLOB.access_security)
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/id = null // id of linked machinery/lockers
|
||||
@@ -112,8 +112,8 @@
|
||||
return 0
|
||||
|
||||
if(!forced)
|
||||
Radio.set_frequency(SEC_FREQ)
|
||||
Radio.talk_into(src, "Timer has expired. Releasing prisoner.", SEC_FREQ)
|
||||
Radio.set_frequency(GLOB.SEC_FREQ)
|
||||
Radio.talk_into(src, "Timer has expired. Releasing prisoner.", GLOB.SEC_FREQ, get_default_language())
|
||||
|
||||
timing = FALSE
|
||||
activation_time = null
|
||||
@@ -147,7 +147,7 @@
|
||||
timer_duration = new_time
|
||||
|
||||
/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "brig_timer", name, 300, 200, master_ui, state)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
layer = OPEN_DOOR_LAYER //Under all objects if opened. 2.7 due to tables being at 2.6
|
||||
update_freelook_sight()
|
||||
air_update_turf(1)
|
||||
airlocks += src
|
||||
GLOB.airlocks += src
|
||||
spark_system = new /datum/effect_system/spark_spread
|
||||
spark_system.set_up(2, 1, src)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
density = 0
|
||||
air_update_turf(1)
|
||||
update_freelook_sight()
|
||||
airlocks -= src
|
||||
GLOB.airlocks -= src
|
||||
if(spark_system)
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
@@ -229,7 +229,7 @@
|
||||
return 1
|
||||
if(operating)
|
||||
return
|
||||
if(!ticker || !ticker.mode)
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return 0
|
||||
operating = 1
|
||||
do_animate("opening")
|
||||
@@ -314,8 +314,8 @@
|
||||
return !(stat & NOPOWER)
|
||||
|
||||
/obj/machinery/door/proc/update_freelook_sight()
|
||||
if(!glass && cameranet)
|
||||
cameranet.updateVisibility(src, 0)
|
||||
if(!glass && GLOB.cameranet)
|
||||
GLOB.cameranet.updateVisibility(src, 0)
|
||||
|
||||
/obj/machinery/door/BlockSuperconductivity() // All non-glass airlocks block heat, this is intended.
|
||||
if(opacity || heat_proof)
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
#define CONSTRUCTION_GUTTED 3 //Wires are removed, circuit ready to remove
|
||||
#define CONSTRUCTION_NOCIRCUIT 4 //Circuit board removed, can safely weld apart
|
||||
|
||||
/var/const/OPEN = 1
|
||||
/var/const/CLOSED = 2
|
||||
|
||||
/obj/machinery/door/firedoor
|
||||
name = "firelock"
|
||||
desc = "Apply crowbar."
|
||||
@@ -183,10 +180,10 @@
|
||||
if(operating || stat & NOPOWER || !nextstate)
|
||||
return
|
||||
switch(nextstate)
|
||||
if(OPEN)
|
||||
if(FIREDOOR_OPEN)
|
||||
nextstate = null
|
||||
open()
|
||||
if(CLOSED)
|
||||
if(FIREDOOR_CLOSED)
|
||||
nextstate = null
|
||||
close()
|
||||
|
||||
@@ -422,4 +419,4 @@
|
||||
|
||||
/obj/structure/firelock_frame/heavy
|
||||
name = "heavy firelock frame"
|
||||
reinforced = 1
|
||||
reinforced = 1
|
||||
@@ -70,7 +70,7 @@
|
||||
else
|
||||
do_animate("deny")
|
||||
return
|
||||
if (!( ticker ))
|
||||
if (!( SSticker ))
|
||||
return
|
||||
var/mob/M = AM
|
||||
if(M.restrained() || ((isdrone(M) || iscyborg(M)) && M.stat))
|
||||
@@ -129,7 +129,7 @@
|
||||
/obj/machinery/door/window/open(forced=0)
|
||||
if (src.operating == 1) //doors can still open when emag-disabled
|
||||
return 0
|
||||
if(!ticker || !ticker.mode)
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return 0
|
||||
if(!forced)
|
||||
if(!hasPower())
|
||||
@@ -344,7 +344,7 @@
|
||||
open()
|
||||
|
||||
/obj/machinery/door/window/clockwork/ratvar_act()
|
||||
if(ratvar_awakens)
|
||||
if(GLOB.ratvar_awakens)
|
||||
obj_integrity = max_integrity
|
||||
|
||||
/obj/machinery/door/window/clockwork/hasPower()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var/list/doppler_arrays = list()
|
||||
GLOBAL_LIST_EMPTY(doppler_arrays)
|
||||
|
||||
/obj/machinery/doppler_array
|
||||
name = "tachyon-doppler array"
|
||||
@@ -13,10 +13,10 @@ var/list/doppler_arrays = list()
|
||||
|
||||
/obj/machinery/doppler_array/New()
|
||||
..()
|
||||
doppler_arrays += src
|
||||
GLOB.doppler_arrays += src
|
||||
|
||||
/obj/machinery/doppler_array/Destroy()
|
||||
doppler_arrays -= src
|
||||
GLOB.doppler_arrays -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/doppler_array/process()
|
||||
|
||||
@@ -47,11 +47,11 @@
|
||||
var/busy
|
||||
|
||||
/obj/machinery/doorButtons/access_button/findObjsByTag()
|
||||
for(var/obj/machinery/doorButtons/airlock_controller/A in machines)
|
||||
for(var/obj/machinery/doorButtons/airlock_controller/A in GLOB.machines)
|
||||
if(A.idSelf == idSelf)
|
||||
controller = A
|
||||
break
|
||||
for(var/obj/machinery/door/airlock/I in machines)
|
||||
for(var/obj/machinery/door/airlock/I in GLOB.machines)
|
||||
if(I.id_tag == idDoor)
|
||||
door = I
|
||||
break
|
||||
@@ -120,7 +120,7 @@
|
||||
exteriorAirlock = null
|
||||
|
||||
/obj/machinery/doorButtons/airlock_controller/Destroy()
|
||||
for(var/obj/machinery/doorButtons/access_button/A in machines)
|
||||
for(var/obj/machinery/doorButtons/access_button/A in GLOB.machines)
|
||||
if(A.controller == src)
|
||||
A.controller = null
|
||||
return ..()
|
||||
@@ -241,7 +241,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/doorButtons/airlock_controller/findObjsByTag()
|
||||
for(var/obj/machinery/door/airlock/A in machines)
|
||||
for(var/obj/machinery/door/airlock/A in GLOB.machines)
|
||||
if(A.id_tag == idInterior)
|
||||
interiorAirlock = A
|
||||
else if(A.id_tag == idExterior)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
return
|
||||
|
||||
if(src.z == ZLEVEL_STATION)
|
||||
add_overlay("overlay_[security_level]")
|
||||
add_overlay("overlay_[GLOB.security_level]")
|
||||
else
|
||||
//var/green = SEC_LEVEL_GREEN
|
||||
add_overlay("overlay_[SEC_LEVEL_GREEN]")
|
||||
@@ -111,7 +111,7 @@
|
||||
addtimer(CALLBACK(src, .proc/reset), time)
|
||||
|
||||
/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
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
|
||||
req_access = list(GLOB.access_security) //reqaccess to access all stored items
|
||||
density = 0
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
@@ -43,7 +43,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
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)
|
||||
ui = new(user, src, ui_key, "gulag_item_reclaimer", name, 455, 440, master_ui, state)
|
||||
|
||||
@@ -29,9 +29,7 @@ Possible to do for anyone motivated enough:
|
||||
#define RANGE_BASED 4
|
||||
#define AREA_BASED 6
|
||||
|
||||
var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
|
||||
var/list/holopads = list()
|
||||
#define HOLOPAD_MODE RANGE_BASED
|
||||
|
||||
/obj/machinery/holopad
|
||||
name = "\improper AI holopad"
|
||||
@@ -39,8 +37,6 @@ var/list/holopads = list()
|
||||
icon_state = "holopad0"
|
||||
layer = LOW_OBJ_LAYER
|
||||
flags = HEAR
|
||||
languages_spoken = ROBOT | HUMAN
|
||||
languages_understood = ROBOT | HUMAN
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
@@ -52,6 +48,7 @@ var/list/holopads = list()
|
||||
var/last_request = 0 //to prevent request spam. ~Carn
|
||||
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.
|
||||
var/temp = ""
|
||||
var/static/list/holopads = list()
|
||||
|
||||
/obj/machinery/holopad/New()
|
||||
..()
|
||||
@@ -123,7 +120,7 @@ var/list/holopads = list()
|
||||
temp = "You requested an AI's presence.<BR>"
|
||||
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
var/area/area = get_area(src)
|
||||
for(var/mob/living/silicon/ai/AI in living_mob_list)
|
||||
for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list)
|
||||
if(!AI.client)
|
||||
continue
|
||||
to_chat(AI, "<span class='info'>Your presence is requested at <a href='?src=\ref[AI];jumptoholopad=\ref[src]'>\the [area]</a>.</span>")
|
||||
@@ -189,11 +186,11 @@ var/list/holopads = list()
|
||||
|
||||
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
|
||||
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
/obj/machinery/holopad/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans)
|
||||
/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios.
|
||||
for(var/mob/living/silicon/ai/master in masters)
|
||||
if(masters[master] && speaker != master)
|
||||
master.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans)
|
||||
master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode)
|
||||
|
||||
/obj/machinery/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
|
||||
var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location.
|
||||
|
||||
@@ -7,11 +7,14 @@
|
||||
var/mob/living/carbon/attached = null
|
||||
var/mode = 1 // 1 is injecting, 0 is taking blood.
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/list/drip_containers = list(/obj/item/weapon/reagent_containers/blood,
|
||||
/obj/item/weapon/reagent_containers/food,
|
||||
/obj/item/weapon/reagent_containers/glass)
|
||||
|
||||
|
||||
/obj/machinery/iv_drip/New()
|
||||
/obj/machinery/iv_drip/Initialize()
|
||||
..()
|
||||
update_icon()
|
||||
drip_containers = typecacheof(drip_containers)
|
||||
|
||||
/obj/machinery/iv_drip/update_icon()
|
||||
if(attached)
|
||||
@@ -73,14 +76,14 @@
|
||||
if(beaker)
|
||||
usr.visible_message("<span class='warning'>[usr] attaches \the [src] to \the [target].</span>", "<span class='notice'>You attach \the [src] to \the [target].</span>")
|
||||
attached = target
|
||||
START_PROCESSING(SSmachine, src)
|
||||
START_PROCESSING(SSmachines, src)
|
||||
update_icon()
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There's nothing attached to the IV drip!</span>")
|
||||
|
||||
|
||||
/obj/machinery/iv_drip/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if (istype(W, /obj/item/weapon/reagent_containers))
|
||||
if (is_type_in_typecache(W, drip_containers))
|
||||
if(!isnull(beaker))
|
||||
to_chat(user, "<span class='warning'>There is already a reagent container loaded!</span>")
|
||||
return
|
||||
|
||||
@@ -128,17 +128,17 @@ Class Procs:
|
||||
if (!armor)
|
||||
armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70)
|
||||
..()
|
||||
machines += src
|
||||
GLOB.machines += src
|
||||
if(!speed_process)
|
||||
START_PROCESSING(SSmachine, src)
|
||||
START_PROCESSING(SSmachines, src)
|
||||
else
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
power_change()
|
||||
|
||||
/obj/machinery/Destroy()
|
||||
machines.Remove(src)
|
||||
GLOB.machines.Remove(src)
|
||||
if(!speed_process)
|
||||
STOP_PROCESSING(SSmachine, src)
|
||||
STOP_PROCESSING(SSmachines, src)
|
||||
else
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
dropContents()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
spawn(10) // must wait for map loading to finish
|
||||
if(SSradio)
|
||||
SSradio.add_object(src, freq, RADIO_MAGNETS)
|
||||
SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS)
|
||||
|
||||
spawn()
|
||||
magnetic_process()
|
||||
@@ -233,14 +233,14 @@
|
||||
..()
|
||||
|
||||
if(autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in machines)
|
||||
for(var/obj/machinery/magnetic_module/M in GLOB.machines)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
|
||||
|
||||
spawn(45) // must wait for map loading to finish
|
||||
if(SSradio)
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS)
|
||||
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS)
|
||||
|
||||
|
||||
if(path) // check for default path
|
||||
@@ -255,7 +255,7 @@
|
||||
|
||||
/obj/machinery/magnetic_controller/process()
|
||||
if(magnets.len == 0 && autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in machines)
|
||||
for(var/obj/machinery/magnetic_module/M in GLOB.machines)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
// Broadcast the signal
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
|
||||
radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS)
|
||||
|
||||
spawn(1)
|
||||
updateUsrDialog() // pretty sure this increases responsiveness
|
||||
@@ -390,7 +390,7 @@
|
||||
|
||||
// Broadcast the signal
|
||||
spawn()
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
|
||||
radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS)
|
||||
|
||||
if(speed == 10)
|
||||
sleep(1)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/list/codes // assoc. list of transponder codes
|
||||
var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value"
|
||||
|
||||
req_access = list(access_engine, access_robotics)
|
||||
req_access = list(GLOB.access_engine, GLOB.access_robotics)
|
||||
|
||||
/obj/machinery/navbeacon/New()
|
||||
..()
|
||||
@@ -31,16 +31,16 @@
|
||||
var/turf/T = loc
|
||||
hide(T.intact)
|
||||
if(codes["patrol"])
|
||||
if(!navbeacons["[z]"])
|
||||
navbeacons["[z]"] = list()
|
||||
navbeacons["[z]"] += src //Register with the patrol list!
|
||||
if(!GLOB.navbeacons["[z]"])
|
||||
GLOB.navbeacons["[z]"] = list()
|
||||
GLOB.navbeacons["[z]"] += src //Register with the patrol list!
|
||||
if(codes["delivery"])
|
||||
deliverybeacons += src
|
||||
deliverybeacontags += location
|
||||
GLOB.deliverybeacons += src
|
||||
GLOB.deliverybeacontags += location
|
||||
|
||||
/obj/machinery/navbeacon/Destroy()
|
||||
navbeacons["[z]"] -= src //Remove from beacon list, if in one.
|
||||
deliverybeacons -= src
|
||||
GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one.
|
||||
GLOB.deliverybeacons -= src
|
||||
return ..()
|
||||
|
||||
// set the transponder codes assoc list from codes_txt
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
var/datum/newscaster/feed_network/news_network = new /datum/newscaster/feed_network
|
||||
var/list/obj/machinery/newscaster/allCasters = list()
|
||||
GLOBAL_DATUM_INIT(news_network, /datum/newscaster/feed_network, new)
|
||||
GLOBAL_LIST_EMPTY(allCasters)
|
||||
|
||||
/datum/newscaster
|
||||
|
||||
@@ -26,7 +26,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
/datum/newscaster/feed_message/proc/returnAuthor(censor)
|
||||
if(censor == -1)
|
||||
censor = authorCensor
|
||||
var/txt = "[news_network.redactedText]"
|
||||
var/txt = "[GLOB.news_network.redactedText]"
|
||||
if(!censor)
|
||||
txt = author
|
||||
return txt
|
||||
@@ -34,26 +34,26 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
/datum/newscaster/feed_message/proc/returnBody(censor)
|
||||
if(censor == -1)
|
||||
censor = bodyCensor
|
||||
var/txt = "[news_network.redactedText]"
|
||||
var/txt = "[GLOB.news_network.redactedText]"
|
||||
if(!censor)
|
||||
txt = body
|
||||
return txt
|
||||
|
||||
/datum/newscaster/feed_message/proc/toggleCensorAuthor()
|
||||
if(authorCensor)
|
||||
authorCensorTime.Add(news_network.lastAction*-1)
|
||||
authorCensorTime.Add(GLOB.news_network.lastAction*-1)
|
||||
else
|
||||
authorCensorTime.Add(news_network.lastAction)
|
||||
authorCensorTime.Add(GLOB.news_network.lastAction)
|
||||
authorCensor = !authorCensor
|
||||
news_network.lastAction ++
|
||||
GLOB.news_network.lastAction ++
|
||||
|
||||
/datum/newscaster/feed_message/proc/toggleCensorBody()
|
||||
if(bodyCensor)
|
||||
bodyCensorTime.Add(news_network.lastAction*-1)
|
||||
bodyCensorTime.Add(GLOB.news_network.lastAction*-1)
|
||||
else
|
||||
bodyCensorTime.Add(news_network.lastAction)
|
||||
bodyCensorTime.Add(GLOB.news_network.lastAction)
|
||||
bodyCensor = !bodyCensor
|
||||
news_network.lastAction ++
|
||||
GLOB.news_network.lastAction ++
|
||||
|
||||
/datum/newscaster/feed_channel
|
||||
var/channel_name = ""
|
||||
@@ -69,26 +69,26 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
/datum/newscaster/feed_channel/proc/returnAuthor(censor)
|
||||
if(censor == -1)
|
||||
censor = authorCensor
|
||||
var/txt = "[news_network.redactedText]"
|
||||
var/txt = "[GLOB.news_network.redactedText]"
|
||||
if(!censor)
|
||||
txt = author
|
||||
return txt
|
||||
|
||||
/datum/newscaster/feed_channel/proc/toggleCensorDclass()
|
||||
if(censored)
|
||||
DclassCensorTime.Add(news_network.lastAction*-1)
|
||||
DclassCensorTime.Add(GLOB.news_network.lastAction*-1)
|
||||
else
|
||||
DclassCensorTime.Add(news_network.lastAction)
|
||||
DclassCensorTime.Add(GLOB.news_network.lastAction)
|
||||
censored = !censored
|
||||
news_network.lastAction ++
|
||||
GLOB.news_network.lastAction ++
|
||||
|
||||
/datum/newscaster/feed_channel/proc/toggleCensorAuthor()
|
||||
if(authorCensor)
|
||||
authorCensorTime.Add(news_network.lastAction*-1)
|
||||
authorCensorTime.Add(GLOB.news_network.lastAction*-1)
|
||||
else
|
||||
authorCensorTime.Add(news_network.lastAction)
|
||||
authorCensorTime.Add(GLOB.news_network.lastAction)
|
||||
authorCensor = !authorCensor
|
||||
news_network.lastAction ++
|
||||
GLOB.news_network.lastAction ++
|
||||
|
||||
/datum/newscaster/wanted_message
|
||||
var/active
|
||||
@@ -130,7 +130,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(FC.channel_name == channel_name)
|
||||
FC.messages += newMsg
|
||||
break
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
|
||||
NEWSCASTER.newsAlert(channel_name)
|
||||
lastAction ++
|
||||
newMsg.creationTime = lastAction
|
||||
@@ -144,7 +144,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(photo)
|
||||
wanted_issue.img = photo.img
|
||||
if(newMessage)
|
||||
for(var/obj/machinery/newscaster/N in allCasters)
|
||||
for(var/obj/machinery/newscaster/N in GLOB.allCasters)
|
||||
N.newsAlert()
|
||||
N.update_icon()
|
||||
|
||||
@@ -154,7 +154,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
wanted_issue.body = null
|
||||
wanted_issue.scannedUser = null
|
||||
wanted_issue.img = null
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
|
||||
NEWSCASTER.update_icon()
|
||||
|
||||
|
||||
@@ -205,13 +205,13 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
|
||||
pixel_y = (dir & 3)? (dir ==1 ? -32 : 32) : 0
|
||||
|
||||
allCasters += src
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
GLOB.allCasters += src
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
|
||||
unit_no++
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/newscaster/Destroy()
|
||||
allCasters -= src
|
||||
GLOB.allCasters -= src
|
||||
viewing_channel = null
|
||||
photo = null
|
||||
return ..()
|
||||
@@ -221,7 +221,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
icon_state = "newscaster_off"
|
||||
else
|
||||
if(news_network.wanted_issue.active)
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
icon_state = "newscaster_wanted"
|
||||
else
|
||||
icon_state = "newscaster_normal"
|
||||
@@ -268,7 +268,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(0)
|
||||
dat += "Welcome to Newscasting Unit #[unit_no].<BR> Interface & News networks Operational."
|
||||
dat += "<BR><FONT SIZE=1>Property of Nanotrasen Inc</FONT>"
|
||||
if(news_network.wanted_issue.active)
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
dat+= "<HR><A href='?src=\ref[src];view_wanted=1'>Read Wanted Issue</A>"
|
||||
dat+= "<HR><BR><A href='?src=\ref[src];create_channel=1'>Create Feed Channel</A>"
|
||||
dat+= "<BR><A href='?src=\ref[src];view=1'>View Feed Channels</A>"
|
||||
@@ -278,7 +278,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+= "<BR><BR><A href='?src=\ref[human_or_robot_user];mach_close=newscaster_main'>Exit</A>"
|
||||
if(securityCaster)
|
||||
var/wanted_already = 0
|
||||
if(news_network.wanted_issue.active)
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
wanted_already = 1
|
||||
dat+="<HR><B>Feed Security functions:</B><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
|
||||
@@ -287,10 +287,10 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[scanned_user]</FONT>"
|
||||
if(1)
|
||||
dat+= "Station Feed Channels<HR>"
|
||||
if( isemptylist(news_network.network_channels) )
|
||||
if( isemptylist(GLOB.news_network.network_channels) )
|
||||
dat+="<I>No active channels found...</I>"
|
||||
else
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
|
||||
if(CHANNEL.is_admin_channel)
|
||||
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen '><A href='?src=\ref[src];show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A></FONT></B><BR>"
|
||||
else
|
||||
@@ -329,9 +329,9 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(7)
|
||||
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed Channel to Network.</B></FONT><HR><BR>"
|
||||
var/list/existing_authors = list()
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
if(FC.authorCensor)
|
||||
existing_authors += news_network.redactedText
|
||||
existing_authors += GLOB.news_network.redactedText
|
||||
else
|
||||
existing_authors += FC.author
|
||||
if(scanned_user in existing_authors)
|
||||
@@ -339,7 +339,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(channel_name=="" || channel_name == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>Invalid channel name.</FONT><BR>"
|
||||
var/check = 0
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
if(FC.channel_name == channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -349,10 +349,10 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<FONT COLOR='maroon'>Channel author unverified.</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[2]'>Return</A><BR>"
|
||||
if(8)
|
||||
var/total_num=length(news_network.network_channels)
|
||||
var/total_num=length(GLOB.news_network.network_channels)
|
||||
var/active_num=total_num
|
||||
var/message_num=0
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
if(!FC.censored)
|
||||
message_num += length(FC.messages)
|
||||
else
|
||||
@@ -395,10 +395,10 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
|
||||
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
|
||||
dat+="<HR>Select Feed channel to get Stories from:<BR>"
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(GLOB.news_network.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
||||
if(11)
|
||||
@@ -406,10 +406,10 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
|
||||
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
|
||||
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(GLOB.news_network.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];pick_d_notice=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
|
||||
if(12)
|
||||
@@ -442,7 +442,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<B>Wanted Issue Handler:</B>"
|
||||
var/wanted_already = 0
|
||||
var/end_param = 1
|
||||
if(news_network.wanted_issue.active)
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
wanted_already = 1
|
||||
end_param = 2
|
||||
if(wanted_already)
|
||||
@@ -452,7 +452,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<A href='?src=\ref[src];set_wanted_desc=1'>Description</A>: [msg] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>: [(photo ? "Photo Attached" : "No Photo")]</BR>"
|
||||
if(wanted_already)
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'>[news_network.wanted_issue.scannedUser]</FONT><BR>"
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'>[GLOB.news_network.wanted_issue.scannedUser]</FONT><BR>"
|
||||
else
|
||||
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'>[scanned_user]</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
|
||||
@@ -475,13 +475,13 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
dat+="<B>Wanted Issue successfully deleted from Circulation</B><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(18)
|
||||
if(news_network.wanted_issue.active)
|
||||
dat+="<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[news_network.wanted_issue.scannedUser]</FONT>\]</FONT><HR>"
|
||||
dat+="<B>Criminal</B>: [news_network.wanted_issue.criminal]<BR>"
|
||||
dat+="<B>Description</B>: [news_network.wanted_issue.body]<BR>"
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
dat+="<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[GLOB.news_network.wanted_issue.scannedUser]</FONT>\]</FONT><HR>"
|
||||
dat+="<B>Criminal</B>: [GLOB.news_network.wanted_issue.criminal]<BR>"
|
||||
dat+="<B>Description</B>: [GLOB.news_network.wanted_issue.body]<BR>"
|
||||
dat+="<B>Photo:</B>: "
|
||||
if(news_network.wanted_issue.img)
|
||||
usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png")
|
||||
if(GLOB.news_network.wanted_issue.img)
|
||||
usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png")
|
||||
dat+="<BR><img src='tmp_photow.png' width = '180'>"
|
||||
else
|
||||
dat+="None"
|
||||
@@ -518,13 +518,13 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
updateUsrDialog()
|
||||
else if(href_list["submit_new_channel"])
|
||||
var/list/existing_authors = list()
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
if(FC.authorCensor)
|
||||
existing_authors += news_network.redactedText
|
||||
existing_authors += GLOB.news_network.redactedText
|
||||
else
|
||||
existing_authors += FC.author
|
||||
var/check = 0
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
if(FC.channel_name == channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -534,13 +534,13 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
scan_user(usr)
|
||||
news_network.CreateFeedChannel(channel_name, scanned_user, c_locked)
|
||||
GLOB.news_network.CreateFeedChannel(channel_name, scanned_user, c_locked)
|
||||
feedback_inc("newscaster_channels",1)
|
||||
screen=5
|
||||
updateUsrDialog()
|
||||
else if(href_list["set_channel_receiving"])
|
||||
var/list/available_channels = list()
|
||||
for(var/datum/newscaster/feed_channel/F in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels)
|
||||
if( (!F.locked || F.author == scanned_user) && !F.censored)
|
||||
available_channels += F.channel_name
|
||||
channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels
|
||||
@@ -557,7 +557,7 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "" )
|
||||
screen=6
|
||||
else
|
||||
news_network.SubmitArticle("<font face=\"[PEN_FONT]\">[parsepencode(msg, usr, SIGNFONT)]</font>", scanned_user, channel_name, photo, 0, allow_comments)
|
||||
GLOB.news_network.SubmitArticle("<font face=\"[PEN_FONT]\">[parsepencode(msg, usr, SIGNFONT)]</font>", scanned_user, channel_name, photo, 0, allow_comments)
|
||||
feedback_inc("newscaster_stories",1)
|
||||
screen=4
|
||||
msg = ""
|
||||
@@ -586,11 +586,11 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
updateUsrDialog()
|
||||
else if(href_list["menu_wanted"])
|
||||
var/already_wanted = 0
|
||||
if(news_network.wanted_issue.active)
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
already_wanted = 1
|
||||
if(already_wanted)
|
||||
channel_name = news_network.wanted_issue.criminal
|
||||
msg = news_network.wanted_issue.body
|
||||
channel_name = GLOB.news_network.wanted_issue.criminal
|
||||
msg = GLOB.news_network.wanted_issue.body
|
||||
screen = 14
|
||||
updateUsrDialog()
|
||||
else if(href_list["set_wanted_name"])
|
||||
@@ -608,22 +608,22 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
if(choice=="Confirm")
|
||||
scan_user(usr)
|
||||
if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one.
|
||||
news_network.submitWanted(channel_name, msg, scanned_user, photo, 0 , 1)
|
||||
GLOB.news_network.submitWanted(channel_name, msg, scanned_user, photo, 0 , 1)
|
||||
screen = 15
|
||||
else
|
||||
if(news_network.wanted_issue.isAdminMsg)
|
||||
if(GLOB.news_network.wanted_issue.isAdminMsg)
|
||||
alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok")
|
||||
return
|
||||
news_network.submitWanted(channel_name, msg, scanned_user, photo)
|
||||
GLOB.news_network.submitWanted(channel_name, msg, scanned_user, photo)
|
||||
screen = 19
|
||||
updateUsrDialog()
|
||||
else if(href_list["cancel_wanted"])
|
||||
if(news_network.wanted_issue.isAdminMsg)
|
||||
if(GLOB.news_network.wanted_issue.isAdminMsg)
|
||||
alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot take it down.","Ok")
|
||||
return
|
||||
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.deleteWanted()
|
||||
GLOB.news_network.deleteWanted()
|
||||
screen=17
|
||||
updateUsrDialog()
|
||||
else if(href_list["view_wanted"])
|
||||
@@ -852,16 +852,16 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
/obj/machinery/newscaster/proc/print_paper()
|
||||
feedback_inc("newscaster_newspapers_printed",1)
|
||||
var/obj/item/weapon/newspaper/NEWSPAPER = new /obj/item/weapon/newspaper
|
||||
for(var/datum/newscaster/feed_channel/FC in news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
|
||||
NEWSPAPER.news_content += FC
|
||||
if(news_network.wanted_issue.active)
|
||||
NEWSPAPER.wantedAuthor = news_network.wanted_issue.scannedUser
|
||||
NEWSPAPER.wantedCriminal = news_network.wanted_issue.criminal
|
||||
NEWSPAPER.wantedBody = news_network.wanted_issue.body
|
||||
if(news_network.wanted_issue.img)
|
||||
NEWSPAPER.wantedPhoto = news_network.wanted_issue.img
|
||||
if(GLOB.news_network.wanted_issue.active)
|
||||
NEWSPAPER.wantedAuthor = GLOB.news_network.wanted_issue.scannedUser
|
||||
NEWSPAPER.wantedCriminal = GLOB.news_network.wanted_issue.criminal
|
||||
NEWSPAPER.wantedBody = GLOB.news_network.wanted_issue.body
|
||||
if(GLOB.news_network.wanted_issue.img)
|
||||
NEWSPAPER.wantedPhoto = GLOB.news_network.wanted_issue.img
|
||||
NEWSPAPER.loc = get_turf(src)
|
||||
NEWSPAPER.creationTime = news_network.lastAction
|
||||
NEWSPAPER.creationTime = GLOB.news_network.lastAction
|
||||
paper_remaining--
|
||||
|
||||
/obj/machinery/newscaster/proc/newsAlert(channel)
|
||||
|
||||
@@ -22,7 +22,7 @@ Buildable meters
|
||||
var/flipped = 0
|
||||
var/is_bent = 0
|
||||
|
||||
var/global/list/pipe_types = list(
|
||||
var/static/list/pipe_types = list(
|
||||
PIPE_SIMPLE, \
|
||||
PIPE_MANIFOLD, \
|
||||
PIPE_4WAYMANIFOLD, \
|
||||
@@ -73,7 +73,7 @@ Buildable meters
|
||||
src.pipe_type = pipe_type
|
||||
src.setDir(dir)
|
||||
|
||||
if(src.dir in diagonals)
|
||||
if(src.dir in GLOB.diagonals)
|
||||
is_bent = 1
|
||||
|
||||
update()
|
||||
@@ -81,7 +81,7 @@ Buildable meters
|
||||
src.pixel_y = rand(-5, 5)
|
||||
|
||||
//update the name and icon of the pipe item depending on the type
|
||||
var/global/list/pipeID2State = list(
|
||||
GLOBAL_LIST_INIT(pipeID2State, list(
|
||||
"[PIPE_SIMPLE]" = "simple", \
|
||||
"[PIPE_MANIFOLD]" = "manifold", \
|
||||
"[PIPE_4WAYMANIFOLD]" = "manifold4w", \
|
||||
@@ -103,7 +103,7 @@ var/global/list/pipeID2State = list(
|
||||
\
|
||||
"[PIPE_GAS_FILTER]" = "filter", \
|
||||
"[PIPE_GAS_MIXER]" = "mixer", \
|
||||
)
|
||||
))
|
||||
|
||||
/obj/item/pipe/proc/update()
|
||||
var/list/nlist = list(\
|
||||
@@ -133,7 +133,7 @@ var/global/list/pipeID2State = list(
|
||||
)
|
||||
//fix_pipe_type()
|
||||
name = nlist["[pipe_type][is_bent ? "_b" : ""]"] + " fitting"
|
||||
icon_state = pipeID2State["[pipe_type]"]
|
||||
icon_state = GLOB.pipeID2State["[pipe_type]"]
|
||||
|
||||
// rotate the pipe item clockwise
|
||||
|
||||
@@ -186,7 +186,7 @@ var/global/list/pipeID2State = list(
|
||||
setDir(old_dir )//pipes changing direction when moved is just annoying and buggy
|
||||
|
||||
/obj/item/pipe/proc/unflip(direction)
|
||||
if(direction in diagonals)
|
||||
if(direction in GLOB.diagonals)
|
||||
return turn(direction, 45)
|
||||
|
||||
return direction
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
use_power = 1 //this turret uses and requires power
|
||||
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
|
||||
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
|
||||
req_access = list(access_security)
|
||||
req_access = list(GLOB.access_security)
|
||||
power_channel = EQUIP //drains power from the EQUIPMENT channel
|
||||
|
||||
var/base_icon_state = "standard"
|
||||
@@ -311,9 +311,11 @@
|
||||
if(prob(30))
|
||||
spark_system.start()
|
||||
if(on && !attacked && !emagged)
|
||||
attacked = 1
|
||||
spawn(60)
|
||||
attacked = 0
|
||||
attacked = TRUE
|
||||
addtimer(CALLBACK(src, .proc/reset_attacked), 60)
|
||||
|
||||
/obj/machinery/porta_turret/proc/reset_attacked()
|
||||
attacked = FALSE
|
||||
|
||||
/obj/machinery/porta_turret/deconstruct(disassembled = TRUE)
|
||||
qdel(src)
|
||||
@@ -465,7 +467,7 @@
|
||||
|
||||
if(check_records) //if the turret can check the records, check if they are set to *Arrest* on records
|
||||
var/perpname = perp.get_face_name(perp.get_id_name())
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security)
|
||||
if(!R || (R.fields["criminal"] == "*Arrest*"))
|
||||
threatcount += 4
|
||||
|
||||
@@ -632,7 +634,7 @@
|
||||
var/locked = 1
|
||||
var/control_area = null //can be area name, path or nothing.
|
||||
var/ailock = 0 // AI cannot use this
|
||||
req_access = list(access_ai_upload)
|
||||
req_access = list(GLOB.access_ai_upload)
|
||||
var/list/obj/machinery/porta_turret/turrets = list()
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
@@ -654,7 +656,7 @@
|
||||
if(!mapload)
|
||||
return
|
||||
if(control_area && istext(control_area))
|
||||
for(var/V in sortedAreas)
|
||||
for(var/V in GLOB.sortedAreas)
|
||||
var/area/A = V
|
||||
if(A.name == control_area)
|
||||
control_area = A
|
||||
@@ -843,7 +845,7 @@
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/porta_turret/lasertag
|
||||
req_access = list(access_maint_tunnels, access_theatre)
|
||||
req_access = list(GLOB.access_maint_tunnels, GLOB.access_theatre)
|
||||
check_records = 0
|
||||
criminals = 0
|
||||
auth_weapons = 1
|
||||
@@ -911,4 +913,4 @@
|
||||
if(istype(P, /obj/item/projectile/beam/lasertag/bluetag))
|
||||
on = 0
|
||||
spawn(100)
|
||||
on = 1
|
||||
on = 1
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 1000
|
||||
req_access = list(access_robotics)
|
||||
req_access = list(GLOB.access_robotics)
|
||||
var/recharge_speed
|
||||
var/repairs
|
||||
state_open = 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var/const/SAFETY_COOLDOWN = 100
|
||||
#define SAFETY_COOLDOWN 100
|
||||
|
||||
/obj/machinery/recycler
|
||||
name = "recycler"
|
||||
@@ -12,7 +12,7 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
var/icon_name = "grinder-o"
|
||||
var/blood = 0
|
||||
var/eat_dir = WEST
|
||||
var/amount_produced = 1
|
||||
var/amount_produced = 50
|
||||
var/datum/material_container/materials
|
||||
var/crush_damage = 1000
|
||||
var/eat_victim_items = TRUE
|
||||
@@ -40,9 +40,9 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
mat_mod = 2 * B.rating
|
||||
mat_mod *= 50000
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
amt_made = 25 * M.rating //% of materials salvaged
|
||||
amt_made = 12.5 * M.rating //% of materials salvaged
|
||||
materials.max_amount = mat_mod
|
||||
amount_produced = min(100, amt_made)
|
||||
amount_produced = min(50, amt_made) + 50
|
||||
|
||||
/obj/machinery/recycler/examine(mob/user)
|
||||
..()
|
||||
@@ -109,9 +109,12 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
eat(AM)
|
||||
|
||||
/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE)
|
||||
var/list/to_eat = list(AM0)
|
||||
var/list/to_eat
|
||||
if(istype(AM0, /obj/item))
|
||||
to_eat += AM0.GetAllContents()
|
||||
to_eat = AM0.GetAllContents()
|
||||
else
|
||||
to_eat = list(AM0)
|
||||
|
||||
var/items_recycled = 0
|
||||
|
||||
for(var/i in to_eat)
|
||||
@@ -204,3 +207,5 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
/obj/item/weapon/paper/recycler
|
||||
name = "paper - 'garbage duty instructions'"
|
||||
info = "<h2>New Assignment</h2> You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.<br><br>There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
|
||||
|
||||
#undef SAFETY_COOLDOWN
|
||||
@@ -1,10 +1,10 @@
|
||||
/******************** Requests Console ********************/
|
||||
/** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */
|
||||
|
||||
var/req_console_assistance = list()
|
||||
var/req_console_supplies = list()
|
||||
var/req_console_information = list()
|
||||
var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
GLOBAL_LIST_EMPTY(req_console_assistance)
|
||||
GLOBAL_LIST_EMPTY(req_console_supplies)
|
||||
GLOBAL_LIST_EMPTY(req_console_information)
|
||||
GLOBAL_LIST_EMPTY(allConsoles)
|
||||
|
||||
/obj/machinery/requests_console
|
||||
name = "requests console"
|
||||
@@ -91,46 +91,46 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
/obj/machinery/requests_console/Initialize()
|
||||
..()
|
||||
name = "\improper [department] requests console"
|
||||
allConsoles += src
|
||||
GLOB.allConsoles += src
|
||||
switch(departmentType)
|
||||
if(1)
|
||||
if(!("[department]" in req_console_assistance))
|
||||
req_console_assistance += department
|
||||
if(!("[department]" in GLOB.req_console_assistance))
|
||||
GLOB.req_console_assistance += department
|
||||
if(2)
|
||||
if(!("[department]" in req_console_supplies))
|
||||
req_console_supplies += department
|
||||
if(!("[department]" in GLOB.req_console_supplies))
|
||||
GLOB.req_console_supplies += department
|
||||
if(3)
|
||||
if(!("[department]" in req_console_information))
|
||||
req_console_information += department
|
||||
if(!("[department]" in GLOB.req_console_information))
|
||||
GLOB.req_console_information += department
|
||||
if(4)
|
||||
if(!("[department]" in req_console_assistance))
|
||||
req_console_assistance += department
|
||||
if(!("[department]" in req_console_supplies))
|
||||
req_console_supplies += department
|
||||
if(!("[department]" in GLOB.req_console_assistance))
|
||||
GLOB.req_console_assistance += department
|
||||
if(!("[department]" in GLOB.req_console_supplies))
|
||||
GLOB.req_console_supplies += department
|
||||
if(5)
|
||||
if(!("[department]" in req_console_assistance))
|
||||
req_console_assistance += department
|
||||
if(!("[department]" in req_console_information))
|
||||
req_console_information += department
|
||||
if(!("[department]" in GLOB.req_console_assistance))
|
||||
GLOB.req_console_assistance += department
|
||||
if(!("[department]" in GLOB.req_console_information))
|
||||
GLOB.req_console_information += department
|
||||
if(6)
|
||||
if(!("[department]" in req_console_supplies))
|
||||
req_console_supplies += department
|
||||
if(!("[department]" in req_console_information))
|
||||
req_console_information += department
|
||||
if(!("[department]" in GLOB.req_console_supplies))
|
||||
GLOB.req_console_supplies += department
|
||||
if(!("[department]" in GLOB.req_console_information))
|
||||
GLOB.req_console_information += department
|
||||
if(7)
|
||||
if(!("[department]" in req_console_assistance))
|
||||
req_console_assistance += department
|
||||
if(!("[department]" in req_console_supplies))
|
||||
req_console_supplies += department
|
||||
if(!("[department]" in req_console_information))
|
||||
req_console_information += department
|
||||
if(!("[department]" in GLOB.req_console_assistance))
|
||||
GLOB.req_console_assistance += department
|
||||
if(!("[department]" in GLOB.req_console_supplies))
|
||||
GLOB.req_console_supplies += department
|
||||
if(!("[department]" in GLOB.req_console_information))
|
||||
GLOB.req_console_information += department
|
||||
|
||||
Radio = new /obj/item/device/radio(src)
|
||||
Radio.listening = 0
|
||||
|
||||
/obj/machinery/requests_console/Destroy()
|
||||
QDEL_NULL(Radio)
|
||||
allConsoles -= src
|
||||
GLOB.allConsoles -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/requests_console/attack_hand(mob/user)
|
||||
@@ -142,7 +142,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(1) //req. assistance
|
||||
dat += "Which department do you need assistance from?<BR><BR>"
|
||||
dat += "<table width='100%'>"
|
||||
for(var/dpt in req_console_assistance)
|
||||
for(var/dpt in GLOB.req_console_assistance)
|
||||
if (dpt != department)
|
||||
dat += "<tr>"
|
||||
dat += "<td width='55%'>[dpt]</td>"
|
||||
@@ -157,7 +157,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(2) //req. supplies
|
||||
dat += "Which department do you need supplies from?<BR><BR>"
|
||||
dat += "<table width='100%'>"
|
||||
for(var/dpt in req_console_supplies)
|
||||
for(var/dpt in GLOB.req_console_supplies)
|
||||
if (dpt != department)
|
||||
dat += "<tr>"
|
||||
dat += "<td width='55%'>[dpt]</td>"
|
||||
@@ -172,7 +172,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(3) //relay information
|
||||
dat += "Which department would you like to send information to?<BR><BR>"
|
||||
dat += "<table width='100%'>"
|
||||
for(var/dpt in req_console_information)
|
||||
for(var/dpt in GLOB.req_console_information)
|
||||
if (dpt != department)
|
||||
dat += "<tr>"
|
||||
dat += "<td width='55%'>[dpt]</td>"
|
||||
@@ -193,7 +193,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
dat += "<A href='?src=\ref[src];setScreen=0'>Continue</A><BR>"
|
||||
|
||||
if(8) //view messages
|
||||
for (var/obj/machinery/requests_console/Console in allConsoles)
|
||||
for (var/obj/machinery/requests_console/Console in GLOB.allConsoles)
|
||||
if (Console.department == department)
|
||||
Console.newmessagepriority = 0
|
||||
Console.update_icon()
|
||||
@@ -304,7 +304,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(!announcementConsole)
|
||||
return
|
||||
minor_announce(message, "[department] Announcement:")
|
||||
news_network.SubmitArticle(message, department, "Station Announcements", null)
|
||||
GLOB.news_network.SubmitArticle(message, department, "Station Announcements", null)
|
||||
log_say("[key_name(usr)] has made a station announcement: [message]")
|
||||
message_admins("[key_name_admin(usr)] has made a station announcement.")
|
||||
announceAuth = 0
|
||||
@@ -316,21 +316,19 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
var/radio_freq
|
||||
switch(text2num(href_list["emergency"]))
|
||||
if(1) //Security
|
||||
radio_freq = SEC_FREQ
|
||||
radio_freq = GLOB.SEC_FREQ
|
||||
emergency = "Security"
|
||||
if(2) //Engineering
|
||||
radio_freq = ENG_FREQ
|
||||
radio_freq = GLOB.ENG_FREQ
|
||||
emergency = "Engineering"
|
||||
if(3) //Medical
|
||||
radio_freq = MED_FREQ
|
||||
radio_freq = GLOB.MED_FREQ
|
||||
emergency = "Medical"
|
||||
if(radio_freq)
|
||||
Radio.set_frequency(radio_freq)
|
||||
Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq)
|
||||
Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq,get_spans(),get_default_language())
|
||||
update_icon()
|
||||
spawn(3000)
|
||||
emergency = null
|
||||
update_icon()
|
||||
addtimer(CALLBACK(src, .proc/clear_emergency), 3000)
|
||||
|
||||
if( href_list["department"] && message )
|
||||
var/log_msg = message
|
||||
@@ -345,7 +343,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
screen = 7 //if it's successful, this will get overrwritten (7 = unsufccessfull, 6 = successfull)
|
||||
if (sending)
|
||||
var/pass = 0
|
||||
for (var/obj/machinery/message_server/MS in machines)
|
||||
for (var/obj/machinery/message_server/MS in GLOB.machines)
|
||||
if(!MS.active) continue
|
||||
MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority)
|
||||
pass = 1
|
||||
@@ -354,24 +352,24 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
var/radio_freq = 0
|
||||
switch(href_list["department"])
|
||||
if("bridge")
|
||||
radio_freq = COMM_FREQ
|
||||
radio_freq = GLOB.COMM_FREQ
|
||||
if("medbay")
|
||||
radio_freq = MED_FREQ
|
||||
radio_freq = GLOB.MED_FREQ
|
||||
if("science")
|
||||
radio_freq = SCI_FREQ
|
||||
radio_freq = GLOB.SCI_FREQ
|
||||
if("engineering")
|
||||
radio_freq = ENG_FREQ
|
||||
radio_freq = GLOB.ENG_FREQ
|
||||
if("security")
|
||||
radio_freq = SEC_FREQ
|
||||
radio_freq = GLOB.SEC_FREQ
|
||||
if("cargobay" || "mining")
|
||||
radio_freq = SUPP_FREQ
|
||||
radio_freq = GLOB.SUPP_FREQ
|
||||
Radio.set_frequency(radio_freq)
|
||||
var/authentic
|
||||
if(msgVerified || msgStamped)
|
||||
authentic = " (Authenticated)"
|
||||
|
||||
var/alert = ""
|
||||
for (var/obj/machinery/requests_console/Console in allConsoles)
|
||||
for (var/obj/machinery/requests_console/Console in GLOB.allConsoles)
|
||||
if (ckey(Console.department) == ckey(href_list["department"]))
|
||||
switch(priority)
|
||||
if(2) //High priority
|
||||
@@ -386,7 +384,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
screen = 6
|
||||
|
||||
if(radio_freq)
|
||||
Radio.talk_into(src,"[alert]: <i>[message]</i>",radio_freq)
|
||||
Radio.talk_into(src,"[alert]: <i>[message]</i>",radio_freq,get_spans(),get_default_language())
|
||||
|
||||
switch(priority)
|
||||
if(2)
|
||||
@@ -441,13 +439,17 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/say_quote(input, list/spans)
|
||||
/obj/machinery/requests_console/say_quote(input, list/spans, message_mode)
|
||||
var/ending = copytext(input, length(input) - 2)
|
||||
if (ending == "!!!")
|
||||
return "blares, \"[attach_spans(input, spans)]\""
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/requests_console/proc/clear_emergency()
|
||||
emergency = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/requests_console/proc/createmessage(source, title, message, priority)
|
||||
var/linkedsender
|
||||
if(istype(source, /obj/machinery/requests_console))
|
||||
@@ -513,7 +515,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
msgVerified = "<font color='green'><b>Verified by [ID.registered_name] ([ID.assignment])</b></font>"
|
||||
updateUsrDialog()
|
||||
if(screen == 10)
|
||||
if (access_RC_announce in ID.access)
|
||||
if (GLOB.access_RC_announce in ID.access)
|
||||
announceAuth = 1
|
||||
else
|
||||
announceAuth = 0
|
||||
|
||||
+138
-204
@@ -27,8 +27,10 @@
|
||||
move_update_air(T)
|
||||
|
||||
/obj/structure/emergency_shield/CanPass(atom/movable/mover, turf/target, height)
|
||||
if(!height) return 0
|
||||
else return ..()
|
||||
if(!height)
|
||||
return FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/emergency_shield/emp_act(severity)
|
||||
switch(severity)
|
||||
@@ -81,7 +83,7 @@
|
||||
opacity = 0
|
||||
anchored = 0
|
||||
pressure_resistance = 2*ONE_ATMOSPHERE
|
||||
req_access = list(access_engine)
|
||||
req_access = list(GLOB.access_engine)
|
||||
max_integrity = 100
|
||||
obj_integrity = 100
|
||||
var/active = 0
|
||||
@@ -216,15 +218,8 @@
|
||||
else
|
||||
icon_state = (stat & BROKEN) ? "shieldoffbr":"shieldoff"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define maxstoredpower 500
|
||||
#define ACTIVE_SETUPFIELDS 1
|
||||
#define ACTIVE_HASFIELDS 2
|
||||
/obj/machinery/shieldwallgen
|
||||
name = "shield wall generator"
|
||||
desc = "A shield generator."
|
||||
@@ -232,166 +227,130 @@
|
||||
icon_state = "Shield_Gen"
|
||||
anchored = 0
|
||||
density = 1
|
||||
req_access = list(access_teleporter)
|
||||
req_access = list(GLOB.access_teleporter)
|
||||
flags = CONDUCT
|
||||
use_power = 0
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
var/active = 0
|
||||
var/active = FALSE
|
||||
var/power = 0
|
||||
var/steps = 0
|
||||
var/last_check = 0
|
||||
var/check_delay = 10
|
||||
var/recalc = 0
|
||||
var/maximum_stored_power = 500
|
||||
var/locked = 1
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
var/storedpower = 0
|
||||
var/shield_range = 8
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
|
||||
/obj/machinery/shieldwallgen/Destroy()
|
||||
for(var/d in GLOB.cardinal)
|
||||
cleanup_field(d)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/proc/power()
|
||||
if(!anchored)
|
||||
power = 0
|
||||
return 0
|
||||
var/turf/T = src.loc
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
var/datum/powernet/PN
|
||||
if(C)
|
||||
PN = C.powernet // find the powernet of the connected cable
|
||||
PN = C.powernet //find the powernet of the connected cable
|
||||
|
||||
if(!PN)
|
||||
power = 0
|
||||
return 0
|
||||
return
|
||||
|
||||
var/surplus = max(PN.avail-PN.load, 0)
|
||||
var/shieldload = min(rand(50,200), surplus)
|
||||
if(shieldload==0 && !storedpower) // no cable or no power, and no power stored
|
||||
power = 0
|
||||
return 0
|
||||
else
|
||||
power = 1 // IVE GOT THE POWER!
|
||||
if(PN) //runtime errors fixer. They were caused by PN.newload trying to access missing network in case of working on stored power.
|
||||
storedpower += shieldload
|
||||
PN.load += shieldload //uses powernet power.
|
||||
|
||||
/obj/machinery/shieldwallgen/attack_hand(mob/user)
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be firmly secured to the floor first!</span>")
|
||||
return 1
|
||||
if(locked && !issilicon(user))
|
||||
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
||||
return 1
|
||||
if(power != 1)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be powered by wire underneath!</span>")
|
||||
return 1
|
||||
|
||||
if(active >= 1)
|
||||
active = 0
|
||||
icon_state = "Shield_Gen"
|
||||
|
||||
user.visible_message("[user] turned \the [src] off.", \
|
||||
"<span class='notice'>You turn off \the [src].</span>", \
|
||||
"<span class='italics'>You hear heavy droning fade out.</span>")
|
||||
cleanup()
|
||||
else
|
||||
active = 1
|
||||
icon_state = "Shield_Gen +a"
|
||||
user.visible_message("[user] turned \the [src] on.", \
|
||||
"<span class='notice'>You turn on \the [src].</span>", \
|
||||
"<span class='italics'>You hear heavy droning.</span>")
|
||||
add_fingerprint(user)
|
||||
var/surplus = max(PN.avail - PN.load, 0)
|
||||
var/avail_power = min(rand(50,200), surplus)
|
||||
if(avail_power)
|
||||
power += avail_power
|
||||
PN.load += avail_power //uses powernet power.
|
||||
|
||||
/obj/machinery/shieldwallgen/process()
|
||||
power()
|
||||
if(power)
|
||||
storedpower -= 50 //this way it can survive longer and survive at all
|
||||
storedpower = Clamp(storedpower, 0, maxstoredpower)
|
||||
use_stored_power(50)
|
||||
|
||||
/obj/machinery/shieldwallgen/proc/use_stored_power(amount)
|
||||
power = Clamp(power - amount, 0, maximum_stored_power)
|
||||
update_activity()
|
||||
|
||||
if(active == 1)
|
||||
if(!anchored)
|
||||
active = 0
|
||||
return
|
||||
setup_field(1)
|
||||
setup_field(2)
|
||||
setup_field(4)
|
||||
setup_field(8)
|
||||
src.active = 2
|
||||
if(active >= 1)
|
||||
if(power == 0)
|
||||
/obj/machinery/shieldwallgen/proc/update_activity()
|
||||
if(active)
|
||||
icon_state = "Shield_Gen +a"
|
||||
if(active == ACTIVE_SETUPFIELDS)
|
||||
var/fields = 0
|
||||
for(var/d in GLOB.cardinal)
|
||||
if(setup_field(d))
|
||||
fields++
|
||||
if(fields)
|
||||
active = ACTIVE_HASFIELDS
|
||||
if(!power)
|
||||
visible_message("<span class='danger'>The [src.name] shuts down due to lack of power!</span>", \
|
||||
"<span class='italics'>You hear heavy droning fade out.</span>")
|
||||
icon_state = "Shield_Gen"
|
||||
active = 0
|
||||
cleanup(1)
|
||||
cleanup(2)
|
||||
cleanup(4)
|
||||
cleanup(8)
|
||||
active = FALSE
|
||||
for(var/d in GLOB.cardinal)
|
||||
cleanup_field(d)
|
||||
else
|
||||
icon_state = "Shield_Gen"
|
||||
for(var/d in GLOB.cardinal)
|
||||
cleanup_field(d)
|
||||
|
||||
/obj/machinery/shieldwallgen/proc/setup_field(NSEW = 0)
|
||||
var/turf/T = src.loc
|
||||
var/turf/T2 = src.loc
|
||||
/obj/machinery/shieldwallgen/proc/setup_field(direction)
|
||||
if(!direction)
|
||||
return
|
||||
|
||||
var/turf/T = loc
|
||||
var/obj/machinery/shieldwallgen/G
|
||||
var/steps = 0
|
||||
var/oNSEW = 0
|
||||
var/opposite_direction = turn(direction, 180)
|
||||
|
||||
if(!NSEW)//Make sure its ran right
|
||||
return
|
||||
|
||||
if(NSEW == 1)
|
||||
oNSEW = 2
|
||||
else if(NSEW == 2)
|
||||
oNSEW = 1
|
||||
else if(NSEW == 4)
|
||||
oNSEW = 8
|
||||
else if(NSEW == 8)
|
||||
oNSEW = 4
|
||||
|
||||
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator
|
||||
T = get_step(T2, NSEW)
|
||||
T2 = T
|
||||
steps += 1
|
||||
if(locate(/obj/machinery/shieldwallgen) in T)
|
||||
G = (locate(/obj/machinery/shieldwallgen) in T)
|
||||
steps -= 1
|
||||
for(var/i in 1 to shield_range) //checks out to 8 tiles away for another generator
|
||||
T = get_step(T, direction)
|
||||
G = (locate(/obj/machinery/shieldwallgen) in T)
|
||||
if(G)
|
||||
if(!G.active)
|
||||
return
|
||||
G.cleanup(oNSEW)
|
||||
G.cleanup_field(opposite_direction)
|
||||
break
|
||||
else
|
||||
steps++
|
||||
|
||||
if(isnull(G))
|
||||
if(!G || !steps) //no shield gen or no tiles between us and the gen
|
||||
return
|
||||
|
||||
T2 = src.loc
|
||||
for(var/i in 1 to steps) //creates each field tile
|
||||
T = get_step(T, opposite_direction)
|
||||
new/obj/machinery/shieldwall(T, src, G)
|
||||
return TRUE
|
||||
|
||||
for(var/dist = 0, dist < steps, dist += 1) // creates each field tile
|
||||
var/field_dir = get_dir(T2,get_step(T2, NSEW))
|
||||
T = get_step(T2, NSEW)
|
||||
T2 = T
|
||||
var/obj/machinery/shieldwall/CF = new/obj/machinery/shieldwall/(src, G) //(ref to this gen, ref to connected gen)
|
||||
CF.loc = T
|
||||
CF.setDir(field_dir)
|
||||
/obj/machinery/shieldwallgen/proc/cleanup_field(direction)
|
||||
var/obj/machinery/shieldwall/F
|
||||
var/obj/machinery/shieldwallgen/G
|
||||
var/turf/T = loc
|
||||
|
||||
for(var/i in 1 to shield_range)
|
||||
T = get_step(T, direction)
|
||||
|
||||
G = (locate(/obj/machinery/shieldwallgen) in T)
|
||||
if(G && !G.active)
|
||||
break
|
||||
|
||||
F = (locate(/obj/machinery/shieldwall) in T)
|
||||
if(F && (F.gen_primary == src || F.gen_secondary == src)) //it's ours, kill it.
|
||||
qdel(F)
|
||||
|
||||
/obj/machinery/shieldwallgen/can_be_unfasten_wrench(mob/user, silent)
|
||||
if(active)
|
||||
if(!silent)
|
||||
to_chat(user, "<span class='warning'>Turn off the shield generator first!</span>")
|
||||
return FAILED_UNFASTEN
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(active)
|
||||
to_chat(user, "<span class='warning'>Turn off the field generator first!</span>")
|
||||
return
|
||||
default_unfasten_wrench(user, W, 0)
|
||||
|
||||
else if(!anchored && !isinspace()) //Can't fasten this thing in space
|
||||
playsound(src.loc, W.usesound, 75, 1)
|
||||
to_chat(user, "<span class='notice'>You secure the external reinforcing bolts to the floor.</span>")
|
||||
anchored = 1
|
||||
return
|
||||
|
||||
else //You can unfasten it tough, if you somehow manage to fasten it.
|
||||
playsound(src.loc, W.usesound, 75, 1)
|
||||
to_chat(user, "<span class='notice'>You undo the external reinforcing bolts.</span>")
|
||||
anchored = 0
|
||||
return
|
||||
|
||||
if(W.GetID())
|
||||
if (allowed(user))
|
||||
else if(W.GetID())
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
to_chat(user, "<span class='notice'>You [src.locked ? "lock" : "unlock"] the controls.</span>")
|
||||
else
|
||||
@@ -401,31 +360,30 @@
|
||||
add_fingerprint(user)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/proc/cleanup(NSEW)
|
||||
var/obj/machinery/shieldwall/F
|
||||
var/obj/machinery/shieldwallgen/G
|
||||
var/turf/T = src.loc
|
||||
var/turf/T2 = src.loc
|
||||
|
||||
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for fields
|
||||
T = get_step(T2, NSEW)
|
||||
T2 = T
|
||||
if(locate(/obj/machinery/shieldwall) in T)
|
||||
F = (locate(/obj/machinery/shieldwall) in T)
|
||||
qdel(F)
|
||||
|
||||
if(locate(/obj/machinery/shieldwallgen) in T)
|
||||
G = (locate(/obj/machinery/shieldwallgen) in T)
|
||||
if(!G.active)
|
||||
break
|
||||
|
||||
/obj/machinery/shieldwallgen/Destroy()
|
||||
cleanup(1)
|
||||
cleanup(2)
|
||||
cleanup(4)
|
||||
cleanup(8)
|
||||
return ..()
|
||||
/obj/machinery/shieldwallgen/attack_hand(mob/user)
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be firmly secured to the floor first!</span>")
|
||||
return
|
||||
if(locked && !issilicon(user))
|
||||
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
||||
return
|
||||
if(!power)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be powered by a wire!</span>")
|
||||
return
|
||||
|
||||
if(active)
|
||||
user.visible_message("[user] turned \the [src] off.", \
|
||||
"<span class='notice'>You turn off \the [src].</span>", \
|
||||
"<span class='italics'>You hear heavy droning fade out.</span>")
|
||||
active = FALSE
|
||||
update_activity()
|
||||
else
|
||||
user.visible_message("[user] turned \the [src] on.", \
|
||||
"<span class='notice'>You turn on \the [src].</span>", \
|
||||
"<span class='italics'>You hear heavy droning.</span>")
|
||||
active = ACTIVE_SETUPFIELDS
|
||||
update_activity()
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
//////////////Containment Field START
|
||||
@@ -438,42 +396,36 @@
|
||||
density = 1
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
light_range = 3
|
||||
var/needs_power = 0
|
||||
var/active = 1
|
||||
var/delay = 5
|
||||
var/last_active
|
||||
var/mob/U
|
||||
var/needs_power = FALSE
|
||||
var/obj/machinery/shieldwallgen/gen_primary
|
||||
var/obj/machinery/shieldwallgen/gen_secondary
|
||||
|
||||
/obj/machinery/shieldwall/New(var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B)
|
||||
..()
|
||||
src.gen_primary = A
|
||||
src.gen_secondary = B
|
||||
if(A && B)
|
||||
needs_power = 1
|
||||
for(var/mob/living/L in get_turf(src.loc))
|
||||
visible_message("<span class='danger'>\The [src] is suddenly occupying the same space as \the [L]'s organs!</span>")
|
||||
/obj/machinery/shieldwall/Initialize(mapload, obj/machinery/shieldwallgen/first_gen, obj/machinery/shieldwallgen/second_gen)
|
||||
. = ..()
|
||||
gen_primary = first_gen
|
||||
gen_secondary = second_gen
|
||||
if(gen_primary && gen_secondary)
|
||||
needs_power = TRUE
|
||||
setDir(get_dir(gen_primary, gen_secondary))
|
||||
for(var/mob/living/L in get_turf(src))
|
||||
visible_message("<span class='danger'>\The [src] is suddenly occupying the same space as \the [L]!</span>")
|
||||
L.gib()
|
||||
|
||||
/obj/machinery/shieldwall/Destroy()
|
||||
gen_primary = null
|
||||
gen_secondary = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/attack_hand(mob/user)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/shieldwall/process()
|
||||
if(needs_power)
|
||||
if(isnull(gen_primary)||isnull(gen_secondary))
|
||||
if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(!(gen_primary.active)||!(gen_secondary.active))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(prob(50))
|
||||
gen_primary.storedpower -= 10
|
||||
else
|
||||
gen_secondary.storedpower -=10
|
||||
drain_power(10)
|
||||
|
||||
/obj/machinery/shieldwall/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
switch(damage_type)
|
||||
@@ -489,37 +441,19 @@
|
||||
drain_power(damage_amount)
|
||||
|
||||
/obj/machinery/shieldwall/proc/drain_power(drain_amount)
|
||||
if(needs_power)
|
||||
var/obj/machinery/shieldwallgen/G
|
||||
if(prob(50))
|
||||
G = gen_primary
|
||||
else
|
||||
G = gen_secondary
|
||||
G.storedpower -= drain_amount
|
||||
|
||||
/obj/machinery/shieldwall/bullet_act(obj/item/projectile/P)
|
||||
. = ..()
|
||||
drain_power(P.damage)
|
||||
|
||||
|
||||
/obj/machinery/shieldwall/ex_act(severity, target)
|
||||
if(needs_power)
|
||||
var/drain_amount = 20
|
||||
switch(severity)
|
||||
if(1)
|
||||
drain_amount = 200
|
||||
if(2)
|
||||
drain_amount = 50
|
||||
drain_power(drain_amount)
|
||||
|
||||
if(needs_power && gen_primary)
|
||||
gen_primary.use_stored_power(drain_amount*0.5)
|
||||
if(gen_secondary) //using power may cause us to be destroyed
|
||||
gen_secondary.use_stored_power(drain_amount*0.5)
|
||||
|
||||
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(height==0)
|
||||
return FALSE
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return prob(20)
|
||||
else
|
||||
if (istype(mover, /obj/item/projectile))
|
||||
if(istype(mover, /obj/item/projectile))
|
||||
return prob(10)
|
||||
else
|
||||
return !src.density
|
||||
return !density
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
light_color = LIGHT_COLOR_BROWN
|
||||
|
||||
/obj/machinery/computer/slot_machine/New()
|
||||
/obj/machinery/computer/slot_machine/Initialize()
|
||||
..()
|
||||
jackpots = rand(1, 4) //false hope
|
||||
plays = rand(75, 200)
|
||||
@@ -47,9 +47,8 @@
|
||||
toggle_reel_spin(0)
|
||||
|
||||
for(var/cointype in typesof(/obj/item/weapon/coin))
|
||||
var/obj/item/weapon/coin/C = new cointype(src)
|
||||
coinvalues["[cointype]"] = C.value
|
||||
qdel(C)
|
||||
var/obj/item/weapon/coin/C = cointype
|
||||
coinvalues["[cointype]"] = initial(C.value)
|
||||
|
||||
/obj/machinery/computer/slot_machine/Destroy()
|
||||
if(balance)
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state)
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state)
|
||||
@@ -375,18 +375,13 @@
|
||||
if("dispense")
|
||||
if(!state_open)
|
||||
return
|
||||
switch(params["item"])
|
||||
if("helmet")
|
||||
helmet.loc = loc
|
||||
helmet = null
|
||||
if("suit")
|
||||
suit.loc = loc
|
||||
suit = null
|
||||
if("mask")
|
||||
mask.loc = loc
|
||||
mask = null
|
||||
if("storage")
|
||||
storage.loc = loc
|
||||
storage = null
|
||||
|
||||
var/static/list/valid_items = list("helmet", "suit", "mask", "storage")
|
||||
var/item_name = params["item"]
|
||||
if(item_name in valid_items)
|
||||
var/obj/item/I = vars[item_name]
|
||||
vars[item_name] = null
|
||||
if(I)
|
||||
I.forceMove(loc)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
if(surplus() < 1500)
|
||||
if(user) to_chat(user, "<span class='notice'>The connected wire doesn't have enough current.</span>")
|
||||
return
|
||||
for(var/obj/singularity/singulo in singularities)
|
||||
for(var/obj/singularity/singulo in GLOB.singularities)
|
||||
if(singulo.z == z)
|
||||
singulo.target = src
|
||||
icon_state = "[icontype]1"
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
|
||||
for(var/obj/singularity/singulo in singularities)
|
||||
for(var/obj/singularity/singulo in GLOB.singularities)
|
||||
if(singulo.target == src)
|
||||
singulo.target = null
|
||||
icon_state = "[icontype]0"
|
||||
@@ -88,7 +88,7 @@
|
||||
add_load(1500)
|
||||
if(cooldown <= world.time)
|
||||
cooldown = world.time + 100
|
||||
for(var/obj/singularity/singulo in singularities)
|
||||
for(var/obj/singularity/singulo in GLOB.singularities)
|
||||
if(singulo.z == z)
|
||||
say("The [singulo] is now [get_dist(src,singulo)] standard lengths away to the [dir2text(get_dir(src,singulo))]")
|
||||
else
|
||||
|
||||
@@ -533,7 +533,7 @@
|
||||
|
||||
/obj/item/device/syndicatedetonator/attack_self(mob/user)
|
||||
if(timer < world.time)
|
||||
for(var/obj/machinery/syndicatebomb/B in machines)
|
||||
for(var/obj/machinery/syndicatebomb/B in GLOB.machines)
|
||||
if(B.active)
|
||||
B.detonation_timer = world.time + BUTTON_DELAY
|
||||
detonated++
|
||||
@@ -545,7 +545,7 @@
|
||||
var/area/A = get_area(T)
|
||||
detonated--
|
||||
var/log_str = "[ADMIN_LOOKUPFLW(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] [ADMIN_JMP(T)]</a>."
|
||||
bombers += log_str
|
||||
GLOB.bombers += log_str
|
||||
message_admins(log_str)
|
||||
log_game("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name][COORD(T)]")
|
||||
detonated = 0
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
var/vmask, var/obj/item/device/radio/radio,
|
||||
var/message, var/name, var/job, var/realname,
|
||||
var/data, var/compression, var/list/level, var/freq, var/list/spans,
|
||||
var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell)
|
||||
var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell, var/datum/language/language)
|
||||
|
||||
message = copytext(message, 1, MAX_BROADCAST_LEN)
|
||||
|
||||
@@ -70,8 +70,6 @@
|
||||
var/atom/movable/virtualspeaker/virt = new /atom/movable/virtualspeaker(null)
|
||||
virt.name = name
|
||||
virt.job = job
|
||||
virt.languages_spoken = AM.languages_spoken
|
||||
virt.languages_understood = AM.languages_understood
|
||||
virt.source = AM
|
||||
virt.radio = radio
|
||||
virt.verb_say = verb_say
|
||||
@@ -85,7 +83,7 @@
|
||||
// --- Broadcast only to intercom devices ---
|
||||
|
||||
if(data == 1)
|
||||
for(var/obj/item/device/radio/intercom/R in all_radios["[freq]"])
|
||||
for(var/obj/item/device/radio/intercom/R in GLOB.all_radios["[freq]"])
|
||||
if(R.receive_range(freq, level) > -1)
|
||||
radios += R
|
||||
|
||||
@@ -93,7 +91,7 @@
|
||||
|
||||
else if(data == 2)
|
||||
|
||||
for(var/obj/item/device/radio/R in all_radios["[freq]"])
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"])
|
||||
if(R.subspace_transmission)
|
||||
continue
|
||||
|
||||
@@ -106,8 +104,8 @@
|
||||
|
||||
else if(data == 5)
|
||||
|
||||
for(var/obj/item/device/radio/R in all_radios["[freq]"])
|
||||
if(!R.centcom)
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"])
|
||||
if(!R.independent)
|
||||
continue
|
||||
|
||||
if(R.receive_range(freq, level) > -1)
|
||||
@@ -116,13 +114,13 @@
|
||||
// --- Broadcast to ALL radio devices ---
|
||||
|
||||
else
|
||||
for(var/obj/item/device/radio/R in all_radios["[freq]"])
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"])
|
||||
if(R.receive_range(freq, level) > -1)
|
||||
radios += R
|
||||
|
||||
var/freqtext = num2text(freq)
|
||||
for(var/obj/item/device/radio/R in all_radios["[SYND_FREQ]"]) //syndicate radios use magic that allows them to hear everything. this was already the case, now it just doesn't need the allinone anymore. solves annoying bugs that aren't worth solving.
|
||||
if(R.receive_range(SYND_FREQ, list(R.z)) > -1 && freqtext in radiochannelsreverse)
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[GLOB.SYND_FREQ]"]) //syndicate radios use magic that allows them to hear everything. this was already the case, now it just doesn't need the allinone anymore. solves annoying bugs that aren't worth solving.
|
||||
if(R.receive_range(GLOB.SYND_FREQ, list(R.z)) > -1 && freqtext in GLOB.reverseradiochannels)
|
||||
radios |= R
|
||||
|
||||
// Get a list of mobs who can hear from the radios we collected.
|
||||
@@ -132,278 +130,46 @@
|
||||
if (R.client && R.client.holder && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
|
||||
receive -= R
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTRADIO))
|
||||
receive |= M
|
||||
|
||||
var/rendered = virt.compose_message(virt, virt.languages_spoken, message, freq, spans) //Always call this on the virtualspeaker to advoid issues.
|
||||
var/rendered = virt.compose_message(virt, language, message, freq, spans) //Always call this on the virtualspeaker to advoid issues.
|
||||
for(var/atom/movable/hearer in receive)
|
||||
hearer.Hear(rendered, virt, AM.languages_spoken, message, freq, spans)
|
||||
hearer.Hear(rendered, virt, language, message, freq, spans)
|
||||
|
||||
if(length(receive))
|
||||
// --- This following recording is intended for research and feedback in the use of department radio channels ---
|
||||
|
||||
var/blackbox_msg = "[AM] [AM.say_quote(message, spans)]"
|
||||
if(istype(blackbox))
|
||||
if(istype(GLOB.blackbox))
|
||||
switch(freq)
|
||||
if(1459)
|
||||
blackbox.msg_common += blackbox_msg
|
||||
GLOB.blackbox.msg_common += blackbox_msg
|
||||
if(1351)
|
||||
blackbox.msg_science += blackbox_msg
|
||||
GLOB.blackbox.msg_science += blackbox_msg
|
||||
if(1353)
|
||||
blackbox.msg_command += blackbox_msg
|
||||
GLOB.blackbox.msg_command += blackbox_msg
|
||||
if(1355)
|
||||
blackbox.msg_medical += blackbox_msg
|
||||
GLOB.blackbox.msg_medical += blackbox_msg
|
||||
if(1357)
|
||||
blackbox.msg_engineering += blackbox_msg
|
||||
GLOB.blackbox.msg_engineering += blackbox_msg
|
||||
if(1359)
|
||||
blackbox.msg_security += blackbox_msg
|
||||
GLOB.blackbox.msg_security += blackbox_msg
|
||||
if(1441)
|
||||
blackbox.msg_deathsquad += blackbox_msg
|
||||
GLOB.blackbox.msg_deathsquad += blackbox_msg
|
||||
if(1213)
|
||||
blackbox.msg_syndicate += blackbox_msg
|
||||
GLOB.blackbox.msg_syndicate += blackbox_msg
|
||||
if(1349)
|
||||
blackbox.msg_service += blackbox_msg
|
||||
GLOB.blackbox.msg_service += blackbox_msg
|
||||
if(1347)
|
||||
blackbox.msg_cargo += blackbox_msg
|
||||
GLOB.blackbox.msg_cargo += blackbox_msg
|
||||
else
|
||||
blackbox.messages += blackbox_msg
|
||||
GLOB.blackbox.messages += blackbox_msg
|
||||
|
||||
spawn(50)
|
||||
qdel(virt)
|
||||
|
||||
/proc/Broadcast_SimpleMessage(source, frequency, text, data, mob/M, compression, level)
|
||||
|
||||
/* ###### Prepare the radio connection ###### */
|
||||
|
||||
if(!M)
|
||||
var/mob/living/carbon/human/H = new
|
||||
M = H
|
||||
|
||||
var/datum/radio_frequency/connection = SSradio.return_frequency(frequency)
|
||||
|
||||
var/display_freq = connection.frequency
|
||||
|
||||
var/list/receive = list()
|
||||
|
||||
|
||||
// --- Broadcast only to intercom devices ---
|
||||
|
||||
if(data == 1)
|
||||
for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq, level)
|
||||
|
||||
|
||||
// --- Broadcast only to intercoms and station-bounced radios ---
|
||||
|
||||
else if(data == 2)
|
||||
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
|
||||
if(R.subspace_transmission)
|
||||
continue
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
|
||||
// --- Broadcast to syndicate radio! ---
|
||||
|
||||
else if(data == 3)
|
||||
var/datum/radio_frequency/syndicateconnection = SSradio.return_frequency(SYND_FREQ)
|
||||
|
||||
for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(SYND_FREQ)
|
||||
|
||||
// --- Centcom radio, yo. ---
|
||||
|
||||
else if(data == 5)
|
||||
|
||||
for(var/obj/item/device/radio/R in all_radios["[RADIO_CHAT]"])
|
||||
if(R.centcom)
|
||||
receive |= R.send_hear(CENTCOM_FREQ)
|
||||
|
||||
// --- Broadcast to ALL radio devices ---
|
||||
|
||||
else
|
||||
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
|
||||
/* ###### Organize the receivers into categories for displaying the message ###### */
|
||||
|
||||
// Understood the message:
|
||||
var/list/heard_normal = list() // normal message
|
||||
|
||||
// Did not understand the message:
|
||||
var/list/heard_garbled = list() // garbled message (ie "f*c* **u, **i*er!")
|
||||
var/list/heard_gibberish= list() // completely screwed over message (ie "F%! (O*# *#!<>&**%!")
|
||||
|
||||
for (var/mob/R in receive)
|
||||
|
||||
/* --- Loop through the receivers and categorize them --- */
|
||||
|
||||
if (R.client && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
|
||||
continue
|
||||
|
||||
|
||||
// --- Check for compression ---
|
||||
if(compression > 0)
|
||||
|
||||
heard_gibberish += R
|
||||
continue
|
||||
|
||||
// --- Can understand the speech ---
|
||||
|
||||
if (R.languages_understood & M.languages_spoken)
|
||||
|
||||
heard_normal += R
|
||||
|
||||
// --- Can't understand the speech ---
|
||||
|
||||
else
|
||||
// - Just display a garbled message -
|
||||
|
||||
heard_garbled += R
|
||||
|
||||
|
||||
/* ###### Begin formatting and sending the message ###### */
|
||||
if (length(heard_normal) || length(heard_garbled) || length(heard_gibberish))
|
||||
|
||||
/* --- Some miscellaneous variables to format the string output --- */
|
||||
var/part_a = "<span class='radio'><span class='name'>" // goes in the actual output
|
||||
var/freq_text // the name of the channel
|
||||
|
||||
// --- Set the name of the channel ---
|
||||
switch(display_freq)
|
||||
|
||||
if(SYND_FREQ)
|
||||
freq_text = "#unkn"
|
||||
if(COMM_FREQ)
|
||||
freq_text = "Command"
|
||||
if(SCI_FREQ)
|
||||
freq_text = "Science"
|
||||
if(MED_FREQ)
|
||||
freq_text = "Medical"
|
||||
if(ENG_FREQ)
|
||||
freq_text = "Engineering"
|
||||
if(SEC_FREQ)
|
||||
freq_text = "Security"
|
||||
if(SERV_FREQ)
|
||||
freq_text = "Service"
|
||||
if(SUPP_FREQ)
|
||||
freq_text = "Supply"
|
||||
if(AIPRIV_FREQ)
|
||||
freq_text = "AI Private"
|
||||
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
||||
|
||||
|
||||
// --- If the frequency has not been assigned a name, just use the frequency as the name ---
|
||||
|
||||
if(!freq_text)
|
||||
freq_text = format_frequency(display_freq)
|
||||
|
||||
// --- Some more pre-message formatting ---
|
||||
|
||||
var/part_b_extra = ""
|
||||
if(data == 3) // intercepted radio message
|
||||
part_b_extra = " <i>(Intercepted)</i>"
|
||||
|
||||
// Create a radio headset for the sole purpose of using its icon
|
||||
var/obj/item/device/radio/headset/radio = new
|
||||
|
||||
var/part_b = "</span><b> \icon[radio]\[[freq_text]\][part_b_extra]</b> <span class='message'>"
|
||||
var/part_c = "</span></span>"
|
||||
|
||||
if (display_freq==SYND_FREQ)
|
||||
part_a = "<span class='syndradio'><span class='name'>"
|
||||
else if (display_freq==COMM_FREQ)
|
||||
part_a = "<span class='comradio'><span class='name'>"
|
||||
else if (display_freq==SCI_FREQ)
|
||||
part_a = "<span class='sciradio'><span class='name'>"
|
||||
else if (display_freq==MED_FREQ)
|
||||
part_a = "<span class='medradio'><span class='name'>"
|
||||
else if (display_freq==ENG_FREQ)
|
||||
part_a = "<span class='engradio'><span class='name'>"
|
||||
else if (display_freq==SEC_FREQ)
|
||||
part_a = "<span class='secradio'><span class='name'>"
|
||||
else if (display_freq==SERV_FREQ)
|
||||
part_a = "<span class='servradio'><span class='name'>"
|
||||
else if (display_freq==SUPP_FREQ)
|
||||
part_a = "<span class='suppradio'><span class='name'>"
|
||||
else if (display_freq==CENTCOM_FREQ)
|
||||
part_a = "<span class='centcomradio'><span class='name'>"
|
||||
else if (display_freq==AIPRIV_FREQ)
|
||||
part_a = "<span class='aiprivradio'><span class='name'>"
|
||||
|
||||
// --- This following recording is intended for research and feedback in the use of department radio channels ---
|
||||
|
||||
var/part_blackbox_b = "</span><b> \[[freq_text]\]</b> <span class='message'>"
|
||||
var/blackbox_msg = "[part_a][source][part_blackbox_b]\"[text]\"[part_c]"
|
||||
//var/blackbox_admin_msg = "[part_a][M.name] (Real name: [M.real_name])[part_blackbox_b][quotedmsg][part_c]"
|
||||
|
||||
//BR.messages_admin += blackbox_admin_msg
|
||||
if(istype(blackbox))
|
||||
switch(display_freq)
|
||||
if(1459)
|
||||
blackbox.msg_common += blackbox_msg
|
||||
if(1351)
|
||||
blackbox.msg_science += blackbox_msg
|
||||
if(1353)
|
||||
blackbox.msg_command += blackbox_msg
|
||||
if(1355)
|
||||
blackbox.msg_medical += blackbox_msg
|
||||
if(1357)
|
||||
blackbox.msg_engineering += blackbox_msg
|
||||
if(1359)
|
||||
blackbox.msg_security += blackbox_msg
|
||||
if(1441)
|
||||
blackbox.msg_deathsquad += blackbox_msg
|
||||
if(1213)
|
||||
blackbox.msg_syndicate += blackbox_msg
|
||||
if(1349)
|
||||
blackbox.msg_service += blackbox_msg
|
||||
if(1347)
|
||||
blackbox.msg_cargo += blackbox_msg
|
||||
else
|
||||
blackbox.messages += blackbox_msg
|
||||
|
||||
//End of research and feedback code.
|
||||
|
||||
/* ###### Send the message ###### */
|
||||
|
||||
/* --- Process all the mobs that heard the voice normally (understood) --- */
|
||||
|
||||
if (length(heard_normal))
|
||||
var/rendered = "[part_a][source][part_b]\"[text]\"[part_c]"
|
||||
|
||||
for (var/mob/R in heard_normal)
|
||||
R.show_message(rendered, 2)
|
||||
|
||||
/* --- Process all the mobs that heard a garbled voice (did not understand) --- */
|
||||
// Displays garbled message (ie "f*c* **u, **i*er!")
|
||||
|
||||
if (length(heard_garbled))
|
||||
var/quotedmsg = "\"[stars(text)]\""
|
||||
var/rendered = "[part_a][source][part_b][quotedmsg][part_c]"
|
||||
|
||||
for (var/mob/R in heard_garbled)
|
||||
R.show_message(rendered, 2)
|
||||
|
||||
|
||||
/* --- Complete gibberish. Usually happens when there's a compressed message --- */
|
||||
|
||||
if (length(heard_gibberish))
|
||||
var/quotedmsg = "\"[Gibberish(text, compression + 50)]\""
|
||||
var/rendered = "[part_a][Gibberish(source, compression + 50)][part_b][quotedmsg][part_c]"
|
||||
|
||||
for (var/mob/R in heard_gibberish)
|
||||
R.show_message(rendered, 2)
|
||||
|
||||
//Use this to test if an obj can communicate with a Telecommunications Network
|
||||
|
||||
/atom/proc/test_telecomms()
|
||||
@@ -432,7 +198,7 @@
|
||||
signal.frequency = 1459// Common channel
|
||||
|
||||
//#### Sending the signal to all subspace receivers ####//
|
||||
for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
|
||||
for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list)
|
||||
R.receive_signal(signal)
|
||||
|
||||
sleep(rand(10,25))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
var/universal_translate = 0 // set to 1 if it can translate nonhuman speech
|
||||
|
||||
req_access = list(access_tcomsat)
|
||||
req_access = list(GLOB.access_tcomsat)
|
||||
circuit = /obj/item/weapon/circuitboard/computer/comm_server
|
||||
|
||||
/obj/machinery/computer/telecomms/server/attack_hand(mob/user)
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
if(newfreq && canAccess(usr))
|
||||
if(findtext(num2text(newfreq), "."))
|
||||
newfreq *= 10 // shift the decimal one place
|
||||
if(newfreq == SYND_FREQ)
|
||||
if(newfreq == GLOB.SYND_FREQ)
|
||||
temp = "<font color = #FF0000>-% Error: Interference preventing filtering frequency: \"[newfreq] GHz\" %-</font color>"
|
||||
else
|
||||
if(!(newfreq in freq_listening) && newfreq < 10000)
|
||||
|
||||
@@ -33,13 +33,14 @@
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
if(signal.frequency == SYND_FREQ) // if syndicate broadcast, just
|
||||
if(signal.frequency == GLOB.SYND_FREQ) // if syndicate broadcast, just
|
||||
Broadcast_Message(signal.data["mob"],
|
||||
signal.data["vmask"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"],, signal.data["compression"], list(0, z), signal.frequency, signal.data["spans"],
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"])
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"],
|
||||
signal.data["language"])
|
||||
|
||||
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
They receive their message from a server after the message has been logged.
|
||||
*/
|
||||
|
||||
var/list/recentmessages = list() // global list of recent messages broadcasted : used to circumvent massive radio spam
|
||||
var/message_delay = 0 // To make sure restarting the recentmessages list is kept in sync
|
||||
GLOBAL_LIST_EMPTY(recentmessages) // global list of recent messages broadcasted : used to circumvent massive radio spam
|
||||
GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages list is kept in sync
|
||||
|
||||
/obj/machinery/telecomms/broadcaster
|
||||
name = "subspace broadcaster"
|
||||
@@ -38,9 +38,9 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
original.data["level"] = signal.data["level"]
|
||||
|
||||
var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["realname"]]"
|
||||
if(signal_message in recentmessages)
|
||||
if(signal_message in GLOB.recentmessages)
|
||||
return
|
||||
recentmessages.Add(signal_message)
|
||||
GLOB.recentmessages.Add(signal_message)
|
||||
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
@@ -56,17 +56,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
signal.data["vmask"], signal.data["radio"],
|
||||
signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"],
|
||||
0, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"],
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"])
|
||||
|
||||
|
||||
/** #### - Simple Broadcast - #### **/
|
||||
|
||||
if(signal.data["type"] == 1)
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_SimpleMessage(signal.data["name"], signal.frequency,
|
||||
signal.data["message"],null, null,
|
||||
signal.data["compression"], listening_level)
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"])
|
||||
|
||||
|
||||
/** #### - Artificial Broadcast - #### **/
|
||||
@@ -81,13 +71,13 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], 4, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"],
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"])
|
||||
signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"])
|
||||
|
||||
if(!message_delay)
|
||||
message_delay = 1
|
||||
if(!GLOB.message_delay)
|
||||
GLOB.message_delay = 1
|
||||
spawn(10)
|
||||
message_delay = 0
|
||||
recentmessages = list()
|
||||
GLOB.message_delay = 0
|
||||
GLOB.recentmessages = list()
|
||||
|
||||
/* --- Do a snazzy animation! --- */
|
||||
flick("broadcaster_send", src)
|
||||
@@ -110,8 +100,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/Destroy()
|
||||
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
|
||||
if(message_delay)
|
||||
message_delay = 0
|
||||
if(GLOB.message_delay)
|
||||
GLOB.message_delay = 0
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -133,4 +123,4 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
autolinkers = list("broadcasterB")
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/preset_left/birdstation
|
||||
name = "Broadcaster"
|
||||
name = "Broadcaster"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
if(is_freq_listening(signal))
|
||||
if(change_frequency)
|
||||
if(signal.frequency != SYND_FREQ)
|
||||
if(signal.frequency != GLOB.SYND_FREQ)
|
||||
signal.frequency = change_frequency
|
||||
|
||||
if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it
|
||||
@@ -72,25 +72,25 @@
|
||||
/obj/machinery/telecomms/bus/preset_one
|
||||
id = "Bus 1"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(SCI_FREQ, MED_FREQ)
|
||||
freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ)
|
||||
autolinkers = list("processor1", "science", "medical")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_two
|
||||
id = "Bus 2"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(SUPP_FREQ,SERV_FREQ)
|
||||
freq_listening = list(GLOB.SUPP_FREQ,GLOB.SERV_FREQ)
|
||||
autolinkers = list("processor2", "supply", "service")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_three
|
||||
id = "Bus 3"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(SEC_FREQ, COMM_FREQ)
|
||||
freq_listening = list(GLOB.SEC_FREQ, GLOB.COMM_FREQ)
|
||||
autolinkers = list("processor3", "security", "command")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_four
|
||||
id = "Bus 4"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(ENG_FREQ)
|
||||
freq_listening = list(GLOB.ENG_FREQ)
|
||||
autolinkers = list("processor4", "engineering", "common")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_four/New()
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
id = "Receiver A"
|
||||
network = "tcommsat"
|
||||
autolinkers = list("receiverA") // link to relay
|
||||
freq_listening = list(SCI_FREQ, MED_FREQ, SUPP_FREQ, SERV_FREQ) // science, medical, supply, service
|
||||
freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ, GLOB.SUPP_FREQ, GLOB.SERV_FREQ) // science, medical, supply, service
|
||||
|
||||
|
||||
//--PRESET RIGHT--//
|
||||
@@ -86,7 +86,7 @@
|
||||
id = "Receiver B"
|
||||
network = "tcommsat"
|
||||
autolinkers = list("receiverB") // link to relay
|
||||
freq_listening = list(COMM_FREQ, ENG_FREQ, SEC_FREQ) //command, engineering, security
|
||||
freq_listening = list(GLOB.COMM_FREQ, GLOB.ENG_FREQ, GLOB.SEC_FREQ) //command, engineering, security
|
||||
|
||||
//Common and other radio frequencies for people to freely use
|
||||
/obj/machinery/telecomms/receiver/preset_right/New()
|
||||
|
||||
@@ -72,7 +72,8 @@
|
||||
log.parameters["name"] = signal.data["name"]
|
||||
log.parameters["realname"] = signal.data["realname"]
|
||||
|
||||
log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough
|
||||
//log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough
|
||||
// TODO languages: ^ I don't know what this does
|
||||
|
||||
// If the signal is still compressed, make the log entry gibberish
|
||||
if(signal.data["compression"] > 0)
|
||||
@@ -141,22 +142,22 @@
|
||||
|
||||
/obj/machinery/telecomms/server/presets/science
|
||||
id = "Science Server"
|
||||
freq_listening = list(SCI_FREQ)
|
||||
freq_listening = list(GLOB.SCI_FREQ)
|
||||
autolinkers = list("science")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/medical
|
||||
id = "Medical Server"
|
||||
freq_listening = list(MED_FREQ)
|
||||
freq_listening = list(GLOB.MED_FREQ)
|
||||
autolinkers = list("medical")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/supply
|
||||
id = "Supply Server"
|
||||
freq_listening = list(SUPP_FREQ)
|
||||
freq_listening = list(GLOB.SUPP_FREQ)
|
||||
autolinkers = list("supply")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/service
|
||||
id = "Service Server"
|
||||
freq_listening = list(SERV_FREQ)
|
||||
freq_listening = list(GLOB.SERV_FREQ)
|
||||
autolinkers = list("service")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/common
|
||||
@@ -173,19 +174,19 @@
|
||||
|
||||
/obj/machinery/telecomms/server/presets/command
|
||||
id = "Command Server"
|
||||
freq_listening = list(COMM_FREQ)
|
||||
freq_listening = list(GLOB.COMM_FREQ)
|
||||
autolinkers = list("command")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/engineering
|
||||
id = "Engineering Server"
|
||||
freq_listening = list(ENG_FREQ)
|
||||
freq_listening = list(GLOB.ENG_FREQ)
|
||||
autolinkers = list("engineering")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/security
|
||||
id = "Security Server"
|
||||
freq_listening = list(SEC_FREQ)
|
||||
freq_listening = list(GLOB.SEC_FREQ)
|
||||
autolinkers = list("security")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/common/birdstation/New()
|
||||
..()
|
||||
freq_listening = list()
|
||||
freq_listening = list()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
Look at radio.dm for the prequel to this code.
|
||||
*/
|
||||
|
||||
var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
GLOBAL_LIST_EMPTY(telecomms_list)
|
||||
|
||||
/obj/machinery/telecomms
|
||||
icon = 'icons/obj/machines/telecomms.dmi'
|
||||
@@ -86,7 +86,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
"verb_say" = signal.data["verb_say"],
|
||||
"verb_ask" = signal.data["verb_ask"],
|
||||
"verb_exclaim" = signal.data["verb_exclaim"],
|
||||
"verb_yell" = signal.data["verb_yell"]
|
||||
"verb_yell" = signal.data["verb_yell"],
|
||||
"language" = signal.data["language"]
|
||||
)
|
||||
|
||||
// Keep the "original" signal constant
|
||||
@@ -133,7 +134,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
|
||||
|
||||
/obj/machinery/telecomms/New()
|
||||
telecomms_list += src
|
||||
GLOB.telecomms_list += src
|
||||
..()
|
||||
|
||||
//Set the listening_level if there's none.
|
||||
@@ -155,13 +156,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
for(var/obj/machinery/telecomms/T in urange(20, src, 1))
|
||||
add_link(T)
|
||||
else
|
||||
for(var/obj/machinery/telecomms/T in telecomms_list)
|
||||
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list)
|
||||
add_link(T)
|
||||
|
||||
|
||||
/obj/machinery/telecomms/Destroy()
|
||||
telecomms_list -= src
|
||||
for(var/obj/machinery/telecomms/comm in telecomms_list)
|
||||
GLOB.telecomms_list -= src
|
||||
for(var/obj/machinery/telecomms/comm in GLOB.telecomms_list)
|
||||
comm.links -= src
|
||||
links = list()
|
||||
return ..()
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
var/list/L = list()
|
||||
var/list/areaindex = list()
|
||||
if(regime_set == "Teleporter")
|
||||
for(var/obj/item/device/radio/beacon/R in teleportbeacons)
|
||||
for(var/obj/item/device/radio/beacon/R in GLOB.teleportbeacons)
|
||||
var/turf/T = get_turf(R)
|
||||
if(!T)
|
||||
continue
|
||||
@@ -173,7 +173,7 @@
|
||||
continue
|
||||
L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R
|
||||
|
||||
for(var/obj/item/weapon/implant/tracking/I in tracked_implants)
|
||||
for(var/obj/item/weapon/implant/tracking/I in GLOB.tracked_implants)
|
||||
if(!I.imp_in || !ismob(I.loc))
|
||||
continue
|
||||
else
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
var/cooldown_timer
|
||||
var/robot_cell_charge = 5000
|
||||
var/obj/effect/countdown/transformer/countdown
|
||||
|
||||
var/mob/living/silicon/ai/masterAI
|
||||
|
||||
/obj/machinery/transformer/New()
|
||||
// On us
|
||||
..()
|
||||
@@ -103,6 +104,10 @@
|
||||
|
||||
// So he can't jump out the gate right away.
|
||||
R.SetLockdown()
|
||||
if(masterAI)
|
||||
R.connected_ai = masterAI
|
||||
R.lawsync()
|
||||
R.lawupdate = 1
|
||||
addtimer(CALLBACK(src, .proc/unlock_new_robot, R), 50)
|
||||
|
||||
/obj/machinery/transformer/proc/unlock_new_robot(mob/living/silicon/robot/R)
|
||||
@@ -110,7 +115,7 @@
|
||||
sleep(30)
|
||||
if(R)
|
||||
R.SetLockdown(0)
|
||||
R.notify_ai(1)
|
||||
R.notify_ai(NEW_BORG)
|
||||
|
||||
/obj/machinery/transformer/conveyor/New()
|
||||
..()
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine.
|
||||
|
||||
/obj/machinery/vending/New()
|
||||
/obj/machinery/vending/Initialize()
|
||||
..()
|
||||
wires = new /datum/wires/vending(src)
|
||||
if(refill_canister) //constructable vending machine
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
while(R.amount>0)
|
||||
var/obj/O = new dump_path(loc)
|
||||
step(O, pick(alldirs)) //we only drop 20% of the total of each products and spread it
|
||||
step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it
|
||||
R.amount -= 5 //around to not fill the turf with too many objects.
|
||||
dump_amount++
|
||||
if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate)
|
||||
@@ -528,6 +528,7 @@
|
||||
if(icon_vend) //Show the vending animation if needed
|
||||
flick(icon_vend,src)
|
||||
new R.product_path(get_turf(src))
|
||||
feedback_add_details("vending_machine_usage","[R.product_path]|[src.type]")
|
||||
vend_ready = 1
|
||||
return
|
||||
|
||||
@@ -690,7 +691,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/snack
|
||||
name = "\improper Getmore Chocolate Corp"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
|
||||
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
|
||||
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
|
||||
icon_state = "snack"
|
||||
@@ -705,7 +706,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
name = "\improper Random Snackies"
|
||||
desc = "Uh oh!"
|
||||
|
||||
/obj/machinery/vending/snack/random/New()
|
||||
/obj/machinery/vending/snack/random/Initialize()
|
||||
..()
|
||||
var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random)
|
||||
new T(get_turf(src))
|
||||
@@ -757,7 +758,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
name = "\improper Random Drinkies"
|
||||
desc = "Uh oh!"
|
||||
|
||||
/obj/machinery/vending/cola/random/New()
|
||||
/obj/machinery/vending/cola/random/Initialize()
|
||||
..()
|
||||
var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random)
|
||||
new T(get_turf(src))
|
||||
@@ -911,7 +912,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/hydronutrients
|
||||
name = "\improper NutriMax"
|
||||
desc = "A plant nutrients vendor"
|
||||
desc = "A plant nutrients vendor."
|
||||
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
|
||||
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
|
||||
icon_state = "nutri"
|
||||
@@ -994,8 +995,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
/obj/item/clothing/mask/joy = 1,
|
||||
/obj/item/clothing/head/cueball = 1,
|
||||
/obj/item/clothing/under/scratch = 1,
|
||||
/obj/item/clothing/under/sailor = 1,
|
||||
/obj/item/clothing/head/clownpiece = 1,/obj/item/clothing/under/clownpiece = 1, /obj/item/clothing/suit/clownpiece = 1)
|
||||
/obj/item/clothing/under/sailor = 1)
|
||||
contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 2,/obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/sunglasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2)
|
||||
premium = list(/obj/item/clothing/suit/pirate/captain = 2, /obj/item/clothing/head/pirate/captain = 2, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1, /obj/item/weapon/skub = 1)
|
||||
refill_canister = /obj/item/weapon/vending_refill/autodrobe
|
||||
@@ -1119,23 +1119,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
/obj/item/clothing/head/beanie=1, /obj/item/clothing/head/beanie/black=1, /obj/item/clothing/head/beanie/red=1, /obj/item/clothing/head/beanie/green=1, /obj/item/clothing/head/beanie/darkblue=1,
|
||||
/obj/item/clothing/head/beanie/purple=1, /obj/item/clothing/head/beanie/yellow=1, /obj/item/clothing/head/beanie/orange=1, /obj/item/clothing/head/beanie/cyan=1, /obj/item/clothing/head/beanie/christmas=1,
|
||||
/obj/item/clothing/head/beanie/striped=1, /obj/item/clothing/head/beanie/stripedred=1, /obj/item/clothing/head/beanie/stripedblue=1, /obj/item/clothing/head/beanie/stripedgreen=1,
|
||||
/obj/item/clothing/suit/jacket/letterman_red=1,
|
||||
/obj/item/clothing/under/wintercasualwear=1,
|
||||
/obj/item/clothing/under/casualwear=1,
|
||||
/obj/item/clothing/under/casualhoodie=1,
|
||||
/obj/item/clothing/under/casualhoodie/skirt=1,
|
||||
/obj/item/clothing/under/bb_sweater=2,
|
||||
/obj/item/clothing/under/bb_sweater/blue=2,
|
||||
/obj/item/clothing/under/bb_sweater/green=2,
|
||||
/obj/item/clothing/under/bb_sweater/purple =2,
|
||||
/obj/item/clothing/under/bb_sweater/red=2)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1,
|
||||
/obj/item/clothing/under/wedding/bride_orange=1,
|
||||
/obj/item/clothing/under/wedding/bride_purple=1,
|
||||
/obj/item/clothing/under/wedding/bride_blue=1,
|
||||
/obj/item/clothing/under/wedding/bride_red=1,
|
||||
/obj/item/clothing/under/wedding/bride_white=1,
|
||||
/obj/item/clothing/under/keyholesweater=1)
|
||||
/obj/item/clothing/suit/jacket/letterman_red=1)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1)
|
||||
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/suit/jacket/leather/overcoat=1,/obj/item/clothing/under/pants/mustangjeans=1,/obj/item/clothing/neck/necklace/dope=3,/obj/item/clothing/suit/jacket/letterman_nanotrasen=1)
|
||||
refill_canister = /obj/item/weapon/vending_refill/clothing
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
user.dna.add_mutation(COLDRES)
|
||||
user.dna.add_mutation(TK)
|
||||
|
||||
ticker.mode.traitors += user.mind
|
||||
SSticker.mode.traitors += user.mind
|
||||
user.mind.special_role = "Avatar of the Wish Granter"
|
||||
|
||||
var/datum/objective/hijack/hijack = new
|
||||
|
||||
Reference in New Issue
Block a user