From 0528675846a4fa8e9da7f78f5fa52afd1f424400 Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:08:55 -0700 Subject: [PATCH] Added dynamic flavour text, where covered bodyparts' flavour isn't displayed --- code/__HELPERS/text.dm | 13 +- code/modules/client/preferences.dm | 194 +++++++++++------- code/modules/client/preferences_savefile.dm | 4 +- code/modules/mob/living/carbon/human/emote.dm | 36 +++- code/modules/mob/living/carbon/human/human.dm | 71 +++++++ .../mob/living/carbon/human/human_defines.dm | 2 + 6 files changed, 242 insertions(+), 78 deletions(-) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index af77addeab..d29bb84bc9 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -303,4 +303,15 @@ proc/checkhtml(var/t) var/new_text = "" for(var/i = length(text); i > 0; i--) new_text += copytext(text, i, i+1) - return new_text + return new_text + +//Used in preferences' SetFlavorText and human's set_flavor verb +//Previews a string of len or less length +proc/TextPreview(var/string,var/len=40) + if(lentext(string) <= len) + if(!lentext(string)) + return "\[...\]" + else + return string + else + return "[copytext(string, 1, 37)]..." \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 448662c451..cc532664a1 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -107,7 +107,8 @@ datum/preferences var/list/organ_data = list() var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" - var/flavor_text = "" + var/list/flavor_texts = list() + var/med_record = "" var/sec_record = "" var/gen_record = "" @@ -386,14 +387,7 @@ datum/preferences dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])
" - dat += "Set Flavor Text
" - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) - dat += "\[...\]" - else - dat += "[flavor_text]" - else - dat += "[copytext(flavor_text, 1, 37)]...
" + dat += "Set Flavor Text
" dat += "
" dat += "
Hair
" @@ -558,24 +552,15 @@ datum/preferences HTML += "Medical Records
" - if(lentext(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." + HTML += TextPreview(med_record,40) HTML += "

Employment Records
" - if(lentext(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." + HTML += TextPreview(gen_record,40) HTML += "

Security Records
" - if(lentext(sec_record) <= 40) - HTML += "[sec_record]
" - else - HTML += "[copytext(sec_record, 1, 37)]...
" + HTML += TextPreview(sec_record,40) HTML += "
" HTML += "\[Done\]" @@ -603,7 +588,44 @@ datum/preferences user << browse(HTML, "window=antagoptions") return - + proc/SetFlavorText(mob/user) + var/HTML = "" + HTML += "
" + HTML += "Set Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + user << browse(null, "window=preferences") + user << browse(HTML, "window=flavor_text;size=430x300") + return proc/GetPlayerAltTitle(datum/job/job) return player_alt_titles.Find(job.title) > 0 \ @@ -805,6 +827,72 @@ datum/preferences SetSkills(user) return 1 + else if (href_list["preference"] == "loadout") + + if(href_list["task"] == "input") + + var/list/valid_gear_choices = list() + + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) + continue + valid_gear_choices += gear_name + + var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices + + if(choice && gear_datums[choice]) + + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + + var/datum/gear/C = gear_datums[choice] + total_cost += C.cost + if(C && total_cost <= MAX_GEAR_COST) + gear += choice + user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + else + user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + + else if(href_list["task"] == "remove") + var/to_remove = href_list["gear"] + if(!to_remove) return + for(var/gear_name in gear) + if(gear_name == to_remove) + gear -= gear_name + break + + else if(href_list["preference"] == "flavor_text") + switch(href_list["task"]) + if("open") + SetFlavorText(user) + return + if("done") + user << browse(null, "window=flavor_text") + ShowChoices(user) + return + if("general") + var/msg = input(usr,"Give a general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + else + var/msg = input(usr,"Set the flavor text for your [href_list["task"]].","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + SetFlavorText(user) + return + else if(href_list["preference"] == "records") if(text2num(href_list["record"]) >= 1) SetRecords(user) @@ -857,48 +945,6 @@ datum/preferences ShowChoices(user) return 1 - else if (href_list["preference"] == "loadout") - - if(href_list["task"] == "input") - - var/list/valid_gear_choices = list() - - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) - continue - valid_gear_choices += gear_name - - var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices - - if(choice && gear_datums[choice]) - - var/total_cost = 0 - - if(isnull(gear) || !islist(gear)) gear = list() - - if(gear && gear.len) - for(var/gear_name in gear) - if(gear_datums[gear_name]) - var/datum/gear/G = gear_datums[gear_name] - total_cost += G.cost - - var/datum/gear/C = gear_datums[choice] - total_cost += C.cost - if(C && total_cost <= MAX_GEAR_COST) - gear += choice - user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." - else - user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." - - else if(href_list["task"] == "remove") - var/to_remove = href_list["gear"] - if(!to_remove) return - for(var/gear_name in gear) - if(gear_name == to_remove) - gear -= gear_name - break - switch(href_list["task"]) if("random") switch(href_list["preference"]) @@ -1159,15 +1205,6 @@ datum/preferences if(new_relation) nanotrasen_relation = new_relation - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - flavor_text = msg - if("disabilities") if(text2num(href_list["disabilities"]) >= -1) if(text2num(href_list["disabilities"]) >= 0) @@ -1363,7 +1400,16 @@ datum/preferences if(character.dna) character.dna.real_name = character.real_name - character.flavor_text = flavor_text + character.flavor_texts["general"] = flavor_texts["general"] + character.flavor_texts["head"] = flavor_texts["head"] + character.flavor_texts["face"] = flavor_texts["face"] + character.flavor_texts["eyes"] = flavor_texts["eyes"] + character.flavor_texts["torso"] = flavor_texts["torso"] + character.flavor_texts["arms"] = flavor_texts["arms"] + character.flavor_texts["hands"] = flavor_texts["hands"] + character.flavor_texts["legs"] = flavor_texts["legs"] + character.flavor_texts["feet"] = flavor_texts["feet"] + character.med_record = med_record character.sec_record = sec_record character.gen_record = gen_record diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ef3b8e5c03..c61f87b23f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -144,7 +144,7 @@ S["job_engsec_low"] >> job_engsec_low //Miscellaneous - S["flavor_text"] >> flavor_text + S["flavor_texts"] >> flavor_texts S["med_record"] >> med_record S["sec_record"] >> sec_record S["gen_record"] >> gen_record @@ -265,7 +265,7 @@ S["job_engsec_low"] << job_engsec_low //Miscellaneous - S["flavor_text"] << flavor_text + S["flavor_texts"] << flavor_texts S["med_record"] << med_record S["sec_record"] << sec_record S["gen_record"] << gen_record diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d4050c06b8..75eff694fa 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -584,4 +584,38 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = copytext(sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text), 1) + var/HTML = "" + HTML += "
" + HTML += "Update Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + src << browse(HTML, "window=flavor_changes;size=430x300") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fca5ffa065..14d17bfd2a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -74,6 +74,18 @@ prev_gender = gender // Debug for plural genders make_blood() + /* + flavor_texts["general"] = flavor_general + flavor_texts["head"] = flavor_head + flavor_texts["face"] = flavor_face + flavor_texts["eyes"] = flavor_eyes + flavor_texts["torso"] = flavor_torso + flavor_texts["arms"] = flavor_arms + flavor_texts["hands"] = flavor_hands + flavor_texts["legs"] = flavor_legs + flavor_texts["feet"] = flavor_feet*/ + + /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) if ((!( yes ) || now_pushing)) return @@ -827,6 +839,27 @@ if (href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) M.examine() + + if (href_list["flavor_change"]) + switch(href_list["flavor_change"]) + if("done") + src << browse(null, "window=flavor_changes") + return + if("general") + var/msg = input(usr,"Update the general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + return + else + var/msg = input(usr,"Update the flavor text for your [href_list["flavor_change"]].","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + set_flavor() + return ..() return @@ -1503,3 +1536,41 @@ return H << "\red Your nose begins to bleed..." H.drip(1) + +/mob/living/carbon/human/print_flavor_text() + var/list/equipment = list(src.head,src.wear_mask,src.glasses,src.w_uniform,src.wear_suit,src.gloves,src.shoes) + var/head_exposed = 1 + var/face_exposed = 1 + var/eyes_exposed = 1 + var/torso_exposed = 1 + var/arms_exposed = 1 + var/legs_exposed = 1 + var/hands_exposed = 1 + var/feet_exposed = 1 + + for(var/obj/item/clothing/C in equipment) + if(C.body_parts_covered & HEAD) + head_exposed = 0 + if(C.body_parts_covered & FACE) + face_exposed = 0 + if(C.body_parts_covered & EYES) + eyes_exposed = 0 + if(C.body_parts_covered & UPPER_TORSO) + torso_exposed = 0 + if(C.body_parts_covered & ARMS) + arms_exposed = 0 + if(C.body_parts_covered & HANDS) + hands_exposed = 0 + if(C.body_parts_covered & LEGS) + legs_exposed = 0 + if(C.body_parts_covered & FEET) + feet_exposed = 0 + + flavor_text = flavor_texts["general"] + flavor_text += "\n\n" + for (var/T in flavor_texts) + if(flavor_texts[T] != "") + if((T == "head" && head_exposed) || (T == "face" && face_exposed) || (T == "eyes" && eyes_exposed) || (T == "torso" && torso_exposed) || (T == "arms" && arms_exposed) || (T == "hands" && hands_exposed) || (T == "legs" && legs_exposed) || (T == "feet" && feet_exposed)) + flavor_text += flavor_texts[T] + flavor_text += "\n\n" + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d5db0fdbc7..818b9a9e7e 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -70,3 +70,5 @@ var/mob/remoteview_target = null var/hand_blood_color + + var/list/flavor_texts = list() \ No newline at end of file