Skip to content

Commit

Permalink
pain
Browse files Browse the repository at this point in the history
  • Loading branch information
NullDagaf committed Oct 21, 2024
1 parent 7351a79 commit 63d327d
Show file tree
Hide file tree
Showing 21 changed files with 526 additions and 13 deletions.
6 changes: 3 additions & 3 deletions code/__DEFINES/~skyrat_defines/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@
#define PENIS_MAX_GIRTH 20
#define PENIS_DEFAULT_GIRTH 5 // a lil big but not by much
#define PENIS_MIN_LENGTH 1
#define PENIS_MAX_LENGTH 36
#define PENIS_MAX_LENGTH 128
#define PENIS_DEFAULT_LENGTH 6 //still a lil long but not insane

#define TESTICLES_MIN_SIZE 0
#define TESTICLES_MAX_SIZE 6
#define TESTICLES_MIN_SIZE 1
#define TESTICLES_MAX_SIZE 5

#define SHEATH_NONE "None"
#define SHEATH_NORMAL "Sheath"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/~skyrat_defines/lewd_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,7 @@
#define BREAST_SIZE_N "N"
#define BREAST_SIZE_O "O"
#define BREAST_SIZE_P "P"
#define BREAST_SIZE_R "R"
#define BREAST_SIZE_S "S"
#define BREAST_SIZE_T "T"
#define BREAST_SIZE_BEYOND_MEASUREMENT "beyond measurement"
9 changes: 8 additions & 1 deletion code/__DEFINES/~~~splurt_defines/DNA.dm
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
///arachnid organ slots
//sex
#define ORGAN_SLOT_BUTT "butt"
#define ORGAN_SLOT_BELLY "belly"
//arachnid organ slots
#define ORGAN_SLOT_EXTERNAL_MANDIBLES "mandibles"
#define ORGAN_SLOT_EXTERNAL_SPINNERET "spinneret"
#define ORGAN_SLOT_EXTERNAL_SPIDER_LEGS "spider_legs"


#define BUTT_MIN_SIZE 1
#define BUTT_MAX_SIZE 8
4 changes: 3 additions & 1 deletion modular_skyrat/modules/customization/__DEFINES/lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ GLOBAL_LIST_INIT(possible_genitals, list(
ORGAN_SLOT_TESTICLES,
ORGAN_SLOT_BREASTS,
ORGAN_SLOT_ANUS,
ORGAN_SLOT_PENIS
ORGAN_SLOT_PENIS,
ORGAN_SLOT_BUTT,
ORGAN_SLOT_BELLY
))

GLOBAL_LIST_EMPTY(body_markings)
Expand Down
18 changes: 10 additions & 8 deletions modular_skyrat/modules/customization/_globalvars/lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ GLOBAL_LIST_INIT(breast_size_translation, list(
"14" = BREAST_SIZE_N,
"15" = BREAST_SIZE_O,
"16" = BREAST_SIZE_P,
"17" = BREAST_SIZE_R,
"18" = BREAST_SIZE_S,
"19" = BREAST_SIZE_T,
))

GLOBAL_LIST_INIT(breast_size_to_number, list(
Expand All @@ -39,16 +42,17 @@ GLOBAL_LIST_INIT(breast_size_to_number, list(
BREAST_SIZE_N = 14,
BREAST_SIZE_O = 15,
BREAST_SIZE_P = 16,
BREAST_SIZE_R = 17,
BREAST_SIZE_S = 18,
BREAST_SIZE_T = 19,
))

GLOBAL_LIST_INIT(balls_size_translation, list(
"0" = "Small",
"1" = "Average",
"2" = "Big",
"3" = "Very Big",
"1" = "Small",
"2" = "Average",
"3" = "Big",
"4" = "Enormous",
"5" = "Immense",
"6" = "Gargantuan"
"5" = "Gargantuan"
))

GLOBAL_LIST_INIT(marking_zone_to_bitflag, list(
Expand Down Expand Up @@ -77,9 +81,7 @@ GLOBAL_LIST_INIT(preference_balls_sizes, list(
"Small",
"Average",
"Big",
"Very Big",
"Enormous",
"Immense",
"Gargantuan"
))

Expand Down
161 changes: 161 additions & 0 deletions modular_zzplurt/code/modules/client/preferences/genitals.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
//butt
/datum/preference/choiced/genital/butt
savefile_key = "feature_butt"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
default_accessory_type = /datum/sprite_accessory/genital/butt/none

/datum/preference/toggle/genital_skin_tone/butt
savefile_key = "butt_skin_tone"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
genital_pref_type = /datum/preference/choiced/genital/butt

/datum/preference/toggle/genital_skin_tone/butt/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["butt_uses_skintones"] = value

/datum/preference/toggle/genital_skin_color/butt
savefile_key = "butt_skin_color"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
genital_pref_type = /datum/preference/choiced/genital/butt

/datum/preference/toggle/genital_skin_color/butt/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
if(!..()) // Don't apply it if it failed the check in the parent.
value = FALSE

target.dna.features["butt_uses_skincolor"] = value

/datum/preference/numeric/butt_size
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "butt_size"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
minimum = BUTT_MIN_SIZE
maximum = BUTT_MAX_SIZE

/datum/preference/numeric/butt_size/is_accessible(datum/preferences/preferences)
var/passed_initial_check = ..(preferences)
var/allowed = preferences.read_preference(/datum/preference/toggle/allow_mismatched_parts)
var/erp_allowed = preferences.read_preference(/datum/preference/toggle/master_erp_preferences) && preferences.read_preference(/datum/preference/toggle/allow_genitals)
var/part_enabled = is_factual_sprite_accessory(relevant_mutant_bodypart, preferences.read_preference(/datum/preference/choiced/genital/butt))
return erp_allowed && part_enabled && (passed_initial_check || allowed)

/datum/preference/numeric/butt_size/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["butt_size"] = value

/datum/preference/numeric/butt_size/create_default_value()
return BUTT_MIN_SIZE

/datum/preference/tri_color/genital/butt
savefile_key = "butt_color"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
type_to_check = /datum/preference/choiced/genital/butt
skin_color_type = /datum/preference/toggle/genital_skin_color/butt

/datum/preference/tri_bool/genital/butt
savefile_key = "butt_emissive"
relevant_mutant_bodypart = ORGAN_SLOT_BUTT
type_to_check = /datum/preference/choiced/genital/butt
skin_color_type = /datum/preference/toggle/genital_skin_color/butt



//butthole
/datum/preference/choiced/genital/anus
savefile_key = "feature_anus"
relevant_mutant_bodypart = ORGAN_SLOT_ANUS
default_accessory_type = /datum/sprite_accessory/genital/anus/none

/datum/preference/choiced/genital/anus/is_accessible(datum/preferences/preferences)
return ..() && preferences.read_preference(/datum/preference/choiced/genital/butt) != "None"

/datum/preference/toggle/genital_skin_tone/anus
savefile_key = "anus_skin_tone"
relevant_mutant_bodypart = ORGAN_SLOT_ANUS
genital_pref_type = /datum/preference/choiced/genital/anus

/datum/preference/toggle/genital_skin_tone/anus/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["anus_uses_skintones"] = value

/datum/preference/toggle/genital_skin_color/anus
savefile_key = "anus_skin_color"
relevant_mutant_bodypart = ORGAN_SLOT_ANUS
genital_pref_type = /datum/preference/choiced/genital/anus

/datum/preference/toggle/genital_skin_color/anus/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
if(!..()) // Don't apply it if it failed the check in the parent.
value = FALSE

target.dna.features["anus_uses_skincolor"] = value


/datum/preference/tri_color/genital/anus
savefile_key = "anus_color"
relevant_mutant_bodypart = ORGAN_SLOT_ANUS
type_to_check = /datum/preference/choiced/genital/anus
skin_color_type = /datum/preference/toggle/genital_skin_color/anus

/datum/preference/tri_bool/genital/anus
savefile_key = "anus_emissive"
relevant_mutant_bodypart = ORGAN_SLOT_ANUS
type_to_check = /datum/preference/choiced/genital/anus
skin_color_type = /datum/preference/toggle/genital_skin_color/anus


//belly
/datum/preference/choiced/genital/belly
savefile_key = "feature_belly"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
default_accessory_type = /datum/sprite_accessory/genital/belly/none

/datum/preference/numeric/belly_size
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "belly_size"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
minimum = 1
maximum = 10

/datum/preference/numeric/belly_size/create_default_value()
return 1

/datum/preference/numeric/belly_size/is_accessible(datum/preferences/preferences)
var/passed_initial_check = ..(preferences)
var/allowed = preferences.read_preference(/datum/preference/toggle/allow_mismatched_parts)
var/erp_allowed = preferences.read_preference(/datum/preference/toggle/master_erp_preferences) && preferences.read_preference(/datum/preference/toggle/allow_genitals)
var/part_enabled = is_factual_sprite_accessory(relevant_mutant_bodypart, preferences.read_preference(/datum/preference/choiced/genital/belly))
return erp_allowed && part_enabled && (passed_initial_check || allowed)

/datum/preference/numeric/belly_size/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["belly_size"] = value


/datum/preference/toggle/genital_skin_tone/belly
savefile_key = "belly_skin_tone"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
genital_pref_type = /datum/preference/choiced/genital/belly

/datum/preference/toggle/genital_skin_tone/belly/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["belly_uses_skintones"] = value

/datum/preference/toggle/genital_skin_color/belly
savefile_key = "belly_skin_color"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
genital_pref_type = /datum/preference/choiced/genital/belly

/datum/preference/toggle/genital_skin_color/belly/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
if(!..()) // Don't apply it if it failed the check in the parent.
value = FALSE

target.dna.features["belly_uses_skincolor"] = value


/datum/preference/tri_color/genital/belly
savefile_key = "belly_color"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
type_to_check = /datum/preference/choiced/genital/belly
skin_color_type = /datum/preference/toggle/genital_skin_color/belly

/datum/preference/tri_bool/genital/belly
savefile_key = "belly_emissive"
relevant_mutant_bodypart = ORGAN_SLOT_BELLY
type_to_check = /datum/preference/choiced/genital/belly
skin_color_type = /datum/preference/toggle/genital_skin_color/belly
73 changes: 73 additions & 0 deletions modular_zzplurt/code/modules/sprite_accessories/genitals.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/datum/sprite_accessory/genital/penis
icon = 'modular_zzplurt/icons/mob/human/genitals/penis.dmi'

/datum/sprite_accessory/genital/testicles
icon = 'modular_zzplurt/icons/mob/human/genitals/testicles.dmi'

/datum/sprite_accessory/genital/vagina
icon = 'modular_zzplurt/icons/mob/human/genitals/vagina.dmi'

/datum/sprite_accessory/genital/breasts
icon = 'modular_zzplurt/icons/mob/human/genitals/breasts.dmi'

/datum/sprite_accessory/genital/butt
icon = 'modular_zzplurt/icons/mob/human/genitals/butt.dmi'
organ_type = /obj/item/organ/external/genital/butt
associated_organ_slot = ORGAN_SLOT_BUTT
key = ORGAN_SLOT_BUTT
color_src = USE_MATRIXED_COLORS
always_color_customizable = TRUE
relevent_layers = list(BODY_ADJ_LAYER)
genetic = TRUE


/datum/sprite_accessory/genital/butt/none
icon_state = "none"
name = SPRITE_ACCESSORY_NONE
factual = FALSE
color_src = null

/datum/sprite_accessory/genital/butt/pair
icon_state = "pair"
name = "Pair"



/datum/sprite_accessory/genital/anus
icon = 'modular_zzplurt/icons/mob/human/genitals/anus.dmi'
organ_type = /obj/item/organ/external/genital/anus
associated_organ_slot = ORGAN_SLOT_BUTT // :3
key = ORGAN_SLOT_ANUS
color_src = USE_MATRIXED_COLORS
always_color_customizable = TRUE
relevent_layers = list(BODY_FRONT_LAYER)
genetic = TRUE

/datum/sprite_accessory/genital/anus/normal
icon_state = "donut"
color_src = USE_MATRIXED_COLORS
name = "Donut"

/datum/sprite_accessory/genital/anus/squished
icon_state = "squished"
name = "Squished"
color_src = USE_MATRIXED_COLORS


/datum/sprite_accessory/genital/belly
icon = 'modular_zzplurt/icons/mob/human/genitals/belly.dmi'
organ_type = /obj/item/organ/external/genital/belly
associated_organ_slot = ORGAN_SLOT_BELLY
key = ORGAN_SLOT_BELLY
genetic = TRUE

/datum/sprite_accessory/genital/belly/none
icon_state = "none"
name = SPRITE_ACCESSORY_NONE
factual = FALSE
color_src = null

/datum/sprite_accessory/genital/belly/normal
icon_state = "pair" //????
name = "Belly"
color_src = null
18 changes: 18 additions & 0 deletions modular_zzplurt/code/modules/surgery/organs/genitals/anus.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas)
var/u_His = owner?.p_their() || "their"

desc = "You see [u_His] squishy [lowertext(gas.icon_state)] pucker parting [u_His] asscheeks"

/obj/item/organ/external/genital/anus/get_sprite_size_string()
. = "[genital_type]_[floor(genital_size)]"
if(uses_skintones)
. += "_s"

/obj/item/organ/external/genital/anus/build_from_dna(datum/dna/DNA, associated_key)
set_size(DNA.features["butt_size"]) // yes
uses_skin_color = DNA.features["anus_uses_skincolor"]

return ..()

/datum/bodypart_overlay/mutant/genital/anus
layers = EXTERNAL_FRONT
Loading

0 comments on commit 63d327d

Please sign in to comment.