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 1869e082de..b0dc1d7aef 100644 Binary files a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi and b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi differ diff --git a/modular_citadel/icons/obj/genitals/penis.dmi b/modular_citadel/icons/obj/genitals/penis.dmi index 02597b3cdb..397fa335e5 100644 Binary files a/modular_citadel/icons/obj/genitals/penis.dmi and b/modular_citadel/icons/obj/genitals/penis.dmi differ diff --git a/modular_citadel/icons/obj/genitals/penis_onmob.dmi b/modular_citadel/icons/obj/genitals/penis_onmob.dmi index 0ab1b951a7..2457759b73 100644 Binary files a/modular_citadel/icons/obj/genitals/penis_onmob.dmi and b/modular_citadel/icons/obj/genitals/penis_onmob.dmi differ diff --git a/modular_citadel/icons/obj/genitals/testicles.dmi b/modular_citadel/icons/obj/genitals/testicles.dmi new file mode 100644 index 0000000000..3d7a5f4f48 Binary files /dev/null and b/modular_citadel/icons/obj/genitals/testicles.dmi differ diff --git a/modular_citadel/icons/obj/genitals/testicles_onmob.dmi b/modular_citadel/icons/obj/genitals/testicles_onmob.dmi new file mode 100644 index 0000000000..581bcb0583 Binary files /dev/null and b/modular_citadel/icons/obj/genitals/testicles_onmob.dmi differ diff --git a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi index e6ad183687..f5daa3fea1 100644 Binary files a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi and b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi differ