diff --git a/code/modules/modular_computers/file_system/programs/ntmessenger.dm b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
index 60689724e1b..a1e70ef224f 100644
--- a/code/modules/modular_computers/file_system/programs/ntmessenger.dm
+++ b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
@@ -54,6 +54,7 @@
var/obj/item/photo/pic = attacking_item
saved_image = pic.picture
ProcessPhoto()
+ user.balloon_alert(user, "photo uploaded")
return TRUE
/datum/computer_file/program/messenger/proc/ScrubMessengerList()
@@ -196,6 +197,19 @@
sending_virus = !sending_virus
return UI_UPDATE
+ if("PDA_selectPhoto")
+ if(!issilicon(usr))
+ return
+ var/mob/living/silicon/user = usr
+ if(!user.aicamera)
+ return
+ var/datum/picture/selected_photo = user.aicamera.selectpicture(user)
+ if(!selected_photo)
+ return
+ saved_image = selected_photo
+ ProcessPhoto()
+ return TRUE
+
/datum/computer_file/program/messenger/ui_static_data(mob/user)
var/list/data = ..()
@@ -295,7 +309,8 @@
"ref" = REF(computer),
"targets" = targets,
"rigged" = rigged,
- "photo" = photo_path,
+ "photo" = saved_image,
+ "photo_path" = photo_path,
"automated" = FALSE,
))
if(rigged) //Will skip the message server and go straight to the hub so it can't be cheesed by disabling the message server machine
@@ -322,7 +337,9 @@
message_data["contents"] = html_decode(signal.format_message())
message_data["outgoing"] = TRUE
message_data["ref"] = signal.data["ref"]
+ message_data["photo_path"] = signal.data["photo_path"]
message_data["photo"] = signal.data["photo"]
+ message_data["target_details"] = signal.format_target()
// Show it to ghosts
var/ghost_message = span_name("[message_data["name"]] [rigged ? "Rigged" : ""] PDA Message --> [span_name("[signal.format_target()]")]: [signal.format_message()]")
@@ -350,6 +367,8 @@
last_text_everyone = world.time
messages += list(message_data)
+ saved_image = null
+ photo_path = null
return TRUE
/datum/computer_file/program/messenger/proc/receive_message(datum/signal/subspace/messaging/tablet_msg/signal)
@@ -360,6 +379,7 @@
message_data["outgoing"] = FALSE
message_data["ref"] = signal.data["ref"]
message_data["automated"] = signal.data["automated"]
+ message_data["photo_path"] = signal.data["photo_path"]
message_data["photo"] = signal.data["photo"]
messages += list(message_data)
@@ -384,9 +404,9 @@
var/inbound_message = signal.format_message()
inbound_message = emoji_parse(inbound_message)
- if(ringer_status && L.is_literate())
- to_chat(L, "[icon2html(src)] PDA message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [inbound_message] [reply]")
-
+ if(L.is_literate())
+ var/photo_message = message_data["photo"] ? " (Photo)" : ""
+ to_chat(L, span_infoplain("[icon2html(computer)] PDA message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [inbound_message][photo_message] [reply]"))
if (ringer_status)
computer.ring(ringtone)
diff --git a/code/modules/photography/camera/silicon_camera.dm b/code/modules/photography/camera/silicon_camera.dm
index 43c980165f2..836ecc2690a 100644
--- a/code/modules/photography/camera/silicon_camera.dm
+++ b/code/modules/photography/camera/silicon_camera.dm
@@ -15,15 +15,15 @@
to_chat(user, span_notice("Camera mode: [in_camera_mode ? "Activated" : "Deactivated"]."))
/obj/item/camera/siliconcam/proc/selectpicture(mob/user)
- var/list/nametemp = list()
+ RETURN_TYPE(/datum/picture)
if(!length(stored))
- to_chat(usr, span_warning("No images saved"))
+ to_chat(user, span_notice("ERROR: No stored photos located."))
return
+ var/list/nametemp = list()
var/list/temp = list()
- for(var/i in stored)
- var/datum/picture/p = i
- nametemp += p.picture_name
- temp[p.picture_name] = p
+ for(var/datum/picture/stored_photo as anything in stored)
+ nametemp += stored_photo.picture_name
+ temp[stored_photo.picture_name] = stored_photo
var/find = tgui_input_list(user, "Select image", "Storage", nametemp)
if(isnull(find))
return
diff --git a/tgui/packages/tgui/interfaces/NtosMessenger.js b/tgui/packages/tgui/interfaces/NtosMessenger.js
index c15447b5419..7a2a6d08c22 100644
--- a/tgui/packages/tgui/interfaces/NtosMessenger.js
+++ b/tgui/packages/tgui/interfaces/NtosMessenger.js
@@ -104,6 +104,13 @@ const ContactsScreen = (props, context) => {
content={`Sort by: ${sortByJob ? 'Job' : 'Name'}`}
onClick={() => act('PDA_changeSortStyle')}
/>
+ {!!isSilicon && (
+