From 8dcfdff5767338cfb2c90ee030a3a7eca8048f02 Mon Sep 17 00:00:00 2001
From: RaveRadbury <3204033+RaveRadbury@users.noreply.github.com>
Date: Wed, 24 Apr 2019 08:30:27 -0700
Subject: [PATCH] [READY] pAI's have headsets and can use encryption keys
(#43603)
* pAI's have little AI headsets and can use encryption keys.
* pAI's now spawn radio AND headset.
Reverted radio code and changed new variables to the new headset var
* Undid the comment out of radio code.
As far as I can tell this isn't working properly though. Tried testing it locally and can't enable/disable radio as pAI or master.
* Removed redundant null keyslots.
* Final version
It should all work.
# Conflicts:
# code/game/objects/items/devices/radio/headset.dm
# code/modules/mob/living/silicon/pai/pai.dm
* Merge
* Mergies
* Update code/modules/mob/living/silicon/pai/pai.dm
Co-Authored-By: RaveRadbury <3204033+RaveRadbury@users.noreply.github.com>
---
code/game/machinery/announcement_system.dm | 2 +-
code/game/objects/items/devices/paicard.dm | 1 +
.../objects/items/devices/radio/headset.dm | 9 +++++++--
code/modules/mob/living/silicon/ai/ai.dm | 2 +-
code/modules/mob/living/silicon/pai/pai.dm | 15 ++++++++++++++-
.../mob/living/silicon/pai/software.dm | 19 +++++++++++++++++--
6 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 92e3aba7391..1b00785bba4 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
/obj/machinery/announcement_system/Initialize()
. = ..()
GLOB.announcement_systems += src
- radio = new /obj/item/radio/headset/ai(src)
+ radio = new /obj/item/radio/headset/silicon/ai(src)
update_icon()
/obj/machinery/announcement_system/update_icon()
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index ca07878b8df..384ab9c1ee4 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -157,3 +157,4 @@
return
if(pai && !pai.holoform)
pai.emp_act(severity)
+
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 2f1fa3bf22f..1cf7b794bd2 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -261,12 +261,17 @@ GLOBAL_LIST_INIT(channel_tokens, list(
. = ..()
AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
-/obj/item/radio/headset/ai
+/obj/item/radio/headset/silicon/pai
+ name = "\proper mini Integrated Subspace Transceiver "
+ subspace_transmission = FALSE
+
+
+/obj/item/radio/headset/silicon/ai
name = "\proper Integrated Subspace Transceiver "
keyslot2 = new /obj/item/encryptionkey/ai
command = TRUE
-/obj/item/radio/headset/ai/can_receive(freq, level)
+/obj/item/radio/headset/silicon/can_receive(freq, level)
return ..(freq, level, TRUE)
/obj/item/radio/headset/attackby(obj/item/W, mob/user, params)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index fa1824e2d89..d15d9412cde 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -148,7 +148,7 @@
aiPDA.name = real_name + " (" + aiPDA.ownjob + ")"
aiMulti = new(src)
- radio = new /obj/item/radio/headset/ai(src)
+ radio = new /obj/item/radio/headset/silicon/ai(src)
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
deploy_action.Grant(src)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 73392737814..09337f51066 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -26,6 +26,7 @@
var/speakDoubleExclamation = "alarms"
var/speakQuery = "queries"
+ var/obj/item/radio/headset // The pAI's headset
var/obj/item/pai_cable/cable // The cable we produce and use when door or camera jacking
var/master // Name of the one who commands us
@@ -55,6 +56,7 @@
var/obj/item/instrument/piano_synth/internal_instrument
+ var/encryptmod = FALSE
var/holoform = FALSE
var/canholo = TRUE
var/obj/item/card/id/access_card = null
@@ -106,7 +108,7 @@
card = P
signaler = new(src)
if(!radio)
- radio = new /obj/item/radio(src)
+ radio = new /obj/item/radio/headset/silicon/pai(src)
//PDA
pda = new(src)
@@ -289,3 +291,14 @@
/mob/living/silicon/pai/process()
emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth)
+
+/obj/item/paicard/attackby(obj/item/W, mob/user, params)
+ ..()
+ user.set_machine(src)
+ if(pai.encryptmod == TRUE)
+ if(W.tool_behaviour == TOOL_SCREWDRIVER)
+ pai.radio.attackby(W, user, params)
+ else if(istype(W, /obj/item/encryptionkey))
+ pai.radio.attackby(W, user, params)
+ else
+ to_chat(user, "Encryption Key ports not configured.")
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 8a603afc165..74d7101c539 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -1,5 +1,4 @@
// TODO:
-// - Additional radio modules
// - Potentially roll HUDs and Records into one
// - Shock collar/lock system for prisoner pAIs?
// - Put cable in user's hand instead of on the ground
@@ -20,7 +19,8 @@
"universal translator" = 35,
//"projection array" = 15
"remote signaller" = 5,
- "loudness booster" = 25
+ "loudness booster" = 25,
+ "encryption keys" = 20
)
/mob/living/silicon/pai/proc/paiInterface()
@@ -51,6 +51,8 @@
left_part = softwareMedicalRecord()
if("securityrecord")
left_part = softwareSecurityRecord()
+ if("encryptionkeys")
+ left_part = softwareEncryptionKeys()
if("translator")
left_part = softwareTranslator()
if("atmosensor")
@@ -252,6 +254,9 @@
else
var/datum/atom_hud/med = GLOB.huds[med_hud]
med.remove_hud_from(src)
+ if("encryptionkeys")
+ if(href_list["toggle"])
+ encryptmod = TRUE
if("translator")
if(href_list["toggle"])
grant_all_languages(TRUE)
@@ -320,6 +325,8 @@
dat += "Facial Recognition Suite[(secHUD) ? " On" : " Off"]
"
if(s == "medical HUD")
dat += "Medical Analysis Suite[(medHUD) ? " On" : " Off"]
"
+ if(s == "encryption keys")
+ dat += "Channel Encryption Firmware[(encryptmod) ? " On" : " Off"]
"
if(s == "universal translator")
var/datum/language_holder/H = get_language_holder()
dat += "Universal Translator[H.omnitongue ? " On" : " Off"]
"
@@ -471,6 +478,14 @@
. += "
\nBack
"
return .
+// Encryption kets
+/mob/living/silicon/pai/proc/softwareEncryptionKeys()
+ var/dat = {"