diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 35d707ec0f2..40e1aaf6c05 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -14,8 +14,8 @@ /// Spam alert prevention var/alert_cooldown - /// The emotion icon displayed. - var/emotion_icon = "off" + /// The icon displayed on the card's screen. + var/datum/pai_screen_image/screen_image = /datum/pai_screen_image/off /// Any pAI personalities inserted var/mob/living/silicon/pai/pai /// Prevents a crew member from hitting "request pAI" repeatedly @@ -67,7 +67,7 @@ if(QDELETED(src)) return pai = null - emotion_icon = initial(emotion_icon) + screen_image = initial(screen_image) update_appearance() /obj/item/pai_card/on_saboteur(datum/source, disrupt_duration) @@ -81,13 +81,13 @@ /obj/item/pai_card/update_overlays() . = ..() - . += "pai-[emotion_icon]" + . += image(icon = screen_image.icon, icon_state = screen_image.icon_state) if(pai?.hacking_cable) . += "[initial(icon_state)]-connector" /obj/item/pai_card/vv_edit_var(vname, vval) . = ..() - if(vname == NAMEOF(src, emotion_icon)) + if(vname == NAMEOF(src, screen_image)) update_appearance() /obj/item/pai_card/ui_interact(mob/user, datum/tgui/ui) @@ -283,7 +283,7 @@ return FALSE pai = downloaded RegisterSignal(pai, COMSIG_QDELETING, PROC_REF(on_pai_del)) - emotion_icon = "null" + screen_image = /datum/pai_screen_image/neutral update_appearance() playsound(src, 'sound/effects/pai_boot.ogg', 50, TRUE, -1) audible_message("[src] plays a cheerful startup noise!") diff --git a/code/modules/pai/datums/screen_icon.dm b/code/modules/pai/datums/screen_icon.dm new file mode 100644 index 00000000000..2115b8ea0d6 --- /dev/null +++ b/code/modules/pai/datums/screen_icon.dm @@ -0,0 +1,67 @@ +// Datums describing an icon that is overlaid on a pAI card, to make its screen show something. The +// player can select between any of these at any time. These are usually faces, but can +// realistically be anything (similar to an AI's display). + +/datum/pai_screen_image + // The name to show in the radial menu. + var/name + // The icon and icon state that is applied to the pAI device when this screen image is selected. + var/icon/icon = 'icons/obj/aicards.dmi' + var/icon_state + // The FontAwesome icon to use next to the "Display" button in the pAI's tgui interface window. + var/interface_icon + +/datum/pai_screen_image/angry + name = "Angry" + icon_state = "pai-angry" + interface_icon = "angry" + +/datum/pai_screen_image/cat + name = "Cat" + icon_state = "pai-cat" + interface_icon = "cat" + +/datum/pai_screen_image/extremely_happy + name = "Extremely Happy" + icon_state = "pai-extremely-happy" + interface_icon = "grin-beam" + +/datum/pai_screen_image/face + name = "Face" + icon_state = "pai-face" + interface_icon = "grin-alt" + +/datum/pai_screen_image/happy + name = "Happy" + icon_state = "pai-happy" + interface_icon = "smile" + +/datum/pai_screen_image/laugh + name = "Laugh" + icon_state = "pai-laugh" + interface_icon = "grin-tears" + +/datum/pai_screen_image/neutral + name = "Neutral" + icon_state = "pai-null" + interface_icon = "meh" + +/datum/pai_screen_image/off + name = "None" + icon_state = "pai-off" + interface_icon = "meh-blank" + +/datum/pai_screen_image/sad + name = "Sad" + icon_state = "pai-sad" + interface_icon = "sad-cry" + +/datum/pai_screen_image/sunglasses + name = "Sunglasses" + icon_state = "pai-sunglasses" + interface_icon = "sun" + +/datum/pai_screen_image/what + name = "What" + icon_state = "pai-what" + interface_icon = "frown-open" diff --git a/code/modules/pai/death.dm b/code/modules/pai/death.dm index 469f1757d47..b819e16bfce 100644 --- a/code/modules/pai/death.dm +++ b/code/modules/pai/death.dm @@ -13,7 +13,7 @@ if (!QDELETED(card) && loc != card) card.forceMove(drop_location()) card.pai = null - card.emotion_icon = initial(card.emotion_icon) + card.screen_image = initial(card.screen_image) card.update_appearance() qdel(src) diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 728ac6427ce..3735313a692 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -123,20 +123,6 @@ "puppy" = TRUE, "spider" = TRUE, ) - /// List of all available card overlays. - var/static/list/possible_overlays = list( - "null", - "angry", - "cat", - "extremely-happy", - "face", - "happy", - "laugh", - "off", - "sad", - "sunglasses", - "what" - ) /mob/living/silicon/pai/add_sensors() //pAIs have to buy their HUDs return diff --git a/code/modules/pai/software.dm b/code/modules/pai/software.dm index 285193c7e4c..f0b61e05929 100644 --- a/code/modules/pai/software.dm +++ b/code/modules/pai/software.dm @@ -8,7 +8,7 @@ /mob/living/silicon/pai/ui_data(mob/user) var/list/data = list() data["door_jack"] = hacking_cable - data["image"] = card.emotion_icon + data["screen_image_interface_icon"] = card.screen_image.interface_icon data["installed"] = installed_software data["ram"] = ram return data @@ -135,16 +135,16 @@ */ /mob/living/silicon/pai/proc/change_image() var/list/possible_choices = list() - for(var/face_option in possible_overlays) + for(var/datum/pai_screen_image/screen_option as anything in subtypesof(/datum/pai_screen_image)) var/datum/radial_menu_choice/choice = new - choice.name = face_option - choice.image = image(icon = card.icon, icon_state = "pai-[face_option]") - possible_choices[face_option] += choice + choice.name = screen_option.name + choice.image = image(icon = screen_option.icon, icon_state = screen_option.icon_state) + possible_choices[screen_option] += choice var/atom/anchor = get_atom_on_turf(src) var/new_image = show_radial_menu(src, anchor, possible_choices, custom_check = CALLBACK(src, PROC_REF(check_menu), anchor), radius = 40, require_near = TRUE) if(isnull(new_image)) return FALSE - card.emotion_icon = new_image + card.screen_image = new_image card.update_appearance() return TRUE diff --git a/tgstation.dme b/tgstation.dme index eee2a4e6421..9be45492d4f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5523,6 +5523,7 @@ #include "code\modules\pai\say.dm" #include "code\modules\pai\shell.dm" #include "code\modules\pai\software.dm" +#include "code\modules\pai\datums\screen_icon.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\contract.dm" diff --git a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx index 95b6d5c5589..cba1e75635b 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx @@ -1,7 +1,6 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, LabeledList, Section, Stack } from 'tgui-core/components'; -import { ICON_MAP } from './constants'; import { PaiData } from './types'; export function SystemDisplay(props) { @@ -65,7 +64,7 @@ function SystemWallpaper(props) { */ function SystemInfo(props) { const { act, data } = useBackend(); - const { image, master_dna, master_name } = data; + const { screen_image_interface_icon, master_dna, master_name } = data; return (