diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm
index bbeb0683f0..ba2794d00f 100644
--- a/code/controllers/subsystem/chat.dm
+++ b/code/controllers/subsystem/chat.dm
@@ -31,19 +31,13 @@ SUBSYSTEM_DEF(chat)
//Some macros remain in the string even after parsing and fuck up the eventual output
var/original_message = 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 += "
"
//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
@@ -55,6 +49,17 @@ SUBSYSTEM_DEF(chat)
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
@@ -74,6 +79,15 @@ SUBSYSTEM_DEF(chat)
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
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index cdf54d5d9c..95e02c5a94 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -452,7 +452,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
mob_trait = TRAIT_COLDBLOODED
gain_text = "You feel cold-blooded."
lose_text = "You feel more warm-blooded."
-
+
/datum/quirk/monophobia
name = "Monophobia"
desc = "You will become increasingly stressed when not in company of others, triggering panic reactions ranging from sickness to heart attacks."
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index a8017631bd..b06636ea2e 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -196,3 +196,15 @@
transfer_prints = FALSE
strip_mod = 5
strip_silence = TRUE
+
+/obj/item/clothing/gloves/evening
+ name = "evening gloves"
+ desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish."
+ icon_state = "evening"
+ item_state = "evening"
+ strip_delay = 40
+ equip_delay_other = 20
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ strip_mod = 0.9
+ custom_price = PRICE_ALMOST_CHEAP
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 73675257e4..416d0d2383 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -446,3 +446,10 @@
/obj/item/clothing/head/kepi/old
icon_state = "kepi_old"
desc = "A flat, white circular cap with a visor, that demands some honor from it's wearer."
+
+/obj/item/clothing/head/maid
+ name = "maid headband"
+ desc = "Maid in China."
+ icon_state = "maid"
+ item_state = "maid"
+ dynamic_hair_suffix = ""
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 3b5ff71705..bfdb731869 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -79,9 +79,9 @@
new /obj/item/clothing/neck/necklace/memento_mori(src)
if(29)
if(prob(50))
- new /obj/item/malf_upgrade
+ new /obj/item/malf_upgrade(src)
else
- new /obj/item/disk/tech_disk/illegal
+ new /obj/item/disk/tech_disk/illegal(src)
//KA modkit design discs
/obj/item/disk/design_disk/modkit_disc
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index 9dfb4c76a0..260b124283 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -84,8 +84,10 @@
/obj/item/clothing/suit/poncho = 1,
/obj/item/clothing/suit/poncho/green = 1,
/obj/item/clothing/suit/poncho/red = 1,
+ /obj/item/clothing/head/maid = 1,
/obj/item/clothing/under/costume/maid = 1,
/obj/item/clothing/under/rank/civilian/janitor/maid = 1,
+ /obj/item/clothing/gloves/evening = 1,
/obj/item/clothing/glasses/cold=1,
/obj/item/clothing/glasses/heat=1,
/obj/item/clothing/suit/whitedress = 1,
diff --git a/code/modules/vending/kinkmate.dm b/code/modules/vending/kinkmate.dm
index c416d87439..df8a4e8a96 100644
--- a/code/modules/vending/kinkmate.dm
+++ b/code/modules/vending/kinkmate.dm
@@ -6,8 +6,10 @@
product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
vend_reply = "Have fun, you shameless pervert!"
products = list(
+ /obj/item/clothing/head/maid = 5,
/obj/item/clothing/under/costume/maid = 5,
/obj/item/clothing/under/rank/civilian/janitor/maid = 5,
+ /obj/item/clothing/gloves/evening = 5,
/obj/item/clothing/neck/petcollar = 5,
/obj/item/clothing/neck/petcollar/choker = 5,
/obj/item/clothing/neck/petcollar/leather = 5,
diff --git a/html/changelog.html b/html/changelog.html
index 59426bb8d3..d0731d740c 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,34 @@
-->