[MIRROR] Adds toggleable darkmode to the game! (#4857)

* Adds toggleable darkmode to the game! (#43072)
This commit is contained in:
yogstation13-bot
2019-04-08 09:13:33 +02:00
committed by Gary Lafortune
parent b3d94e3b8a
commit 25a1dad23e
18 changed files with 762 additions and 122 deletions

View File

@@ -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 //

View File

@@ -442,7 +442,7 @@ SUBSYSTEM_DEF(job)
to_chat(M, "<FONT color='red'><b>Space Law has been updated! </font><a href='https://wiki.yogstation.net/wiki/Space_Law'>Click here to view the updates.</a></b>")
//YOGS end
if(CONFIG_GET(number/minimal_access_threshold))
to_chat(M, "<FONT color='blue'><B>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.</B></font>")
to_chat(M, "<span class='notice'><B>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.</B></span>")
if(ishuman(H))
var/mob/living/carbon/human/wageslave = H
to_chat(M, "<b>Your account ID is [wageslave.account_id].</b>")

View File

@@ -205,7 +205,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("<span class='notice'>Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.</span>")
else
mode = smode
@@ -275,7 +275,7 @@ SUBSYSTEM_DEF(ticker)
round_start_time = world.time
SSdbcore.SetRoundStart()
to_chat(world, "<FONT color='blue'><B>Welcome to [station_name()], enjoy your stay!</B></FONT>")
to_chat(world, "<span class='notice'><B>Welcome to [station_name()], enjoy your stay!</B></span>")
SEND_SOUND(world, sound('sound/ai/welcome.ogg'))
current_state = GAME_STATE_PLAYING
@@ -283,7 +283,7 @@ SUBSYSTEM_DEF(ticker)
Master.SetRunLevel(RUNLEVEL_GAME)
if(SSevents.holidays)
to_chat(world, "<font color='blue'>and...</font>")
to_chat(world, "<span class='notice'>and...</span>")
for(var/holidayname in SSevents.holidays)
var/datum/holiday/holiday = SSevents.holidays[holidayname]
to_chat(world, "<h4>[holiday.greet()]</h4>")

View File

@@ -159,15 +159,15 @@
t1 = "*dead*"
else
t1 = "Unknown"
return {"<font color="[patient.health > 50 ? "blue" : "red"]"><b>Health:</b> [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]</font><br />
<font color="[patient.bodytemperature > 50 ? "blue" : "red"]"><b>Core Temperature:</b> [patient.bodytemperature-T0C]&deg;C ([patient.bodytemperature*1.8-459.67]&deg;F)</font><br />
<font color="[patient.getBruteLoss() < 60 ? "blue" : "red"]"><b>Brute Damage:</b> [patient.getBruteLoss()]%</font><br />
<font color="[patient.getOxyLoss() < 60 ? "blue" : "red"]"><b>Respiratory Damage:</b> [patient.getOxyLoss()]%</font><br />
<font color="[patient.getToxLoss() < 60 ? "blue" : "red"]"><b>Toxin Content:</b> [patient.getToxLoss()]%</font><br />
<font color="[patient.getFireLoss() < 60 ? "blue" : "red"]"><b>Burn Severity:</b> [patient.getFireLoss()]%</font><br />
<font color="red">[patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]</font><br />
<font color="red">[patient.getBrainLoss() ? "Significant brain damage detected." : ""]</font><br />
<font color="red">[length(patient.get_traumas()) ? "Brain Traumas detected." : ""]</font><br />
return {"<font color="[patient.health > 50 ? "#3d5bc3" : "#c51e1e"]"><b>Health:</b> [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]</font><br />
<font color="[patient.bodytemperature > 50 ? "#3d5bc3" : "#c51e1e"]"><b>Core Temperature:</b> [patient.bodytemperature-T0C]&deg;C ([patient.bodytemperature*1.8-459.67]&deg;F)</font><br />
<font color="[patient.getBruteLoss() < 60 ? "#3d5bc3" : "#c51e1e"]"><b>Brute Damage:</b> [patient.getBruteLoss()]%</font><br />
<font color="[patient.getOxyLoss() < 60 ? "#3d5bc3" : "#c51e1e"]"><b>Respiratory Damage:</b> [patient.getOxyLoss()]%</font><br />
<font color="[patient.getToxLoss() < 60 ? "#3d5bc3" : "#c51e1e"]"><b>Toxin Content:</b> [patient.getToxLoss()]%</font><br />
<font color="[patient.getFireLoss() < 60 ? "#3d5bc3" : "#c51e1e"]"><b>Burn Severity:</b> [patient.getFireLoss()]%</font><br />
<span_class='danger'>[patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]</span><br />
<span_class='danger'>[patient.getBrainLoss() ? "Significant brain damage detected." : ""]</span><br />
<span_class='danger'>[length(patient.get_traumas()) ? "Brain Traumas detected." : ""]</span><br />
"}
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_reagents()

View File

@@ -6,7 +6,7 @@
set category = null
set name = "Admin PM Mob"
if(!holder)
to_chat(src, "<font color='red'>Error: Admin-PM-Context: Only administrators may use this command.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM-Context: Only administrators may use this command.</span>")
return
if(!ismob(M)) //yogs start
return
@@ -23,7 +23,7 @@
set category = "Admin"
set name = "Admin PM"
if(!holder)
to_chat(src, "<font color='red'>Error: Admin-PM-Panel: Only administrators may use this command.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM-Panel: Only administrators may use this command.</span>")
return
var/list/client/targets[0]
for(var/client/T)
@@ -42,7 +42,7 @@
/client/proc/cmd_ahelp_reply(whom)
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
var/client/C
if(istext(whom))
@@ -53,7 +53,7 @@
C = whom
if(!C)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: Client not found.</span>")
return
var/datum/admin_help/AH = C.current_ticket
@@ -70,12 +70,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, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo
to_chat(src, "<font color='red'>You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.</font>")
to_chat(src, "<font color='blue'>Message: [msg]</font>")
to_chat(src, "<span_class='danger'>You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.</span>")
to_chat(src, "<span_class='notice'>Message: [msg]</span>")
return
var/client/recipient
@@ -100,14 +100,14 @@
if(!msg)
return
if(holder)
to_chat(src, "<font color='red'>Error: Use the admin IRC channel, nerd.</font>")
to_chat(src, "<span_class='danger'>Error: Use the admin IRC channel, nerd.</span>")
return
else
if(!recipient)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: Client not found.</span>")
if(msg)
to_chat(src, msg)
return
@@ -123,12 +123,12 @@
return
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
if(!recipient)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: Client not found.</span>")
else
current_ticket.MessageNoRecipient(msg)
return
@@ -157,24 +157,27 @@
else
if(recipient.holder)
if(holder) //both are admins
to_chat(recipient, "<font color='red'>Admin PM from-<b>[key_name(src, recipient, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></font>")
to_chat(src, "<font color='blue'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></font>")
to_chat(recipient, "<span_class='danger'>Admin PM from-<b>[key_name(src, recipient, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></span>")
to_chat(src, "<span_class='notice'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></span>")
//omg this is dumb, just fill in both their tickets
admin_ticket_log(src, msg, FALSE) // yogs - Yog Tickets
// yogs start - Yog Tickets
admin_ticket_log(src, msg, FALSE)
if(recipient.current_ticket && !recipient.current_ticket.handling_admin)
recipient.current_ticket.Administer(src)
// yogs end - Yog Tickets
if(recipient != src) //reeee
admin_ticket_log(recipient, msg, FALSE) // yogs - Yog Tickets
else //recipient is an admin but sender is not
//YOGS START -- Yogs Tickets
if(!current_ticket)
to_chat(src, "<font color='blue'>Ticket closed, please make a new one before trying to contact admins!</span>") // yogs - Yog Tickets
to_chat(src, "<span class='notice'>Ticket closed, please make a new one before trying to contact admins!</span>")
return
admin_ticket_log(src, keywordparsedmsg, FALSE) // yogs - Yog Tickets
to_chat(recipient, "<font color='red'>Reply PM from-<b>[key_name(src, recipient, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></font>") // yogs - Yog Tickets
to_chat(src, "<font color='blue'>-- [key_name(src, null, 0)] -> <b>Admins</b>: <span class='linkify'>[msg]</span></font>") // yogs - Yog Tickets
admin_ticket_log(src, keywordparsedmsg, FALSE)
to_chat(recipient, "<span class='danger'>Reply PM from-<b>[key_name(src, recipient, 1)]</b>: <span class='linkify'>[keywordparsedmsg]</span></span>")
to_chat(src, "<span class='notice'>-- [key_name(src, null, 0)] -> <b>Admins</b>: <span class='linkify'>[msg]</span></span>")
//YOGS END
//play the receiving admin the adminhelp sound (if they have them enabled)
if(recipient.prefs.toggles & SOUND_ADMINHELP)
SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
@@ -186,10 +189,10 @@
if(!recipient.current_ticket.handling_admin)
recipient.current_ticket.Administer(src) // yogs - Yog Tickets
to_chat(recipient, "<font color='red' size='4'><b>-- Administrator private message --</b></font>")
to_chat(recipient, "<font color='red'>Admin PM from-<b>[key_name(src, recipient, 0)]</b>: <span class='linkify'>[msg]</span></font>")
to_chat(recipient, "<font color='red'><i>Click on the administrator's name to reply.</i></font>")
to_chat(src, "<font color='blue'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: <span class='linkify'>[msg]</span></font>")
to_chat(recipient, "<font color='red' size='4'><b>-- Administrator private message --</b></span>")
to_chat(recipient, "<span_class='danger'>Admin PM from-<b>[key_name(src, recipient, 0)]</b>: <span class='linkify'>[msg]</span></span>")
to_chat(recipient, "<span_class='danger'><i>Click on the administrator's name to reply.</i></span>")
to_chat(src, "<span_class='notice'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: <span class='linkify'>[msg]</span></span>")
admin_ticket_log(recipient, msg, FALSE) // yogs - Yog Tickets
@@ -210,20 +213,20 @@
return
else //neither are admins
to_chat(src, "<font color='red'>Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.</font>")
to_chat(src, "<span_class='danger'>Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.</span>")
return
if(irc)
log_admin_private("PM: [key_name(src)]->IRC: [rawmsg]")
for(var/client/X in GLOB.admins)
to_chat(X, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;IRC:</B> [keywordparsedmsg]</font>")
to_chat(X, "<span_class='notice'><B>PM: [key_name(src, X, 0)]-&gt;IRC:</B> [keywordparsedmsg]</span>")
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, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</font>" )
to_chat(X, "<span_class='notice'><B>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</span>" )
@@ -305,9 +308,9 @@
log_admin_private("IRC PM: [sender] -> [key_name(C)] : [msg]")
msg = emoji_parse(msg)
to_chat(C, "<font color='red' size='4'><b>-- Administrator private message --</b></font>")
to_chat(C, "<font color='red'>Admin PM from-<b><a href='?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]</font>")
to_chat(C, "<font color='red'><i>Click on the administrator's name to reply.</i></font>")
to_chat(C, "<font color='red' size='4'><b>-- Administrator private message --</b></span>")
to_chat(C, "<span_class='danger'>Admin PM from-<b><a href='?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]</span>")
to_chat(C, "<span_class='danger'><i>Click on the administrator's name to reply.</i></span>")
admin_ticket_log(C, msg) // yogs - Yog Tickets

View File

@@ -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, "<font color='red'>Error: create_xeno(): no suitable candidates.</font>")
to_chat(usr, "<span class='danger'>Error: create_xeno(): no suitable candidates.</span>")
if(!istext(ckey))
return 0

View File

@@ -233,10 +233,10 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
alert_mob_dupe_login = TRUE
if(matches)
if(C)
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)].</font>")
message_admins("<span class='danger'><B>Notice: </B></span><span class='notice'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)].</span>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). </font>")
message_admins("<span class='danger'><B>Notice: </B></span><span class='notice'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). </span>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)] (no longer logged in).")
if(GLOB.player_details[ckey])

View File

@@ -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',
)

View File

@@ -454,4 +454,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()

View File

@@ -97,6 +97,10 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
// yogs end
if("setMusicVolume")
data = setMusicVolume(arglist(params))
if("swaptodarkmode")
swaptodarkmode()
if("swaptolightmode")
swaptolightmode()
if(data)
ehjax_send(data = data)
@@ -261,3 +265,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()

View File

@@ -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,85 +258,85 @@ 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;}
.looc {color: #63b2f2; font-weight: bold;} /* yogs - LOOC */
.adminsay {color: #996600; font-weight: bold;} /*yogs - changes asay colour back*/
.admin {color: #386aff; 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: #839e85;} /* yogs -- general radio usage, noncommon*/
.commonradio {color: #008000;} /* yogs -- Standard green radio chatter, for common only*/
.sciradio {color: #993399;}
.sciradio {color: #7c00e6;}
.comradio {color: #204090;} /* yogs */
.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;}
@@ -342,11 +345,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;}
@@ -375,13 +378,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;}
@@ -394,13 +396,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: #00FF00; font-size: 24px;} /* yogs -- pure Greentext, as it should be */
.redtext {color: #FF0000; font-size: 24px;} /* yogs -- pure Redtext, as it should be */
.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; }
@@ -431,7 +433,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;}

View File

@@ -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;}

View File

@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="font-awesome.css" />
<link rel="stylesheet" type="text/css" href="browserOutput.css" />
<link id="sheetofstyles" rel="stylesheet" type="text/css" href="browserOutput.css" />
<link rel="stylesheet" type="text/css" href="spritesheet_chat.css" />
<script type="text/javascript" src="errorHandler.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>
@@ -28,6 +28,9 @@
<i class="icon-circle" id="pingDot"></i>
<span class="ms" id="pingMs">--ms</span>
</div>
<div id="darkmodething">
<a href="#" class="subCell toggle" id="darkmodetoggle" title="Darkmode"><i class="icon-adjust"></i></a>
</div>
<div id="audio">
<a href="#" class="subCell toggle" id="toggleAudio" title="Audio"><i class="icon-volume-up"></i></a>
</div>

View File

@@ -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};
@@ -716,6 +730,7 @@ $(function() {
'shighlightColor': getCookie('highlightcolor'),
'smusicVolume': getCookie('musicVolume'),
'smessagecombining': getCookie('messagecombining'),
'sdarkmode': getCookie('darkmode'),
};
if (savedConfig.sfontSize) {
@@ -726,6 +741,9 @@ $(function() {
$("body").css('line-height', savedConfig.slineHeight);
internalOutput('<span class="internal boldnshit">Loaded line height setting of: '+savedConfig.slineHeight+'</span>', 'internal');
}
if(savedConfig.sdarkmode == 'false'){
swap(); //They dont want darkmode, so switch!
}
if (savedConfig.spingDisabled) {
if (savedConfig.spingDisabled == 'true') {
opts.pingDisabled = true;
@@ -772,8 +790,6 @@ $(function() {
opts.messageCombining = true;
}
}
(function() {
var dataCookie = getCookie('connData');
if (dataCookie) {
@@ -940,7 +956,9 @@ $(function() {
$('#toggleOptions').click(function(e) {
handleToggleClick($subOptions, $(this));
});
$('#darkmodetoggle').click(function(e) {
swap();
});
$('#toggleAudio').click(function(e) {
handleToggleClick($subAudio, $(this));
});

View File

@@ -37,4 +37,4 @@
return
last_request = world.time
to_chat(usr, "<span class='notice'>Your request has been received by CentCom.</span>")
to_chat(GLOB.admins, "<b>FERRY: <font color='blue'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;[HrefToken()];secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")
to_chat(GLOB.admins, "<b>FERRY: <font color='#3d5bc3'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;[HrefToken()];secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")

View File

@@ -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"
@@ -85,6 +86,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 +98,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 +110,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 +122,7 @@ window "mainwindow"
size = 200x200
anchor1 = none
anchor2 = none
background-color = #272727
is-visible = false
saved-params = ""
elem "tooltip"
@@ -123,6 +131,7 @@ window "mainwindow"
size = 999x999
anchor1 = none
anchor2 = none
background-color = #272727
is-visible = false
saved-params = ""
@@ -133,6 +142,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 +151,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 +166,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 +176,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 +188,8 @@ window "infowindow"
size = 80x20
anchor1 = 3,0
anchor2 = 19,0
text-color = #99aab5
background-color = #494949
saved-params = "is-checked"
text = "Changelog"
command = "changelog"
@@ -182,6 +199,8 @@ window "infowindow"
size = 80x20
anchor1 = 19,0
anchor2 = 34,0
text-color = #99aab5
background-color = #494949
saved-params = "is-checked"
text = "Rules"
command = "rules"
@@ -191,6 +210,8 @@ window "infowindow"
size = 80x20
anchor1 = 34,0
anchor2 = 50,0
text-color = #99aab5
background-color = #494949
saved-params = "is-checked"
text = "Wiki"
command = "wiki"
@@ -200,6 +221,8 @@ window "infowindow"
size = 80x20
anchor1 = 50,0
anchor2 = 66,0
text-color = #99aab5
background-color = #494949
saved-params = "is-checked"
text = "Forum"
command = "forum"
@@ -209,6 +232,8 @@ window "infowindow"
size = 80x20
anchor1 = 66,0
anchor2 = 81,0
text-color = #99aab5
background-color = #3a3a3a
saved-params = "is-checked"
text = "Github"
command = "github"
@@ -218,6 +243,8 @@ window "infowindow"
size = 80x20
anchor1 = 81,0
anchor2 = 97,0
text-color = #99aab5
background-color = #492020
saved-params = "is-checked"
text = "Report Issue"
command = "report-issue"
@@ -256,6 +283,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"
@@ -264,7 +293,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 = ""
@@ -275,6 +305,8 @@ window "outputwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
text-color = #99aab5
background-color = #272727
is-default = true
saved-params = ""
@@ -305,7 +337,7 @@ window "preferences_window"
anchor2 = 100,100
right-click = true
saved-params = "zoom;letterbox;zoom-mode"
window "statwindow"
elem "statwindow"
type = MAIN
@@ -313,6 +345,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"
@@ -321,9 +355,14 @@ 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
window "Telecomms IDE"
elem "Telecomms IDE"
type = MAIN

View File

@@ -1486,6 +1486,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"

View File

@@ -1498,6 +1498,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"