From 32b7deb869cc4322cc276c0732e4406b0a60636c Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 10 Apr 2025 01:15:44 +0300 Subject: [PATCH 1/2] visual bellies for taur characters weh --- .../code/modules/mob/living/species.dm | 7 ++ .../code/modules/mob/living/taur_belly.dm | 77 ++++++++++++++++++ .../genitals/taur_belly/taur_belly_drake.dmi | Bin 0 -> 10436 bytes code/__DEFINES/DNA.dm | 2 + code/__DEFINES/citadel_defines.dm | 12 ++- code/__HELPERS/_cit_helpers.dm | 6 ++ code/__HELPERS/global_lists.dm | 1 + code/__HELPERS/mobs.dm | 11 +++ code/modules/arousal/genitals.dm | 14 ++++ .../arousal/genitals_sprite_accessories.dm | 16 ++++ code/modules/client/preferences.dm | 57 ++++++++++++- code/modules/client/preferences_savefile.dm | 27 +++++- .../code/modules/arousal/arousalhud.dm | 5 ++ tgstation.dme | 1 + 14 files changed, 229 insertions(+), 7 deletions(-) create mode 100644 GainStation13/code/modules/mob/living/taur_belly.dm create mode 100644 GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi diff --git a/GainStation13/code/modules/mob/living/species.dm b/GainStation13/code/modules/mob/living/species.dm index 12fff6fc92..3c812443e8 100644 --- a/GainStation13/code/modules/mob/living/species.dm +++ b/GainStation13/code/modules/mob/living/species.dm @@ -5,6 +5,7 @@ var/obj/item/organ/genital/butt/butt = H.getorganslot(ORGAN_SLOT_BUTT) var/obj/item/organ/genital/belly/belly = H.getorganslot(ORGAN_SLOT_BELLY) var/obj/item/organ/genital/breasts/breasts = H.getorganslot(ORGAN_SLOT_BREASTS) + var/obj/item/organ/genital/taur_belly/tbelly = H.getorganslot(ORGAN_SLOT_TAUR_BELLY) //GS13 TAUR BELLY EDIT if(butt) if(butt.max_size > 0) @@ -18,6 +19,12 @@ belly.modify_size(size_change) else belly.modify_size(size_change) + if(tbelly) //GS13 TAUR BELLY EDIT + if(tbelly.max_size > 0) + if((tbelly.size + size_change) <= tbelly.max_size) + tbelly.modify_size(size_change) + else + tbelly.modify_size(size_change) if(breasts) if(breasts.max_size > 0) if((breasts.cached_size + size_change) <= breasts.max_size) diff --git a/GainStation13/code/modules/mob/living/taur_belly.dm b/GainStation13/code/modules/mob/living/taur_belly.dm new file mode 100644 index 0000000000..3ad4c92a90 --- /dev/null +++ b/GainStation13/code/modules/mob/living/taur_belly.dm @@ -0,0 +1,77 @@ +/obj/item/organ/genital/taur_belly //I know, I know a this is just a copy of belly.dm code. + name = "taur belly" + desc = "You see a belly on their taur body." + icon_state = "belly" + icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' //drake belly as placeholder + zone = BODY_ZONE_CHEST // ugh... I think this is a target on a health doll + slot = ORGAN_SLOT_TAUR_BELLY + w_class = 3 + size = 0 + var/max_size = 0 + shape = TAUR_BELLY_SHAPE_DEF//"taur_belly" + var/statuscheck = FALSE + genital_flags = UPDATE_OWNER_APPEARANCE|GENITAL_CAN_TAUR + masturbation_verb = "massage" + var/sent_full_message = TRUE //defaults to 1 since they're full to start + //var/inflatable = FALSE //For inflation connoisseurs not implemented yet + var/size_cached = 0 + var/prev_size = 0 + layer_index = TAUR_BELLY_LAYER_INDEX + + +/obj/item/organ/genital/taur_belly/modify_size(modifier, min = TAUR_BELLY_SIZE_DEF, max = TAUR_BELLY_SIZE_MAX) + var/new_value = clamp(size_cached + modifier, starting_size, max) + if(new_value == size_cached) + return + prev_size = size_cached + size_cached = new_value + size = round(size_cached) + update() + ..() + +/obj/item/organ/genital/taur_belly/update_appearance() + //GS13 + // Default settings + var/datum/sprite_accessory/S = GLOB.taur_belly_shapes_list[shape] //GS13 - get belly shape + var/icon_shape_state = S ? S.icon_state : "belly" + icon_state = "[icon_shape_state]_[size]" + //var/icon_shape = S ? S.icon : "hyperstation/icons/obj/genitals/belly.dmi" //fallback to default belly in case we cant find a shape + //icon = icon_shape + +// Fullnes not implemented yet +/* + switch(owner.fullness) + if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' //We use round belly to represent stuffedness + icon_state = "belly_round_[size]" + if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' + icon_state = "belly_round_[size+1]" + if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' + icon_state = "belly_round_[size+2]" +*/ + if(owner) + 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) + if(!H.dna.skin_tone_override) + icon_state += "_s" + else + color = "#[owner.dna.features["taur_belly_color"]]" + +/obj/item/organ/genital/taur_belly/get_features(mob/living/carbon/human/H) + var/datum/dna/D = H.dna + if(D.species.use_skintones && D.features["genitals_use_skintone"]) + color = SKINTONE2HEX(H.skin_tone) + else + color = "#[D.features["taur_belly_color"]]" + size = D.features["taur_belly_size"] + max_size = D.features["max_taur_belly_size"] + starting_size = D.features["belly_size"] + shape = D.features["taur_belly_shape"] + //inflatable = D.features["inflatable_belly"] + toggle_visibility(D.features["taur_belly_visibility"], FALSE) + + diff --git a/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi b/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e3cf3151fbe45b998cb12100365e4dc2d7033bcd GIT binary patch literal 10436 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 literal 0 HcmV?d00001 diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 730786b2c0..346dba8172 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -190,6 +190,8 @@ #define ORGAN_SLOT_BUTT "butt" // GS13 EDIT #define ORGAN_SLOT_BELLY "belly" +// GS13 EDIT +#define ORGAN_SLOT_TAUR_BELLY "taur_belly" ////organ defines #define STANDARD_ORGAN_THRESHOLD 100 diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index a5b36e862e..42fab39ca4 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -10,10 +10,11 @@ #define VAGINA_LAYER_INDEX 2 #define TESTICLES_LAYER_INDEX 3 #define BELLY_LAYER_INDEX 4 -#define GENITAL_LAYER_INDEX 5 -#define PENIS_LAYER_INDEX 6 +#define TAUR_BELLY_LAYER_INDEX 5 +#define GENITAL_LAYER_INDEX 6 +#define PENIS_LAYER_INDEX 7 -#define GENITAL_LAYER_INDEX_LENGTH 6 //keep it updated with each new index added, thanks. +#define GENITAL_LAYER_INDEX_LENGTH 7 //keep it updated with each new index added, thanks. //genital flags #define GENITAL_BLACKLISTED (1<<0) //for genitals that shouldn't be added to GLOB.genitals_list. @@ -72,6 +73,11 @@ #define DEF_BELLY_SHAPE "Soft Belly" //GS13 - More belly types +//GS13 EDIT TAUR BELLIES +#define TAUR_BELLY_SIZE_DEF 1 +#define TAUR_BELLY_SIZE_MAX 10 +#define TAUR_BELLY_SHAPE_DEF "Drake Belly" // GS13 - for future taur bodies... + //GS13 Port - Add back Arousal #define AROUSAL_MINIMUM_DEFAULT 0 #define AROUSAL_MAXIMUM_DEFAULT 100 diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index c885a5b996..474a3dd499 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_EMPTY(cock_shapes_list) GLOBAL_LIST_EMPTY(balls_shapes_list) GLOBAL_LIST_EMPTY(butt_shapes_list) GLOBAL_LIST_EMPTY(belly_shapes_list) +GLOBAL_LIST_EMPTY(taur_belly_shapes_list) // GS13 TAUR BELLY EDIT GLOBAL_LIST_EMPTY(breasts_shapes_list) GLOBAL_LIST_EMPTY(vagina_shapes_list) //longcat memes. @@ -136,6 +137,11 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) return TRUE return FALSE +/mob/living/carbon/proc/has_taur_belly() //GS13 EDIT TAUR BELLY + if(getorganslot(ORGAN_SLOT_TAUR_BELLY)) + return TRUE + return FALSE + /mob/living/carbon/proc/is_groin_exposed(list/L) if(!L) L = get_equipped_items() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 6d0a690672..5d7b8e1a99 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -58,6 +58,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/butt, GLOB.butt_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/belly, GLOB.belly_shapes_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/taur_belly, GLOB.taur_belly_shapes_list) //GS13 EDIT TAUR BELLY for(var/gpath in subtypesof(/obj/item/organ/genital)) var/obj/item/organ/genital/G = gpath diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fa2a7b06ae..d72ff09f1a 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -106,6 +106,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/ears/mam_ears, GLOB.mam_ears_list) if(!GLOB.mam_snouts_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts/mam_snouts, GLOB.mam_snouts_list) + if(!GLOB.taur_belly_shapes_list.len) //GS13 EDIT TAUR BELLY + init_sprite_accessory_subtypes(/datum/sprite_accessory/taur_belly, GLOB.taur_belly_shapes_list) //snowflake check so people's ckey features don't get randomly put on unmonkeys/spawns var/list/snowflake_mam_tails_list = list() @@ -222,6 +224,15 @@ "inflatable_belly" = FALSE, "belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), // GS13 EDIT END + // GS13 EDIT START - TAUR BELLY + "has_taur_belly" = FALSE, + "taur_belly_size" = TAUR_BELLY_SIZE_DEF, + "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, + "hide_taur_belly" = FALSE, + //"inflatable_belly" = FALSE, + "taur_belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES, + // GS13 EDIT END "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 49063c422f..76f125cf08 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -261,6 +261,8 @@ give_genital(/obj/item/organ/genital/butt) if(dna.features["has_belly"]) give_genital(/obj/item/organ/genital/belly) + if(dna.features["has_taur_belly"]) //GS13 EDIT TAUR BELLY + give_genital(/obj/item/organ/genital/taur_belly) /mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G) if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot))) @@ -322,6 +324,8 @@ S = GLOB.butt_shapes_list[G.shape] if(/obj/item/organ/genital/belly) S = GLOB.belly_shapes_list[G.shape] + if(/obj/item/organ/genital/taur_belly) //GS13 EDIT TAUR BELLY + S = GLOB.taur_belly_shapes_list[G.shape] if(!S || S.icon_state == "none") continue @@ -358,6 +362,8 @@ genital_overlay.color = "#[dna.features["butt_color"]]" if("belly_color") genital_overlay.color = "#[dna.features["belly_color"]]" + if("taur_belly_color") //GS13 EDIT TAUR BELLY + genital_overlay.color = "#[dna.features["taur_belly_color"]]" //GS13 - Because each genital's file has different naming schemes for their icon_states, // I've made it so each type is checked and the icon_state built based on which genital it is @@ -365,6 +371,9 @@ if("belly") genital_overlay.icon = G.icon genital_overlay.icon_state = "[G.icon_state]_[aroused_state]_[layertext]" + if("taur_belly") //GS13 EDIT TAUR BELLY + //genital_overlay.icon = G.icon + genital_overlay.icon_state = "[G.icon_state]_[aroused_state]_[layertext]" if("breasts") genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][(dna.species.use_skintones && !dna.skin_tone_override) ? "-s" : ""]_[aroused_state]_[layertext]" if("penis") @@ -405,6 +414,7 @@ var/buttCheck = getorganslot(ORGAN_SLOT_BUTT) var/ballCheck = getorganslot(ORGAN_SLOT_TESTICLES) var/bellyCheck = getorganslot(ORGAN_SLOT_BELLY) + var/taurbellyCheck = getorganslot(ORGAN_SLOT_TAUR_BELLY) //GS13 EDIT TAUR BELLY if(organCheck == FALSE) if(ishuman(src) && dna.species.use_skintones) @@ -415,6 +425,7 @@ dna.features["butt_color"] = "[dna.species.fixed_mut_color]" dna.features["belly_color"] = "[dna.species.fixed_mut_color]" dna.features["testicles_color"] = "[dna.species.fixed_mut_color]" + dna.features["taur_belly_color"] = "[dna.species.fixed_mut_color]" //GS13 EDIT TAUR BELLY return //So people who haven't set stuff up don't get rainbow surprises. dna.features["cock_color"] = "[dna.features["mcolor"]]" @@ -422,6 +433,7 @@ dna.features["butt_color"] = "[dna.features["mcolor"]]" dna.features["belly_color"] = "[dna.features["mcolor"]]" dna.features["testicles_color"] = "[dna.features["mcolor"]]" + dna.features["taur_belly_color"] = "[dna.features["mcolor"]]" //GS13 EDIT TAUR BELLY else //If there's a new organ, make it the same colour. if(breastCheck == FALSE) dna.features["breasts_color"] = dna.features["cock_color"] @@ -433,4 +445,6 @@ dna.features["belly_color"] = dna.features["belly_color"] else if (ballCheck == FALSE) dna.features["testicles_color"] = dna.features["testicles_color"] + else if (taurbellyCheck == FALSE) + dna.features["taur_belly_color"] = dna.features["taur_belly_color"] //GS13 EDIT TAUR BELLY return TRUE diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm index b8d0c9e9f9..8c55ba4d58 100644 --- a/code/modules/arousal/genitals_sprite_accessories.dm +++ b/code/modules/arousal/genitals_sprite_accessories.dm @@ -152,3 +152,19 @@ icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' icon_state = "round" name = "Round Belly" + +//GS13 EDIT TAUR BELLY +/datum/sprite_accessory/taur_belly // Generic taur belly + icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' + icon_state = "drake" + name = "generic taur belly" + color_src = "taur_belly_color" + //taur_dimension_x = 64 + feat_taur = "belly_taur" + center = TRUE + dimension_x = 64 + +/datum/sprite_accessory/taur_belly/drake + taur_icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' + icon_state = "drake" + name = "Drake Belly" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3cb2e1c7ce..7e64fe5ec7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/eye_type = DEFAULT_EYES_TYPE //Eye type var/split_eye_colors = FALSE var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES) + var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, /*"taur_inflatable_belly" = FALSE,*/ "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races @@ -869,8 +869,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Belly Visibility:[features["belly_visibility"]]" // GS13: tweak inflation description dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" - - + dat += "" + dat += "" + // GS13 EDIT TAUR BELLY START + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Taur Belly

" + dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" + if(features["has_taur_belly"]) + dat += "Color:
" + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" + else + dat += "#[features["taur_belly_color"]] Change
" + dat += "Belly Size: [features["taur_belly_size"]]" + dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" + dat += "Belly Shape: [features["taur_belly_shape"]]" + dat += "Belly Visibility:[features["taur_belly_visibility"]]" + //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" dat += "" dat += "" @@ -2840,7 +2855,40 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/n_vis = input(user, "Belly Visibility", "Character Preference") as null|anything in CONFIG_GET(str_list/safe_visibility_toggles) if(n_vis) features["belly_visibility"] = n_vis + //GS13 TAUR BELLY START + if("taur_belly_color") + var/new_bellycolor = input(user, "Belly Color:", "Character Preference", "#"+features["taur_belly_color"]) as color|null + if(new_bellycolor) + var/temp_hsv = RGBtoHSV(new_bellycolor) + if(new_bellycolor == "#000000") + features["taur_belly_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["taur_belly_color"] = sanitize_hexcolor(new_bellycolor, 6) + else + to_chat(user,"Invalid color. Your color is not bright enough.") + if("taur_belly_size") //GS13 Edit here if we add more belly sprites + // GS13: Adjust sprite ranges in char setup + var/new_bellysize = input(user, "Belly size :\n(1-10)", "Character Preference") as num|null + if(new_bellysize) + features["taur_belly_size"] = clamp(round(new_bellysize), 1, 10) + + if("max_taur_belly_size") + var/new_bellymax = input(user, "Max belly fat size :\n(0-9)", "Character Preference") as num|null + if(new_bellymax) + features["max_taur_belly_size"] = clamp(round(new_bellymax), 0, 10) + + if("taur_belly_shape") //GS13 - belly shapes + var/new_shape + new_shape = input(user, "Belly Type", "Character Preference") as null|anything in GLOB.taur_belly_shapes_list + if(new_shape) + features["taur_belly_shape"] = new_shape + + if("taur_belly_visibility") + var/n_vis = input(user, "Belly Visibility", "Character Preference") as null|anything in CONFIG_GET(str_list/safe_visibility_toggles) + if(n_vis) + features["taur_belly_visibility"] = n_vis + //GS13 TAUR BELLY END if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null @@ -3157,6 +3205,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["has_belly"] = !features["has_belly"] if("inflatable_belly") features["inflatable_belly"] = !features["inflatable_belly"] + //GS13 TAUR BELLY EDIT + if("has_taur_belly") + features["has_taur_belly"] = !features["has_taur_belly"] if("widescreenpref") widescreenpref = !widescreenpref user.client.view_size.setDefault(getScreenSize(widescreenpref)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 4bf91a6e0f..326dab2f29 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -704,7 +704,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/savefile/S = new /savefile(path) if(!S) return FALSE - features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, "taur_inflatable_belly" = FALSE, "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) S.cd = "/" if(!slot) @@ -901,6 +901,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_hide_belly"] >> features["hide_belly"] S["feature_inflatable_belly"] >> features["inflatable_belly"] + //GS13 EDIT TAUR BELLY features + S["feature_has_taur_belly"] >> features["has_taur_belly"] + S["feature_taur_belly_size"] >> features["taur_belly_size"] + S["feature_max_taur_belly_size"] >> features["max_taur_belly_size"] + S["feature_taur_belly_shape"] >> features["taur_belly_shape"] + S["feature_taur_belly_color"] >> features["taur_belly_color"] + S["feature_hide_taur_belly"] >> features["hide_taur_belly"] + //S["feature_inflatable_belly"] >> features["inflatable_belly"] + S["feature_taur_belly_visibility"] >> features["feature_taur_belly_visibility"] + // Flavor texts, Made into a standard. S["feature_flavor_text"] >> features["flavor_text"] S["feature_silicon_flavor_text"] >> features["silicon_flavor_text"] @@ -1086,6 +1096,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) features["belly_visibility"] = sanitize_inlist(features["belly_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + //GS13 TAUR BELLY EDIT START + features["taur_belly_shape"] = sanitize_inlist(features["taur_belly_shape"], GLOB.taur_belly_shapes_list, TAUR_BELLY_SHAPE_DEF) + features["taur_belly_visibility"] = sanitize_inlist(features["taur_belly_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + //GS13 TAUR BELLY EDIT END + custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") additional_language = sanitize_inlist(additional_language, GLOB.roundstart_languages, "None") @@ -1324,6 +1339,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"]) WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences) + //GS13 TAUR BELLY EDIT START + WRITE_FILE(S["feature_has_taur_belly"], features["has_taur_belly"]) + WRITE_FILE(S["feature_taur_belly_size"], features["taur_belly_size"]) + WRITE_FILE(S["feature_max_taur_belly_size"], features["max_taur_belly_size"]) + WRITE_FILE(S["feature_taur_belly_shape"], features["taur_belly_shape"]) + WRITE_FILE(S["feature_taur_belly_color"], features["taur_belly_color"]) + WRITE_FILE(S["feature_hide_taur_belly"], features["hide_taur_belly"]) + //WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"]) + //GS13 TAUR BELLY EDIT START END + WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"]) WRITE_FILE(S["feature_color_scheme"], features["color_scheme"]) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index b6ebec95c3..43ab8461f1 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -129,6 +129,11 @@ var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") E.toggle_visibility(picked_visibility) + if(href_list["hidetaur belly"]) + var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") + var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") + X.toggle_visibility(picked_visibility) + if(href_list["hidebutt"]) var/obj/item/organ/genital/butt/A = usr.getorganslot(ORGAN_SLOT_BUTT) var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") diff --git a/tgstation.dme b/tgstation.dme index eacade08ce..5e428c8471 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4066,6 +4066,7 @@ #include "GainStation13\code\modules\mob\living\fullness.dm" #include "GainStation13\code\modules\mob\living\nutribot.dm" #include "GainStation13\code\modules\mob\living\species.dm" +#include "GainStation13\code\modules\mob\living\taur_belly.dm" #include "GainStation13\code\modules\mob\living\vore\eating\trasheat_lists.dm" #include "GainStation13\code\modules\mod\modules\modules_fat.dm" #include "GainStation13\code\modules\power\energy_harvester.dm" From 70cd8397a499cef7be064633e8b51ec080396121 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 15 Apr 2025 03:41:09 +0300 Subject: [PATCH 2/2] Taur belly edit Taurs belly option shows only when tauric body is selected --- code/modules/client/preferences.dm | 33 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7e64fe5ec7..00d4f3eeca 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -872,22 +872,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "" // GS13 EDIT TAUR BELLY START - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Taur Belly

" - dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" - if(features["has_taur_belly"]) - dat += "Color:
" - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" - else - dat += "#[features["taur_belly_color"]] Change
" - dat += "Belly Size: [features["taur_belly_size"]]" - dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" - dat += "Belly Shape: [features["taur_belly_shape"]]" - dat += "Belly Visibility:[features["taur_belly_visibility"]]" - //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" - dat += "" - dat += "" + if(features["taur"] != "None") + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Taur Belly

" + dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" + if(features["has_taur_belly"]) + dat += "Color:
" + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" + else + dat += "#[features["taur_belly_color"]] Change
" + dat += "Belly Size: [features["taur_belly_size"]]" + dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" + dat += "Belly Shape: [features["taur_belly_shape"]]" + dat += "Belly Visibility:[features["taur_belly_visibility"]]" + //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" + dat += "" + dat += "" //Markings if(MARKINGS_CHAR_TAB)