From 2aa86157e1b049bbfe659c69152991310a28592c Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 26 May 2019 04:52:31 -0500 Subject: [PATCH 1/7] Fixes rendering issues. Adds balls to be rendered --- code/__DEFINES/citadel_defines.dm | 4 +- code/__HELPERS/_cit_helpers.dm | 70 +++++------------- code/__HELPERS/mobs.dm | 2 + .../code/modules/arousal/arousal.dm | 51 ++++++------- .../code/modules/arousal/organs/breasts.dm | 4 +- .../code/modules/arousal/organs/genitals.dm | 25 +++++-- .../organs/genitals_sprite_accessories.dm | 13 +++- .../code/modules/arousal/organs/penis.dm | 4 +- .../code/modules/arousal/organs/testicles.dm | 43 +++++++++-- .../code/modules/arousal/organs/vagina.dm | 3 +- .../icons/obj/genitals/breasts_onmob.dmi | Bin 1401 -> 1593 bytes modular_citadel/icons/obj/genitals/penis.dmi | Bin 2758 -> 3200 bytes .../icons/obj/genitals/penis_onmob.dmi | Bin 3880 -> 4855 bytes modular_citadel/icons/obj/genitals/vagina.dmi | Bin 510 -> 626 bytes .../icons/obj/genitals/vagina_onmob.dmi | Bin 939 -> 1171 bytes tgstation.dme | 12 +-- 16 files changed, 121 insertions(+), 110 deletions(-) diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 9f5f52180c..2abe0db04e 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -33,8 +33,8 @@ #define BALLS_VOLUME_MULT 1 #define BALLS_SIZE_MIN 1 -#define BALLS_SIZE_DEF 3 -#define BALLS_SIZE_MAX 7 +#define BALLS_SIZE_DEF 2 +#define BALLS_SIZE_MAX 3 #define BALLS_SACK_SIZE_MIN 1 #define BALLS_SACK_SIZE_DEF 8 diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index eb2a564d1b..e21bee2e36 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list) //Genitals and Arousal Lists 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(breasts_size_list) GLOBAL_LIST_EMPTY(breasts_shapes_list) GLOBAL_LIST_EMPTY(vagina_shapes_list) @@ -123,36 +124,36 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) /mob/living/carbon/proc/has_penis() if(getorganslot("penis"))//slot shared with ovipositor if(istype(getorganslot("penis"), /obj/item/organ/genital/penis)) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/proc/has_balls() if(getorganslot("balls")) if(istype(getorganslot("balls"), /obj/item/organ/genital/testicles)) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/proc/has_vagina() if(getorganslot("vagina")) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/proc/has_breasts() if(getorganslot("breasts")) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/proc/has_ovipositor() if(getorganslot("penis"))//shared slot if(istype(getorganslot("penis"), /obj/item/organ/genital/ovipositor)) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/human/proc/has_eggsack() if(getorganslot("balls")) if(istype(getorganslot("balls"), /obj/item/organ/genital/eggsack)) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/human/proc/is_bodypart_exposed(bodypart) @@ -161,16 +162,16 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) L = get_equipped_items() for(var/obj/item/I in L) if(I.body_parts_covered & GROIN) - return 0 - return 1 + return FALSE + return TRUE /mob/living/carbon/proc/is_chest_exposed(var/list/L) if(!L) L = get_equipped_items() for(var/obj/item/I in L) if(I.body_parts_covered & CHEST) - return 0 - return 1 + return FALSE + return TRUE //////////////////////// //DANGER | DEBUG PROCS// @@ -191,40 +192,3 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) H.give_vagina() H.give_womb() H.give_breasts() - -/client/proc/test_mammal_overlays() - set name = "Mass Give Mammalitus" - set category = "Dangerous" - set desc = "Turns every human into a mammal with tails, ears, etc. WARNING: NOT FOR LIVE SERVER USAGE!!" - - log_admin("[src] turned everyone into mammals.") - message_admins("[src] turned everyone into mammals.") - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.dna) - continue - var/datum/dna/hdna = H.dna - H.set_species(/datum/species/mammal) - var/subspec = pick("Fox","Wolf","Fennec") - switch(subspec) - if("Wolf") - hdna.features["mam_tail"] = "Wolf" - hdna.features["mam_ears"] = "Wolf" - hdna.features["mam_snouts"] = "Wolf" - hdna.features["mam_body_markings"] = "Wolf" - hdna.features["mcolor"] = "555" - hdna.features["mcolor2"] = "999" - hdna.features["mcolor3"] = "999" - if("Fox") - hdna.features["mam_tail"] = "Fox" - hdna.features["mam_ears"] = "Fox" - hdna.features["mam_snouts"] = "Fox, Long" - hdna.features["mam_body_markings"] = "Fox" - hdna.features["mcolor"] = "f60" - hdna.features["mcolor2"] = "fff" - hdna.features["mcolor3"] = "fff" - if("Fennec") - hdna.features["mam_tail"] = "Fennec" - hdna.features["mam_ears"] = "Fennec" - hdna.features["mam_snouts"] = "Fox, Short" - hdna.features["mam_body_markings"] = "Fox" - H.regenerate_icons() diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 74a1fbd785..6c6b197a12 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -77,6 +77,8 @@ //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) + if(!GLOB.balls_shapes_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list) if(!GLOB.vagina_shapes_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) if(!GLOB.breasts_shapes_list.len) diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index ef9201af60..846a8cff62 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -40,7 +40,7 @@ adjustArousalLoss(arousal_rate * S.arousal_gain_rate) if(dna.features["exhibitionist"] && client) var/amt_nude = 0 - if(is_chest_exposed() && (gender == FEMALE || getorganslot("breasts"))) + if(is_chest_exposed() && (getorganslot("breasts"))) amt_nude++ if(is_groin_exposed()) if(getorganslot("penis")) @@ -64,14 +64,14 @@ /mob/living/proc/adjustArousalLoss(amount, updating_arousal=1) if(status_flags & GODMODE || !canbearoused) - return 0 + return FALSE arousalloss = CLAMP(arousalloss + amount, min_arousal, max_arousal) if(updating_arousal) updatearousal() /mob/living/proc/setArousalLoss(amount, updating_arousal=1) if(status_flags & GODMODE || !canbearoused) - return 0 + return FALSE arousalloss = CLAMP(amount, min_arousal, max_arousal) if(updating_arousal) updatearousal() @@ -99,6 +99,8 @@ switch(G.type) if(/obj/item/organ/genital/penis) S = GLOB.cock_shapes_list[G.shape] + if(/obj/item/organ/genital/testicles) + S = GLOB.balls_shapes_list[G.shape] if(/obj/item/organ/genital/vagina) S = GLOB.vagina_shapes_list[G.shape] if(/obj/item/organ/genital/breasts) @@ -112,54 +114,54 @@ G.update_appearance() /mob/living/proc/update_arousal_hud() - return 0 + return FALSE /datum/species/proc/update_arousal_hud(mob/living/carbon/human/H) - return 0 + return FALSE /mob/living/carbon/human/update_arousal_hud() if(!client || !hud_used) - return 0 + return FALSE if(dna.species.update_arousal_hud()) - return 0 + return FALSE if(!canbearoused) hud_used.arousal.icon_state = "" - return 0 + return FALSE else if(hud_used.arousal) if(stat == DEAD) hud_used.arousal.icon_state = "arousal0" - return 1 + return TRUE if(getArousalLoss() == max_arousal) hud_used.arousal.icon_state = "arousal100" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 90)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal90" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 80)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal80" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 70)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal70" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 60)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal60" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 50)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal50" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 40)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal40" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 30)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal30" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 20)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal10" - return 1 + return TRUE if(getArousalLoss() >= (max_arousal / 100) * 10)//M O D U L A R , W O W hud_used.arousal.icon_state = "arousal10" - return 1 + return TRUE else hud_used.arousal.icon_state = "arousal0" @@ -171,11 +173,11 @@ /obj/screen/arousal/Click() if(!isliving(usr)) - return 0 + return FALSE var/mob/living/M = usr if(M.canbearoused) M.mob_climax() - return 1 + return TRUE else to_chat(M, "Arousal is disabled. Feature is unavailable.") @@ -196,13 +198,6 @@ "You have relieved yourself.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) setArousalLoss(min_arousal) - /* - switch(gender) - if(MALE) - PoolOrNew(/obj/effect/decal/cleanable/semen, loc) - if(FEMALE) - PoolOrNew(/obj/effect/decal/cleanable/femcum, loc) - */ else to_chat(src, "You aren't aroused enough for that.") diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 1239a515cd..7d482ec3a0 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -60,7 +60,5 @@ string = "breasts_[lowertext(shape)]_[size]" if(ishuman(owner)) var/mob/living/carbon/human/H = owner + icon_state = sanitize_text(string) H.update_genitals() - - icon_state = sanitize_text(string) - diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 591bb6f1de..592d1e2f33 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -165,7 +165,7 @@ P.Insert(src) if(P) if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) - P.color = skintone2hex(skin_tone) + P.color = "#[skintone2hex(skin_tone)]" else P.color = "#[dna.features["cock_color"]]" P.length = dna.features["cock_length"] @@ -181,13 +181,14 @@ if(!getorganslot("testicles")) var/obj/item/organ/genital/testicles/T = new T.Insert(src) -// if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) -// T.color = skintone2hex(skin_tone) -// else -// T.color = "#[dna.features["balls_color"]]" if(T) + if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) + T.color = "#[skintone2hex(skin_tone)]" + else + T.color = "#[dna.features["balls_color"]]" T.size = dna.features["balls_size"] T.sack_size = dna.features["balls_sack_size"] + T.shape = "single" T.fluid_id = dna.features["balls_fluid"] T.fluid_rate = dna.features["balls_cum_rate"] T.fluid_mult = dna.features["balls_cum_mult"] @@ -204,7 +205,7 @@ B.Insert(src) if(B) if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) - B.color = skintone2hex(skin_tone) + B.color = "#[skintone2hex(skin_tone)]" else B.color = "#[dna.features["breasts_color"]]" B.size = dna.features["breasts_size"] @@ -228,7 +229,7 @@ V.Insert(src) if(V) if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) - V.color = skintone2hex(skin_tone) + V.color = "#[skintone2hex(skin_tone)]" else V.color = "[dna.features["vag_color"]]" V.shape = "[dna.features["vag_shape"]]" @@ -297,7 +298,9 @@ 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 @@ -308,9 +311,12 @@ 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] + if(/obj/item/organ/genital/testicles) + S = GLOB.balls_shapes_list[G.shape] if(/obj/item/organ/genital/vagina) S = GLOB.vagina_shapes_list[G.shape] if(/obj/item/organ/genital/breasts) @@ -318,8 +324,10 @@ if(!S || S.icon_state == "none") continue + 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) @@ -331,12 +339,15 @@ switch(S.color_src) if("cock_color") genital_overlay.color = "#[H.dna.features["cock_color"]]" + if("balls_color") + genital_overlay.color = "#[H.dna.features["balls_color"]]" if("breasts_color") genital_overlay.color = "#[H.dna.features["breasts_color"]]" if("vag_color") genital_overlay.color = "#[H.dna.features["vag_color"]]" standing += genital_overlay + if(LAZYLEN(standing)) H.overlays_standing[layer] = standing.Copy() standing = list() 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 e857c0d7ed..eaf493482f 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm @@ -55,8 +55,19 @@ center = TRUE //Center the image 'cause 2-tile wide. dimension_x = 64 +//Testicles +//These ones aren't inert +/datum/sprite_accessory/testicles + icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi' + icon_state = "testicle" + name = "testicle" //the preview name of the accessory + color_src = "balls_color" + locked = 0 - +/datum/sprite_accessory/testicles/single + icon_state = "single" + name = "single" + alt_aroused = TRUE //Vaginas /datum/sprite_accessory/vagina diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index ac812e286d..2498ff6370 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -52,15 +52,15 @@ string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]" if(ishuman(owner)) var/mob/living/carbon/human/H = owner + icon_state = sanitize_text(string) H.update_genitals() - icon_state = sanitize_text(string) - /obj/item/organ/genital/penis/update_link() if(owner) linked_organ = (owner.getorganslot("testicles")) if(linked_organ) linked_organ.linked_organ = src + linked_organ.size = size else if(linked_organ) linked_organ.linked_organ = null diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm index 815d8034e7..2ee92d743a 100644 --- a/modular_citadel/code/modules/arousal/organs/testicles.dm +++ b/modular_citadel/code/modules/arousal/organs/testicles.dm @@ -3,15 +3,20 @@ 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 - internal = TRUE - size = BALLS_SIZE_DEF + size = BALLS_SIZE_MIN + var/size_name = "Normal" + shape = "single" var/sack_size = BALLS_SACK_SIZE_DEF fluid_id = "semen" producing = TRUE - var/sent_full_message = 1 //defaults to 1 since they're full to start + can_masturbate_with = TRUE + masturbation_verb = "massage" + can_climax = TRUE + var/sent_full_message = TRUE //defaults to 1 since they're full to start /obj/item/organ/genital/testicles/Initialize() . = ..() @@ -23,14 +28,22 @@ if(reagents && producing) generate_cum() +/obj/item/organ/genital/testicles/update_size() + if(size == 1) + size_name = "Normal" + if(size == 2) + size_name = "Enlarged" + if(size == 3) + size_name = "Engorged" + /obj/item/organ/genital/testicles/proc/generate_cum() reagents.maximum_volume = fluid_max_volume if(reagents.total_volume >= reagents.maximum_volume) if(!sent_full_message) send_full_message() - sent_full_message = 1 + sent_full_message = TRUE return FALSE - sent_full_message = 0 + sent_full_message = FALSE update_link() if(!linked_organ) return FALSE @@ -42,6 +55,8 @@ linked_organ = (owner.getorganslot("penis")) if(linked_organ) linked_organ.linked_organ = src + size = linked_organ.size + update_size() else if(linked_organ) linked_organ.linked_organ = null @@ -49,6 +64,22 @@ /obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.") if(owner && istext(msg)) - owner << msg + to_chat(owner, msg) return TRUE +/obj/item/organ/genital/testicles/update_appearance() + if(owner) + desc = "You see a pair of testicles dangling. They're quite [lowertext(size_name)]." + 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" + else + color = "#[owner.dna.features["balls_color"]]" + string = "testicles_[size_name]" + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + icon_state = sanitize_text(string) + H.update_genitals() diff --git a/modular_citadel/code/modules/arousal/organs/vagina.dm b/modular_citadel/code/modules/arousal/organs/vagina.dm index b8ef7029b6..8c15aa5437 100644 --- a/modular_citadel/code/modules/arousal/organs/vagina.dm +++ b/modular_citadel/code/modules/arousal/organs/vagina.dm @@ -60,10 +60,9 @@ string = "vagina" if(ishuman(owner)) var/mob/living/carbon/human/H = owner + icon_state = sanitize_text(string) H.update_genitals() - icon_state = sanitize_text(string) - /obj/item/organ/genital/vagina/update_link() if(owner) linked_organ = (owner.getorganslot("womb")) diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi index b0dc1d7aef1259bd40c6ae31cf34777fa1262ed6..1869e082de2455609c96af44c969430368bc09e4 100644 GIT binary patch delta 1537 zcmXw2YdDh&0REIXCplA25|yW#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($ delta 1344 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 I!NKYO1?a^1lmGw# diff --git a/modular_citadel/icons/obj/genitals/penis_onmob.dmi b/modular_citadel/icons/obj/genitals/penis_onmob.dmi index 2457759b732edd537fa4ac5d22d8abc7c0b13073..0ab1b951a70ea5af5a8d0ed08fb908560a15b3a4 100644 GIT binary patch literal 4855 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 literal 3880 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 diff --git a/modular_citadel/icons/obj/genitals/vagina.dmi b/modular_citadel/icons/obj/genitals/vagina.dmi index 00891888a44047465c86f73ba5b441a0f56e884a..39bdd48e89a70449a43ab36290da524de343af45 100644 GIT binary patch delta 463 zcmV;=0Wkjl1M&orMj`-|Lq+Epbo!JXeXfNPv6kcI@+XHPD$)w3+J1eq7-lmTAf&pHU762H%r+J>+)07aHK%S@Y ze;SJ4ckCHt-z4TyMxq8Hk0tQu>Q+=6*cyE;mpm!e2Gr*CJw;5Rs0&b?!MS>Wu2Coo zK;)j^${J9OAdFW}Yqzc^gF;aNqL->9*8oZmSJg+!v_Bt;HUkPrQ6+(e{O^mPyY%*-(#>a%}+Nd@lw^{lQ%AfkB|-$N|uOXxUsM-?8t#IDJ>I_wvf?{|Sbkb?$fN@jw6o002ovPDHLk FV1h|e)3^Wt delta 346 zcmV-g0j2)(1pWh%Mk0WeLq+IMAMi+BUgUEI!{Eyl(|A;0d&e)(oHLezO@BH1CmF&I-I zHIj6V!vL5YqR>mE3T0BF=%OZySQ+qt6>*LkQ7D;8U(p-t5m5jrqdY}{IWC9-oWP$^ zI0gD^N1$eD``KHV7rO7S2@+-=;1pRw00lqb_bE;?L4h{u(~NvC;^4iBzofe*X>Vu| zBno;f1nPWKtYx1Qd%Tt$usK}pg%g~rQgAai)tw#i5=g4oK(*(9-FfwY;}qL1Kf7iX s+tN+p{?Y;bsS|g^gxi5VVx7;)17UDJ@=UOoxc~qF07*qoM6N<$f;#e;3;+NC diff --git a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi index c22c12ded338f74567d6521f524ebb9a64d1ae81..e6ad183687987a2e865effef73ec8c3ab1ab668f 100644 GIT binary patch delta 1118 zcmZ3@KACfZI9~$?GXn#|WJ%XvAZ0L7)v*3Q14Hb80W%<%u_VYZn8D%MjWi(Vb5%%0 ziA!p6a#3bMNoIZ?14G4}wNnmqHyMZ=JO6IIMCsOm(|NH@-29R*<&|4jHpgr_d+7hZ zOm<<43tFWNwLNnLNcQW}Ot6nO+KG|`qbn~YPQ-h~HeRbD^ zwZ7|B(YJ=4LXS_Y80PKhoc!ke@*hUdVu?;>S|_|%MYgQGyMBgsTkaRVy^d?W&u{!& zR{8CMGn?w;n*4wg3Ll`v0k4U%#nhyHoV%B`3%4f3_?z$2@pG(XU&wEq}s<^HqG; z<)w~X&i?fABpCT{<$UKqZCXt1H<FH%=1G&q>Fi9X?Ab;uQn|rU9UuU0^{QT?b;9blYOwT(kNY-nFDKaV7`B;%>B`f=_ zuI7AMg4E^j>-neq-`{6v$M`Zmp{9`yrjUW*f}4%}{8%}|ryfQQ^qqZm zmh<-h}IgWB0Gi zJK$tJzr&v&(pR2;Uhl}jaCe6JlHcXuueIM`d6TE7oxEq)WVL6TY))kV&PdVgUc6^h zciOZ4_IdZ6oj=>#=ihb={#?I*+xE*hYQ9z18lOEY&OdGYrskig7QdFhd30;yek;*8 z$@^+*QiXT#-18;A-Y`M^^UwQwW*b(2-ael@-~DDcCr7a>C)Z~snP<5fGyZq9{?t%9 z(_WZp*T?s{)n~?fmBTff@@mtB)MkjP&5}@?Bds=X-dE{QJA`M{ZaWW-I8RqUmvv4F FO#pf){Luga delta 884 zcmV-)1B?8V39AQ?7Y<+q0{{R3K&`V50000jktH#IXZa3j00001bW%=J06^y0W&i*H z?|M{NbVOxyV{&P5bZKvH004NLt&~p-f-o4y&+bzUy;i9GxpfIEI%E*t<)uv>=!$I_ ze*2~#EF@toc6r~y^X&KT8T0UFyFbJ@Iv!9(g=9C5*LX4Wk@I9k<+_=N$jK?oa@93b zfug#9bSuahha`WLz>^^Hlim3gUtHu6CS>D+oK!$bn>zR^3&vzCy-N$Ibs74TWxK-3 zkRgLRs6apO)wQe1d2T z@%r6n8-@3)GXIklZ;oEC*5w381E$;US8uEM?X3q_lh-HUB*94rn|IOrce#h>6R2;2 z`S?14B0hcw?l)qRZv6-q8%VYO6a)Z&004lcT6S%1n-}OaFVhJ&WqEzRKA*n-|M^oE z->{mp{S@hQEgM9H0Blr0001Zh>N(on^vb&zkh`j?8huVt?$RL-=`Z$uVCEZ000000APXA z`h3`*7~=j!TAxqj_lGRL^&c<{yYd7aZap{)vb$?+teyke| zSM&$!D|oWNKTbgwU*EyS`t=58Z=pDWbp7U^f_E@p|Ee7VoQ*%Z{6;Ch(!ECj0000< KMNUMnLSTZC1f0bH diff --git a/tgstation.dme b/tgstation.dme index 4d74c8a95f..dea02c485f 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2502,12 +2502,6 @@ #include "code\modules\research\server.dm" #include "code\modules\research\stock_parts.dm" #include "code\modules\research\designs\AI_module_designs.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm" -#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm" #include "code\modules\research\designs\biogenerator_designs.dm" #include "code\modules\research\designs\bluespace_designs.dm" #include "code\modules\research\designs\comp_board_designs.dm" @@ -2527,6 +2521,12 @@ #include "code\modules\research\designs\stock_parts_designs.dm" #include "code\modules\research\designs\telecomms_designs.dm" #include "code\modules\research\designs\weapon_designs.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm" #include "code\modules\research\machinery\_production.dm" #include "code\modules\research\machinery\circuit_imprinter.dm" #include "code\modules\research\machinery\departmental_circuit_imprinter.dm" From 84aafb87f91c3e142096e5699330e69f165fa339 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 26 May 2019 04:52:44 -0500 Subject: [PATCH 2/7] Lizard tails are actually marked --- .../mob/living/carbon/human/species_types/lizardpeople.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index c5a64ebd13..30bf705547 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -97,6 +97,7 @@ brutemod = 0.9 /datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) - if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines - C.dna.features["tail"] = "Smooth" + if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail_lizard"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines + C.dna.features["tail_lizard"] = "Smooth" + C.update_body() return ..() From 818ec19561278b6294531912c3ad8afd4b5787f5 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 04:44:57 -0500 Subject: [PATCH 3/7] 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 zcmV-B3dHq*8Nd`JiBL{Q4GJ0x0000DNk~Le0002s0002s1Oos70O$jE(f|MeEs-T6 zfBEk6_TJ~}+1%yE%l`lX$Uqy=00001bW%=J06^y0W&i*IFM3p1bVOxyV{&P5bZKvH z004NLm6pMZ!Y~v?*UeW1U5}`pt(!p+7y1j5(rAMkC5ig`)7reOX5ijkQqG0bSKg&l z{j=Hb4tl-csh17W-MwDv@7Y{cZ`Y=-f4|gARdv>#yEI;6GRgMG$-{aVkKOZT{Bbc+ zRqI0RpD$E(3g%|V^PlvRqHB=8_Jh+BhtAS_Ms^?Lif7~}; zk!u{1uVKEl4xPZAO7p;p(miwnw<`SuCvpRkJZ_X*2A28LM!}{}w^$Yio)*l4=rXK(R2!=^SK~#90?V7<( z8&?#DXM`f!7uz(I=0qa?J=gcYbN)Ls=l5|Gl~KmM@#2a3;%}aqF!}LI zCtNZx1CqsQAYq(tda)vaWO2If9UsMbBdKkAF$tK#q_*lEA0_gS!M1_9fF(I$Qh)EoOPG+7B{ly7qU0B3tnS4z zB+^(d0DCCi*$lx+DhVvC_E4O@55h^hy&8hGgf+ip3fFd4L-2wk^h-7Yg8+DqxW=mj zdm<&45*FjPy?6n54SObve}0yqHzbUr?^lEHf+9pz{St=9_r~#OehKFtO2YXQPMgut zs6I8}v!~5y8D*4F#yvr=z*w5KL9MR%XIxq_CWwvWv~Nk>Z|D-9BG;Gri-LIlgT$}u zTi)^Mx?GUOI5?bT6C8vZOZ%Js3 zpS^_s@e?E@VW@=u@e?e$Jmcj+39a$UPOV`9Ra~`ILqco(LaGRnQEc)$B-^TQg^X8@ zmU*p6xl0`W4u)d!zql_{h6!BAEOYzcf*axP)xx_ESPI2n~U{VXSj8pdqlloQ= z;a+IFjyN@*X;{tk^mjjjse-FNqXSBDE1*B@v(4tS*ALLgAdmGra@OO{s5AKTLDfYIYvqx5%Wlu^ci6vhuyW*)5F7iLYs377c@ zoAnuU!URReyBQO5!uTDYnXe7PLjx;9Oc=kGXSi(qf2zr~4kT_%9095ci4$2DMh+8X z9r;Gq!vc;$$O(a&;i!2gapO!9G%v6Kj8~E=31x=erJTSWA07CxCd7o6gsvkug=_aE zZV`iUxkdu?50UZap`0)~zmOOiIBdz|aU!n@g_VTeKR}2KUdjyfxb^!`CE=&eXMtOC zQ@Xa?f3#VPgf;v=6qp%ypSltwW3DYTnzb%S==FchaMV1JgqDO^2bbkr_&s3du$#EA z7!nr8K}f#`%nb8J<{%Lzj2tpx`9Efyw`NPiVmxo9{$R#cH2e|<2Q#k1`6UbwX565s zg!2w9;k<*-uDJ)F&SjKQ#{VUr`r=i!`MiUrfASYc=#1mazCkion;YY!%&)n-=;IAY zMsuJRq{gFcQYT>8Df&GUa6Ac{M;OoATM>4R32zR3m}itL ze~IPsrXgXG5fBo0XfXYItYJtPxo+Q!LEu{cJ>^9%P{LqB1fK<1fbxr!aOyDJi)+l9(2CMdl~G0+j|yk?dS*}f*&Z|=9B$q2_{4O_ zVW(L64sSG${EUY*3%#%}UGpy9$h!U&e>X9IcGV9e%s^Naa^7cF@lY2Fa_uYsGY*ou zHZsJ@Qc2djA)y?B@s(3x60&kslCg3Hq5Br&uYh|vWmWuBGM2Vzr)B69V1eN}oI9|zd0)<541KjkMgxQ}m0eRz0Y|6ZSDL1K>(C_akVTOif z-s*v{D+wuKBTz#22lEaHdmR!=37e3x;g?YL2lI0fUZRD2(SwAzD9$0_1#YD54_40Q zbziwe3%A|$OW495I_I;Dx89r2e_pJ5!c9te4GF^@O)4m%2swUQLi6`T(~d8rjDYwHF@HiYoI?x-<7jbl{)CJ7qbXzZ&1X>j z8^&TZLqgSzx+5Ip7)(RR_8otJaocShM59w&j6w)2z--@TC=#xRghP^nf0vM!JV#-P z-{`0xE1nJs?@n!Pak4Y)nJY=ykp0FnzdE@4D=&*&?wMlGe@en!N*Fo%L-|Er zHp=*5NHco%4}&D2q?IcNDA5twP2cpu^X3gLSQ2jl1oO8qA{ dGqh`e0~<^SHcr5W4T=B&002ovPDHLkV1nc7?+^e0 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 From 1cfaf62a750973aad45c60f2083edb5956465dce Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 07:47:37 -0500 Subject: [PATCH 4/7] multi-boobies sprited --- .../icons/obj/genitals/breasts.dmi | Bin 1028 -> 1497 bytes .../icons/obj/genitals/breasts_onmob.dmi | Bin 1401 -> 4932 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/modular_citadel/icons/obj/genitals/breasts.dmi b/modular_citadel/icons/obj/genitals/breasts.dmi index e864d09a704acb3ea667a7f9e0fe1fa9aca58d8f..8c76891396623a234c9c66f4a0a252c34c910fb2 100644 GIT binary patch literal 1497 zcmYjRe>l^59RG$j=2;_YwZ)Wh7hP(YJJ&YCc&_bc=W#M=bcK>_a-C|dwo#%u;fbLl zk<%iSA{!~?S1RRKF)gP2jEy#C_no_Yo_jsd`}KOi-tYJ4*FT?RDuo1xphD9t>HOt@D5k6gSVrY zf2Ew=u=*r~7LjEeQnCHBEX5|XV+lhS<~^QaXV@;KTg>rFO7b3MR;tEh_nDXMOOcC`XrSqvwno4zh>{5EB8au&<`M3qd z2ls@0a!=LkqEg2!Ac=!C>ey~jx=Y)yY&deXKkAae$z{@oq<$ULRJBFP96>gCI*Z5b zcbWr$LAbA{yMJ8XWYA9(8PVj}fH4z`BVMW{qCRfS-p2yg&TraGbDBMIVpFIA(&|Iz zYm1E9vWM@@rG3^^u~%j|QWMG`-P9PH$k<8r zHk%+hv{x|tf+Yqiy?-RPe&=`rdmL5iXykr$k~e!(C199x;Mo;xd6%j*@*S!PgKWV>&>!rCX}ha{MxR?(-VL|3bT>G>CTruSxI zb{NG(PM{s87MB+x_4OgIR-Z^v5+RWqwB1N138L{Fx4FH5M%@c#w<#huAqq@w96{flv}sZR@y<;PsRkaLz!f4(ePDCrR(rLYmV=#f1*=7k5C^RVoBwM#&p z=-PZ-jI~H**wKP%3EzE2h#+VRdEt-30EitoIalq>o<$DdI-s<}VJ{EVq^90Uc{s4w zKCtgZkk>-MOWNS?j8&C_ER$Hy<+5K*zmj&QbD8P~q4nf9Px&T3)fsTO9)*dddcDa?NH0q#aPWbAvYD(S{mHeu`_54v1= zZ$4Suyk=<=y)S&&=Y=k-k2XB}N; zk3+-sI7HWX=iTrgxLH{(pP<>LLj#1Nk^*{j`fX6C$yah9-W7;+VX366E({rr@=Me= zbP^xm%G8@{Y`{+V|3FE5vb delta 1012 zcmVmzXf9l!X z`R?-e-sk^-|0F<3=>Px#0d!JMQvg8b*k%9#0GfJKSad{Xb7OL8aCB*JZU6vyoKseC za&`CgQ*iP1<%z^9 z*CjPjNY#)+s)l4zH6)R$ArZF*Wd&D17jPN`0L*K`r9KWXDF6Th=t)FDRA_gi-TMdugn&m_`vgH$ZI^22|=rVfy69(1$5W5L`p@s z!b06b&}u+{hzib)VFJ4K*a|rn0-i4$ulh&de(DurLGMp5OW*|)(D-y&k=dsm0+;#4 z^|yA_ErZL3wjhv70nHu)e~bYEZ~qJeiOEsmc82xUA*X#~A9lQ@9Umx!fL;iJV&B-G z1Abm@AO-o$p#e2K=G>jw-Dydfv@KWHcJ#(asf=DpI`k_U`}w7i5;u1 z*O(CPH&TEpD$Y9(Qck;r5a20HIPW~liD?p6+w*rA7HC%J`-t#PNS~00fEVv>eOp}a$%WT+9ns*$>n{VSrpjn05$22(llL5oT@+0;v?};9|$`AdtBde;i~#kU10xdRwaA*ns5@ z=YHT5c37@iaXSb6zWxHm5_e=jE5W~nfUO)1Sk$u>I@n62+&f?nt$3*p`1*sr#`^EQ zaNs#ggM(u531RVE1h|FZz8?SwKTyd-LOg|;;C{sl4>F#^V2>81;P?80GAsxV7{Fcl z5Gq{4MP4s%N^V(Z%$V^%Vd|aK>PTYI>PR9X>-_@(lvw>DA?y7^0@aixih3UpQSalC i$?_eIxi-%D_V^3Ie9JL3nZqOi0000 diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi index b0dc1d7aef1259bd40c6ae31cf34777fa1262ed6..69a531bd11511356b8a89b4057a1fc243f3e078e 100644 GIT binary patch literal 4932 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 V@;9v|T&-FkGBdWmP;TfM^FLE7$}j)` literal 1401 zcmXYv3p5jY9LHCYE=Ed*Ji1A8=u+Jj(yp4^-5m2CCX{!}BSY-jPQ99jeL=7?YrSth_w@+>`(%m&;vRT2d;NeSLi_7K=`&uki)kYPxh$EF2x5 zZfC1{TuO69s*!CeKAygSpJqNrt3*HAFE9lXg^EayOG=4LOaK7Vi%RpHwOZ`;GX+!d zU(*7DQ&X*}+~!@M&BS#KBW#Y^*NvJ~gVj2oa}gGs)5>uhx`wb8;@IZ;C9F&DgI~?4 z$G}8BU|Y6&jEfXi%)jX2)Mp=kI49e>^6xd*IRA3a@&TApOi$KnW=jxgHM6~5ZfKMH zq&aryi=YS5$4ITQIuw5nEl(mkeaQWZ>E$#vu3ju9MsL1(cN^*E9^fz4NBT-2S$lW{ zNI7Wl9vQ0KlAN!G=m+K3$40uC=7aXhmyJ72I$r?*Y6qbZSHJY41s)5AfE%_i6XV|i zwY*AwPDSATu7U~>!LyN;<*2KW7^|1vceV9X-wMgQ4UBakvTu_tfyBHD9c9Sd$mR^) zg7qZq{2WAzk3^sy1^=31uqjdQdH_I^RrooNLIui;EWI|4nMFi%tZM^;Hiq>A?J3gx zf!Z7}x3Uf4@1lHW$SzHWvObmUnt#dB&^E7JhzZtZyp9 z1?)(9y_v7-L>!;vAN;@^?h?p)UF%o&(iN+VNUHorD6>+)I!5Wmt~lSqQS)A3nnt2c zjo9zx>Elwj(H`_VBS0ZYejMa&cUt0SFm98|k{2 zyH(~|kjev8KAo=-J?Z4Q{z&C^bE<;JKhOG9;~3A@`fcWs?c?ryOoJ`JEIWZTP&Nbt zGx0_b5}5|>qy8NW4KrU`>pu#KzTh{1+4Vf;w4kkOn81UQ9R)E0w(J&?h&(kgEKH93 z^A3=0hmu(73WfRR9A_HxV($gafdY*Fcs;M7p5@dvshw2^ZFHddZo#nISD6m+&A52( z?Tuh|=iJ!kb%q6a>CFb0-`GU6E8o>MFtUBCwKZ1+*2rrS4M8&{U9yHr0zS@jgPz+P zHqFxQ1SdYPAz^5~B%L)KlZ|5Hsln=OfuhmrWO1U%R8cB8>h4V@i*gc=5W=Y!GCKC_ zaK43Su32?Sl29`!Pf-%#Yr>u^=@yAycgQNPp_MAE&eo_@}(hT)nIf) zCTQ)hZo2_WUuUG@r?Mw&1vB%iubhFHlttOsih1VzyIQg}MjAiE6;>-2*?G3@oL~<3 zjG_H2=d>O+iZd-ToHh%;^R<+BXOSA6-}2ey+>BK2Fc~m8;drveaZ^LxJR!7m;kW+> Dyhh3= From 69b1373209440bb895bf8535bf3e9abe08ab3202 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 08:06:16 -0500 Subject: [PATCH 5/7] compile testing and tweaks --- code/__HELPERS/global_lists.dm | 3 ++- code/modules/client/preferences.dm | 17 ++++++++++++----- .../code/modules/arousal/organs/genitals.dm | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 3f3322c3ec..ac113b4e08 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -53,9 +53,10 @@ 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) + for(var/K in GLOB.breasts_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] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 91e7b2a5bc..01b0b0415d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -702,6 +702,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += "Testicles Color:" dat += "    Change
" + dat += "Testicles showing:[features["balls_shape"]]" dat += APPEARANCE_CATEGORY_COLUMN dat += "Has Vagina:" dat += "[features["has_vag"] == TRUE ? "Yes" : "No"]" @@ -1837,7 +1838,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) features["cock_color"] = sanitize_hexcolor(new_cockcolor) else - user << "Invalid color. Your color is not bright enough." + to_chat(user,"Invalid color. Your color is not bright enough.") if("cock_length") var/new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Character Preference") as num|null @@ -1859,7 +1860,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) features["balls_color"] = sanitize_hexcolor(new_ballscolor) else - user << "Invalid color. Your color is not bright enough." + to_chat(user,"Invalid color. Your color is not bright enough.") + + if("balls_shape") + var/new_shape + new_shape = input(user, "Testicle Type:", "Character Preference") as null|anything in GLOB.balls_shapes_list + if(new_shape) + features["balls_shape"] = new_shape if("egg_size") var/new_size @@ -1875,7 +1882,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) features["eggsack_egg_color"] = sanitize_hexcolor(new_egg_color) else - user << "Invalid color. Your color is not bright enough." + to_chat(user,"Invalid color. Your color is not bright enough.") if("breasts_size") var/new_size @@ -1898,7 +1905,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) features["breasts_color"] = sanitize_hexcolor(new_breasts_color) else - user << "Invalid color. Your color is not bright enough." + to_chat(user,"Invalid color. Your color is not bright enough.") if("vag_shape") var/new_shape @@ -1915,7 +1922,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) features["vag_color"] = sanitize_hexcolor(new_vagcolor) else - user << "Invalid color. Your color is not bright enough." + to_chat(user,"Invalid color. Your color is not bright enough.") if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 460c6b4188..cbf14e420a 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -141,14 +141,14 @@ 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_breasts"]) - give_breasts() if(dna.features["has_vag"]) give_vagina() if(dna.features["has_womb"]) give_womb() if(dna.features["has_balls"]) give_balls() + if(dna.features["has_breasts"]) // since we have multi-boobs as a thing, we'll want to at least draw over these. but not over the pingas. + give_breasts() if(dna.features["has_cock"]) give_penis() if(dna.features["has_ovi"]) From 25458fad630b770e3d8c5ed9d3053aeb3ee3d04f Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 08:40:51 -0500 Subject: [PATCH 6/7] I refuse to eat crow. --- .../code/modules/arousal/organs/breasts.dm | 8 +++---- .../code/modules/arousal/organs/testicles.dm | 22 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 3f8e3fc6f1..1223f0b616 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -41,8 +41,8 @@ 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." + if("sextuple") + desc = "You see three sets of breasts, running from their chest to their belly." else desc = "You see some breasts, they seem to be quite exotic." if (size) @@ -57,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_[GLOB.breasts_shapes_icons[lowertext(shape)]]_[size]-s" + string = "breasts_[GLOB.breasts_shapes_icons[shape]]_[size]-s" else color = "#[owner.dna.features["breasts_color"]]" - string = "breasts_[GLOB.breasts_shapes_icons[lowertext(shape)]]_[size]" + string = "breasts_[GLOB.breasts_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/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm index 0415199415..0cf698392c 100644 --- a/modular_citadel/code/modules/arousal/organs/testicles.dm +++ b/modular_citadel/code/modules/arousal/organs/testicles.dm @@ -26,14 +26,6 @@ if(reagents && producing) generate_cum() -/obj/item/organ/genital/testicles/update_size() - if(size == 1) - size_name = "average" - if(size == 2) - size_name = "enlarged" - if(size >= 3) - size_name = "engorged" - /obj/item/organ/genital/testicles/proc/generate_cum() reagents.maximum_volume = fluid_max_volume if(reagents.total_volume >= reagents.maximum_volume) @@ -53,8 +45,7 @@ linked_organ = (owner.getorganslot("penis")) if(linked_organ) linked_organ.linked_organ = src - size = linked_organ.size - update_size() + else if(linked_organ) linked_organ.linked_organ = null @@ -67,8 +58,17 @@ /obj/item/organ/genital/testicles/update_appearance() if(owner) + if(size == 0) + size_name = "nonexistant" + if(size == 1) + size_name = "average" + if(size == 2) + size_name = "enlarged" + if(size >= 3) + size_name = "engorged" + if(!internal) - desc = "You see an [lowertext(size_name)] pair of testicles dangling." + desc = "You see an [size_name] pair of testicles dangling." else desc = "They don't have any testicles you can see." var/string From d4abb85641e600c7c4d4622788d4c81ff1aa8cff Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 2 Jun 2019 09:40:18 -0500 Subject: [PATCH 7/7] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 01b0b0415d..91a329c67b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -117,7 +117,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "balls_color" = "fff", "balls_amount" = 2, "balls_sack_size" = BALLS_SACK_SIZE_DEF, - "balls_shape" = "Pair", + "balls_shape" = "Single", "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT,