diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index d33c2c9a1f3..b055cad5f54 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
//Color Defines
-#define OOC_COLOR "#002eb8"
+#define OOC_COLOR "#386aff"
/////////////////////////////////////
// atom.appearence_flags shortcuts //
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 882da6b2c0c..c8dfd9036ac 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -433,7 +433,7 @@ SUBSYSTEM_DEF(job)
if(job.req_admin_notify)
to_chat(M, "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp. ")
if(CONFIG_GET(number/minimal_access_threshold))
- to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card. ")
+ to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card. ")
if(ishuman(H))
var/mob/living/carbon/human/wageslave = H
to_chat(M, "Your account ID is [wageslave.account_id]. ")
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 157a4a014ae..a9e1d47dabc 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -202,7 +202,7 @@ SUBSYSTEM_DEF(ticker)
if(GLOB.secret_force_mode != "secret")
var/datum/game_mode/smode = config.pick_mode(GLOB.secret_force_mode)
if(!smode.can_start())
- message_admins("\blue Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.")
+ message_admins("Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed. ")
else
mode = smode
@@ -273,14 +273,14 @@ SUBSYSTEM_DEF(ticker)
round_start_time = world.time
SSdbcore.SetRoundStart()
- to_chat(world, "Welcome to [station_name()], enjoy your stay! ")
+ to_chat(world, "Welcome to [station_name()], enjoy your stay! ")
SEND_SOUND(world, sound('sound/ai/welcome.ogg'))
current_state = GAME_STATE_PLAYING
Master.SetRunLevel(RUNLEVEL_GAME)
if(SSevents.holidays)
- to_chat(world, "and... ")
+ to_chat(world, "and... ")
for(var/holidayname in SSevents.holidays)
var/datum/holiday/holiday = SSevents.holidays[holidayname]
to_chat(world, "
[holiday.greet()] ")
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 259e016da8c..008bf5cbb3a 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -159,15 +159,15 @@
t1 = "*dead*"
else
t1 = "Unknown"
- return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
- Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
- Brute Damage: [patient.getBruteLoss()]%
- Respiratory Damage: [patient.getOxyLoss()]%
- Toxin Content: [patient.getToxLoss()]%
- Burn Severity: [patient.getFireLoss()]%
- [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
- [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
- [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
+ return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
+ Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
+ Brute Damage: [patient.getBruteLoss()]%
+ Respiratory Damage: [patient.getOxyLoss()]%
+ Toxin Content: [patient.getToxLoss()]%
+ Burn Severity: [patient.getFireLoss()]%
+ [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
+ [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
+ [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
"}
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_reagents()
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index bcd647859fe..1cb80d22c90 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -6,7 +6,7 @@
set category = null
set name = "Admin PM Mob"
if(!holder)
- to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command. ")
+ to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.")
return
if( !ismob(M) || !M.client )
return
@@ -18,7 +18,7 @@
set category = "Admin"
set name = "Admin PM"
if(!holder)
- to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command. ")
+ to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.")
return
var/list/client/targets[0]
for(var/client/T)
@@ -37,7 +37,7 @@
/client/proc/cmd_ahelp_reply(whom)
if(prefs.muted & MUTE_ADMINHELP)
- to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted). ")
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
return
var/client/C
if(istext(whom))
@@ -48,7 +48,7 @@
C = whom
if(!C)
if(holder)
- to_chat(src, "Error: Admin-PM: Client not found. ")
+ to_chat(src, "Error: Admin-PM: Client not found.")
return
var/datum/admin_help/AH = C.current_ticket
@@ -65,12 +65,12 @@
//Fetching a message if needed. src is the sender and C is the target client
/client/proc/cmd_admin_pm(whom, msg)
if(prefs.muted & MUTE_ADMINHELP)
- to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted). ")
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
return
if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo
- to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be. ")
- to_chat(src, "Message: [msg] ")
+ to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.")
+ to_chat(src, "Message: [msg]")
return
var/client/recipient
@@ -95,14 +95,14 @@
if(!msg)
return
if(holder)
- to_chat(src, "Error: Use the admin IRC channel, nerd. ")
+ to_chat(src, "Error: Use the admin IRC channel, nerd.")
return
else
if(!recipient)
if(holder)
- to_chat(src, "Error: Admin-PM: Client not found. ")
+ to_chat(src, "Error: Admin-PM: Client not found.")
if(msg)
to_chat(src, msg)
return
@@ -118,12 +118,12 @@
return
if(prefs.muted & MUTE_ADMINHELP)
- to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted). ")
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
return
if(!recipient)
if(holder)
- to_chat(src, "Error: Admin-PM: Client not found. ")
+ to_chat(src, "Error: Admin-PM: Client not found.")
else
current_ticket.MessageNoRecipient(msg)
return
@@ -145,27 +145,27 @@
var/keywordparsedmsg = keywords_lookup(msg)
if(irc)
- to_chat(src, "PM to-Admins : [rawmsg] ")
- var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC : [keywordparsedmsg] ")
+ to_chat(src, "PM to-Admins : [rawmsg] ")
+ var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC : [keywordparsedmsg]")
ircreplyamount--
send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg)
else
if(recipient.holder)
if(holder) //both are admins
- to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)] : [keywordparsedmsg] ")
- to_chat(src, "Admin PM to-[key_name(recipient, src, 1)] : [keywordparsedmsg] ")
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)] : [keywordparsedmsg] ")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)] : [keywordparsedmsg] ")
//omg this is dumb, just fill in both their tickets
- var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)] : [keywordparsedmsg] "
+ var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)] : [keywordparsedmsg]"
admin_ticket_log(src, interaction_message)
if(recipient != src) //reeee
admin_ticket_log(recipient, interaction_message)
else //recipient is an admin but sender is not
- var/replymsg = "Reply PM from-[key_name(src, recipient, 1)] : [keywordparsedmsg] "
+ var/replymsg = "Reply PM from-[key_name(src, recipient, 1)] : [keywordparsedmsg] "
admin_ticket_log(src, replymsg)
to_chat(recipient, replymsg)
- to_chat(src, "PM to-Admins : [msg] ")
+ to_chat(src, "PM to-Admins : [msg] ")
//play the receiving admin the adminhelp sound (if they have them enabled)
if(recipient.prefs.toggles & SOUND_ADMINHELP)
@@ -176,12 +176,12 @@
if(!recipient.current_ticket)
new /datum/admin_help(msg, recipient, TRUE)
- to_chat(recipient, "-- Administrator private message -- ")
- to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)] : [msg] ")
- to_chat(recipient, "Click on the administrator's name to reply. ")
- to_chat(src, "Admin PM to-[key_name(recipient, src, 1)] : [msg] ")
+ to_chat(recipient, "-- Administrator private message -- ")
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)] : [msg] ")
+ to_chat(recipient, "Click on the administrator's name to reply. ")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)] : [msg] ")
- admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg] ")
+ admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]")
//always play non-admin recipients the adminhelp sound
SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
@@ -200,20 +200,20 @@
return
else //neither are admins
- to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden. ")
+ to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.")
return
if(irc)
log_admin_private("PM: [key_name(src)]->IRC: [rawmsg]")
for(var/client/X in GLOB.admins)
- to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg] ")
+ to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]")
else
window_flash(recipient, ignorepref = TRUE)
log_admin_private("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in GLOB.admins)
if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
- to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg] " )
+ to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" )
@@ -295,11 +295,11 @@
log_admin_private("IRC PM: [sender] -> [key_name(C)] : [msg]")
msg = emoji_parse(msg)
- to_chat(C, "-- Administrator private message -- ")
- to_chat(C, "Admin PM from-[adminname] : [msg] ")
- to_chat(C, "Click on the administrator's name to reply. ")
+ to_chat(C, "-- Administrator private message -- ")
+ to_chat(C, "Admin PM from-[adminname] : [msg]")
+ to_chat(C, "Click on the administrator's name to reply. ")
- admin_ticket_log(C, "PM From [irc_tagged]: [msg] ")
+ admin_ticket_log(C, "PM From [irc_tagged]: [msg]")
window_flash(C, ignorepref = TRUE)
//always play non-admin recipients the adminhelp sound
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 4caefd7312b..220796778d7 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -298,7 +298,7 @@
if(candidates.len)
ckey = input("Pick the player you want to respawn as a xeno.", "Suitable Candidates") as null|anything in candidates
else
- to_chat(usr, "Error: create_xeno(): no suitable candidates. ")
+ to_chat(usr, "Error: create_xeno(): no suitable candidates. ")
if(!istext(ckey))
return 0
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 78a0b729dc8..277b5e42f62 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -224,10 +224,10 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
alert_mob_dupe_login = TRUE
if(matches)
if(C)
- message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)]. ")
+ message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)]. ")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)].")
else
- message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). ")
+ message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). ")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)] (no longer logged in).")
if(GLOB.player_details[ckey])
diff --git a/code/modules/client/darkmode.dm b/code/modules/client/darkmode.dm
new file mode 100644
index 00000000000..74e795e3457
--- /dev/null
+++ b/code/modules/client/darkmode.dm
@@ -0,0 +1,128 @@
+//Darkmode preference by Kmc2000//
+
+/*
+This lets you switch chat themes by using winset and CSS loading, you must relog to see this change (or rebuild your browseroutput datum)
+
+Things to note:
+If you change ANYTHING in interface/skin.dmf you need to change it here:
+Format:
+winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value")
+
+How this works:
+I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat)
+This then swaps the window theme automatically
+
+Thanks to spacemaniac and mcdonald for help with the JS side of this.
+
+*/
+
+/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested.
+ //Main windows
+ winset(src, "infowindow", "background-color = #2c2f33;background-color = none")
+ winset(src, "infowindow", "text-color = #99aab5;text-color = #000000")
+ winset(src, "info", "background-color = #272727;background-color = none")
+ winset(src, "info", "text-color = #99aab5;text-color = #000000")
+ winset(src, "browseroutput", "background-color = #272727;background-color = none")
+ winset(src, "browseroutput", "text-color = #99aab5;text-color = #000000")
+ winset(src, "outputwindow", "background-color = #272727;background-color = none")
+ winset(src, "outputwindow", "text-color = #99aab5;text-color = #000000")
+ winset(src, "mainwindow", "background-color = #2c2f33;background-color = none")
+ winset(src, "split", "background-color = #272727;background-color = none")
+ //Buttons
+ winset(src, "changelog", "background-color = #494949;background-color = none")
+ winset(src, "changelog", "text-color = #99aab5;text-color = #000000")
+ winset(src, "rules", "background-color = #494949;background-color = none")
+ winset(src, "rules", "text-color = #99aab5;text-color = #000000")
+ winset(src, "wiki", "background-color = #494949;background-color = none")
+ winset(src, "wiki", "text-color = #99aab5;text-color = #000000")
+ winset(src, "forum", "background-color = #494949;background-color = none")
+ winset(src, "forum", "text-color = #99aab5;text-color = #000000")
+ winset(src, "github", "background-color = #3a3a3a;background-color = none")
+ winset(src, "github", "text-color = #99aab5;text-color = #000000")
+ winset(src, "report-issue", "background-color = #492020;background-color = none")
+ winset(src, "report-issue", "text-color = #99aab5;text-color = #000000")
+ //Status and verb tabs
+ winset(src, "output", "background-color = #272727;background-color = none")
+ winset(src, "output", "text-color = #99aab5;text-color = #000000")
+ winset(src, "outputwindow", "background-color = #272727;background-color = none")
+ winset(src, "outputwindow", "text-color = #99aab5;text-color = #000000")
+ winset(src, "statwindow", "background-color = #272727;background-color = none")
+ winset(src, "statwindow", "text-color = #eaeaea;text-color = #000000")
+ winset(src, "stat", "background-color = #2c2f33;background-color = #FFFFFF")
+ winset(src, "stat", "tab-background-color = #272727;tab-background-color = none")
+ winset(src, "stat", "text-color = #99aab5;text-color = #000000")
+ winset(src, "stat", "tab-text-color = #99aab5;tab-text-color = #000000")
+ //Say, OOC, me Buttons etc.
+ winset(src, "saybutton", "background-color = #272727;background-color = none")
+ winset(src, "saybutton", "text-color = #99aab5;text-color = #000000")
+ winset(src, "oocbutton", "background-color = #272727;background-color = none")
+ winset(src, "oocbutton", "text-color = #99aab5;text-color = #000000")
+ winset(src, "mebutton", "background-color = #272727;background-color = none")
+ winset(src, "mebutton", "text-color = #99aab5;text-color = #000000")
+ winset(src, "asset_cache_browser", "background-color = #272727;background-color = none")
+ winset(src, "asset_cache_browser", "text-color = #99aab5;text-color = #000000")
+ winset(src, "tooltip", "background-color = #272727;background-color = none")
+ winset(src, "tooltip", "text-color = #99aab5;text-color = #000000")
+
+/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing
+ //Main windows
+ winset(src, "infowindow", "background-color = none;background-color = #2c2f33")
+ winset(src, "infowindow", "text-color = #000000;text-color = #99aab5")
+ winset(src, "info", "background-color = none;background-color = #272727")
+ winset(src, "info", "text-color = #000000;text-color = #99aab5")
+ winset(src, "browseroutput", "background-color = none;background-color = #272727")
+ winset(src, "browseroutput", "text-color = #000000;text-color = #99aab5")
+ winset(src, "outputwindow", "background-color = none;background-color = #272727")
+ winset(src, "outputwindow", "text-color = #000000;text-color = #99aab5")
+ winset(src, "mainwindow", "background-color = none;background-color = #2c2f33")
+ winset(src, "split", "background-color = none;background-color = #272727")
+ //Buttons
+ winset(src, "changelog", "background-color = none;background-color = #494949")
+ winset(src, "changelog", "text-color = #000000;text-color = #99aab5")
+ winset(src, "rules", "background-color = none;background-color = #494949")
+ winset(src, "rules", "text-color = #000000;text-color = #99aab5")
+ winset(src, "wiki", "background-color = none;background-color = #494949")
+ winset(src, "wiki", "text-color = #000000;text-color = #99aab5")
+ winset(src, "forum", "background-color = none;background-color = #494949")
+ winset(src, "forum", "text-color = #000000;text-color = #99aab5")
+ winset(src, "github", "background-color = none;background-color = #3a3a3a")
+ winset(src, "github", "text-color = #000000;text-color = #99aab5")
+ winset(src, "report-issue", "background-color = none;background-color = #492020")
+ winset(src, "report-issue", "text-color = #000000;text-color = #99aab5")
+ //Status and verb tabs
+ winset(src, "output", "background-color = none;background-color = #272727")
+ winset(src, "output", "text-color = #000000;text-color = #99aab5")
+ winset(src, "outputwindow", "background-color = none;background-color = #272727")
+ winset(src, "outputwindow", "text-color = #000000;text-color = #99aab5")
+ winset(src, "statwindow", "background-color = none;background-color = #272727")
+ winset(src, "statwindow", "text-color = #000000;text-color = #eaeaea")
+ winset(src, "stat", "background-color = #FFFFFF;background-color = #2c2f33")
+ winset(src, "stat", "tab-background-color = none;tab-background-color = #272727")
+ winset(src, "stat", "text-color = #000000;text-color = #99aab5")
+ winset(src, "stat", "tab-text-color = #000000;tab-text-color = #99aab5")
+ //Say, OOC, me Buttons etc.
+ winset(src, "saybutton", "background-color = none;background-color = #272727")
+ winset(src, "saybutton", "text-color = #000000;text-color = #99aab5")
+ winset(src, "oocbutton", "background-color = none;background-color = #272727")
+ winset(src, "oocbutton", "text-color = #000000;text-color = #99aab5")
+ winset(src, "mebutton", "background-color = none;background-color = #272727")
+ winset(src, "mebutton", "text-color = #000000;text-color = #99aab5")
+ winset(src, "asset_cache_browser", "background-color = none;background-color = #272727")
+ winset(src, "asset_cache_browser", "text-color = #000000;text-color = #99aab5")
+ winset(src, "tooltip", "background-color = none;background-color = #272727")
+ winset(src, "tooltip", "text-color = #000000;text-color = #99aab5")
+
+/datum/asset/simple/goonchat
+ verify = FALSE
+ assets = list(
+ "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js',
+ "errorHandler.js" = 'code/modules/goonchat/browserassets/js/errorHandler.js',
+ "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js',
+ "fontawesome-webfont.eot" = 'tgui/assets/fonts/fontawesome-webfont.eot',
+ "fontawesome-webfont.svg" = 'tgui/assets/fonts/fontawesome-webfont.svg',
+ "fontawesome-webfont.ttf" = 'tgui/assets/fonts/fontawesome-webfont.ttf',
+ "fontawesome-webfont.woff" = 'tgui/assets/fonts/fontawesome-webfont.woff',
+ "font-awesome.css" = 'code/modules/goonchat/browserassets/css/font-awesome.css',
+ "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css',
+ "browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css',
+ )
\ No newline at end of file
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index 0d40d5c6fb3..e3f73a3e69e 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -453,4 +453,4 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
to_chat(src, "Custom Asay color is currently disabled by the server.")
return
prefs.asaycolor = initial(prefs.asaycolor)
- prefs.save_preferences()
+ prefs.save_preferences()
\ No newline at end of file
diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm
index 3fb580ff809..b68d402ccab 100644
--- a/code/modules/goonchat/browserOutput.dm
+++ b/code/modules/goonchat/browserOutput.dm
@@ -81,6 +81,10 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
if("setMusicVolume")
data = setMusicVolume(arglist(params))
+ if("swaptodarkmode")
+ swaptodarkmode()
+ if("swaptolightmode")
+ swaptolightmode()
if(data)
ehjax_send(data = data)
@@ -244,3 +248,9 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
// url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript.
C << output(url_encode(url_encode(message)), "browseroutput:output")
+
+/datum/chatOutput/proc/swaptolightmode() //Dark mode light mode stuff. Yell at KMC if this breaks! (See darkmode.dm for documentation)
+ owner.force_white_theme()
+
+/datum/chatOutput/proc/swaptodarkmode()
+ owner.force_dark_theme()
\ No newline at end of file
diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css
index 721583cf338..d7a3c02862a 100644
--- a/code/modules/goonchat/browserassets/css/browserOutput.css
+++ b/code/modules/goonchat/browserassets/css/browserOutput.css
@@ -7,16 +7,20 @@ html, body {
padding: 0;
margin: 0;
height: 100%;
- color: #000000;
+ color: #99aab5;
}
body {
- background: #fff;
+ background: #2c2f33;
font-family: Verdana, sans-serif;
font-size: 9pt;
+ font-color: #99aab5;
line-height: 1.2;
overflow-x: hidden;
overflow-y: scroll;
- word-wrap: break-word;
+ word-wrap: break-word;
+ scrollbar-face-color:#1A1A1A;
+ scrollbar-track-color:#2c2f33;
+ scrollbar-highlight-color:#2c2f33;
}
em {
@@ -38,7 +42,6 @@ img.icon {
vertical-align: bottom;
}
-
.r:before { /* "repeated" badge class for combined messages */
content: 'x';
}
@@ -56,9 +59,9 @@ img.icon {
border-radius: 10px;
}
-a {color: #0000ff;}
-a.visited {color: #ff00ff;}
-a:visited {color: #ff00ff;}
+a {color: #397ea5;}
+a.visited {color: #7c00e6;}
+a:visited {color: #7c00e6;}
a.popt {text-decoration: none;}
/*****************************************
@@ -101,7 +104,7 @@ a.popt {text-decoration: none;}
#ping {
position: fixed;
top: 0;
- right: 80px;
+ right: 115px;
width: 45px;
background: #ddd;
height: 30px;
@@ -242,9 +245,9 @@ a.popt {text-decoration: none;}
******************************************/
/* MOTD */
-.motd {color: #638500; font-family: Verdana, sans-serif;}
-.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
-.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
+.motd {color: #99aab5; font-family: Verdana, sans-serif;}
+.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #99aab5; text-decoration: underline;}
+.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #99aab5;}
/* ADD HERE FOR BOLD */
.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
@@ -255,82 +258,82 @@ a.popt {text-decoration: none;}
/* OUTPUT COLORS */
.highlight {background: yellow;}
-h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
-h1.alert, h2.alert {color: #000000;}
+h1, h2, h3, h4, h5, h6 {color: #99aab5;font-family: Georgia, Verdana, sans-serif;}
+h1.alert, h2.alert {color: #99aab5;}
em {font-style: normal; font-weight: bold;}
.ooc { font-weight: bold;}
.adminobserverooc {color: #0099cc; font-weight: bold;}
-.adminooc {color: #700038; font-weight: bold;}
+.adminooc {color: #3d5bc3; font-weight: bold;}
-.adminsay {color: #FF4500; font-weight: bold;}
-.admin {color: #386aff; font-weight: bold;}
+.adminsay {color: #3d5bc3; font-weight: bold;}
+.admin {color: #3d5bc3; font-weight: bold;}
.name { font-weight: bold;}
.say {}
-.deadsay {color: #5c00e6;}
+.deadsay {color: #7c00e6;}
.binarysay {color: #20c20e; background-color: #000000; display: block;}
.binarysay a {color: #00ff00;}
.binarysay a:active, .binarysay a:visited {color: #88ff88;}
-.radio {color: #008000;}
-.sciradio {color: #993399;}
-.comradio {color: #948f02;}
+.radio {color: #059223;}
+.sciradio {color: #7c00e6;}
+.comradio {color: #3d5bc3;}
.secradio {color: #a30000;}
-.medradio {color: #337296;}
-.engradio {color: #fb5613;}
-.suppradio {color: #a8732b;}
-.servradio {color: #6eaa2c;}
+.medradio {color: #397ea5;}
+.engradio {color: #c75f35;}
+.suppradio {color: #8b6532;}
+.servradio {color: #577c2d;}
.syndradio {color: #6d3f40;}
-.centcomradio {color: #686868;}
-.aiprivradio {color: #ff00ff;}
+.centcomradio {color: #2b677e;}
+.aiprivradio {color: #811981;}
.redteamradio {color: #ff0000;}
.blueteamradio {color: #0000ff;}
.yell { font-weight: bold;}
-.alert {color: #ff0000;}
-h1.alert, h2.alert {color: #000000;}
+.alert {color: #c51e1e;}
+h1.alert, h2.alert {color: #99aab5;}
.emote { font-style: italic;}
.selecteddna {color: #ffffff; background-color: #001B1B}
-.attack {color: #ff0000;}
-.disarm {color: #990000;}
-.passive {color: #660000;}
+.attack {color: #c51e1e;}
+.disarm {color: #780202;}
+.passive {color: #510000;}
-.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
-.danger {color: #ff0000;}
-.warning {color: #ff0000; font-style: italic;}
-.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
-.announce {color: #228b22; font-weight: bold;}
-.boldannounce {color: #ff0000; font-weight: bold;}
-.greenannounce {color: #00ff00; font-weight: bold;}
+.userdanger {color: #c51e1e; font-weight: bold; font-size: 24px;}
+.danger {color: #c51e1e;}
+.warning {color: #c51e1e; font-style: italic;}
+.boldwarning {color: #c51e1e; font-style: italic; font-weight: bold}
+.announce {color: #c51e1e; font-weight: bold;}
+.boldannounce {color: #c51e1e; font-weight: bold;}
+.greenannounce {color: #059223; font-weight: bold;}
.rose {color: #ff5050;}
-.info {color: #0000CC;}
-.notice {color: #000099;}
-.boldnotice {color: #000099; font-weight: bold;}
-.adminnotice {color: #0000ff;}
-.adminhelp {color: #ff0000; font-weight: bold;}
-.unconscious {color: #0000ff; font-weight: bold;}
+.info {color: #3d5bc3;}
+.notice {color: #3d5bc3;}
+.boldnotice {color: #3d5bc3; font-weight: bold;}
+.adminnotice {color: #3d5bc3;}
+.adminhelp {color: #c51e1e; font-weight: bold;}
+.unconscious {color: #99aab5; font-weight: bold;}
.suicide {color: #ff5050; font-style: italic;}
-.green {color: #03ff39;}
-.nicegreen {color: #14a833;}
+.green {color: #059223;}
+.nicegreen {color: #059223;}
.shadowling {color: #3b2769;}
-.cult {color: #960000;}
+.cult {color: #740202;}
-.cultitalic {color: #960000; font-style: italic;}
-.cultbold {color: #960000; font-style: italic; font-weight: bold;}
-.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
+.cultitalic {color: #740202; font-style: italic;}
+.cultbold {color: #740202; font-style: italic; font-weight: bold;}
+.cultboldtalic {color: #740202; font-weight: bold; font-size: 24px;}
-.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
-.narsie {color: #960000; font-weight: bold; font-size: 120px;}
-.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
+.cultlarge {color: #740202; font-weight: bold; font-size: 24px;}
+.narsie {color: #740202; font-weight: bold; font-size: 120px;}
+.narsiesmall {color: #740202; font-weight: bold; font-size: 48px;}
.colossus {color: #7F282A; font-size: 40px;}
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
.hierophant_warning {color: #660099; font-style: italic;}
-.purple {color: #5e2d79;}
+.purple {color: #7c00e6;}
.holoparasite {color: #35333a;}
.revennotice {color: #1d2953;}
@@ -339,11 +342,11 @@ h1.alert, h2.alert {color: #000000;}
.revenminor {color: #823abb}
.revenwarning {color: #760fbb; font-style: italic;}
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
-.umbra {color: #5000A0;}
-.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
-.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
+.umbra {color: #7c00e6;}
+.umbra_emphasis {color: #7c00e6; font-weight: bold; font-style: italic;}
+.umbra_large {color: #7c00e6; font-size: 24px; font-weight: bold; font-style: italic;}
-.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
+.deconversion_message {color: #7c00e6; font-size: 24px; font-style: italic;}
.brass {color: #BE8700;}
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
@@ -372,13 +375,12 @@ h1.alert, h2.alert {color: #000000;}
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
.alien {color: #543354;}
-.noticealien {color: #00c000;}
-.alertalien {color: #00c000; font-weight: bold;}
-.changeling {color: #800080; font-style: italic;}
-.assimilator {color: #800080; font-size: 16px ; font-weight: bold;}
-.bigassimilator {color: #800080; font-size: 32px ; font-weight: bold;}
+.noticealien {color: #059223;}
+.alertalien {color: #059223; font-weight: bold;}
+.changeling {color: #059223; font-style: italic;}
+.assimilator {color: #059223; font-size: 16px ; font-weight: bold;}
-.spider {color: #4d004d;}
+.spider {color: #7c00e6;}
.interface {color: #330033;}
@@ -391,13 +393,13 @@ h1.alert, h2.alert {color: #000000;}
.big {font-size: 24px;}
.reallybig {font-size: 32px;}
.extremelybig {font-size: 40px;}
-.greentext {color: #00FF00; font-size: 24px;}
-.redtext {color: #FF0000; font-size: 24px;}
+.greentext {color: #059223; font-size: 24px;}
+.redtext {color: #c51e1e; font-size: 24px;}
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
-.hypnophrase {color: #0d0d0d; font-weight: bold; animation: hypnocolor 1500ms infinite;}
+.hypnophrase {color: #2c2f33; font-weight: bold; animation: hypnocolor 1500ms infinite;}
@keyframes hypnocolor {
- 0% { color: #0d0d0d; }
+ 0% { color: #2c2f33; }
25% { color: #410194; }
50% { color: #7f17d8; }
75% { color: #410194; }
@@ -428,7 +430,7 @@ h1.alert, h2.alert {color: #000000;}
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
.connectionClosed.restored {background: green;}
-.internal.boldnshit {color: blue; font-weight: bold;}
+.internal.boldnshit {color: #3d5bc3; font-weight: bold;}
/* HELPER CLASSES */
.text-normal {font-weight: normal; font-style: normal;}
diff --git a/code/modules/goonchat/browserassets/css/browserOutput_white.css b/code/modules/goonchat/browserassets/css/browserOutput_white.css
new file mode 100644
index 00000000000..12978246c79
--- /dev/null
+++ b/code/modules/goonchat/browserassets/css/browserOutput_white.css
@@ -0,0 +1,435 @@
+/*****************************************
+*
+* GLOBAL STYLES for white theme normies
+*
+******************************************/
+html, body {
+ padding: 0;
+ margin: 0;
+ height: 100%;
+ color: #000000;
+}
+body {
+ background: #fff;
+ font-family: Verdana, sans-serif;
+ font-size: 9pt;
+ line-height: 1.2;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ word-wrap: break-word;
+}
+
+em {
+ font-style: normal;
+ font-weight: bold;
+}
+
+img {
+ margin: 0;
+ padding: 0;
+ line-height: 1;
+ -ms-interpolation-mode: nearest-neighbor;
+ image-rendering: pixelated;
+}
+img.icon {
+ height: 1em;
+ min-height: 16px;
+ width: auto;
+ vertical-align: bottom;
+}
+
+
+.r:before { /* "repeated" badge class for combined messages */
+ content: 'x';
+}
+.r {
+ display: inline-block;
+ min-width: 0.5em;
+ font-size: 0.7em;
+ padding: 0.2em 0.3em;
+ line-height: 1;
+ color: white;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ background-color: crimson;
+ border-radius: 10px;
+}
+
+a {color: #0000ff;}
+a.visited {color: #ff00ff;}
+a:visited {color: #ff00ff;}
+a.popt {text-decoration: none;}
+
+/*****************************************
+*
+* OUTPUT NOT RELATED TO ACTUAL MESSAGES
+*
+******************************************/
+#loading {
+ position: fixed;
+ width: 300px;
+ height: 150px;
+ text-align: center;
+ left: 50%;
+ top: 50%;
+ margin: -75px 0 0 -150px;
+}
+#loading i {display: block; padding-bottom: 3px;}
+
+#messages {
+ font-size: 13px;
+ padding: 3px;
+ margin: 0;
+ word-wrap: break-word;
+}
+#newMessages {
+ position: fixed;
+ display: block;
+ bottom: 0;
+ right: 0;
+ padding: 8px;
+ background: #ddd;
+ text-decoration: none;
+ font-variant: small-caps;
+ font-size: 1.1em;
+ font-weight: bold;
+ color: #333;
+}
+#newMessages:hover {background: #ccc;}
+#newMessages i {vertical-align: middle; padding-left: 3px;}
+#ping {
+ position: fixed;
+ top: 0;
+ right: 115px;
+ width: 45px;
+ background: #ddd;
+ height: 30px;
+ padding: 8px 0 2px 0;
+}
+#ping i {display: block; text-align: center;}
+#ping .ms {
+ display: block;
+ text-align: center;
+ font-size: 8pt;
+ padding-top: 2px;
+}
+#userBar {
+ position: fixed;
+ top: 0;
+ right: 0;
+}
+#userBar .subCell {
+ background: #ddd;
+ height: 30px;
+ padding: 5px 0;
+ display: block;
+ color: #333;
+ text-decoration: none;
+ line-height: 28px;
+ border-top: 1px solid #b4b4b4;
+}
+#userBar .subCell:hover {background: #ccc;}
+#userBar .toggle {
+ width: 40px;
+ background: #ccc;
+ border-top: 0;
+ float: right;
+ text-align: center;
+}
+#userBar .sub {clear: both; display: none; width: 160px;}
+#userBar .sub.scroll {overflow-y: scroll;}
+#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;}
+#userBar .sub span {
+ display: block;
+ line-height: 30px;
+ float: left;
+}
+#userBar .sub i {
+ display: block;
+ padding: 0 5px;
+ font-size: 1.1em;
+ width: 22px;
+ text-align: center;
+ line-height: 30px;
+ float: right;
+}
+#userBar .sub input {
+ position: absolute;
+ padding: 7px 5px;
+ width: 121px;
+ line-height: 30px;
+ float: left;
+}
+#userBar .topCell {border-top: 0;}
+
+/* POPUPS */
+.popup {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ background: #ddd;
+}
+.popup .close {
+ position: absolute;
+ background: #aaa;
+ top: 0;
+ right: 0;
+ color: #333;
+ text-decoration: none;
+ z-index: 2;
+ padding: 0 10px;
+ height: 30px;
+ line-height: 30px;
+}
+.popup .close:hover {background: #999;}
+.popup .head {
+ background: #999;
+ color: #ddd;
+ padding: 0 10px;
+ height: 30px;
+ line-height: 30px;
+ text-transform: uppercase;
+ font-size: 0.9em;
+ font-weight: bold;
+ border-bottom: 2px solid green;
+}
+.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;}
+.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;}
+.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
+.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;}
+
+.changeFont {padding: 10px;}
+.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;}
+.changeFont a:hover {background: #ccc;}
+
+.highlightPopup {padding: 10px; text-align: center;}
+.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;}
+.highlightPopup input.highlightColor {background-color: #FFFF00;}
+.highlightPopup input.highlightTermSubmit {margin-top: 5px;}
+
+/* ADMIN CONTEXT MENU */
+.contextMenu {
+ background-color: #ddd;
+ position: fixed;
+ margin: 2px;
+ width: 150px;
+}
+.contextMenu a {
+ display: block;
+ padding: 2px 5px;
+ text-decoration: none;
+ color: #333;
+}
+
+.contextMenu a:hover {
+ background-color: #ccc;
+}
+
+/* ADMIN FILTER MESSAGES MENU */
+.filterMessages {padding: 5px;}
+.filterMessages div {padding: 2px 0;}
+.filterMessages input {}
+.filterMessages label {}
+
+.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
+
+
+/*****************************************
+*
+* OUTPUT ACTUALLY RELATED TO MESSAGES
+*
+******************************************/
+
+/* MOTD */
+.motd {color: #638500; font-family: Verdana, sans-serif;}
+.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
+.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
+
+/* ADD HERE FOR BOLD */
+.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
+
+/* ADD HERE FOR ITALIC */
+.italic, .italics, .emote {font-style: italic;}
+
+/* OUTPUT COLORS */
+.highlight {background: yellow;}
+
+h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
+h1.alert, h2.alert {color: #000000;}
+
+em {font-style: normal; font-weight: bold;}
+
+.ooc { font-weight: bold;}
+.adminobserverooc {color: #0099cc; font-weight: bold;}
+.adminooc {color: #700038; font-weight: bold;}
+
+.adminsay {color: #FF4500; font-weight: bold;}
+.admin {color: #386aff; font-weight: bold;}
+
+.name { font-weight: bold;}
+
+.say {}
+.deadsay {color: #5c00e6;}
+.binarysay {color: #20c20e; background-color: #000000; display: block;}
+.binarysay a {color: #00ff00;}
+.binarysay a:active, .binarysay a:visited {color: #88ff88;}
+.radio {color: #008000;}
+.sciradio {color: #993399;}
+.comradio {color: #948f02;}
+.secradio {color: #a30000;}
+.medradio {color: #337296;}
+.engradio {color: #fb5613;}
+.suppradio {color: #a8732b;}
+.servradio {color: #6eaa2c;}
+.syndradio {color: #6d3f40;}
+.centcomradio {color: #686868;}
+.aiprivradio {color: #ff00ff;}
+.redteamradio {color: #ff0000;}
+.blueteamradio {color: #0000ff;}
+
+.yell { font-weight: bold;}
+
+.alert {color: #ff0000;}
+h1.alert, h2.alert {color: #000000;}
+
+.emote { font-style: italic;}
+.selecteddna {color: #ffffff; background-color: #001B1B}
+
+.attack {color: #ff0000;}
+.disarm {color: #990000;}
+.passive {color: #660000;}
+
+.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
+.danger {color: #ff0000;}
+.warning {color: #ff0000; font-style: italic;}
+.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
+.announce {color: #228b22; font-weight: bold;}
+.boldannounce {color: #ff0000; font-weight: bold;}
+.greenannounce {color: #00ff00; font-weight: bold;}
+.rose {color: #ff5050;}
+.info {color: #0000CC;}
+.notice {color: #000099;}
+.boldnotice {color: #000099; font-weight: bold;}
+.adminnotice {color: #0000ff;}
+.adminhelp {color: #ff0000; font-weight: bold;}
+.unconscious {color: #0000ff; font-weight: bold;}
+.suicide {color: #ff5050; font-style: italic;}
+.green {color: #03ff39;}
+.nicegreen {color: #14a833;}
+.shadowling {color: #3b2769;}
+.cult {color: #960000;}
+
+.cultitalic {color: #960000; font-style: italic;}
+.cultbold {color: #960000; font-style: italic; font-weight: bold;}
+.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
+
+.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
+.narsie {color: #960000; font-weight: bold; font-size: 120px;}
+.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
+.colossus {color: #7F282A; font-size: 40px;}
+.hierophant {color: #660099; font-weight: bold; font-style: italic;}
+.hierophant_warning {color: #660099; font-style: italic;}
+.purple {color: #5e2d79;}
+.holoparasite {color: #35333a;}
+
+.revennotice {color: #1d2953;}
+.revenboldnotice {color: #1d2953; font-weight: bold;}
+.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;}
+.revenminor {color: #823abb}
+.revenwarning {color: #760fbb; font-style: italic;}
+.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
+.umbra {color: #5000A0;}
+.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
+.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
+
+.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
+
+.brass {color: #BE8700;}
+.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
+.large_brass {color: #BE8700; font-size: 24px;}
+.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;}
+.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;}
+.alloy {color: #42474D;}
+.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;}
+.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;}
+.nezbere {color: #42474D; font-weight: bold; font-style: italic;}
+.nezbere_small {color: #42474D;}
+.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;}
+.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;}
+.sevtug_small {color: #AF0AAF;}
+.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;}
+.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;}
+.inathneq_small {color: #1E8CE1;}
+.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;}
+.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;}
+.nzcrentr_small {color: #DAAA18;}
+.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;}
+.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
+.neovgre_small {color: #6E001A;}
+
+.newscaster {color: #800000;}
+.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
+
+.alien {color: #543354;}
+.noticealien {color: #00c000;}
+.alertalien {color: #00c000; font-weight: bold;}
+.changeling {color: #800080; font-style: italic;}
+.assimilator {color: #800080; font-size: 16px ; font-weight: bold;}
+.bigassimilator {color: #800080; font-size: 32px ; font-weight: bold;}
+
+.spider {color: #4d004d;}
+
+.interface {color: #330033;}
+
+.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
+.papyrus {font-family: "Papyrus", cursive, sans-serif;}
+.robot {font-family: "Courier New", cursive, sans-serif;}
+
+.command_headset {font-weight: bold; font-size: 24px;}
+.small {font-size: 8px;}
+.big {font-size: 24px;}
+.reallybig {font-size: 32px;}
+.extremelybig {font-size: 40px;}
+.greentext {color: #00FF00; font-size: 24px;}
+.redtext {color: #FF0000; font-size: 24px;}
+.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
+.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
+.hypnophrase {color: #0d0d0d; font-weight: bold; animation: hypnocolor 1500ms infinite;}
+@keyframes hypnocolor {
+ 0% { color: #0d0d0d; }
+ 25% { color: #410194; }
+ 50% { color: #7f17d8; }
+ 75% { color: #410194; }
+ 100% { color: #3bb5d3; }
+}
+
+.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
+@keyframes phobia {
+ 0% { color: #0d0d0d; }
+ 50% { color: #dd0000; }
+ 100% { color: #0d0d0d; }
+}
+
+.icon {height: 1em; width: auto;}
+
+.memo {color: #638500; text-align: center;}
+.memoedit {text-align: center; font-size: 16px;}
+.abductor {color: #800080; font-style: italic;}
+.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
+.slime {color: #00CED1;}
+.drone {color: #848482;}
+.monkey {color: #975032;}
+.swarmer {color: #2C75FF;}
+.resonate {color: #298F85;}
+
+.monkeyhive {color: #774704;}
+.monkeylead {color: #774704; font-size: 2;}
+
+.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
+.connectionClosed.restored {background: green;}
+.internal.boldnshit {color: blue; font-weight: bold;}
+
+/* HELPER CLASSES */
+.text-normal {font-weight: normal; font-style: normal;}
+.hidden {display: none; visibility: hidden;}
\ No newline at end of file
diff --git a/code/modules/goonchat/browserassets/html/browserOutput.html b/code/modules/goonchat/browserassets/html/browserOutput.html
index fe3be9486c1..69957739803 100644
--- a/code/modules/goonchat/browserassets/html/browserOutput.html
+++ b/code/modules/goonchat/browserassets/html/browserOutput.html
@@ -5,7 +5,7 @@
-
+
@@ -28,6 +28,9 @@
--ms
+
diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js
index ed118902f30..4b24c0a39e2 100644
--- a/code/modules/goonchat/browserassets/js/browserOutput.js
+++ b/code/modules/goonchat/browserassets/js/browserOutput.js
@@ -35,6 +35,7 @@ var opts = {
'wasd': false, //Is the user in wasd mode?
'priorChatHeight': 0, //Thing for height-resizing detection
'restarting': false, //Is the round restarting?
+ 'darkmode':true, //Are we using darkmode? If not WHY ARE YOU LIVING IN 2009???
//Options menu
'selectedSubLoop': null, //Contains the interval loop for closing the selected sub menu
@@ -456,6 +457,19 @@ function toHex(n) {
return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16);
}
+function swap() { //Swap to darkmode
+ if (opts.darkmode){
+ document.getElementById("sheetofstyles").href = "browserOutput_white.css";
+ opts.darkmode = false;
+ runByond('?_src_=chat&proc=swaptolightmode');
+ } else {
+ document.getElementById("sheetofstyles").href = "browserOutput.css";
+ opts.darkmode = true;
+ runByond('?_src_=chat&proc=swaptodarkmode');
+ }
+ setCookie('darkmode', (opts.darkmode ? 'true' : 'false'), 365);
+}
+
function handleClientData(ckey, ip, compid) {
//byond sends player info to here
var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid};
@@ -698,6 +712,7 @@ $(function() {
'shighlightColor': getCookie('highlightcolor'),
'smusicVolume': getCookie('musicVolume'),
'smessagecombining': getCookie('messagecombining'),
+ 'sdarkmode': getCookie('darkmode'),
};
if (savedConfig.sfontSize) {
@@ -708,6 +723,9 @@ $(function() {
$("body").css('line-height', savedConfig.slineHeight);
internalOutput('Loaded line height setting of: '+savedConfig.slineHeight+' ', 'internal');
}
+ if(savedConfig.sdarkmode == 'false'){
+ swap(); //They dont want darkmode, so switch!
+ }
if (savedConfig.spingDisabled) {
if (savedConfig.spingDisabled == 'true') {
opts.pingDisabled = true;
@@ -752,8 +770,6 @@ $(function() {
opts.messageCombining = true;
}
}
-
-
(function() {
var dataCookie = getCookie('connData');
if (dataCookie) {
@@ -920,7 +936,9 @@ $(function() {
$('#toggleOptions').click(function(e) {
handleToggleClick($subOptions, $(this));
});
-
+ $('#darkmodetoggle').click(function(e) {
+ swap();
+ });
$('#toggleAudio').click(function(e) {
handleToggleClick($subAudio, $(this));
});
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index eaa1f36b758..06e38bb3ebb 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -37,4 +37,4 @@
return
last_request = world.time
to_chat(usr, "Your request has been received by CentCom. ")
- to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry ) is requesting to move the transport ferry to CentCom. ")
+ to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry ) is requesting to move the transport ferry to CentCom. ")
diff --git a/interface/skin.dmf b/interface/skin.dmf
index af55fc8f0da..62fd6850624 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1,6 +1,5 @@
macro "default"
-
menu "menu"
elem
name = "&File"
@@ -54,6 +53,7 @@ window "mainwindow"
size = 640x440
anchor1 = none
anchor2 = none
+ background-color = #272727
is-default = true
saved-params = "pos;size;is-minimized;is-maximized"
icon = 'icons\\ss13_64.png'
@@ -65,6 +65,7 @@ window "mainwindow"
size = 634x417
anchor1 = 0,0
anchor2 = 100,100
+ background-color = #272727
saved-params = "splitter"
left = "mapwindow"
right = "infowindow"
@@ -75,6 +76,8 @@ window "mainwindow"
size = 517x20
anchor1 = 0,100
anchor2 = 100,100
+ background-color = #272727
+ font-size = 10
background-color = #d3b5b5
is-default = true
border = sunken
@@ -85,6 +88,8 @@ window "mainwindow"
size = 40x20
anchor1 = 100,100
anchor2 = none
+ background-color = #272727
+ text-color = #eaeaea
saved-params = "is-checked"
text = "Chat"
command = ".winset \"saybutton.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"\"saybutton.is-checked=true ? mebutton.is-checked=false\"\"saybutton.is-checked=true ? oocbutton.is-checked=false\""
@@ -95,6 +100,8 @@ window "mainwindow"
size = 40x20
anchor1 = 100,100
anchor2 = none
+ background-color = #272727
+ text-color = #eaeaea
saved-params = "is-checked"
text = "OOC"
command = ".winset \"oocbutton.is-checked=true ? input.command=\"!ooc \\\"\" : input.command=\"\"oocbutton.is-checked=true ? mebutton.is-checked=false\"\"oocbutton.is-checked=true ? saybutton.is-checked=false\""
@@ -105,6 +112,8 @@ window "mainwindow"
size = 40x20
anchor1 = 100,100
anchor2 = none
+ background-color = #272727
+ text-color = #eaeaea
saved-params = "is-checked"
text = "Me"
command = ".winset \"mebutton.is-checked=true ? input.command=\"!me \\\"\" : input.command=\"\"mebutton.is-checked=true ? saybutton.is-checked=false\"\"mebutton.is-checked=true ? oocbutton.is-checked=false\""
@@ -115,6 +124,7 @@ window "mainwindow"
size = 200x200
anchor1 = none
anchor2 = none
+ background-color = #272727
is-visible = false
saved-params = ""
elem "tooltip"
@@ -123,6 +133,7 @@ window "mainwindow"
size = 999x999
anchor1 = none
anchor2 = none
+ background-color = #272727
is-visible = false
saved-params = ""
@@ -133,6 +144,7 @@ window "mapwindow"
size = 640x480
anchor1 = none
anchor2 = none
+ background-color = #000000
saved-params = "pos;size;is-minimized;is-maximized"
is-pane = true
elem "map"
@@ -141,6 +153,7 @@ window "mapwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
+ background-color = #000000
font-family = "Arial"
font-size = 7
text-color = none
@@ -155,6 +168,8 @@ window "infowindow"
size = 640x480
anchor1 = none
anchor2 = none
+ text-color = #99aab5
+ background-color = #272727
saved-params = "pos;size;is-minimized;is-maximized"
is-pane = true
elem "info"
@@ -163,6 +178,8 @@ window "infowindow"
size = 640x445
anchor1 = 0,0
anchor2 = 100,100
+ text-color = #99aab5
+ background-color = #272727
saved-params = "splitter"
left = "statwindow"
right = "outputwindow"
@@ -173,6 +190,8 @@ window "infowindow"
size = 104x20
anchor1 = 3,0
anchor2 = 19,0
+ text-color = #99aab5
+ background-color = #494949
saved-params = "is-checked"
text = "Changelog"
command = "changelog"
@@ -182,6 +201,8 @@ window "infowindow"
size = 100x20
anchor1 = 19,0
anchor2 = 34,0
+ text-color = #99aab5
+ background-color = #494949
saved-params = "is-checked"
text = "Rules"
command = "rules"
@@ -191,6 +212,8 @@ window "infowindow"
size = 100x20
anchor1 = 34,0
anchor2 = 50,0
+ text-color = #99aab5
+ background-color = #494949
saved-params = "is-checked"
text = "Wiki"
command = "wiki"
@@ -200,6 +223,8 @@ window "infowindow"
size = 100x20
anchor1 = 50,0
anchor2 = 66,0
+ text-color = #99aab5
+ background-color = #494949
saved-params = "is-checked"
text = "Forum"
command = "forum"
@@ -209,6 +234,8 @@ window "infowindow"
size = 100x20
anchor1 = 66,0
anchor2 = 81,0
+ text-color = #99aab5
+ background-color = #3a3a3a
saved-params = "is-checked"
text = "Github"
command = "github"
@@ -218,6 +245,8 @@ window "infowindow"
size = 100x20
anchor1 = 81,0
anchor2 = 97,0
+ text-color = #99aab5
+ background-color = #492020
saved-params = "is-checked"
text = "Report Issue"
command = "report-issue"
@@ -229,6 +258,8 @@ window "outputwindow"
size = 640x480
anchor1 = none
anchor2 = none
+ text-color = #99aab5
+ background-color = #272727
saved-params = "pos;size;is-minimized;is-maximized"
is-pane = true
elem "browseroutput"
@@ -237,7 +268,8 @@ window "outputwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
- background-color = #ffffff
+ text-color = #99aab5
+ background-color = #272727
is-visible = false
is-disabled = true
saved-params = ""
@@ -248,6 +280,8 @@ window "outputwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
+ text-color = #99aab5
+ background-color = #272727
is-default = true
saved-params = ""
@@ -278,7 +312,7 @@ window "preferences_window"
anchor2 = 100,100
right-click = true
saved-params = "zoom;letterbox;zoom-mode"
-
+
window "statwindow"
elem "statwindow"
type = MAIN
@@ -286,6 +320,8 @@ window "statwindow"
size = 640x480
anchor1 = none
anchor2 = none
+ text-color = #eaeaea
+ background-color = #272727
saved-params = "pos;size;is-minimized;is-maximized"
is-pane = true
elem "stat"
@@ -294,6 +330,11 @@ window "statwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
+ text-color = #99aab5
+ background-color = #2c2f33
is-default = true
saved-params = ""
-
+ tab-text-color = #99aab5
+ tab-background-color = #272727
+ prefix-color = #ebebeb
+ suffix-color = #ebebeb
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index b2030f959ac..c6a99fe0a27 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1484,6 +1484,7 @@
#include "code\modules\client\client_colour.dm"
#include "code\modules\client\client_defines.dm"
#include "code\modules\client\client_procs.dm"
+#include "code\modules\client\darkmode.dm"
#include "code\modules\client\message.dm"
#include "code\modules\client\player_details.dm"
#include "code\modules\client\preferences.dm"