Butts, nuts, n' tats. (please testmerge or merge & deploy before Halloween ball) (#15304)
* Butts * testicle fix + hidden is back * updated booba * prob bad idea actually thinking about icon states * fuck * this should be everything now * SandPoot's suggestion Co-authored-by: SandPoot <43283559+SandPoot@users.noreply.github.com> * tguify that last option * Revert "tguify that last option" This reverts commit f9d7a075e997e3d9c0a4f641db43343796cecb98. * Revert "Merge branch 'master' into cursingcitadel" This reverts commit 2998b1908a74b381857056f5ce6b34894d950c06, reversing changes made to 6fc65a28fa4f6012c70675b4cbc0299d7740912a. * Revert "Revert "Merge branch 'master' into cursingcitadel"" This reverts commit c4a2ad1a630b6376801df3e1cec88aad3d2935ea. Co-authored-by: SandPoot <43283559+SandPoot@users.noreply.github.com> Co-authored-by: Putnam3145 <putnam3145@gmail.com>
This commit is contained in:
@@ -179,6 +179,7 @@
|
||||
#define ORGAN_SLOT_VAGINA "vagina"
|
||||
#define ORGAN_SLOT_TESTICLES "testicles"
|
||||
#define ORGAN_SLOT_BREASTS "breasts"
|
||||
#define ORGAN_SLOT_BUTT "butt"
|
||||
|
||||
////organ defines
|
||||
#define STANDARD_ORGAN_THRESHOLD 100
|
||||
|
||||
@@ -6,12 +6,13 @@
|
||||
#define CIT_FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, color="#04080F")
|
||||
|
||||
//organ defines
|
||||
#define VAGINA_LAYER_INDEX 1
|
||||
#define TESTICLES_LAYER_INDEX 2
|
||||
#define GENITAL_LAYER_INDEX 3
|
||||
#define PENIS_LAYER_INDEX 4
|
||||
#define BUTT_LAYER_INDEX 1
|
||||
#define VAGINA_LAYER_INDEX 2
|
||||
#define TESTICLES_LAYER_INDEX 3
|
||||
#define GENITAL_LAYER_INDEX 4
|
||||
#define PENIS_LAYER_INDEX 5
|
||||
|
||||
#define GENITAL_LAYER_INDEX_LENGTH 4 //keep it updated with each new index added, thanks.
|
||||
#define GENITAL_LAYER_INDEX_LENGTH 5 //keep it updated with each new index added, thanks.
|
||||
|
||||
//genital flags
|
||||
#define GENITAL_BLACKLISTED (1<<0) //for genitals that shouldn't be added to GLOB.genitals_list.
|
||||
@@ -62,6 +63,9 @@
|
||||
#define MILK_RATE_MULT 1
|
||||
#define MILK_EFFICIENCY 1
|
||||
|
||||
#define BUTT_SIZE_DEF 1
|
||||
#define BUTT_SIZE_MAX 5 //butt genitals are special in that they have caps. if there's the event there's even bigger butt sprites, raise this number.
|
||||
|
||||
//visibility toggles defines to avoid errors typos code errors.
|
||||
#define GEN_VISIBLE_ALWAYS "Always visible"
|
||||
#define GEN_VISIBLE_NO_CLOTHES "Hidden by clothes"
|
||||
@@ -102,6 +106,8 @@
|
||||
#define GENITAL_EXAMINE (1<<13)
|
||||
#define VORE_EXAMINE (1<<14)
|
||||
#define TRASH_FORCEFEED (1<<15)
|
||||
#define BUTT_ENLARGEMENT (1<<16)
|
||||
//Note: reminder, if you're a coder adding more bitflags here in the event we add more horny things, the maximum is (1<<23).
|
||||
#define TOGGLES_CITADEL 0
|
||||
|
||||
//belly sound pref things
|
||||
|
||||
@@ -56,6 +56,7 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
||||
GLOBAL_LIST_EMPTY(genitals_list)
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(butt_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||
//longcat memes.
|
||||
@@ -124,6 +125,11 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_butt()
|
||||
if(getorganslot(ORGAN_SLOT_BUTT))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/is_groin_exposed(list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
@@ -157,7 +163,9 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
if(H.gender == MALE)
|
||||
H.give_genital(/obj/item/organ/genital/penis)
|
||||
H.give_genital(/obj/item/organ/genital/testicles)
|
||||
H.give_genital(/obj/item/organ/genital/butt)
|
||||
else
|
||||
H.give_genital(/obj/item/organ/genital/vagina)
|
||||
H.give_genital(/obj/item/organ/genital/womb)
|
||||
H.give_genital(/obj/item/organ/genital/breasts)
|
||||
H.give_genital(/obj/item/organ/genital/butt)
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_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/butt, GLOB.butt_shapes_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
|
||||
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
if(!GLOB.breasts_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||
if(!GLOB.butt_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/butt, GLOB.butt_shapes_list)
|
||||
if(!GLOB.ipc_screens_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/screen, GLOB.ipc_screens_list)
|
||||
if(!GLOB.ipc_antennas_list.len)
|
||||
@@ -206,10 +208,16 @@
|
||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||
"vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"has_womb" = FALSE,
|
||||
"has_butt" = FALSE,
|
||||
"butt_size" = BUTT_SIZE_DEF,
|
||||
"butt_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
|
||||
|
||||
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
|
||||
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"vag_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"butt_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = "",
|
||||
|
||||
@@ -11,6 +11,16 @@
|
||||
config_entry_value = 20
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/butt_min_size_prefs
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
max_val = BUTT_SIZE_MAX
|
||||
|
||||
/datum/config_entry/number/butt_max_size_prefs
|
||||
config_entry_value = BUTT_SIZE_MAX
|
||||
min_val = 0
|
||||
max_val = BUTT_SIZE_MAX
|
||||
|
||||
/datum/config_entry/keyed_list/safe_visibility_toggles
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
@@ -335,6 +335,12 @@
|
||||
if(!features["breasts_producing"])
|
||||
boobs.genital_flags &= ~(GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
|
||||
boobs.update()
|
||||
if(/obj/item/organ/genital/butt)
|
||||
var/obj/item/organ/genital/butt/ass = new(loc)
|
||||
if(features["has_butt"])
|
||||
ass.color = sanitize_hexcolor(features["butt_color"], 6, TRUE)
|
||||
ass.size = features["butt_size"]
|
||||
ass.update()
|
||||
else
|
||||
new built_typepath(loc)
|
||||
else
|
||||
|
||||
@@ -405,6 +405,14 @@
|
||||
for(var/i in 1 to 10)
|
||||
new /obj/item/reagent_containers/pill/breast_enlargement(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/butt_enlargement
|
||||
name = "butt enlargement pills"
|
||||
desc = "May alert security when sneaking around if enough pills are consumed due to assclapping. Be dummy thick responsibly."
|
||||
|
||||
/obj/item/storage/pill_bottle/butt_enlargement/PopulateContents()
|
||||
for(var/i in 1 to 10)
|
||||
new /obj/item/reagent_containers/pill/butt_enlargement(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/neurine
|
||||
name = "bottle of neurine pills"
|
||||
desc = "Contains pills to treat non-severe mental traumas."
|
||||
@@ -551,6 +559,9 @@
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/brute
|
||||
name = "brute trauma hypospray kit"
|
||||
|
||||
@@ -228,6 +228,8 @@
|
||||
give_genital(/obj/item/organ/genital/breasts)
|
||||
if(dna.features["has_cock"])
|
||||
give_genital(/obj/item/organ/genital/penis)
|
||||
if(dna.features["has_butt"])
|
||||
give_genital(/obj/item/organ/genital/butt)
|
||||
|
||||
/mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G)
|
||||
if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot)))
|
||||
@@ -285,6 +287,8 @@
|
||||
S = GLOB.vagina_shapes_list[G.shape]
|
||||
if(/obj/item/organ/genital/breasts)
|
||||
S = GLOB.breasts_shapes_list[G.shape]
|
||||
if(/obj/item/organ/genital/butt)
|
||||
S = GLOB.butt_shapes_list[G.shape]
|
||||
|
||||
if(!S || S.icon_state == "none")
|
||||
continue
|
||||
@@ -317,6 +321,8 @@
|
||||
genital_overlay.color = "#[dna.features["breasts_color"]]"
|
||||
if("vag_color")
|
||||
genital_overlay.color = "#[dna.features["vag_color"]]"
|
||||
if("butt_color")
|
||||
genital_overlay.color = "#[dna.features["butt_color"]]"
|
||||
|
||||
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][(dna.species.use_skintones && !dna.skin_tone_override) ? "_s" : ""]_[aroused_state]_[layertext]"
|
||||
|
||||
@@ -346,20 +352,30 @@
|
||||
var/organCheck = locate(/obj/item/organ/genital) in internal_organs
|
||||
var/breastCheck = getorganslot(ORGAN_SLOT_BREASTS)
|
||||
var/willyCheck = getorganslot(ORGAN_SLOT_PENIS)
|
||||
var/buttCheck = getorganslot(ORGAN_SLOT_BUTT)
|
||||
var/ballCheck = getorganslot(ORGAN_SLOT_TESTICLES)
|
||||
|
||||
if(organCheck == FALSE)
|
||||
if(ishuman(src) && dna.species.use_skintones)
|
||||
dna.features["genitals_use_skintone"] = TRUE
|
||||
if(src.dna.species.fixed_mut_color)
|
||||
if(dna.species.fixed_mut_color)
|
||||
dna.features["cock_color"] = "[dna.species.fixed_mut_color]"
|
||||
dna.features["breasts_color"] = "[dna.species.fixed_mut_color]"
|
||||
dna.features["butt_color"] = "[dna.species.fixed_mut_color]"
|
||||
dna.features["testicles_color"] = "[dna.species.fixed_mut_color]"
|
||||
return
|
||||
//So people who haven't set stuff up don't get rainbow surprises.
|
||||
dna.features["cock_color"] = "[dna.features["mcolor"]]"
|
||||
dna.features["breasts_color"] = "[dna.features["mcolor"]]"
|
||||
dna.features["butt_color"] = "[dna.features["mcolor"]]"
|
||||
dna.features["testicles_color"] = "[dna.features["mcolor"]]"
|
||||
else //If there's a new organ, make it the same colour.
|
||||
if(breastCheck == FALSE)
|
||||
dna.features["breasts_color"] = dna.features["cock_color"]
|
||||
else if (willyCheck == FALSE)
|
||||
dna.features["cock_color"] = dna.features["breasts_color"]
|
||||
else if (buttCheck == FALSE)
|
||||
dna.features["butt_color"] = dna.features["butt_color"]
|
||||
else if (ballCheck == FALSE)
|
||||
dna.features["testicles_color"] = dna.features["testicles_color"]
|
||||
return TRUE
|
||||
|
||||
@@ -64,6 +64,10 @@
|
||||
icon_state = "single"
|
||||
name = "Single" //Single as "single pair", for clarity.
|
||||
|
||||
/datum/sprite_accessory/testicles/hidden
|
||||
icon_state = "hidden"
|
||||
name = "Hidden" //not sure why these were missing, but I'm pretty certain people might want these.
|
||||
|
||||
//Vaginas
|
||||
/datum/sprite_accessory/vagina
|
||||
icon = 'icons/obj/genitals/vagina_onmob.dmi'
|
||||
@@ -119,3 +123,15 @@
|
||||
/datum/sprite_accessory/breasts/sextuple
|
||||
icon_state = "sextuple"
|
||||
name = "Sextuple"
|
||||
|
||||
//BUTT BE HERE
|
||||
/datum/sprite_accessory/butt
|
||||
icon = 'icons/obj/genitals/butt_onmob.dmi'
|
||||
icon_state = "butt"
|
||||
name = "butt"
|
||||
color_src = "butt_color"
|
||||
|
||||
//there literally shouldn't be any other ass types besides one because that'd be weird, this is just here to keep things consistent for the genital system.
|
||||
/datum/sprite_accessory/butt/pair
|
||||
icon_state = "pair"
|
||||
name = "Pair"
|
||||
|
||||
92
code/modules/arousal/organs/butt.dm
Normal file
92
code/modules/arousal/organs/butt.dm
Normal file
@@ -0,0 +1,92 @@
|
||||
/obj/item/organ/genital/butt
|
||||
name = "butt"
|
||||
desc = "You see a pair of asscheeks."
|
||||
icon_state = "butt"
|
||||
icon = 'icons/obj/genitals/butt.dmi'
|
||||
zone = BODY_ZONE_PRECISE_GROIN
|
||||
slot = ORGAN_SLOT_BUTT
|
||||
w_class = 3
|
||||
size = 0
|
||||
var/size_name = "nonexistent"
|
||||
shape = "Pair" //turn this into a default constant if for some inexplicable reason we get more than one butt type but I doubt it.
|
||||
genital_flags = UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
|
||||
masturbation_verb = "massage"
|
||||
var/size_cached = 0
|
||||
var/prev_size //former size value, to allow update_size() to early return should be there no significant changes.
|
||||
layer_index = BUTT_LAYER_INDEX
|
||||
|
||||
/obj/item/organ/genital/butt/on_life()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
/obj/item/organ/genital/butt/modify_size(modifier, min = -INFINITY, max = BUTT_SIZE_MAX)
|
||||
var/new_value = clamp(size_cached + modifier, min, max)
|
||||
if(new_value == size_cached)
|
||||
return
|
||||
prev_size = size_cached
|
||||
size_cached = new_value
|
||||
size = round(size_cached)
|
||||
update()
|
||||
..()
|
||||
|
||||
/obj/item/organ/genital/butt/update_size()//wah
|
||||
var/rounded_size = round(size)
|
||||
if(size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!fixed
|
||||
if(owner)
|
||||
to_chat(owner, "<span class='warning'>You feel your asscheeks shrink down to an ordinary size.</span>")
|
||||
QDEL_IN(src, 1)
|
||||
return
|
||||
|
||||
if(owner) //Because byond doesn't count from 0, I have to do this.
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/r_prev_size = round(prev_size)
|
||||
if (rounded_size > r_prev_size)
|
||||
to_chat(H, "<span class='warning'>Your buttcheeks [pick("swell up to", "flourish into", "expand into", "plump up into", "grow eagerly into", "amplify into")] a larger pair.</span>")
|
||||
else if (rounded_size < r_prev_size)
|
||||
to_chat(H, "<span class='warning'>Your buttcheeks [pick("shrink down to", "decrease into", "wobble down into", "diminish into", "deflate into", "contracts into")] a smaller pair.</span>")
|
||||
|
||||
|
||||
/obj/item/organ/genital/butt/update_appearance()
|
||||
var/lowershape = lowertext(shape)
|
||||
|
||||
//Reflect the size of dat ass on examine.
|
||||
switch(round(size))
|
||||
if(1)
|
||||
size_name = "average"
|
||||
if(2)
|
||||
size_name = "sizable"
|
||||
if(3)
|
||||
size_name = "squeezable"
|
||||
if(4)
|
||||
size_name = "hefty"
|
||||
if(5)
|
||||
size_name = pick("massive","extreme","enormous","very generous","humongous","big bubbly","dummy thicc")
|
||||
else
|
||||
size_name = "nonexistent"
|
||||
|
||||
desc = "You see a [lowershape] of [size_name] asscheeks."
|
||||
|
||||
var/icon_size = size
|
||||
icon_state = "butt_[lowershape]_[icon_size]"
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
|
||||
color = SKINTONE2HEX(H.skin_tone)
|
||||
if(!H.dna.skin_tone_override)
|
||||
icon_state += "_s"
|
||||
else
|
||||
color = "#[owner.dna.features["butt_color"]]"
|
||||
|
||||
|
||||
/obj/item/organ/genital/butt/get_features(mob/living/carbon/human/H)
|
||||
var/datum/dna/D = H.dna
|
||||
if(D.species.use_skintones && D.features["genitals_use_skintone"])
|
||||
color = SKINTONE2HEX(H.skin_tone)
|
||||
else
|
||||
color = "#[D.features["butt_color"]]"
|
||||
size = D.features["butt_size"]
|
||||
prev_size = size
|
||||
toggle_visibility(D.features["butt_visibility"], FALSE)
|
||||
@@ -130,7 +130,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", "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/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, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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
|
||||
@@ -721,6 +721,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
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 += "<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 += APPEARANCE_CATEGORY_COLUMN
|
||||
dat += "<h3>Vagina</h3>"
|
||||
@@ -751,6 +752,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<b>Breasts Visibility:</b><a style='display:block;width:100px' 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 += "</td>"
|
||||
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"])
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||
dat += "<b>Color:</b></a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: [SKINTONE2HEX(skin_tone)];'> </span>(Skin tone overriding)<br>"
|
||||
else
|
||||
dat += "<b>Color:</b></a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["butt_color"]];'> </span> <a href='?_src_=prefs;preference=butt_color;task=input'>Change</a><br>"
|
||||
dat += "<b>Butt Size:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=butt_size;task=input'>[features["butt_size"]]</a>"
|
||||
dat += "<b>Butt Visibility:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=butt_visibility;task=input'>[features["butt_visibility"]]</a>"
|
||||
dat += "</td>"
|
||||
dat += "</td>"
|
||||
dat += "</tr></table>"
|
||||
|
||||
@@ -1098,6 +1112,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h2>Other content prefs</h2>"
|
||||
dat += "<b>Breast Enlargement:</b> <a href='?_src_=prefs;preference=breast_enlargement'>[(cit_toggles & BREAST_ENLARGEMENT) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Penis Enlargement:</b> <a href='?_src_=prefs;preference=penis_enlargement'>[(cit_toggles & PENIS_ENLARGEMENT) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
dat += "<b>Butt Enlargement:</b> <a href='?_src_=prefs;preference=butt_enlargement'>[(cit_toggles & BUTT_ENLARGEMENT) ? "Allowed" : "Disallowed"]</a><br>"
|
||||
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>"
|
||||
@@ -2285,6 +2300,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("balls_shape")
|
||||
var/new_shape
|
||||
new_shape = input(user, "Testicle Shape", "Character Preference") as null|anything in GLOB.balls_shapes_list
|
||||
if(new_shape)
|
||||
features["balls_shape"] = new_shape
|
||||
|
||||
if("balls_visibility")
|
||||
var/n_vis = input(user, "Testicles Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||
if(n_vis)
|
||||
@@ -2339,6 +2360,29 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(n_vis)
|
||||
features["vag_visibility"] = n_vis
|
||||
|
||||
if("butt_color")
|
||||
var/new_buttcolor = input(user, "Butt color:", "Character Preference","#"+features["butt_color"]) as color|null
|
||||
if(new_buttcolor)
|
||||
var/temp_hsv = RGBtoHSV(new_buttcolor)
|
||||
if(new_buttcolor == "#000000")
|
||||
features["butt_color"] = pref_species.default_color
|
||||
else if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3])
|
||||
features["butt_color"] = sanitize_hexcolor(new_buttcolor, 6)
|
||||
else
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("butt_size")
|
||||
var/min_B = CONFIG_GET(number/butt_min_size_prefs)
|
||||
var/max_B = CONFIG_GET(number/butt_max_size_prefs)
|
||||
var/new_length = input(user, "Butt size:\n([min_B]-[max_B])", "Character Preference") as num|null
|
||||
if(new_length)
|
||||
features["butt_size"] = clamp(round(new_length), min_B, max_B)
|
||||
|
||||
if("butt_visibility")
|
||||
var/n_vis = input(user, "Butt Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||
if(n_vis)
|
||||
features["butt_visibility"] = n_vis
|
||||
|
||||
if("ooccolor")
|
||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null
|
||||
if(new_ooccolor)
|
||||
@@ -2597,6 +2641,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["has_womb"] = FALSE
|
||||
if("has_womb")
|
||||
features["has_womb"] = !features["has_womb"]
|
||||
if("has_butt")
|
||||
features["has_butt"] = !features["has_butt"]
|
||||
if("widescreenpref")
|
||||
widescreenpref = !widescreenpref
|
||||
user.client.view_size.setDefault(getScreenSize(widescreenpref))
|
||||
@@ -2861,6 +2907,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("penis_enlargement")
|
||||
cit_toggles ^= PENIS_ENLARGEMENT
|
||||
|
||||
if("butt_enlargement")
|
||||
cit_toggles ^= BUTT_ENLARGEMENT
|
||||
|
||||
if("feminization")
|
||||
cit_toggles ^= FORCED_FEM
|
||||
|
||||
|
||||
@@ -641,7 +641,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", "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, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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)
|
||||
@@ -820,6 +820,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_vag_visibility"] >> features["vag_visibility"]
|
||||
//womb features
|
||||
S["feature_has_womb"] >> features["has_womb"]
|
||||
//butt features
|
||||
S["feature_has_butt"] >> features["has_butt"]
|
||||
S["feature_butt_color"] >> features["butt_color"]
|
||||
S["feature_butt_size"] >> features["butt_size"]
|
||||
S["feature_butt_visibility"] >> features["butt_visibility"]
|
||||
|
||||
//flavor text
|
||||
//Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts:
|
||||
@@ -942,6 +947,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
var/static/max_D
|
||||
if(!max_D)
|
||||
max_D = CONFIG_GET(number/penis_max_inches_prefs)
|
||||
var/static/min_B
|
||||
if(!min_B)
|
||||
min_B = CONFIG_GET(number/butt_min_size_prefs)
|
||||
var/static/max_B
|
||||
if(!max_B)
|
||||
max_B = CONFIG_GET(number/butt_max_size_prefs)
|
||||
|
||||
var/static/safe_visibilities
|
||||
if(!safe_visibilities)
|
||||
var/list/L = CONFIG_GET(keyed_list/safe_visibility_toggles)
|
||||
@@ -949,6 +961,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
features["breasts_size"] = sanitize_inlist(features["breasts_size"], B_sizes, BREASTS_SIZE_DEF)
|
||||
features["cock_length"] = sanitize_integer(features["cock_length"], min_D, max_D, COCK_SIZE_DEF)
|
||||
features["butt_size"] = sanitize_integer(features["butt_size"], min_B, max_B, BUTT_SIZE_DEF)
|
||||
features["breasts_shape"] = sanitize_inlist(features["breasts_shape"], GLOB.breasts_shapes_list, DEF_BREASTS_SHAPE)
|
||||
features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, DEF_COCK_SHAPE)
|
||||
features["balls_shape"] = sanitize_inlist(features["balls_shape"], GLOB.balls_shapes_list, DEF_BALLS_SHAPE)
|
||||
@@ -961,6 +974,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
features["cock_visibility"] = sanitize_inlist(features["cock_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
|
||||
features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
|
||||
features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
|
||||
features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
|
||||
|
||||
custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default")
|
||||
custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default")
|
||||
@@ -1124,6 +1138,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
WRITE_FILE(S["feature_has_womb"], features["has_womb"])
|
||||
|
||||
WRITE_FILE(S["feature_has_butt"], features["has_butt"])
|
||||
WRITE_FILE(S["feature_butt_color"], features["butt_color"])
|
||||
WRITE_FILE(S["feature_butt_size"], features["butt_size"])
|
||||
WRITE_FILE(S["feature_butt_visibility"], features["butt_visibility"])
|
||||
|
||||
WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"])
|
||||
|
||||
WRITE_FILE(S["feature_color_scheme"], features["color_scheme"])
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/datum/action/innate/ability/humanoid_customization/proc/change_form()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color", "Eye Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color", "Eye Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Butt Size", "Cancel")
|
||||
|
||||
if(select_alteration == "Body Color")
|
||||
var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null
|
||||
@@ -227,5 +227,17 @@
|
||||
H.apply_overlay()
|
||||
H.give_genital(/obj/item/organ/genital/breasts)
|
||||
|
||||
else if (select_alteration == "Butt Size")
|
||||
for(var/obj/item/organ/genital/butt/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/min_B = CONFIG_GET(number/butt_min_size_prefs)
|
||||
var/max_B = CONFIG_GET(number/butt_max_size_prefs)
|
||||
var/new_length = input(owner, "Butt size:\n([min_B]-[max_B])", "Genital Alteration") as num|null
|
||||
if(new_length)
|
||||
H.dna.features["butt_size"] = clamp(round(new_length), min_B, max_B)
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_genital(/obj/item/organ/genital/butt)
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
@@ -103,6 +103,11 @@
|
||||
icon_state = "hypovial-pink"
|
||||
list_reagents = list(/datum/reagent/fermi/PEsmaller_hypo = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/buttreduction
|
||||
name = "pink hypovial (butt treatment)"
|
||||
icon_state = "hypovial-pink"
|
||||
list_reagents = list(/datum/reagent/fermi/AEsmaller_hypo = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/CMO
|
||||
name = "deluxe hypovial"
|
||||
icon_state = "hypoviallarge-cmos"
|
||||
|
||||
@@ -265,3 +265,7 @@
|
||||
/obj/item/reagent_containers/pill/breast_enlargement
|
||||
name = "breast enlargement pill"
|
||||
list_reagents = list(/datum/reagent/fermi/breast_enlarger = 10)
|
||||
|
||||
/obj/item/reagent_containers/pill/butt_enlargement
|
||||
name = "butt enlargement pill"
|
||||
list_reagents = list(/datum/reagent/fermi/butt_enlarger = 10)
|
||||
|
||||
@@ -212,3 +212,13 @@
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/organ/genital/breasts
|
||||
category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
|
||||
|
||||
/datum/design/butt
|
||||
name = "Butt"
|
||||
id = "butt"
|
||||
research_icon_state = "butt_pair_5_s"
|
||||
research_icon = 'icons/obj/genitals/butt.dmi'
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/organ/genital/butt
|
||||
category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
/obj/item/autosurgeon/testicles = 3,
|
||||
/obj/item/storage/pill_bottle/penis_enlargement = 10,
|
||||
/obj/item/storage/pill_bottle/breast_enlargement = 10,
|
||||
/obj/item/storage/pill_bottle/butt_enlargement = 10,
|
||||
/obj/item/reagent_containers/glass/bottle/crocin = 10,
|
||||
/obj/item/reagent_containers/glass/bottle/camphor = 5,
|
||||
/obj/item/storage/daki = 4
|
||||
|
||||
@@ -12,6 +12,10 @@ BREASTS_CUPS_PREFS h
|
||||
PENIS_MIN_INCHES_PREFS 1
|
||||
PENIS_MAX_INCHES_PREFS 24
|
||||
|
||||
## Minimum and maximum limits for butt size from the character creation menu. If there's bigger butt sizes out there, change the max accordingly.
|
||||
BUTT_MIN_SIZE_PREFS 1
|
||||
BUTT_MAX_SIZE_PREFS 5
|
||||
|
||||
## Body size configs, the feature will be disabled if both min and max have the same value.
|
||||
BODY_SIZE_MIN 0.9
|
||||
BODY_SIZE_MAX 1.25
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 6.2 KiB |
BIN
icons/obj/genitals/butt.dmi
Normal file
BIN
icons/obj/genitals/butt.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 828 B |
BIN
icons/obj/genitals/butt_onmob.dmi
Normal file
BIN
icons/obj/genitals/butt_onmob.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 561 B After Width: | Height: | Size: 778 B |
@@ -37,7 +37,7 @@
|
||||
if(volume >= 15) //To prevent monkey breast farms
|
||||
var/turf/T = get_turf(M)
|
||||
var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(T)
|
||||
M.visible_message("<span class='warning'>A pair of breasts suddenly fly out of the [M]!</b></span>")
|
||||
M.visible_message("<span class='warning'>A pair of breasts suddenly fly out of [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
@@ -175,7 +175,7 @@
|
||||
if(volume >= 15) //to prevent monkey penis farms
|
||||
var/turf/T = get_turf(M)
|
||||
var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(T)
|
||||
M.visible_message("<span class='warning'>A penis suddenly flies out of the [M]!</b></span>")
|
||||
M.visible_message("<span class='warning'>A penis suddenly flies out of [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
@@ -283,3 +283,87 @@
|
||||
else if(P.length < optimal_size)
|
||||
P.modify_size(0.1, 0, optimal_size)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
///Ass enhancer
|
||||
/datum/reagent/fermi/butt_enlarger
|
||||
name = "Denbu Tincture" //on Hyper it was 'Denbu Draft' but this makes it more consistent with the rectifying chemical down below.
|
||||
description = "A mixture of natural vitamins and valentines plant extract, causing butt enlargement in humanoids."
|
||||
color = "#e8ff1b"
|
||||
taste_description = "butter with a sweet aftertaste" //pass me the butter, OM NOM
|
||||
overdose_threshold = 17
|
||||
can_synth = FALSE
|
||||
|
||||
/datum/reagent/fermi/butt_enlarger/on_mob_metabolize(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(!ishuman(M)) //leaving the monkey feature for those desperate for goon level comedy.
|
||||
if(volume >= 15) //to prevent monkey butt farms
|
||||
var/turf/T = get_turf(M)
|
||||
var/obj/item/organ/genital/butt/B = new /obj/item/organ/genital/butt(T)
|
||||
M.visible_message("<span class='warning'>An ass suddenly flies out of [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
B.throw_at(T2, 8, 1)
|
||||
M.reagents.del_reagent(type)
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.getorganslot(ORGAN_SLOT_BUTT) && H.emergent_genital_call())
|
||||
H.genital_override = TRUE
|
||||
|
||||
/datum/reagent/fermi/butt_enlarger/on_mob_life(mob/living/carbon/M) //Increases butt size
|
||||
if(!ishuman(M))
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!(H.client?.prefs.cit_toggles & BUTT_ENLARGEMENT))
|
||||
return ..()
|
||||
var/obj/item/organ/genital/butt/B = M.getorganslot(ORGAN_SLOT_BUTT)
|
||||
if(!B) //If they don't have a butt. Give them one!
|
||||
var/obj/item/organ/genital/butt/nB = new
|
||||
nB.Insert(M)
|
||||
if(nB)
|
||||
if(M.dna.species.use_skintones && M.dna.features["genitals_use_skintone"])
|
||||
nB.color = SKINTONE2HEX(H.skin_tone)
|
||||
else if(M.dna.features["butt_color"])
|
||||
nB.color = "#[M.dna.features["butt_color"]]"
|
||||
else
|
||||
nB.color = SKINTONE2HEX(H.skin_tone)
|
||||
nB.size = 1
|
||||
to_chat(M, "<span class='warning'>Your ass cheeks bulge outwards and feel more plush.</b></span>")
|
||||
M.reagents.remove_reagent(type, 5)
|
||||
B = nB
|
||||
//If they have, increase size.
|
||||
if(B.size_cached < BUTT_SIZE_MAX) //just in case
|
||||
B.modify_size(0.05)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/AEsmaller_hypo //"BEsmaller" already exists so using "AE" instead, A is for ass.
|
||||
name = "Rectify tincture"
|
||||
color = "#e8ff1b"
|
||||
taste_description = "butter"
|
||||
description = "A medicine used to treat organomegaly in a patient's ass."
|
||||
metabolization_rate = 0.5
|
||||
can_synth = TRUE
|
||||
|
||||
/datum/reagent/fermi/AEsmaller_hypo/on_mob_metabolize(mob/living/M)
|
||||
. = ..()
|
||||
if(!ishuman(M))
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.getorganslot(ORGAN_SLOT_BUTT) && H.dna.features["has_butt"])
|
||||
H.give_genital(/obj/item/organ/genital/butt)
|
||||
|
||||
/datum/reagent/fermi/AEsmaller_hypo/on_mob_life(mob/living/carbon/M)
|
||||
var/obj/item/organ/genital/butt/B = M.getorganslot(ORGAN_SLOT_BUTT)
|
||||
if(!B)
|
||||
return ..()
|
||||
var/optimal_size = M.dna.features["butt_size"]
|
||||
if(!optimal_size)//Fast fix for those who don't want it.
|
||||
B.modify_size(-0.2)
|
||||
else if(B.size > optimal_size)
|
||||
B.modify_size(-0.1, optimal_size)
|
||||
else if(B.size < optimal_size)
|
||||
B.modify_size(0.1, 0, optimal_size)
|
||||
return ..()
|
||||
|
||||
@@ -1819,6 +1819,7 @@
|
||||
#include "code\modules\arousal\genitals.dm"
|
||||
#include "code\modules\arousal\genitals_sprite_accessories.dm"
|
||||
#include "code\modules\arousal\organs\breasts.dm"
|
||||
#include "code\modules\arousal\organs\butt.dm"
|
||||
#include "code\modules\arousal\organs\penis.dm"
|
||||
#include "code\modules\arousal\organs\testicles.dm"
|
||||
#include "code\modules\arousal\organs\vagina.dm"
|
||||
|
||||
Reference in New Issue
Block a user