From 818ec19561278b6294531912c3ad8afd4b5787f5 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 04:44:57 -0500 Subject: [PATCH] Working as intended, fixed a few other missing sprites Started groundwork for multi-breasts and hidden balls. --- code/__HELPERS/_cit_helpers.dm | 2 + code/__HELPERS/global_lists.dm | 8 ++- code/__HELPERS/mobs.dm | 3 +- code/modules/client/preferences.dm | 1 + code/modules/client/preferences_savefile.dm | 1 + .../code/modules/arousal/organs/breasts.dm | 11 ++-- .../code/modules/arousal/organs/eggsack.dm | 1 - .../code/modules/arousal/organs/genitals.dm | 49 +++++++++--------- .../organs/genitals_sprite_accessories.dm | 18 ++++++- .../code/modules/arousal/organs/penis.dm | 5 +- .../code/modules/arousal/organs/testicles.dm | 45 ++++++++-------- .../code/modules/arousal/organs/womb.dm | 2 - .../modules/client/preferences_savefile.dm | 1 + .../icons/obj/genitals/breasts_onmob.dmi | Bin 1593 -> 1401 bytes modular_citadel/icons/obj/genitals/penis.dmi | Bin 3200 -> 2624 bytes .../icons/obj/genitals/penis_onmob.dmi | Bin 4855 -> 3880 bytes .../icons/obj/genitals/testicles.dmi | Bin 0 -> 1116 bytes .../icons/obj/genitals/testicles_onmob.dmi | Bin 0 -> 762 bytes .../icons/obj/genitals/vagina_onmob.dmi | Bin 1171 -> 1076 bytes 19 files changed, 87 insertions(+), 60 deletions(-) create mode 100644 modular_citadel/icons/obj/genitals/testicles.dmi create mode 100644 modular_citadel/icons/obj/genitals/testicles_onmob.dmi diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index e21bee2e36..668b151b6e 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -59,8 +59,10 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list) GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes. GLOBAL_LIST_EMPTY(balls_shapes_list) +GLOBAL_LIST_EMPTY(balls_shapes_icons) GLOBAL_LIST_EMPTY(breasts_size_list) GLOBAL_LIST_EMPTY(breasts_shapes_list) +GLOBAL_LIST_EMPTY(breasts_shapes_icons) 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 GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft")) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f6ef08fe0d..3f3322c3ec 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -46,7 +46,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list) //genitals init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) - for(var/K in GLOB.cock_shapes_list) var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K] GLOB.cock_shapes_icons[K] = value.icon_state @@ -54,6 +53,13 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list) GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. + for(var/K in GLOB.breast_shapes_list) + var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K] + GLOB.breasts_shapes_icons[K] = value.icon_state + init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list) + for(var/K in GLOB.balls_shapes_list) + var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K] + GLOB.balls_shapes_icons[K] = value.icon_state //END OF CIT CHANGES //Species diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 8eb8d45cba..51c814a5f9 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -170,6 +170,7 @@ "balls_amount" = 2, "balls_sack_size" = BALLS_SACK_SIZE_DEF, "balls_size" = BALLS_SIZE_DEF, + "balls_shape" = "Pair", "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, @@ -187,7 +188,7 @@ "has_breasts" = FALSE, "breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "breasts_size" = pick(GLOB.breasts_size_list), - "breasts_shape" = pick(GLOB.breasts_shapes_list), + "breasts_shape" = "Pair", "breasts_fluid" = "milk", "has_vag" = FALSE, "vag_shape" = pick(GLOB.vagina_shapes_list), diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d80f56c8c8..91e7b2a5bc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -117,6 +117,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "balls_color" = "fff", "balls_amount" = 2, "balls_sack_size" = BALLS_SACK_SIZE_DEF, + "balls_shape" = "Pair", "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 39b44f1ab9..c2675ba867 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -330,6 +330,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_has_balls"] >> features["has_balls"] S["feature_balls_color"] >> features["balls_color"] S["feature_balls_size"] >> features["balls_size"] + S["feature_balls_shape"] >> features["balls_shape"] S["feature_balls_sack_size"] >> features["balls_sack_size"] S["feature_balls_fluid"] >> features["balls_fluid"] //breasts features diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 7d482ec3a0..3f8e3fc6f1 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -5,7 +5,6 @@ icon = 'modular_citadel/icons/obj/genitals/breasts.dmi' zone = "chest" slot = "breasts" - w_class = 3 size = BREASTS_SIZE_DEF fluid_id = "milk" var/amount = 2 @@ -14,7 +13,7 @@ can_masturbate_with = TRUE masturbation_verb = "massage" can_climax = TRUE - fluid_transfer_factor =0.5 + fluid_transfer_factor = 0.5 /obj/item/organ/genital/breasts/Initialize() . = ..() @@ -40,6 +39,10 @@ switch(lowershape) if("pair") desc = "You see a pair of breasts." + if("quad") + desc = "You see two pairs of breast, one just under the other." + if("six") + desc = "You see three pairs of breasts, running from their chest to their belly." else desc = "You see some breasts, they seem to be quite exotic." if (size) @@ -54,10 +57,10 @@ 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)]" - string = "breasts_[lowertext(shape)]_[size]-s" + string = "breasts_[GLOB.breasts_shapes_icons[lowertext(shape)]]_[size]-s" else color = "#[owner.dna.features["breasts_color"]]" - string = "breasts_[lowertext(shape)]_[size]" + string = "breasts_[GLOB.breasts_shapes_icons[lowertext(shape)]]_[size]" if(ishuman(owner)) var/mob/living/carbon/human/H = owner icon_state = sanitize_text(string) diff --git a/modular_citadel/code/modules/arousal/organs/eggsack.dm b/modular_citadel/code/modules/arousal/organs/eggsack.dm index 27104cd36a..402d246e40 100644 --- a/modular_citadel/code/modules/arousal/organs/eggsack.dm +++ b/modular_citadel/code/modules/arousal/organs/eggsack.dm @@ -6,7 +6,6 @@ zone = "groin" slot = "testicles" color = null //don't use the /genital color since it already is colored - w_class = 3 internal = TRUE var/egg_girth = EGG_GIRTH_DEF var/cum_mult = CUM_RATE_MULT diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 592d1e2f33..460c6b4188 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -1,25 +1,26 @@ /obj/item/organ/genital color = "#fcccb3" - var/shape = "human" - var/sensitivity = 1 - var/list/genital_flags = list() - var/can_masturbate_with = FALSE - var/masturbation_verb = "masturbate" - var/can_climax = FALSE - var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this? - var/size = 2 //can vary between num or text, just used in icon_state strings - var/fluid_id = null - var/fluid_max_volume = 50 - var/fluid_efficiency = 1 - var/fluid_rate = 1 - var/fluid_mult = 1 - var/producing = FALSE - var/aroused_state = FALSE //Boolean used in icon_state strings - var/aroused_amount = 50 //This is a num from 0 to 100 for arousal percentage for when to use arousal state icons. + w_class = WEIGHT_CLASS_NORMAL + var/shape = "human" + var/sensitivity = AROUSAL_START_VALUE + var/list/genital_flags = list() + var/can_masturbate_with = FALSE + var/masturbation_verb = "masturbate" + var/can_climax = FALSE + var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this? + var/size = 2 //can vary between num or text, just used in icon_state strings + var/fluid_id = null + var/fluid_max_volume = 50 + var/fluid_efficiency = 1 + var/fluid_rate = 1 + var/fluid_mult = 1 + var/producing = FALSE + var/aroused_state = FALSE //Boolean used in icon_state strings + var/aroused_amount = 50 //This is a num from 0 to 100 for arousal percentage for when to use arousal state icons. var/obj/item/organ/genital/linked_organ - var/through_clothes = FALSE - var/internal = FALSE - var/hidden = FALSE + var/through_clothes = FALSE + var/internal = FALSE + var/hidden = FALSE /obj/item/organ/genital/Initialize() . = ..() @@ -188,7 +189,11 @@ T.color = "#[dna.features["balls_color"]]" T.size = dna.features["balls_size"] T.sack_size = dna.features["balls_sack_size"] - T.shape = "single" + T.shape = dna.features["balls_shape"] + if(dna.features["balls_shape"] == "Hidden") + T.internal = TRUE + else + T.internal = FALSE T.fluid_id = dna.features["balls_fluid"] T.fluid_rate = dna.features["balls_cum_rate"] T.fluid_mult = dna.features["balls_cum_mult"] @@ -298,9 +303,7 @@ for(var/obj/item/organ/O in H.internal_organs) if(isgenital(O)) var/obj/item/organ/genital/G = O - to_chat(world, "checking [G] for exposure") if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes - to_chat(world, "[G] is [G.is_exposed() ? "true" : "false"]") genitals_to_add += H.getorganslot(G.slot) //Now we added all genitals that aren't internal and should be rendered @@ -311,7 +314,6 @@ var/datum/sprite_accessory/S size = G.size aroused_state = G.aroused_state - to_chat(world, "switching [G.type] for sprite loading") switch(G.type) if(/obj/item/organ/genital/penis) S = GLOB.cock_shapes_list[G.shape] @@ -327,7 +329,6 @@ var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer) genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]" - to_chat(world, "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext] is icon state") if(S.center) genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y) diff --git a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm index eaf493482f..b913a90fb6 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm @@ -58,15 +58,20 @@ //Testicles //These ones aren't inert /datum/sprite_accessory/testicles - icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi' + icon = 'modular_citadel/icons/obj/genitals/testicles_onmob.dmi' icon_state = "testicle" name = "testicle" //the preview name of the accessory color_src = "balls_color" locked = 0 +/datum/sprite_accessory/testicles/hidden + icon_state = "hidden" + name = "Hidden" + alt_aroused = TRUE + /datum/sprite_accessory/testicles/single icon_state = "single" - name = "single" + name = "Single" alt_aroused = TRUE //Vaginas @@ -120,6 +125,15 @@ name = "Pair" alt_aroused = TRUE +/datum/sprite_accessory/breasts/quad + icon_state = "quad" + name = "Quad" + alt_aroused = TRUE + +/datum/sprite_accessory/breasts/sextuple + icon_state = "sextuple" + name = "Sextuple" + alt_aroused = TRUE //OVIPOSITORS BE HERE /datum/sprite_accessory/ovipositor diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index 2498ff6370..b6cb8fa4b2 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -5,14 +5,13 @@ icon = 'modular_citadel/icons/obj/genitals/penis.dmi' zone = "groin" slot = ORGAN_SLOT_PENIS - w_class = 3 can_masturbate_with = TRUE masturbation_verb = "stroke" can_climax = TRUE - fluid_transfer_factor = 0.5 + fluid_transfer_factor = 0.5 size = 2 //arbitrary value derived from length and girth for sprites. var/length = 6 //inches - var/cached_length //used to detect a change in length + var/cached_length //used to detect a change in length var/girth = 0 var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm index 2ee92d743a..0415199415 100644 --- a/modular_citadel/code/modules/arousal/organs/testicles.dm +++ b/modular_citadel/code/modules/arousal/organs/testicles.dm @@ -1,22 +1,20 @@ /obj/item/organ/genital/testicles - name = "testicles" - desc = "A male reproductive organ." - icon_state = "testicles" - icon = 'modular_citadel/icons/obj/genitals/penis.dmi' - var/icon_on = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi' - zone = "groin" - slot = "testicles" - w_class = 3 - size = BALLS_SIZE_MIN - var/size_name = "Normal" - shape = "single" - var/sack_size = BALLS_SACK_SIZE_DEF - fluid_id = "semen" - producing = TRUE + name = "testicles" + desc = "A male reproductive organ." + icon_state = "testicles" + icon = 'modular_citadel/icons/obj/genitals/testicles.dmi' + zone = "groin" + slot = "testicles" + size = BALLS_SIZE_MIN + var/size_name = "average" + shape = "single" + var/sack_size = BALLS_SACK_SIZE_DEF + fluid_id = "semen" + producing = TRUE can_masturbate_with = TRUE masturbation_verb = "massage" can_climax = TRUE - var/sent_full_message = TRUE //defaults to 1 since they're full to start + var/sent_full_message = TRUE //defaults to 1 since they're full to start /obj/item/organ/genital/testicles/Initialize() . = ..() @@ -30,11 +28,11 @@ /obj/item/organ/genital/testicles/update_size() if(size == 1) - size_name = "Normal" + size_name = "average" if(size == 2) - size_name = "Enlarged" - if(size == 3) - size_name = "Engorged" + size_name = "enlarged" + if(size >= 3) + size_name = "engorged" /obj/item/organ/genital/testicles/proc/generate_cum() reagents.maximum_volume = fluid_max_volume @@ -69,16 +67,19 @@ /obj/item/organ/genital/testicles/update_appearance() if(owner) - desc = "You see a pair of testicles dangling. They're quite [lowertext(size_name)]." + if(!internal) + desc = "You see an [lowertext(size_name)] pair of testicles dangling." + else + desc = "They don't have any testicles you can see." var/string 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)]" - string = "testicles_[size_name]-s" + string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]-s" else color = "#[owner.dna.features["balls_color"]]" - string = "testicles_[size_name]" + string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]" if(ishuman(owner)) var/mob/living/carbon/human/H = owner icon_state = sanitize_text(string) diff --git a/modular_citadel/code/modules/arousal/organs/womb.dm b/modular_citadel/code/modules/arousal/organs/womb.dm index c59d74e629..686d9059a0 100644 --- a/modular_citadel/code/modules/arousal/organs/womb.dm +++ b/modular_citadel/code/modules/arousal/organs/womb.dm @@ -5,12 +5,10 @@ icon_state = "womb" zone = "groin" slot = "womb" - w_class = 3 internal = TRUE fluid_id = "femcum" producing = TRUE - /obj/item/organ/genital/womb/Initialize() . = ..() reagents.add_reagent(fluid_id, fluid_max_volume) diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm index 209d46db61..2921f70684 100644 --- a/modular_citadel/code/modules/client/preferences_savefile.dm +++ b/modular_citadel/code/modules/client/preferences_savefile.dm @@ -56,6 +56,7 @@ WRITE_FILE(S["feature_has_balls"], features["has_balls"]) WRITE_FILE(S["feature_balls_color"], features["balls_color"]) WRITE_FILE(S["feature_balls_size"], features["balls_size"]) + WRITE_FILE(S["feature_balls_shape"], features["balls_shape"]) WRITE_FILE(S["feature_balls_sack_size"], features["balls_sack_size"]) WRITE_FILE(S["feature_balls_fluid"], features["balls_fluid"]) //breasts features diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi index 1869e082de2455609c96af44c969430368bc09e4..b0dc1d7aef1259bd40c6ae31cf34777fa1262ed6 100644 GIT binary patch delta 1344 zcmV-G1;6^a4EYL>BmpOpB`SaaJ*ANE00001bW%=J06^y0W&i*H(t1=_bVOxyV{&P5 zbZKvH004NLrIkAi!Y~wt=j2y}c2-(-bt$dd!3g3W^0>7be2@hF`?hr!^tjzSoP2zc z!_7t2Y+EVneajydqQ70mTCC;;XHV}^KP<}yXFd6IpWaJMI?*s@CXj!QDXP2nL1|T} z&G8^l8E4LiIKIMJ7xab3x%?O_k(j|~2BTSwW-*$>Xbz`U&90U8?>Hn!m>pqu1lkd3 zr)LrD!4SlnfD#Q#v?$S{M28aHe?+Jk6B7D!s3oD61Y6PyWXD6i0hzt~U zvFf1^78(zY%YvFE4U3hj4*y)SWWjk4m-ldd?CV7Neq>vEIp^UXdwg_dM-c!3z$air zOqu?3P@(y3+?5xVw z!2D#n`fyp#*JNTd%2oA%JW!@AS3~pL(d1)2KRKtb0{{R30001EGV9(V$-dUg=lah< zx$_gU{`Br^t^A{2zN+WHF{jUb^E-ikt(C7``ehUSwjl+1~~765+$00000=*w=J)27uIKfZn$ zjBmacN7+@!?Yidu!@1b%i&HPW!Tv&tK)g56C}np0=8Mu2Y&0_6{8TpNlutw2tTgy*f3YZ|@!crROb2QK6yl zkZ&k|V68@Z#~TjK0{{R30000V3aef9Zno6?bpL-jsHA*WmUI5USEuD)_wwg@{?wd` z?tE6(pLSnci5-2dn%}?5|E}j_nU^0=QhtBKoLZu8j;7mthkvWriw@i7)Ryh;Z|$gf zrXIL(d}fZ_R}EKQHnet~?e1%fGXJMs>|C8e&;R0{LeXndIWqlf&Ponm<|28Y}v3kK`ywSLs3awatV4?X0dS83; zveP{ie@Vz21?0?-^GVdcws6#Yj4z+$YuVSna|SG-eJ_1600000002Hv#Y=6qbNws{L z2LF41k#0WA>m;FK%qaPTByA~sBvv<#QSQD7d|>V(`$;T zd=Z71pI5PTOpzxFkKDLoLwJefn4wUjOy6f>SA9DcdGX4zFE5LIZZ%d6N+$eB)j{C! zGXp5Bv-+kJ8WO*6Rqimci~b1iEm_Y3C8H+8t%!!q+Z?wp@d0cMy>;FlbddJyoL1rK zw9f}=4I#yG!e-LZU*2sDa`Z^0t4c^u?s~TE= zP4_Z}TD5h)(4(5;8}i^DwV;i$@&5e`Q+-nnej~JzqyaR`Q~u zfY$j$^Sq|9avnIkydGS-@a+@KzDoqlLLYt45>&DYz=~?3Fk#@Z87R5#A}*GAgiM@q zAlgF&*X%cK9K?Za0F{LDAaqvau@^+kPtSe|-S@uMWM02Rv1+iZ zGz&}eOFzmUb9gL~DSc-LfXiS`l-{m)u%J0OH`}dp-lj~RCinkEps2}igHYsTRw6Sfo^2Bxu?e&jE#g_!o{7U`id(4`fQ zDH`$)_b!yza2kd_+jPr%gTMPYJWIvx7*C&U=DP<3ixRZS1Y8x=v-mv!f*+xzMe{B9 zdXC|^krclwQD9j9lpG=B*dTmmB0)4T*4W@94wg`0LS(3(0 zlrNob+^bsJYTQ>U&>BDpOmBD+icuG`-^R zDR~G_ci~iNkma%df*0G*GIgLx(I6*w)iLq7_7rI(sD-8%?tf%+7Oy$NSSsu4nG4rJ zPR7d}38Q^T+A~Wo%pSo>@#G{KMv-eV(^69t|9VbnBo+JcxuhDHCCmPrKzdoq6qofa zvr6aCg5*e5v~+GLnoG@AFF74tE$gjmRqVW!N8l29bTTKF({>}fm z*l4BOl`if1u>{+h_&{C5$xaS(PyjFF*WQJQ7Ju{;7=5J?P4NE>H+YY2K@S=2j4ioL zACFiW1$W8}lxCymSrYO9ZtXQr;(1foUK(tSl$DmpE+Y|6?iDwBA&y_MK@#Gv;@iH&rys(ujW^4eVI71ilkN;%^Yf5_ z$G1Dijy({WA$v8e*kfl&JNa!8&4FpO>)DKWKu_fB{*LL$kQp4}_&pr@xWwOVm<&5x gpQ2WoUT7B!6u`rdz$+dLEh($ diff --git a/modular_citadel/icons/obj/genitals/penis.dmi b/modular_citadel/icons/obj/genitals/penis.dmi index 02597b3cdb719218e18723d99805b0a601319d48..397fa335e537e9926e119efcabda1fc3bb91ad72 100644 GIT binary patch delta 2619 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 literal 3200 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 literal 4855 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 diff --git a/modular_citadel/icons/obj/genitals/testicles.dmi b/modular_citadel/icons/obj/genitals/testicles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3d7a5f4f4801004f4439bf82c46f6f34a1b8b14f GIT binary patch literal 1116 zcmV-i1f%C0000pP)t-sz`($> zv$Nmd-`LpL*Votd^z`QD=BTKst*x!Mx3}7~vi9ER>e<}o#>@Hc^8Ww;z`($g<)POA z0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5sU)?yBr`cDwOEOZGbOXA z7$|1Q#hF%=n41b=W2%fV&df{CNsTuoU5gRvT8xR;qDzh^$kAj(jwWLwG?8FxMrKM% zY92|E0M$ZDBtW&05D9RHkrYNSr;(!xPrxcGxca$(^92APnDaxBc^Y*900SIJL_t(| zob8&4lA|yTL$n{sBNW*gF6OaEw4cHMK2|L8}@t zWCIBvUEOtEulsBH0f0^c?Nor4eu9h80RREY_WNzE{Ss68GWgPtZ(!?Q?qa1rC!kVdf?bzGS z4h8ZDHXnwtzv_^nf%I)}GMP*!lgadcO{6>h=Vh7a1B6sakUz~c6F>wPM3C40K|TRc z>kJI05OS3O<+FbPP!0AD0KrN+0ub_7cXZo$3^vukpCm{yZLXUQjIx#=0EmxvDgcML z2ps?rpnMOo?Es>|ewF~@vH<{?{|T@Y2;)dGvuD%*)-4c7(*WlC#;-9D0hVtQRRQ2^ zw}}8K-!B3TP)&4x7M?|`03N_x z09#_(OdEZNIq&q5r9`C?RY7G-%iTm6e<7qeZG9r zkEZ!6^#f1gn|v_F zME$_;<)Oxeae&FP#IDh>>)|=6l z`hmCIjLR zUfsO&^w{Z}CW78TS;mqezhDN3XE)M-obOd35hX6E#mPmP1tppJc?=8{bCyoq$k${b z;+p-gU82%O})w$xYJPFj9d!tqp@HT>^xMdt5$J^P$gV$f#m`CnAi z0^hRP&poo}cEH`YTg2=G9o>T`i?#{71k-7uzYLK{L$qFuL#HmqgJIeLmY zQZBJ-R=UJ)b4&S-tuAX+Yw{Itc5HQ8Bbu@{q*b9gGjZLhnQ-Q z#dS`bkiS1c>Veb2Nt?7J`%NX-wI#GA8b zzd!wHTWC!A^JmL7UwziT{qk$ZR zfQ|?2D)ImFb?48s_v2UXSbzR({I`qEE`fA&uO?ElvWtPBhB Z;l23wYGwY}*$OcrSx;9#mvv4FO#q}SaOVI3 literal 0 HcmV?d00001 diff --git a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi index e6ad183687987a2e865effef73ec8c3ab1ab668f..f5daa3fea1ba98eefe5f6bc9512d66a61ab9186a 100644 GIT binary patch literal 1076 zcmV-41k3x0P)bJ$*|z zQ0Oua8{NwnH%t#1>>1DOO(@D0tTyy3vi1d?=L@d(yGAQgwo+j4;R)7Sh+iz2g8(K9 zhxy>4@toAB3R9UhctJ>d8G2hw^X}Luj_w)`k+sB8<1-JvDO1wMKj{TObWPe{8EcCy9lBLFPWY1;*0001& zYo2d-6D-&}zg}h=-UbUs^PlpDUO5i{00000&{*$zP&8lYJx_|}3sm&Zp>gRJ}PegUThXDWp z003GT+b6Tpe&Qe9Ha;Wsd8lA?p0jE_5SnkQ$8)e^zV~votQL5-L)rcMrWPO0=fjm{ zeZX|ka8Ysnxt3qO_~Ku^&8l`n2J>Y@^>=*ufa00000aPi(f{6cY(w<brQY+L=<`hg00000 zz@=+GK8Y5L=I?$53*;8Te6*q8tq%wQ00000;3&nkr1v~1n!iukhUh%#x^uobpsQd( z#?Cv;#JFSu0000uL#cNInMHKku~?)QeLM-zbM~S5VwZvq6cvNasHy0Y;)mzs7V(il6p4)00000oFMgXpt1NzuPG9~4nOUYiOzHO(E@)Sj*c9x zn6m#&yOeJ#Jlmn{{=WY8YJ>R`zMd^Te^FGtzpLd3=Q)erKFx*==1&>09V}R$qFO(- zc}_5Yg278J+)%y4;q|8|J^l0S##sOW006)_Xg-hW?u2>FsPcvA&*k*a7kYmIUh`jw u0ssI2003TD?_Z~BZglgUDDxZup!65M;!*YA3x8h#0000|ux0FmeePB`?kov)J0Op96w01C9j-{P@ioF&D8AjL$YWzc2Ee#Qt(NRLmW(HXRqWB{^i znyY?wxbEvB6fN?0U+EwZB~wBiknUlbSKFHkzT}VeK|M4(=Sccf{E}ndbWc~xrHag% zePyZi8)F6b1B;jxO}28cdZ1+RN}IOw+nDM()l`H{nJUeYe z3E2>_zmX~^cEWVX^@q0?0Gw)|*ry?G87n8&OVWyFlEwq_UPnb8+UIq2UjpL1K)g{U zjPBSkdqqpf2!qWz-QfHAkn=}U|FQu9wkt9$I5w;1Z`n1{q_2w&IrJ{<)-4E{{Dj8o z?2J6PK)**gg<_N{<|k+`J0#u~%fDsZg;ZS#G*DPs7{14w-KKoL(`gj7r_Zl)be^kz zrqkTvML*9uoe2aAclcW@v(c*5uD0O;6JfWxpYCVW+bh{#k z9Vrl=F@wfHp;{wxu&adY_4;UyQN^TxN+2+yjTP&X3(p#LrgpLhwPgli_0Ks`T}7cz!}H-uof-nM ze7|Lb)~)%R@RG@BUA1iFN)G%-gJZWUxX(`Rct|8Et=RlIG0b<5*!h2VI(A&S@Jh{< z*j2^P>xW_lu(1zBL3iWv*S4TznTIu5$tOHK40%jZ1{Eb<{M2nGM|ig{&vMnkPY4E-pEq&S% z*L%WsA-;#nOmP0?=kAqrtfSNeI@2`XzvV|=SDi!3DQP(Zo{q5Bd14foFS4PMLX(&0 zaB*rJp~6X5c!te;x1Z^a#Z~XZv0ZVT-MAVwuC`W>);@A(=XQ!%o1sL8lfoW`P_O?3 Doh}-H