From 36c580c23605f7378afd59402ab3c57147483d3e Mon Sep 17 00:00:00 2001 From: TalkingCactus Date: Fri, 24 Feb 2017 21:42:15 -0500 Subject: [PATCH] The Update (#241) * auto vote runtime error fix * part 1 * adds a wolf pai sprite modified fox sprite that doesn't make your eyes bleed * missed a painful sprite * part 2 * ptwhatever * save * conflict resolution pt1 * conflict resolution pt2 * almost done with the preferences shit * fixes missing arousal HUD * file rename * even more * keep the panic commits coming * forgot one * wew, gonna go make some small changes * s o o n * LOOC admin and player toggles * fixed backpacks and taurs clipping on the preview * fixed penis length saving * typo fix * arousal fix * icon tuning * final --- code/__DEFINES/citadel_defines.dm | 13 +- code/__DEFINES/misc.dm | 34 +- code/__DEFINES/preferences.dm | 3 +- code/__HELPERS/global_lists.dm | 4 + code/__HELPERS/mobs.dm | 84 ++- code/_globalvars/configuration.dm | 3 + code/citadel/_cit_helpers.dm | 163 +++++ code/citadel/_helpers.dm | 68 -- code/citadel/cit_arousal.dm | 204 +++++- code/citadel/cit_genemods.dm | 22 + code/citadel/{kegs.dm => cit_kegs.dm} | 0 code/citadel/cit_reagents.dm | 27 +- code/citadel/icons/breasts.dmi | Bin 0 -> 698 bytes code/citadel/icons/breasts_onmob.dmi | Bin 0 -> 762 bytes code/citadel/icons/dildo.dmi | Bin 0 -> 668 bytes code/citadel/icons/effects.dmi | Bin 10734 -> 10423 bytes code/citadel/icons/hud.dmi | Bin 0 -> 2019 bytes code/citadel/icons/onahole.dmi | Bin 0 -> 377 bytes code/citadel/icons/ovipositor.dmi | Bin 0 -> 775 bytes code/citadel/icons/penis.dmi | Bin 0 -> 1514 bytes code/citadel/icons/penis_onmob.dmi | Bin 0 -> 1333 bytes code/citadel/icons/vagina_onmob.dmi | Bin 0 -> 592 bytes code/citadel/organs.dm | 45 -- code/citadel/organs/breasts.dm | 32 + code/citadel/organs/eggsack.dm | 14 + code/citadel/organs/genitals.dm | 233 ++++++ .../organs/genitals_sprite_accessories.dm | 116 +++ code/citadel/organs/ovipositor.dm | 17 + code/citadel/organs/penis.dm | 60 ++ code/citadel/organs/testicles.dm | 60 ++ code/citadel/organs/vagina.dm | 15 + code/citadel/organs/womb.dm | 9 + code/datums/datumvars.dm | 4 +- code/game/objects/items.dm | 1 + code/modules/admin/admin.dm | 2 +- code/modules/client/preferences.dm | 662 +++++++++++------- code/modules/client/preferences_savefile.dm | 79 ++- .../drinks/drinks/drinkingglass.dm | 30 +- .../modules/mob/living/carbon/damage_procs.dm | 2 + code/modules/mob/living/carbon/human/life.dm | 3 + .../mob/living/carbon/human/species.dm | 9 +- .../mob/living/carbon/human/update_icons.dm | 7 +- .../modules/mob/living/carbon/update_icons.dm | 5 + .../mob/new_player/preferences_setup.dm | 62 +- code/modules/reagents/kegs.dm | 42 -- icons/mob/pai.dmi | Bin 30047 -> 31192 bytes icons/mob/special/mam_taur.dmi | Bin 37281 -> 36656 bytes icons/obj/drinks.dmi | Bin 65327 -> 65816 bytes tgstation.dme | 14 +- 49 files changed, 1608 insertions(+), 540 deletions(-) create mode 100644 code/citadel/_cit_helpers.dm delete mode 100644 code/citadel/_helpers.dm create mode 100644 code/citadel/cit_genemods.dm rename code/citadel/{kegs.dm => cit_kegs.dm} (100%) create mode 100644 code/citadel/icons/breasts.dmi create mode 100644 code/citadel/icons/breasts_onmob.dmi create mode 100644 code/citadel/icons/dildo.dmi create mode 100644 code/citadel/icons/hud.dmi create mode 100644 code/citadel/icons/onahole.dmi create mode 100644 code/citadel/icons/ovipositor.dmi create mode 100644 code/citadel/icons/penis.dmi create mode 100644 code/citadel/icons/penis_onmob.dmi create mode 100644 code/citadel/icons/vagina_onmob.dmi delete mode 100644 code/citadel/organs.dm create mode 100644 code/citadel/organs/breasts.dm create mode 100644 code/citadel/organs/eggsack.dm create mode 100644 code/citadel/organs/genitals.dm create mode 100644 code/citadel/organs/genitals_sprite_accessories.dm create mode 100644 code/citadel/organs/ovipositor.dm create mode 100644 code/citadel/organs/penis.dm create mode 100644 code/citadel/organs/testicles.dm create mode 100644 code/citadel/organs/vagina.dm create mode 100644 code/citadel/organs/womb.dm delete mode 100644 code/modules/reagents/kegs.dm diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 98153f06a4..7d391b2147 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -8,7 +8,7 @@ //organ defines #define COCK_SIZE_MIN 1 -#define COCK_SIZE_MAX 24 +#define COCK_SIZE_MAX 20 #define COCK_GIRTH_RATIO_MAX 1.25 #define COCK_GIRTH_RATIO_DEF 0.75 @@ -18,18 +18,16 @@ #define KNOT_GIRTH_RATIO_DEF 2.1 #define KNOT_GIRTH_RATIO_MIN 1.25 -#define BALLS_VOLUME_BASE 50 +#define BALLS_VOLUME_BASE 25 #define BALLS_VOLUME_MULT 1 #define BALLS_SIZE_MIN 1 -#define BALLS_SIZE_SMALL 2 -#define BALLS_SIZE_NORMAL 3 -#define BALLS_SIZE_BIG 4 -#define BALLS_SIZE_BIGGER 5 -#define BALLS_SIZE_BIGGEST 6 +#define BALLS_SIZE_DEF 3 #define BALLS_SIZE_MAX 7 +#define BALLS_SACK_SIZE_MIN 1 #define BALLS_SACK_SIZE_DEF 8 +#define BALLS_SACK_SIZE_MAX 40 #define CUM_RATE 5 #define CUM_RATE_MULT 1 @@ -60,6 +58,7 @@ #define BREASTS_SIZE_HH 8.5//Largest size, ever. For now. #define BREASTS_SIZE_MIN BREASTS_SIZE_A +#define BREASTS_SIZE_DEF BREASTS_SIZE_C #define BREASTS_SIZE_MAX BREASTS_SIZE_HH #define MILK_RATE 5 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 535e7a1010..dab4471330 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -31,19 +31,25 @@ #define FRIDAY_13TH "Friday the 13th" //Human Overlays Indexes///////// -#define MUTATIONS_LAYER 26 //mutations. Tk headglows, cold resistance glow, etc -#define BODY_BEHIND_LAYER 25 //certain mutantrace features (tail when looking south) that must appear behind the body parts -#define BODYPARTS_LAYER 24 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag -#define BODY_ADJ_LAYER 23 //certain mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_LAYER 22 //underwear, undershirts, socks, eyes, lips(makeup) -#define FRONT_MUTATIONS_LAYER 21 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define DAMAGE_LAYER 20 //damage indicators (cuts and burns) -#define UNIFORM_LAYER 19 -#define ID_LAYER 18 -#define SHOES_LAYER 17 -#define GLOVES_LAYER 16 -#define EARS_LAYER 15 -#define SUIT_LAYER 14 +//citadel code +#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc +#define BODY_BEHIND_LAYER 30 //certain mutantrace features (tail when looking south) that must appear behind the body parts +#define GENITALS_BEHIND_LAYER 29 +#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag +#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts +#define GENITALS_ADJ_LAYER 26 +#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup) +#define GENITALS_FRONT_LAYER 24 +#define FRONT_MUTATIONS_LAYER 23 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) +#define DAMAGE_LAYER 22 //damage indicators (cuts and burns) +#define UNIFORM_LAYER 21 +#define ID_LAYER 20 +#define SHOES_LAYER 19 +#define GLOVES_LAYER 18 +#define EARS_LAYER 17 +#define SUIT_LAYER 16 +#define BODY_TAUR_LAYER 15 +#define GENITALS_FRONT_LAYER 14 #define GLASSES_LAYER 13 #define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? #define SUIT_STORE_LAYER 11 @@ -57,7 +63,7 @@ #define HANDS_LAYER 3 #define BODY_FRONT_LAYER 2 #define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; //Human Overlay Index Shortcuts for alternate_worn_layer, layers //Because I *KNOW* somebody will think layer+1 means "above" diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 63c051061d..f26b750492 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -28,8 +28,9 @@ #define CHAT_GHOSTWHISPER 128 #define CHAT_GHOSTPDA 256 #define CHAT_GHOSTRADIO 512 +#define CHAT_LOOC 1024 -#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO) +#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC) #define PARALLAX_INSANE -1 //for show offs #define PARALLAX_HIGH 0 //default. diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f0c42311b6..79429cff2c 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -37,6 +37,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_list) + //citadel code //mammal bodyparts (fucking furries) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, mam_body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, mam_tails_list) @@ -52,6 +53,9 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, xeno_head_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, xeno_tail_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, xeno_dorsal_list) + //genitals + init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, cock_shapes_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, breasts_size_list) //Species for(var/spath in subtypesof(/datum/species)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index b57d5b2548..02dc12ddd9 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -47,7 +47,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list) return pick(socks_list) -/proc/random_features() +/proc/random_features(penis=0,balls=0,vagina=0,womb=0,breasts=0) if(!tails_list_human.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) if(!tails_list_lizard.len) @@ -68,9 +68,87 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) if(!wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list) + if(!cock_shapes_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, cock_shapes_list) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.gender == MALE) + penis = 1 + balls = 1 + vagina = 0 + womb = 0 + breasts = 0 + if(H.gender == FEMALE) + penis = 0 + balls = 0 + vagina = 1 + womb = 1 + breasts = 1 - //For now we will always return none for tail_human and ears. - return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(tails_list_lizard), "tail_human" = "None", "wings" = "None", "snout" = pick(snouts_list), "horns" = pick(horns_list), "ears" = "None", "frills" = pick(frills_list), "spines" = pick(spines_list), "body_markings" = pick(body_markings_list), "legs" = "Normal Legs")) + return(list( + "mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "tail_lizard" = pick(tails_list_lizard), + "tail_human" = "None", + "wings" = "None", + "snout" = pick(snouts_list), + "horns" = pick(horns_list), + "ears" = "None", + "frills" = pick(frills_list), + "spines" = pick(spines_list), + "body_markings" = pick(body_markings_list), + "legs" = "Normal Legs", + "taur" = "None", + "mam_body_markings" = "None", + "mam_ears" = "None", + "mam_tail" = "None", + "mam_tail_animated" = "None", + "xenodorsal" = "None", + "xenohead" = "None", + "xenotail" = "None", + "exhibitionist" = FALSE, + "has_cock" = FALSE, + "cock_shape" = "human", + "cock_length" = 6, + "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, + "cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "has_sheath" = FALSE, + "sheath_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "has_balls" = FALSE, + "balls_internal" = FALSE, + "balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "balls_amount" = 2, + "balls_sack_size" = BALLS_SACK_SIZE_DEF, + "balls_size" = BALLS_SIZE_DEF, + "balls_cum_rate" = CUM_RATE, + "balls_cum_mult" = CUM_RATE_MULT, + "balls_efficiency" = CUM_EFFICIENCY, + "balls_fluid" = "semen", + "has_ovi" = FALSE, + "ovi_shape" = "knotted", + "ovi_length" = 6, + "ovi_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "has_eggsack" = FALSE, + "eggsack_internal" = TRUE, + "eggsack_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "eggsack_size" = BALLS_SACK_SIZE_DEF, + "eggsack_egg_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "eggsack_egg_size" = EGG_GIRTH_DEF, + "has_breasts" = FALSE, + "breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "breasts_size" = pick(breasts_size_list), + "breasts_fluid" = "milk", + "has_vag" = FALSE, + "vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "vag_clits" = 1, + "vag_clit_diam" = 0.25, + "vag_clit_len" = 0.25, + "has_womb" = FALSE, + "womb_cum_rate" = CUM_RATE, + "womb_cum_mult" = CUM_RATE_MULT, + "womb_efficiency" = CUM_EFFICIENCY, + "womb_fluid" = "femcum")) /proc/random_hair_style(gender) switch(gender) diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index cb3e38a92f..075289e320 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -9,6 +9,9 @@ var/changelog_hash = "" var/ooc_allowed = 1 // used with admin verbs to disable ooc - not a config option apparently var/dooc_allowed = 1 +//citadel code +var/looc_allowed = 1 +var/dlooc_allowed = 1 var/abandon_allowed = 1 var/enter_allowed = 1 var/guests_allowed = 1 diff --git a/code/citadel/_cit_helpers.dm b/code/citadel/_cit_helpers.dm new file mode 100644 index 0000000000..a48158d42c --- /dev/null +++ b/code/citadel/_cit_helpers.dm @@ -0,0 +1,163 @@ +//THIS FILE CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS// +//////////////////////////////////////////////////////////////////// +/mob/proc/setClickCooldown(var/timeout) + next_move = max(world.time + timeout, next_move) + +/proc/get_matrix_largest() + var/matrix/mtrx=new() + return mtrx.Scale(2) +/proc/get_matrix_large() + var/matrix/mtrx=new() + return mtrx.Scale(1.5) +/proc/get_matrix_norm() + var/matrix/mtrx=new() + return mtrx +/proc/get_matrix_small() + var/matrix/mtrx=new() + return mtrx.Scale(0.8) +/proc/get_matrix_smallest() + var/matrix/mtrx=new() + return mtrx.Scale(0.65) + +proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' has available to them. It searches the list of ckeys attached to the 'whitelist' var for a species and also checks if they're an admin. + for(var/spath in subtypesof(/datum/species)) + var/datum/species/S = new spath() + var/list/wlist = S.whitelist + if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin: + whitelisted_species_list[S.id] = S.type //Add the species to their available species list. + else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here. + whitelisted_species_list[S.id] = S.type + + return whitelisted_species_list + + //Mammal Species +var/global/list/mam_body_markings_list = list() +var/global/list/mam_ears_list = list() +var/global/list/mam_tails_list = list() +var/global/list/mam_tails_animated_list = list() +var/global/list/taur_list = list() + + //Exotic Species +var/global/list/exotic_tails_list = list() +var/global/list/exotic_tails_animated_list = list() +var/global/list/exotic_ears_list = list() +var/global/list/exotic_head_list = list() +var/global/list/exotic_back_list = list() + + //Xenomorph Species +var/global/list/xeno_head_list = list() //I forgot the ' = list()' part for the longest time and couldn't figure out what was wrong. *facepalm +var/global/list/xeno_tail_list = list() +var/global/list/xeno_dorsal_list = list() + + + //Genitals and Arousal Lists +var/global/list/cock_shapes_list = list()//global_lists.dm for the list initializations +var/global/list/breasts_size_list = list() +var/global/list/cum_into_containers_list = list(/obj/item/weapon/reagent_containers/food/snacks/pie) +var/global/list/dick_nouns = list("dick","cock","member","shaft") +var/global/list/cum_id_list = list("semen") +var/global/list/milk_id_list = list("milk") +//mentor stuff +var/list/mentors = list() + +/client/proc/reload_mentors() + set name = "Reload Mentors" + set category = "Admin" + if(!src.holder) return + message_admins("[key_name_admin(usr)] manually reloaded mentors") + +//Flavor Text +/mob/living/carbon/human/verb/set_flavor() + set name = "Set Flavor Text" + set desc = "Sets an extended description of your character's features." + set category = "IC" + + flavor_text = copytext(sanitize(input(usr, "Please enter your new flavor text.", "Flavor text", null) as text), 1) + +//LOOC toggles +/client/verb/listen_looc() + set name = "Show/Hide LOOC" + set category = "Preferences" + set desc = "Toggles seeing LocalOutOfCharacter chat" + prefs.chat_toggles ^= CHAT_LOOC + prefs.save_preferences() + src << "You will [(prefs.chat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel." + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/togglelooc() + set category = "Server" + set desc="Fukken metagamers" + set name="Toggle LOOC" + toggle_looc() + log_admin("[key_name(usr)] toggled LOOC.") + message_admins("[key_name_admin(usr)] toggled LOOC.") + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/proc/toggle_looc(toggle = null) + if(toggle != null) //if we're specifically en/disabling ooc + if(toggle != looc_allowed) + looc_allowed = toggle + else + return + else //otherwise just toggle it + looc_allowed = !looc_allowed + world << "The LOOC channel has been globally [looc_allowed ? "enabled" : "disabled"]." + +/datum/admins/proc/toggleloocdead() + set category = "Server" + set desc="Toggle dis bitch" + set name="Toggle Dead LOOC" + dlooc_allowed = !( dlooc_allowed ) + + log_admin("[key_name(usr)] toggled OOC.") + message_admins("[key_name_admin(usr)] toggled Dead OOC.") + feedback_add_details("admin_verb","TDLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/mob/living/carbon/proc/has_penis() + if(getorganslot("penis"))//slot shared with ovipositor + if(istype(getorganslot("penis"), /obj/item/organ/genital/penis)) + return 1 + return 0 + +/mob/living/carbon/proc/has_balls() + if(getorganslot("balls")) + if(istype(getorganslot("balls"), /obj/item/organ/genital/testicles)) + return 1 + return 0 + +/mob/living/carbon/proc/has_vagina() + if(getorganslot("vagina")) + return 1 + return 0 + +/mob/living/carbon/proc/has_breasts() + if(getorganslot("breasts")) + return 1 + return 0 + +/mob/living/carbon/proc/has_ovipositor() + if(getorganslot("penis"))//shared slot + if(istype(getorganslot("penis"), /obj/item/organ/genital/ovipositor)) + return 1 + return 0 + +/mob/living/carbon/human/proc/has_eggsack() + if(getorganslot("balls")) + if(istype(getorganslot("balls"), /obj/item/organ/genital/eggsack)) + return 1 + return 0 + +/mob/living/carbon/human/proc/is_bodypart_exposed(bodypart) + +/mob/living/carbon/proc/is_groin_exposed() + for(var/obj/item/I in get_equipped_items()) + if(I.body_parts_covered & GROIN) + return 0 + return 1 + +/mob/living/carbon/proc/is_chest_exposed() + for(var/obj/item/I in get_equipped_items()) + if(I.body_parts_covered & CHEST) + return 0 + return 1 \ No newline at end of file diff --git a/code/citadel/_helpers.dm b/code/citadel/_helpers.dm deleted file mode 100644 index c0b0c0769b..0000000000 --- a/code/citadel/_helpers.dm +++ /dev/null @@ -1,68 +0,0 @@ -//THIS FILE CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS// -//////////////////////////////////////////////////////////////////// -/mob/proc/setClickCooldown(var/timeout) - next_move = max(world.time + timeout, next_move) - -/proc/get_matrix_largest() - var/matrix/mtrx=new() - return mtrx.Scale(2) -/proc/get_matrix_large() - var/matrix/mtrx=new() - return mtrx.Scale(1.5) -/proc/get_matrix_norm() - var/matrix/mtrx=new() - return mtrx -/proc/get_matrix_small() - var/matrix/mtrx=new() - return mtrx.Scale(0.8) -/proc/get_matrix_smallest() - var/matrix/mtrx=new() - return mtrx.Scale(0.65) - -proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' has available to them. It searches the list of ckeys attached to the 'whitelist' var for a species and also checks if they're an admin. - for(var/spath in subtypesof(/datum/species)) - var/datum/species/S = new spath() - var/list/wlist = S.whitelist - if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin: - whitelisted_species_list[S.id] = S.type //Add the species to their available species list. - else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here. - whitelisted_species_list[S.id] = S.type - - return whitelisted_species_list - - //Mammal Species -var/global/list/mam_body_markings_list = list() -var/global/list/mam_ears_list = list() -var/global/list/mam_tails_list = list() -var/global/list/mam_tails_animated_list = list() -var/global/list/taur_list = list() - - //Exotic Species -var/global/list/exotic_tails_list = list() -var/global/list/exotic_tails_animated_list = list() -var/global/list/exotic_ears_list = list() -var/global/list/exotic_head_list = list() -var/global/list/exotic_back_list = list() - - //Xenomorph Species -var/global/list/xeno_head_list = list() //I forgot the ' = list()' part for the longest time and couldn't figure out what was wrong. *facepalm -var/global/list/xeno_tail_list = list() -var/global/list/xeno_dorsal_list = list() - - -//mentor stuff - -var/list/mentors = list() - -/client/proc/reload_mentors() - set name = "Reload Mentors" - set category = "Admin" - if(!src.holder) return - message_admins("[key_name_admin(usr)] manually reloaded mentors") - -/mob/living/carbon/human/verb/set_flavor() - set name = "Set Flavor Text" - set desc = "Sets an extended description of your character's features." - set category = "IC" - - flavor_text = copytext(sanitize(input(usr, "Please enter your new flavor text.", "Flavor text", null) as text), 1) diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index ff77bb06e0..d4aa1716b3 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -6,33 +6,56 @@ var/arousal_rate = 1 //The base rate that arousal will increase in this mob. var/arousal_loss_rate = 1 //How easily arousal can be relieved for this mob. var/canbearoused = FALSE //Mob-level disabler for arousal. Starts off and can be enabled as features are added for different mob types. - var/mb_cd_length = 100 //10 second cooldown for masturbating because fuck spam + var/mb_cd_length = 50 //5 second cooldown for masturbating because fuck spam var/mb_cd_timer = 0 //The timer itself /mob/living/carbon/human canbearoused = TRUE + var/saved_underwear = ""//saves their underwear so it can be toggled later + var/saved_undershirt = "" + +/mob/living/carbon/human/New() + ..() + saved_underwear = underwear + saved_undershirt = undershirt + //Species vars /datum/species var/arousal_gain_rate = 1 //Rate at which this species becomes aroused var/arousal_lose_rate = 1 //Multiplier for how easily arousal can be relieved + var/list/cum_fluids = list("semen") + var/list/milk_fludis = list("milk") + var/list/femcum_fluids = list("femcum") //Mob procs /mob/living/Life() - if(stat != DEAD) - handle_arousal() - ..() - /mob/living/proc/handle_arousal() return /mob/living/carbon/handle_arousal() - ..() - var/datum/species/S - if(has_dna()) + if(canbearoused && dna) + var/datum/species/S S = dna.species - if(S && SSmob.times_fired%36==2 && getArousalLoss() < 100)//Totally stolen from breathing code. Do this every 36 ticks. - adjustArousalLoss(arousal_rate * S.arousal_gain_rate) + if(S && SSmob.times_fired%36==2 && getArousalLoss() < max_arousal)//Totally stolen from breathing code. Do this every 36 ticks. + adjustArousalLoss(arousal_rate * S.arousal_gain_rate) + if(dna.features["exhibitionist"]) + var/amt_nude = 0 + if(is_chest_exposed() && (gender == FEMALE || getorganslot("breasts"))) + amt_nude++ + if(is_groin_exposed()) + if(getorganslot("penis")) + amt_nude++ + if(getorganslot("vagina")) + amt_nude++ + var/mob/living/M + var/watchers = 0 + for(M in view(world.view, src)) + if(M.client && !M.stat && !M.eye_blind && (locate(src) in viewers(world.view,M))) + watchers++ + if(watchers && amt_nude) + adjustArousalLoss((amt_nude * watchers) + S.arousal_gain_rate) + /mob/living/proc/getArousalLoss() return arousalloss @@ -55,35 +78,11 @@ return ((100 / max_arousal) * arousalloss) /mob/living/proc/isPercentAroused(percentage)//returns true if the mob's arousal (measured in a percent of 100) is greater than the arg percentage. - if(!isnum(percentage)) - return FALSE + if(!isnum(percentage) || percentage > 100 || percentage < 0) + CRASH("Provided percentage is invalid") if(getPercentAroused() >= percentage) return TRUE -/mob/living/proc/mob_masturbate()//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. - set name = "Masturbate" - set category = "IC" - if(canbearoused && !restrained() && !stat) - if(mb_cd_timer <= world.time) - //start the cooldown even if it fails - mb_cd_timer = world.time + mb_cd_length - if(getArousalLoss() >= ((max_arousal / 100) * 33))//33% arousal or greater required - src.visible_message("[src] starts masturbating!", \ - "You start masturbating.") - if(do_after(src, 100, target = src)) - src.visible_message("[src] relieves themself!", \ - "You have relieved yourself.") - setArousalLoss(min_arousal) - /* - switch(gender) - if(MALE) - PoolOrNew(/obj/effect/decal/cleanable/semen, loc) - if(FEMALE) - PoolOrNew(/obj/effect/decal/cleanable/femcum, loc) - */ - else - src << "You aren't aroused enough for that." - //H U D// /mob/living/proc/updatearousal() update_arousal_hud() @@ -143,6 +142,7 @@ /obj/screen/arousal name = "arousal" icon_state = "arousal0" + icon = 'code/citadel/icons/hud.dmi' screen_loc = ui_arousal /obj/screen/arousal/Click() @@ -154,3 +154,135 @@ return 1 else M << "Arousal is disabled. Feature is unavailable." + + + +/mob/living/proc/mob_masturbate()//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. + set name = "Masturbate" + set category = "IC" + if(canbearoused && !restrained() && !stat) + if(mb_cd_timer <= world.time) + //start the cooldown even if it fails + mb_cd_timer = world.time + mb_cd_length + if(getArousalLoss() >= ((max_arousal / 100) * 33))//33% arousal or greater required + src.visible_message("[src] starts masturbating!", \ + "You start masturbating.") + if(do_after(src, 30, target = src)) + src.visible_message("[src] relieves themself!", \ + "You have relieved yourself.") + setArousalLoss(min_arousal) + /* + switch(gender) + if(MALE) + PoolOrNew(/obj/effect/decal/cleanable/semen, loc) + if(FEMALE) + PoolOrNew(/obj/effect/decal/cleanable/femcum, loc) + */ + else + src << "You aren't aroused enough for that." + +/mob/living/carbon/human/mob_masturbate() + if(mb_cd_timer > world.time) + src << "You need to wait [round((mb_cd_timer - world.time)/(20))] seconds before you can do that again!" + return + var/list/genitals_list = list() + var/obj/item/organ/genital/SG = null//originally selected_genital + var/list/containers_list = list() + var/obj/item/weapon/reagent_containers/SC = null + var/datum/reagents/fluid_source = null + var/into_container = 0 + var/arms = get_num_arms() + var/free_hands = arms + var/total_cum = 0 + var/finished = 0 + var/mb_time = 30 + mb_cd_timer = (world.time + mb_cd_length) + if(canbearoused && has_dna()) + if(restrained()) + src << "You can't do that while restrained!" + return + if(stat) + src << "You must be conscious to do that!" + return + if(getArousalLoss() < 33)//flat number instead of percentage + src << "You aren't aroused enough for that!" + return + if(!is_groin_exposed()) + src << "You need to undress, first!" + return + if(!arms) + src << "You need at least one arm." + return + for(var/helditem in held_items)//how many hands are free + if(isobj(helditem)) + free_hands-- + if(free_hands <= 0) + src << "You need at least one free hand." + return + for(var/obj/item/organ/genital/G in internal_organs) + if(G.can_masturbate_with)//filter out what you can't masturbate with + genitals_list += G + if(genitals_list.len) + SG = input(src, "with what?", "Masturbate") as null|obj in genitals_list + if(SG) + for(var/obj/item/weapon/reagent_containers/container in held_items) + if(container.is_open_container() || istype(container, /obj/item/weapon/reagent_containers/food/snacks/pie)) + containers_list += container + if(containers_list.len) + SC = input(src, "Into or onto what?(Cancel for nowhere)", "Masturbate") as null|obj in containers_list + if(SC) + if(in_range(src, SC)) + into_container = 1 + SG.update() + switch(SG.type) + + //Penis + if(/obj/item/organ/genital/penis) + var/obj/item/organ/genital/penis/P = SG + if(!P.linked_balls) + src << "Grow a pair!" + return + fluid_source = P.linked_balls.reagents + total_cum = fluid_source.total_volume + if(into_container)//into a glass or beaker or whatever + src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG] over [SC].", \ + "You start jerking off over [SC.name].", \ + "You start masturbating.") + if(do_after(src, mb_time, target = src) && in_range(src, SC)) + fluid_source.trans_to(SC, total_cum) + src.visible_message("[src] orgasms, [pick("cumming into", "emptying themself into")] [SC]!", \ + "You cum into [SC].", \ + "You have relieved yourself.") + finished = 1 + + else//not into a container + src.visible_message("[src] starts [pick("jerking off","stroking")] their [pick(dick_nouns)].", \ + "You start jerking off your [pick(dick_nouns)].", \ + "You start masturbating.") + if(do_after(src, mb_time, target = src)) + if(total_cum > 5) + fluid_source.reaction(src.loc, TOUCH, 1, 0) + fluid_source.clear_reagents() + src.visible_message("[src] orgasms, [pick("shooting cum", "draining their balls")][istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ + "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \ + "You have relieved yourself.") + finished = 1 + + else//backup message, just in case + src.visible_message("[src] starts masturbating!", \ + "You start masturbating.") + if(do_after(src, mb_time, target = src)) + src.visible_message("[src] [pick("relieves themself!", "shudders and moans in orgasm!")]", \ + "You have relieved yourself.") + finished = 1 + if(finished) + setArousalLoss(min_arousal) + + else + src << "You have no genitals!" + return + +/mob/living/carbon/proc/force_orgasm(intensity) + if(canbearoused && has_dna() && (has_penis() || has_vagina())) + return 1 + return 0 \ No newline at end of file diff --git a/code/citadel/cit_genemods.dm b/code/citadel/cit_genemods.dm new file mode 100644 index 0000000000..2279ab972b --- /dev/null +++ b/code/citadel/cit_genemods.dm @@ -0,0 +1,22 @@ +//Will include consumable gene mods in the future. + +/obj/item/weapon/genemod + name = "genetic modifier" + desc = "Microbodies which can grow, morph, or otherwise change an organism into something else." + icon = 'icons/obj/items.dmi' + icon_state = "dnainjector" + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + origin_tech = "biotech=3" + var/applied_region = "chest" + var/list/add_mutations = list() + var/list/remove_mutations = list() + + var/list/add_mutations_static = list() + var/list/remove_mutations_static = list() + + var/used = 0 + +/obj/item/weapon/genemod/proc/use(mob/living/carbon/human/target) + return \ No newline at end of file diff --git a/code/citadel/kegs.dm b/code/citadel/cit_kegs.dm similarity index 100% rename from code/citadel/kegs.dm rename to code/citadel/cit_kegs.dm diff --git a/code/citadel/cit_reagents.dm b/code/citadel/cit_reagents.dm index 5b982656cc..794a3ad553 100644 --- a/code/citadel/cit_reagents.dm +++ b/code/citadel/cit_reagents.dm @@ -30,17 +30,15 @@ icon = 'code/citadel/icons/effects.dmi' icon_state = "semen1" random_icon_states = list("semen1", "semen2", "semen3", "semen4") -// blood_state = BLOOD_STATE_SEMEN -// bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/semen/New() + ..() dir = pick(1,2,4,8) - ..() -/obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S) -// if(S.reagent_DNA["semen"]) -// reagent_DNA["semen"] |= S.reagent_DNA["semen"] - ..() +/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) + if(!isspaceturf(T)) + var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/semen(T) + reagentdecal.reagents.add_reagent("semen", reac_volume) /datum/reagent/consumable/femcum name = "Female Ejaculate" @@ -65,14 +63,27 @@ bloodiness = null /obj/effect/decal/cleanable/femcum/New() - dir = pick(1,2,4,8) ..() + dir = pick(1,2,4,8) /obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F) if (F.blood_DNA) blood_DNA |= F.blood_DNA.Copy() ..() +/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) + if(!istype(T)) + return + if(reac_volume < 3) + return + + var/obj/effect/decal/cleanable/femcum/S = locate() in T + if(!S) + S = new(T) + S.reagents.add_reagent("semen", reac_volume) + if(data["blood_DNA"]) + S.blood_DNA[data["blood_DNA"]] = data["blood_type"] + //aphrodisiac & anaphrodisiac /datum/reagent/aphrodisiac diff --git a/code/citadel/icons/breasts.dmi b/code/citadel/icons/breasts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7735fad868889276367edccee07b983bcb83a99d GIT binary patch literal 698 zcmV;r0!96aP)VL>q##<>6h0mDf|K~z|U?Ug~2gdhw>0WVXp;)*Cm z!+>qO2>=Qh`=NkFf1<1CAny1B9s{~%KtK5mEIW7(qdElQihiV9 z?!CnTEh*018CMh@j2!~#ro)QE*LFnB3j9>KcdQ0r8aa?w*nM#h{LFx1!~nk<#@a1D zCIrZ5c69l$Tugug>3WA0KBv6&0a;Yy)lU=w)h1ADGu1{`Yn9bzTy6Ka{+Gx{c|i^F zURCsmLcsa~?+--<%-(r_C@N?;urnqZjddh|^@lKDw6LBv5YivQyu)t0WOT0?1Gqn| zW8}7LQ+?BlJ+bNpx^?T1_3I8Kspvq03jdcAF#i`+`2Q7vxv5kU^M6T&|4ZWj gFRS)F-?~-k8#AI)V^BJ9asU7T07*qoM6N<$f=N9!ApigX literal 0 HcmV?d00001 diff --git a/code/citadel/icons/breasts_onmob.dmi b/code/citadel/icons/breasts_onmob.dmi new file mode 100644 index 0000000000000000000000000000000000000000..12f23ad56db739f11fee8494dec316346fc62482 GIT binary patch literal 762 zcmV00001bW%=J06^y0W&i*Hk9t&CbVOxyV{&P5 zbZKvH004NLQ&wf&U z39v*Mrq_+OGcpKVd3XV4{W4GnSyh_C7!kgeXx-E|ldc z0s#0|#2+6eA<+{iWb9li3F)rfebLuQ3P0+$V(_*px%sM1r-HN%IN6OKy_8~bLHm8K zPOtWrx&gNZv4NQ6XiIsm&j$bi008(?%g57Elzw~^rJSDy35iVDioshhnf30Nul?vd zhXrJNE(@4u$EMZ`$oXLbBRc*}cKZ+1nvGgu^(+r4o8vg6w|-;~a&)NfgBjA(vmb5V z^z1-7^&dxtJfL(l3jhEB0Kl0rW!rPEMI#VUn)m*{)(edK zf3<*d1;}4-y8mAqKK_nYoIjpSbq-xl)?e?H?)K~BiR@o`>;0(lxV;}2uy@}?fz{AH z4C<7qZ~ds%3oP2Y75S0vtooe+0002szY*_b+)TVGGqQB&heFLrxbnkFZ|?)fogd0t zFW}!Vq&&Akb3Ji>h{?Y|c;TtHiN*z}@5G5EEMPM40wOE(c?Evh;jKTaDfj*xOlJK$ zYkhY>IZPc;(!txnYM6K(YHVSzihd$TT*{bv>jMA)0KlaziAX;W{H5Ue|G6EgpyHwh sY;VQ$|8r~K&jXh%5MD3<0KljE31*Hv9s}|q3jhEB07*qoM6N<$g2Mb|VE_OC literal 0 HcmV?d00001 diff --git a/code/citadel/icons/dildo.dmi b/code/citadel/icons/dildo.dmi new file mode 100644 index 0000000000000000000000000000000000000000..22eb48c9cfe8cada17c3bd5bbe56d6f2ae8df5c6 GIT binary patch literal 668 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%0D@G0-)^^M*!PZ8_KX5P<2f$?OY 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 A$p8QV diff --git a/code/citadel/icons/hud.dmi b/code/citadel/icons/hud.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bf2adcb1fcdb9c7ca35d186f72e62ced787db730 GIT binary patch literal 2019 zcmV<92ORi`P)YaZEbCDZ*OpLaBgmHeSLkpy1JH@mfCb>?|5V8L?`A* zEapir=1MQ-NG;|?D(6Wp_OGJRSxUt`EzUeH*jY=NnVEESbai!ga&mIQ!oqudd%HO+ z>yd-!Mk(h?F6T@!=Swf=NG$1FK)^F1$2=^ms;YN)cXoDmf`WouTU)?7EA@|k=t?i> zO*80DH0Vq+=twT`f^YS{wDrBTz&kARdS&TNGU-q?=}P3 zH|kP3>QOkrJuUKURO?eZ>r^|yJudQCKkimO?N&a(Lo?}BKJZyU?pQ$AOE~geL+@Hb z!$2?bT}AO-M(|uk+D|+5U`g^`NAX@q!#^58FP4i+*xH~T0 zQb71;QT1g{^kh!IJuT^6N%(0~_GeM`W>NNMQsr7j!ay(aV^8^NRrY98!apwZWm5ZY zSov&M_-j`4XH)!eTl#KU`E6M9Xj8*KFYjhk{&HUXa9sLtTkK*_zB?=EU{3#bVf}Mo z`*B^rJ1o6MIo?u2|9NEpbz%Kmcn|gYBlarHte0*YJVt#&pgM)*Gg@t8hWrl`^iHV7ahlgZjWQ&W7Y;0_gkB^Fq zij9qp0RI4yk&%v$j*^m+m6es3mzR{3lxS#Zo}QkXnwpN0G{yh`00DGTPE!Ct=GbNc z005ABR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh zDainGjE%TBGg33tGfE(w;*!LYR3K9+u_(W^I59_wi!&v&s2C_>$iOmBvJ?G$dLjPKC+}u6{1y$Oiy8nUcWS-A;J` z00b*ZL_t(&f$f;*SCU~Ehwn0zrY&gLvcQt|j^0YLT{alnUSNCgou#SmX?yRz_ujj# z)DS~4>Xef9KlC!hOx|wt;d%Wa*SFufIPk#X9Jn3;4_1m5_bOf@ca~shvH$VjC4EW? za;Jcu-v8mfN|i2CwoJM5zP9OGz8pJCm-2Ge`&6h{sdA+%LXmBXgjLvCv4W4QzG}7V zHT?W))~a2nu4UG(Q@d78KffB)t5tQ)``4>4mPi5`Gz^qlrZli&g8+#{T)&>bYrawA zCQX|)Z_%<<>o#rM0km)1rgf{9Et)rL+N5zKcX(L`remkhojV1|y9BeJfhf3(Jjk*; zG96^r19a`yy+_Ypy?XZU(>J7F{{aI-`u6E<**&^<>*@~ADEyU5l}f2pt3tyBGI^*< zZQK3|#^MJJ9x`;8mEj{shKw2=GIGRl+a5Y(@E~&UJw~n4SkWrOL&pk2!GtJkdMV9jbi zJgi&4VWU$vtY6262iUZE%T_0B*}RD#4{_VJ?{LEQZE^f~fStQ`@5#sRT|4>muy^17 z0|)=&!2W%E`SJjV4j(ysEDy(zoH)dv2RM1^^qD-IK6R2$4{-L}`3n~vTsVL3EWe(8 z#HGtuuG+bB`5NyY;QEc5w{Baxb@NUf{~qA(z55RyvOKtd?@?iRfX7dsK70QB+0!SF z3&#UIdhznrtCuf0&PU&~yngfM^*=Oq5AgPF;d&267s9?L^`w1I>Ph>a)MNcl+oSzX z+hhGs+k^C-HeP5$qkRA2<9nsXKI66Tr1U+A65`gcIz`VxirN)V-1nai zh7_k544+-`;`B)-_MP|BY$ssZK~wGv@pp((eB+Ch^yNh)rK|JoWzf7Mi|^ z|KgiT_{U!o&;5Yse!zm~e!z1-V8wGk;GyV3`+fj{cK>70?tcvG{f|Mr|1qfdKL+*w z$DrQ-=mBW=KL+*wM-M=||1s$IKL%;vqy3LT+V^<>W03Ye+W#0>zms|#tlvpJ3fAwW z9!IDDZu*f2(|3u^eICb{p26fHBi-mu@4^YhnMoNAk}}0c_j(+x-;F=anLq7hnoaqh zAM-d^zZ=C0bFdY&BGt+BV;%?Vcc~#zVP;VT8l3*mz&s9V-)ALeC;a-Ake!%Su-7N= zdufm&J6jP{!1r&3wC@EBBlwrcA?^FD0)PBPmfy#bO!Fa0HjV%Q002ovPDHLkV1mAC B3X=c; literal 0 HcmV?d00001 diff --git a/code/citadel/icons/onahole.dmi b/code/citadel/icons/onahole.dmi new file mode 100644 index 0000000000000000000000000000000000000000..030ebcc69d912e5717ecbf36be8b9699d271145c GIT binary patch literal 377 zcmV-<0fzpGP)t8JDQyTL1t60d!JMQvg8b*k%9#0DO8>Sad{Xb7OL8aCB*J zZU6vyoKseCa&`CgQ*iP1Xj8- z{anBv007#)I|a}%Ob!450E$UOK~zYI?Uca{fFKYA?>Z2%0;B*;v;wgLWB;w__l5*w z{2AuAkR4u&NarJNuvr~)nC-zBlFfOyg_slaiNcYPPZX|H$wlF{Kx17Xy7EPvMZ7I| z2p)wk=mtT7Z`^k}-%;+JjNCf~5qmELIdcmX6l0-)Yx|o(Ttgs!stZJyy5Lc?ew@w? X#S9z=k>*3000000NkvXXu0mjf+vu0f literal 0 HcmV?d00001 diff --git a/code/citadel/icons/ovipositor.dmi b/code/citadel/icons/ovipositor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..81d857417fbad922796305fb5790d72247f5efa0 GIT binary patch literal 775 zcmV+i1Ni)jP) zv$KMNg7ozC-{0S;sHoT1*MTl9`mUV$n~0P{Mc{>S$7xl-z`#VnT_6Ae00DGTPE!Ct z=GbNc005PGR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+zbrF8J1@VaBsC@8P>G8(C9|j)C~nBb znO2mTn+joLRc%C)YGZ<`Q`6In6O*&!lX4RCvWZqr*v&ANgxw2MiPNph3a)-G;9v#- zhBj)_^#^ov0005%Nkl_0G z5SQY59{|>+*Tj7&7mercpe&PUV$A)a`Gy_l{{tBS4ssNoF&pA@pHJukT8MA_ffr;V zEktwDaGAhpA-Y<4e0oh9Xn}IPBn`Acm^vIv zGAN~5+1^jj(DtE`kwIx`QK8%``KDwsh&*MntuXnZUliT{Ar1C_uz~y!0vhc9kk(I%(K(WS>Ip!$XqUiaZ32(=0WnKM@CiKDC-7LG zW>_?!Z9I*2@if+?8w4eo4ad4{I64+#n)PY%$%F=UIH7@}M962uDLRCFR&%2o(ps%N zWvv{)uLIJ8LTGqyf4t}Z&Q18WD!w1%2c~|A{~0WX@c;k>fJsC_RA_Z~rYAcGwDe2a#$|VOv&ryww;8?Y}h7j>fdg2P=l0U~5iPmqn+Si92 zplC`jy(WA08S0_ite9tEdasPcm_}*YM=^e!4ywKDH_lN zLPM_wo?#cymAjPgp#glTa;!)NEtsMKAcb@D9-jJy-vSnB2v9kE3$O)^p~ByS){(8- zfPMZJ5%EBw*8SO5*<7{*_hrs7d~V7Pft?>@7(OjphQU7G*Py2h?jl05U?1-fGs>BB zJh*R|PjrD-a#NuJ-GaTJKm)Jjc$tN01%gystn|^^RT;t}Wr>yswu>gCO_k2eQ2H zvf?1jVSXUZ`{Mb5H1A922jaXhogc{azI1-jIPY_4J@0dVG4IPA)~p{95php21K!5K zESWYHM1d}5N$C;c`~U?sTqH}*fSDhlfGXj^=oT7C=LcKJ=@E1>zKiDvHq3Q}CBz#D zFaL)HfMdlx!3_h?A$!F@x6hUR&_oWpt)2y?FmJxc|95Wjmg zo-193x!(e2ez5o)%>T%}7T{g&#`Zf{PkXE_{GJFnRxC-k={sI5!O+kiGxq~nF@Ju5 zBb&t$eMftc|ABjVP|jdpr^?WtCOb>YG5-U{in$HoLjo=F1{TcyfOiKao*yv43i{yY z2MqjQV6l4$FHhVrup%NNA|f6nGTHD$40U`pY}r9&^#?e){bE~o$O~H&%z60n%knh6?6vnYGj%jtX{2ZNh2TGvR^ka z&Y)3^o)QCPN2cuGq{VB4FYYLs9Ky?0y+*F9rX1A_M&`Jo!SfH_SGQ>|Ev-~`KpU-Md-oHHCug-ogIJvaN%o#TN`FJ|0 z2YBbVJG=S6na->_o4MD;9sB*Z-)=o1pUh?x_ZqioK+%~@e!e0iB7P4)0Hw+y>dnIj Qxc~qF07*qoM6N<$f+M)jLI3~& literal 0 HcmV?d00001 diff --git a/code/citadel/icons/penis_onmob.dmi b/code/citadel/icons/penis_onmob.dmi new file mode 100644 index 0000000000000000000000000000000000000000..628ed110680e79d859ef600d70e9343961f62804 GIT binary patch literal 1333 zcmX|>dsNbA7{`Ck8qNf}EOT1g*6GwTFD0od-j-$#kN27LN_m$Q6jM{fDUIA#)>?|0 zNyjeQN;J(-6QuL2wWA3$L^MPo6+%%U0#s0jc20jhm-C$G^E~hSeb0G+3l9x~n%kHI z000d>5fBLgCPJezHkcYKRWbLk8iQSUNOYj9tE<6a7#SIvo}QLUr7bNjN~O|R90!2Y z0AS|LyKC$;DToY>0{p~d>Bf9_Npx&MKpHM3KMPxsg~}dY&esD(oy|H}aTNB{xgWlf_1cXDIf|aye zFZ|2l_r^mu)n|QS6dwo`aTe70w|xi?LnTz;38__!hXz4grrRQM?KJ^_VTiHd)%IZg zBIKG})raOQ=T%&F^{8TA${&e}kY_^Wjmejyw6NE?-7Ao$iXgOyZqH_&wvZB;o zu{&%~vz+a>PmR+gUF>F^UQom&-=E1^)!epjUR8WVa-VceN}7G$oU}~x8^}nF?W9-v zfPFHI*^dHi&gIA%O_Pg6YMSN0q;o5;39io}YX>VXPz^$^Xfs5oSL@5@Me=iJkCyN9 zqMzACCQ4qmREiE5$c=%tZ-23*2XL*#CdFr<_ zt>~iGBI~uGfSI*-+YpoGBjDBBH*QQL%X1n}I;*~Bd(!n=p^rGFINu4RJ=w~uO58Tb zU%(Xq*^h7fY0g3atxfF1A{|Bg=BGI+T9aYOWAQ`_{tZipJ=whNtJs5lh3)_nO+}~Ouzf;jwLe<_RkuvcS zLSZs%CtWny%Xn@J!_jxFk-(R6V$L>*Jq2nhqY*}pYiLFP)%zmawXitVMTln7AB`VV zn4E2$9R7zoPBvR-01ccaNixLGEw`~AGi2%^sKI&=nOv@WYqPj>liurTSsBR29dzkN zOkh><%lXg@1MIlGPW5b^#-`49)|bwMt@JtW-z%BjMSg*D;zKoM6zk!fu)E}y&0r!$ z^q`P-Anvw`!PS4#m)J|b{3L9LEthnsj)a^g)Q_rXh)!H=3hIey*gXWiT+#JA$II$G z5+isVS32XmBePp6kk)Q@;PT9)Nf?8#@WW}z(y}sJYa>r6I z1HG8poKs|pNCc&}3+Geu+P=;s4dno$*JK@l?bW%=Fy}5p(%bCq>S*|4lx8{dV>cQL zil%yPCYKy(S|TAxtb;VRiH1zaOhc~*sUF&{qr2HNbV*0%qM&?h;i2$h1@BU##kAwf od&;On0X`Ua;{n(v1Tq;Nalz@9)ga%pKti#@jn@CPEXCJIddvlSTX@!lZ#W(^|UIwPO9kc;w zHCi`OoV_e`YSQO5*1&+K`5UV(4#&Z(@2VC?FJ&C1bIEA43@JnKY?a&Rla*iKbTfHE z3HCwx1Fnz;wBylHp(v_+{^=J+a$seoC#?1W00AILL_t(|obB5^PQ)+}2GE!v2~j2C z0!vP`6*V2#p`@hbm_WxWB3|^ZG>Uj{tCc+CahxU-XBYqg;4)g8;3|xt$1uTlbpZeX z06^LwNaN%Fz=Qq(0002H7r*~crLW)P{y_SCpY|7GH`N6I002O2_vZ)7`vd!@!?Am| z5C8zmrDxk)dVZj_u!MQa=3lz=pDb}Tx-ExZg6Y>k-wFE*IGJ;O!TT3*J3)U7I|an| zz~4q({(B5xcmMzZx#}m2{CI!1g0w#{r3uDm?5^O)fc0$ip+Cn~{4hWE;y3#PZJBxt z*o+^}*uqYKAdHU_l=lbDuze2z003}X96!7~XYo(Ry%zug0KmU@_w}pw_F7!P$9r)B e_r>!A)cFLG%n9wxM03^v0000w{ literal 0 HcmV?d00001 diff --git a/code/citadel/organs.dm b/code/citadel/organs.dm deleted file mode 100644 index 7ba1fd0ac2..0000000000 --- a/code/citadel/organs.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/organ/stomach - name = "stomach" - icon_state = "stomach" - zone = "chest" - slot = "stomach" - w_class = 3 - -/obj/item/organ/stomach/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent("sacid", 2) - return S - -/obj/item/organ/penis - name = "penis" - icon_state = "penis" - zone = "groin" - slot = "penis" - w_class = 3 - var/shape = "human" - var/size = "normal" - var/testicles - -/obj/item/organ/testicles - name = "testicles" - icon_state = "testicles" - zone = "groin" - slot = "testicles" - w_class = 3 - var/size = "normal" - -/obj/item/organ/vagina - name = "vagina" - icon_state = "vagina" - zone = "groin" - slot = "vagina" - w_class = 3 - var/shape = "human" - var/ovaries - -/obj/item/organ/womb - name = "womb" - icon_state = "womb" - zone = "groin" - slot = "womb" - w_class = 3 diff --git a/code/citadel/organs/breasts.dm b/code/citadel/organs/breasts.dm new file mode 100644 index 0000000000..41ebb2d0f8 --- /dev/null +++ b/code/citadel/organs/breasts.dm @@ -0,0 +1,32 @@ +/obj/item/organ/genital/breasts + name = "breasts" + desc = "Female milk producing organs." + icon_state = "breasts" + icon = 'code/citadel/icons/breasts.dmi' + zone = "chest" + slot = "breasts" + w_class = 3 + size = "e" + fluid_id = "milk" + var/cup_size = BREASTS_SIZE_DEF + var/amount = 2 + producing = TRUE + +/obj/item/organ/genital/breasts/New() + ..() + create_reagents(fluid_max_volume) + reagents.add_reagent(fluid_id, fluid_max_volume) + update() + +/obj/item/organ/genital/breasts/on_life() + reagents.maximum_volume = fluid_max_volume + if(fluid_id && producing) + generate_milk() + +/obj/item/organ/genital/breasts/proc/generate_milk() + if(!owner) + return FALSE + if(owner.stat == DEAD) + return FALSE + reagents.isolate_reagent(fluid_id) + reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate)) \ No newline at end of file diff --git a/code/citadel/organs/eggsack.dm b/code/citadel/organs/eggsack.dm new file mode 100644 index 0000000000..e760ef6035 --- /dev/null +++ b/code/citadel/organs/eggsack.dm @@ -0,0 +1,14 @@ +/obj/item/organ/genital/eggsack + name = "egg sack" + desc = "An egg producing reproductive organ." + icon_state = "egg_sack" + icon = 'code/citadel/icons/ovipositor.dmi' + zone = "groin" + slot = "testicles" + w_class = 3 + var/internal = TRUE + var/egg_girth = EGG_GIRTH_DEF + var/cum_mult = CUM_RATE_MULT + var/cum_rate = CUM_RATE + var/cum_efficiency = CUM_EFFICIENCY + var/obj/item/organ/ovipositor/linked_ovi diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm new file mode 100644 index 0000000000..1cd904fd83 --- /dev/null +++ b/code/citadel/organs/genitals.dm @@ -0,0 +1,233 @@ +/obj/item/organ/genital + color = "#fcccb3" + var/shape = "human" + var/sensitivity = 1 + var/list/genital_flags = list() + var/can_masturbate_with = 0 + var/size = 2 //can vary between num or text, just used in icon_state strings + var/fluid_id = null + var/fluid_max_volume = 50 + var/fluid_efficiency = 1 + var/fluid_rate = 1 + var/fluid_mult = 1 + var/producing = FALSE + +/obj/item/organ/genital/New() + ..() + reagents = create_reagents(fluid_max_volume) + +/obj/item/organ/genital/proc/update() + return + +/obj/item/organ/genital/proc/update_size() + return + +/obj/item/organ/genital/proc/update_appearance() + return + +/obj/item/organ/genital/proc/update_link() + + +/obj/item/organ/genital/Insert(mob/living/carbon/M, special = 0) + ..() + update() +/obj/item/organ/genital/Remove(mob/living/carbon/M, special = 0) + ..() + update() + +//proc to give a player their genitals and stuff when they log in +/mob/living/carbon/human/proc/give_genitals(clean=0)//clean will remove all pre-existing genitals. proc will then give them any genitals that are enabled in their DNA + if(clean) + var/obj/item/organ/genital/GtoClean + for(GtoClean in internal_organs) + GtoClean.Remove(src) + qdel(GtoClean) + if(dna.features["has_cock"]) + give_penis() + if(dna.features["has_balls"]) + give_balls() + else if(dna.features["has_ovi"]) + give_ovipositor() + if(dna.features["has_eggsack"]) + give_eggsack() + if(dna.features["has_breasts"]) + give_breasts() + if(dna.features["has_vag"]) + give_vagina() + if(dna.features["has_womb"]) + give_womb() + +/mob/living/carbon/human/proc/give_penis() + if(!dna) + return FALSE + if(NOGENITALS in dna.species.species_traits) + return FALSE + if(!getorganslot("penis")) + var/obj/item/organ/genital/penis/P = new + P.Insert(src) + if(P) + if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) + P.color = skintone2hex(skin_tone) + else + P.color = dna.features["cock_color"] + P.length = dna.features["cock_length"] + P.girth_ratio = dna.features["cock_girth_ratio"] + P.shape = dna.features["cock_shape"] + P.update() + +/mob/living/carbon/human/proc/give_balls() + if(!dna) + return FALSE + if(NOGENITALS in dna.species.species_traits) + return FALSE + if(!getorganslot("testicles")) + var/obj/item/organ/genital/testicles/T = new + T.Insert(src) + if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) + T.color = skintone2hex(skin_tone) + else + T.color = dna.features["balls_color"] + T.size = dna.features["bals_size"] + T.sack_size = dna.features["balls_sack_size"] + T.fluid_id = dna.features["balls_fluid"] + T.fluid_rate = dna.features["balls_cum_rate"] + T.fluid_mult = dna.features["balls_cum_mult"] + T.fluid_efficiency = dna.features["balls_efficiency"] + T.update() + +/mob/living/carbon/human/proc/give_breasts() + if(!has_dna()) + return FALSE + if(NOGENITALS in dna.species.species_traits) + return FALSE + if(!getorganslot("breasts")) + var/obj/item/organ/genital/breasts/B = new + B.Insert(src) + B.cup_size = dna.features["breasts_size"] + B.fluid_id = dna.features["breasts_fluid"] + B.update() + + +/mob/living/carbon/human/proc/give_ovipositor() +/mob/living/carbon/human/proc/give_eggsack() +/mob/living/carbon/human/proc/give_vagina() + if(!has_dna()) + return FALSE + if(NOGENITALS in dna.species.species_traits) + return FALSE + if(!getorganslot("vagina")) + var/obj/item/organ/genital/vagina/V = new + V.Insert(src) + if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) + V.color = skintone2hex(skin_tone) + else + V.color = dna.features["vag_color"] + V.update() +/mob/living/carbon/human/proc/give_womb() + if(!has_dna()) + return FALSE + if(NOGENITALS in dna.species.species_traits) + return FALSE + if(!getorganslot("womb")) + var/obj/item/organ/genital/womb/W = new + W.Insert(src) + W.update() + + +/datum/species/proc/genitals_layertext(layer) + switch(layer) + if(GENITALS_BEHIND_LAYER) + return "BEHIND" + if(GENITALS_ADJ_LAYER) + return "ADJ" + if(GENITALS_FRONT_LAYER) + return "FRONT" + +//procs to handle sprite overlays being applied to humans + +/obj/item/equipped(mob/user, slot) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.update_genitals() + ..() + +/mob/living/carbon/human/doUnEquip(obj/item/I, force) + . = ..() + if(!.) + return + update_genitals() + +/mob/living/carbon/human/proc/update_genitals() + dna.species.handle_genitals(src) + +/datum/species/proc/handle_genitals(mob/living/carbon/human/H) + if(!H) + CRASH("H = null") + if(!H.internal_organs.len) + return + if(NOGENITALS in species_traits) + return + + var/list/genitals_to_add = list() + var/list/relevent_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER) + var/list/standing = list() + var/size + + H.remove_overlay(GENITALS_BEHIND_LAYER) + H.remove_overlay(GENITALS_ADJ_LAYER) + H.remove_overlay(GENITALS_FRONT_LAYER) + + if(H.disabilities & HUSK) + return + //start scanning for genitals + if(H.has_penis() && H.is_groin_exposed()) + genitals_to_add += H.getorganslot("penis") + if(H.has_breasts() && H.is_chest_exposed()) + genitals_to_add += H.getorganslot("breasts") + if(H.has_vagina() && H.is_groin_exposed()) + genitals_to_add += H.getorganslot("vagina") + var/image/I + //start applying overlays + for(var/layer in relevent_layers) + var/layertext = genitals_layertext(layer) + for(var/obj/item/organ/genital/G in genitals_to_add) + var/datum/sprite_accessory/S + switch(G.type) + if(/obj/item/organ/genital/penis) + S = cock_shapes_list[G.shape] + size = G.size + + if(!S || S.icon_state == "none") + continue + var/icon_string + icon_string = "[G.slot]_[S.icon_state]_[size]_[layertext]" + I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer) + if(S.center) + I = center_image(I,S.dimension_x,S.dimension_y) + switch(S.color_src) + if("cock_color") + I.color = "#[H.dna.features["cock_color"]]" + if("breasts_color") + I.color = "#[H.dna.features["breasts_color"]]" + if(MUTCOLORS) + if(fixed_mut_color) + I.color = "#[fixed_mut_color]" + else + I.color = "#[H.dna.features["mcolor"]]" + if(MUTCOLORS2) + if(fixed_mut_color2) + I.color = "#[fixed_mut_color2]" + else + I.color = "#[H.dna.features["mcolor2"]]" + if(MUTCOLORS3) + if(fixed_mut_color3) + I.color = "#[fixed_mut_color3]" + else + I.color = "#[H.dna.features["mcolor3"]]" + standing += I + H.overlays_standing[layer] = standing.Copy() + standing = list() + + H.apply_overlay(GENITALS_BEHIND_LAYER) + H.apply_overlay(GENITALS_ADJ_LAYER) + H.apply_overlay(GENITALS_FRONT_LAYER) \ No newline at end of file diff --git a/code/citadel/organs/genitals_sprite_accessories.dm b/code/citadel/organs/genitals_sprite_accessories.dm new file mode 100644 index 0000000000..376017f73b --- /dev/null +++ b/code/citadel/organs/genitals_sprite_accessories.dm @@ -0,0 +1,116 @@ +//DICKS,COCKS,PENISES,WHATEVER YOU WANT TO CALL THEM +/datum/sprite_accessory/penis + icon = 'code/citadel/icons/penis_onmob.dmi' + icon_state = null + name = "penis" //the preview name of the accessory + gender_specific = 0 //Might be needed somewhere down the list. + color_src = "cock_color" + locked = 0 + +/datum/sprite_accessory/penis/none + icon_state = "none" + name = "None" + +/datum/sprite_accessory/penis/human + icon_state = "human" + name = "Human" + +/datum/sprite_accessory/penis/knotted + icon_state = "knotted" + name = "Knotted" + +/datum/sprite_accessory/penis/flared + icon_state = "flared" + name = "Flared" + +/datum/sprite_accessory/penis/barbknot + icon_state = "barbknot" + name = "Barbed, Knotted" + +/datum/sprite_accessory/penis/tapered + icon_state = "tapered" + name = "Tapered" + +//BREASTS BE HERE +/datum/sprite_accessory/breasts + icon = 'code/citadel/icons/breasts_onmob.dmi' + icon_state = null + name = "breasts" + gender_specific = 0 + color_src = MUTCOLORS2 //I'll have skin_tone override this if the species uses them + locked = 0 +/*!!ULTRACOMPRESSEDEDITION!!*/ +/datum/sprite_accessory/breasts/none + icon_state = "none" + name = "None" +/datum/sprite_accessory/breasts/a + icon_state = "a" + name = "A" +/datum/sprite_accessory/breasts/aa + icon_state = "a" + name = "AA" +/datum/sprite_accessory/breasts/b + icon_state = "b" + name = "B" +/datum/sprite_accessory/breasts/bb + icon_state = "b" + name = "BB" +/datum/sprite_accessory/breasts/c + icon_state = "c" + name = "C" +/datum/sprite_accessory/breasts/cc + icon_state = "c" + name = "CC" +/datum/sprite_accessory/breasts/d + icon_state = "d" + name = "D" +/datum/sprite_accessory/breasts/dd + icon_state = "d" + name = "DD" +/datum/sprite_accessory/breasts/e + icon_state = "e" + name = "E" +/datum/sprite_accessory/breasts/ee + icon_state = "e" + name = "EE" +/datum/sprite_accessory/breasts/f + icon_state = "f" + name = "F" + locked = 1 +/datum/sprite_accessory/breasts/ff + icon_state = "f" + name = "FF" + locked = 1 +/datum/sprite_accessory/breasts/g + icon_state = "g" + name = "G" + locked = 1 +/datum/sprite_accessory/breasts/gg + icon_state = "g" + name = "GG" + locked = 1 +/datum/sprite_accessory/breasts/h + icon_state = "h" + name = "H" + locked = 1 +/datum/sprite_accessory/breasts/hh + icon_state = "h" + name = "HH" + locked = 1 + +//OVIPOSITORS BE HERE +/datum/sprite_accessory/ovipositor + icon = 'code/citadel/icons/penis_onmob.dmi' + icon_state = null + name = "Ovipositor" //the preview name of the accessory + gender_specific = 0 //Might be needed somewhere down the list. + color_src = "cock_color" + locked = 0 + +/datum/sprite_accessory/ovipositor/knotted + icon_state = "none" + name = "None" + +/datum/sprite_accessory/ovipositor/knotted + icon_state = "knotted" + name = "Knotted" diff --git a/code/citadel/organs/ovipositor.dm b/code/citadel/organs/ovipositor.dm new file mode 100644 index 0000000000..b54b93bc93 --- /dev/null +++ b/code/citadel/organs/ovipositor.dm @@ -0,0 +1,17 @@ +/obj/item/organ/genital/ovipositor + name = "ovipositor" + desc = "An egg laying reproductive organ." + icon_state = "ovi_knotted_2" + icon = 'code/citadel/icons/ovipositor.dmi' + zone = "groin" + slot = "penis" + w_class = 3 + shape = "knotted" + size = 3 + var/length = 6 //inches + var/girth = 0 + var/girth_ratio = COCK_GIRTH_RATIO_DEF //citadel_defines.dm for these defines + var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF + var/list/oviflags = list() + + var/obj/item/organ/eggsack/linked_eggsack diff --git a/code/citadel/organs/penis.dm b/code/citadel/organs/penis.dm new file mode 100644 index 0000000000..7427503a99 --- /dev/null +++ b/code/citadel/organs/penis.dm @@ -0,0 +1,60 @@ +/obj/item/organ/genital/penis + name = "penis" + desc = "A male reproductive organ." + icon_state = "penis" + icon = 'code/citadel/icons/penis.dmi' + zone = "groin" + slot = "penis" + w_class = 3 + color = null + can_masturbate_with = 1 + size = 2 //arbitrary value derived from length and girth for sprites. + var/length = 6 //inches + var/girth = 0 + var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm + var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF + var/list/dickflags = list() + var/list/knotted_types = list("", "barbknot") + var/obj/item/organ/genital/testicles/linked_balls + +/obj/item/organ/genital/penis/New() + ..() + update() + +/obj/item/organ/genital/penis/update() + update_size() + update_appearance() + update_link() + +/obj/item/organ/genital/penis/update_size() + switch(length) + if(-INFINITY to 5) + size = 1 + if(5 to 9) + size = 2 + if(9 to 12) + size = 3//no new sprites for anything larger + if(9 to 15) + size = 3 + if(15 to INFINITY) + size = 3 + girth = (length * girth_ratio) + +/obj/item/organ/genital/penis/update_appearance() + var/string = "penis_[shape]_[size]" + icon_state = sanitize_text(string) +// name = "[shape] penis" + desc = "That's a [lowertext(shape)] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long and [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around." + if(!owner) + return + color = sanitize_hexcolor(owner.dna.features["cock_color"], 6, 0) + +/obj/item/organ/genital/penis/update_link() + if(owner) + linked_balls = (owner.getorganslot("testicles")) + if(linked_balls) + linked_balls.linked_penis = src + else + if(linked_balls) + linked_balls.linked_penis = null + linked_balls = null diff --git a/code/citadel/organs/testicles.dm b/code/citadel/organs/testicles.dm new file mode 100644 index 0000000000..9f2b0bacf2 --- /dev/null +++ b/code/citadel/organs/testicles.dm @@ -0,0 +1,60 @@ +/obj/item/organ/genital/testicles + name = "testicles" + desc = "A male reproductive organ." + icon_state = "testicles" + icon = 'code/citadel/icons/penis.dmi' + zone = "groin" + slot = "testicles" + w_class = 3 + var/internal = FALSE + size = BALLS_SIZE_DEF + var/sack_size = BALLS_SACK_SIZE_DEF + fluid_id = "semen" + producing = TRUE + var/sent_full_message = 1 //defaults to 1 since they're full to start + var/obj/item/organ/genital/penis/linked_penis + +/obj/item/organ/genital/testicles/New() + ..() + create_reagents(fluid_max_volume) + reagents.add_reagent(fluid_id, fluid_max_volume) + +/obj/item/organ/genital/testicles/on_life() + if(fluid_id && producing) + generate_cum() + +/obj/item/organ/genital/testicles/proc/generate_cum() + reagents.maximum_volume = fluid_max_volume + if(reagents.total_volume >= reagents.maximum_volume) + if(sent_full_message < 0) + send_full_message() + sent_full_message = 1 + return FALSE + sent_full_message = 0 + if(!owner && linked_penis) + if(linked_penis.linked_balls == src) + linked_penis.linked_balls = null + linked_penis = null + return FALSE + if(!reagents) + create_reagents(fluid_max_volume) + update_link() + if(!linked_penis) + return FALSE + reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally + reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))//generate the cum + +/obj/item/organ/genital/testicles/update_link() + if(owner) + linked_penis = (owner.getorganslot("penis")) + if(linked_penis) + linked_penis.linked_balls = src + else if(linked_penis != null) + linked_penis.linked_balls = null + linked_penis = null + +/obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.") + if(owner && istext(msg)) + owner << msg + return TRUE + diff --git a/code/citadel/organs/vagina.dm b/code/citadel/organs/vagina.dm new file mode 100644 index 0000000000..1229c45be9 --- /dev/null +++ b/code/citadel/organs/vagina.dm @@ -0,0 +1,15 @@ +/obj/item/organ/genital/vagina + name = "vagina" + desc = "A female reproductive organ." + icon_state = "vagina" + zone = "groin" + slot = "vagina" + can_masturbate_with = 1 + w_class = 3 + var/wetness = 1 + var/capacity_length = 8//D E P T H + var/capacity_girth = 8 + var/clits = 1 + var/clit_diam = 0.25 + var/clit_len = 0.25 + var/obj/item/organ/womb/linked_womb diff --git a/code/citadel/organs/womb.dm b/code/citadel/organs/womb.dm new file mode 100644 index 0000000000..563b434c80 --- /dev/null +++ b/code/citadel/organs/womb.dm @@ -0,0 +1,9 @@ +/obj/item/organ/genital/womb + name = "womb" + desc = "A female reproductive organ." + icon_state = "womb" + zone = "groin" + slot = "womb" + w_class = 3 + fluid_id = "femcum" + var/obj/item/organ/genital/vagina/linked_vag diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 2db9928edc..eba591ac50 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -91,7 +91,7 @@ CLONE:[M.getCloneLoss()] BRAIN:[M.getBrainLoss()] STAMINA:[M.getStaminaLoss()] - AROUSAL:[M.getArousalLoss()] + AROUSAL:[M.getArousalLoss()] "} else @@ -1148,6 +1148,8 @@ L.adjustCloneLoss(amount) if("stamina") L.adjustStaminaLoss(amount) + if("arousal") + L.adjustArousalLoss(amount) else usr << "You caused an error. DEBUG: Text:[Text] Mob:[L]" return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 3efc7d82b2..b18620c896 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -375,6 +375,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. A.Grant(user) + //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user) if(slot == slot_in_backpack || slot == slot_legcuffed) //these aren't true slots, so avoid granting actions there diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 78c5ceba85..89182acc0f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -493,7 +493,7 @@ var/global/BSACooldown = 0 set name="Toggle Dead OOC" dooc_allowed = !( dooc_allowed ) - log_admin("[key_name(usr)] toggled OOC.") + log_admin("[key_name(usr)] toggled Dead OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.") feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /* diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3915ee8df5..5a4123d75d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -62,14 +62,79 @@ var/list/preferences_datums = list() var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", - "xenodorsal" = "None", "xenohead" = "None", "xenotail" = "None", "legs" = "Normal Legs", "taur" = "None") + var/list/features = list("mcolor" = "FFF", + "mcolor2" = "FFF", + "mcolor3" = "FFF", + "tail_lizard" = "Smooth", + "tail_human" = "None", + "snout" = "Round", + "horns" = "None", + "ears" = "None", + "wings" = "None", + "frills" = "None", + "spines" = "None", + "body_markings" = "None", + "mam_body_markings" = "None", + "mam_ears" = "None", + "mam_tail" = "None", + "mam_tail_animated" = "None", + "xenodorsal" = "None", + "xenohead" = "None", + "xenotail" = "None", + "legs" = "Normal Legs", + "taur" = "None", + "exhibitionist" = FALSE, + "genitals_use_skintone" = FALSE, + "has_cock" = FALSE, + "cock_shape" = "human", + "cock_length" = 6, + "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, + "cock_color" = "fff", + "has_sheath" = FALSE, + "sheath_color" = "fff", + "has_balls" = FALSE, + "balls_internal" = FALSE, + "balls_color" = "fff", + "balls_amount" = 2, + "balls_sack_size" = BALLS_SACK_SIZE_DEF, + "balls_size" = BALLS_SIZE_DEF, + "balls_cum_rate" = CUM_RATE, + "balls_cum_mult" = CUM_RATE_MULT, + "balls_efficiency" = CUM_EFFICIENCY, + "balls_fluid" = "semen", + "has_ovi" = FALSE, + "ovi_shape" = "knotted", + "ovi_length" = 6, + "ovi_color" = "fff", + "has_eggsack" = FALSE, + "eggsack_internal" = TRUE, + "eggsack_color" = "fff", + "eggsack_size" = BALLS_SACK_SIZE_DEF, + "eggsack_egg_color" = "fff", + "eggsack_egg_size" = EGG_GIRTH_DEF, + "has_breasts" = FALSE, + "breasts_color" = "fff", + "breasts_size" = "C", + "breasts_fluid" = "milk", + "has_vag" = FALSE, + "vag_color" = "fff", + "vag_clits" = 1, + "vag_clit_diam" = 0.25, + "vag_clit_len" = 0.25, + "has_womb" = FALSE, + "womb_cum_rate" = CUM_RATE, + "womb_cum_mult" = CUM_RATE_MULT, + "womb_efficiency" = CUM_EFFICIENCY, + "womb_fluid" = "femcum" + )//MAKE SURE TO UPDATE THE LIST IN MOBS.DM IF YOU'RE GOING TO ADD TO THIS LIST, OTHERWISE THINGS MIGHT GET FUCKEY + var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") var/prefered_security_department = SEC_DEPT_RANDOM //Mob preview var/icon/preview_icon = null + var/icon/nude_preview_icon = null //Jobs, uses bitflags var/job_civilian_high = 0 @@ -90,7 +155,7 @@ var/list/preferences_datums = list() // Want randomjob if preferences already filled - Donkie var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants - // 0 = character settings, 1 = game preferences + // 0 = character settings, 1 = game preferences, 2 = character appearance var/current_tab = 0 var/flavor_text = "" @@ -135,13 +200,18 @@ var/list/preferences_datums = list() /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return - update_preview_icon() + if(current_tab == 2) + update_preview_icon(nude=TRUE) + else + update_preview_icon(nude=FALSE) user << browse_rsc(preview_icon, "previewicon.png") var/dat = "
" - dat += "Character Settings " + dat += "Character Settings" + dat += "Character Appearance" dat += "Game Preferences" + if(!path) dat += "
Please create an account to save your preferences
" @@ -179,7 +249,8 @@ var/list/preferences_datums = list() dat += "Gender: [gender == MALE ? "Male" : "Female"]
" dat += "Age: [age]
" - + dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" + dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
" dat += "Special Names:
" dat += "Clown: [custom_names["clown"]] " dat += "Mime:[custom_names["mime"]]
" @@ -196,270 +267,9 @@ var/list/preferences_datums = list() dat += "
" dat += "" - - dat += "

Body

" - dat += "Random Body " - dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
" - - dat += "" - - // dat += "Size:[character_size]
" - dat += "Set Flavor Text
" - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) - dat += "\[...\]" - else - dat += "[flavor_text]" - else - dat += "[TextPreview(flavor_text)]...
" dat += "
" - dat += "
" - if(pref_species.use_skintones) - - dat += "" - - if(HAIR in pref_species.species_traits) - - dat += "" - - if(EYECOLOR in pref_species.species_traits) - - dat += "" - - if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true. - - if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) - - dat += "" - - if("tail_lizard" in pref_species.mutant_bodyparts) - dat += "" - - if("snout" in pref_species.mutant_bodyparts) - dat += "" - - if("horns" in pref_species.mutant_bodyparts) - dat += "" - - if("frills" in pref_species.mutant_bodyparts) - dat += "" - - if("spines" in pref_species.mutant_bodyparts) - dat += "" - - if("body_markings" in pref_species.mutant_bodyparts) - dat += "" - - //Mammal bodyparts - if("mam_body_markings" in pref_species.mutant_bodyparts) - dat += "" - - if("mam_tail" in pref_species.mutant_bodyparts) - dat += "" - - if("mam_ears" in pref_species.mutant_bodyparts) - dat += "" - - if("taur" in pref_species.mutant_bodyparts) - dat += "" - -//Xeno Bodyparts - if("xenohead" in pref_species.mutant_bodyparts) - dat += "" - - if("xenotail" in pref_species.mutant_bodyparts) - dat += "" - - if("xenodorsal" in pref_species.mutant_bodyparts) - dat += "" - - if(config.mutant_humans) - - if("tail_human" in pref_species.mutant_bodyparts) - dat += "" - - if("ears" in pref_species.mutant_bodyparts) - dat += "" - - if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1) - dat += "" - - dat += "
" - - if(config.mutant_races) - dat += "Species:
[pref_species.id]
" - else - dat += "Species: Human
" - - dat += "Underwear:
[underwear]
" - dat += "Undershirt:
[undershirt]
" - dat += "Socks:
[socks]
" - dat += "Backpack:
[backbag]
" - dat += "Uplink Spawn Location:
[uplink_spawn_loc]
" - - dat += "

Skin Tone

" - - dat += "[skin_tone]
" - - dat += "
" - - dat += "

Hair Style

" - - dat += "[hair_style]
" - dat += "< >
" - dat += "    Change
" - - - dat += "
" - - dat += "

Facial Hair Style

" - - dat += "[facial_hair_style]
" - dat += "< >
" - dat += "    Change
" - - dat += "
" - - dat += "

Eye Color

" - - dat += "    Change
" - - dat += "
" - - dat += "

Alien/Mutant Colors

" - - dat += "    Change
" - - dat += "    Change
" - - dat += "    Change
" - - dat += "
" - - dat += "

Tail

" - - dat += "[features["tail_lizard"]]
" - - dat += "
" - - dat += "

Snout

" - - dat += "[features["snout"]]
" - - dat += "
" - - dat += "

Horns

" - - dat += "[features["horns"]]
" - - dat += "
" - - dat += "

Frills

" - - dat += "[features["frills"]]
" - - dat += "
" - - dat += "

Spines

" - - dat += "[features["spines"]]
" - - dat += "
" - - dat += "

Body Markings

" - - dat += "[features["body_markings"]]
" - - dat += "
" - - dat += "

Mammal Body Markings

" - - dat += "[features["mam_body_markings"]]
" - - dat += "
" - - dat += "

Tail

" - - dat += "[features["mam_tail"]]
" - - if("legs" in pref_species.mutant_bodyparts) - dat += "
" - - dat += "

Legs

" - - dat += "[features["legs"]]
" - - dat += "
" - - dat += "

Ears

" - - dat += "[features["mam_ears"]]
" - - dat += "
" - - dat += "

Taur Body

" - - dat += "[features["taur"]]
" - - dat += "
" - - dat += "

Head/Caste

" - - dat += "[features["xenohead"]]
" - - dat += "
" - - dat += "

Tail

" - - dat += "[features["xenotail"]]
" - - dat += "
" - - dat += "

Dorsal Tubes

" - - dat += "[features["xenodorsal"]]
" - - dat += "
" - - dat += "

Tail

" - - dat += "[features["tail_human"]]
" - - dat += "
" - - dat += "

Ears

" - - dat += "[features["ears"]]
" - - dat += "
" - - dat += "

Wings

" - - dat += "[features["wings"]]
" - - dat += "
" - //citadel code - if(NOGENITALS in pref_species.species_traits) - dat += "

Your species ([pref_species.name]) does not support genitals!

" - else - dat += "

Genitals

" - - dat += "" - - - dat += "
" - - dat += "" - - dat += "

Options

" - dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" - dat += "

More Coming Soon(tm)

" - - dat += "
" - - if (1) // Game Preferences dat += "
" dat += "

General Settings

" @@ -546,6 +356,7 @@ var/list/preferences_datums = list() else dat += "High" dat += "
" +// dat += "Genital Colors:[features["genitals_use_skintone"] == TRUE ? "Skin Tone" : "Custom"]
" dat += "
" @@ -573,6 +384,127 @@ var/list/preferences_datums = list() dat += "
" + //Character Appearance + if(2) + dat += "" + */ + + + dat += "
" + dat += "

" + dat += "Set Flavor Text
" + if(lentext(flavor_text) <= 40) + if(!lentext(flavor_text)) + dat += "\[...\]" + else + dat += "[flavor_text]" + else + dat += "[TextPreview(flavor_text)]...
" + if(config.mutant_races)//really don't need this check, but fuck un-tabbing all those lines + dat += "

Body

" + dat += "Gender: [gender == MALE ? "Male" : "Female"]
" + dat += "Species:[pref_species.id]
" + dat += "Random Body
" + dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
" + if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) + dat += "Primary Color:     Change
" + dat += "Secondary Color:     Change
" + dat += "Tertiary Color:     Change
" + if(pref_species.use_skintones) + dat += "Skin Tone: [skin_tone]
" + if(HAIR in pref_species.species_traits) + dat += "Hair Style: [hair_style]
" + dat += "Hair Color:     Change
" + dat += "Facial Hair Style: [facial_hair_style]
" + dat += "Facial Hair Color:     Change
" + if(EYECOLOR in pref_species.species_traits) + dat += "Eye Color:     Change
" + if("tail_lizard" in pref_species.mutant_bodyparts) + dat += "Tail: [features["tail_lizard"]]
" + else if("mam_tail" in pref_species.mutant_bodyparts) + dat += "Tail: [features["mam_tail"]]
" + else if("tail_human" in pref_species.mutant_bodyparts) + dat += "Tail: [features["tail_human"]]
" + if("snout" in pref_species.mutant_bodyparts) + dat += "Snout: [features["snout"]]
" + if("horns" in pref_species.mutant_bodyparts) + dat += "Snout: [features["horns"]]
" + if("frills" in pref_species.mutant_bodyparts) + dat += "Frills: [features["frills"]]
" + if("spines" in pref_species.mutant_bodyparts) + dat += "Spines: [features["spines"]]
" + if("body_markings" in pref_species.mutant_bodyparts) + dat += "Body Markings: [features["body_markings"]]
" + else if("mam_body_markings" in pref_species.mutant_bodyparts) + dat += "Body Markings: [features["mam_body_markings"]]
" + if("mam_ears" in pref_species.mutant_bodyparts) + dat += "Ears: [features["mam_ears"]]
" + else if("ears" in pref_species.mutant_bodyparts) + dat += "Ears: [features["ears"]]
" + if("legs" in pref_species.mutant_bodyparts) + dat += "Legs: [features["legs"]]
" + if("taur" in pref_species.mutant_bodyparts) + dat += "Taur: [features["taur"]]
" + if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1) + dat += "Wings: [features["wings"]]
" + if("xenohead" in pref_species.mutant_bodyparts) + dat += "Caste: [features["xenohead"]]
" + if("xenotail" in pref_species.mutant_bodyparts) + dat += "Tail: [features["xenotail"]]
" + if("xenodorsal" in pref_species.mutant_bodyparts) + dat += "Dorsal Tubes: [features["xenodorsal"]]
" + + dat += "
" + + + dat += "

Clothing & Equipment

" +//underwear will be refactored later so it fits in with other wearable equipment and isn't just an overlay +// dat += "Underwear:[underwear]
" +// dat += "Undershirt:[undershirt]
" +// dat += "Socks:[socks]
" + dat += "Backpack:[backbag]
" + dat += "Uplink Location:[uplink_spawn_loc]
" + + dat += "

Genitals

" + if(NOGENITALS in pref_species.species_traits) + dat += "Your species ([pref_species.name]) does not support genitals!
" + else + dat += "Has Penis:[features["has_cock"] == TRUE ? "Yes" : "No"]
" + if(features["has_cock"] == TRUE) + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "Penis Color:   (Skin tone overriding)
" + else + dat += "Penis Color:    Change
" +// dat += "
" + dat += "Penis Shape: [features["cock_shape"]]
" + dat += "Penis Length: [features["cock_length"]] inch(es)
" + dat += "Has Testicles:[features["has_balls"] == TRUE ? "Yes" : "No"]
" + if(features["has_balls"] == TRUE) + dat += "Testicles Color:    Change
" + dat += "Has Vagina:[features["has_vag"] == TRUE ? "Yes" : "No"]
" + if(features["has_vag"]) + dat += "Vagina Color:    Change
" + dat += "Has Womb:[features["has_womb"] == TRUE ? "Yes" : "No"]
" + dat += "Has Breasts:[features["has_breasts"] == TRUE ? "Yes" : "No"]
" + if(features["has_breasts"]) +// if(pref_species.use_skintones) +// dat += "Color:   (Skin tone overriding)" +// else +// dat += "Color:    Change" + dat += "Cup Size:[features["breasts_size"]]
" + /* + dat += "

Ovipositor

" + dat += "Has Ovipositor:[features["has_ovi"] == TRUE ? "Yes" : "No"]" + if(features["has_ovi"]) + dat += "Ovi Color:    Change" + dat += "

Eggsack

" + dat += "Has Eggsack:[features["has_eggsack"] == TRUE ? "Yes" : "No"]
" + if(features["has_eggsack"] == TRUE) + dat += "Color:    Change" + dat += "Egg Color:    Change" + dat += "Egg Size:[features["eggsack_egg_size"]]\" Diameter" + + dat += "
" dat += "
" if(!IsGuestKey(user.key)) @@ -1122,24 +1054,33 @@ var/list/preferences_datums = list() new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard if(new_tail) features["tail_lizard"] = new_tail + if(new_tail != "None") + features["taur"] = "None" if("tail_human") var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_human if(new_tail) features["tail_human"] = new_tail + if(new_tail != "None") + features["taur"] = "None" if("mam_tail") var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list if(new_tail) features["mam_tail"] = new_tail + if(new_tail != "None") + features["taur"] = "None" if("taur") var/new_taur new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in taur_list if(new_taur) features["taur"] = new_taur + if(new_taur != "None") + features["mam_tail"] = "None" + features["xenotail"] = "None" /* Doesn't exist yet. will include facial overlays to mimic 5th port species heads. if("mam_snout") @@ -1326,6 +1267,82 @@ var/list/preferences_datums = list() if(pickedui) UI_style = pickedui + //citadel code + if("cock_color") + var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null + if(new_cockcolor) + var/temp_hsv = RGBtoHSV(new_cockcolor) + if(new_cockcolor == "#000000") + features["cock_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["cock_color"] = sanitize_hexcolor(new_cockcolor) + else + user << "Invalid color. Your color is not bright enough." + + if("cock_length") + var/new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Character Preference") as num|null + if(new_length) + features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN) + + if("cock_shape") + var/new_shape + new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in cock_shapes_list + if(new_shape) + features["cock_shape"] = new_shape + + if("balls_color") + var/new_ballscolor = input(user, "Testicle Color:", "Character Preference") as color|null + if(new_ballscolor) + var/temp_hsv = RGBtoHSV(new_ballscolor) + if(new_ballscolor == "#000000") + features["balls_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["balls_color"] = sanitize_hexcolor(new_ballscolor) + else + user << "Invalid color. Your color is not bright enough." + + if("egg_size") + var/new_size + var/list/egg_sizes = list(1,2,3) + new_size = input(user, "Egg Diameter(inches):", "Egg Size") as null|anything in egg_sizes + if(new_size) + features["eggsack_egg_size"] = new_size + + if("egg_color") + var/new_egg_color = input(user, "Egg Color:", "Character Preference") as color|null + if(new_egg_color) + var/temp_hsv = RGBtoHSV(new_egg_color) + if(ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["eggsack_egg_color"] = sanitize_hexcolor(new_egg_color) + else + user << "Invalid color. Your color is not bright enough." + if("breasts_size") + var/new_size + new_size = input(user, "Breast Size", "Character Preference") as null|anything in breasts_size_list + if(new_size) + features["breasts_size"] = new_size + + if("breasts_color") + var/new_breasts_color = input(user, "Breast Color:", "Character Preference") as color|null + if(new_breasts_color) + var/temp_hsv = RGBtoHSV(new_breasts_color) + if(new_breasts_color == "#000000") + features["breasts_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["breasts_color"] = sanitize_hexcolor(new_breasts_color) + else + user << "Invalid color. Your color is not bright enough." + if("vag_color") + var/new_vagcolor = input(user, "Vagina color:", "Character Preference") as color|null + if(new_vagcolor) + var/temp_hsv = RGBtoHSV(new_vagcolor) + if(new_vagcolor == "#000000") + features["vag_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["vag_color"] = sanitize_hexcolor(new_vagcolor) + else + user << "Invalid color. Your color is not bright enough." + else switch(href_list["preference"]) @@ -1339,6 +1356,105 @@ var/list/preferences_datums = list() arousable = TRUE else//failsafe arousable = FALSE + if("has_cock") + switch(features["has_cock"]) + if(TRUE) + features["has_cock"] = FALSE + if(FALSE) + features["has_cock"] = TRUE + features["has_ovi"] = FALSE + features["has_eggsack"] = FALSE + else + features["has_cock"] = FALSE + features["has_ovi"] = FALSE + if("has_balls") + switch(features["has_balls"]) + if(TRUE) + features["has_balls"] = FALSE + if(FALSE) + features["has_balls"] = TRUE + features["has_eggsack"] = FALSE + else + features["has_balls"] = FALSE + features["has_eggsack"] = FALSE + + if("has_ovi") + switch(features["has_ovi"]) + if(TRUE) + features["has_ovi"] = FALSE + if(FALSE) + features["has_ovi"] = TRUE + features["has_cock"] = FALSE + features["has_balls"] = FALSE + else + features["has_ovi"] = FALSE + features["has_cock"] = FALSE + + if("has_eggsack") + switch(features["has_eggsack"]) + if(TRUE) + features["has_eggsack"] = FALSE + if(FALSE) + features["has_eggsack"] = TRUE + features["has_balls"] = FALSE + else + features["has_eggsack"] = FALSE + features["has_balls"] = FALSE + + if("balls_internal") + switch(features["balls_internal"]) + if(TRUE) + features["balls_internal"] = FALSE + if(FALSE) + features["balls_internal"] = TRUE + features["eggsack_internal"] = FALSE + else + features["balls_internal"] = FALSE + features["eggsack_internal"] = FALSE + + if("eggsack_internal") + switch(features["eggsack_internal"]) + if(TRUE) + features["eggsack_internal"] = FALSE + if(FALSE) + features["eggsack_internal"] = TRUE + features["balls_internal"] = FALSE + else + features["eggsack_internal"] = FALSE + features["balls_internal"] = FALSE + + if("has_breasts") + switch(features["has_breasts"]) + if(TRUE) + features["has_breasts"] = FALSE + if(FALSE) + features["has_breasts"] = TRUE + else + features["has_breasts"] = FALSE + if("has_vag") + switch(features["has_vag"]) + if(TRUE) + features["has_vag"] = FALSE + if(FALSE) + features["has_vag"] = TRUE + else + features["has_vag"] = FALSE + if("has_womb") + switch(features["has_womb"]) + if(TRUE) + features["has_womb"] = FALSE + if(FALSE) + features["has_womb"] = TRUE + else + features["has_womb"] = FALSE + if("exhibitionist") + switch(features["exhibitionist"]) + if(TRUE) + features["exhibitionist"] = FALSE + if(FALSE) + features["exhibitionist"] = TRUE + else + features["exhibitionist"] = FALSE if("publicity") if(unlock_content) @@ -1348,11 +1464,11 @@ var/list/preferences_datums = list() gender = FEMALE else gender = MALE - underwear = random_underwear(gender) - undershirt = random_undershirt(gender) - socks = random_socks() - facial_hair_style = random_facial_hair_style(gender) - hair_style = random_hair_style(gender) + underwear = "Nude" + undershirt = "Nude" + socks = "Nude" + facial_hair_style = "Shaved" + hair_style = "Bald" if("hotkeys") hotkeys = !hotkeys @@ -1490,6 +1606,8 @@ var/list/preferences_datums = list() else chosen_species = /datum/species/human character.set_species(chosen_species, icon_update=0) + //citadel code + character.give_genitals() if(icon_updates) character.update_body() diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 83735853c9..551d18e246 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -8,14 +8,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car This proc checks if the current directory of the savefile S needs updating It is to be used by the load_character and load_preferences procs. (S.cd=="/" is preferences, S.cd=="/character[integer]" is a character slot, etc) - if the current directory's version is below SAVEFILE_VERSION_MIN it will simply wipe everything in that directory (if we're at root "/" then it'll just wipe the entire savefile, for instance.) - if its version is below SAVEFILE_VERSION_MAX but above the minimum, it will load data but later call the respective update_preferences() or update_character() proc. Those procs allow coders to specify format changes so users do not lose their setups and have to redo them again. - Failing all that, the standard sanity checks are performed. They simply check the data is suitable, reverting to initial() values if necessary. */ @@ -312,6 +309,27 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_xeno_dors"] >> features["xenodorsal"] S["feature_xeno_head"] >> features["xenohead"] S["feature_lizard_legs"] >> features["legs"] + //cock features + S["feature_has_cock"] >> features["has_cock"] + S["feature_cock_shape"] >> features["cock_shape"] + S["feature_cock_color"] >> features["cock_color"] + S["feature_cock_length"] >> features["cock_length"] + S["feature_cock_girth"] >> features["cock_girth"] + S["feature_has_sheath"] >> features["sheath_color"] + //balls features + S["feature_has_balls"] >> features["has_balls"] + S["feature_balls_color"] >> features["balls_color"] + S["feature_balls_size"] >> features["balls_size"] + S["feature_balls_sack_size"] >> features["balls_sack_size"] + S["feature_balls_fluid"] >> features["balls_fluid"] + //breasts features + S["feature_has_breasts"] >> features["has_breasts"] + S["feature_breasts_size"] >> features["breasts_size"] + S["feature_breasts_color"] >> features["breasts_color"] + S["feature_breasts_fluid"] >> features["breasts_fluid"] + //vagina features + S["feature_has_vag"] >> features["has_vag"] + S["feature_vag_color"] >> features["vag_color"] if(!config.mutant_humans) features["tail_human"] = "none" features["ears"] = "none" @@ -361,14 +379,17 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(gender == MALE) hair_style = sanitize_inlist(hair_style, hair_styles_male_list) facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_male_list) - underwear = sanitize_inlist(underwear, underwear_m) - undershirt = sanitize_inlist(undershirt, undershirt_m) +// underwear = sanitize_inlist(underwear, underwear_m) +// undershirt = sanitize_inlist(undershirt, undershirt_m) else hair_style = sanitize_inlist(hair_style, hair_styles_female_list) facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_female_list) - underwear = sanitize_inlist(underwear, underwear_f) - undershirt = sanitize_inlist(undershirt, undershirt_f) - socks = sanitize_inlist(socks, socks_list) +// underwear = sanitize_inlist(underwear, underwear_f) +// undershirt = sanitize_inlist(undershirt, undershirt_f) +// socks = sanitize_inlist(socks, socks_list) + underwear = "Nude" + undershirt = "Nude" + socks = "Nude" age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) @@ -396,6 +417,25 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list) features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list) features["feature_lizard_legs"] = sanitize_inlist(features["legs"], legs_list, "Normal Legs") + //cock features + features["has_cock"] = sanitize_integer(features["has_cock"], 0, 1, 0) + features["cock_shape"] = sanitize_inlist(features["cock_shape"], cock_shapes_list, "Human") + features["cock_color"] = sanitize_hexcolor(features["cock_color"], 3, 0) + features["cock_length"] = sanitize_integer(features["cock_length"], COCK_SIZE_MIN, COCK_SIZE_MAX, 6) + //balls features + features["has_balls"] = sanitize_integer(features["has_balls"], 0, 1, 0) + features["balls_color"] = sanitize_hexcolor(features["balls_color"], 3, 0) + features["balls_size"] = sanitize_integer(features["balls_size"], BALLS_SIZE_MIN, BALLS_SIZE_MAX, BALLS_SIZE_DEF) + features["balls_sack_size"] = sanitize_integer(features["balls_sack_size"], BALLS_SACK_SIZE_MIN, BALLS_SACK_SIZE_MAX, BALLS_SACK_SIZE_DEF) + features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], cum_id_list, "semen") + //breasts features + features["has_breasts"] = sanitize_integer(features["has_breasts"], 0, 1, 0) + features["breasts_size"] = sanitize_inlist(features["breasts_size"], breasts_size_list, "C") + features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0) + features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], cum_id_list, "semen") + //vagina features + features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0) + features["vag_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0) joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) @@ -468,6 +508,27 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["religion_name"] << custom_names["religion"] S["deity_name"] << custom_names["deity"] S["prefered_security_department"] << prefered_security_department + //cock features + S["feature_has_cock"] << features["has_cock"] + S["feature_cock_shape"] << features["cock_shape"] + S["feature_cock_color"] << features["cock_color"] + S["feature_cock_length"] << features["cock_length"] + S["feature_cock_girth"] << features["cock_girth"] + S["feature_has_sheath"] << features["sheath_color"] + //balls features + S["feature_has_balls"] << features["has_balls"] + S["feature_balls_color"] << features["balls_color"] + S["feature_balls_size"] << features["balls_size"] + S["feature_balls_sack_size"] << features["balls_sack_size"] + S["feature_balls_fluid"] << features["balls_fluid"] + //breasts features + S["feature_has_breasts"] << features["has_breasts"] + S["feature_breasts_size"] << features["breasts_size"] + S["feature_breasts_color"] << features["breasts_color"] + S["feature_breasts_fluid"] << features["breasts_fluid"] + //vagina features + S["feature_has_vag"] << features["has_vag"] + S["feature_vag_color"] << features["vag_color"] //Jobs S["joblessrole"] << joblessrole @@ -496,4 +557,4 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car /client/verb/savefile_import(path as text) var/savefile/S = new /savefile(path) S.ImportText("/",file("[path].txt")) -*/ +*/ \ No newline at end of file diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index a3c076a81d..b6ccee3f7c 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -517,6 +517,22 @@ icon_state = "glass_yellow" name = "Eggnog" desc = "For enjoying the most wonderful time of the year." + if("aphro") + icon_state = "glass_aphro" + name = "glass of aphrodisiac" + desc = "For your love interest." + if("aphro+") + icon_state = "glass_aphro+" + name = "glass of strong aphrodisiac" + desc = "For your less interested love interest." + if("semen") + icon_state = "glass_semen" + name = "glass of semen" + desc = "Salty." + if("femcum") + icon_state = "glass_femcum" + name = "glass of female ejaculate" + desc = "A glass of female ejaculate." else icon_state ="glass_brown" var/image/I = image(icon, "glassoverlay") @@ -627,6 +643,18 @@ icon_state = "shotglassgreen" name = "shot of absinthe" desc = "I am stuck in the cycles of my guilt..." + if ("semen") + icon_state = "shotglasswhite" + name = "cum shot" + desc = "All those college years boil down to this." + if("aphro") + icon_state = "shotglassaphro" + name = "shot of love" + desc = "Guaranteed to put you in the mood." + if("aphro+") + icon_state = "shotglassaphro" + name = "strong shot of love" + desc = "Guaranteed to put you in the mood. Not recommended to take more than one unless you're dedicated." else icon_state = "shotglassbrown" name = "shot of... what?" @@ -648,7 +676,7 @@ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/cola name = "Space Cola" list_reagents = list("cola" = 50) - + /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola name = "Nuka Cola" list_reagents = list("nuka_cola" = 50) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index c4584d01dd..06c6982b35 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -36,6 +36,8 @@ adjustCloneLoss(damage * hit_percent) if(STAMINA) adjustStaminaLoss(damage * hit_percent) + if(AROUSAL) + adjustArousalLoss(damage * hit_percent) return 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 06c7144c44..264bf56cbe 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -28,6 +28,9 @@ if (notransform) return + //citadel code + if(stat != DEAD) + handle_arousal() if(..()) //not dead for(var/datum/mutation/human/HM in dna.mutations) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 443fb6e3fb..828419cb5e 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -269,6 +269,7 @@ standing += img_eyes //Underwear, Undershirts & Socks + /*This will be refactored at a later date if(H.underwear) var/datum/sprite_accessory/underwear/underwear = underwear_list[H.underwear] if(underwear) @@ -286,11 +287,13 @@ var/datum/sprite_accessory/socks/socks = socks_list[H.socks] if(socks) standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER) - + */ if(standing.len) H.overlays_standing[BODY_LAYER] = standing H.apply_overlay(BODY_LAYER) + //citadel code + handle_genitals(H) handle_mutant_bodyparts(H) /datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) @@ -392,9 +395,9 @@ bodyparts_to_add -= "mam_ears" if("taur" in mutant_bodyparts) - if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || !H.dna.features["mam_tail"] == "None" || !H.dna.features["mam_waggingtail"] == "None") + if(!H.dna.features["taur"] || H.dna.features["taur"] == "None") bodyparts_to_add -= "taur" - + else //Digitigrade legs are stuck in the phantom zone between true limbs and mutant bodyparts. Mainly it just needs more agressive updating than most limbs. var/update_needed = FALSE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a666573d16..421a67c5b4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -265,8 +265,11 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += shoes //add it to client's screen update_observer_view(shoes,1) - var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') - overlays_standing[SHOES_LAYER] = standing + if("taur" in dna.species.mutant_bodyparts) + switch(dna.features["taur"]) + if(!"Naga" || "None") + var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') + overlays_standing[SHOES_LAYER] = standing apply_overlay(SHOES_LAYER) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index ec5689d782..a78674c42b 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -224,6 +224,9 @@ /mob/living/carbon/proc/update_body_parts() //CHECK FOR UPDATE var/oldkey = icon_render_key + var/istaur = 0 + if("taur" in dna.species.mutant_bodyparts && dna.features["taur"] != "None") + istaur = 1 icon_render_key = generate_icon_render_key() if(oldkey == icon_render_key) return @@ -232,6 +235,8 @@ for(var/X in bodyparts) var/obj/item/bodypart/BP = X + if(istaur && (istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) ) + continue BP.update_limb() //LOAD ICONS diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 499bcb328f..8f05c8853f 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -5,9 +5,6 @@ gender = gender_override else gender = pick(MALE,FEMALE) - underwear = random_underwear(gender) - undershirt = random_undershirt(gender) - socks = random_socks() skin_tone = random_skin_tone() hair_style = random_hair_style(gender) facial_hair_style = random_facial_hair_style(gender) @@ -17,12 +14,16 @@ if(!pref_species) var/rando_race = pick(config.roundstart_races) pref_species = new rando_race() - backbag = 1 features = random_features() age = rand(AGE_MIN,AGE_MAX) -/datum/preferences/proc/update_preview_icon() +/datum/preferences/proc/update_preview_icon(nude=FALSE) // Silicons only need a very basic preview since there is no customization for them. + var/wide_icon = 0 + var/stamp_x = 0 + var/stamp_y = 1 + if(features["taur"] != "None") + wide_icon = 1 if(job_engsec_high) switch(job_engsec_high) if(AI) @@ -41,45 +42,56 @@ // Determine what job is marked as 'High' priority, and dress them up as such. var/datum/job/previewJob var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high + if(!nude) + if(job_civilian_low & ASSISTANT) + previewJob = SSjob.GetJob("Assistant") + else if(highRankFlag) + var/highDeptFlag + if(job_civilian_high) + highDeptFlag = CIVILIAN + else if(job_medsci_high) + highDeptFlag = MEDSCI + else if(job_engsec_high) + highDeptFlag = ENGSEC - if(job_civilian_low & ASSISTANT) - previewJob = SSjob.GetJob("Assistant") - else if(highRankFlag) - var/highDeptFlag - if(job_civilian_high) - highDeptFlag = CIVILIAN - else if(job_medsci_high) - highDeptFlag = MEDSCI - else if(job_engsec_high) - highDeptFlag = ENGSEC - - for(var/datum/job/job in SSjob.occupations) - if(job.flag == highRankFlag && job.department_flag == highDeptFlag) - previewJob = job - break + for(var/datum/job/job in SSjob.occupations) + if(job.flag == highRankFlag && job.department_flag == highDeptFlag) + previewJob = job + break if(previewJob) mannequin.job = previewJob.title previewJob.equip(mannequin, TRUE) CHECK_TICK preview_icon = icon('icons/effects/effects.dmi', "nothing") - preview_icon.Scale(48+32, 16+32) + preview_icon.Scale((112), (32)) CHECK_TICK mannequin.setDir(NORTH) - var/icon/stamp = getFlatIcon(mannequin) + if(wide_icon) + stamp_x = 16 + else + stamp_x = 32 CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17) + preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y) CHECK_TICK mannequin.setDir(WEST) stamp = getFlatIcon(mannequin) + if(wide_icon) + stamp_x = 48 + else + stamp_x = 64 CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9) + preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y) CHECK_TICK mannequin.setDir(SOUTH) stamp = getFlatIcon(mannequin) + if(wide_icon) + stamp_x = -15 + else + stamp_x = 1 CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1) + preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y) CHECK_TICK preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. CHECK_TICK diff --git a/code/modules/reagents/kegs.dm b/code/modules/reagents/kegs.dm deleted file mode 100644 index 6767c52218..0000000000 --- a/code/modules/reagents/kegs.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/structure/reagent_dispensers/keg - name = "keg" - desc = "A keg." - icon_state = "keg" - var/reagent_type = "water" - -/obj/structure/reagent_dispensers/keg/New() - ..() - reagents.add_reagent(reagent_type,1000) - -/obj/structure/reagent_dispensers/keg/blob_act() - qdel(src) - -/obj/structure/reagent_dispensers/keg/mead - name = "keg of mead" - desc = "A keg of mead." - icon_state = "orangekeg" - reagent_type = "mead" - -/obj/structure/reagent_dispensers/keg/aphro - name = "keg of aphrodisiac" - desc = "A keg of aphrodisiac." - icon_state = "pinkkeg" - reagent_type = "hornychem" - -/obj/structure/reagent_dispensers/keg/milk - name = "keg of milk" - desc = "It's not quite what you were hoping for." - icon_state = "whitekeg" - reagent_type = "milk" - -/obj/structure/reagent_dispensers/keg/semen - name = "keg of semen" - desc = "Dear lord, where did this even come from?" - icon_state = "whitekeg" - reagent_type = "semen" - -/obj/structure/reagent_dispensers/keg/gargle - name = "keg of pan galactic gargleblaster" - desc = "A keg of... wow that's a long name." - icon_state = "bluekeg" - reagent_type = "gargleblaster" \ No newline at end of file diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi index ddb1d8f7251db2e75847dfec1a50092436b05957..6e74c17587dd2739463a4acb58d182022c3b68f2 100644 GIT binary patch literal 31192 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 SEx?J*5M50}jY>89i2nl<-wfFR literal 30047 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%0DSeQ%TnKxEL3+%{j0cCRqMJU(`49e?4P9!?>kDW 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%0AfxGQq-2uyV*QXr@x+}-9Gffv19~hLuM!ky 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