From 2aa86157e1b049bbfe659c69152991310a28592c Mon Sep 17 00:00:00 2001 From: Poojawa Date: Sun, 26 May 2019 04:52:31 -0500 Subject: [PATCH] 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 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 z2LF41k2+8H{-u-!AR#Ta{<_7LNK= zSUbq}$)xL07&1paO}R_Bjz`kvPUk}mBh*tUt4YBNPbo_FU2}hB!O6i923=`reP%%qv;=|5r2g3fx{}?=^9^w`Nvtf+?8V;; z)wtLLbMd^zRr$~!4W87On}!_JgiiTZJB{!+qAgBRuyzhsOf$U2VNkpG(2Y7oi^DCQ z==kE}7FJtyb#7my)n7aPD{}08bNOw%0B8R{^$0eHJ%$Thbfq+pB*^wbg+f+vErshR ze9{(ZMTCnox<*-x~m_B7fHlY?y=q|10S^m?soRM z=f&NVP3sscv(jz02JT z^DwedK#zXrLP3*7s3tZc-au3d&8W;rMp=YrfV%oP&rB%Ha)ZFGYQ9EF&sCrzb`e;$ zW+F8hVRtItk@d>2G9QYXi%eElpsB$CXNiV7f$nBaAUFKL9Lw8-b{TEHhc9?95JO}^ z*CFE<%NH>_mz}XdiHy^TvNX9+uWFagDv~TN0_S5J;@(8NH*0{^q@6@W7Aj+AND{2S z(g0ICrW}uhTJZ|ZD0jy_fYl}ts7#ktofuo99+-Zeuoug4-~$AFB0**QGBB|+_&-s| zeLk1xO4SKu{c#ad4;HyS&=>AgnC>5ETvSCH?>hTIzNVznq;34n$RUK?z~@J};WzUH zcEh7_xRoi*4(AMiqI|+%N7#u=b4lfHu3*M1=6J-zQWY#dqqQLMJ~+OisYoV1E?ReX zY-+K9Kh!4PolzAtw4sHhRQXF$XC{|sjOM8vgEkU@rP5Kkgh6cikFxg1?X2u231vc! z2;xL#Tk@+yx_I5FEHzZAUmpJ{^n84!vQ1j{0H=P9@9Jj z;Zm}yTj{fbR!+cfWWCSHthCJ8-`v=k>a(eB^YM)t zu2q+i6z%Vmiv9C(vA!XF5_EVv6{$IN6!r3lEQU@5hx5dD9010~EI83G{ln`Ks9-Tr ziq&Ol)~fh6vo6XNL0b#cwk6#MDj1GxNol0b#Esll9D*j6KQOO{(P1IQsG{VvZWE|K zQkAX04)FK_hFKd-=~g)(-3CI5xfGH~8!2%x#(#SSrf*b^9oAa6AJf4Pw~S`eBvn#R zPhPxwL;Y$w^PQzJ>}TF)Z%&+u(`@r&j<& zyt;J<4zJIBhUbfA_0NyG1rRNjr%kB~_YZ@R0-1st7>92{?)_JM|JW7<*OhFeGsa%^ zq~GTFvzZq1t|CSg#fg472FM<7@eJ*cxdTavVgSkWGf^nvUW8xo-Tmt8gH|5^+Q~vH zAQjb)9z!AUf+J9@FuNdXqc+8SFO7QJUO>Up_8ykDyROkwc#KXjBPtky_=vA%eF!mwc?k+JDVt1(2 znXDaDazW1kO6j9$H=Vc$D4$1R8aJPN8M|HR@mB`&4&VAa#h#@vybJnRcVn$u1KPEK zQNoNSV&O{2wZDQO*v>x|aVpwSz(K}>$+lC#LqC7LQ)g)+T>7=-;EKQh!oZ$-eb{7R z@xtaX8Q>?DfKIPwOJiy*Qrz!Ik8mQm>Q(lA75v}f!Jkc%7Q*VNBEY~lVi{UA0%5#4 zuj-V9$7OCr3M_cc*BmYqF6eRS3w-6?i0s)D5*9Tum^yY+SNpM?P)hhmFXz?(qvA)V zMxKxLTJPBytw1eA@!FD{L z4+0s(WwMdOWikP94lohjPj|<-v{mIHHGV$Z%}Qs+E$(~J;*F_AcF4K2f&*Jaa=sme zp5{dFYIrMxb=me#+|$%m70uXX&wYF3*}is7sO&$mFz<&xI7Y;^TMg==sDeW94r@8o zxSW0)*FF{#-2x7p+p4X1v{Aw4{`XiwWwufubUL3>slS+;y_cb?$zzG8el)Tu;MI!~ z>6Ri{-=wMR(gL%ybUlruYVQSCd8Q2xPNTV}fHg=VQ`3>czMAjH1Jc;GyRL%>1y|K# zQpBJk1^rHzCG%+2xIF!na747msv24827)ISW$&36_!2MtO&N@jC>}F|5Wj?b92_5! zlxK&9)s~3x15b%)w{sT#4v4f^xHzfe$C49GgQ1DAjo(CVW(_ZMqp}x!)Iduz?u-^x zCdd$%-4{;oSfIPMsRrZBB>~=XW9*quC_pu-e@f6&I@chKxVlKA;3v@^bhwljHbP;V zKmDn5yNL^IMc%33(Q{XpHH3Q3MOVa>BL@kUvnw{~zHw+#s@zI8O9OD(8p>Oikd}in zDbQ8CHwJ}l+4mi%a1;t)GYI)(UDM{lZ5KN4A%GpGsp%iu}vV`*oYE&B+(+1vA!r= zI`3lsw+z-@HKJ5;BrDH)a_9FKywDLh;BiZuT5}VyWyuZ_9ifZU;3FfW(_Vo-;MhI) zd)%tDq}A0RVr!Ro1yBAgG=<4S_VPj>6nsXksWAlOkMQ5Of;8Jr!TxG&9{&viM-E{A zy*>>qxIqrv-}}&B+VU-WYU|nxi4m;;nau=iJ}j#fqYC7a*ZnbW(|7)OT*uVQq5n37 zxgPQBd(su}?Yp`=lV5w$qO+l1h){m7lgKP=X&#qC+QcOCccX?iSc5iieRezXY^V*L zuUbu*WlCk*VCBM;GrW!V`KC|;x)QN1?U9pA`wDR$IUhWJ4rwG^t?^dp^!!f=I4h(2vqN>ELil=(PN&Q9lf9zq0kTC zE5EePY+s+{p_RiCE%#5vUr<0J>iGW9#I|l@TSemx;l5UQXCon^!|l>vzNrqWEb8~( z_WCccf7CD7t9DDWz6zJLXw@r(1iV^FNA#LcK|dk=bUu%Q_2luiSg7ab-VxZG#dW0L z%m&oNRGSGpe9z^}ndk^(UPDSnOXRI@sz#la&x?gRO#ade&Ul*IU#c=yYIcmH_*lAH zSJgM^@g4YCFYTzJK0fE85w|F0m!DOLqvtu<^jvJ&kEC3kW9lWB_FTXuNviA{ob1S- z45Z!)eZ{+ze@QP486)~GW@c)`($*qin-M{}q0oCn{2zn~rVP%qQ({P<1WGAB?M;*9 zm_+!F+rE36RO{$sZxaH98_th^J>Dc-3cUlL^Jo&z$H8qTW0a^FH-Ey4J>?VJY&(|E zU*u;hcI|1*cdT_9qX_w*oE2YutrA9&hxO-Fg-aYc#g{Kf-M)l0xf(zg0-qsQ#(W%m z!apuDAIoLxwyY!;wo>r(OiR!CBkqxI(&OuOs}oz*BkfbT7A8-AF0R6dQ2KavRDA2S2Z}JJ&NBE_(ESnzZ=& zaBa(3($d)1V!`qc+OCoNg{iCv&W*3RqDcdE7}vAE<3)SF)tWrf^sVGA(Uf910&cZb-Pbw%poJ&!JXt?Wq)sJKGJh zLSyGE3Y_J)=kU#EmLrvEEosXQIq`7fIxfMm)23JU-HrA7rEY6za}T_SXqURSKbN6b zvM%yXikd&^xp;?LUMKYL8ur-2)@~La?UnsL=^292M3;}-wc?ZtB@!+Q^~NO~8aS{|cWp$!O{BmPs@y5dCD>gnZ2LfG zX=GL6>E>BSY>pGM_p2W?9DNHRa_6;$_<1WXq3$&`0vyaK(|+^)s(AIXe5gc)tp&!Z zgAqWVu7cI03bS^k^Pu5QMp!X?%t=BX4S8^il3yl+Ks98n{&yKVBzcDBDeT0aM}K3$ zc4j&43R2aI*h!`w6ap@wVXhLBZychN*d5|5g}j084l#6r59SR*br?sx_oG>W4c$R{ zNkti3gb}?s-&fRC(z8@ITcc@Zt^vgM)PZE#`uV-BdEl*KAvnc28@C<$w6U6apKDkN z2u5TwlDvnHUQeS@wZTHTGYPg*iJ@X0-IjmHV5PcR3fVsiSOsE__mw6m>cgDMr_>N4 zS;ne%ns+NLM91$1--w;`p|bGcZo%y?|P2+h5T5#04>{M-Y`TGr@~E!Reu-o+wjrFso{7C*G>r8)6?= zvpO}6!m?K@Cis`59Ow!#+wg}(tU|HrL;b)8?sBO$Nl2L$#QwS4&1`1Zk;+o1Xci&Ip* z3q0K=$R7V9eI_x?P`ncqJ)unSE@Y^%Ri&A@OEqRO>FA-SxSqv0`_@*?u9;ekwwEKT zM{&K2^Ck1bSh;{@wF-;L`V=T{z{FOc!09siI(75Rtj)hp790QZnp*Y4JDo0icRZD0 zK^@63XtneY8nRBSPYsMqrNBng0DdwRX>0JT54pe-F?(9-oOg?iJT>8({Q7D?&Xu1i3 z`dj#tZP+7Zjsj~rp(+m4WL0QCX5s20jM991UaFD>WcZH?(6A8$CN83YNaQW2w$7}- zePbyI7bg43p$V6n3!f-7F6S4>$vu>EL~6=DDSlU`s(VdSaA#5Fy5zJX=m?i0q2)?K zihT&n4E%1bx7R)OB|O>uX^AdkNxpxj+eoWUmg?`rL(gL;Y?}W5kqlQg1ta%Sb;&Ep z5t|)Zk3~ke@-nW6&4j9P^@8_)=dH}x-iboXDGP_-^OEymo|rFPH}bg1u>6uG;uD91H61mbcD%#IGC{2EofGUOHbW;OP8 zjq)kc)OTy7!M;?A(7)BFwy*Q%QL-{2HDBu1<*9og_it62{WuqQwQLK*?qupvxnBfE zATC*x5va+5Y7~(>0%7FP9k3~FJ&MACfT8E;LMVFNOx1;Cd*PVc@2+HAN2vs*w?^1ECI_#h&~KPgA{jedGo!&TKbzChL-hUq>bcNF ziAegEr!!W2Jbsc|3 zc{Zl9!0aLJHF+e4%I<4A_NWnso~_bc5v3lU2?UN8ckB70s2<9!OoZ4nd1I}nF)ub` zDt2~dOLa-6Jeb}yy6&>Q%c1n)%BpK@57c3_s>KYmoy@~W)ftU{WS~J*1lA@E1s@p` zr1k~8dF5#9cI&+}oB)QAVA#M5Zyrsht_b>kf1UD$ldYiqbqZU>q*MRrw+U$5cDU3y 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"