diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 18acc2cf..e2c1b007 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -142,7 +142,7 @@
//checks text for html tags
//if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm)
//relpaces < with <
-proc/checkhtml(var/t)
+proc/checkhtml(var/t, var/whitelist = paper_tag_whitelist)
t = sanitize_simple(t, list(""="."))
var/p = findtext(t,"<",1)
while (p) //going through all the tags
@@ -153,8 +153,10 @@ proc/checkhtml(var/t)
tag = copytext(t,start, p)
p++
tag = copytext(t,start+1, p)
- if (!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it
+ if (!(tag in whitelist)) //if it's unkown tag, disarming it
t = copytext(t,1,start-1) + "<" + copytext(t,start+1)
+ if(whitelist == signature_tag_whitelist)
+ return null
p = findtext(t,"<",p)
return t
/*
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index e9ddd5eb..b0c224e1 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -62,6 +62,10 @@ datum/mind
// the world.time since the mob has been brigged, or -1 if not at all
var/brigged_since = -1
+ // The custom signature holder
+ var/signature
+ var/signature_font
+
New(var/key)
src.key = key
@@ -1288,6 +1292,8 @@ datum/mind
else
world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn"
if(!mind.name) mind.name = real_name
+ if(client.prefs.signature) mind.signature = client.prefs.signature
+ if(client.prefs.signature_font) mind.signature_font = client.prefs.signature_font
mind.current = src
//HUMAN
diff --git a/code/global.dm b/code/global.dm
index 57b90a85..90c139f7 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -37,6 +37,7 @@ var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4
var/list/paper_blacklist = list("java","onblur","onchange","onclick","ondblclick","onfocus","onkeydown", \
"onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover", \
"onmouseup","onreset","onselect","onsubmit","onunload")
+var/list/signature_tag_whitelist = list("i","u","b","small","big")
var/BLINDBLOCK = 0
var/DEAFBLOCK = 0
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index f35ed16b..daed9a39 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -125,10 +125,14 @@ datum/preferences
var/uplinklocation = "PDA"
- // OOC Metadata:
+ // OOC Metadata:
var/metadata = ""
var/slot_name = ""
+ //Signature information:
+ var/signature
+ var/signature_font
+
/datum/preferences/New(client/C)
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
if(istype(C))
@@ -139,6 +143,8 @@ datum/preferences
return
gender = pick(MALE, FEMALE)
real_name = random_name(gender)
+ signature = "[real_name]"
+ signature_font = "Verdanta"
gear = list()
@@ -401,6 +407,11 @@ datum/preferences
dat += "pAI Configuration
"
dat += "
"
+ dat += "Character's Signature
"
+ dat += "Edit Font Help
"
+ dat += "[signature]
"
+
+
dat += "
Hair
"
dat += "Change Color
"
dat += " Style: [h_style]__
"
@@ -1017,11 +1028,34 @@ datum/preferences
gear -= gear_name
break
+ else if(href_list["preference"] == "signature")
+ switch(href_list["task"])
+ if("input")
+ var/raw_signature = input(user, "Choose your character's signature:","Character Preference") as text
+ if(!isnull(raw_signature))
+ var/new_signature = checkhtml(raw_signature, signature_tag_whitelist)
+ if(new_signature && !(length(new_signature) > MAX_NAME_LEN + 12))
+ signature = new_signature
+ else
+ user << "Invalid signature. Your character's signature should be at least 2 and at most [MAX_NAME_LEN + 12] characters long. For accepted formatting tags, please review the Help option."
+ if("help")
+ var/HTML
+ HTML += "A character's signature can be augmented with the following tags:
"
+ HTML += "