Merge remote-tracking branch 'citadel/master' into combat_v7
This commit is contained in:
@@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/eye_type = DEFAULT_EYES_TYPE //Eye type
|
||||
var/split_eye_colors = FALSE
|
||||
var/datum/species/pref_species = new /datum/species/human() //Mutant race
|
||||
var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
|
||||
var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
|
||||
|
||||
var/custom_speech_verb = "default" //if your say_mod is to be something other than your races
|
||||
var/custom_tongue = "default" //if your tongue is to be something other than your races
|
||||
@@ -514,7 +514,76 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
// rp marking selection
|
||||
// assume you can only have mam markings or regular markings or none, never both
|
||||
var/marking_type
|
||||
if(parent.can_have_part("mam_body_markings"))
|
||||
marking_type = "mam_body_markings"
|
||||
if(marking_type)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
dat += "<h3>[GLOB.all_mutant_parts[marking_type]]</h3>" // give it the appropriate title for the type of marking
|
||||
dat += "<a href='?_src_=prefs;preference=marking_add;marking_type=[marking_type];task=input'>Add marking</a>"
|
||||
// list out the current markings you have
|
||||
if(length(features[marking_type]))
|
||||
dat += "<table>"
|
||||
var/list/markings = features[marking_type]
|
||||
if(!islist(markings))
|
||||
// something went terribly wrong
|
||||
markings = list()
|
||||
var/list/reverse_markings = reverseList(markings)
|
||||
for(var/list/marking_list in reverse_markings)
|
||||
var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here
|
||||
var/limb_value = marking_list[1]
|
||||
var/actual_name = GLOB.bodypart_names[num2text(limb_value)] // get the actual name from the bitflag representing the part the marking is applied to
|
||||
var/color_marking_dat = ""
|
||||
var/number_colors = 1
|
||||
var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]]
|
||||
var/matrixed_sections = S.covered_limbs[actual_name]
|
||||
if(S && matrixed_sections)
|
||||
// if it has nothing initialize it to white
|
||||
if(length(marking_list) == 2)
|
||||
var/first = "#FFFFFF"
|
||||
var/second = "#FFFFFF"
|
||||
var/third = "#FFFFFF"
|
||||
if(features["mcolor"])
|
||||
first = "#[features["mcolor"]]"
|
||||
if(features["mcolor2"])
|
||||
second = "#[features["mcolor2"]]"
|
||||
if(features["mcolor3"])
|
||||
third = "#[features["mcolor3"]]"
|
||||
marking_list += list(list(first, second, third)) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values
|
||||
// index magic
|
||||
var/primary_index = 1
|
||||
var/secondary_index = 2
|
||||
var/tertiary_index = 3
|
||||
switch(matrixed_sections)
|
||||
if(MATRIX_GREEN)
|
||||
primary_index = 2
|
||||
if(MATRIX_BLUE)
|
||||
primary_index = 3
|
||||
if(MATRIX_RED_BLUE)
|
||||
secondary_index = 2
|
||||
if(MATRIX_GREEN_BLUE)
|
||||
primary_index = 2
|
||||
secondary_index = 3
|
||||
|
||||
// we know it has one matrixed section at minimum
|
||||
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][primary_index]];'> </span>"
|
||||
// if it has a second section, add it
|
||||
if(matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE || matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_ALL)
|
||||
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][secondary_index]];'> </span>"
|
||||
number_colors = 2
|
||||
// if it has a third section, add it
|
||||
if(matrixed_sections == MATRIX_ALL)
|
||||
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][tertiary_index]];'> </span>"
|
||||
number_colors = 3
|
||||
color_marking_dat += " <a href='?_src_=prefs;preference=marking_color;marking_index=[marking_index];marking_type=[marking_type];number_colors=[number_colors];task=input'>Change</a><BR>"
|
||||
dat += "<tr><td>[marking_list[2]] - [actual_name]</td> <td><a href='?_src_=prefs;preference=marking_down;task=input;marking_index=[marking_index];marking_type=[marking_type];'>˄</a> <a href='?_src_=prefs;preference=marking_up;task=input;marking_index=[marking_index];marking_type=[marking_type]'>˅</a> <a href='?_src_=prefs;preference=marking_remove;task=input;marking_index=[marking_index];marking_type=[marking_type]'>X</a> [color_marking_dat]</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
for(var/mutant_part in GLOB.all_mutant_parts)
|
||||
if(mutant_part == "mam_body_markings")
|
||||
continue
|
||||
if(parent.can_have_part(mutant_part))
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -533,8 +602,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(accessory)
|
||||
if(accessory.color_src == MATRIXED || accessory.color_src == MUTCOLORS || accessory.color_src == MUTCOLORS2 || accessory.color_src == MUTCOLORS3) //mutcolors1-3 are deprecated now, please don't rely on these in the future
|
||||
var/mutant_string = accessory.mutant_part_string
|
||||
if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings))
|
||||
continue
|
||||
var/primary_feature = "[mutant_string]_primary"
|
||||
var/secondary_feature = "[mutant_string]_secondary"
|
||||
var/tertiary_feature = "[mutant_string]_tertiary"
|
||||
@@ -1726,13 +1793,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
pref_species = new newtype()
|
||||
//let's ensure that no weird shit happens on species swapping.
|
||||
custom_species = null
|
||||
if(!parent.can_have_part("body_markings"))
|
||||
features["body_markings"] = "None"
|
||||
if(!parent.can_have_part("mam_body_markings"))
|
||||
features["mam_body_markings"] = "None"
|
||||
features["mam_body_markings"] = list()
|
||||
if(parent.can_have_part("mam_body_markings"))
|
||||
if(features["mam_body_markings"] == "None")
|
||||
features["mam_body_markings"] = "Plain"
|
||||
features["mam_body_markings"] = list()
|
||||
if(parent.can_have_part("tail_lizard"))
|
||||
features["tail_lizard"] = "Smooth"
|
||||
if(pref_species.id == "felinid")
|
||||
@@ -1961,14 +2026,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(new_spines)
|
||||
features["spines"] = new_spines
|
||||
|
||||
if("body_markings")
|
||||
var/new_body_markings
|
||||
new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list
|
||||
if(new_body_markings)
|
||||
features["body_markings"] = new_body_markings
|
||||
if(new_body_markings != "None")
|
||||
features["mam_body_markings"] = "None"
|
||||
|
||||
if("legs")
|
||||
var/new_legs
|
||||
new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list
|
||||
@@ -2088,26 +2145,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(new_ears)
|
||||
features["mam_ears"] = new_ears
|
||||
|
||||
if("mam_body_markings")
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in GLOB.mam_body_markings_list)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
var/new_mam_body_markings
|
||||
new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list
|
||||
if(new_mam_body_markings)
|
||||
features["mam_body_markings"] = new_mam_body_markings
|
||||
if(new_mam_body_markings != "None")
|
||||
features["body_markings"] = "None"
|
||||
else if(new_mam_body_markings == "None")
|
||||
features["mam_body_markings"] = "Plain"
|
||||
features["body_markings"] = "None"
|
||||
|
||||
//Xeno Bodyparts
|
||||
if("xenohead")//Head or caste type
|
||||
var/new_head
|
||||
@@ -2133,7 +2170,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["xenodorsal"] = new_dors
|
||||
|
||||
//every single primary/secondary/tertiary colouring done at once
|
||||
if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","body_markings_primary","body_markings_secondary","body_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary")
|
||||
if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary")
|
||||
var/the_feature = features[href_list["preference"]]
|
||||
if(!the_feature)
|
||||
features[href_list["preference"]] = "FFFFFF"
|
||||
@@ -2390,6 +2427,111 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids
|
||||
if(selected_body_sprite)
|
||||
chosen_limb_id = selected_body_sprite //this gets sanitized before loading
|
||||
|
||||
if("marking_down")
|
||||
// move the specified marking down
|
||||
var/index = text2num(href_list["marking_index"])
|
||||
var/marking_type = href_list["marking_type"]
|
||||
if(index && marking_type && features[marking_type] && index != length(features[marking_type]))
|
||||
var/index_down = index + 1
|
||||
var/markings = features[marking_type]
|
||||
var/first_marking = markings[index]
|
||||
var/second_marking = markings[index_down]
|
||||
markings[index] = second_marking
|
||||
markings[index_down] = first_marking
|
||||
|
||||
if("marking_up")
|
||||
// move the specified marking up
|
||||
var/index = text2num(href_list["marking_index"])
|
||||
var/marking_type = href_list["marking_type"]
|
||||
if(index && marking_type && features[marking_type] && index != 1)
|
||||
var/index_up = index - 1
|
||||
var/markings = features[marking_type]
|
||||
var/first_marking = markings[index]
|
||||
var/second_marking = markings[index_up]
|
||||
markings[index] = second_marking
|
||||
markings[index_up] = first_marking
|
||||
|
||||
if("marking_remove")
|
||||
// move the specified marking up
|
||||
var/index = text2num(href_list["marking_index"])
|
||||
var/marking_type = href_list["marking_type"]
|
||||
if(index && marking_type && features[marking_type])
|
||||
// because linters are just absolutely awful:
|
||||
var/list/L = features[marking_type]
|
||||
L.Cut(index, index + 1)
|
||||
|
||||
if("marking_add")
|
||||
// add a marking
|
||||
var/marking_type = href_list["marking_type"]
|
||||
if(marking_type && features[marking_type])
|
||||
var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "All")
|
||||
if(selected_limb)
|
||||
var/list/marking_list = GLOB.mam_body_markings_list
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in marking_list)
|
||||
var/datum/sprite_accessory/S = marking_list[path]
|
||||
if(istype(S))
|
||||
if(istype(S, /datum/sprite_accessory/mam_body_markings))
|
||||
var/datum/sprite_accessory/mam_body_markings/marking = S
|
||||
if(!(selected_limb in marking.covered_limbs) && selected_limb != "All")
|
||||
continue
|
||||
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
|
||||
var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list
|
||||
if(selected_marking)
|
||||
if(selected_limb != "All")
|
||||
var/limb_value = text2num(GLOB.bodypart_values[selected_limb])
|
||||
features[marking_type] += list(list(limb_value, selected_marking))
|
||||
else
|
||||
var/datum/sprite_accessory/mam_body_markings/S = marking_list[selected_marking]
|
||||
for(var/limb in S.covered_limbs)
|
||||
var/limb_value = text2num(GLOB.bodypart_values[limb])
|
||||
features[marking_type] += list(list(limb_value, selected_marking))
|
||||
|
||||
if("marking_color")
|
||||
var/index = text2num(href_list["marking_index"])
|
||||
var/marking_type = href_list["marking_type"]
|
||||
if(index && marking_type && features[marking_type])
|
||||
// work out the input options to show the user
|
||||
var/list/options = list("Primary")
|
||||
var/number_colors = text2num(href_list["number_colors"])
|
||||
var/color_number = 1 // 1-3 which color are we editing
|
||||
if(number_colors >= 2)
|
||||
options += "Secondary"
|
||||
if(number_colors == 3)
|
||||
options += "Tertiary"
|
||||
var/color_option = input(user, "Select the colour you wish to edit") as null|anything in options
|
||||
if(color_option)
|
||||
if(color_option == "Secondary") color_number = 2
|
||||
if(color_option == "Tertiary") color_number = 3
|
||||
// perform some magic on the color number
|
||||
var/list/marking_list = features[marking_type][index]
|
||||
var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]]
|
||||
var/matrixed_sections = S.covered_limbs[GLOB.bodypart_names[num2text(marking_list[1])]]
|
||||
if(color_number == 1)
|
||||
switch(matrixed_sections)
|
||||
if(MATRIX_GREEN)
|
||||
color_number = 2
|
||||
if(MATRIX_BLUE)
|
||||
color_number = 3
|
||||
else if(color_number == 2)
|
||||
switch(matrixed_sections)
|
||||
if(MATRIX_RED_BLUE)
|
||||
color_number = 3
|
||||
if(MATRIX_GREEN_BLUE)
|
||||
color_number = 3
|
||||
|
||||
var/color_list = features[marking_type][index][3]
|
||||
var/new_marking_color = input(user, "Choose your character's marking color:", "Character Preference","#"+color_list[color_number]) as color|null
|
||||
if(new_marking_color)
|
||||
var/temp_hsv = RGBtoHSV(new_marking_color)
|
||||
if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright, but only if they affect the skin
|
||||
color_list[color_number] = "#[sanitize_hexcolor(new_marking_color, 6)]"
|
||||
else
|
||||
to_chat(user, "<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
else
|
||||
switch(href_list["preference"])
|
||||
//CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// You do not need to raise this if you are adding new values that have sane defaults.
|
||||
// Only raise this value when changing the meaning/format/name/layout of an existing value
|
||||
// where you would want the updater procs below to run
|
||||
#define SAVEFILE_VERSION_MAX 50
|
||||
#define SAVEFILE_VERSION_MAX 52
|
||||
|
||||
/*
|
||||
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
|
||||
@@ -283,7 +283,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
qdel(temporary_gear_item)
|
||||
//it's double packed into a list because += will union the two lists contents
|
||||
|
||||
S["loadout"] = safe_json_encode(loadout_data)
|
||||
S["loadout"] = loadout_data
|
||||
|
||||
if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake
|
||||
S["unlockable_loadout"] = list()
|
||||
@@ -295,6 +295,51 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
L -= ROLE_SYNDICATE
|
||||
S["be_special"] << L
|
||||
|
||||
if(current_version < 51) //humans can have digi legs now, make sure they dont default to them or human players will murder me in my sleep
|
||||
if(S["species"] == SPECIES_HUMAN)
|
||||
features["legs"] = "Plantigrade"
|
||||
|
||||
if(current_version < 52) // rp markings means markings are now stored as a list, lizard markings now mam like the rest
|
||||
var/marking_type
|
||||
var/species_id = S["species"]
|
||||
var/datum/species/actual_species = GLOB.species_datums[species_id]
|
||||
|
||||
// convert lizard markings to lizard markings
|
||||
if(species_id == SPECIES_LIZARD && S["feature_lizard_body_markings"])
|
||||
features["mam_body_markings"] = features["body_markings"]
|
||||
|
||||
// convert mam body marking data to the new rp marking data
|
||||
if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings"
|
||||
|
||||
if(marking_type)
|
||||
var/old_marking_value = S[marking_type]
|
||||
var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF")
|
||||
|
||||
if(S["feature_mcolor"]) color_list[1] = "#" + S["feature_mcolor"]
|
||||
if(S["feature_mcolor2"]) color_list[2] = "#" + S["feature_mcolor2"]
|
||||
if(S["feature_mcolor3"]) color_list[3] = "#" + S["feature_mcolor3"]
|
||||
|
||||
var/list/marking_list = list()
|
||||
for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD))
|
||||
var/list/copied_color_list = color_list.Copy()
|
||||
var/datum/sprite_accessory/mam_body_markings/mam_marking = GLOB.mam_body_markings_list[old_marking_value]
|
||||
var/part_name = GLOB.bodypart_names[num2text(part)]
|
||||
if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part_name])
|
||||
var/matrixed_sections = mam_marking.covered_limbs[part_name]
|
||||
// just trust me this is fine
|
||||
switch(matrixed_sections)
|
||||
if(MATRIX_GREEN)
|
||||
copied_color_list[1] = copied_color_list[2]
|
||||
if(MATRIX_BLUE)
|
||||
copied_color_list[1] = copied_color_list[3]
|
||||
if(MATRIX_RED_BLUE)
|
||||
copied_color_list[2] = copied_color_list[3]
|
||||
if(MATRIX_GREEN_BLUE)
|
||||
copied_color_list[1] = copied_color_list[2]
|
||||
copied_color_list[2] = copied_color_list[3]
|
||||
marking_list += list(list(part, old_marking_value, copied_color_list))
|
||||
features["mam_body_markings"] = marking_list
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey)
|
||||
return
|
||||
@@ -579,7 +624,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
return FALSE
|
||||
features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
|
||||
features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
|
||||
|
||||
S.cd = "/"
|
||||
if(!slot)
|
||||
@@ -649,7 +694,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_lizard_horns"] >> features["horns"]
|
||||
S["feature_lizard_frills"] >> features["frills"]
|
||||
S["feature_lizard_spines"] >> features["spines"]
|
||||
S["feature_lizard_body_markings"] >> features["body_markings"]
|
||||
S["feature_lizard_legs"] >> features["legs"]
|
||||
S["feature_human_tail"] >> features["tail_human"]
|
||||
S["feature_human_ears"] >> features["ears"]
|
||||
@@ -718,7 +762,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"]
|
||||
S["feature_mcolor2"] >> features["mcolor2"]
|
||||
S["feature_mcolor3"] >> features["mcolor3"]
|
||||
S["feature_mam_body_markings"] >> features["mam_body_markings"]
|
||||
// note safe json decode will runtime the first time it migrates but this is fine and it solves itself don't worry about it if you see it error
|
||||
features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"])
|
||||
S["feature_mam_tail"] >> features["mam_tail"]
|
||||
S["feature_mam_ears"] >> features["mam_ears"]
|
||||
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
|
||||
@@ -848,7 +893,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
|
||||
features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
|
||||
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
|
||||
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
|
||||
features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade")
|
||||
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None")
|
||||
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
|
||||
@@ -1017,7 +1061,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["feature_human_ears"] , features["ears"])
|
||||
WRITE_FILE(S["feature_lizard_frills"] , features["frills"])
|
||||
WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
|
||||
WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
|
||||
WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
|
||||
WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"])
|
||||
WRITE_FILE(S["feature_horns_color"] , features["horns_color"])
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
set desc = "Authorizes your account in the panic bunker of any servers connected to this function."
|
||||
set category = "OOC"
|
||||
|
||||
if(!(prefs.db_flags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE))
|
||||
if(prefs.db_flags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE)
|
||||
to_chat(src, "<span class='danger'>You are not age verified.</span>")
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user