This commit is contained in:
izac112
2023-03-19 22:24:48 +01:00
493 changed files with 26768 additions and 47717 deletions
@@ -140,7 +140,7 @@
return TOPIC_REFRESH
else if(href_list["metadata"])
var/new_metadata = sanitize(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit
if(new_metadata && CanUseTopic(user))
pref.metadata = new_metadata
return TOPIC_REFRESH
@@ -2,6 +2,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/preferences
var/equip_preview_mob = EQUIP_PREVIEW_ALL
var/animations_toggle = FALSE
var/icon/bgstate = "000"
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced")
@@ -363,8 +364,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.set_gender(pref.biological_gender)
// Destroy/cyborgize organs and limbs.
character.synthetic = null //Clear the existing var.
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
//VOREStation Edit
character.synthetic = pref.species == "Protean" ? all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb)
var/list/organs_to_edit = list()
for (var/name in list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
var/obj/item/organ/external/O = character.organs_by_name[name]
if (O)
var/x = organs_to_edit.Find(O.parent_organ)
if (x == 0)
organs_to_edit += name
else
organs_to_edit.Insert(x+(O.robotic == ORGAN_NANOFORM ? 1 : 0), name)
for(var/name in organs_to_edit) //VOREStation edit end
var/status = pref.organ_data[name]
var/obj/item/organ/external/O = character.organs_by_name[name]
if(O)
@@ -551,6 +562,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "<br><a href='?src=\ref[src];cycle_bg=1'>Cycle background</a>"
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_LOADOUT]'>[pref.equip_preview_mob & EQUIP_PREVIEW_LOADOUT ? "Hide loadout" : "Show loadout"]</a>"
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_JOB]'>[pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]</a>"
. += "<br><a href='?src=\ref[src];toggle_animations=1'>[pref.animations_toggle ? "Stop animations" : "Show animations"]</a>"
. += "</td></tr></table>"
. += "<b>Hair</b><br>"
@@ -858,9 +870,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/* VOREStation Removal - No markings whitelist, let people mix/match
for(var/M in usable_markings)
var/datum/sprite_accessory/S = usable_markings[M]
var/datum/species/spec = GLOB.all_species[pref.species]
if(!S.species_allowed.len)
continue
else if(!(pref.species in S.species_allowed))
else if(!(pref.species in S.species_allowed) && !(pref.custom_base in S.species_allowed) && !(spec.base_species in S.species_allowed))
usable_markings -= M
*/ //VOREStation Removal End
var/new_marking = tgui_input_list(user, "Choose a body marking:", "Character Preference", usable_markings)
@@ -1115,6 +1128,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"])
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["toggle_animations"])
pref.animations_toggle = !pref.animations_toggle
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["synth_color"])
pref.synth_color = !pref.synth_color
return TOPIC_REFRESH_UPDATE_PREVIEW
@@ -7,6 +7,7 @@
S["sec_record"] >> pref.sec_record
S["gen_record"] >> pref.gen_record
S["home_system"] >> pref.home_system
S["birthplace"] >> pref.birthplace
S["citizenship"] >> pref.citizenship
S["faction"] >> pref.faction
S["religion"] >> pref.religion
@@ -17,6 +18,7 @@
S["sec_record"] << pref.sec_record
S["gen_record"] << pref.gen_record
S["home_system"] << pref.home_system
S["birthplace"] << pref.birthplace
S["citizenship"] << pref.citizenship
S["faction"] << pref.faction
S["religion"] << pref.religion
@@ -24,6 +26,7 @@
/datum/category_item/player_setup_item/general/background/sanitize_character()
if(!pref.home_system) pref.home_system = "Unset"
if(!pref.birthplace) pref.birthplace = "Unset"
if(!pref.citizenship) pref.citizenship = "None"
if(!pref.faction) pref.faction = "None"
if(!pref.religion) pref.religion = "None"
@@ -36,6 +39,7 @@
character.sec_record = pref.sec_record
character.gen_record = pref.gen_record
character.home_system = pref.home_system
character.birthplace = pref.birthplace
character.citizenship = pref.citizenship
character.personal_faction = pref.faction
character.religion = pref.religion
@@ -43,7 +47,8 @@
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
. += "<b>Background Information</b><br>"
. += "Economic Status: <a href='?src=\ref[src];econ_status=1'>[pref.economic_status]</a><br/>"
. += "Home System: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>"
. += "Home: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>"
. += "Birthplace: <a href='?src=\ref[src];birthplace=1'>[pref.birthplace]</a><br/>"
. += "Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>"
. += "Faction: <a href='?src=\ref[src];faction=1'>[pref.faction]</a><br/>"
. += "Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>"
@@ -67,23 +72,35 @@
return TOPIC_REFRESH
else if(href_list["home_system"])
var/choice = tgui_input_list(user, "Please choose a home system.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system)
var/choice = tgui_input_list(user, "Please choose your home planet and/or system. This should be your current primary residence. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system)
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(raw_choice && CanUseTopic(user))
pref.home_system = raw_choice
else
pref.home_system = choice
return TOPIC_REFRESH
else if(href_list["citizenship"])
var/choice = tgui_input_list(user, "Please choose your current citizenship.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship)
else if(href_list["birthplace"])
var/choice = tgui_input_list(user, "Please choose the planet and/or system or other appropriate location that you were born/created. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.birthplace)
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = sanitize(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a birthplace.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(raw_choice && CanUseTopic(user))
pref.birthplace = raw_choice
else
pref.birthplace = choice
return TOPIC_REFRESH
else if(href_list["citizenship"])
var/choice = tgui_input_list(user, "Please select the faction or political entity with which you currently hold citizenship. Select \"Other\" to specify manually.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship)
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(raw_choice && CanUseTopic(user))
pref.citizenship = raw_choice
else
@@ -91,11 +108,11 @@
return TOPIC_REFRESH
else if(href_list["faction"])
var/choice = tgui_input_list(user, "Please choose a faction to work for.", "Character Preference", faction_choices + list("None","Other"), pref.faction)
var/choice = tgui_input_list(user, "Please choose the faction you primarily work for, if you are not under the direct employ of NanoTrasen. Select \"Other\" to specify manually.", "Character Preference", faction_choices + list("None","Other"), pref.faction)
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(raw_choice)
pref.faction = raw_choice
else
@@ -103,11 +120,11 @@
return TOPIC_REFRESH
else if(href_list["religion"])
var/choice = tgui_input_list(user, "Please choose a religion.", "Character Preference", religion_choices + list("None","Other"), pref.religion)
var/choice = tgui_input_list(user, "Please choose a religion. Select \"Other\" to specify manually.", "Character Preference", religion_choices + list("None","Other"), pref.religion)
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(raw_choice)
pref.religion = sanitize(raw_choice)
else
@@ -115,19 +132,19 @@
return TOPIC_REFRESH
else if(href_list["set_medical_records"])
var/new_medical = sanitize(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0)
var/new_medical = strip_html_simple(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.med_record = new_medical
return TOPIC_REFRESH
else if(href_list["set_general_records"])
var/new_general = sanitize(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0)
var/new_general = strip_html_simple(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
if(!isnull(new_general) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.gen_record = new_general
return TOPIC_REFRESH
else if(href_list["set_security_records"])
var/sec_medical = sanitize(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0)
var/sec_medical = strip_html_simple(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
if(!isnull(sec_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.sec_record = sec_medical
return TOPIC_REFRESH
@@ -59,11 +59,11 @@
switch(href_list["flavor_text"])
if("open")
if("general")
var/msg = sanitize(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes
var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes
if(CanUseTopic(user) && !isnull(msg))
pref.flavor_texts[href_list["flavor_text"]] = msg
else
var/msg = sanitize(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0)
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE))
if(CanUseTopic(user) && !isnull(msg))
pref.flavor_texts[href_list["flavor_text"]] = msg
SetFlavorText(user)
@@ -73,11 +73,11 @@
switch(href_list["flavour_text_robot"])
if("open")
if("Default")
var/msg = sanitize(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE), extra = 0)
var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE))
if(CanUseTopic(user) && !isnull(msg))
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
else
var/msg = sanitize(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0)
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE))
if(CanUseTopic(user) && !isnull(msg))
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
SetFlavourTextRobot(user)
@@ -368,6 +368,20 @@ var/list/_client_preferences_by_type
enabled_description = "Hear"
disabled_description = "Silent"
/datum/client_preference/player_tips
description = "Receive Tips Periodically"
key = "RECEIVE_TIPS"
enabled_description = "Enabled"
disabled_description = "Disabled"
/datum/client_preference/pain_frequency
description = "Pain Messages Cooldown"
key = "PAIN_FREQUENCY"
enabled_by_default = FALSE
enabled_description = "Extended"
disabled_description = "Default"
/********************
* Staff Preferences *
********************/
@@ -139,3 +139,20 @@ Talon pin
/datum/gear/accessory/altevian_badge
display_name = "altevian badge"
path = /obj/item/clothing/accessory/altevian_badge
/datum/gear/accessory/maid_neck
display_name = "maid neck cover"
path = /obj/item/clothing/accessory/maid_neck
/datum/gear/accessory/maid_corset
display_name = "maid corset"
path = /obj/item/clothing/accessory/maidcorset
//Antediluvian accessories
/datum/gear/accessory/antediluvian
display_name = "antediluvian bracers"
path = /obj/item/clothing/accessory/antediluvian
/datum/gear/accessory/antediluvian/loin
display_name = "antediluvian loincloth"
path = /obj/item/clothing/accessory/antediluvian/loincloth
@@ -57,6 +57,7 @@
// look if theres a better way to do this im all ears
blacklisted_types += subtypesof(/obj/item/toy/plushie/therapy)
blacklisted_types += subtypesof(/obj/item/toy/plushie/fluff)
blacklisted_types += /obj/item/toy/plushie/borgplushie/drake //VOREStation addition
for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie) - blacklisted_types)
plushies[initial(plushie_type.name)] = plushie_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(plushies))
@@ -25,4 +25,8 @@
/datum/gear/gloves/siren
display_name = "gloves, Siren"
path = /obj/item/clothing/gloves/fluff/siren
path = /obj/item/clothing/gloves/fluff/siren
/datum/gear/gloves/maid_arms
display_name = "maid arm covers"
path = /obj/item/clothing/accessory/maid_arms
@@ -11,14 +11,21 @@
display_name = "basic headband"
path = /obj/item/clothing/head/fluff/headbando
/datum/gear/head/maid
display_name = "maid headband"
path = /obj/item/clothing/head/headband/maid
/datum/gear/head/headbando/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/maid
display_name = "maid headband selection"
path = /obj/item/clothing/head/headband/maid
/datum/gear/head/maid/New()
..()
var/list/headbands_list = list()
for(var/obj/item/clothing/head/bands as anything in typesof(/obj/item/clothing/head/headband/maid))
headbands_list[initial(bands.name)] = bands
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(headbands_list))
//Detective alternative
/datum/gear/head/detective_alt
display_name = "cyberscope headgear, detective"
@@ -57,6 +64,30 @@
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/wedding
display_name = "wedding veil"
path = /obj/item/clothing/head/wedding
/datum/gear/head/wedding/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/halo/alt
display_name = "halo, alt"
path = /obj/item/clothing/head/halo/alt
/datum/gear/head/buckethat
display_name = "hat, bucket"
path = /obj/item/clothing/head/buckethat
/datum/gear/head/buckethat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/nonla
display_name = "hat, non la"
path = /obj/item/clothing/head/nonla
/*
Talon hats
*/
@@ -68,4 +68,11 @@
for(var/gaiter in typesof(/obj/item/clothing/accessory/gaiter))
var/obj/item/clothing/accessory/gaiter_type = gaiter
gaiters[initial(gaiter_type.name)] = gaiter_type
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
/datum/gear/mask/lace
display_name = "lace veil"
path = /obj/item/clothing/mask/lacemask
/datum/gear/mask/lace/New()
gear_tweaks += gear_tweak_free_color_choice
@@ -169,13 +169,13 @@
display_name = "cowboy boots, snake skin"
path = /obj/item/clothing/shoes/boots/cowboy/snakeskin
/datum/gear/shoes/cowboy/lizard
display_name = "cowboy boots, lizard skin"
path = /obj/item/clothing/shoes/boots/cowboy/lizard
/datum/gear/shoes/cowboy/green
display_name = "cowboy boots, green"
path = /obj/item/clothing/shoes/boots/cowboy/green
/datum/gear/shoes/cowboy/lizard/masterwork
display_name = "cowboy boots, lizard skin (masterwork)"
path = /obj/item/clothing/shoes/boots/cowboy/lizard/masterwork
/datum/gear/shoes/cowboy/blue
display_name = "cowboy boots, blue"
path = /obj/item/clothing/shoes/boots/cowboy/blue
/datum/gear/shoes/jungle
display_name = "jungle boots"
@@ -20,3 +20,19 @@
/datum/gear/shoes/toeless
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/boots/jackboots/toeless
/datum/gear/shoes/singer_blue
display_name = "blue performer's boots"
path = /obj/item/clothing/shoes/boots/singer
/datum/gear/shoes/singer_yellow
display_name = "yellow performer's boots"
path = /obj/item/clothing/shoes/boots/singer/yellow
/datum/gear/shoes/antediluvian
display_name = "legwraps, antediluvian"
path = /obj/item/clothing/shoes/antediluvian
/datum/gear/shoes/flats/alt
display_name = "flats, alt"
path = /obj/item/clothing/shoes/flats/white/color/alt
@@ -152,3 +152,169 @@ Talon winter coat
/datum/gear/suit/cyberpunk_recolorable/New()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/shrine_maiden
display_name = "shrine maiden costume"
path = /obj/item/clothing/suit/shrine_maiden
//Antediluvian cloak
/datum/gear/suit/cloak_ante
display_name = "cloak, antediluvian"
path = /obj/item/clothing/accessory/poncho/roles/cloak/antediluvian
cost = 1
//Chaplain cloaks
/datum/gear/suit/cloak_chaplain
display_name = "cloak, chaplain"
path = /obj/item/clothing/accessory/poncho/roles/cloak/chapel
cost = 1
/datum/gear/suit/cloak_chaplain/alt
display_name = "cloak, chaplain, alt"
path = /obj/item/clothing/accessory/poncho/roles/cloak/chapel/alt
cost = 1
//Half cloak
/datum/gear/suit/cloak_half
display_name = "cloak, half, colorable"
path = /obj/item/clothing/accessory/poncho/roles/cloak/half
cost = 1
/datum/gear/suit/cloak_half/New()
gear_tweaks += gear_tweak_free_color_choice
//Shoulder cloak
/datum/gear/suit/cloak_shoulder
display_name = "cloak, shoulder"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shoulder
cost = 1
/datum/gear/suit/cloak_shoulder/New()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/cloak_shoulder_right
display_name = "cloak, shoulder right"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shoulder/right
cost = 1
/datum/gear/suit/cloak_shoulder_right/New()
gear_tweaks += gear_tweak_free_color_choice
//Mantles, mostly for heads of staff
/datum/gear/suit/roles/mantle
display_name = "mantle, colorable"
path = /obj/item/clothing/accessory/poncho/roles/cloak/mantle
cost = 1
/datum/gear/suit/roles/mantle/New()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/roles/mantles
display_name = "mantle selection"
path = /obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo
cost = 1
/datum/gear/suit/roles/mantles/New()
..()
var/list/mantles = list(
"orange mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo,
"black mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/security,
"white mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/engineering,
"purple mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/research,
"cyan mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/medical,
"blue mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/hop,
"gold mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cap
)
gear_tweaks += new/datum/gear_tweak/path(mantles)
//Boat cloaks
/datum/gear/suit/roles/boatcloak
display_name = "boat cloak, colorable"
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat
/datum/gear/suit/roles/boatcloak/New()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/roles/capboatcloak
display_name = "boat cloak, site manager"
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/cap
allowed_roles = list("Site Manager")
/datum/gear/suit/roles/hopboatcloak
display_name = "boat cloak, head of personnel"
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/hop
allowed_roles = list("Head of Personnel")
/datum/gear/suit/roles/boatcloaks
display_name = "boat cloak selection"
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/security
/datum/gear/suit/roles/boatcloaks/New()
..()
var/list/boatcloaks = list(
"security boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/security,
"engineering boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/engineering,
"atmospherics boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/atmos,
"medical boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/medical,
"service boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/service,
"cargo boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/cargo,
"mining boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/mining,
"research boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/science
)
gear_tweaks += new/datum/gear_tweak/path(boatcloaks)
//Shrouds
/datum/gear/suit/roles/shroud
display_name = "shroud, colorable"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud
/datum/gear/suit/roles/shroud/New()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/roles/capshroud
display_name = "shroud, site manager"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap
allowed_roles = list("Site Manager")
/datum/gear/suit/roles/hopshroud
display_name = "shroud, head of personnel"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop
allowed_roles = list("Head of Personnel")
/datum/gear/suit/roles/shrouds
display_name = "shroud selection"
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/security
/datum/gear/suit/roles/shrouds/New()
..()
var/list/shrouds = list(
"security shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/security,
"engineering shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/engineering,
"atmospherics shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/atmos,
"medical shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/medical,
"service shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/service,
"cargo shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cargo,
"mining shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/mining,
"research shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/science
)
gear_tweaks += new/datum/gear_tweak/path(shrouds)
//Actually colorable hoodies
/datum/gear/suit/roles/choodies
display_name = "hoodie selection, colorable"
path = /obj/item/clothing/suit/storage/hooded/toggle/colorable
/datum/gear/suit/roles/choodies/New()
..()
var/list/choodies = list(
"normal hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable,
"sleeveless hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable/sleeveless,
"cropped hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable/cropped
)
gear_tweaks += gear_tweak_free_color_choice
gear_tweaks += new/datum/gear_tweak/path(choodies)
//ABOUT TIME SOMEONE ADDED THIS TO A LOADOUT
/datum/gear/suit/bladerunnercoat
display_name = "leather coat, massive"
path = /obj/item/clothing/suit/storage/bladerunner
@@ -212,6 +212,14 @@ Qipao
display_name = "qipao, white"
path = /obj/item/clothing/under/qipao/white
/datum/gear/uniform/qipao_colorable_alt
display_name = "qipao, colorable alt"
path = /obj/item/clothing/under/qipao/white/colorable
/datum/gear/uniform/qipao_colorable_alt/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/*
Bluespace jumpsuit
*/
@@ -295,7 +303,7 @@ Talon jumpsuit
//Feminine Colored Jumpsuits.
/datum/gear/suit/f_jumpsuit_alt
/datum/gear/uniform/f_jumpsuit_alt
display_name = "Colored Feminine Jumpsuit"
path = /obj/item/clothing/under/color/fjumpsuit
@@ -311,4 +319,44 @@ Talon jumpsuit
/datum/gear/uniform/modernsec
display_name = "undersuit, security, modernized (Security)"
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
path = /obj/item/clothing/under/rank/security/modern
path = /obj/item/clothing/under/rank/security/modern
/datum/gear/uniform/singer_blue
display_name = "blue singer dress"
path = /obj/item/clothing/under/dress/singer
/datum/gear/uniform/singer_yellow
display_name = "yellow singer dress"
path = /obj/item/clothing/under/dress/singer/yellow
//Antediluvian corsets from CitRP
/datum/gear/uniform/antediluvian
display_name = "corset, antediluvian"
path = /obj/item/clothing/under/dress/antediluvian
/datum/gear/uniform/antediluvianalt
display_name = "corset, antediluvian alt"
path = /obj/item/clothing/under/dress/antediluvian/sheerless
//Colorable skirts
/datum/gear/uniform/coloredskirts
display_name = "skirt selection, colorable"
path = /obj/item/clothing/under/skirt/colorable
/datum/gear/uniform/coloredskirts/New()
..()
var/list/skirts = list(
"casual skirt"=/obj/item/clothing/under/skirt/colorable,
"puffy skirt"=/obj/item/clothing/under/skirt/colorable/puffy,
"skater skirt"=/obj/item/clothing/under/skirt/colorable/skater,
"pleated skirt"=/obj/item/clothing/under/skirt/colorable/pleated,
"pencil skirt"=/obj/item/clothing/under/skirt/colorable/pencil,
"plaid skirt"=/obj/item/clothing/under/skirt/colorable/plaid,
"tube skirt"=/obj/item/clothing/under/skirt/colorable/tube,
"long skirt"=/obj/item/clothing/under/skirt/colorable/long,
"high skirt"=/obj/item/clothing/under/skirt/colorable/high,
"swept skirt"=/obj/item/clothing/under/skirt/colorable/swept,
"jumper skirt"=/obj/item/clothing/under/skirt/colorable/jumper,
"jumper dress"=/obj/item/clothing/under/skirt/colorable/jumperdress
)
gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
@@ -145,6 +145,11 @@
)
gear_tweaks += new/datum/gear_tweak/path(wheelchairs)
/datum/gear/utility/lantern
display_name = "lantern"
path = /obj/item/device/flashlight/lantern
cost = 2
/****************
modular computers
****************/
@@ -16,6 +16,7 @@
var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. Default sharp.
var/voice_freq = 0
var/voice_sound = "beep-boop"
var/custom_speech_bubble = "default"
// Definition of the stuff for Sizing
/datum/category_item/player_setup_item/vore/size
@@ -30,6 +31,7 @@
S["fuzzy"] >> pref.fuzzy
S["voice_freq"] >> pref.voice_freq
S["voice_sound"] >> pref.voice_sound
S["custom_speech_bubble"] >> pref.custom_speech_bubble
/datum/category_item/player_setup_item/vore/size/save_character(var/savefile/S)
S["size_multiplier"] << pref.size_multiplier
@@ -39,6 +41,7 @@
S["fuzzy"] << pref.fuzzy
S["voice_freq"] << pref.voice_freq
S["voice_sound"] << pref.voice_sound
S["custom_speech_bubble"] << pref.custom_speech_bubble
/datum/category_item/player_setup_item/vore/size/sanitize_character()
pref.weight_vr = sanitize_integer(pref.weight_vr, WEIGHT_MIN, WEIGHT_MAX, initial(pref.weight_vr))
@@ -49,6 +52,8 @@
pref.voice_freq = sanitize_integer(pref.voice_freq, MIN_VOICE_FREQ, MAX_VOICE_FREQ, initial(pref.fuzzy))
if(pref.size_multiplier == null || pref.size_multiplier < RESIZE_TINY || pref.size_multiplier > RESIZE_HUGE)
pref.size_multiplier = initial(pref.size_multiplier)
if(!(pref.custom_speech_bubble in selectable_speech_bubbles))
pref.custom_speech_bubble = "default"
/datum/category_item/player_setup_item/vore/size/copy_to_mob(var/mob/living/carbon/human/character)
character.weight = pref.weight_vr
@@ -89,6 +94,7 @@
character.voice_sounds_list = goon_speak_roach_sound
if("goon speak skelly")
character.voice_sounds_list = goon_speak_skelly_sound
character.custom_speech_bubble = pref.custom_speech_bubble
/datum/category_item/player_setup_item/vore/size/content(var/mob/user)
. += "<br>"
@@ -96,6 +102,8 @@
. += "<b>Scaled Appearance:</b> <a [pref.fuzzy ? "" : ""] href='?src=\ref[src];toggle_fuzzy=1'><b>[pref.fuzzy ? "Fuzzy" : "Sharp"]</b></a><br>"
. += "<b>Voice Frequency:</b> <a href='?src=\ref[src];voice_freq=1'>[pref.voice_freq]</a><br>"
. += "<b>Voice Sounds:</b> <a href='?src=\ref[src];voice_sounds_list=1'>[pref.voice_sound]</a><br>"
. += "<a href='?src=\ref[src];voice_test=1'><b>Test Selected Voice</b></a><br>"
. += "<b>Custom Speech Bubble:</b> <a href='?src=\ref[src];customize_speech_bubble=1'>[pref.custom_speech_bubble]</a><br>"
. += "<br>"
. += "<b>Relative Weight:</b> <a href='?src=\ref[src];weight=1'>[pref.weight_vr]</a><br>"
. += "<b>Weight Gain Rate:</b> <a href='?src=\ref[src];weight_gain=1'>[pref.weight_gain]</a><br>"
@@ -188,5 +196,49 @@
pref.voice_sound = "beep-boop"
else
pref.voice_sound = choice
return TOPIC_REFRESH
else if(href_list["customize_speech_bubble"])
var/choice = tgui_input_list(usr, "What speech bubble style do you want to use? (default for automatic selection)", "Custom Speech Bubble", selectable_speech_bubbles)
if(!choice)
pref.custom_speech_bubble = "default"
else
pref.custom_speech_bubble = choice
return TOPIC_REFRESH
else if(href_list["voice_test"])
var/sound/S
switch(pref.voice_sound)
if("beep-boop")
S = sound(pick(talk_sound))
if("goon speak 1")
S = sound(pick(goon_speak_one_sound))
if("goon speak 2")
S = sound(pick(goon_speak_two_sound))
if("goon speak 3")
S = sound(pick(goon_speak_three_sound))
if("goon speak 4")
S = sound(pick(goon_speak_four_sound))
if("goon speak blub")
S = sound(pick(goon_speak_blub_sound))
if("goon speak bottalk")
S = sound(pick(goon_speak_bottalk_sound))
if("goon speak buwoo")
S = sound(pick(goon_speak_buwoo_sound))
if("goon speak cow")
S = sound(pick(goon_speak_cow_sound))
if("goon speak lizard")
S = sound(pick(goon_speak_lizard_sound))
if("goon speak pug")
S = sound(pick(goon_speak_pug_sound))
if("goon speak pugg")
S = sound(pick(goon_speak_pugg_sound))
if("goon speak roach")
S = sound(pick(goon_speak_roach_sound))
if("goon speak skelly")
S = sound(pick(goon_speak_skelly_sound))
if(S)
S.frequency = pick(pref.voice_freq)
S.volume = 50
SEND_SOUND(user, S)
return ..();
@@ -15,6 +15,9 @@
var/custom_ask = null
var/custom_exclaim = null
var/list/custom_heat = list()
var/list/custom_cold = list()
var/list/pos_traits = list() // What traits they've selected for their custom species
var/list/neu_traits = list()
var/list/neg_traits = list()
@@ -25,6 +28,81 @@
var/dirty_synth = 0 //Are you a synth
var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit?
/datum/preferences/proc/get_custom_bases_for_species(var/new_species)
if (!new_species)
new_species = species
var/list/choices
var/datum/species/spec = GLOB.all_species[new_species]
if (spec.selects_bodytype == SELECTS_BODYTYPE_SHAPESHIFTER)
choices = spec.get_valid_shapeshifter_forms()
choices = choices.Copy()
else if (spec.selects_bodytype == SELECTS_BODYTYPE_CUSTOM)
choices = GLOB.custom_species_bases.Copy()
if(new_species != SPECIES_CUSTOM)
choices = (choices | new_species)
return choices
/datum/category_item/player_setup_item/vore/traits/proc/get_html_for_trait(var/datum/trait/trait, var/list/trait_prefs = null)
. = ""
if (!LAZYLEN(trait.has_preferences))
return
. = "<br><ul>"
var/altered = FALSE
if (!LAZYLEN(trait_prefs))
trait_prefs = trait.get_default_prefs()
altered = TRUE
for (var/identifier in trait.has_preferences)
var/pref_list = trait.has_preferences[identifier] //faster
if (LAZYLEN(pref_list) >= 2)
if (!(identifier in trait_prefs))
trait_prefs[identifier] = trait.default_value_for_pref(identifier) //won't be called at all often
altered = TRUE
. += "<li>- [pref_list[2]]:"
var/link = " <a href='?src=\ref[src];clicked_trait_pref=[trait.type];pref=[identifier]'>"
switch (pref_list[1])
if (1) //TRAIT_PREF_TYPE_BOOLEAN
. += link + (trait_prefs[identifier] ? "Enabled" : "Disabled")
if (2) //TRAIT_PREF_TYPE_COLOR
. += " " + color_square(hex = trait_prefs[identifier]) + link + "Change"
. += "</a></li>"
. += "</ul>"
if (altered)
switch(trait.category)
if (1) //TRAIT_TYPE_POSITIVE
pref.pos_traits[trait.type] = trait_prefs
if (0) //TRAIT_TYPE_NEUTRAL
pref.neu_traits[trait.type] = trait_prefs
if (-1)//TRAIT_TYPE_NEGATIVE
pref.neg_traits[trait.type] = trait_prefs
/datum/category_item/player_setup_item/vore/traits/proc/get_pref_choice_from_trait(var/mob/user, var/datum/trait/trait, var/preference)
if (!trait || !preference)
return
var/list/trait_prefs
var/datum/trait/instance = all_traits[trait]
var/list/traitlist
switch(instance.category)
if (1)
traitlist = pref.pos_traits
if (0)
traitlist = pref.neu_traits
if (-1)
traitlist = pref.neg_traits
if (!LAZYLEN(instance.has_preferences) || !(preference in instance.has_preferences) || !traitlist)
return
if (!LAZYLEN(traitlist[trait]))
traitlist[trait] = instance.get_default_prefs()
trait_prefs = traitlist[trait]
if (!(preference in trait_prefs))
trait_prefs[preference] = instance.default_value_for_pref(preference) //won't be called at all often
switch(instance.has_preferences[preference][1])
if (1) //TRAIT_PREF_TYPE_BOOLEAN
trait_prefs[preference] = !trait_prefs[preference]
if (2) //TRAIT_PREF_TYPE_COLOR
var/new_color = input(user, "Choose the color for this trait preference:", "Trait Preference", trait_prefs[preference]) as color|null
if (new_color)
trait_prefs[preference] = new_color
// Definition of the stuff for Ears
/datum/category_item/player_setup_item/vore/traits
name = "Traits"
@@ -47,6 +125,9 @@
S["custom_ask"] >> pref.custom_ask
S["custom_exclaim"] >> pref.custom_exclaim
S["custom_heat"] >> pref.custom_heat
S["custom_cold"] >> pref.custom_cold
/datum/category_item/player_setup_item/vore/traits/save_character(var/savefile/S)
S["custom_species"] << pref.custom_species
S["custom_base"] << pref.custom_base
@@ -64,6 +145,9 @@
S["custom_ask"] << pref.custom_ask
S["custom_exclaim"] << pref.custom_exclaim
S["custom_heat"] << pref.custom_heat
S["custom_cold"] << pref.custom_cold
/datum/category_item/player_setup_item/vore/traits/sanitize_character()
if(!pref.pos_traits) pref.pos_traits = list()
if(!pref.neu_traits) pref.neu_traits = list()
@@ -122,7 +206,9 @@
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
// Allowed!
if (!(pref.custom_base in pref.get_custom_bases_for_species()))
pref.custom_base = SPECIES_HUMAN
//otherwise, allowed!
else if(!pref.custom_base || !(pref.custom_base in GLOB.custom_species_bases))
pref.custom_base = SPECIES_HUMAN
@@ -131,12 +217,26 @@
pref.custom_ask = lowertext(trim(pref.custom_ask))
pref.custom_exclaim = lowertext(trim(pref.custom_exclaim))
if (islist(pref.custom_heat)) //don't bother checking these for actual singular message length, they should already have been checked and it'd take too long every time it's sanitized
if (length(pref.custom_heat) > 10)
pref.custom_heat.Cut(11)
else
pref.custom_heat = list()
if (islist(pref.custom_cold))
if (length(pref.custom_cold) > 10)
pref.custom_cold.Cut(11)
else
pref.custom_cold = list()
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
character.custom_species = pref.custom_species
character.custom_say = lowertext(trim(pref.custom_say))
character.custom_ask = lowertext(trim(pref.custom_ask))
character.custom_whisper = lowertext(trim(pref.custom_whisper))
character.custom_exclaim = lowertext(trim(pref.custom_exclaim))
character.custom_heat = pref.custom_heat
character.custom_cold = pref.custom_cold
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
pref.dirty_synth = 1
@@ -185,21 +285,21 @@
. += "<ul>"
for(var/T in pref.pos_traits)
var/datum/trait/trait = positive_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.pos_traits[T])]</li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait +</a><br>"
. += "<ul>"
for(var/T in pref.neu_traits)
var/datum/trait/trait = neutral_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.neu_traits[T])]</li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait +</a><br>"
. += "<ul>"
for(var/T in pref.neg_traits)
var/datum/trait/trait = negative_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.neg_traits[T])]</li>"
. += "</ul>"
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
@@ -223,6 +323,14 @@
. += "<a href='?src=\ref[src];custom_exclaim=1'>Set Exclaim Verb</a>"
. += "(<a href='?src=\ref[src];reset_exclaim=1'>Reset</A>)"
. += "<br>"
. += "<b>Custom heat Discomfort: </b>"
. += "<a href='?src=\ref[src];custom_heat=1'>Set Heat Messages</a>"
. += "(<a href='?src=\ref[src];reset_heat=1'>Reset</A>)"
. += "<br>"
. += "<b>Custom Cold Discomfort: </b>"
. += "<a href='?src=\ref[src];custom_cold=1'>Set Cold Messages</a>"
. += "(<a href='?src=\ref[src];reset_cold=1'>Reset</A>)"
. += "<br>"
/datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
@@ -236,15 +344,7 @@
return TOPIC_REFRESH
else if(href_list["custom_base"])
var/list/choices
var/datum/species/spec = GLOB.all_species[pref.species]
if (spec.selects_bodytype == SELECTS_BODYTYPE_SHAPESHIFTER && istype(spec, /datum/species/shapeshifter))
var/datum/species/spec_shifter = spec
choices = spec_shifter.get_valid_shapeshifter_forms()
else
choices = GLOB.custom_species_bases
if(pref.species != SPECIES_CUSTOM)
choices = (choices | pref.species)
var/list/choices = pref.get_custom_bases_for_species()
var/text_choice = tgui_input_list(usr, "Pick an icon set for your species:","Icon Base", choices)
if(text_choice in choices)
pref.custom_base = text_choice
@@ -289,6 +389,11 @@
instance.remove_pref(pref)
return TOPIC_REFRESH
else if(href_list["clicked_trait_pref"])
var/datum/trait/trait = text2path(href_list["clicked_trait_pref"])
get_pref_choice_from_trait(user, trait, href_list["pref"])
return TOPIC_REFRESH
else if(href_list["custom_say"])
var/say_choice = sanitize(tgui_input_text(usr, "This word or phrase will appear instead of 'says': [pref.real_name] says, \"Hi.\"", "Custom Say", pref.custom_say, 12), 12)
if(say_choice)
@@ -313,6 +418,40 @@
pref.custom_exclaim = exclaim_choice
return TOPIC_REFRESH
else if(href_list["custom_heat"])
tgui_alert(user, "You are setting custom heat messages. These will overwrite your species' defaults. To return to defaults, click reset.")
var/old_message = pref.custom_heat.Join("\n\n")
var/new_message = sanitize(tgui_input_text(usr,"Use double enter between messages to enter a new one. Must be at least 3 characters long, 160 characters max and up to 10 messages are allowed.","Heat Discomfort messages",old_message, multiline= TRUE, prevent_enter = TRUE), MAX_MESSAGE_LEN,0,0,0)
if(length(new_message) > 0)
var/list/raw_list = splittext(new_message,"\n\n")
if(raw_list.len > 10)
raw_list.Cut(11)
for(var/i = 1, i <= raw_list.len, i++)
if(length(raw_list[i]) < 3 || length(raw_list[i]) > 160)
raw_list.Cut(i,i)
else
raw_list[i] = readd_quotes(raw_list[i])
ASSERT(raw_list.len <= 10)
pref.custom_heat = raw_list
return TOPIC_REFRESH
else if(href_list["custom_cold"])
tgui_alert(user, "You are setting custom cold messages. These will overwrite your species' defaults. To return to defaults, click reset.")
var/old_message = pref.custom_heat.Join("\n\n")
var/new_message = sanitize(tgui_input_text(usr,"Use double enter between messages to enter a new one. Must be at least 3 characters long, 160 characters max and up to 10 messages are allowed.","Cold Discomfort messages",old_message, multiline= TRUE, prevent_enter = TRUE), MAX_MESSAGE_LEN,0,0,0)
if(length(new_message) > 0)
var/list/raw_list = splittext(new_message,"\n\n")
if(raw_list.len > 10)
raw_list.Cut(11)
for(var/i = 1, i <= raw_list.len, i++)
if(length(raw_list[i]) < 3 || length(raw_list[i]) > 160)
raw_list.Cut(i,i)
else
raw_list[i] = readd_quotes(raw_list[i])
ASSERT(raw_list.len <= 10)
pref.custom_cold = raw_list
return TOPIC_REFRESH
else if(href_list["reset_say"])
var/say_choice = tgui_alert(usr, "Reset your Custom Say Verb?","Reset Verb",list("Yes","No"))
if(say_choice == "Yes")
@@ -337,6 +476,18 @@
pref.custom_exclaim = null
return TOPIC_REFRESH
else if(href_list["reset_cold"])
var/cold_choice = tgui_alert(usr, "Reset your Custom Cold Discomfort messages?", "Reset Discomfort",list("Yes","No"))
if(cold_choice == "Yes")
pref.custom_cold = list()
return TOPIC_REFRESH
else if(href_list["reset_heat"])
var/heat_choice = tgui_alert(usr, "Reset your Custom Heat Discomfort messages?", "Reset Discomfort",list("Yes","No"))
if(heat_choice == "Yes")
pref.custom_heat = list()
return TOPIC_REFRESH
else if(href_list["add_trait"])
var/mode = text2num(href_list["add_trait"])
var/list/picklist
@@ -416,12 +567,10 @@
if(pref.dirty_synth && !(instance.can_take & SYNTHETICS))
tgui_alert_async(usr, "The trait you've selected can only be taken by organic characters!", "Error")
pref.dirty_synth = 0 //Just to be sure
return TOPIC_REFRESH
if(pref.gross_meatbag && !(instance.can_take & ORGANICS))
tgui_alert_async(usr, "The trait you've selected can only be taken by synthetic characters!", "Error")
pref.gross_meatbag = 0 //Just to be sure
return TOPIC_REFRESH
if(pref.species in instance.banned_species)
@@ -457,7 +606,7 @@
return TOPIC_REFRESH
instance.apply_pref(pref)
mylist += path
mylist[path] = instance.get_default_prefs()
return TOPIC_REFRESH
return ..()
@@ -26,6 +26,9 @@
pref.nif_path = null //Kill!
WARNING("Loaded a NIF but it was an invalid path, [pref.real_name]")
if (ispath(pref.nif_path, /obj/item/device/nif/protean) && pref.species != SPECIES_PROTEAN) //no free nifs
pref.nif_path = null
if(ispath(pref.nif_path) && isnull(pref.nif_durability)) //How'd you lose this?
pref.nif_durability = initial(pref.nif_path.durability) //Well, have a new one, my bad.
WARNING("Loaded a NIF but with no durability, [pref.real_name]")
@@ -9,6 +9,7 @@
S["directory_ad"] >> pref.directory_ad
S["sensorpref"] >> pref.sensorpref
S["capture_crystal"] >> pref.capture_crystal
S["auto_backup_implant"] >> pref.auto_backup_implant
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
S["show_in_directory"] << pref.show_in_directory
@@ -17,7 +18,7 @@
S["directory_ad"] << pref.directory_ad
S["sensorpref"] << pref.sensorpref
S["capture_crystal"] << pref.capture_crystal
S["auto_backup_implant"] << pref.auto_backup_implant
/datum/category_item/player_setup_item/vore/misc/copy_to_mob(var/mob/living/carbon/human/character)
if(pref.sensorpref > 5 || pref.sensorpref < 1)
@@ -31,6 +32,7 @@
pref.directory_erptag = sanitize_inlist(pref.directory_erptag, GLOB.char_directory_erptags, initial(pref.directory_erptag))
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref))
pref.capture_crystal = sanitize_integer(pref.capture_crystal, 0, 1, initial(pref.capture_crystal))
pref.auto_backup_implant = sanitize_integer(pref.auto_backup_implant, 0, 1, initial(pref.auto_backup_implant))
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
. += "<br>"
@@ -39,7 +41,8 @@
. += "<b>Character Directory ERP Tag:</b> <a href='?src=\ref[src];directory_erptag=1'><b>[pref.directory_erptag]</b></a><br>"
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>"
. += "<b>Capture Crystal Preference</b> <a [pref.capture_crystal ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_capture_crystal=1'><b>[pref.capture_crystal ? "Yes" : "No"]</b></a><br>"
. += "<b>Capture Crystal Preference:</b> <a [pref.capture_crystal ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_capture_crystal=1'><b>[pref.capture_crystal ? "Yes" : "No"]</b></a><br>"
. += "<b>Spawn With Backup Implant:</b> <a [pref.auto_backup_implant ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_implant=1'><b>[pref.auto_backup_implant ? "Yes" : "No"]</b></a><br>"
/datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user)
if(href_list["toggle_show_in_directory"])
@@ -59,6 +62,8 @@
return TOPIC_REFRESH
else if(href_list["directory_ad"])
var/msg = sanitize(tgui_input_text(user,"Write your advertisement here!", "Flavor Text", html_decode(pref.directory_ad), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes
if(!msg)
return
pref.directory_ad = msg
return TOPIC_REFRESH
else if(href_list["toggle_sensor_setting"])
@@ -69,5 +74,7 @@
else if(href_list["toggle_capture_crystal"])
pref.capture_crystal = pref.capture_crystal ? 0 : 1;
return TOPIC_REFRESH
else if(href_list["toggle_implant"])
pref.auto_backup_implant = pref.auto_backup_implant ? 0 : 1;
return TOPIC_REFRESH
return ..();