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))