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:
BlueWildrose
2022-03-30 20:06:00 -07:00
committed by GitHub
parent 9d6ec35125
commit 3687361ba5
25 changed files with 375 additions and 11 deletions
+17 -1
View File
@@ -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
View 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)