From 0054c5b276ee03dca82933b4bb7f462bfca0919c Mon Sep 17 00:00:00 2001 From: haha26 Date: Wed, 4 Aug 2021 04:03:25 -0400 Subject: [PATCH] Rework genital layering Creates a new mutable icon for the ass to allow it to overlap hands from one direction, and be occluded by them from another. Butts DMI changed to reflect two sets of sprites, with directions split between them. Side-profiles trimmed to prevent it from occluding wrists. TL;DR: Quote sprited the Whole Ass so I'm going to Use the Whole Ass. --- hyperstation/icons/obj/genitals/butt.dmi | Bin 2528 -> 2714 bytes .../code/modules/arousal/organs/genitals.dm | 39 ++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/hyperstation/icons/obj/genitals/butt.dmi b/hyperstation/icons/obj/genitals/butt.dmi index 08e60ea537a81387adc836fd9f84b79de9058520..e4b8f5c6b08306d738b86d26236e91212bb1c2b0 100644 GIT binary patch literal 2714 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 TjNG~O0028%xJ}imD-Zt!17IZx delta 2494 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 diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index d832c28a..98a5232c 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -395,6 +395,7 @@ dna.features["cock_color"] = dna.features["breasts_color"] return +//called every time players sprite changes, ie, moves item in hands or equiped item. /datum/species/proc/handle_genitals(mob/living/carbon/human/H)//more like handle sadness if(!H)//no args CRASH("H = null") @@ -450,6 +451,10 @@ continue var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer) + + //creates another icon with mutable appearance, allows different layering depending on direction + var/mutable_appearance/genital_overlay_directional = mutable_appearance(S.icon, layer = -layer) + //genitals bigger than 11 inches / g-cup will appear over clothing, if accepted //otherwise, appear under clothing if(G.slot == "penis" || G.slot == "testicles") @@ -469,17 +474,28 @@ genital_overlay.icon_state = "belly_[size]" colourcode = "belly_color" - if(G.slot == "anus") //we have a different size system + //sizecheck added to prevent rendering blank icons + if(G.slot == "anus" && G.size > 0) //we have a different size system + genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi' - genital_overlay.icon_state = "butt_[size]" + genital_overlay.icon_state = "butt_[size]_OTHER" genital_overlay.layer = -ID_LAYER //in front of suit, behind bellies. + + //creates directional layering by rendering twice. North has higher layer priority to occlude hands. + genital_overlay_directional.icon = 'hyperstation/icons/obj/genitals/butt.dmi' + genital_overlay_directional.icon_state = "butt_[size]_NORTH" + genital_overlay_directional.layer = -NECK_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]" + genital_overlay.icon_state = "butt_[size]_OTHER" + genital_overlay_directional.icon_state = "butt_[size]_NORTH" else genital_overlay.color = "#[H.dna.features["mcolor"]]" - genital_overlay.icon_state = "butt_[size]_m" + genital_overlay.icon_state = "butt_[size]_OTHER_m" + genital_overlay_directional.icon_state = "butt_[size]_NORTH_m" + if(S.center) genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y) @@ -507,6 +523,21 @@ standing += genital_overlay + //check whether or not there is a directional overlay + if(genital_overlay_directional) + if(S.center) + genital_overlay_directional = center_image(genital_overlay_directional, S.dimension_x, S.dimension_y) + + if(use_skintones && H.dna.features["genitals_use_skintone"]) + genital_overlay_directional.color = "#[skintone2hex(H.skin_tone)]" + if (colourtint) + genital_overlay_directional.color = "#[colourtint]" + else + genital_overlay_directional.color = "#[H.dna.features["butt_color"]]" + + standing += genital_overlay_directional + + if(LAZYLEN(standing)) H.overlays_standing[layer] = standing.Copy() standing = list()