diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 1e0183499b6..cd73303a734 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -17,6 +17,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
var/image/screen_layer
var/screen_color = "#00ff0d"
var/last_notify = 0
+ var/screen_msg
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
if(user.stat || user.stunned)
@@ -259,6 +260,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
"}
*/
+ if(screen_msg)
+ dat += "Message from [pai.name]
[screen_msg]"
else
if(looking_for_personality)
dat += {"
diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm
index fff39d06ce2..6018e0387f2 100644
--- a/code/modules/mob/living/silicon/pai/pai_vr.dm
+++ b/code/modules/mob/living/silicon/pai/pai_vr.dm
@@ -376,3 +376,58 @@
else
hide_glow = FALSE
update_icon()
+
+/mob/living/silicon/pai/verb/screen_message(message as text|null)
+ set category = "pAI Commands"
+ set name = "Screen Message"
+ set desc = "Allows you to display a message on your screen. This will show up in the chat of anyone who is holding your card."
+
+ if (src.client)
+ if(client.prefs.muted & MUTE_IC)
+ to_chat(src, "You cannot speak in IC (muted).")
+ return
+ if(loc != card)
+ to_chat(src, "Your message won't be visible while unfolded!")
+ if (!message)
+ message = tgui_input_text(src, "Enter text you would like to show on your screen.","Screen Message")
+ message = sanitize_or_reflect(message,src)
+ if (!message)
+ return
+ message = capitalize(message)
+ if (stat == DEAD)
+ return
+ card.screen_msg = message
+ var/logmsg = "(CARD SCREEN)[message]"
+ log_say(logmsg,src)
+ to_chat(src, "You print a message to your screen, \"[message]\"")
+ if(isliving(card.loc))
+ var/mob/living/L = card.loc
+ if(L.client)
+ to_chat(L, "[src.name]'s screen prints, \"[message]\"")
+ else return
+ else if(isbelly(card.loc))
+ var/obj/belly/b = card.loc
+ if(b.owner.client)
+ to_chat(b.owner, "[src.name]'s screen prints, \"[message]\"")
+ else return
+ else if(istype(card.loc, /obj/item/device/pda))
+ var/obj/item/device/pda/p = card.loc
+ if(isliving(p.loc))
+ var/mob/living/L = p.loc
+ if(L.client)
+ to_chat(L, "[src.name]'s screen prints, \"[message]\"")
+ else return
+ else if(isbelly(p.loc))
+ var/obj/belly/b = card.loc
+ if(b.owner.client)
+ to_chat(b.owner, "[src.name]'s screen prints, \"[message]\"")
+ else return
+ else return
+ else return
+ to_chat(src, "Your message was relayed.")
+ for (var/mob/G in player_list)
+ if (istype(G, /mob/new_player))
+ continue
+ else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears))
+ if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder)
+ to_chat(G, "[src.name]'s screen prints, \"[message]\"")