This commit is contained in:
SandPoot
2023-10-12 02:40:12 -03:00
14 changed files with 177 additions and 166 deletions
+5
View File
@@ -200,3 +200,8 @@
#define G_FEMALE 2
#define G_PLURAL 3
#define G_NEUTER 4
#define PREVIEW_PREF_JOB "Job"
#define PREVIEW_PREF_LOADOUT "Loadout"
#define PREVIEW_PREF_NAKED "Naked"
#define PREVIEW_PREF_NAKED_AROUSED "Naked - Aroused"
+16 -8
View File
@@ -86,15 +86,23 @@
#define LOADOUT_CAN_DESCRIPTION (1<<1) //adding a custom description to items
#define LOADOUT_CAN_COLOR_POLYCHROMIC (1<<2)
/* the names of the customization tabs
//the names of the customization tabs
#define SETTINGS_TAB 0
#define GAME_PREFERENCES_TAB 1
#define APPEARANCE_TAB 2
#define SPEECH_TAB 3
#define LOADOUT_TAB 4
#define CONTENT_PREFERENCES_TAB 5
#define KEYBINDINGS_TAB 6
*/
#define PREFERENCES_TAB 1
#define KEYBINDINGS_TAB 2
//subtabs for the character settings tab
#define GENERAL_CHAR_TAB 0
#define BACKGROUND_CHAR_TAB 1
#define APPEARANCE_CHAR_TAB 2
#define MARKINGS_CHAR_TAB 3
#define SPEECH_CHAR_TAB 4
#define LOADOUT_CHAR_TAB 5
//subtabs for preferences tab
#define GAME_PREFS_TAB 0
#define OOC_PREFS_TAB 1
#define CONTENT_PREFS_TAB 2
//quirks
#define QUIRK_POSITIVE "Positive"
-4
View File
@@ -1,4 +0,0 @@
#define PREVIEW_PREF_JOB "Job"
#define PREVIEW_PREF_LOADOUT "Loadout"
#define PREVIEW_PREF_NAKED "Naked"
#define PREVIEW_PREF_NAKED_AROUSED "Naked - Aroused"
-18
View File
@@ -13,21 +13,3 @@
#define LOADOUT_CATEGORY_WRISTS "Wrists"
/// Subcategory for watches
#define LOADOUT_SUBCATEGORY_WATCHES "Watches"
//the names of the customization tabs
#define SETTINGS_TAB 0
#define PREFERENCES_TAB 1
#define KEYBINDINGS_TAB 2
//subtabs for the character settings tab
#define GENERAL_CHAR_TAB 0
#define APPEARANCE_CHAR_TAB 1
#define MARKINGS_CHAR_TAB 2
#define SPEECH_CHAR_TAB 3
#define BACKGROUND_CHAR_TAB 4
#define LOADOUT_CHAR_TAB 5
//subtabs for preferences tab
#define GAME_PREFS_TAB 0
#define OOC_PREFS_TAB 1
#define CONTENT_PREFS_TAB 2
+1 -1
View File
@@ -1,10 +1,10 @@
GLOBAL_LIST_INIT(loadout_categories, list(
LOADOUT_CATEGORY_ACCESSORY = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_BACKPACK = list(LOADOUT_SUBCATEGORY_BACKPACK_GENERAL, LOADOUT_SUBCATEGORY_BACKPACK_TOYS),
LOADOUT_CATEGORY_NECK = list(LOADOUT_SUBCATEGORY_NECK_GENERAL, LOADOUT_SUBCATEGORY_NECK_TIE, LOADOUT_SUBCATEGORY_NECK_SCARVES),
LOADOUT_CATEGORY_MASK = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_HANDS = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_UNIFORM = list(LOADOUT_SUBCATEGORY_UNIFORM_GENERAL, LOADOUT_SUBCATEGORY_UNIFORM_JOBS, LOADOUT_SUBCATEGORY_UNIFORM_SUITS, LOADOUT_SUBCATEGORY_UNIFORM_SKIRTS, LOADOUT_SUBCATEGORY_UNIFORM_DRESSES, LOADOUT_SUBCATEGORY_UNIFORM_SWEATERS, LOADOUT_SUBCATEGORY_UNIFORM_PANTS, LOADOUT_SUBCATEGORY_UNIFORM_SHORTS),
LOADOUT_CATEGORY_ACCESSORY = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_SUIT = list(LOADOUT_SUBCATEGORY_SUIT_GENERAL, LOADOUT_SUBCATEGORY_SUIT_COATS, LOADOUT_SUBCATEGORY_SUIT_JACKETS, LOADOUT_SUBCATEGORY_SUIT_JOBS),
LOADOUT_CATEGORY_HEAD = list(LOADOUT_SUBCATEGORY_HEAD_GENERAL, LOADOUT_SUBCATEGORY_HEAD_JOBS),
LOADOUT_CATEGORY_SHOES = LOADOUT_SUBCATEGORIES_NONE,
+3 -3
View File
@@ -2,7 +2,7 @@ SUBSYSTEM_DEF(language)
name = "Language"
init_order = INIT_ORDER_LANGUAGE
flags = SS_NO_FIRE
var/list/languages_by_name = list() //SKYRAT CHANGE - language bullshit
var/list/languages_by_name = list() //Sandstorm CHANGE - language bullshit
/datum/controller/subsystem/language/Initialize(timeofday)
for(var/L in subtypesof(/datum/language))
@@ -15,8 +15,8 @@ SUBSYSTEM_DEF(language)
var/datum/language/instance = new language
GLOB.language_datum_instances[language] = instance
//skyrat change
languages_by_name[initial(language.name)] = new language
//Sandstorm change
languages_by_name[initial(language.name)] = instance
//
return ..()
+1 -1
View File
@@ -407,7 +407,7 @@ SUBSYSTEM_DEF(ticker)
SSjob.EquipRank(N, player.mind.assigned_role, 0)
if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
//skyrat change
//sandstorm change
if(ishuman(N.new_character))
SSlanguage.AssignLanguage(N.new_character, N.client)
//
+95 -92
View File
@@ -368,10 +368,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<center>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[GENERAL_CHAR_TAB]' [character_settings_tab == GENERAL_CHAR_TAB ? "class='linkOn'" : ""]>General</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[BACKGROUND_CHAR_TAB]' [character_settings_tab == BACKGROUND_CHAR_TAB ? "class='linkOn'" : ""]>Background</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[APPEARANCE_CHAR_TAB]' [character_settings_tab == APPEARANCE_CHAR_TAB ? "class='linkOn'" : ""]>Appearance</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[MARKINGS_CHAR_TAB]' [character_settings_tab == MARKINGS_CHAR_TAB ? "class='linkOn'" : ""]>Markings</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[SPEECH_CHAR_TAB]' [character_settings_tab == SPEECH_CHAR_TAB ? "class='linkOn'" : ""]>Speech</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[BACKGROUND_CHAR_TAB]' [character_settings_tab == BACKGROUND_CHAR_TAB ? "class='linkOn'" : ""]>Background</a>"
dat += "<a href='?_src_=prefs;preference=character_tab;tab=[LOADOUT_CHAR_TAB]' [character_settings_tab == LOADOUT_CHAR_TAB ? "class='linkOn'" : ""]>Loadout</a>" //If you change the index of this tab, change all the logic regarding tab
dat += "</center>"
@@ -379,12 +379,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<center>"
dat += "<table width='100%'>"
dat += "<tr>"
dat += "<td width=35% style=\"line-height:10px\">"
dat += "<td width=35% style=\"line-height:5px\">"
dat += "<center><b>Preview:</b></center><br>"
dat += "<center>"
dat += "<center style=\"line-height:20px\">"
dat += "<a href='?_src_=prefs;preference=character_preview;tab=[PREVIEW_PREF_JOB]' [preview_pref == PREVIEW_PREF_JOB ? "class='linkOn'" : ""]>[PREVIEW_PREF_JOB]</a>"
dat += "<a href='?_src_=prefs;preference=character_preview;tab=[PREVIEW_PREF_LOADOUT]' [preview_pref == PREVIEW_PREF_LOADOUT ? "class='linkOn'" : ""]>[PREVIEW_PREF_LOADOUT]</a>"
dat += "<a href='?_src_=prefs;preference=character_preview;tab=[PREVIEW_PREF_NAKED]' [preview_pref == PREVIEW_PREF_NAKED ? "class='linkOn'" : ""]>[PREVIEW_PREF_NAKED]</a>"
dat += "<br>"
dat += "<a href='?_src_=prefs;preference=character_preview;tab=[PREVIEW_PREF_NAKED_AROUSED]' [preview_pref == PREVIEW_PREF_NAKED_AROUSED ? "class='linkOn'" : ""]>[PREVIEW_PREF_NAKED_AROUSED]</a>"
dat += "</center>"
dat += "</td>"
@@ -429,21 +430,24 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(CONFIG_GET(flag/roundstart_traits))
dat += "<center><h2>Quirk Setup</h2>"
dat += "<a href='?_src_=prefs;preference=trait;task=menu'>Configure Quirks</a><br></center>"
dat += "<center><b>Current Quirks:</b> [all_quirks.len ? all_quirks.Join(", ") : "None"]</center>"
dat += "<center><b>Current Quirks:</b> [english_list(all_quirks, "None")]</center>"
dat += "<h2>Identity</h2>"
dat += "<table width='100%'><tr><td width='75%' valign='top'>"
dat += "<table width='100%'><tr><td width='30%' valign='top'>"
if(jobban_isbanned(user, "appearance"))
dat += "<b>You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.</b><br>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=name;task=random'>Random Name</A> "
dat += "<b>Always Random Name:</b><a style='display:block;width:30px' href='?_src_=prefs;preference=name'>[be_random_name ? "Yes" : "No"]</a><BR>"
dat += "<b>[nameless ? "Default designation" : "Name"]:</b>"
dat += "<b>[nameless ? "Default designation" : "Name"]:</b><br>"
dat += "<a href='?_src_=prefs;preference=name;task=input'>[real_name]</a><BR>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=name;task=random'>Random Name</a><br>"
dat += "<a href='?_src_=prefs;preference=nameless'>Be nameless: [nameless ? "Yes" : "No"]</a><BR>"
dat += "<b>Always Random Name:</b><a style='display:block;width:30px' href='?_src_=prefs;preference=name'>[be_random_name ? "Yes" : "No"]</a><BR>"
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender;task=input'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
dat += "<b>Age:</b> <a style='display:block;width:30px' href='?_src_=prefs;preference=age;task=input'>[age]</a><BR>"
dat += "<a href='?_src_=prefs;preference=hide_ckey;task=input'><b>Hide ckey: [hide_ckey ? "Enabled" : "Disabled"]</b></a><br>"
dat += "</td>"
dat += "<td valign='top'>"
dat += "<b>Special Names:</b><BR>"
var/old_group
for(var/custom_name_id in GLOB.preferences_custom_names)
@@ -458,68 +462,66 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Custom job preferences:</b><BR>"
dat += "<a href='?_src_=prefs;preference=ai_core_icon;task=input'><b>Preferred AI Core Display:</b> [preferred_ai_core_display]</a><br>"
dat += "<a href='?_src_=prefs;preference=sec_dept;task=input'><b>Preferred Security Department:</b> [prefered_security_department]</a><BR></td>"
dat += "<br><a href='?_src_=prefs;preference=hide_ckey;task=input'><b>Hide ckey: [hide_ckey ? "Enabled" : "Disabled"]</b></a><br>"
dat += "</tr></table>"
dat += "<a href='?_src_=prefs;preference=sec_dept;task=input'><b>Preferred Security Department:</b> [prefered_security_department]</a><BR>"
dat += "</td></tr></table>"
//Character background
if(BACKGROUND_CHAR_TAB)
dat += "<table width='100%'><tr><td width='30%' valign='top'>"
//Character Appearance
if(APPEARANCE_CHAR_TAB)
dat += "<table><tr><td width='20%' height='300px' valign='top'>"
dat += "<h2>Flavor Text</h2>"
dat += "<a href='?_src_=prefs;preference=flavor_text;task=input'><b>Set Examine Text</b></a><br>"
if(length(features["flavor_text"]) <= MAX_FLAVOR_PREVIEW_LEN)
if(!length(features["flavor_text"]))
dat += "\[...\]<BR>" //skyrat - adds <br> //come to brazil or brazil comes to you
dat += "\[...\]"
else
dat += "[html_encode(features["flavor_text"])]<BR>" //skyrat - adds <br> and uses html_encode
dat += "[features["flavor_text"]]"
else
dat += "[TextPreview(html_encode(features["flavor_text"]))]...<BR>" //skyrat edit, uses html_encode
dat += "[TextPreview(features["flavor_text"])]..."
dat += "<h2>Silicon Flavor Text</h2>"
dat += "<a href='?_src_=prefs;preference=silicon_flavor_text;task=input'><b>Set Silicon Examine Text</b></a><br>"
if(length(features["silicon_flavor_text"]) <= MAX_FLAVOR_PREVIEW_LEN)
if(!length(features["silicon_flavor_text"]))
dat += "\[...\]<BR>"
dat += "\[...\]"
else
dat += "[features["silicon_flavor_text"]]<BR>"
dat += "[features["silicon_flavor_text"]]"
else
dat += "[TextPreview(features["silicon_flavor_text"])]...<BR>"
dat += "[TextPreview(features["silicon_flavor_text"])]..."
dat += "<h2>OOC notes</h2>"
dat += "<a href='?_src_=prefs;preference=ooc_notes;task=input'><b>Set OOC notes</b></a><br>"
var/ooc_notes_len = length(features["ooc_notes"])
if(ooc_notes_len <= MAX_FLAVOR_PREVIEW_LEN)
if(!ooc_notes_len)
dat += "\[...\]<BR>"
dat += "\[...\]"
else
dat += "[features["ooc_notes"]]<BR>"
dat += "[features["ooc_notes"]]"
else
dat += "[TextPreview(features["ooc_notes"])]...<BR>"
//SKYRAT EDIT
dat += "<h2>Consent preferences</h2>"
dat += "ERP : <a href='?_src_=prefs;preference=erp_pref'>[erppref]</a><br>"
dat += "Non-Con : <a href='?_src_=prefs;preference=noncon_pref'>[nonconpref]</a><br>"
dat += "Vore : <a href='?_src_=prefs;preference=vore_pref'>[vorepref]</a><br>"
//END OF SKYRAT EDIT
dat += "[TextPreview(features["ooc_notes"])]..."
dat += "</td>"
dat += "<h2>Clothing & Equipment</h2>"
/* skyrat change
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
if(GLOB.underwear_list[underwear]?.has_color)
dat += "<b>Underwear Color:</b> <span style='border:1px solid #161616; background-color: #[undie_color];'><font color='[color_hex2num(undie_color) < 200 ? "FFFFFF" : "000000"]'>#[undie_color]</font></span> <a href='?_src_=prefs;preference=undie_color;task=input'>Change</a><BR>"
dat += "<b>Undershirt:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a>"
if(GLOB.undershirt_list[undershirt]?.has_color)
dat += "<b>Undershirt Color:</b> <span style='border:1px solid #161616; background-color: #[shirt_color];'><font color='[color_hex2num(shirt_color) < 200 ? "FFFFFF" : "000000"]'>#[shirt_color]</font></span> <a href='?_src_=prefs;preference=shirt_color;task=input'>Change</a><BR>"
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
if(GLOB.socks_list[socks]?.has_color)
dat += "<b>Socks Color:</b> <span style='border:1px solid #161616; background-color: #[socks_color];'><font color='[color_hex2num(socks_color) < 200 ? "FFFFFF" : "000000"]'>#[socks_color]</font></span> <a href='?_src_=prefs;preference=socks_color;task=input'>Change</a><BR>"
*/
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
dat += "<b>Jumpsuit:</b><BR><a href ='?_src_=prefs;preference=suit;task=input'>[jumpsuit_style]</a><BR>"
if((HAS_FLESH in pref_species.species_traits) || (HAS_BONE in pref_species.species_traits))
dat += "<BR><b>Temporal Scarring:</b><BR><a href='?_src_=prefs;preference=persistent_scars'>[(persistent_scars) ? "Enabled" : "Disabled"]</A>"
dat += "<a href='?_src_=prefs;preference=clear_scars'>Clear scar slots</A><BR>"
dat += "<b>Uplink Location:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a>"
dat += "<td valign='top'>"
dat += "<h2>Records</h2>"
dat += "<a href='?_src_=prefs;preference=security_records;task=input'><b>Security Records</b></a><br>"
if(length_char(security_records) <= 40)
if(!length(security_records))
dat += "\[...\]"
else
dat += "[security_records]"
else
dat += "[TextPreview(security_records)]..."
dat += APPEARANCE_CATEGORY_COLUMN //body moves right sandstorm change
dat += "<br><a href='?_src_=prefs;preference=medical_records;task=input'><b>Medical Records</b></a><br>"
if(length_char(medical_records) <= 40)
if(!length(medical_records))
dat += "\[...\]"
else
dat += "[medical_records]"
else
dat += "[TextPreview(medical_records)]..."
dat += "</td></tr></table>"
//Character Appearance
if(APPEARANCE_CHAR_TAB)
dat += "<table><tr><td width='20%' height='300px' valign='top'>"
dat += "<h2>Body</h2>"
dat += "<b>Gender:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=gender;task=input'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
@@ -539,7 +541,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Always Random Body:</b><a href='?_src_=prefs;preference=all'>[be_random_body ? "Yes" : "No"]</A><BR>"
dat += "<br><b>Cycle background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=cycle_bg;task=input'>[bgstate]</a><BR>"
dat += "</td>" //body moves right sandstorm change
dat += "</td>"
var/use_skintones = pref_species.use_skintones
if(use_skintones)
@@ -689,14 +691,38 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "</tr></table>"
dat += "</td>"
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>Clothing & Equipment</h2>"
/*
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
if(GLOB.underwear_list[underwear]?.has_color)
dat += "<b>Underwear Color:</b> <span style='border:1px solid #161616; background-color: #[undie_color];'><font color='[color_hex2num(undie_color) < 200 ? "FFFFFF" : "000000"]'>#[undie_color]</font></span> <a href='?_src_=prefs;preference=undie_color;task=input'>Change</a><BR>"
dat += "<b>Undershirt:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a>"
if(GLOB.undershirt_list[undershirt]?.has_color)
dat += "<b>Undershirt Color:</b> <span style='border:1px solid #161616; background-color: #[shirt_color];'><font color='[color_hex2num(shirt_color) < 200 ? "FFFFFF" : "000000"]'>#[shirt_color]</font></span> <a href='?_src_=prefs;preference=shirt_color;task=input'>Change</a><BR>"
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
if(GLOB.socks_list[socks]?.has_color)
dat += "<b>Socks Color:</b> <span style='border:1px solid #161616; background-color: #[socks_color];'><font color='[color_hex2num(socks_color) < 200 ? "FFFFFF" : "000000"]'>#[socks_color]</font></span> <a href='?_src_=prefs;preference=socks_color;task=input'>Change</a><BR>"
*/
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
dat += "<b>Jumpsuit:</b><BR><a href ='?_src_=prefs;preference=suit;task=input'>[jumpsuit_style]</a><BR>"
if((HAS_FLESH in pref_species.species_traits) || (HAS_BONE in pref_species.species_traits))
dat += "<BR><b>Temporal Scarring:</b><BR><a href='?_src_=prefs;preference=persistent_scars'>[(persistent_scars) ? "Enabled" : "Disabled"]</A>"
dat += "<a href='?_src_=prefs;preference=clear_scars'>Clear scar slots</A>"
dat += "<b>Uplink Location:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a>"
dat += "<h2>Consent preferences</h2>"
dat += "ERP : <a href='?_src_=prefs;preference=erp_pref'>[erppref]</a><br>"
dat += "Non-Con : <a href='?_src_=prefs;preference=noncon_pref'>[nonconpref]</a><br>"
dat += "Vore : <a href='?_src_=prefs;preference=vore_pref'>[vorepref]</a><br>"
dat += "<table><tr><td height='300px' valign='top'>"
dat += "<h2>Lewd preferences</h2>"
dat += "<b>Lust tolerance:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=lust_tolerance;task=input'>[lust_tolerance]</a>"
dat += "<b>Sexual potency:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=sexual_potency;task=input'>[sexual_potency]</a>"
dat += "<b>Lust tolerance:</b><a href='?_src_=prefs;preference=lust_tolerance;task=input'>[lust_tolerance]</a><br>"
dat += "<b>Sexual potency:</b><a href='?_src_=prefs;preference=sexual_potency;task=input'>[sexual_potency]</a>"
dat += "</td>"
dat += "<td height='300px' valign='top'>"
dat += APPEARANCE_CATEGORY_COLUMN
if(NOGENITALS in pref_species.species_traits)
dat += "<b>Your species ([pref_species.name]) does not support genitals!</b><br>"
else
@@ -733,7 +759,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Testicles Shape:</b> <a style='display:block;width:120px' href='?_src_=prefs;preference=balls_shape;task=input'>[features["balls_shape"]]</a>"
dat += "<b>Testicles Visibility:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=balls_visibility;task=input'>[features["balls_visibility"]]</a>"
dat += "<b>Testicles Always Accessible:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=balls_accessible'>[features["balls_accessible"] ? "Yes" : "No"]</a>"
dat += "<td height='300px' valign='top'>"
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>Vagina</h3>"
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_vag'>[features["has_vag"] == TRUE ? "Yes" : "No"]</a>"
if(features["has_vag"])
@@ -748,7 +774,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Vagina Always Accessible:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=vag_accessible'>[features["vag_accessible"] ? "Yes" : "No"]</a>"
dat += "<b>Has Womb:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=has_womb'>[features["has_womb"] == TRUE ? "Yes" : "No"]</a>"
dat += "</td>"
dat += "<td height='300px' valign='top'>"
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>Breasts</h3>"
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_breasts'>[features["has_breasts"] == TRUE ? "Yes" : "No"]</a>"
if(features["has_breasts"])
@@ -764,7 +790,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Breasts Always Accessible:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=breasts_accessible'>[features["breasts_accessible"] ? "Yes" : "No"]</a>"
dat += "<b>Lactates:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_producing'>[features["breasts_producing"] == TRUE ? "Yes" : "No"]</a>"
dat += "</td>"
dat += "<td height='300px' valign='top'>"
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>Butt</h3>"
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_butt'>[features["has_butt"] == TRUE ? "Yes" : "No"]</a>"
if(features["has_butt"])
@@ -911,8 +937,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=tongue;task=input'>[custom_tongue]</a><BR>"
//SANDSTORM EDIT - additional language + runechat color
dat += "<b>Additional Language</b><br>"
var/list/languages_sorted = sortList(language)
dat += "<a href='?_src_=prefs;preference=language;task=menu'>[language.len ? languages_sorted.Join(", ") : "None"]</a></center><br>"
dat += "<a href='?_src_=prefs;preference=language;task=menu'>[english_list(language, "None")]</a></center><br>"
dat += "<b>Custom runechat color:</b> <a href='?_src_=prefs;preference=enable_personal_chat_color'>[enable_personal_chat_color ? "Enabled" : "Disabled"]</a><br> [enable_personal_chat_color ? "<span style='border: 1px solid #161616; background-color: [personal_chat_color];'><font color='[color_hex2num(personal_chat_color) < 200 ? "FFFFFF" : "000000"]'>[personal_chat_color]</font></span> <a href='?_src_=prefs;preference=personal_chat_color;task=input'>Change</a>" : ""]<br>"
dat += "</td>"
//END OF SANDSTORM EDIT
@@ -927,27 +952,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<BR><a href='?_src_=prefs;preference=barkpreview'>Preview Bark</a><BR>"
dat += "</td>"
dat += "</tr></table>"
if(BACKGROUND_CHAR_TAB)
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>Records</h2><br>"
dat += "<a href='?_src_=prefs;preference=security_records;task=input'><b>Security Records</b></a><br>"
if(length_char(security_records) <= 40)
if(!length(security_records))
dat += "\[...\]"
else
dat += "[security_records]"
else
dat += "[TextPreview(security_records)]...<BR>"
dat += "<br><a href='?_src_=prefs;preference=medical_records;task=input'><b>Medical Records</b></a><br>"
if(length_char(medical_records) <= 40)
if(!length(medical_records))
dat += "\[...\]<br>"
else
dat += "[medical_records]"
else
dat += "[TextPreview(medical_records)]...<BR>"
dat += "</td></tr></table>"
if(LOADOUT_CHAR_TAB)
dat += "<table align='center' width='100%'>"
dat += "<tr><td colspan=4><center><i style=\"color: grey;\">You can only choose one item per category, unless it's an item that spawns in your backpack or hands.</center></td></tr>"
@@ -1088,9 +1092,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Show Runechat Chat Bubbles:</b> <a href='?_src_=prefs;preference=chat_on_map'>[chat_on_map ? "Enabled" : "Disabled"]</a><br>"
dat += "<b>Runechat message char limit:</b> <a href='?_src_=prefs;preference=max_chat_length;task=input'>[max_chat_length]</a><br>"
dat += "<b>See Runechat for non-mobs:</b> <a href='?_src_=prefs;preference=see_chat_non_mob'>[see_chat_non_mob ? "Enabled" : "Disabled"]</a><br>"
//SKYRAT CHANGES BEGIN
//SANDSTORM CHANGES BEGIN
dat += "<b>See Runechat for emotes:</b> <a href='?_src_=prefs;preference=see_chat_emotes'>[see_chat_emotes ? "Enabled" : "Disabled"]</a><br>"
//SKYRAT CHANGES END
//SANDSTORM CHANGES END
dat += "<br>"
dat += "<b>Action Buttons:</b> <a href='?_src_=prefs;preference=action_buttons'>[(buttons_locked) ? "Locked In Place" : "Unlocked"]</a><br>"
dat += "<br>"
@@ -1288,7 +1292,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>Fetish content prefs</h2>"
dat += "<b>Allow Lewd Verbs:</b> <a href='?_src_=prefs;preference=verb_consent'>[(toggles & VERB_CONSENT) ? "Yes":"No"]</a><br>" // Skyrat - ERP Mechanic Addition
dat += "<b>Mute Lewd Verb Sounds:</b> <a href='?_src_=prefs;preference=mute_lewd_verb_sounds'>[(toggles & LEWD_VERB_SOUNDS) ? "Yes":"No"]</a><br>" // Skyrat - ERP Mechanic Addition
dat += "<b>Mute Lewd Verb Sounds:</b> <a href='?_src_=prefs;preference=mute_lewd_verb_sounds'>[(toggles & LEWD_VERB_SOUNDS) ? "Yes":"No"]</a><br>" // Sandstorm - ERP Mechanic Addition
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Genital examine text</b>:<a href='?_src_=prefs;preference=genital_examine'>[(cit_toggles & GENITAL_EXAMINE) ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Vore examine text</b>:<a href='?_src_=prefs;preference=vore_examine'>[(cit_toggles & VORE_EXAMINE) ? "Enabled" : "Disabled"]</a><BR>"
@@ -1309,11 +1313,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Hypno:</b> <a href='?_src_=prefs;preference=never_hypno'>[(cit_toggles & NEVER_HYPNO) ? "Disallowed" : "Allowed"]</a><br>"
dat += "<b>Aphrodisiacs:</b> <a href='?_src_=prefs;preference=aphro'>[(cit_toggles & NO_APHRO) ? "Disallowed" : "Allowed"]</a><br>"
dat += "<b>Ass Slapping:</b> <a href='?_src_=prefs;preference=ass_slap'>[(cit_toggles & NO_ASS_SLAP) ? "Disallowed" : "Allowed"]</a><br>"
//SKYRAT EDIT
//SANDSTORM EDIT
dat += "<b>Extreme ERP verbs :</b> <a href='?_src_=prefs;preference=extremepref'>[extremepref]</a><br>" // https://youtu.be/0YrU9ASVw6w
if(extremepref != "No")
dat += "<b><span style='color: #e60000;'>Harmful ERP verbs :</b> <a href='?_src_=prefs;preference=extremeharm'>[extremeharm]</a><br>"
//END OF SKYRAT EDIT
//END OF SANDSTORM EDIT
dat += "<b>Automatic Wagging:</b> <a href='?_src_=prefs;preference=auto_wag'>[(cit_toggles & NO_AUTO_WAG) ? "Disabled" : "Enabled"]</a><br>"
dat += "</tr></table>"
@@ -1832,18 +1836,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("close")
user << browse(null, "window=mob_occupation")
ShowChoices(user)
return TRUE
if("update")
var/lang = href_list["language"]
if(SSlanguage.languages_by_name[lang])
toggle_language(lang)
SetLanguage(user)
else
SetLanguage(user)
if(!SSlanguage.languages_by_name[lang])
return
if(!toggle_language(lang))
return
language = sortList(language)
if("reset")
language = list()
SetLanguage(user)
else
SetLanguage(user)
SetLanguage(user)
return TRUE
switch(href_list["task"])
@@ -1103,6 +1103,20 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
all_quirks = SANITIZE_LIST(all_quirks)
language = SANITIZE_LIST(language)
if(length(language))
var/list/all_possible_languages = length(SSlanguage.languages_by_name) ? SSlanguage.languages_by_name : typesof(/datum/language)
var/list/lang_names
for(var/datum/language/language_sanitization as anything in all_possible_languages)
if(!initial(language_sanitization.key))
continue
LAZYADD(lang_names, initial(language_sanitization.name))
for(var/language_entry in language)
if(LAZYFIND(lang_names, language_entry))
continue
language -= language_entry
vore_flags = sanitize_integer(vore_flags, 0, MAX_VORE_FLAG, 0)
vore_taste = copytext(vore_taste, 1, MAX_TASTE_LEN)
vore_smell = copytext(vore_smell, 1, MAX_TASTE_LEN)
@@ -539,7 +539,7 @@
if(humanc && CONFIG_GET(flag/roundstart_traits))
SSquirks.AssignQuirks(humanc, humanc.client, TRUE, FALSE, job, FALSE)
//skyrat change
//sandstorm change
if(humanc)
SSlanguage.AssignLanguage(humanc, humanc.client, TRUE, FALSE, job, FALSE)
@@ -56,7 +56,14 @@
if(PREVIEW_PREF_LOADOUT)
SSjob.equip_loadout(parent.mob, mannequin, bypass_prereqs = TRUE, can_drop = FALSE)
SSjob.post_equip_loadout(parent.mob, mannequin, bypass_prereqs = TRUE, can_drop = FALSE)
if(PREVIEW_PREF_NAKED)
mannequin.hidden_underwear = TRUE
mannequin.hidden_undershirt = TRUE
mannequin.hidden_socks = TRUE
if(PREVIEW_PREF_NAKED_AROUSED)
mannequin.hidden_underwear = TRUE
mannequin.hidden_undershirt = TRUE
mannequin.hidden_socks = TRUE
for(var/obj/item/organ/genital/genital in mannequin.internal_organs)
if(CHECK_BITFIELD(genital.genital_flags, GENITAL_CAN_AROUSE))
genital.set_aroused_state(TRUE, null)
@@ -1,30 +1,29 @@
/datum/controller/subsystem/language/proc/AssignLanguage(mob/living/user, client/cli)
/datum/controller/subsystem/language/proc/AssignLanguage(mob/living/user, client/client)
if(!CONFIG_GET(number/max_languages) == 0) //Simply disables everything
var/list/languages = cli.prefs.language
var/list/valid_languages = list()
var/list/invalid_languages = list()
if(!languages.len)
var/list/languages = client.prefs.language.Copy()
var/list/valid_languages
var/list/invalid_languages
if(!length(languages))
return
for(var/I in GLOB.all_languages)
var/datum/language/L = I
var/datum/language/cool = new L
for(var/my_lang in languages)
if(my_lang == cool.name)
if(!cool.restricted || (cool.name in cli.prefs.pref_species.languagewhitelist))
user.grant_language(cool.type, TRUE, TRUE, LANGUAGE_ADDITIONAL)
valid_languages += my_lang
else
for(var/datum/quirk/Q in cli.prefs.all_quirks)
if(cool.name in Q.languagewhitelist)
user.grant_language(cool, TRUE, TRUE, LANGUAGE_ADDITIONAL)
valid_languages += my_lang
continue
invalid_languages += my_lang
for(var/language in languages)
var/datum/language/language_datum = LAZYACCESS(SSlanguage.languages_by_name, language)
if(language_datum)
if(!language_datum.restricted || (language_datum.name in client.prefs.pref_species.languagewhitelist))
user.grant_language(language_datum.type, TRUE, TRUE, LANGUAGE_ADDITIONAL)
LAZYADD(valid_languages, language)
else
continue
if(valid_languages.len)
var/list/sorted_valid = sortList(valid_languages)
to_chat(user, span_notice("You are able to speak in [sorted_valid.Join(", ")]. If you're actually good at [valid_languages.len > 1 ? "them" : "it"] or not, it's up to you."))
if(invalid_languages.len)
var/list/sorted_invalid = sortList(invalid_languages)
to_chat(user, span_warning("[sorted_invalid.Join(", ")] [invalid_languages.len > 1 ? "are" : "is a"] restricted language[invalid_languages.len > 1 ? "s" : ""], and ha[invalid_languages.len > 1 ? "ve" : "s"] not been assigned."))
for(var/datum/quirk/quirk in client.prefs.all_quirks)
if(language_datum.name in quirk.languagewhitelist)
user.grant_language(language_datum.type, TRUE, TRUE, LANGUAGE_ADDITIONAL)
LAZYADD(valid_languages, language)
continue
LAZYADD(invalid_languages, language)
else
continue
var/valid_languages_len = LAZYLEN(valid_languages)
if(valid_languages_len)
to_chat(client, span_notice("You are able to speak in [english_list(sortList(valid_languages))]. If you're actually good at [valid_languages_len > 1 ? "them" : "it"] or not, it's up to you."))
var/invalid_languages_len = LAZYLEN(invalid_languages)
if(invalid_languages_len)
to_chat(client, span_warning("[english_list(sortList(invalid_languages))] [invalid_languages_len > 1 ? "are" : "is a"] restricted language[invalid_languages_len > 1 ? "s" : ""], and ha[invalid_languages_len > 1 ? "ve" : "s"] not been assigned."))
@@ -1,4 +1,4 @@
//SKYRAT EDIT - extra language
//SANDSTORM EDIT - extra language
/datum/preferences/proc/SetLanguage(mob/user)
var/list/dat = list()
dat += "<center><b>Choose Additional Languages</b></center><br>"
@@ -11,11 +11,10 @@
var/datum/language/L = SSlanguage.languages_by_name[V]
if(!L)
return
var/language_name = initial(L.name)
var/language_name = L.name
var/restricted = FALSE
if(L.restricted)
restricted = TRUE
var/font_color = "#4682B4"
if(restricted && !(language_name in pref_species.languagewhitelist))
var/quirklanguagefound = FALSE
for(var/datum/quirk/Q in all_quirks)
@@ -24,11 +23,7 @@
if(!quirklanguagefound)
continue
else
var/picked = FALSE
dat += "<b><font color='[font_color]'>[language_name]:</font></b> [initial(L.desc)]"
if(language_name in language)
picked = TRUE
dat += "<a href='?_src_=prefs;preference=language;task=update;language=[language_name]'>[picked ? "Remove" : "Choose"]</a><br>"
dat += "<a [(language_name in language) ? "class='linkOn'" : ""] href='?_src_=prefs;preference=language;task=update;language=[language_name]'><b>[language_name]</a></b> [L.desc]<br><br>"
else
dat += "<center><b>The language subsystem hasn't fully loaded yet! Please wait a bit and try again.</b></center><br>"
dat += "<hr>"
@@ -48,13 +43,16 @@
/datum/preferences/proc/toggle_language(lang)
if(lang in language)
language -= lang
return TRUE
else if(check_language_maxhit())
if(CONFIG_GET(number/max_languages) == 1)
to_chat(usr, span_danger("You can only have 1 additional language!"))
tgui_alert(usr, "You can only have 1 additional language!", timeout = 5 SECONDS)
else
to_chat(usr, span_danger("You can only have up to [CONFIG_GET(number/max_languages)] additional languages!"))
tgui_alert(usr, "You can only have up to [CONFIG_GET(number/max_languages)] additional languages!", timeout = 5 SECONDS)
return FALSE
else
language += lang
return TRUE
/datum/preferences/proc/check_language_maxhit()
if(CONFIG_GET(number/max_languages) == -1) //infinite
-1
View File
@@ -243,7 +243,6 @@
#include "code\__HELPERS\sorts\TimSort.dm"
#include "code\__SANDCODE\DEFINES\access.dm"
#include "code\__SANDCODE\DEFINES\chat.dm"
#include "code\__SANDCODE\DEFINES\DNA.dm"
#include "code\__SANDCODE\DEFINES\keybindings.dm"
#include "code\__SANDCODE\DEFINES\language.dm"
#include "code\__SANDCODE\DEFINES\lewd.dm"