diff --git a/code/__DATASTRUCTURES/globals.dm b/code/__DATASTRUCTURES/globals.dm
index 808f8da757..c7aa865573 100644
--- a/code/__DATASTRUCTURES/globals.dm
+++ b/code/__DATASTRUCTURES/globals.dm
@@ -10,7 +10,7 @@
#define GLOBAL_PROTECT(X)\
/datum/controller/global_vars/InitGlobal##X(){\
..();\
- gvars_datum_protected_varlist += #X;\
+ gvars_datum_protected_varlist[#X] = TRUE;\
}
#else
#define GLOBAL_PROTECT(X)
diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm
index 0ffd8d8580..abda33b136 100644
--- a/code/__HELPERS/priority_announce.dm
+++ b/code/__HELPERS/priority_announce.dm
@@ -43,8 +43,10 @@
var/obj/item/paper/P = new /obj/item/paper(C.loc)
P.name = "paper - '[title]'"
P.info = text
- C.messagetitle.Add("[title]")
- C.messagetext.Add(text)
+ var/datum/comm_message/message = new
+ message.title = title
+ message.content = text
+ C.add_message(message)
P.update_icon()
/proc/minor_announce(message, title = "Attention:", alert)
diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm
index 8a90e75a6b..fd9f717103 100644
--- a/code/citadel/cit_guns.dm
+++ b/code/citadel/cit_guns.dm
@@ -1157,6 +1157,7 @@ obj/item/projectile/bullet/c10mm/soporific
name = "\improper Foam Force Mk.37F"
desc = "A licensed foam-firing reproduction of a handgun with a toggle-locking mechanism manufactured by CX Armories. This model is coated with a special polychromic material. Uses standard foam pistol magazines."
icon_state = "p37_foam"
+ pin = /obj/item/device/firing_pin
spawnwithmagazine = TRUE
mag_type = /obj/item/ammo_box/magazine/toy/pistol
can_suppress = FALSE
diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm
index 6aca9c1911..095e69573a 100644
--- a/code/controllers/globals.dm
+++ b/code/controllers/globals.dm
@@ -40,18 +40,18 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
stat("Globals:", statclick.update("Edit"))
/datum/controller/global_vars/can_vv_get(var_name)
- if(var_name in gvars_datum_protected_varlist)
+ if(gvars_datum_protected_varlist[var_name])
return FALSE
return ..()
/datum/controller/global_vars/vv_edit_var(var_name, var_value)
- if((var_name in gvars_datum_protected_varlist))
+ if(gvars_datum_protected_varlist[var_name])
return FALSE
return ..()
/datum/controller/global_vars/Initialize()
gvars_datum_init_order = list()
- gvars_datum_protected_varlist = list("gvars_datum_protected_varlist")
+ gvars_datum_protected_varlist = list("gvars_datum_protected_varlist" = TRUE)
var/list/global_procs = typesof(/datum/controller/global_vars/proc)
var/expected_len = vars.len - gvars_datum_in_built_vars.len
if(global_procs.len != expected_len)
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index ab2ba54431..0af06dc005 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -18,6 +18,8 @@ SUBSYSTEM_DEF(mapping)
var/list/shuttle_templates = list()
var/list/shelter_templates = list()
+ var/list/areas_in_z = list()
+
var/loading_ruins = FALSE
/datum/controller/subsystem/mapping/PreInit()
diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm
new file mode 100644
index 0000000000..1867a097d3
--- /dev/null
+++ b/code/datums/looping_sounds/weather.dm
@@ -0,0 +1,47 @@
+/datum/looping_sound/active_outside_ashstorm
+ mid_sounds = list(
+ 'sound/weather/ashstorm/outside/active_mid1.ogg'=1,
+ 'sound/weather/ashstorm/outside/active_mid1.ogg'=1,
+ 'sound/weather/ashstorm/outside/active_mid1.ogg'=1
+ )
+ mid_length = 80
+ start_sound = 'sound/weather/ashstorm/outside/active_start.ogg'
+ start_length = 130
+ end_sound = 'sound/weather/ashstorm/outside/active_end.ogg'
+ volume = 80
+
+/datum/looping_sound/active_inside_ashstorm
+ mid_sounds = list(
+ 'sound/weather/ashstorm/inside/active_mid1.ogg'=1,
+ 'sound/weather/ashstorm/inside/active_mid2.ogg'=1,
+ 'sound/weather/ashstorm/inside/active_mid3.ogg'=1
+ )
+ mid_length = 80
+ start_sound = 'sound/weather/ashstorm/inside/active_start.ogg'
+ start_length = 130
+ end_sound = 'sound/weather/ashstorm/inside/active_end.ogg'
+ volume = 80
+
+/datum/looping_sound/weak_outside_ashstorm
+ mid_sounds = list(
+ 'sound/weather/ashstorm/outside/weak_mid1.ogg'=1,
+ 'sound/weather/ashstorm/outside/weak_mid2.ogg'=1,
+ 'sound/weather/ashstorm/outside/weak_mid3.ogg'=1
+ )
+ mid_length = 80
+ start_sound = 'sound/weather/ashstorm/outside/weak_start.ogg'
+ start_length = 130
+ end_sound = 'sound/weather/ashstorm/outside/weak_end.ogg'
+ volume = 50
+
+/datum/looping_sound/weak_inside_ashstorm
+ mid_sounds = list(
+ 'sound/weather/ashstorm/inside/weak_mid1.ogg'=1,
+ 'sound/weather/ashstorm/inside/weak_mid2.ogg'=1,
+ 'sound/weather/ashstorm/inside/weak_mid3.ogg'=1
+ )
+ mid_length = 80
+ start_sound = 'sound/weather/ashstorm/inside/weak_start.ogg'
+ start_length = 130
+ end_sound = 'sound/weather/ashstorm/inside/weak_end.ogg'
+ volume = 50
\ No newline at end of file
diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm
index a1dc9ece69..14133c6a11 100644
--- a/code/datums/weather/weather_types/ash_storm.dm
+++ b/code/datums/weather/weather_types/ash_storm.dm
@@ -5,18 +5,15 @@
telegraph_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter."
telegraph_duration = 300
- telegraph_sound = 'sound/lavaland/ash_storm_windup.ogg'
telegraph_overlay = "light_ash"
weather_message = "Smoldering clouds of scorching ash billow down around you! Get inside!"
weather_duration_lower = 600
weather_duration_upper = 1200
- weather_sound = 'sound/lavaland/ash_storm_start.ogg'
weather_overlay = "ash_storm"
end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now."
end_duration = 300
- end_sound = 'sound/lavaland/ash_storm_end.ogg'
end_overlay = "light_ash"
area_type = /area/lavaland/surface/outdoors
@@ -26,6 +23,53 @@
probability = 90
+ var/datum/looping_sound/active_outside_ashstorm/sound_ao = new(list(), FALSE, TRUE)
+ var/datum/looping_sound/active_inside_ashstorm/sound_ai = new(list(), FALSE, TRUE)
+ var/datum/looping_sound/weak_outside_ashstorm/sound_wo = new(list(), FALSE, TRUE)
+ var/datum/looping_sound/weak_inside_ashstorm/sound_wi = new(list(), FALSE, TRUE)
+
+/datum/weather/ash_storm/telegraph()
+ . = ..()
+ var/list/inside_areas = list()
+ var/list/outside_areas = list()
+ var/list/eligible_areas = SSmapping.areas_in_z["[target_z]"]
+ for(var/i in 1 to eligible_areas.len)
+ var/area/place = eligible_areas[i]
+ if(place.outdoors)
+ outside_areas += place
+ else
+ inside_areas += place
+ CHECK_TICK
+
+ sound_ao.output_atoms = outside_areas
+ sound_ai.output_atoms = inside_areas
+ sound_wo.output_atoms = outside_areas
+ sound_wi.output_atoms = inside_areas
+
+ sound_wo.start()
+ sound_wi.start()
+
+/datum/weather/ash_storm/start()
+ . = ..()
+ sound_wo.stop()
+ sound_wi.stop()
+
+ sound_ao.start()
+ sound_ai.start()
+
+/datum/weather/ash_storm/wind_down()
+ . = ..()
+ sound_ao.stop()
+ sound_ai.stop()
+
+ sound_wo.start()
+ sound_wi.start()
+
+/datum/weather/ash_storm/end()
+ . = ..()
+ sound_wo.stop()
+ sound_wi.stop()
+
/datum/weather/ash_storm/proc/is_ash_immune(mob/living/L)
if(ismecha(L.loc)) //Mechs are immune
return TRUE
@@ -50,7 +94,6 @@
desc = "A passing ash storm blankets the area in harmless embers."
weather_message = "Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by..."
- weather_sound = 'sound/lavaland/ash_storm_windup.ogg'
weather_overlay = "light_ash"
end_message = "The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet."
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 2d372d4c33..3b5e5d5d68 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -132,6 +132,22 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(!IS_DYNAMIC_LIGHTING(src))
add_overlay(/obj/effect/fullbright)
+ if(contents.len)
+ var/list/areas_in_z = SSmapping.areas_in_z
+ var/z
+ for(var/i in 1 to contents.len)
+ var/atom/thing = contents[i]
+ if(!thing)
+ continue
+ z = thing.z
+ break
+ if(!z)
+ WARNING("No z found for [src]")
+ return
+ if(!areas_in_z["[z]"])
+ areas_in_z["[z]"] = list()
+ areas_in_z["[z]"] += src
+
/area/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index d9d47bd771..63900d0f89 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -273,6 +273,7 @@ Credit where due:
if(plasmaman && !visualsOnly) //If we need to breathe from the plasma tank, we should probably start doing that
H.internal = H.get_item_for_held_index(2)
H.update_internals_hud_icon(1)
+ H.sec_hud_set_ID()
/obj/item/paper/servant_primer
name = "The Ark And You: A Primer On Servitude"
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 43582b99a3..f5aec83c4c 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -83,7 +83,7 @@
/datum/game_mode/traitor/proc/add_latejoin_traitor(datum/mind/character)
var/datum/antagonist/traitor/new_antag = new antag_datum(character)
new_antag.should_specialise = TRUE
- character.add_antag_datum(antag_datum)
+ character.add_antag_datum(new_antag)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 60260d2a4f..286bcee1f8 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -506,3 +506,14 @@ Class Procs:
. = ..()
if (AM == occupant)
occupant = null
+
+/obj/machinery/proc/adjust_item_drop_location(atom/movable/AM) // Adjust item drop location to a 3x3 grid inside the tile, returns slot id from 0 to 8
+ var/md5 = md5(AM.name) // Oh, and it's deterministic too. A specific item will always drop from the same slot.
+#if DM_VERSION > 511
+#warn Refactor the loop in /obj/machinery/proc/adjust_item_drop_location() to make use of 512's list-like access to characters in a string
+#endif
+ for (var/i in 1 to 32)
+ . += hex2num(copytext(md5,i,i+1))
+ . = . % 9
+ AM.pixel_x = -8 + ((.%3)*8)
+ AM.pixel_y = -8 + (round( . / 3)*8)
\ No newline at end of file
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 0ca59c45bc..0b8cc0721d 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -8,9 +8,10 @@
circuit = /obj/item/circuitboard/computer/communications
var/authenticated = 0
var/auth_id = "Unknown" //Who is currently logged in?
- var/list/datum/comm_message/messages = list()
- var/datum/comm_message/currmsg
- var/datum/comm_message/aicurrmsg
+ var/list/messagetitle = list()
+ var/list/messagetext = list()
+ var/currmsg = 0
+ var/aicurrmsg = 0
var/state = STATE_DEFAULT
var/aistate = STATE_DEFAULT
var/message_cooldown = 0
@@ -47,7 +48,7 @@
/obj/machinery/computer/communications/process()
if(..())
if(state != STATE_STATUSDISPLAY)
- updateDialog()
+ src.updateDialog()
/obj/machinery/computer/communications/Topic(href, href_list)
@@ -64,7 +65,7 @@
switch(href_list["operation"])
// main interface
if("main")
- state = STATE_DEFAULT
+ src.state = STATE_DEFAULT
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if("login")
var/mob/M = usr
@@ -74,13 +75,13 @@
I = M.get_idcard()
if(I && istype(I))
- if(check_access(I))
+ if(src.check_access(I))
authenticated = 1
auth_id = "[I.registered_name] ([I.assignment])"
if((20 in I.access))
authenticated = 2
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
- if(emagged)
+ if(src.emagged)
authenticated = 2
auth_id = "Unknown"
to_chat(M, "[src] lets out a quiet alarm as its login is overriden.")
@@ -131,7 +132,7 @@
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if("announce")
- if(authenticated==2)
+ if(src.authenticated==2)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
make_announcement(usr)
@@ -185,56 +186,53 @@
to_chat(usr, "Not enough credits.")
if("callshuttle")
- state = STATE_DEFAULT
- if(authenticated)
- state = STATE_CALLSHUTTLE
+ src.state = STATE_DEFAULT
+ if(src.authenticated)
+ src.state = STATE_CALLSHUTTLE
if("callshuttle2")
- if(authenticated)
+ if(src.authenticated)
SSshuttle.requestEvac(usr, href_list["call"])
if(SSshuttle.emergency.timer)
post_status("shuttle")
- state = STATE_DEFAULT
+ src.state = STATE_DEFAULT
if("cancelshuttle")
- state = STATE_DEFAULT
- if(authenticated)
- state = STATE_CANCELSHUTTLE
+ src.state = STATE_DEFAULT
+ if(src.authenticated)
+ src.state = STATE_CANCELSHUTTLE
if("cancelshuttle2")
- if(authenticated)
+ if(src.authenticated)
SSshuttle.cancelEvac(usr)
- state = STATE_DEFAULT
+ src.state = STATE_DEFAULT
if("messagelist")
- currmsg = 0
- state = STATE_MESSAGELIST
+ src.currmsg = 0
+ src.state = STATE_MESSAGELIST
if("viewmessage")
- state = STATE_VIEWMESSAGE
- if (!currmsg)
+ src.state = STATE_VIEWMESSAGE
+ if (!src.currmsg)
if(href_list["message-num"])
- var/msgnum = text2num(href_list["message-num"])
- currmsg = messages[msgnum]
+ src.currmsg = text2num(href_list["message-num"])
else
- state = STATE_MESSAGELIST
+ src.state = STATE_MESSAGELIST
if("delmessage")
- state = currmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST
+ src.state = (src.currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
if("delmessage2")
- if(authenticated)
- if(currmsg)
- if(aicurrmsg == currmsg)
- aicurrmsg = null
- messages -= currmsg
- currmsg = null
- state = STATE_MESSAGELIST
+ if(src.authenticated)
+ if(src.currmsg)
+ var/title = src.messagetitle[src.currmsg]
+ var/text = src.messagetext[src.currmsg]
+ src.messagetitle.Remove(title)
+ src.messagetext.Remove(text)
+ if(src.currmsg == src.aicurrmsg)
+ src.aicurrmsg = 0
+ src.currmsg = 0
+ src.state = STATE_MESSAGELIST
else
- state = STATE_VIEWMESSAGE
- if("respond")
- var/answer = text2num(href_list["answer"])
- if(!currmsg || !answer || currmsg.possible_answers.len < answer)
- state = STATE_MESSAGELIST
- currmsg.answered = answer
- state = STATE_VIEWMESSAGE
+ src.state = STATE_VIEWMESSAGE
if("status")
- state = STATE_STATUSDISPLAY
+ src.state = STATE_STATUSDISPLAY
+
if("securitylevel")
- tmp_alertlevel = text2num( href_list["newalertlevel"] )
+ src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
if(!tmp_alertlevel)
tmp_alertlevel = 0
state = STATE_CONFIRM_LEVEL
@@ -247,12 +245,12 @@
make_maint_all_access()
log_game("[key_name(usr)] enabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] enabled emergency maintenance access.")
- state = STATE_DEFAULT
+ src.state = STATE_DEFAULT
if("disableemergency")
revoke_maint_all_access()
log_game("[key_name(usr)] disabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] disabled emergency maintenance access.")
- state = STATE_DEFAULT
+ src.state = STATE_DEFAULT
// Status display stuff
if("setstat")
@@ -267,14 +265,14 @@
if("setmsg1")
stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40)
- updateDialog()
+ src.updateDialog()
if("setmsg2")
stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40)
- updateDialog()
+ src.updateDialog()
// OMG CENTCOM LETTERHEAD
if("MessageCentCom")
- if(authenticated==2)
+ if(src.authenticated==2)
if(!checkCCcooldown())
to_chat(usr, "Arrays recycling. Please stand by.")
return
@@ -290,7 +288,7 @@
// OMG SYNDICATE ...LETTERHEAD
if("MessageSyndicate")
- if((authenticated==2) && (emagged))
+ if((src.authenticated==2) && (src.emagged))
if(!checkCCcooldown())
to_chat(usr, "Arrays recycling. Please stand by.")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
@@ -308,10 +306,10 @@
to_chat(usr, "Backup routing data restored!")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
emagged = FALSE
- updateDialog()
+ src.updateDialog()
if("nukerequest") //When there's no other way
- if(authenticated==2)
+ if(src.authenticated==2)
if(!checkCCcooldown())
to_chat(usr, "Arrays recycling. Please stand by.")
return
@@ -327,45 +325,41 @@
// AI interface
if("ai-main")
- aicurrmsg = null
- aistate = STATE_DEFAULT
+ src.aicurrmsg = 0
+ src.aistate = STATE_DEFAULT
if("ai-callshuttle")
- aistate = STATE_CALLSHUTTLE
+ src.aistate = STATE_CALLSHUTTLE
if("ai-callshuttle2")
SSshuttle.requestEvac(usr, href_list["call"])
- aistate = STATE_DEFAULT
+ src.aistate = STATE_DEFAULT
if("ai-messagelist")
- aicurrmsg = null
- aistate = STATE_MESSAGELIST
+ src.aicurrmsg = 0
+ src.aistate = STATE_MESSAGELIST
if("ai-viewmessage")
- aistate = STATE_VIEWMESSAGE
- if (!aicurrmsg)
+ src.aistate = STATE_VIEWMESSAGE
+ if (!src.aicurrmsg)
if(href_list["message-num"])
- var/msgnum = text2num(href_list["message-num"])
- aicurrmsg = messages[msgnum]
+ src.aicurrmsg = text2num(href_list["message-num"])
else
- aistate = STATE_MESSAGELIST
+ src.aistate = STATE_MESSAGELIST
if("ai-delmessage")
- aistate = aicurrmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST
+ src.aistate = (src.aicurrmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
if("ai-delmessage2")
- if(aicurrmsg)
- if(currmsg == aicurrmsg)
- currmsg = null
- messages -= aicurrmsg
- aicurrmsg = null
- aistate = STATE_MESSAGELIST
- if("ai-respond")
- var/answer = text2num(href_list["answer"])
- if(!aicurrmsg || !answer || aicurrmsg.possible_answers.len < answer)
- aistate = STATE_MESSAGELIST
- aicurrmsg.answered = answer
- aistate = STATE_VIEWMESSAGE
+ if(src.aicurrmsg)
+ var/title = src.messagetitle[src.aicurrmsg]
+ var/text = src.messagetext[src.aicurrmsg]
+ src.messagetitle.Remove(title)
+ src.messagetext.Remove(text)
+ if(src.currmsg == src.aicurrmsg)
+ src.currmsg = 0
+ src.aicurrmsg = 0
+ src.aistate = STATE_MESSAGELIST
if("ai-status")
- aistate = STATE_STATUSDISPLAY
+ src.aistate = STATE_STATUSDISPLAY
if("ai-announce")
make_announcement(usr, 1)
if("ai-securitylevel")
- tmp_alertlevel = text2num( href_list["newalertlevel"] )
+ src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
if(!tmp_alertlevel)
tmp_alertlevel = 0
var/old_level = GLOB.security_level
@@ -386,23 +380,24 @@
if(SEC_LEVEL_BLUE)
SSblackbox.inc("alert_comms_blue",1)
tmp_alertlevel = 0
- aistate = STATE_DEFAULT
+ src.aistate = STATE_DEFAULT
if("ai-changeseclevel")
- aistate = STATE_ALERT_LEVEL
+ src.aistate = STATE_ALERT_LEVEL
+
if("ai-emergencyaccess")
- aistate = STATE_TOGGLE_EMERGENCY
+ src.aistate = STATE_TOGGLE_EMERGENCY
if("ai-enableemergency")
make_maint_all_access()
log_game("[key_name(usr)] enabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] enabled emergency maintenance access.")
- aistate = STATE_DEFAULT
+ src.aistate = STATE_DEFAULT
if("ai-disableemergency")
revoke_maint_all_access()
log_game("[key_name(usr)] disabled emergency maintenance access.")
message_admins("[key_name_admin(usr)] disabled emergency maintenance access.")
- aistate = STATE_DEFAULT
+ src.aistate = STATE_DEFAULT
- updateUsrDialog()
+ src.updateUsrDialog()
/obj/machinery/computer/communications/attackby(obj/I, mob/user, params)
if(istype(I, /obj/item/card/id))
@@ -422,7 +417,7 @@
/obj/machinery/computer/communications/attack_hand(mob/user)
if(..())
return
- if (z > 6)
+ if (src.z > 6)
to_chat(user, "Unable to establish a connection: \black You're too far away from the station!")
return
@@ -434,19 +429,19 @@
var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500)
- popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
if(issilicon(user))
- var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access
+ var/dat2 = src.interact_ai(user) // give the AI a different interact proc to limit its access
if(dat2)
dat += dat2
popup.set_content(dat)
popup.open()
return
- switch(state)
+ switch(src.state)
if(STATE_DEFAULT)
- if (authenticated)
+ if (src.authenticated)
if(SSshuttle.emergencyCallAmount)
if(SSshuttle.emergencyLastCallLoc)
dat += "Most recent shuttle call/recall traced to: [format_text(SSshuttle.emergencyLastCallLoc.name)]
"
@@ -454,33 +449,33 @@
dat += "Unable to trace most recent shuttle call/recall signal.
"
dat += "Logged in as: [auth_id]"
dat += "
"
- dat += "
\[ Log Out \]
"
+ dat += "
\[ Log Out \]
"
dat += "
General Functions"
- dat += "
\[ Message List \]"
+ dat += "
\[ Message List \]"
switch(SSshuttle.emergency.mode)
if(SHUTTLE_IDLE, SHUTTLE_RECALL)
- dat += "
\[ Call Emergency Shuttle \]"
+ dat += "
\[ Call Emergency Shuttle \]"
else
- dat += "
\[ Cancel Shuttle Call \]"
+ dat += "
\[ Cancel Shuttle Call \]"
- dat += "
\[ Set Status Display \]"
- if (authenticated==2)
+ dat += "
\[ Set Status Display \]"
+ if (src.authenticated==2)
dat += "
Captain Functions"
- dat += "
\[ Make a Captain's Announcement \]"
+ dat += "
\[ Make a Captain's Announcement \]"
if(CONFIG_GET(string/cross_server_address))
- dat += "
\[ Send a message to an allied station \]"
+ dat += "
\[ Send a message to an allied station \]"
if(SSmapping.config.allow_custom_shuttles)
- dat += "
\[ Purchase Shuttle \]"
- dat += "
\[ Change Alert Level \]"
- dat += "
\[ Emergency Maintenance Access \]"
- dat += "
\[ Request Nuclear Authentication Codes \]"
+ dat += "
\[ Purchase Shuttle \]"
+ dat += "
\[ Change Alert Level \]"
+ dat += "
\[ Emergency Maintenance Access \]"
+ dat += "
\[ Request Nuclear Authentication Codes \]"
if(!emagged)
- dat += "
\[ Send Message to CentCom \]"
+ dat += "
\[ Send Message to CentCom \]"
else
- dat += "
\[ Send Message to \[UNKNOWN\] \]"
- dat += "
\[ Restore Backup Routing Data \]"
+ dat += "
\[ Send Message to \[UNKNOWN\] \]"
+ dat += "
\[ Restore Backup Routing Data \]"
else
- dat += "
\[ Log In \]"
+ dat += "
\[ Log In \]"
if(STATE_CALLSHUTTLE)
dat += get_call_shuttle_form()
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
@@ -489,63 +484,56 @@
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
if(STATE_MESSAGELIST)
dat += "Messages:"
- for(var/i in 1 to messages.len)
- var/datum/comm_message/M = messages[i]
- dat += "
[M.title]"
+ for(var/i = 1; i<=src.messagetitle.len; i++)
+ dat += "
[src.messagetitle[i]]"
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(STATE_VIEWMESSAGE)
- if (currmsg)
- dat += "[currmsg.title]
[currmsg.content]"
- if(!currmsg.answered && currmsg.possible_answers.len)
- for(var/i in 1 to currmsg.possible_answers.len)
- var/answer = currmsg.possible_answers[i]
- dat += "
\[ Answer : [answer] \]"
- else if(currmsg.answered)
- var/answered = currmsg.possible_answers[currmsg.answered]
- dat += "
Archived Answer : [answered]"
- dat += "
\[ Delete \]"
+ if (src.currmsg)
+ dat += "[src.messagetitle[src.currmsg]]
[src.messagetext[src.currmsg]]"
+ if (src.authenticated)
+ dat += "
\[ Delete \]"
else
- aistate = STATE_MESSAGELIST
- attack_hand(user)
- return null
+ src.state = STATE_MESSAGELIST
+ src.attack_hand(user)
+ return
if(STATE_DELMESSAGE)
- if (currmsg)
- dat += "Are you sure you want to delete this message? \[ OK | Cancel \]"
+ if (src.currmsg)
+ dat += "Are you sure you want to delete this message? \[ OK | Cancel \]"
else
- state = STATE_MESSAGELIST
- attack_hand(user)
+ src.state = STATE_MESSAGELIST
+ src.attack_hand(user)
return
if(STATE_STATUSDISPLAY)
dat += "Set Status Displays
"
- dat += "\[ Clear \]
"
- dat += "\[ Shuttle ETA \]
"
- dat += "\[ Message \]"
- dat += "