From 137d356269696ad2feed7baf2b19c3abc9d39357 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Sat, 4 Sep 2021 05:57:25 +0200
Subject: [PATCH] [MIRROR] pAI minor refactor and cyborg PDA code/visual
improvements (#7961)
* pAI minor refactor and cyborg PDA code/visual improvements (#61112)
* pAI minor refactor and cyborg PDA code/visual improvements
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
---
code/_onclick/hud/pai.dm | 9 +--
code/controllers/subsystem/pai.dm | 8 +--
code/game/objects/items/devices/PDA/PDA.dm | 18 ++---
code/modules/assembly/signaler.dm | 18 +++++
code/modules/mob/living/silicon/pai/pai.dm | 17 +++--
.../mob/living/silicon/pai/software.dm | 65 +++----------------
6 files changed, 56 insertions(+), 79 deletions(-)
diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm
index 953b28c720e..c779e81f618 100644
--- a/code/_onclick/hud/pai.dm
+++ b/code/_onclick/hud/pai.dm
@@ -88,13 +88,14 @@
return
var/mob/living/silicon/pai/pAI = usr
var/list/modifiers = params2list(params)
- if(iscarbon(pAI.card.loc))
+ var/mob/living/carbon/holder = get(pAI.card.loc, /mob/living/carbon)
+ if(holder)
if (LAZYACCESS(modifiers, RIGHT_CLICK))
- pAI.hostscan.attack_secondary(pAI.card.loc, pAI)
+ pAI.hostscan.attack_secondary(holder, pAI)
else
- pAI.hostscan.attack(pAI.card.loc, pAI)
+ pAI.hostscan.attack(holder, pAI)
else
- to_chat(src, span_warning("You are not being carried by anyone!"))
+ to_chat(usr, span_warning("You are not being carried by anyone!"))
return FALSE
/atom/movable/screen/pai/crew_manifest
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index fb1e0a86b3f..703405f3331 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -58,13 +58,13 @@ SUBSYSTEM_DEF(pai)
candidate.savefile_load(usr)
//In case people have saved unsanitized stuff.
if(candidate.name)
- candidate.name = copytext_char(sanitize(candidate.name),1,MAX_NAME_LEN)
+ candidate.name = copytext_char(candidate.name,1,MAX_NAME_LEN)
if(candidate.description)
- candidate.description = copytext_char(sanitize(candidate.description),1,MAX_MESSAGE_LEN)
+ candidate.description = copytext_char(candidate.description,1,MAX_MESSAGE_LEN)
if(candidate.role)
- candidate.role = copytext_char(sanitize(candidate.role),1,MAX_MESSAGE_LEN)
+ candidate.role = copytext_char(candidate.role,1,MAX_MESSAGE_LEN)
if(candidate.comments)
- candidate.comments = copytext_char(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
+ candidate.comments = copytext_char(candidate.comments,1,MAX_MESSAGE_LEN)
if("submit")
if(candidate)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index c452dd61f4f..1b209716d45 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -1207,24 +1207,24 @@ GLOBAL_LIST_EMPTY(PDAs)
to_chat(user, span_alert("Turn on your receiver in order to send messages."))
return
- for (var/obj/item/pda/P in get_viewable_pdas())
- if (P == src)
+ for (var/obj/item/pda/pda as anything in get_viewable_pdas())
+ if (pda == src)
continue
- else if (P == aiPDA)
+ else if (pda == aiPDA)
continue
- plist[avoid_assoc_duplicate_keys(P.owner, namecounts)] = P
+ plist[avoid_assoc_duplicate_keys(pda.owner, namecounts)] = pda
- var/c = input(user, "Please select a PDA") as null|anything in sortList(plist)
+ var/choice = tgui_input_list(user, "Please select a PDA", "PDA Messenger", sortList(plist))
- if (!c)
+ if (!choice)
return
- var/selected = plist[c]
+ var/selected = plist[choice]
if(aicamera.stored.len)
- var/add_photo = input(user,"Do you want to attach a photo?","Photo","No") as null|anything in list("Yes","No")
- if(add_photo=="Yes")
+ var/add_photo = tgui_alert(user,"Do you want to attach a photo?", "PDA Messenger", list("Yes","No"))
+ if(add_photo == "Yes")
var/datum/picture/Pic = aicamera.selectpicture(user)
aiPDA.picture = Pic
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 157be028163..851b79de446 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -200,3 +200,21 @@
return
/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I)
return
+
+/obj/item/assembly/signaler/internal
+ name = "internal remote signaling device"
+
+/obj/item/assembly/signaler/internal/ui_state(mob/user)
+ return GLOB.inventory_state
+
+/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, params)
+ return
+
+/obj/item/assembly/signaler/internal/screwdriver_act(mob/living/user, obj/item/I)
+ return
+
+/obj/item/assembly/signaler/internal/can_interact(mob/user)
+ if(istype(user, /mob/living/silicon/pai))
+ return TRUE
+ . = ..()
+
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 7fcb85d1f13..b0693900fb9 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -59,7 +59,7 @@
var/obj/machinery/door/hackdoor // The airlock being hacked
var/hackprogress = 0 // Possible values: 0 - 100, >= 100 means the hack is complete and will be reset upon next check
- var/obj/item/integrated_signaler/signaler // AI's signaller
+ var/obj/item/assembly/signaler/internal/signaler // AI's signaler
var/obj/item/instrument/piano_synth/internal_instrument
var/obj/machinery/newscaster //pAI Newscaster
@@ -136,7 +136,7 @@
forceMove(P)
card = P
job = "Personal AI"
- signaler = new(src)
+ signaler = new /obj/item/assembly/signaler/internal(src)
hostscan = new /obj/item/healthanalyzer(src)
newscaster = new /obj/machinery/newscaster(src)
if(!aicamera)
@@ -316,13 +316,20 @@
/mob/living/silicon/pai/process(delta_time)
emitterhealth = clamp((emitterhealth + (emitter_regen_per_second * delta_time)), -50, emittermaxhealth)
-/obj/item/paicard/attackby(obj/item/W, mob/user, params)
- if(pai && (istype(W, /obj/item/encryptionkey) || W.tool_behaviour == TOOL_SCREWDRIVER))
+/mob/living/silicon/pai/can_interact_with(atom/A)
+ if(A == signaler) // Bypass for signaler
+ return TRUE
+
+ return ..()
+
+/obj/item/paicard/attackby(obj/item/used, mob/user, params)
+ if(pai && (istype(used, /obj/item/encryptionkey) || used.tool_behaviour == TOOL_SCREWDRIVER))
if(!pai.encryptmod)
to_chat(user, span_alert("Encryption Key ports not configured."))
return
user.set_machine(src)
- pai.radio.attackby(W, user, params)
+ pai.radio.attackby(used, user, params)
+ to_chat(user, span_notice("You insert [used] into the [src]."))
return
return ..()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 4a2475d2590..4a021c67f85 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -13,7 +13,7 @@
"digital messenger" = 5,
"atmosphere sensor" = 5,
"photography module" = 5,
- "remote signaller" = 10,
+ "remote signaler" = 10,
"medical records" = 10,
"security records" = 10,
"camera zoom" = 10,
@@ -68,10 +68,6 @@
left_part = medicalAnalysis()
if("doorjack")
left_part = softwareDoor()
- if("signaller")
- left_part = softwareSignal()
- if("loudness")
- left_part = softwareLoudness()
if("hostscan")
left_part = softwareHostScan()
@@ -165,23 +161,8 @@
if("camzoom")
aicamera.adjust_zoom(usr)
- if("signaller")
- if(href_list["send"])
- signaler.send_activation()
- audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*")
- playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
-
- if(href_list["freq"])
- var/new_frequency = (signaler.frequency + text2num(href_list["freq"]))
- if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ)
- new_frequency = sanitize_frequency(new_frequency)
- signaler.set_frequency(new_frequency)
-
- if(href_list["code"])
- signaler.code += text2num(href_list["code"])
- signaler.code = round(signaler.code)
- signaler.code = min(100, signaler.code)
- signaler.code = max(1, signaler.code)
+ if("signaler")
+ signaler.ui_interact(src)
if("directive")
if(href_list["getdna"])
@@ -281,8 +262,9 @@
if("loudness")
- if(subscreen == 1) // Open Instrument
- internal_instrument.interact(src)
+ if(!internal_instrument)
+ internal_instrument = new(src)
+ internal_instrument.interact(src) // Open Instrument
if("internalgps")
if(!internal_gps)
@@ -317,8 +299,8 @@
dat += "Medical Records
"
if(s == "security records")
dat += "Security Records
"
- if(s == "remote signaller")
- dat += "Remote Signaller
"
+ if(s == "remote signaler")
+ dat += "Remote Signaler
"
if(s == "loudness booster")
dat += "Loudness Booster
"
if(s == "internal gps")
@@ -414,28 +396,6 @@
// -=-=-=-= Software =-=-=-=-=- //
-//Remote Signaller
-/mob/living/silicon/pai/proc/softwareSignal()
- var/dat = ""
- dat += "