diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index c83b4241dba..c8e5ec5d85a 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -17,6 +17,15 @@ var/bomb_set
use_power = 0
var/previous_level = ""
var/lastentered = ""
+ var/immobile = 0 //Not all nukes should be moved
+
+/obj/machinery/nuclearbomb/selfdestruct
+ name = "station self-destruct terminal"
+ desc = "For when it all gets too much to bear. Do not taunt."
+ icon = 'icons/obj/machines/bignuke.dmi'
+ anchored = 1 //stops it being moved
+ immobile = 1 //prevents it from ever being moved
+ layer = 4
/obj/machinery/nuclearbomb/process()
if (src.timing)
@@ -140,8 +149,10 @@ var/bomb_set
src.timing = 0
bomb_set = 0
if (href_list["anchor"])
- if(!isinspace())
+ if(!isinspace()&&(!immobile))
src.anchored = !( src.anchored )
+ else if(immobile)
+ usr << "This device is immovable!"
else
usr << "There is nothing to anchor to!"
src.add_fingerprint(usr)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 0d68cace971..710b1db4bd8 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -19,7 +19,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/aistate = STATE_DEFAULT
var/message_cooldown = 0
var/ai_message_cooldown = 0
- var/centcom_message_cooldown = 0
var/tmp_alertlevel = 0
var/const/STATE_DEFAULT = 1
var/const/STATE_CALLSHUTTLE = 2
@@ -113,6 +112,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("announce")
if(src.authenticated==2 && !message_cooldown)
make_announcement(usr)
+ else if (src.authenticated==2 && message_cooldown)
+ usr << "Intercomms recharging. Please stand by."
if("callshuttle")
src.state = STATE_DEFAULT
@@ -203,7 +204,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(CM.cooldownLeft())
usr << "Arrays recycling. Please stand by."
return
- var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
+ var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "")
if(!input || !(usr in view(1,src)))
return
Centcomm_announce(input, usr)
@@ -218,18 +219,33 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(CM.cooldownLeft())
usr << "Arrays recycling. Please stand by."
return
- var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
+ var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "")
if(!input || !(usr in view(1,src)))
return
Syndicate_announce(input, usr)
usr << "Message transmitted."
log_say("[key_name(usr)] has made a Syndicate announcement: [input]")
+ CM.lastTimeUsed = world.time
if("RestoreBackup")
usr << "Backup routing data restored!"
src.emagged = 0
src.updateDialog()
+ if("nukerequest") //When there's no other way
+ if(src.authenticated==2)
+ if(CM.cooldownLeft())
+ usr << "Arrays recycling. Please stand by."
+ return
+ var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","")
+ if(!input || !(usr in view(1,src)))
+ return
+ Nuke_request(input, usr)
+ usr << "Request sent."
+ log_say("[key_name(usr)] has requested the nuclear codes from Centcomm")
+ priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg')
+
+ CM.lastTimeUsed = world.time
// AI interface
@@ -371,6 +387,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += "
\[ Make a Captain's Announcement \]"
dat += "
\[ Change Alert Level \]"
dat += "
\[ Emergency Maintenance Access \]"
+ dat += "
\[ Request Nuclear Authentication Codes \]"
if(src.emagged == 0)
dat += "
\[ Send Message to Centcom \]"
else
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index b7131a68b98..58ece43cd47 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -36,3 +36,9 @@
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "SYNDICATE:[key_name(Sender, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]"
admins << msg
+
+/proc/Nuke_request(var/text , var/mob/Sender)
+ var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
+ msg = " NUKE CODE REQUEST:[key_name(Sender, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]"
+ admins << msg
+ admins << "At this current time, the nuke must have the code manually set via varedit."
\ No newline at end of file
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index d634f16f058..54583c227ca 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -144,6 +144,8 @@
make_maint_all_access()
feedback_inc("alert_keycard_auth_maint",1)
+
+
/var/emergency_access = 0
/proc/make_maint_all_access()
for(var/area/maintenance/A in world)
@@ -159,4 +161,5 @@
D.emergency = 0
D.update_icon(0)
minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:")
- emergency_access = 0
\ No newline at end of file
+ emergency_access = 0
+
diff --git a/html/changelogs/Dorsisdwarf-PR-7476.yml.txt b/html/changelogs/Dorsisdwarf-PR-7476.yml.txt
new file mode 100644
index 00000000000..df59e4aa824
--- /dev/null
+++ b/html/changelogs/Dorsisdwarf-PR-7476.yml.txt
@@ -0,0 +1,33 @@
+################################
+# Not An Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscdel (general adding of nice things)
+# rscadd (general deleting of nice things)
+# imageadd
+# imagedel
+# spellcheck (typo fixes)
+# experiment
+# tgs (TG-ported fixes?)
+#################################
+# Your name.
+author: Dorsidwarf
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added the ability to call Central Command for the nuclear authentication codes. This requires a captain-level ID and admin approval, and warns the crew."
diff --git a/icons/obj/machines/bignuke.dmi b/icons/obj/machines/bignuke.dmi
new file mode 100644
index 00000000000..c34506bb5f1
Binary files /dev/null and b/icons/obj/machines/bignuke.dmi differ
diff --git a/icons/obj/machines/selfdestruct.dmi b/icons/obj/machines/selfdestruct.dmi
new file mode 100644
index 00000000000..badea5e5285
Binary files /dev/null and b/icons/obj/machines/selfdestruct.dmi differ