diff --git a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm b/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm index 6da74c6b89f..dfc9916ab83 100644 --- a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm +++ b/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm @@ -121,6 +121,8 @@ return FALSE current_theme = target_theme + for(var/datum/nifsoft/installed_nifsoft as anything in loaded_nifsofts) + installed_nifsoft.update_theme() if("activate_nifsoft") var/datum/nifsoft/activated_nifsoft = locate(params["activated_nifsoft"]) in loaded_nifsofts diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts.dm b/modular_skyrat/modules/modular_implants/code/nifsofts.dm index 1bf551866f5..ddbff9cf86e 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts.dm @@ -18,6 +18,8 @@ var/buying_category = NIFSOFT_CATEGORY_GENERAL ///What font awesome icon is shown next to the name of the nifsoft? var/ui_icon = "floppy-disk" + ///What UI theme do we want to display to users if this NIFSoft has TGUI? + var/ui_theme = "default" ///Can the program be installed with other instances of itself? var/single_install = TRUE @@ -67,6 +69,7 @@ qdel(src) load_persistence_data() + update_theme() /datum/nifsoft/Destroy() if(active) @@ -148,6 +151,15 @@ /datum/nifsoft/ui_state(mob/user) return GLOB.conscious_state +/// Updates the theme of the NIFSoft to match the parent NIF +/datum/nifsoft/proc/update_theme() + var/obj/item/organ/internal/cyberimp/brain/nif/target_nif = parent_nif.resolve() + if(!target_nif) + return FALSE + + ui_theme = target_nif.current_theme + return TRUE + /// A disk that can upload NIFSofts to a recpient with a NIFSoft installed. /obj/item/disk/nifsoft_uploader name = "Generic NIFSoft datadisk" diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm index 4dc4434d59d..093e9e566b7 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm @@ -166,6 +166,7 @@ var/list/data = list() data["messages"] = message_list + data["theme"] = ui_theme data["receiving_data"] = receiving_data data["transmitting_data"] = transmitting_data diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm index 019ff546edc..2ec95a411ef 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm @@ -94,6 +94,17 @@ persistence.nif_soulcatcher_rooms = list2params(room_list) return TRUE +/datum/nifsoft/soulcatcher/update_theme() + . = ..() + if(!.) + return FALSE // uhoh + + var/datum/component/soulcatcher/current_soulcatcher = linked_soulcatcher.resolve() + if(!istype(current_soulcatcher)) + stack_trace("[src] ([REF(src)]) tried to update its theme when it was missing a linked_soulcatcher component!") + return FALSE + current_soulcatcher.ui_theme = ui_theme + /datum/modular_persistence ///A param string containing soulcatcher rooms var/nif_soulcatcher_rooms = "" diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm index 03512b2c205..88cca7817a2 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm @@ -18,6 +18,8 @@ GLOBAL_LIST_EMPTY(soulcatchers) var/list/soulcatcher_rooms = list() /// What soulcatcher room are verbs sending messages to? var/datum/soulcatcher_room/targeted_soulcatcher_room + /// What theme are we using for our soulcatcher UI? + var/ui_theme = "default" /// Are ghosts currently able to join this soulcatcher? var/ghost_joinable = TRUE diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm index 0c1d11c272e..5dbd31631ec 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm @@ -13,6 +13,7 @@ data["ghost_joinable"] = ghost_joinable data["require_approval"] = require_approval + data["theme"] = ui_theme data["communicate_as_parent"] = communicate_as_parent data["current_soul_count"] = length(get_current_souls()) data["max_souls"] = max_souls diff --git a/tgui/packages/tgui/interfaces/NifSoulPoem.js b/tgui/packages/tgui/interfaces/NifSoulPoem.js index f815f9287f8..9ced2081865 100644 --- a/tgui/packages/tgui/interfaces/NifSoulPoem.js +++ b/tgui/packages/tgui/interfaces/NifSoulPoem.js @@ -10,9 +10,10 @@ export const NifSoulPoem = (props, context) => { messages = [], receiving_data, transmitting_data, + theme, } = data; return ( - +
{messages.map((message) => ( diff --git a/tgui/packages/tgui/interfaces/Soulcatcher.js b/tgui/packages/tgui/interfaces/Soulcatcher.js index f91f5fabef8..0c8c4f6e66b 100644 --- a/tgui/packages/tgui/interfaces/Soulcatcher.js +++ b/tgui/packages/tgui/interfaces/Soulcatcher.js @@ -12,10 +12,11 @@ export const Soulcatcher = (props, context) => { max_souls, removable, communicate_as_parent, + theme, } = data; return ( - + {current_rooms.map((room) => (