diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm
index 4c1fedf5af..6643e677d6 100644
--- a/code/modules/examine/examine.dm
+++ b/code/modules/examine/examine.dm
@@ -65,15 +65,34 @@
var/description_holders = client.description_holders
stat(null,"[description_holders["icon"]] [description_holders["name"]]") //The name, written in big letters.
stat(null,"[description_holders["desc"]]") //the default examine text.
+
+
+ var/color_i = "#084B8A"
+ var/color_f = "#298A08"
+ var/color_a = "#8A0808"
+/*
+ The infowindow colours are set in code\modules\vchat\js\vchat.js file
+ Unfortunately, I cannot think of a way to do this elegantly where there's this central define that we can easily track.
+ As of 2023/08/05 13:10, the lightmode colour for vchat tabBackgroundColor is "none", this is also defined in interface\skin.dmf .
+ The darkmode colour for vchat tabBackgroundColor is "#272727".
+ Since it's possible that one day we'll have option to modify the user's preferred tabBackgroundColor
+ I will assume the lightmode colour will be left untouched - therefore, we are checking for none.
+*/
+ if(!(winget(src, "infowindow", "background-color") == "none"))
+ color_i = "#709ec9d8"
+ color_f = "#76d357"
+ color_a = "#c94d4d"
+
+
if(description_holders["info"])
- stat(null,"[description_holders["info"]]") //Blue, informative text.
+ stat(null,"[description_holders["info"]]") //Blue, informative text.
if(description_holders["interactions"])
for(var/line in description_holders["interactions"])
- stat(null, "[line]")
+ stat(null, "[line]")
if(description_holders["fluff"])
- stat(null,"[description_holders["fluff"]]") //Yellow, fluff-related text.
+ stat(null,"[description_holders["fluff"]]") //Yellow, fluff-related text.
if(description_holders["antag"])
- stat(null,"[description_holders["antag"]]") //Red, malicious antag-related text
+ stat(null,"[description_holders["antag"]]") //Red, malicious antag-related text
//override examinate verb to update description holders when things are examined
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
@@ -100,3 +119,79 @@
if(client)
var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds
client.update_description_holders(A, is_antag)
+
+
+/mob/verb/mob_examine()
+ set name = "Mob Examine"
+ set desc = "Allows one to examine mobs they can see, even from inside of bellies and objects."
+ set category = "IC"
+ set popup_menu = FALSE
+
+ if((is_blind(src) || src.stat) && !isobserver(src))
+ to_chat(src, "Something is there but you can't see it.")
+ return 1
+ var/list/E = list()
+ if(isAI(src))
+ var/mob/living/silicon/ai/my_ai = src
+ for(var/e in my_ai.all_eyes)
+ var/turf/my_turf = get_turf(e)
+ var/foundcam = FALSE
+ for(var/obj/cam in view(world.view, my_turf))
+ if(istype(cam, /obj/machinery/camera))
+ var/obj/machinery/camera/mycam = cam
+ if(!mycam.stat)
+ foundcam = TRUE
+ if(!foundcam)
+ continue
+ for(var/atom/M in view(world.view, my_turf))
+ if(M == src || istype(M, /mob/observer))
+ continue
+ if(ismob(M) && !M.invisibility)
+ if(src && src == M)
+ var/list/results = src.examine(src)
+ if(!results || !results.len)
+ results = list("You were unable to examine that. Tell a developer!")
+ to_chat(src, jointext(results, "
"))
+ update_examine_panel(src)
+ return
+ else
+ E |= M
+ if(E.len == 0)
+ return
+ else
+ var/my_turf = get_turf(src)
+ for(var/atom/M in view(world.view, my_turf))
+ if(ismob(M) && M != src && !istype(M, /mob/observer) && !M.invisibility)
+ E |= M
+ for(var/turf/T in view(world.view, my_turf))
+ if(!isopenspace(T))
+ continue
+ var/turf/checked = T
+ var/keepgoing = TRUE
+ while(keepgoing)
+ var/checking = GetBelow(checked)
+ for(var/atom/m in checking)
+ if(ismob(m) && !istype(m, /mob/observer) && !m.invisibility)
+ E |= m
+ checked = checking
+ if(!isopenspace(checked))
+ keepgoing = FALSE
+
+ if(E.len == 0)
+ to_chat(src, SPAN_NOTICE("There are no mobs to examine."))
+ return
+ var/atom/B = null
+ if(E.len == 1)
+ B = pick(E)
+ else
+ B = tgui_input_list(src, "What would you like to examine?", "Examine", E)
+ if(!B)
+ return
+ if(!isbelly(loc) && !istype(loc, /obj/item/weapon/holder) && !isAI(src))
+ if(B.z == src.z)
+ face_atom(B)
+ var/list/results = B.examine(src)
+ if(!results || !results.len)
+ results = list("You were unable to examine that. Tell a developer!")
+ to_chat(src, jointext(results, "
"))
+ update_examine_panel(B)
diff --git a/code/modules/examine/examine_vr.dm b/code/modules/examine/examine_vr.dm
deleted file mode 100644
index f198da0edb..0000000000
--- a/code/modules/examine/examine_vr.dm
+++ /dev/null
@@ -1,74 +0,0 @@
-/mob/verb/mob_examine()
- set name = "Mob Examine"
- set desc = "Allows one to examine mobs they can see, even from inside of bellies and objects."
- set category = "IC"
- set popup_menu = FALSE
-
- if((is_blind(src) || src.stat) && !isobserver(src))
- to_chat(src, "Something is there but you can't see it.")
- return 1
- var/list/E = list()
- if(isAI(src))
- var/mob/living/silicon/ai/my_ai = src
- for(var/e in my_ai.all_eyes)
- var/turf/my_turf = get_turf(e)
- var/foundcam = FALSE
- for(var/obj/cam in view(world.view, my_turf))
- if(istype(cam, /obj/machinery/camera))
- var/obj/machinery/camera/mycam = cam
- if(!mycam.stat)
- foundcam = TRUE
- if(!foundcam)
- continue
- for(var/atom/M in view(world.view, my_turf))
- if(M == src || istype(M, /mob/observer))
- continue
- if(ismob(M) && !M.invisibility)
- if(src && src == M)
- var/list/results = src.examine(src)
- if(!results || !results.len)
- results = list("You were unable to examine that. Tell a developer!")
- to_chat(src, jointext(results, "
"))
- update_examine_panel(src)
- return
- else
- E |= M
- if(E.len == 0)
- return
- else
- var/my_turf = get_turf(src)
- for(var/atom/M in view(world.view, my_turf))
- if(ismob(M) && M != src && !istype(M, /mob/observer) && !M.invisibility)
- E |= M
- for(var/turf/T in view(world.view, my_turf))
- if(!isopenspace(T))
- continue
- var/turf/checked = T
- var/keepgoing = TRUE
- while(keepgoing)
- var/checking = GetBelow(checked)
- for(var/atom/m in checking)
- if(ismob(m) && !istype(m, /mob/observer) && !m.invisibility)
- E |= m
- checked = checking
- if(!isopenspace(checked))
- keepgoing = FALSE
-
- if(E.len == 0)
- to_chat(src, SPAN_NOTICE("There are no mobs to examine."))
- return
- var/atom/B = null
- if(E.len == 1)
- B = pick(E)
- else
- B = tgui_input_list(src, "What would you like to examine?", "Examine", E)
- if(!B)
- return
- if(!isbelly(loc) && !istype(loc, /obj/item/weapon/holder) && !isAI(src))
- if(B.z == src.z)
- face_atom(B)
- var/list/results = B.examine(src)
- if(!results || !results.len)
- results = list("You were unable to examine that. Tell a developer!")
- to_chat(src, jointext(results, "
"))
- update_examine_panel(B)
\ No newline at end of file
diff --git a/code/modules/vchat/js/vchat.js b/code/modules/vchat/js/vchat.js
index a7be6bb3b0..5387f75839 100644
--- a/code/modules/vchat/js/vchat.js
+++ b/code/modules/vchat/js/vchat.js
@@ -30,6 +30,14 @@ var vchat_opts = {
vchatTabsVer: 1.0 //Version of vchat tabs save 'file'
};
+/***********
+* If you are changing either tabBackgroundColor in dark or lightmode,
+* lease keep this synchronized with code\modules\examine\examine.dm
+* I cannot think of a elegant way to ensure it tracks these settings properly.
+* As long as LIGHTMODE stays as "none", stuff should not break.
+* Thank you!
+************/
+
var DARKMODE_COLORS = {
buttonBgColor: "#40628a",
buttonTextColor: "#FFFFFF",
diff --git a/vorestation.dme b/vorestation.dme
index f27931eeda..8afbfc6524 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2430,7 +2430,6 @@
#include "code\modules\events\viral_infection.dm"
#include "code\modules\events\wallrot.dm"
#include "code\modules\examine\examine.dm"
-#include "code\modules\examine\examine_vr.dm"
#include "code\modules\examine\stat_icons.dm"
#include "code\modules\examine\descriptions\armor.dm"
#include "code\modules\examine\descriptions\atmospherics.dm"