From 04ac289ad1be26ca182634c3982a11eb595c9662 Mon Sep 17 00:00:00 2001 From: GremlingSS <68038883+GremlingSS@users.noreply.github.com> Date: Fri, 6 May 2022 11:56:19 +0100 Subject: [PATCH 1/5] initial files --- code/__defines/dna_arfs.dm | 20 +++++++++++++++++++ content_arfs/code/lewd/preference/09_lewd.dm | 0 .../code/lewd/preference/preferences.dm | 2 ++ content_arfs/code/lewd/readme.md | 3 +++ vorestation.dme | 3 +++ 5 files changed, 28 insertions(+) create mode 100644 code/__defines/dna_arfs.dm create mode 100644 content_arfs/code/lewd/preference/09_lewd.dm create mode 100644 content_arfs/code/lewd/preference/preferences.dm create mode 100644 content_arfs/code/lewd/readme.md diff --git a/code/__defines/dna_arfs.dm b/code/__defines/dna_arfs.dm new file mode 100644 index 00000000000..0e75c0e3485 --- /dev/null +++ b/code/__defines/dna_arfs.dm @@ -0,0 +1,20 @@ +// Skyrat port + +// file contains macros for sheathes, seething sheaths, very angry things, I'll tell you that. Infact, so angry, I'm trembling. + +//In inches +#define PENIS_MAX_GIRTH 15 +#define PENIS_MIN_LENGTH 1 +#define PENIS_MAX_LENGTH 20 + +#define SHEATH_NONE "None" +#define SHEATH_NORMAL "Sheath" +#define SHEATH_SLIT "Slit" +#define SHEATH_MODES list(SHEATH_NONE, SHEATH_NORMAL, SHEATH_SLIT) + +#define MANDATORY_FEATURE_LIST list("mcolor" = "#FFFFBB","mcolor2" = "#FFFFBB","mcolor3" = "#FFFFBB","ethcolor" = "#FFCCCC","skin_color" = "#FFEEDD","flavor_text" = "","breasts_size" = 1,"breasts_lactation" = FALSE,"penis_size" = 13,"penis_girth" = 9,"penis_taur_mode" = TRUE,"penis_sheath" = SHEATH_NONE ,"balls_size" = 1, "body_size" = BODY_SIZE_NORMAL, "custom_species" = null, penis_uses_skintones = TRUE, penis_uses_skincolor = TRUE, testicles_uses_skintones = TRUE, testicles_uses_skincolor = TRUE, vagina_uses_skintones = TRUE, vagina_uses_skincolor = TRUE, breasts_uses_skintones = TRUE, breasts_uses_skincolor = TRUE) + +#define AROUSAL_CANT 0 +#define AROUSAL_NONE 1 +#define AROUSAL_PARTIAL 2 +#define AROUSAL_FULL 3 \ No newline at end of file diff --git a/content_arfs/code/lewd/preference/09_lewd.dm b/content_arfs/code/lewd/preference/09_lewd.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/content_arfs/code/lewd/preference/preferences.dm b/content_arfs/code/lewd/preference/preferences.dm new file mode 100644 index 00000000000..41ceba44529 --- /dev/null +++ b/content_arfs/code/lewd/preference/preferences.dm @@ -0,0 +1,2 @@ +/datum/preferences + \ No newline at end of file diff --git a/content_arfs/code/lewd/readme.md b/content_arfs/code/lewd/readme.md new file mode 100644 index 00000000000..c5548e2fe4e --- /dev/null +++ b/content_arfs/code/lewd/readme.md @@ -0,0 +1,3 @@ +Most of the skyrat sex mechanics port is here. Other locations include: + +dna_arfs.dm located in __defines. diff --git a/vorestation.dme b/vorestation.dme index 86e94acc953..9b00ddba26c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -45,6 +45,7 @@ #include "code\__defines\crafting.dm" #include "code\__defines\damage_organs.dm" #include "code\__defines\dna.dm" +#include "code\__defines\dna_arfs.dm" #include "code\__defines\exosuit_fab.dm" #include "code\__defines\flags.dm" #include "code\__defines\gamemode.dm" @@ -4142,6 +4143,8 @@ #include "content_arfs\code\donater\suits.dm" #include "content_arfs\code\donater\ties.dm" #include "content_arfs\code\donater\under.dm" +#include "content_arfs\code\lewd\preference\09_lewd.dm" +#include "content_arfs\code\lewd\preference\preferences.dm" #include "content_arfs\code\loadout\cagse.dm" #include "content_arfs\code\loadout\custom_items.dm" #include "content_arfs\code\loadout\loadout_accessories.dm" From de26a352afa639995cab1d9bb55ce27a53997194 Mon Sep 17 00:00:00 2001 From: GremlingSS <68038883+GremlingSS@users.noreply.github.com> Date: Fri, 6 May 2022 13:02:59 +0100 Subject: [PATCH 2/5] preference options added --- .../code/lewd/preference/preferences.dm | 82 ++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/content_arfs/code/lewd/preference/preferences.dm b/content_arfs/code/lewd/preference/preferences.dm index 41ceba44529..35d6736ba2d 100644 --- a/content_arfs/code/lewd/preference/preferences.dm +++ b/content_arfs/code/lewd/preference/preferences.dm @@ -1,2 +1,82 @@ /datum/preferences - \ No newline at end of file + // The weiner part. + var/penis // penis ref // var/datum/sprite_accessory/genital/penis/none/default = /datum/sprite_accessory/genital/penis/none + var/r_penis = 179 // Genital color + var/g_penis = 148 // Genital color + var/b_penis = 116 // Genital color + + var/emissive_penis = 0 // bool + + var/r_penis_emissive = 0 // int 0 - 255 + var/g_penis_emissive = 0 // int 0 - 255 + var/b_penis_emissive = 0 // int 0 - 255 + + var/penis_uses_skincolor = 0 // bool + var/penis_size = round((PENIS_MIN_LENGTH + PENIS_MAX_LENGTH) / 2) + var/penis_girth = round((PENIS_MIN_LENGTH + PENIS_MAX_GIRTH) / 2) + + var/penis_taur = 0 // bool + + // The place to hide the weiner. + var/penis_sheath = SHEATH_NONE // SHEATH_ Macro + var/r_penis_sheath = 0 // int 0 - 255 + var/g_penis_sheath = 0 // int 0 - 255 + var/b_penis_sheath = 0 // int 0 - 255 + + // it it spelt like testicles, or testicals 🤔 + var/testicles + var/r_testicles = 179 // int 0 - 255 + var/g_testicles = 148 // int 0 - 255 + var/b_testicles = 116 // int 0 - 255 + + var/testicles_uses_skincolor = 0 // bool + + var/emissive_testicles = 0 // bool + + var/r_testicles_emissive = 0 // int 0 - 255 + var/g_testicles_emissive = 0 // int 0 - 255 + var/b_testicles_emissive = 0 // int 0 - 255 + + var/balls_size = 2 // int, idk why it aint a macro, what the fuck does 2 mean, 2 miles? 2 kilometers? yeah, huge difference bud. + + // gimme da poosy b0ss + var/vagina + var/r_vagina = 179 // int 0 - 255 + var/g_vagina = 148 // int 0 - 255 + var/b_vagina = 116 // int 0 - 255 + + var/vagina_uses_skincolor = 0 // bool + + var/emissive_vagina = 0 // bool + + var/r_vagina_emissive = 0 // int 0 - 255 + var/g_vagina_emissive = 0 // int 0 - 255 + var/b_vagina_emissive = 0 // int 0 - 255 + + var/womb // ..if you thought vagina was enough, wait till you see there's a womb included too! + + // succulent, moist, wait- moist? wtf? no??? + var/breasts + var/r_breasts = 179 // int 0 - 255 + var/g_breasts = 148 // int 0 - 255 + var/b_breasts = 116 // int 0 - 255 + + var/breasts_uses_skincolor = 0 // bool + + var/emissive_breasts = 0 // bool + + var/r_breasts_emissive = 0 // int 0 - 255 + var/g_breasts_emissive = 0 // int 0 - 255 + var/b_breasts_emissive = 0 // int 0 - 255 + + + // oh that's why it's moist, huh. + var/breasts_lactation + + var/breasts_size = 4 // int + + // The forbidden gay 🍑, if you eat it you become gay. Or straight, whatever rocks your boat. + var/anus + + + // :fuckingdead: \ No newline at end of file From 47e966c35239c107fcfd8723c51976f544923cd0 Mon Sep 17 00:00:00 2001 From: GremlingSS <68038883+GremlingSS@users.noreply.github.com> Date: Fri, 6 May 2022 19:55:06 +0100 Subject: [PATCH 3/5] milestone point 1, 250 errors, poggers! --- code/__defines/items_clothing.dm | 6 + .../mob/living/carbon/human/examine.dm | 2 + content_arfs/code/lewd/examine.dm | 11 + content_arfs/code/lewd/human.dm | 85 +++ content_arfs/code/lewd/obj_flags.dm | 4 + content_arfs/code/lewd/organs.dm | 493 ++++++++++++++++++ .../code/lewd/preference/preferences.dm | 10 +- content_arfs/code/lewd/readme.md | 3 +- content_arfs/code/lewd/sprite_accessories.dm | 294 +++++++++++ vorestation.dme | 5 + 10 files changed, 910 insertions(+), 3 deletions(-) create mode 100644 content_arfs/code/lewd/examine.dm create mode 100644 content_arfs/code/lewd/human.dm create mode 100644 content_arfs/code/lewd/obj_flags.dm create mode 100644 content_arfs/code/lewd/organs.dm create mode 100644 content_arfs/code/lewd/sprite_accessories.dm diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index a7dba8be88c..49244e99cde 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -129,6 +129,12 @@ #define HAND_LEFT 0x800 #define HAND_RIGHT 0x1000 #define HANDS 0x1800 // HAND_LEFT | HAND_RIGHT +#define PENIS 0x2000 // ARFS ADD: ERP MECHANICS +#define WOMB 0x2200 // ARFS ADD: ERP MECHANICS +#define VAGINA 0x2400 // ARFS ADD: ERP MECHANICS +#define TESTICLES 0x2600 // ARFS ADD: ERP MECHANICS +#define BREASTS 0x2800 // ARFS ADD: ERP MECHANICS +#define ANUS 0x2800 // ARFS ADD: ERP MECHANICS #define FULL_BODY 0xFFFF // Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index fa75fb5e912..e9ce877c405 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -307,6 +307,8 @@ msg += vorestrings //VOREStation Add End + msg += GetGenitalExamine(T) // ARFS ADD: Genital examination message. + if(mSmallsize in mutations) msg += "[T.He] [T.is] very short!" diff --git a/content_arfs/code/lewd/examine.dm b/content_arfs/code/lewd/examine.dm new file mode 100644 index 00000000000..b695689005b --- /dev/null +++ b/content_arfs/code/lewd/examine.dm @@ -0,0 +1,11 @@ +/mob/living/carbon/human/proc/GetGenitalExamine(var/datum/gender/T) + var/list/msg + for(var/genital in list("penis", "testicles", "vagina", "breasts", "anus")) + if(dna.species.mutant_bodyparts[genital]) + var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]] + if(G) + if(!(G.is_hidden(src))) + msg += "[T.he] has exposed genitals... Look closer..." + break + + return msg \ No newline at end of file diff --git a/content_arfs/code/lewd/human.dm b/content_arfs/code/lewd/human.dm new file mode 100644 index 00000000000..13c1d38d36a --- /dev/null +++ b/content_arfs/code/lewd/human.dm @@ -0,0 +1,85 @@ +/mob/living/carbon/human + var/disable_erp_preferences = 0 // the almighty toggle. + + // The weiner part. + var/datum/sprite_accessory/genital/penis/penis + var/r_penis = 179 // Genital color + var/g_penis = 148 // Genital color + var/b_penis = 116 // Genital color + + var/emissive_penis = 0 // bool + + var/r_penis_emissive = 0 // int 0 - 255 + var/g_penis_emissive = 0 // int 0 - 255 + var/b_penis_emissive = 0 // int 0 - 255 + + var/penis_uses_skintones = 0 // bool + var/penis_uses_skincolor = 0 // bool + var/penis_size = 11 + var/penis_girth = 6 + + var/penis_taur = 0 // bool + + // The place to hide the weiner. + var/penis_sheath = SHEATH_NONE // SHEATH_ Macro + var/r_penis_sheath = 0 // int 0 - 255 + var/g_penis_sheath = 0 // int 0 - 255 + var/b_penis_sheath = 0 // int 0 - 255 + + // is it spelt like testicles, or testicals 🤔 + var/datum/sprite_accessory/genital/testicles/testicles + var/r_testicles = 179 // int 0 - 255 + var/g_testicles = 148 // int 0 - 255 + var/b_testicles = 116 // int 0 - 255 + + var/testicles_uses_skintones = 0 // bool + var/testicles_uses_skincolor = 0 // bool + + var/emissive_testicles = 0 // bool + + var/r_testicles_emissive = 0 // int 0 - 255 + var/g_testicles_emissive = 0 // int 0 - 255 + var/b_testicles_emissive = 0 // int 0 - 255 + + var/balls_size = 2 // int, idk why it aint a macro, what the fuck does 2 mean, 2 miles? 2 kilometers? yeah, huge difference bud. + + // gimme da poosy b0ss + var/datum/sprite_accessory/genital/vagina/vagina + var/r_vagina = 179 // int 0 - 255 + var/g_vagina = 148 // int 0 - 255 + var/b_vagina = 116 // int 0 - 255 + + var/vagina_uses_skintones = 0 // bool + var/vagina_uses_skincolor = 0 // bool + + var/emissive_vagina = 0 // bool + + var/r_vagina_emissive = 0 // int 0 - 255 + var/g_vagina_emissive = 0 // int 0 - 255 + var/b_vagina_emissive = 0 // int 0 - 255 + + var/sprite_accessory/genital/womb/womb // ..if you thought vagina was enough, wait till you see there's a womb included too! + + // succulent, moist, wait- moist? wtf? no??? + var/sprite_accessory/genital/breasts/breasts + var/r_breasts = 179 // int 0 - 255 + var/g_breasts = 148 // int 0 - 255 + var/b_breasts = 116 // int 0 - 255 + + var/breasts_uses_skintones = 0 // bool + var/breasts_uses_skincolor = 0 // bool + + var/emissive_breasts = 0 // bool + + var/r_breasts_emissive = 0 // int 0 - 255 + var/g_breasts_emissive = 0 // int 0 - 255 + var/b_breasts_emissive = 0 // int 0 - 255 + + + // oh that's why it's moist, huh. + var/breasts_lactation + + var/breasts_size = 4 // int + + // The forbidden gay 🍑, if you eat it you become gay. Or straight, whatever rocks your boat. + var/anus diff --git a/content_arfs/code/lewd/obj_flags.dm b/content_arfs/code/lewd/obj_flags.dm new file mode 100644 index 00000000000..f6405038553 --- /dev/null +++ b/content_arfs/code/lewd/obj_flags.dm @@ -0,0 +1,4 @@ +#define GENITAL_SKIP_VISIBILITY 0 +#define GENITAL_NEVER_SHOW 1 +#define GENITAL_HIDDEN_BY_CLOTHES 2 +#define GENITAL_ALWAYS_SHOW 3 \ No newline at end of file diff --git a/content_arfs/code/lewd/organs.dm b/content_arfs/code/lewd/organs.dm new file mode 100644 index 00000000000..4c32c041d0e --- /dev/null +++ b/content_arfs/code/lewd/organs.dm @@ -0,0 +1,493 @@ +#define O_PENIS "penis" +#define O_WOMB "womb" +#define O_VAGINA "vagina" +#define O_TESTICLES "testicles" +#define O_BREASTS "breasts" +#define O_ANUS "anus" + +/obj/item/organ/external/genital + parent_organ = BP_GROIN + + var/genital_size = 1 // Size to be translated. + var/genital_name = "Human" // Sprite + var/genital_type = SPECIES_HUMAN // Type like tapered, human, etc. + var/sprite_suffix // suffix for which sprite is used [sprite]_suffix + var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES // used to determine if it should be shown through clothing. + var/aroused = AROUSAL_NONE // You can very much guess what this does B) + var/uses_skintones = FALSE // be the color of the skin _tone_ the player has. + var/uses_skin_color = FALSE // be the color of the skin the player has. + var/genital_location = LOWER_TORSO // location, for clothing..? + +//This translates the float size into a sprite string +/obj/item/organ/external/genital/proc/get_sprite_size_string() + return 0 + +//This translates the float size into a sprite string +/obj/item/organ/external/genital/proc/update_sprite_suffix() + sprite_suffix = "[get_sprite_size_string()]" + +/obj/item/organ/external/genital/proc/get_description_string(datum/sprite_accessory/genital/gas) + return "You see genitals" + +/obj/item/organ/external/genital/proc/update_genital_icon_state() + return + +/obj/item/organ/external/genital/proc/set_size(size) + genital_size = size + update_sprite_suffix() + +/obj/item/organ/external/genital/Initialize() + . = ..() + update_sprite_suffix() + +/obj/item/organ/external/genital/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected) + if(target.client.prefs.disable_erp_preferences) + return + . = ..() + +/obj/item/organ/external/genital/handle_organ_mod_special(var/removed = FALSE) + . = ..() + update_genital_icon_state() + +/obj/item/organ/external/genital/proc/build_from_dna(datum/dna/DNA, associated_key) + //var/datum/sprite_accessory/genital/accessory = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] + //genital_name = accessory.name + //genital_type = accessory.icon_state + //build_from_accessory(accessory, DNA) + update_sprite_suffix() + +/// for specific build_from_dna behavior that also checks the genital accessory. +/obj/item/organ/external/genital/proc/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + return + +/obj/item/organ/external/genital/proc/is_exposed() + if(!owner) + return TRUE + + if(!ishuman(owner)) + return TRUE + + var/mob/living/carbon/human/human = owner + + switch(visibility_preference) + if(GENITAL_ALWAYS_SHOW) + return TRUE + if(GENITAL_HIDDEN_BY_CLOTHES) + if((human.w_uniform && human.w_uniform.body_parts_covered & genital_location) || (human.wear_suit && human.wear_suit.body_parts_covered & genital_location)) + return FALSE + else + return TRUE + else + return FALSE + +// Penoos +/obj/item/organ/external/genital/penis + name = "penis" + desc = "A male reproductive organ." + icon_state = "penis" + icon = 'modular_skyrat/master_files/icons/obj/genitals/penis.dmi' + + genital_location = LOWER_TORSO + parent_organ = BP_GROIN + + organ_tag = O_PENIS + body_part = LOWER_TORSO + + cannot_break = 1 + + var/girth = 9 + var/sheath = SHEATH_NONE + +/obj/item/organ/external/genital/penis/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "" + var/pname = lowertext(genital_name) == "nondescript" ? "" : lowertext(genital_name) + " " + if(sheath != SHEATH_NONE && aroused != AROUSAL_FULL) //Hidden in sheath + switch(sheath) + if(SHEATH_NORMAL) + returned_string = "You see a sheath." + if(SHEATH_SLIT) + returned_string = "You see a slit." ///Typo fix. + if(aroused == AROUSAL_PARTIAL) + returned_string += " There's a [pname]penis poking out of it." + else + returned_string = "You see a [pname]penis. You estimate it's [genital_size] inches long, and [girth] inches in circumference." + switch(aroused) + if(AROUSAL_NONE) + returned_string += " It seems flaccid." + if(AROUSAL_PARTIAL) + returned_string += " It's partically erect." + if(AROUSAL_FULL) + returned_string += " It's fully erect." + return returned_string + +/obj/item/organ/external/genital/penis/update_genital_icon_state() + var/size_affix + var/measured_size = FLOOR(genital_size,1) + if(measured_size < 1) + measured_size = 1 + switch(measured_size) + if(1 to 10) + size_affix = "1" + if(11 to 15) + size_affix = "2" + if(16 to 24) + size_affix = "3" + else + size_affix = "4" + var/passed_string = "penis_[genital_type]_[size_affix]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/penis/get_sprite_size_string() + if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time! + var/poking_out = 0 + if(aroused == AROUSAL_PARTIAL) + poking_out = 1 + return "[lowertext(sheath)]_[poking_out]" + + var/size_affix + var/measured_size = FLOOR(genital_size,1) + var/is_erect = 0 + if(aroused == AROUSAL_FULL) + is_erect = 1 + if(measured_size < 1) + measured_size = 1 + switch(measured_size) + if(1 to 10) + size_affix = "1" + if(11 to 15) + size_affix = "2" + if(16 to 24) + size_affix = "3" + else + size_affix = "4" + var/passed_string = "[genital_type]_[size_affix]_[is_erect]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/obj/item/organ/external/genital/penis/build_from_dna(datum/dna/DNA, associated_key) + ..() + girth = owner.penis_girth + uses_skin_color = owner.penis_uses_skincolor + set_size(owner.penis_size) + +/obj/item/organ/external/genital/penis/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + var/datum/sprite_accessory/genital/penis/snake = accessory + if(snake.can_have_sheath) + sheath = owner.penis_sheath + if(owner.penis_uses_skintones) + uses_skintones = accessory.has_skintone_shading + +/obj/item/organ/external/genital/testicles + name = "testicles" + desc = "A male reproductive organ." + icon_state = "testicles" + icon = 'modular_skyrat/master_files/icons/obj/genitals/testicles.dmi' + + parent_organ = BP_GROIN + genital_location = LOWER_TORSO + + organ_tag = O_TESTICLES + body_part = LOWER_TORSO + + cannot_break = 1 + + aroused = AROUSAL_CANT + +/obj/item/organ/external/genital/testicles/update_genital_icon_state() + var/measured_size = clamp(genital_size, 1, 3) + var/passed_string = "testicles_[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas) + if(genital_name == "Internal") //Checks if Testicles are of Internal Variety + visibility_preference = GENITAL_SKIP_VISIBILITY //Removes visibility if yes. + else + return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]." + +/obj/item/organ/external/genital/testicles/build_from_dna(datum/dna/DNA, associated_key) + ..() + uses_skin_color = owner.testicles_uses_skincolor + set_size(owner.balls_size) + +/obj/item/organ/external/genital/testicles/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(owner.testicles_uses_skintones) + uses_skintones = accessory.has_skintone_shading + +/obj/item/organ/external/genital/testicles/get_sprite_size_string() + var/measured_size = FLOOR(genital_size,1) + measured_size = clamp(measured_size, 0, 3) + var/passed_string = "[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/obj/item/organ/external/genital/vagina + name = "vagina" + icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi' + icon_state = "vagina" + + parent_organ = BP_GROIN + genital_location = LOWER_TORSO + + organ_tag = O_VAGINA + body_part = LOWER_TORSO + + cannot_break = 1 + +/obj/item/organ/external/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see a [lowertext(genital_name)] vagina." + if(lowertext(genital_name) == "cloaca") + returned_string = "You see a cloaca." //i deserve a pipebomb for this + switch(aroused) + if(AROUSAL_NONE) + returned_string += " It seems dry." + if(AROUSAL_PARTIAL) + returned_string += " It's glistening with arousal." + if(AROUSAL_FULL) + returned_string += " It's bright and dripping with arousal." + return returned_string + +/obj/item/organ/external/genital/vagina/get_sprite_size_string() + var/is_dripping = 0 + if(aroused == AROUSAL_FULL) + is_dripping = 1 + return "[genital_type]_[is_dripping]" + +/obj/item/organ/external/genital/vagina/build_from_dna(datum/dna/DNA, associated_key) + uses_skin_color = owner.vagina_uses_skincolor + return ..() // will update the sprite suffix + +/obj/item/organ/external/genital/vagina/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(owner.vagina_uses_skintones) + uses_skintones = accessory.has_skintone_shading + +/obj/item/organ/external/genital/womb + name = "womb" + desc = "A female reproductive organ." + icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi' + icon_state = "womb" + + parent_organ = BP_GROIN + genital_location = LOWER_TORSO + + organ_tag = O_WOMB + body_part = LOWER_TORSO + + cannot_break = 1 + + aroused = AROUSAL_CANT + + visibility_preference = GENITAL_SKIP_VISIBILITY + +/obj/item/organ/external/genital/anus + name = "anus" + desc = "What do you want me to tell you?" + icon = 'modular_skyrat/master_files/icons/obj/genitals/anus.dmi' + icon_state = "anus" + mutantpart_key = "anus" + + genital_location = LOWER_TORSO + parent_organ = BP_GROIN + + organ_tag = O_ANUS + body_part = LOWER_TORSO + + cannot_break = 1 + mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB")) + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_ANUS + genital_location = GROIN + drop_when_organ_spilling = FALSE + +/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see an [lowertext(genital_name)]." + if(aroused == AROUSAL_PARTIAL) + returned_string += " It looks tight." + if(aroused == AROUSAL_FULL) + returned_string += " It looks very tight." + return returned_string + +/obj/item/organ/external/genital/breasts + name = "breasts" + desc = "Female milk producing organs." + icon_state = "breasts" + icon = 'modular_skyrat/master_files/icons/obj/genitals/breasts.dmi' + + genital_location = LOWER_TORSO + parent_organ = BP_GROIN + + organ_tag = O_PENIS + body_part = LOWER_TORSO + + cannot_break = 1 + genital_type = "pair" + + mutantpart_key = "breasts" + mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_BREASTS + genital_location = CHEST + drop_when_organ_spilling = FALSE + var/lactates = FALSE + +/obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas) + var/returned_string = "You see a [lowertext(genital_name)] of breasts." + var/size_description + var/translation = breasts_size_to_cup(genital_size) + switch(translation) + if("Flatchested") + size_description = " They are small and flat, however." + if("beyond measurement") + size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter." + else + size_description = " You estimate they are [translation]-cups." + returned_string += size_description + if(aroused == AROUSAL_FULL) + if(lactates) + returned_string += " The nipples seem hard, perky and are leaking milk." + else + returned_string += " Their nipples look hard and perky." + return returned_string + +/obj/item/organ/external/genital/breasts/update_genital_icon_state() + var/max_size = 5 + var/current_size = FLOOR(genital_size, 1) + if(current_size < 0) + current_size = 0 + else if (current_size > max_size) + current_size = max_size + var/passed_string = "breasts_pair_[current_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + +/obj/item/organ/external/genital/breasts/get_sprite_size_string() + var/max_size = 5 + if(genital_type == "pair") + max_size = 16 + var/current_size = FLOOR(genital_size, 1) + if(current_size < 0) + current_size = 0 + else if (current_size > max_size) + current_size = max_size + var/passed_string = "[genital_type]_[current_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string + +/obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key) + ..() + lactates = DNA.features["breasts_lactation"] + uses_skin_color = DNA.features["breasts_uses_skincolor"] + set_size(DNA.features["breasts_size"]) + +/obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) + if(DNA.features["breasts_uses_skintones"]) + uses_skintones = accessory.has_skintone_shading + +/proc/breasts_size_to_cup(number) + if(number < 0) + number = 0 + var/returned = GLOB.breasts_size_translation["[number]"] + if(!returned) + returned = "beyond measurement" + return returned + +/proc/breasts_cup_to_size(cup) + for(var/key in GLOB.breasts_size_translation) + if(GLOB.breasts_size_translation[key] == cup) + return text2num(key) + return 0 + +/proc/balls_size_to_description(number) + if(number < 0) + number = 0 + var/returned = GLOB.balls_size_translation["[number]"] + if(!returned) + returned = "beyond measurement" + return returned + +/proc/balls_description_to_size(cup) + for(var/key in GLOB.balls_size_translation) + if(GLOB.balls_size_translation[key] == cup) + return text2num(key) + return 0 + +/mob/living/carbon/human/verb/toggle_genitals() + set category = "IC" + set name = "Expose/Hide genitals" + set desc = "Allows you to toggle which genitals should show through clothes or not." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't toggle genitals visibility right now...")) + return + + var/list/genital_list = list() + for(var/obj/item/organ/external/genital/G in internal_organs) + if(!G.visibility_preference == GENITAL_SKIP_VISIBILITY) + genital_list += G + if(!genital_list.len) //There is nothing to expose + return + //Full list of exposable genitals created + var/obj/item/organ/external/genital/picked_organ + picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list + if(picked_organ && (picked_organ in internal_organs)) + var/list/gen_vis_trans = list("Never show" = GENITAL_NEVER_SHOW, + "Hidden by clothes" = GENITAL_HIDDEN_BY_CLOTHES, + "Always show" = GENITAL_ALWAYS_SHOW + ) + var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans + if(picked_visibility && picked_organ && (picked_organ in internal_organs)) + picked_organ.visibility_preference = gen_vis_trans[picked_visibility] + update_body() + return + +//Removing ERP IC verb depending on config +/mob/living/carbon/human/Initialize() + . = ..() + if(CONFIG_GET(flag/disable_erp_preferences)) + verbs -= /mob/living/carbon/human/verb/toggle_genitals + +/mob/living/carbon/human/verb/toggle_arousal() + set category = "IC" + set name = "Toggle Arousal" + set desc = "Allows you to toggle how aroused your private parts are." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You can't toggle arousal right now...")) + return + + var/list/genital_list = list() + for(var/obj/item/organ/external/genital/G in internal_organs) + if(!G.aroused == AROUSAL_CANT) + genital_list += G + if(!genital_list.len) //There is nothing to expose + return + //Full list of exposable genitals created + var/obj/item/organ/external/genital/picked_organ + picked_organ = input(src, "Choose which genitalia to change arousal", "Expose/Hide genitals") as null|anything in genital_list + if(picked_organ && (picked_organ in internal_organs)) + var/list/gen_arous_trans = list("Not aroused" = AROUSAL_NONE, + "Partly aroused" = AROUSAL_PARTIAL, + "Very aroused" = AROUSAL_FULL + ) + var/picked_arousal = input(src, "Choose arousal", "Toggle Arousal") as null|anything in gen_arous_trans + if(picked_arousal && picked_organ && (picked_organ in internal_organs)) + picked_organ.aroused = gen_arous_trans[picked_arousal] + picked_organ.update_sprite_suffix() + update_body() + return + +//Removing ERP IC verb depending on config +/mob/living/carbon/human/Initialize() + . = ..() + if(CONFIG_GET(flag/disable_erp_preferences)) + verbs -= /mob/living/carbon/human/verb/toggle_arousal + + + diff --git a/content_arfs/code/lewd/preference/preferences.dm b/content_arfs/code/lewd/preference/preferences.dm index 35d6736ba2d..dbf9c381b13 100644 --- a/content_arfs/code/lewd/preference/preferences.dm +++ b/content_arfs/code/lewd/preference/preferences.dm @@ -1,4 +1,6 @@ /datum/preferences + var/disable_erp_preferences = 0 // the almighty toggle. + // The weiner part. var/penis // penis ref // var/datum/sprite_accessory/genital/penis/none/default = /datum/sprite_accessory/genital/penis/none var/r_penis = 179 // Genital color @@ -11,9 +13,10 @@ var/g_penis_emissive = 0 // int 0 - 255 var/b_penis_emissive = 0 // int 0 - 255 + var/penis_uses_skintones = 0 // bool var/penis_uses_skincolor = 0 // bool - var/penis_size = round((PENIS_MIN_LENGTH + PENIS_MAX_LENGTH) / 2) - var/penis_girth = round((PENIS_MIN_LENGTH + PENIS_MAX_GIRTH) / 2) + var/penis_size = 11 + var/penis_girth = 6 var/penis_taur = 0 // bool @@ -29,6 +32,7 @@ var/g_testicles = 148 // int 0 - 255 var/b_testicles = 116 // int 0 - 255 + var/testicles_uses_skintones = 0 // bool var/testicles_uses_skincolor = 0 // bool var/emissive_testicles = 0 // bool @@ -45,6 +49,7 @@ var/g_vagina = 148 // int 0 - 255 var/b_vagina = 116 // int 0 - 255 + var/vagina_uses_skintones = 0 // bool var/vagina_uses_skincolor = 0 // bool var/emissive_vagina = 0 // bool @@ -61,6 +66,7 @@ var/g_breasts = 148 // int 0 - 255 var/b_breasts = 116 // int 0 - 255 + var/breasts_uses_skintones = 0 // bool var/breasts_uses_skincolor = 0 // bool var/emissive_breasts = 0 // bool diff --git a/content_arfs/code/lewd/readme.md b/content_arfs/code/lewd/readme.md index c5548e2fe4e..fc5054f9738 100644 --- a/content_arfs/code/lewd/readme.md +++ b/content_arfs/code/lewd/readme.md @@ -1,3 +1,4 @@ Most of the skyrat sex mechanics port is here. Other locations include: -dna_arfs.dm located in __defines. +dna_arfs.dm located in __defines. +items_clothing.dm located in __defines. \ No newline at end of file diff --git a/content_arfs/code/lewd/sprite_accessories.dm b/content_arfs/code/lewd/sprite_accessories.dm new file mode 100644 index 00000000000..a456c457b2e --- /dev/null +++ b/content_arfs/code/lewd/sprite_accessories.dm @@ -0,0 +1,294 @@ +/datum/sprite_accessory/genital + var/associated_organ_slot + /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors. + var/has_skintone_shading = FALSE + ///Where the genital is on the body. If clothing doesn't cover it, it shows up! + var/genital_location = LOWER_TORSO + +/datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) + var/obj/item/organ/external/genital/badonkers = H.getorganslot(associated_organ_slot) + if(!badonkers) + return TRUE + switch(badonkers.visibility_preference) + if(GENITAL_ALWAYS_SHOW) + return FALSE + if(GENITAL_HIDDEN_BY_CLOTHES) + if((H.w_uniform && H.w_uniform.body_parts_covered & genital_location) || (H.wear_suit && H.wear_suit.body_parts_covered & genital_location)) + return TRUE + else + return FALSE + else + return TRUE + +/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human) + var/obj/item/organ/external/genital/genital = human.getorganslot(associated_organ_slot) + return "[genital?.sprite_suffix]" + +/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state) + var/obj/item/organ/external/genital/genital = human.getorganslot(associated_organ_slot) + if(genital?.uses_skin_color && (species.appearance_flags & HAS_SKIN_TONE)) + return human.s_tone + +/datum/sprite_accessory/genital/penis + icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi' + organ_type = /obj/item/organ/external/genital/penis + associated_organ_slot = O_PENIS + key = "penis" + color_src = USE_MATRIXED_COLORS + always_color_customizable = TRUE + center = TRUE + special_icon_case = TRUE + special_x_dimension = TRUE + //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + genetic = TRUE + var/can_have_sheath = TRUE + +/datum/sprite_accessory/genital/penis/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) + if(H.underwear != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + return TRUE + . = ..() + +/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/H) + var/returned = icon + if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"]) + var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]] + if(!(SP.taur_mode & STYLE_TAUR_SNAKE)) + returned = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi' + return returned + +/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/H) + var/returned = dimension_x + if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"]) + var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]] + if(!(SP.taur_mode & STYLE_TAUR_SNAKE)) + returned = 64 + return returned + +/datum/sprite_accessory/genital/penis/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/penis/human + icon_state = "human" + name = "Human" + color_src = USE_ONE_COLOR + default_color = DEFAULT_SKIN_OR_PRIMARY + has_skintone_shading = TRUE + can_have_sheath = FALSE + +/datum/sprite_accessory/genital/penis/nondescript + icon_state = "nondescript" + name = "Nondescript" + +/datum/sprite_accessory/genital/penis/knotted + icon_state = "knotted" + name = "Knotted" + +/datum/sprite_accessory/genital/penis/flared + icon_state = "flared" + name = "Flared" + +/datum/sprite_accessory/genital/penis/barbknot + icon_state = "barbknot" + name = "Barbed, Knotted" + +/datum/sprite_accessory/genital/penis/tapered + icon_state = "tapered" + name = "Tapered" + +/datum/sprite_accessory/genital/penis/tentacle + icon_state = "tentacle" + name = "Tentacled" + +/datum/sprite_accessory/genital/penis/hemi + icon_state = "hemi" + name = "Hemi" + +/datum/sprite_accessory/genital/penis/hemiknot + icon_state = "hemiknot" + name = "Knotted Hemi" + +/datum/sprite_accessory/genital/testicles + icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi' + organ_type = /obj/item/organ/external/genital/testicles + associated_organ_slot = O_TESTICLES + key = "testicles" + always_color_customizable = TRUE + special_icon_case = TRUE + special_x_dimension = TRUE + default_color = DEFAULT_SKIN_OR_PRIMARY + relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER) + genetic = TRUE + var/has_size = TRUE + +/datum/sprite_accessory/genital/testicles/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) + if(H.underwear != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + return TRUE + . = ..() + +/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/H) + var/returned = icon + if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"]) + var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]] + if(!(SP.taur_mode & STYLE_TAUR_SNAKE)) + returned = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi' + return returned + +/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/H) + var/returned = dimension_x + if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"]) + var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]] + if(!(SP.taur_mode & STYLE_TAUR_SNAKE)) + returned = 64 + return returned + +/datum/sprite_accessory/genital/testicles/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/testicles/pair + name = "Pair" + icon_state = "pair" + has_skintone_shading = TRUE + +/datum/sprite_accessory/genital/testicles/internal + name = "Internal" + icon_state = "none" + color_src = null + has_size = FALSE + +/datum/sprite_accessory/genital/vagina + icon = 'content_arfs/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi' + organ_type = /obj/item/organ/external/genital/vagina + associated_organ_slot = O_VAGINA + key = "vagina" + always_color_customizable = TRUE + default_color = "#FFCCCC" + relevent_layers = list(BODY_FRONT_LAYER) + genetic = TRUE + var/alt_aroused = TRUE + +/datum/sprite_accessory/genital/vagina/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) + if(H.underwear != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + return TRUE + . = ..() + +/datum/sprite_accessory/genital/vagina/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/vagina/human + icon_state = "human" + name = "Human" + +/datum/sprite_accessory/genital/vagina/tentacles + icon_state = "tentacle" + name = "Tentacle" + +/datum/sprite_accessory/genital/vagina/dentata + icon_state = "dentata" + name = "Dentata" + +/datum/sprite_accessory/genital/vagina/hairy + icon_state = "hairy" + name = "Hairy" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/spade + icon_state = "spade" + name = "Spade" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/furred + icon_state = "furred" + name = "Furred" + alt_aroused = FALSE + +/datum/sprite_accessory/genital/vagina/gaping + icon_state = "gaping" + name = "Gaping" + +/datum/sprite_accessory/genital/vagina/cloaca + icon_state = "cloaca" + name = "Cloaca" + +/datum/sprite_accessory/genital/womb + organ_type = /obj/item/organ/external/genital/womb + associated_organ_slot = O_WOMB + key = "womb" + genetic = TRUE + +/datum/sprite_accessory/genital/womb/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/womb/normal + icon_state = "none" + name = "Normal" + color_src = null + +/datum/sprite_accessory/genital/anus + organ_type = /obj/item/organ/external/genital/anus + associated_organ_slot = O_ANUS + key = "anus" + genetic = TRUE + +/datum/sprite_accessory/genital/anus/is_hidden(mob/living/carbon/human/owner, obj/item/bodypart/bodypart) + if(owner.underwear != "Nude" && !(owner.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) + return TRUE + . = ..() + +/datum/sprite_accessory/genital/anus/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/anus/normal + icon_state = "anus" + name = "Anus" + color_src = null + +/datum/sprite_accessory/genital/breasts + icon = 'content_arfs/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi' + organ_type = /obj/item/organ/external/genital/breasts + associated_organ_slot = O_BREASTS + key = "breasts" + always_color_customizable = TRUE + default_color = DEFAULT_SKIN_OR_PRIMARY + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + has_skintone_shading = TRUE + genital_location = CHEST + genetic = TRUE + +/datum/sprite_accessory/genital/breasts/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) + if(H.undershirt != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) + return TRUE + . = ..() + +/datum/sprite_accessory/genital/breasts/none + icon_state = "none" + name = "None" + factual = FALSE + color_src = null + +/datum/sprite_accessory/genital/breasts/pair + icon_state = "pair" + name = "Pair" + +/datum/sprite_accessory/genital/breasts/quad + icon_state = "quad" + name = "Quad" + +/datum/sprite_accessory/genital/breasts/sextuple + icon_state = "sextuple" + name = "Sextuple" diff --git a/vorestation.dme b/vorestation.dme index 9b00ddba26c..777694a27bd 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4143,6 +4143,11 @@ #include "content_arfs\code\donater\suits.dm" #include "content_arfs\code\donater\ties.dm" #include "content_arfs\code\donater\under.dm" +#include "content_arfs\code\lewd\examine.dm" +#include "content_arfs\code\lewd\human.dm" +#include "content_arfs\code\lewd\obj_flags.dm" +#include "content_arfs\code\lewd\organs.dm" +#include "content_arfs\code\lewd\sprite_accessories.dm" #include "content_arfs\code\lewd\preference\09_lewd.dm" #include "content_arfs\code\lewd\preference\preferences.dm" #include "content_arfs\code\loadout\cagse.dm" From 11923f6617c9ff6f8445be0779332fac66bfdd26 Mon Sep 17 00:00:00 2001 From: GremlingSS <68038883+GremlingSS@users.noreply.github.com> Date: Sat, 7 May 2022 00:33:12 +0100 Subject: [PATCH 4/5] fixed all the f u n errors in orgams.dm --- content_arfs/code/lewd/lists.dm | 32 ++++++++++++++++++++ content_arfs/code/lewd/organs.dm | 52 +++++++++++--------------------- vorestation.dme | 1 + 3 files changed, 50 insertions(+), 35 deletions(-) create mode 100644 content_arfs/code/lewd/lists.dm diff --git a/content_arfs/code/lewd/lists.dm b/content_arfs/code/lewd/lists.dm new file mode 100644 index 00000000000..8a91a3a0f22 --- /dev/null +++ b/content_arfs/code/lewd/lists.dm @@ -0,0 +1,32 @@ +//DO NOT CHANGE THOSE LISTS UNLESS YOU KNOW WHAT YOURE DOING (will mess savefiles) + + +GLOBAL_LIST_INIT(breasts_size_translation, list("0" = "Flatchested", + "1" = "A", + "2" = "B", + "3" = "C", + "4" = "D", + "5" = "E", + "6" = "F", + "7" = "G", + "8" = "H", + "9" = "I", + "10" = "J", + "11" = "K", + "12" = "L", + "13" = "M", + "14" = "N", + "15" = "O", + "16" = "P", + )) + +GLOBAL_LIST_INIT(balls_size_translation, list("0" = "Small", + "1" = "Average", + "2" = "Big", + "3" = "Enormous" + )) + +///Those are the values available from prefs +GLOBAL_LIST_INIT(preference_breast_sizes, list("Flatchested","A","B","C","D","E","F","G","H","I","J")) + +GLOBAL_LIST_INIT(preference_balls_sizes, list("Small","Average","Big","Enormous")) diff --git a/content_arfs/code/lewd/organs.dm b/content_arfs/code/lewd/organs.dm index 4c32c041d0e..6fc3c7ef1a1 100644 --- a/content_arfs/code/lewd/organs.dm +++ b/content_arfs/code/lewd/organs.dm @@ -91,7 +91,7 @@ parent_organ = BP_GROIN organ_tag = O_PENIS - body_part = LOWER_TORSO + body_part = PENIS cannot_break = 1 @@ -190,7 +190,7 @@ genital_location = LOWER_TORSO organ_tag = O_TESTICLES - body_part = LOWER_TORSO + body_part = TESTICLES cannot_break = 1 @@ -235,7 +235,7 @@ genital_location = LOWER_TORSO organ_tag = O_VAGINA - body_part = LOWER_TORSO + body_part = VAGINA cannot_break = 1 @@ -276,7 +276,7 @@ genital_location = LOWER_TORSO organ_tag = O_WOMB - body_part = LOWER_TORSO + body_part = WOMB cannot_break = 1 @@ -289,20 +289,14 @@ desc = "What do you want me to tell you?" icon = 'modular_skyrat/master_files/icons/obj/genitals/anus.dmi' icon_state = "anus" - mutantpart_key = "anus" genital_location = LOWER_TORSO parent_organ = BP_GROIN organ_tag = O_ANUS - body_part = LOWER_TORSO + body_part = ANUS cannot_break = 1 - mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB")) - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_ANUS - genital_location = GROIN - drop_when_organ_spilling = FALSE /obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas) var/returned_string = "You see an [lowertext(genital_name)]." @@ -318,21 +312,15 @@ icon_state = "breasts" icon = 'modular_skyrat/master_files/icons/obj/genitals/breasts.dmi' - genital_location = LOWER_TORSO - parent_organ = BP_GROIN + genital_location = UPPER_TORSO + parent_organ = BP_TORSO - organ_tag = O_PENIS - body_part = LOWER_TORSO + organ_tag = O_BREASTS + body_part = BREASTS cannot_break = 1 genital_type = "pair" - mutantpart_key = "breasts" - mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB")) - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_BREASTS - genital_location = CHEST - drop_when_organ_spilling = FALSE var/lactates = FALSE /obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas) @@ -382,12 +370,12 @@ /obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key) ..() - lactates = DNA.features["breasts_lactation"] - uses_skin_color = DNA.features["breasts_uses_skincolor"] - set_size(DNA.features["breasts_size"]) + lactates = owner.breasts_lactation + uses_skin_color = owner.breasts_uses_skincolor + set_size(owner.breasts_size) /obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA) - if(DNA.features["breasts_uses_skintones"]) + if(owner.breasts_uses_skintones) uses_skintones = accessory.has_skintone_shading /proc/breasts_size_to_cup(number) @@ -444,14 +432,15 @@ var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans if(picked_visibility && picked_organ && (picked_organ in internal_organs)) picked_organ.visibility_preference = gen_vis_trans[picked_visibility] - update_body() + update_icons_body() return //Removing ERP IC verb depending on config /mob/living/carbon/human/Initialize() . = ..() - if(CONFIG_GET(flag/disable_erp_preferences)) + if(client?.prefs.disable_erp_preferences) verbs -= /mob/living/carbon/human/verb/toggle_genitals + verbs -= /mob/living/carbon/human/verb/toggle_arousal /mob/living/carbon/human/verb/toggle_arousal() set category = "IC" @@ -480,14 +469,7 @@ if(picked_arousal && picked_organ && (picked_organ in internal_organs)) picked_organ.aroused = gen_arous_trans[picked_arousal] picked_organ.update_sprite_suffix() - update_body() + update_icons_body() return -//Removing ERP IC verb depending on config -/mob/living/carbon/human/Initialize() - . = ..() - if(CONFIG_GET(flag/disable_erp_preferences)) - verbs -= /mob/living/carbon/human/verb/toggle_arousal - - diff --git a/vorestation.dme b/vorestation.dme index 777694a27bd..303bc5e9d9f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4145,6 +4145,7 @@ #include "content_arfs\code\donater\under.dm" #include "content_arfs\code\lewd\examine.dm" #include "content_arfs\code\lewd\human.dm" +#include "content_arfs\code\lewd\lists.dm" #include "content_arfs\code\lewd\obj_flags.dm" #include "content_arfs\code\lewd\organs.dm" #include "content_arfs\code\lewd\sprite_accessories.dm" From 9782a17c4dac3d861d1571678f53d95a9b0b69bc Mon Sep 17 00:00:00 2001 From: GremlingSS <68038883+GremlingSS@users.noreply.github.com> Date: Mon, 9 May 2022 15:24:43 +0100 Subject: [PATCH 5/5] changes idk --- content_arfs/code/lewd/examine.dm | 14 +++++++------- content_arfs/code/lewd/human.dm | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/content_arfs/code/lewd/examine.dm b/content_arfs/code/lewd/examine.dm index b695689005b..5b429bc4e81 100644 --- a/content_arfs/code/lewd/examine.dm +++ b/content_arfs/code/lewd/examine.dm @@ -1,11 +1,11 @@ +var/global/list/genitals_styles_list = list() // Stores /datum/sprite_accessory/genitals indexed by type + /mob/living/carbon/human/proc/GetGenitalExamine(var/datum/gender/T) var/list/msg - for(var/genital in list("penis", "testicles", "vagina", "breasts", "anus")) - if(dna.species.mutant_bodyparts[genital]) - var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]] - if(G) - if(!(G.is_hidden(src))) - msg += "[T.he] has exposed genitals... Look closer..." - break + for(var/genital in list(penis, testicles, vagina, breasts, anus)) + if(genital) + if(!(genital.is_hidden(src))) + msg += "[T.he] has exposed genitals... Look closer..." + break return msg \ No newline at end of file diff --git a/content_arfs/code/lewd/human.dm b/content_arfs/code/lewd/human.dm index 13c1d38d36a..6a27aab761b 100644 --- a/content_arfs/code/lewd/human.dm +++ b/content_arfs/code/lewd/human.dm @@ -58,10 +58,10 @@ var/g_vagina_emissive = 0 // int 0 - 255 var/b_vagina_emissive = 0 // int 0 - 255 - var/sprite_accessory/genital/womb/womb // ..if you thought vagina was enough, wait till you see there's a womb included too! + var/datum/sprite_accessory/genital/womb/womb // ..if you thought vagina was enough, wait till you see there's a womb included too! // succulent, moist, wait- moist? wtf? no??? - var/sprite_accessory/genital/breasts/breasts + var/datum/sprite_accessory/genital/breasts/breasts var/r_breasts = 179 // int 0 - 255 var/g_breasts = 148 // int 0 - 255 var/b_breasts = 116 // int 0 - 255