diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm
index 13dccc74..3d67a96a 100644
--- a/code/__DEFINES/lighting.dm
+++ b/code/__DEFINES/lighting.dm
@@ -80,4 +80,28 @@
#define FLASH_LIGHT_DURATION 2
#define FLASH_LIGHT_POWER 3
-#define FLASH_LIGHT_RANGE 3.8
\ No newline at end of file
+#define FLASH_LIGHT_RANGE 3.8
+
+/// Returns the red part of a #RRGGBB hex sequence as number
+#define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4))
+
+/// Returns the green part of a #RRGGBB hex sequence as number
+#define GETGREENPART(hexa) hex2num(copytext(hexa, 4, 6))
+
+/// Returns the blue part of a #RRGGBB hex sequence as number
+#define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8))
+
+/// Parse the hexadecimal color into lumcounts of each perspective.
+#define PARSE_LIGHT_COLOR(source) \
+do { \
+ if (source.light_color) { \
+ var/__light_color = source.light_color; \
+ source.lum_r = GETREDPART(__light_color) / 255; \
+ source.lum_g = GETGREENPART(__light_color) / 255; \
+ source.lum_b = GETBLUEPART(__light_color) / 255; \
+ } else { \
+ source.lum_r = 1; \
+ source.lum_g = 1; \
+ source.lum_b = 1; \
+ }; \
+} while (FALSE)
\ No newline at end of file
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index a7655a71..6ffc5eee 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -544,22 +544,6 @@
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common
-/proc/GetHexColors(const/hexa)
- return list(
- GetRedPart(hexa)/ 255,
- GetGreenPart(hexa)/ 255,
- GetBluePart(hexa)/ 255
- )
-
-/proc/GetRedPart(const/hexa)
- return hex2num(copytext(hexa, 2, 4))
-
-/proc/GetGreenPart(const/hexa)
- return hex2num(copytext(hexa, 4, 6))
-
-/proc/GetBluePart(const/hexa)
- return hex2num(copytext(hexa, 6, 8))
-
/proc/lavaland_equipment_pressure_check(turf/T)
. = FALSE
if(!istype(T))
diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm
index a579752a..d02fd5a3 100644
--- a/code/controllers/subsystem/chat.dm
+++ b/code/controllers/subsystem/chat.dm
@@ -1,9 +1,10 @@
SUBSYSTEM_DEF(chat)
name = "Chat"
- flags = SS_TICKER|SS_NO_INIT
+ flags = SS_TICKER
wait = 1
priority = FIRE_PRIORITY_CHAT
init_order = INIT_ORDER_CHAT
+
var/list/payload = list()
@@ -17,7 +18,7 @@ SUBSYSTEM_DEF(chat)
return
-/datum/controller/subsystem/chat/proc/queue(target, message, handle_whitespace = TRUE)
+/datum/controller/subsystem/chat/proc/queue(target, message, handle_whitespace = TRUE, trailing_newline = TRUE, confidential = TRUE)
if(!target || !message)
return
@@ -29,25 +30,37 @@ SUBSYSTEM_DEF(chat)
target = GLOB.clients
//Some macros remain in the string even after parsing and fuck up the eventual output
- message = replacetext(message, "\improper", "")
- message = replacetext(message, "\proper", "")
- if(handle_whitespace)
- message = replacetext(message, "\n", "
")
- message = replacetext(message, "\t", "[FOURSPACES][FOURSPACES]")
- message += "
"
-
+ var/original_message = message
//url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript.
//Do the double-encoding here to save nanoseconds
- var/twiceEncoded = url_encode(url_encode(message))
+ var/twiceEncoded
if(islist(target))
+ var/sanitized_message = FALSE
for(var/I in target)
var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible
+ if(!C)
+ continue
+
+ //Send it to the old style output window.
+ SEND_TEXT(C, original_message)
+
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
continue
+ if(!sanitized_message)
+ message = replacetext(message, "\improper", "")
+ message = replacetext(message, "\proper", "")
+ if(handle_whitespace)
+ message = replacetext(message, "\n", "
")
+ message = replacetext(message, "\t", "[FOURSPACES][FOURSPACES]")
+ if (trailing_newline)
+ message += "
"
+ twiceEncoded = url_encode(url_encode(message))
+ sanitized_message = TRUE
+
if(!C.chatOutput.loaded) //Client still loading, put their messages in a queue
C.chatOutput.messageQueue += message
continue
@@ -57,11 +70,26 @@ SUBSYSTEM_DEF(chat)
else
var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible
+ if(!C)
+ return
+
+ //Send it to the old style output window.
+ SEND_TEXT(C, original_message)
+
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
return
+ message = replacetext(message, "\improper", "")
+ message = replacetext(message, "\proper", "")
+ if(handle_whitespace)
+ message = replacetext(message, "\n", "
")
+ message = replacetext(message, "\t", "[FOURSPACES][FOURSPACES]")
+ if (trailing_newline)
+ message += "
"
+ twiceEncoded = url_encode(url_encode(message))
+
if(!C.chatOutput.loaded) //Client still loading, put their messages in a queue
C.chatOutput.messageQueue += message
return
- payload[C] += twiceEncoded
\ No newline at end of file
+ payload[C] += twiceEncoded
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index dffb0439..088eaee0 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -355,7 +355,7 @@ SUBSYSTEM_DEF(ticker)
var/turf/epi = bomb.loc
qdel(bomb)
if(epi)
- explosion(epi, 0, 256, 512, 0, TRUE, TRUE, 0, TRUE)
+ explosion(epi, 512, 0, 0, 0, TRUE, TRUE, 0, TRUE)
/datum/controller/subsystem/ticker/proc/create_characters()
for(var/mob/dead/new_player/player in GLOB.player_list)
diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm
index c2dd9a78..fbb55055 100644
--- a/code/game/machinery/telecomms/machines/allinone.dm
+++ b/code/game/machinery/telecomms/machines/allinone.dm
@@ -35,8 +35,6 @@
signal.data["compression"] = 0
signal.mark_done()
- if(signal.data["slow"] > 0)
- sleep(signal.data["slow"]) // simulate the network lag if necessary
signal.broadcast()
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm
index 0abe97c7..6b03bcc8 100644
--- a/code/game/machinery/telecomms/machines/broadcaster.dm
+++ b/code/game/machinery/telecomms/machines/broadcaster.dm
@@ -41,9 +41,6 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
return
GLOB.recentmessages.Add(signal_message)
- if(signal.data["slow"] > 0)
- sleep(signal.data["slow"]) // simulate the network lag if necessary
-
signal.broadcast()
if(!GLOB.message_delay)
diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm
index b92ebc0d..259333e9 100644
--- a/code/game/machinery/telecomms/machines/bus.dm
+++ b/code/game/machinery/telecomms/machines/bus.dm
@@ -31,17 +31,10 @@
if(relay_information(signal, /obj/machinery/telecomms/processor))
return
- // failed to send to a processor, relay information anyway
- signal.data["slow"] += rand(1, 5) // slow the signal down only slightly
-
// Try sending it!
var/list/try_send = list(signal.server_type, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus)
- var/i = 0
for(var/send in try_send)
- if(i)
- signal.data["slow"] += rand(0, 1) // slow the signal down only slightly
- i++
if(relay_information(signal, send))
break
diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm
index 6e48d009..67cc9fbd 100644
--- a/code/modules/lighting/lighting_source.dm
+++ b/code/modules/lighting/lighting_source.dm
@@ -9,7 +9,7 @@
var/turf/pixel_turf // The turf the top_atom appears to over.
var/light_power // Intensity of the emitter light.
var/light_range // The range of the emitted light.
- var/light_color // The colour of the light, string, decomposed by parse_light_color()
+ var/light_color // The colour of the light, string, decomposed by PARSE_LIGHT_COLOR()
// Variables for keeping track of the colour.
var/lum_r
@@ -48,11 +48,10 @@
light_range = source_atom.light_range
light_color = source_atom.light_color
- parse_light_color()
+ PARSE_LIGHT_COLOR(src)
update()
- return ..()
/datum/light_source/Destroy(force)
remove_lum()
@@ -99,17 +98,6 @@
/datum/light_source/proc/vis_update()
EFFECT_UPDATE(LIGHTING_VIS_UPDATE)
-// Decompile the hexadecimal colour into lumcounts of each perspective.
-/datum/light_source/proc/parse_light_color()
- if (light_color)
- lum_r = GetRedPart (light_color) / 255
- lum_g = GetGreenPart (light_color) / 255
- lum_b = GetBluePart (light_color) / 255
- else
- lum_r = 1
- lum_g = 1
- lum_b = 1
-
// Macro that applies light to a new corner.
// It is a macro in the interest of speed, yet not having to copy paste it.
// If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line.
@@ -224,7 +212,7 @@
if (source_atom.light_color != light_color)
light_color = source_atom.light_color
- parse_light_color()
+ PARSE_LIGHT_COLOR(src)
update = TRUE
else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 19ff4728..75b7fe51 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -917,6 +917,9 @@
return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])"
/obj/machinery/power/apc/proc/update()
+ var/old_light = area.power_light
+ var/old_equip = area.power_equip
+ var/old_environ = area.power_environ
if(operating && !shorted && !failure_timer)
area.power_light = (lighting > 1)
area.power_equip = (equipment > 1)
@@ -925,7 +928,8 @@
area.power_light = FALSE
area.power_equip = FALSE
area.power_environ = FALSE
- area.power_change()
+ if(old_light != area.power_light || old_equip != area.power_equip || old_environ != area.power_environ)
+ area.power_change()
/obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic()
if(IsAdminGhost(user))