Merge branch 'master' into departmentalclothes

This commit is contained in:
faaaay
2021-07-20 17:16:43 +01:00
committed by GitHub
76 changed files with 689 additions and 203 deletions
@@ -30,24 +30,16 @@
"<span class='info'>You kneel[M == user ? null : " next to [M]"] and begin a prayer to [deity_name].</span>")
praying = TRUE
if(do_after(user, 100, target = M))
if(do_after(user, 20, target = M))
if(istype(M, /mob/living/carbon/human)) // This probably should not work on catpeople. They're unholy abominations.
var/mob/living/carbon/human/target = M
if(iscultist(M) || is_servant_of_ratvar(M)) //ripped from holywater code.
if(iscultist(M))
SSticker.mode.remove_cultist(M.mind, FALSE, TRUE)
else if(is_servant_of_ratvar(M))
remove_servant_of_ratvar(M)
M.reagents.add_reagent("holywater", 5)
to_chat(target, "<span class='notice'>[user]'s prayer to [deity_name] has eased your pain!</span>")
target.adjustToxLoss(-5, TRUE, TRUE)
target.adjustOxyLoss(-5)
target.adjustBruteLoss(-5)
target.adjustFireLoss(-5)
praying = FALSE
else
to_chat(user, "<span class='notice'>Your prayer to [deity_name] was interrupted.</span>")
praying = FALSE
@@ -275,7 +275,7 @@
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/Initialize()
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/IsReflect()
return FALSE
@@ -78,6 +78,9 @@
amt_nude++
if(getorganslot("vagina"))
amt_nude++
if(is_butt_exposed())
if(getorganslot("anus"))
amt_nude++
if(amt_nude)
var/watchers = 0
for(var/mob/_M in view(world.view, src))
@@ -321,7 +324,7 @@
src.visible_message("<span class='love'>[src] orgasms with [p_their()] [G.name]!</span>", \
"<span class='userlove'>You climax with your [G.name].</span>", \
"<span class='userlove'>You climax using your [G.name].</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
@@ -522,10 +525,9 @@
var/list/worn_stuff = get_equipped_items()
for(var/obj/item/organ/genital/G in T.internal_organs)
if(G.can_climax) //filter out what you can't masturbate with
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
if(!G.dontlist)
genitals_list += G
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
ret_organ = input(src, "", "Genitals", null) as null|obj in genitals_list
return ret_organ
@@ -0,0 +1,36 @@
/obj/item/organ/genital/anus
name = "anus"
desc = "You see a butt."
icon_state = "butt"
icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
zone = "anus"
slot = "anus"
w_class = 3
size = 0
var/statuscheck = FALSE
shape = "Pair"
masturbation_verb = "massage"
can_climax = FALSE
/obj/item/organ/genital/anus/on_life()
if(QDELETED(src))
return
if(!owner)
return
/obj/item/organ/genital/anus/update_appearance()
var/string
if(owner)
var/mob/living/carbon/human/H = owner
color = "#[skintone2hex(H.skin_tone)]"
if(ishuman(owner))
icon_state = sanitize_text(string)
H.update_genitals()
icon_state = sanitize_text(string)
@@ -25,6 +25,7 @@
var/mode = "clothes"
var/obj/item/equipment //for fun stuff that goes on the gentials/maybe rings down the line
var/dontlist = FALSE
var/nochange = FALSE //stops people changing visablity.
/obj/item/organ/genital/Initialize()
. = ..()
@@ -67,6 +68,8 @@
return owner.is_chest_exposed()
if("groin")
return owner.is_groin_exposed()
if("anus")
return owner.is_butt_exposed()
return FALSE
@@ -150,6 +153,8 @@
if (NOGENITALS in dna.species.species_traits)
return
//Order should be very important. FIRST vagina, THEN testicles, THEN penis, as this affects the order they are rendered in.
if(dna.features["has_anus"])
give_anus()
if(dna.features["has_vag"])
give_vagina()
if(dna.features["has_womb"])
@@ -239,6 +244,20 @@
if(dna.features["inflatable_belly"]) //autohide bellies if they have the option ticked.
B.inflatable = TRUE
/mob/living/carbon/human/proc/give_anus()
if(!dna)
return FALSE
if(NOGENITALS in dna.species.species_traits)
return FALSE
if(!getorganslot("anus"))
var/obj/item/organ/genital/anus/A = new
if(dna.features["butt_size"])
A.size = dna.features["butt_size"]
A.Insert(src)
if(A)
A.color = "#[skintone2hex(skin_tone)]"
A.update()
/mob/living/carbon/human/proc/give_breasts()
@@ -426,6 +445,8 @@
S = GLOB.breasts_shapes_list[G.shape]
if(/obj/item/organ/genital/belly)
S = GLOB.breasts_shapes_list[G.shape]
if(/obj/item/organ/genital/anus)
S = GLOB.breasts_shapes_list[G.shape]
if(!S || S.icon_state == "none")
continue
@@ -444,11 +465,24 @@
//Get the icon
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
colourcode = S.color_src
if(G.slot == "belly") //we have a different size system
genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
genital_overlay.icon_state = "belly_[size]"
colourcode = "belly_color"
if(G.slot == "anus") //we have a different size system
genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi'
genital_overlay.icon_state = "butt_[size]"
genital_overlay.layer = -FRONT_MUTATIONS_LAYER
colourcode = "butt_color"
if(use_skintones) //butts are forced a colour, either skin tones, or main colour. how ever, mutants use a darker version, because of their body tone.
genital_overlay.color = "#[skintone2hex(H.skin_tone)]"
genital_overlay.icon_state = "butt_[size]"
else
genital_overlay.color = "#[H.dna.features["mcolor"]]"
genital_overlay.icon_state = "butt_[size]_m"
if(S.center)
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
@@ -471,6 +505,7 @@
if("belly_color")
genital_overlay.color = "#[H.dna.features["belly_color"]]"
standing += genital_overlay
if(LAZYLEN(standing))
@@ -136,7 +136,7 @@
icon_state = "gaping"
name = "Gaping"
//BREASTS BE HERE
//BELLY BE HERE
/datum/sprite_accessory/belly
icon = 'hyperstation/icons/obj/genitals/belly.dmi'
icon_state = "belly"
@@ -145,6 +145,15 @@
color_src = "belly_color"
locked = 0
//BUTT BE HERE
/datum/sprite_accessory/anus
icon = 'hyperstation/icons/obj/genitals/butt.dmi'
icon_state = "butt"
name = "butt"
gender_specific = 0
color_src = "butt_color"
locked = 0
//BREASTS BE HERE
/datum/sprite_accessory/breasts
icon = 'modular_citadel/icons/obj/genitals/breasts_onmob.dmi'
@@ -63,6 +63,8 @@
WRITE_FILE(S["feature_has_sheath"], features["sheath_color"])
//belly feature
WRITE_FILE(S["feature_belly_size"], features["belly_size"])
//butt feature
WRITE_FILE(S["feature_butt_size"], features["butt_size"])
//balls features
WRITE_FILE(S["feature_has_balls"], features["has_balls"])
WRITE_FILE(S["feature_balls_color"], features["balls_color"])
@@ -96,6 +98,8 @@
WRITE_FILE(S["feature_belly_color"], features["belly_color"])
WRITE_FILE(S["feature_hide_belly"], features["hide_belly"])
WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"])
//anus
WRITE_FILE(S["feature_has_anus"], features["has_anus"])
//gear loadout
if(islist(chosen_gear))
@@ -144,6 +144,7 @@
primary_color = "#FFFFFF" //RGB in hexcode
secondary_color = "#8CC6FF"
body_parts_covered = GROIN
do_not_cover_butt = TRUE
/obj/item/clothing/under/polychromic/bottomless
name = "polychromic bottomless shirt"
@@ -177,6 +178,7 @@
primary_color = "#808080" //RGB in hexcode
secondary_color = "#FFFFFF"
body_parts_covered = CHEST|GROIN
do_not_cover_butt = TRUE
/obj/item/clothing/under/polychromic/stripper
name = "polychromic stripper outfit"
@@ -188,6 +190,7 @@
primary_color = "#808080" //RGB in hexcode
secondary_color = "#FFFFFF"
body_parts_covered = CHEST|GROIN
do_not_cover_butt = TRUE
/obj/item/clothing/under/polychromic/bulge
name = "polychromic voluminous thong"
@@ -199,6 +202,7 @@
primary_color = "#808080" //RGB in hexcode
secondary_color = "#FF3535"
body_parts_covered = GROIN
do_not_cover_butt = TRUE
/obj/item/clothing/under/polychromic/shortsbra
name = "Kromatic Shorts and Top"
@@ -231,4 +235,5 @@
primary_color = "#010052" //RGB in hexcode
secondary_color = "#eb7a7a"
tertiary_color = "#ffffff"
body_parts_covered = CHEST|GROIN
body_parts_covered = CHEST|GROIN
do_not_cover_butt = TRUE