mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
Privates Visibility Preferences. Also Undergarments having a purpose.
This commit is contained in:
@@ -35,6 +35,8 @@
|
|||||||
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
|
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
|
||||||
#define CAN_CLIMAX_WITH (1<<7)
|
#define CAN_CLIMAX_WITH (1<<7)
|
||||||
#define GENITAL_CAN_AROUSE (1<<8)
|
#define GENITAL_CAN_AROUSE (1<<8)
|
||||||
|
#define GENITAL_UNDIES_HIDDEN (1<<9)
|
||||||
|
#define UPDATE_OWNER_APPEARANCE (1<<10)
|
||||||
|
|
||||||
|
|
||||||
#define DEF_VAGINA_SHAPE "Human"
|
#define DEF_VAGINA_SHAPE "Human"
|
||||||
@@ -71,6 +73,12 @@
|
|||||||
#define MILK_RATE_MULT 1
|
#define MILK_RATE_MULT 1
|
||||||
#define MILK_EFFICIENCY 1
|
#define MILK_EFFICIENCY 1
|
||||||
|
|
||||||
|
//visibility toggles defines to avoid errors typos code errors.
|
||||||
|
#define GEN_VISIBLE_ALWAYS "Always visible"
|
||||||
|
#define GEN_VISIBLE_NO_CLOTHES "Hidden by clothes"
|
||||||
|
#define GEN_VISIBLE_NO_UNDIES "Hidden by underwear"
|
||||||
|
#define GEN_VISIBLE_NEVER "Always hidden"
|
||||||
|
|
||||||
//Individual logging define
|
//Individual logging define
|
||||||
#define INDIVIDUAL_LOOC_LOG "LOOC log"
|
#define INDIVIDUAL_LOOC_LOG "LOOC log"
|
||||||
|
|
||||||
|
|||||||
@@ -27,14 +27,15 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
|||||||
|
|
||||||
//Human Overlays Indexes/////////
|
//Human Overlays Indexes/////////
|
||||||
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
||||||
#define MUTATIONS_LAYER 32 //mutations. Tk headglows, cold resistance glow, etc
|
#define MUTATIONS_LAYER 33 //mutations. Tk headglows, cold resistance glow, etc
|
||||||
#define GENITALS_BEHIND_LAYER 31 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
#define GENITALS_BEHIND_LAYER 32 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||||
#define BODY_BEHIND_LAYER 30 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
#define BODY_BEHIND_LAYER 31 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||||
#define BODYPARTS_LAYER 29 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
#define BODYPARTS_LAYER 30 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||||
#define MARKING_LAYER 28 //Matrixed body markings because clashing with snouts?
|
#define MARKING_LAYER 29 //Matrixed body markings because clashing with snouts?
|
||||||
#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
#define BODY_ADJ_LAYER 28 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||||
#define GENITALS_FRONT_LAYER 26 //Draws some genitalia above clothes and the TAUR body if need be.
|
#define GENITALS_FRONT_LAYER 27 //Draws some genitalia above clothes and the TAUR body if need be.
|
||||||
#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup)
|
#define BODY_LAYER 26 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||||
|
#define GENITALS_NO_UNDIE_LAYER 25 //found above undergarments.
|
||||||
#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
||||||
#define DAMAGE_LAYER 23 //damage indicators (cuts and burns)
|
#define DAMAGE_LAYER 23 //damage indicators (cuts and burns)
|
||||||
#define UNIFORM_LAYER 22
|
#define UNIFORM_LAYER 22
|
||||||
@@ -59,7 +60,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
|||||||
#define HANDS_LAYER 3
|
#define HANDS_LAYER 3
|
||||||
#define BODY_FRONT_LAYER 2
|
#define BODY_FRONT_LAYER 2
|
||||||
#define FIRE_LAYER 1 //If you're on fire
|
#define FIRE_LAYER 1 //If you're on fire
|
||||||
#define TOTAL_LAYERS 32 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
#define TOTAL_LAYERS 33 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||||
|
|
||||||
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
||||||
//Because I *KNOW* somebody will think layer+1 means "above"
|
//Because I *KNOW* somebody will think layer+1 means "above"
|
||||||
|
|||||||
@@ -58,14 +58,13 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
|||||||
//Genitals and Arousal Lists
|
//Genitals and Arousal Lists
|
||||||
GLOBAL_LIST_EMPTY(genitals_list)
|
GLOBAL_LIST_EMPTY(genitals_list)
|
||||||
GLOBAL_LIST_EMPTY(cock_shapes_list)
|
GLOBAL_LIST_EMPTY(cock_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(gentlemans_organ_names)
|
|
||||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||||
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
//longcat memes.
|
||||||
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
GLOBAL_LIST_INIT(dick_nouns, list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett", "Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior"))
|
||||||
GLOBAL_LIST_INIT(cum_id_list,"semen")
|
|
||||||
GLOBAL_LIST_INIT(milk_id_list,"milk")
|
GLOBAL_LIST_INIT(genitals_visibility_toggles, list(GEN_VISIBLE_ALWAYS, GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER))
|
||||||
|
|
||||||
GLOBAL_LIST_INIT(dildo_shapes, list(
|
GLOBAL_LIST_INIT(dildo_shapes, list(
|
||||||
"Human" = "human",
|
"Human" = "human",
|
||||||
|
|||||||
@@ -54,11 +54,6 @@
|
|||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||||
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ",
|
|
||||||
"cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret",
|
|
||||||
"baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket",
|
|
||||||
"One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett",
|
|
||||||
"Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior")
|
|
||||||
|
|
||||||
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
||||||
var/obj/item/organ/genital/G = gpath
|
var/obj/item/organ/genital/G = gpath
|
||||||
|
|||||||
@@ -185,7 +185,6 @@
|
|||||||
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
||||||
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"has_balls" = FALSE,
|
"has_balls" = FALSE,
|
||||||
"balls_internal" = FALSE,
|
|
||||||
"balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"balls_size" = BALLS_SIZE_DEF,
|
"balls_size" = BALLS_SIZE_DEF,
|
||||||
"balls_shape" = DEF_BALLS_SHAPE,
|
"balls_shape" = DEF_BALLS_SHAPE,
|
||||||
@@ -200,13 +199,11 @@
|
|||||||
"has_vag" = FALSE,
|
"has_vag" = FALSE,
|
||||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||||
"vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"vag_clits" = 1,
|
|
||||||
"vag_clit_diam" = 0.25,
|
|
||||||
"vag_clit_len" = 0.25,
|
|
||||||
"has_womb" = FALSE,
|
"has_womb" = FALSE,
|
||||||
"womb_cum_rate" = CUM_RATE,
|
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
"womb_cum_mult" = CUM_RATE_MULT,
|
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
|
||||||
"womb_efficiency" = CUM_EFFICIENCY,
|
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
|
"vag_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||||
"ipc_antenna" = "None",
|
"ipc_antenna" = "None",
|
||||||
"flavor_text" = "",
|
"flavor_text" = "",
|
||||||
|
|||||||
@@ -436,3 +436,8 @@
|
|||||||
/datum/config_entry/number/penis_max_inches_prefs
|
/datum/config_entry/number/penis_max_inches_prefs
|
||||||
config_entry_value = 20
|
config_entry_value = 20
|
||||||
min_val = 0
|
min_val = 0
|
||||||
|
|
||||||
|
/datum/config_entry/keyed_list/safe_visibility_toggles
|
||||||
|
key_mode = KEY_MODE_TEXT
|
||||||
|
value_mode = VALUE_MODE_FLAG
|
||||||
|
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
|
|||||||
user.underwear = chosen_prof.underwear
|
user.underwear = chosen_prof.underwear
|
||||||
user.undie_color = chosen_prof.undie_color
|
user.undie_color = chosen_prof.undie_color
|
||||||
user.undershirt = chosen_prof.undershirt
|
user.undershirt = chosen_prof.undershirt
|
||||||
user.shirt_color =chosen_prof.shirt_color
|
user.shirt_color = chosen_prof.shirt_color
|
||||||
user.socks = chosen_prof.socks
|
user.socks = chosen_prof.socks
|
||||||
user.socks_color =chosen_prof.socks_color
|
user.socks_color =chosen_prof.socks_color
|
||||||
|
|
||||||
chosen_dna.transfer_identity(user, 1)
|
chosen_dna.transfer_identity(user, 1)
|
||||||
user.updateappearance(mutcolor_update=1)
|
user.updateappearance(mutcolor_update=1)
|
||||||
user.update_body()
|
user.update_body(TRUE)
|
||||||
user.domutcheck()
|
user.domutcheck()
|
||||||
|
|
||||||
//vars hackery. not pretty, but better than the alternative.
|
//vars hackery. not pretty, but better than the alternative.
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
H.socks_color = recolor_undergarment(H, "socks", H.socks_color)
|
H.socks_color = recolor_undergarment(H, "socks", H.socks_color)
|
||||||
|
|
||||||
add_fingerprint(H)
|
add_fingerprint(H)
|
||||||
H.update_body()
|
H.update_body(TRUE)
|
||||||
|
|
||||||
/obj/structure/dresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color)
|
/obj/structure/dresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color)
|
||||||
var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
|
var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
new_spawn.underwear = "Nude" //You're a plant, partner
|
new_spawn.underwear = "Nude" //You're a plant, partner
|
||||||
new_spawn.undershirt = "Nude" //changing underwear/shirt/socks doesn't seem to function correctly right now because of some bug elsewhere?
|
new_spawn.undershirt = "Nude" //changing underwear/shirt/socks doesn't seem to function correctly right now because of some bug elsewhere?
|
||||||
new_spawn.socks = "Nude"
|
new_spawn.socks = "Nude"
|
||||||
new_spawn.update_body()
|
new_spawn.update_body(TRUE)
|
||||||
|
|
||||||
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
|
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,6 @@
|
|||||||
|
|
||||||
SEND_SIGNAL(H, COMSIG_HUMAN_ON_RANDOMIZE)
|
SEND_SIGNAL(H, COMSIG_HUMAN_ON_RANDOMIZE)
|
||||||
|
|
||||||
H.update_body()
|
H.update_body(TRUE)
|
||||||
H.update_hair()
|
H.update_hair()
|
||||||
H.update_body_parts()
|
H.update_body_parts()
|
||||||
|
|||||||
@@ -95,7 +95,7 @@
|
|||||||
H.dna.features = random_features(H.dna.species?.id)
|
H.dna.features = random_features(H.dna.species?.id)
|
||||||
|
|
||||||
// Apply Appearance
|
// Apply Appearance
|
||||||
H.update_body() // Outfit and underware, also body.
|
H.update_body(TRUE) // Outfit and underwear, also body and privates.
|
||||||
//H.update_mutant_bodyparts() // Lizard tails etc
|
//H.update_mutant_bodyparts() // Lizard tails etc
|
||||||
H.update_hair()
|
H.update_hair()
|
||||||
H.update_body_parts()
|
H.update_body_parts()
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement
|
ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement
|
||||||
H.dna.features = prev_features
|
H.dna.features = prev_features
|
||||||
// Apply Appearance
|
// Apply Appearance
|
||||||
H.update_body() // Outfit and underware, also body.
|
H.update_body(TRUE) // Outfit and underwear, also body and privates.
|
||||||
H.update_hair()
|
H.update_hair()
|
||||||
H.update_body_parts() // Body itself, maybe skin color?
|
H.update_body_parts() // Body itself, maybe skin color?
|
||||||
cast_effect() // POOF
|
cast_effect() // POOF
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
|||||||
H.undershirt = "Nude"
|
H.undershirt = "Nude"
|
||||||
H.socks = "Nude"
|
H.socks = "Nude"
|
||||||
H.dna.features["mcolor"] = "511" //A deep red
|
H.dna.features["mcolor"] = "511" //A deep red
|
||||||
H.regenerate_icons()
|
H.update_body(TRUE)
|
||||||
else //Did the devil get hit by a staff of transmutation?
|
else //Did the devil get hit by a staff of transmutation?
|
||||||
owner.current.color = "#501010"
|
owner.current.color = "#501010"
|
||||||
give_appropriate_spells()
|
give_appropriate_spells()
|
||||||
@@ -466,7 +466,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
|||||||
H.undershirt = "Nude"
|
H.undershirt = "Nude"
|
||||||
H.socks = "Nude"
|
H.socks = "Nude"
|
||||||
H.dna.features["mcolor"] = "511"
|
H.dna.features["mcolor"] = "511"
|
||||||
H.regenerate_icons()
|
H.update_body(TRUE)
|
||||||
if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough.
|
if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough.
|
||||||
var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf)
|
var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf)
|
||||||
A.faction |= "hell"
|
A.faction |= "hell"
|
||||||
|
|||||||
@@ -208,7 +208,7 @@
|
|||||||
else
|
else
|
||||||
H.skin_tone = random_skin_tone()
|
H.skin_tone = random_skin_tone()
|
||||||
H.update_hair()
|
H.update_hair()
|
||||||
H.update_body()
|
H.update_body() //update_genitals arg FALSE because these don't quite require/have them most times.
|
||||||
if(outfit)
|
if(outfit)
|
||||||
var/static/list/slots = list("uniform", "r_hand", "l_hand", "suit", "shoes", "gloves", "ears", "glasses", "mask", "head", "belt", "r_pocket", "l_pocket", "back", "id", "neck", "backpack_contents", "suit_store")
|
var/static/list/slots = list("uniform", "r_hand", "l_hand", "suit", "shoes", "gloves", "ears", "glasses", "mask", "head", "belt", "r_pocket", "l_pocket", "back", "id", "neck", "backpack_contents", "suit_store")
|
||||||
for(var/slot in slots)
|
for(var/slot in slots)
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
||||||
"cock_color" = "fff",
|
"cock_color" = "fff",
|
||||||
"has_balls" = FALSE,
|
"has_balls" = FALSE,
|
||||||
"balls_internal" = FALSE,
|
|
||||||
"balls_color" = "fff",
|
"balls_color" = "fff",
|
||||||
"balls_shape" = DEF_BALLS_SHAPE,
|
"balls_shape" = DEF_BALLS_SHAPE,
|
||||||
"balls_size" = BALLS_SIZE_DEF,
|
"balls_size" = BALLS_SIZE_DEF,
|
||||||
@@ -141,12 +140,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
"has_vag" = FALSE,
|
"has_vag" = FALSE,
|
||||||
"vag_shape" = DEF_VAGINA_SHAPE,
|
"vag_shape" = DEF_VAGINA_SHAPE,
|
||||||
"vag_color" = "fff",
|
"vag_color" = "fff",
|
||||||
"vag_clits" = 1,
|
|
||||||
"vag_clit_diam" = 0.25,
|
|
||||||
"has_womb" = FALSE,
|
"has_womb" = FALSE,
|
||||||
"womb_cum_rate" = CUM_RATE,
|
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
"womb_cum_mult" = CUM_RATE_MULT,
|
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
|
||||||
"womb_efficiency" = CUM_EFFICIENCY,
|
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
|
"vag_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||||
"ipc_screen" = "Sunburst",
|
"ipc_screen" = "Sunburst",
|
||||||
"ipc_antenna" = "None",
|
"ipc_antenna" = "None",
|
||||||
"flavor_text" = "",
|
"flavor_text" = "",
|
||||||
@@ -763,6 +761,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["cock_color"]];'> </span> <a href='?_src_=prefs;preference=cock_color;task=input'>Change</a><br>"
|
dat += "<span style='border: 1px solid #161616; background-color: #[features["cock_color"]];'> </span> <a href='?_src_=prefs;preference=cock_color;task=input'>Change</a><br>"
|
||||||
dat += "<b>Penis Shape:</b> <a style='display:block;width:120px' href='?_src_=prefs;preference=cock_shape;task=input'>[features["cock_shape"]]</a>"
|
dat += "<b>Penis Shape:</b> <a style='display:block;width:120px' href='?_src_=prefs;preference=cock_shape;task=input'>[features["cock_shape"]]</a>"
|
||||||
dat += "<b>Penis Length:</b> <a style='display:block;width:120px' href='?_src_=prefs;preference=cock_length;task=input'>[features["cock_length"]] inch(es)</a>"
|
dat += "<b>Penis Length:</b> <a style='display:block;width:120px' href='?_src_=prefs;preference=cock_length;task=input'>[features["cock_length"]] inch(es)</a>"
|
||||||
|
dat += "<b>Penis Visibility:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=cock_visibility;task=input'>[features["cock_visibility"]]</a>"
|
||||||
dat += "<b>Has Testicles:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=has_balls'>[features["has_balls"] == TRUE ? "Yes" : "No"]</a>"
|
dat += "<b>Has Testicles:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=has_balls'>[features["has_balls"] == TRUE ? "Yes" : "No"]</a>"
|
||||||
if(features["has_balls"])
|
if(features["has_balls"])
|
||||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||||
@@ -771,7 +770,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
dat += "<b>Testicles Color:</b></a><BR>"
|
dat += "<b>Testicles Color:</b></a><BR>"
|
||||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["balls_color"]];'> </span> <a href='?_src_=prefs;preference=balls_color;task=input'>Change</a><br>"
|
dat += "<span style='border: 1px solid #161616; background-color: #[features["balls_color"]];'> </span> <a href='?_src_=prefs;preference=balls_color;task=input'>Change</a><br>"
|
||||||
dat += "<b>Testicles showing:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=balls_shape;task=input'>[features["balls_shape"]]</a>"
|
dat += "<b>Testicles Visibility:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=balls_visibility;task=input'>[features["balls_visibility"]]</a>"
|
||||||
dat += APPEARANCE_CATEGORY_COLUMN
|
dat += APPEARANCE_CATEGORY_COLUMN
|
||||||
dat += "<h3>Vagina</h3>"
|
dat += "<h3>Vagina</h3>"
|
||||||
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_vag'>[features["has_vag"] == TRUE ? "Yes" : "No"]</a>"
|
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_vag'>[features["has_vag"] == TRUE ? "Yes" : "No"]</a>"
|
||||||
@@ -783,6 +782,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
dat += "<b>Vagina Color:</b></a><BR>"
|
dat += "<b>Vagina Color:</b></a><BR>"
|
||||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["vag_color"]];'> </span> <a href='?_src_=prefs;preference=vag_color;task=input'>Change</a><br>"
|
dat += "<span style='border: 1px solid #161616; background-color: #[features["vag_color"]];'> </span> <a href='?_src_=prefs;preference=vag_color;task=input'>Change</a><br>"
|
||||||
|
dat += "<b>Vagina Visibility:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=vag_visibility;task=input'>[features["vag_visibility"]]</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 += "<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>"
|
||||||
dat += APPEARANCE_CATEGORY_COLUMN
|
dat += APPEARANCE_CATEGORY_COLUMN
|
||||||
@@ -796,7 +796,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
dat += "<b>Color:</b></a><BR>"
|
dat += "<b>Color:</b></a><BR>"
|
||||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["breasts_color"]];'> </span> <a href='?_src_=prefs;preference=breasts_color;task=input'>Change</a><br>"
|
dat += "<span style='border: 1px solid #161616; background-color: #[features["breasts_color"]];'> </span> <a href='?_src_=prefs;preference=breasts_color;task=input'>Change</a><br>"
|
||||||
dat += "<b>Cup Size:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_size;task=input'>[features["breasts_size"]]</a>"
|
dat += "<b>Cup Size:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_size;task=input'>[features["breasts_size"]]</a>"
|
||||||
dat += "<b>Breast Shape:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_shape;task=input'>[features["breasts_shape"]]</a>"
|
dat += "<b>Breasts Shape:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_shape;task=input'>[features["breasts_shape"]]</a>"
|
||||||
|
dat += "<b>Breasts Visibility:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=breasts_visibility;task=input'>[features["breasts_visibility"]]</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 += "<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>"
|
||||||
dat += "</td>"
|
dat += "</td>"
|
||||||
@@ -1939,8 +1940,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
if(new_shape)
|
if(new_shape)
|
||||||
features["cock_shape"] = new_shape
|
features["cock_shape"] = new_shape
|
||||||
|
|
||||||
|
if("cock_visibility")
|
||||||
|
var/n_vis = input(user, "Penis Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||||
|
if(n_vis)
|
||||||
|
features["cock_visibility"] = n_vis
|
||||||
|
|
||||||
if("balls_color")
|
if("balls_color")
|
||||||
var/new_ballscolor = input(user, "Testicle Color:", "Character Preference") as color|null
|
var/new_ballscolor = input(user, "Testicles Color:", "Character Preference") as color|null
|
||||||
if(new_ballscolor)
|
if(new_ballscolor)
|
||||||
var/temp_hsv = RGBtoHSV(new_ballscolor)
|
var/temp_hsv = RGBtoHSV(new_ballscolor)
|
||||||
if(new_ballscolor == "#000000")
|
if(new_ballscolor == "#000000")
|
||||||
@@ -1950,11 +1956,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||||
|
|
||||||
if("balls_shape")
|
if("balls_visibility")
|
||||||
var/new_shape
|
var/n_vis = input(user, "Testicles Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||||
new_shape = input(user, "Testicle Type:", "Character Preference") as null|anything in GLOB.balls_shapes_list
|
if(n_vis)
|
||||||
if(new_shape)
|
features["balls_visibility"] = n_vis
|
||||||
features["balls_shape"] = new_shape
|
|
||||||
|
|
||||||
if("breasts_size")
|
if("breasts_size")
|
||||||
var/new_size = input(user, "Breast Size", "Character Preference") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs)
|
var/new_size = input(user, "Breast Size", "Character Preference") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs)
|
||||||
@@ -1978,6 +1983,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||||
|
|
||||||
|
if("breasts_visibility")
|
||||||
|
var/n_vis = input(user, "Breasts Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||||
|
if(n_vis)
|
||||||
|
features["breasts_visibility"] = n_vis
|
||||||
|
|
||||||
if("vag_shape")
|
if("vag_shape")
|
||||||
var/new_shape
|
var/new_shape
|
||||||
new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list
|
new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list
|
||||||
@@ -1995,6 +2005,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||||
|
|
||||||
|
if("vag_visibility")
|
||||||
|
var/n_vis = input(user, "Vagina Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||||
|
if(n_vis)
|
||||||
|
features["vag_visibility"] = n_vis
|
||||||
|
|
||||||
if("ooccolor")
|
if("ooccolor")
|
||||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null
|
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null
|
||||||
if(new_ooccolor)
|
if(new_ooccolor)
|
||||||
@@ -2088,8 +2103,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
features["has_balls"] = FALSE
|
features["has_balls"] = FALSE
|
||||||
if("has_balls")
|
if("has_balls")
|
||||||
features["has_balls"] = !features["has_balls"]
|
features["has_balls"] = !features["has_balls"]
|
||||||
if("balls_internal")
|
|
||||||
features["balls_internal"] = !features["balls_internal"]
|
|
||||||
if("has_breasts")
|
if("has_breasts")
|
||||||
features["has_breasts"] = !features["has_breasts"]
|
features["has_breasts"] = !features["has_breasts"]
|
||||||
if(features["has_breasts"] == FALSE)
|
if(features["has_breasts"] == FALSE)
|
||||||
@@ -2409,6 +2422,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
else
|
else
|
||||||
character.Digitigrade_Leg_Swap(TRUE)
|
character.Digitigrade_Leg_Swap(TRUE)
|
||||||
|
|
||||||
|
character.give_genitals(TRUE) //character.update_genitals() is already called on genital.update_appearance()
|
||||||
|
|
||||||
SEND_SIGNAL(character, COMSIG_HUMAN_PREFS_COPIED_TO, src, icon_updates, roundstart_checks)
|
SEND_SIGNAL(character, COMSIG_HUMAN_PREFS_COPIED_TO, src, icon_updates, roundstart_checks)
|
||||||
|
|
||||||
//let's be sure the character updates
|
//let's be sure the character updates
|
||||||
|
|||||||
@@ -71,11 +71,13 @@
|
|||||||
|
|
||||||
//for snowflake/donor specific sprites
|
//for snowflake/donor specific sprites
|
||||||
var/list/ckeys_allowed
|
var/list/ckeys_allowed
|
||||||
|
|
||||||
//For soft-restricting markings to species IDs
|
//For soft-restricting markings to species IDs
|
||||||
var/list/recommended_species
|
var/list/recommended_species
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear
|
/datum/sprite_accessory/underwear
|
||||||
icon = 'icons/mob/underwear.dmi'
|
icon = 'icons/mob/underwear.dmi'
|
||||||
var/has_color = FALSE
|
var/has_color = FALSE
|
||||||
var/has_digitigrade = FALSE
|
var/has_digitigrade = FALSE
|
||||||
|
var/covers_groin = FALSE
|
||||||
|
var/covers_chest = FALSE
|
||||||
@@ -2,9 +2,13 @@
|
|||||||
// Undershirt Definitions //
|
// Undershirt Definitions //
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
|
|
||||||
|
/datum/sprite_accessory/underwear/top
|
||||||
|
covers_chest = TRUE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/top/nude
|
/datum/sprite_accessory/underwear/top/nude
|
||||||
name = "Nude"
|
name = "Nude"
|
||||||
icon_state = null
|
icon_state = null
|
||||||
|
covers_chest = FALSE
|
||||||
|
|
||||||
// please make sure they're sorted alphabetically and categorized
|
// please make sure they're sorted alphabetically and categorized
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
// Underwear Definitions //
|
// Underwear Definitions //
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
|
|
||||||
|
/datum/sprite_accessory/underwear/bottom
|
||||||
|
covers_groin = TRUE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/bottom/nude
|
/datum/sprite_accessory/underwear/bottom/nude
|
||||||
name = "Nude"
|
name = "Nude"
|
||||||
icon_state = null
|
icon_state = null
|
||||||
|
covers_groin = FALSE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/bottom/mankini
|
/datum/sprite_accessory/underwear/bottom/mankini
|
||||||
name = "Mankini"
|
name = "Mankini"
|
||||||
@@ -155,16 +159,19 @@
|
|||||||
name = "Swimsuit, One Piece - Red"
|
name = "Swimsuit, One Piece - Red"
|
||||||
icon_state = "swimming_red"
|
icon_state = "swimming_red"
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
|
covers_chest = TRUE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/bottom/swimsuit
|
/datum/sprite_accessory/underwear/bottom/swimsuit
|
||||||
name = "Swimsuit, One Piece - Black"
|
name = "Swimsuit, One Piece - Black"
|
||||||
icon_state = "swimming_black"
|
icon_state = "swimming_black"
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
|
covers_chest = TRUE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/bottom/swimsuit_blue
|
/datum/sprite_accessory/underwear/bottom/swimsuit_blue
|
||||||
name = "Swimsuit, One Piece - Striped Blue"
|
name = "Swimsuit, One Piece - Striped Blue"
|
||||||
icon_state = "swimming_blue"
|
icon_state = "swimming_blue"
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
|
covers_chest = TRUE
|
||||||
|
|
||||||
/datum/sprite_accessory/underwear/bottom/thong
|
/datum/sprite_accessory/underwear/bottom/thong
|
||||||
name = "Thong"
|
name = "Thong"
|
||||||
|
|||||||
@@ -629,9 +629,8 @@
|
|||||||
underwear = "Nude"
|
underwear = "Nude"
|
||||||
undershirt = "Nude"
|
undershirt = "Nude"
|
||||||
socks = "Nude"
|
socks = "Nude"
|
||||||
update_body()
|
update_body(TRUE)
|
||||||
update_hair()
|
update_hair()
|
||||||
update_genitals()
|
|
||||||
|
|
||||||
/mob/living/carbon/human/singularity_pull(S, current_size)
|
/mob/living/carbon/human/singularity_pull(S, current_size)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -57,10 +57,12 @@ There are several things that need to be remembered:
|
|||||||
dna.species.handle_mutant_bodyparts(src)
|
dna.species.handle_mutant_bodyparts(src)
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/update_body()
|
/mob/living/carbon/human/update_body(update_genitals = FALSE)
|
||||||
remove_overlay(BODY_LAYER)
|
remove_overlay(BODY_LAYER)
|
||||||
dna.species.handle_body(src)
|
dna.species.handle_body(src)
|
||||||
..()
|
..()
|
||||||
|
if(update_genitals)
|
||||||
|
update_genitals()
|
||||||
|
|
||||||
/mob/living/carbon/human/update_fire()
|
/mob/living/carbon/human/update_fire()
|
||||||
..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning")
|
..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning")
|
||||||
@@ -72,7 +74,7 @@ There are several things that need to be remembered:
|
|||||||
|
|
||||||
if(!..())
|
if(!..())
|
||||||
icon_render_key = null //invalidate bodyparts cache
|
icon_render_key = null //invalidate bodyparts cache
|
||||||
update_body()
|
update_body(TRUE)
|
||||||
update_hair()
|
update_hair()
|
||||||
update_inv_w_uniform()
|
update_inv_w_uniform()
|
||||||
update_inv_wear_id()
|
update_inv_wear_id()
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
hidden_underwear = on_off
|
hidden_underwear = on_off
|
||||||
hidden_socks = on_off
|
hidden_socks = on_off
|
||||||
|
|
||||||
update_body()
|
update_body(TRUE)
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/adjust_arousal(strength,aphro = FALSE,maso = FALSE) // returns all genitals that were adjust
|
/mob/living/carbon/human/proc/adjust_arousal(strength,aphro = FALSE,maso = FALSE) // returns all genitals that were adjust
|
||||||
|
|||||||
@@ -41,6 +41,9 @@
|
|||||||
return
|
return
|
||||||
update_size()
|
update_size()
|
||||||
update_appearance()
|
update_appearance()
|
||||||
|
if(genital_flags & UPDATE_OWNER_APPEARANCE && owner && ishuman(owner))
|
||||||
|
var/mob/living/carbon/human/H = owner
|
||||||
|
H.update_genitals()
|
||||||
if(linked_organ_slot || (linked_organ && !owner))
|
if(linked_organ_slot || (linked_organ && !owner))
|
||||||
update_link()
|
update_link()
|
||||||
|
|
||||||
@@ -49,9 +52,16 @@
|
|||||||
var/list/exposed_genitals = list() //Keeping track of them so we don't have to iterate through every genitalia and see if exposed
|
var/list/exposed_genitals = list() //Keeping track of them so we don't have to iterate through every genitalia and see if exposed
|
||||||
|
|
||||||
/obj/item/organ/genital/proc/is_exposed()
|
/obj/item/organ/genital/proc/is_exposed()
|
||||||
if(!owner || CHECK_BITFIELD(genital_flags, GENITAL_INTERNAL) || CHECK_BITFIELD(genital_flags, GENITAL_HIDDEN))
|
if(!owner || genital_flags & (GENITAL_INTERNAL|GENITAL_HIDDEN))
|
||||||
return FALSE
|
return FALSE
|
||||||
if(CHECK_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES))
|
if(genital_flags & GENITAL_UNDIES_HIDDEN && ishuman(owner))
|
||||||
|
var/mob/living/carbon/human/H = owner
|
||||||
|
if(!(NO_UNDERWEAR in H.dna.species.species_traits))
|
||||||
|
var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[H.undershirt]
|
||||||
|
var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[H.underwear]
|
||||||
|
if(zone == BODY_ZONE_CHEST ? (H.hidden_undershirt || T?.covers_chest || B?.covers_chest) : (H.hidden_underwear || T?.covers_groin || B?.covers_groin))
|
||||||
|
return FALSE
|
||||||
|
if(genital_flags & GENITAL_THROUGH_CLOTHES)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
switch(zone) //update as more genitals are added
|
switch(zone) //update as more genitals are added
|
||||||
@@ -60,25 +70,19 @@
|
|||||||
if(BODY_ZONE_PRECISE_GROIN)
|
if(BODY_ZONE_PRECISE_GROIN)
|
||||||
return owner.is_groin_exposed()
|
return owner.is_groin_exposed()
|
||||||
|
|
||||||
/obj/item/organ/genital/proc/toggle_visibility(visibility)
|
/obj/item/organ/genital/proc/toggle_visibility(visibility, update = TRUE)
|
||||||
|
genital_flags &= ~(GENITAL_THROUGH_CLOTHES|GENITAL_HIDDEN|GENITAL_UNDIES_HIDDEN)
|
||||||
|
owner.exposed_genitals -= src
|
||||||
switch(visibility)
|
switch(visibility)
|
||||||
if("Always visible")
|
if(GEN_VISIBLE_ALWAYS)
|
||||||
ENABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
|
genital_flags |= GENITAL_THROUGH_CLOTHES
|
||||||
DISABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
|
owner.exposed_genitals += src
|
||||||
if(!(src in owner.exposed_genitals))
|
if(GEN_VISIBLE_NO_UNDIES)
|
||||||
owner.exposed_genitals += src
|
genital_flags |= GENITAL_UNDIES_HIDDEN
|
||||||
if("Hidden by clothes")
|
if(GEN_VISIBLE_NEVER)
|
||||||
DISABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
|
genital_flags |= GENITAL_HIDDEN
|
||||||
DISABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
|
|
||||||
if(src in owner.exposed_genitals)
|
|
||||||
owner.exposed_genitals -= src
|
|
||||||
if("Always hidden")
|
|
||||||
DISABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
|
|
||||||
ENABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
|
|
||||||
if(src in owner.exposed_genitals)
|
|
||||||
owner.exposed_genitals -= src
|
|
||||||
|
|
||||||
if(ishuman(owner)) //recast to use update genitals proc
|
if(update && ishuman(owner)) //recast to use update genitals proc
|
||||||
var/mob/living/carbon/human/H = owner
|
var/mob/living/carbon/human/H = owner
|
||||||
H.update_genitals()
|
H.update_genitals()
|
||||||
|
|
||||||
@@ -87,6 +91,10 @@
|
|||||||
set name = "Expose/Hide genitals"
|
set name = "Expose/Hide genitals"
|
||||||
set desc = "Allows you to toggle which genitals should show through clothes or not."
|
set desc = "Allows you to toggle which genitals should show through clothes or not."
|
||||||
|
|
||||||
|
if(stat != CONSCIOUS)
|
||||||
|
to_chat(usr, "<span class='warning'>You can toggle genitals visibility right now...</span>")
|
||||||
|
return
|
||||||
|
|
||||||
var/list/genital_list = list()
|
var/list/genital_list = list()
|
||||||
for(var/obj/item/organ/genital/G in internal_organs)
|
for(var/obj/item/organ/genital/G in internal_organs)
|
||||||
if(!CHECK_BITFIELD(G.genital_flags, GENITAL_INTERNAL))
|
if(!CHECK_BITFIELD(G.genital_flags, GENITAL_INTERNAL))
|
||||||
@@ -95,10 +103,11 @@
|
|||||||
return
|
return
|
||||||
//Full list of exposable genitals created
|
//Full list of exposable genitals created
|
||||||
var/obj/item/organ/genital/picked_organ
|
var/obj/item/organ/genital/picked_organ
|
||||||
picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals", null) in genital_list
|
picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list
|
||||||
if(picked_organ)
|
if(picked_organ && (picked_organ in internal_organs))
|
||||||
var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by clothes", "Always hidden")
|
var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in GLOB.genitals_visibility_toggles
|
||||||
picked_organ.toggle_visibility(picked_visibility)
|
if(picked_visibility && picked_organ && (picked_organ in internal_organs))
|
||||||
|
picked_organ.toggle_visibility(picked_visibility)
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/carbon/verb/toggle_arousal_state()
|
/mob/living/carbon/verb/toggle_arousal_state()
|
||||||
@@ -256,6 +265,7 @@
|
|||||||
var/list/gen_index[GENITAL_LAYER_INDEX_LENGTH]
|
var/list/gen_index[GENITAL_LAYER_INDEX_LENGTH]
|
||||||
var/list/genitals_to_add
|
var/list/genitals_to_add
|
||||||
var/list/fully_exposed
|
var/list/fully_exposed
|
||||||
|
var/list/somewhat_exposed
|
||||||
for(var/obj/item/organ/genital/G in internal_organs)
|
for(var/obj/item/organ/genital/G in internal_organs)
|
||||||
if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes
|
if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes
|
||||||
LAZYADD(gen_index[G.layer_index], G)
|
LAZYADD(gen_index[G.layer_index], G)
|
||||||
@@ -306,9 +316,13 @@
|
|||||||
|
|
||||||
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][dna.species.use_skintones ? "_s" : ""]_[aroused_state]_[layertext]"
|
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][dna.species.use_skintones ? "_s" : ""]_[aroused_state]_[layertext]"
|
||||||
|
|
||||||
if(layers_num[layer] == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
|
if(layers_num[layer] == GENITALS_FRONT_LAYER)
|
||||||
genital_overlay.layer = -GENITALS_EXPOSED_LAYER
|
if(G.genital_flags & GENITAL_THROUGH_CLOTHES)
|
||||||
LAZYADD(fully_exposed, genital_overlay) // to be added to a layer with higher priority than clothes, hence the name of the bitflag.
|
genital_overlay.layer = -GENITALS_EXPOSED_LAYER
|
||||||
|
LAZYADD(fully_exposed, genital_overlay)
|
||||||
|
else if(!(G.genital_flags & GENITAL_UNDIES_HIDDEN))
|
||||||
|
genital_overlay.layer = -GENITALS_NO_UNDIE_LAYER
|
||||||
|
LAZYADD(somewhat_exposed, genital_overlay)
|
||||||
else
|
else
|
||||||
genital_overlay.layer = -layers_num[layer]
|
genital_overlay.layer = -layers_num[layer]
|
||||||
standing += genital_overlay
|
standing += genital_overlay
|
||||||
@@ -320,6 +334,10 @@
|
|||||||
overlays_standing[GENITALS_EXPOSED_LAYER] = fully_exposed
|
overlays_standing[GENITALS_EXPOSED_LAYER] = fully_exposed
|
||||||
apply_overlay(GENITALS_EXPOSED_LAYER)
|
apply_overlay(GENITALS_EXPOSED_LAYER)
|
||||||
|
|
||||||
|
if(LAZYLEN(somewhat_exposed))
|
||||||
|
overlays_standing[GENITALS_NO_UNDIE_LAYER] = somewhat_exposed
|
||||||
|
apply_overlay(GENITALS_NO_UNDIE_LAYER)
|
||||||
|
|
||||||
for(var/L in relevant_layers)
|
for(var/L in relevant_layers)
|
||||||
apply_overlay(layers_num[L])
|
apply_overlay(layers_num[L])
|
||||||
|
|
||||||
|
|||||||
@@ -74,13 +74,9 @@
|
|||||||
name = "testicle" //the preview name of the accessory
|
name = "testicle" //the preview name of the accessory
|
||||||
color_src = "balls_color"
|
color_src = "balls_color"
|
||||||
|
|
||||||
/datum/sprite_accessory/testicles/hidden
|
|
||||||
icon_state = "none"
|
|
||||||
name = "Hidden"
|
|
||||||
|
|
||||||
/datum/sprite_accessory/testicles/single
|
/datum/sprite_accessory/testicles/single
|
||||||
icon_state = "single"
|
icon_state = "single"
|
||||||
name = "Single"
|
name = "Single" //Single as "single pair", for clarity.
|
||||||
|
|
||||||
//Vaginas
|
//Vaginas
|
||||||
/datum/sprite_accessory/vagina
|
/datum/sprite_accessory/vagina
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
fluid_id = /datum/reagent/consumable/milk
|
fluid_id = /datum/reagent/consumable/milk
|
||||||
fluid_rate = MILK_RATE
|
fluid_rate = MILK_RATE
|
||||||
shape = DEF_BREASTS_SHAPE
|
shape = DEF_BREASTS_SHAPE
|
||||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE
|
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
|
||||||
masturbation_verb = "massage"
|
masturbation_verb = "massage"
|
||||||
arousal_verb = "Your breasts start feeling sensitive"
|
arousal_verb = "Your breasts start feeling sensitive"
|
||||||
unarousal_verb = "Your breasts no longer feel sensitive"
|
unarousal_verb = "Your breasts no longer feel sensitive"
|
||||||
@@ -64,9 +64,6 @@
|
|||||||
icon_state += "_s"
|
icon_state += "_s"
|
||||||
else
|
else
|
||||||
color = "#[owner.dna.features["breasts_color"]]"
|
color = "#[owner.dna.features["breasts_color"]]"
|
||||||
if(ishuman(owner))
|
|
||||||
var/mob/living/carbon/human/H = owner
|
|
||||||
H.update_genitals()
|
|
||||||
|
|
||||||
//Allows breasts to grow and change size, with sprite changes too.
|
//Allows breasts to grow and change size, with sprite changes too.
|
||||||
//maximum wah
|
//maximum wah
|
||||||
@@ -133,6 +130,7 @@
|
|||||||
cached_size = size
|
cached_size = size
|
||||||
size = breast_values[size]
|
size = breast_values[size]
|
||||||
prev_size = cached_size
|
prev_size = cached_size
|
||||||
|
toggle_visibility(D.features["breasts_visibility"], FALSE)
|
||||||
|
|
||||||
#undef BREASTS_ICON_MIN_SIZE
|
#undef BREASTS_ICON_MIN_SIZE
|
||||||
#undef BREASTS_ICON_MAX_SIZE
|
#undef BREASTS_ICON_MAX_SIZE
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
masturbation_verb = "stroke"
|
masturbation_verb = "stroke"
|
||||||
arousal_verb = "You pop a boner"
|
arousal_verb = "You pop a boner"
|
||||||
unarousal_verb = "Your boner goes down"
|
unarousal_verb = "Your boner goes down"
|
||||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
|
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
|
||||||
linked_organ_slot = ORGAN_SLOT_TESTICLES
|
linked_organ_slot = ORGAN_SLOT_TESTICLES
|
||||||
fluid_transfer_factor = 0.5
|
fluid_transfer_factor = 0.5
|
||||||
shape = DEF_COCK_SHAPE
|
shape = DEF_COCK_SHAPE
|
||||||
@@ -66,9 +66,9 @@
|
|||||||
|
|
||||||
if(owner)
|
if(owner)
|
||||||
if (round(length) > round(prev_length))
|
if (round(length) > round(prev_length))
|
||||||
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.</b></span>")
|
to_chat(owner, "<span class='warning'>Your [pick(GLOB.dick_nouns)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.</b></span>")
|
||||||
else if ((round(length) < round(prev_length)) && (length > 0.5))
|
else if ((round(length) < round(prev_length)) && (length > 0.5))
|
||||||
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
|
to_chat(owner, "<span class='warning'>Your [pick(GLOB.dick_nouns)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
|
||||||
icon_state = sanitize_text("penis_[shape]_[size]")
|
icon_state = sanitize_text("penis_[shape]_[size]")
|
||||||
diameter = (length * diameter_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
diameter = (length * diameter_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
||||||
|
|
||||||
@@ -89,9 +89,6 @@
|
|||||||
icon_state += "_s"
|
icon_state += "_s"
|
||||||
else
|
else
|
||||||
color = "#[owner.dna.features["cock_color"]]"
|
color = "#[owner.dna.features["cock_color"]]"
|
||||||
if(ishuman(owner))
|
|
||||||
var/mob/living/carbon/human/H = owner
|
|
||||||
H.update_genitals()
|
|
||||||
|
|
||||||
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
|
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
|
||||||
var/datum/dna/D = H.dna
|
var/datum/dna/D = H.dna
|
||||||
@@ -103,3 +100,4 @@
|
|||||||
diameter_ratio = D.features["cock_diameter_ratio"]
|
diameter_ratio = D.features["cock_diameter_ratio"]
|
||||||
shape = D.features["cock_shape"]
|
shape = D.features["cock_shape"]
|
||||||
prev_length = length
|
prev_length = length
|
||||||
|
toggle_visibility(D.features["cock_visibility"], FALSE)
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
arousal_verb = "Your balls ache a little"
|
arousal_verb = "Your balls ache a little"
|
||||||
unarousal_verb = "Your balls finally stop aching, again"
|
unarousal_verb = "Your balls finally stop aching, again"
|
||||||
linked_organ_slot = ORGAN_SLOT_PENIS
|
linked_organ_slot = ORGAN_SLOT_PENIS
|
||||||
genital_flags = CAN_MASTURBATE_WITH|MASTURBATE_LINKED_ORGAN|GENITAL_FUID_PRODUCTION
|
genital_flags = CAN_MASTURBATE_WITH|MASTURBATE_LINKED_ORGAN|GENITAL_FUID_PRODUCTION|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
|
||||||
var/size_name = "average"
|
var/size_name = "average"
|
||||||
shape = DEF_BALLS_SHAPE
|
shape = DEF_BALLS_SHAPE
|
||||||
fluid_id = /datum/reagent/consumable/semen
|
fluid_id = /datum/reagent/consumable/semen
|
||||||
@@ -53,9 +53,6 @@
|
|||||||
icon_state += "_s"
|
icon_state += "_s"
|
||||||
else
|
else
|
||||||
color = "#[owner.dna.features["balls_color"]]"
|
color = "#[owner.dna.features["balls_color"]]"
|
||||||
if(ishuman(owner))
|
|
||||||
var/mob/living/carbon/human/H = owner
|
|
||||||
H.update_genitals()
|
|
||||||
|
|
||||||
/obj/item/organ/genital/testicles/get_features(mob/living/carbon/human/H)
|
/obj/item/organ/genital/testicles/get_features(mob/living/carbon/human/H)
|
||||||
var/datum/dna/D = H.dna
|
var/datum/dna/D = H.dna
|
||||||
@@ -64,8 +61,7 @@
|
|||||||
else
|
else
|
||||||
color = "#[D.features["balls_color"]]"
|
color = "#[D.features["balls_color"]]"
|
||||||
shape = D.features["balls_shape"]
|
shape = D.features["balls_shape"]
|
||||||
if(D.features["balls_shape"] == "Hidden")
|
|
||||||
ENABLE_BITFIELD(genital_flags, GENITAL_INTERNAL)
|
|
||||||
fluid_rate = D.features["balls_cum_rate"]
|
fluid_rate = D.features["balls_cum_rate"]
|
||||||
fluid_mult = D.features["balls_cum_mult"]
|
fluid_mult = D.features["balls_cum_mult"]
|
||||||
fluid_efficiency = D.features["balls_efficiency"]
|
fluid_efficiency = D.features["balls_efficiency"]
|
||||||
|
toggle_visibility(D.features["balls_visibility"], FALSE)
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
slot = "vagina"
|
slot = "vagina"
|
||||||
size = 1 //There is only 1 size right now
|
size = 1 //There is only 1 size right now
|
||||||
shape = DEF_VAGINA_SHAPE
|
shape = DEF_VAGINA_SHAPE
|
||||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
|
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|GENITAL_UNDIES_HIDDEN
|
||||||
masturbation_verb = "finger"
|
masturbation_verb = "finger"
|
||||||
arousal_verb = "You feel wetness on your crotch"
|
arousal_verb = "You feel wetness on your crotch"
|
||||||
unarousal_verb = "You no longer feel wet"
|
unarousal_verb = "You no longer feel wet"
|
||||||
@@ -70,3 +70,4 @@
|
|||||||
else
|
else
|
||||||
color = "[D.features["vag_color"]]"
|
color = "[D.features["vag_color"]]"
|
||||||
shape = "[D.features["vag_shape"]]"
|
shape = "[D.features["vag_shape"]]"
|
||||||
|
toggle_visibility(D.features["vag_visibility"], FALSE)
|
||||||
|
|||||||
@@ -45,9 +45,3 @@
|
|||||||
else
|
else
|
||||||
if(L[slot_to_string(slot)] < DEFAULT_SLOT_AMT)
|
if(L[slot_to_string(slot)] < DEFAULT_SLOT_AMT)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1)
|
|
||||||
..()
|
|
||||||
character.give_genitals(TRUE)
|
|
||||||
if(icon_updates)
|
|
||||||
character.update_genitals()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user