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 0000000000..e3cf3151fb Binary files /dev/null and b/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi differ 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..00d4f3eeca 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,10 +869,26 @@ 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 + if(features["taur"] != "None") + dat += APPEARANCE_CATEGORY_COLUMN + dat += "