diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index d4aa1716b3..dec4b4fd24 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -29,9 +29,8 @@ var/list/femcum_fluids = list("femcum") //Mob procs -/mob/living/Life() /mob/living/proc/handle_arousal() - return + /mob/living/carbon/handle_arousal() if(canbearoused && dna) diff --git a/code/citadel/icons/penis.dmi b/code/citadel/icons/penis.dmi index 56f7f12803..9ac7d82cbd 100644 Binary files a/code/citadel/icons/penis.dmi and b/code/citadel/icons/penis.dmi differ diff --git a/code/citadel/icons/vagina.dmi b/code/citadel/icons/vagina.dmi new file mode 100644 index 0000000000..c9d70d47e9 Binary files /dev/null and b/code/citadel/icons/vagina.dmi differ diff --git a/code/citadel/organs/eggsack.dm b/code/citadel/organs/eggsack.dm index e760ef6035..1e53240e1a 100644 --- a/code/citadel/organs/eggsack.dm +++ b/code/citadel/organs/eggsack.dm @@ -5,6 +5,7 @@ icon = 'code/citadel/icons/ovipositor.dmi' zone = "groin" slot = "testicles" + color = null //don't use the /genital color since it already is colored w_class = 3 var/internal = TRUE var/egg_girth = EGG_GIRTH_DEF diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm index 1cd904fd83..6972f9e4b0 100644 --- a/code/citadel/organs/genitals.dm +++ b/code/citadel/organs/genitals.dm @@ -12,25 +12,31 @@ var/fluid_mult = 1 var/producing = FALSE -/obj/item/organ/genital/New() +/obj/item/organ/genital/Initialize() ..() reagents = create_reagents(fluid_max_volume) +/obj/item/organ/genital/Destroy() + if(owner) + Remove(owner, 1)//this should remove references to it, so it can be GCd correctly + update_link() + return ..() + /obj/item/organ/genital/proc/update() - return + update_size() + update_appearance() + update_link() /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() @@ -40,7 +46,6 @@ 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() @@ -69,7 +74,7 @@ if(dna.species.use_skintones && dna.features["genitals_use_skintone"]) P.color = skintone2hex(skin_tone) else - P.color = dna.features["cock_color"] + 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"] @@ -83,10 +88,10 @@ 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"] +// 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"] diff --git a/code/citadel/organs/penis.dm b/code/citadel/organs/penis.dm index 7427503a99..8e10540a7d 100644 --- a/code/citadel/organs/penis.dm +++ b/code/citadel/organs/penis.dm @@ -6,7 +6,6 @@ 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 @@ -17,8 +16,7 @@ var/list/knotted_types = list("", "barbknot") var/obj/item/organ/genital/testicles/linked_balls -/obj/item/organ/genital/penis/New() - ..() +/obj/item/organ/genital/penis/Initialize() update() /obj/item/organ/genital/penis/update() @@ -41,13 +39,13 @@ girth = (length * girth_ratio) /obj/item/organ/genital/penis/update_appearance() - var/string = "penis_[shape]_[size]" + var/string = "penis_[lowertext(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) + color = "#[owner.dna.features["cock_color"]]" /obj/item/organ/genital/penis/update_link() if(owner) diff --git a/code/citadel/organs/testicles.dm b/code/citadel/organs/testicles.dm index 9f2b0bacf2..1c1035e278 100644 --- a/code/citadel/organs/testicles.dm +++ b/code/citadel/organs/testicles.dm @@ -14,10 +14,10 @@ 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() - ..() +/obj/item/organ/genital/testicles/Initialize() create_reagents(fluid_max_volume) reagents.add_reagent(fluid_id, fluid_max_volume) + update() /obj/item/organ/genital/testicles/on_life() if(fluid_id && producing) diff --git a/code/citadel/organs/vagina.dm b/code/citadel/organs/vagina.dm index 1229c45be9..2a77d976c6 100644 --- a/code/citadel/organs/vagina.dm +++ b/code/citadel/organs/vagina.dm @@ -1,6 +1,7 @@ /obj/item/organ/genital/vagina name = "vagina" desc = "A female reproductive organ." + icon = 'code/citadel/icons/vagina.dmi' icon_state = "vagina" zone = "groin" slot = "vagina" diff --git a/code/citadel/toys/dildos.dm b/code/citadel/toys/dildos.dm new file mode 100644 index 0000000000..a68d85db14 --- /dev/null +++ b/code/citadel/toys/dildos.dm @@ -0,0 +1,148 @@ +////////// +//DILDOS// +////////// +obj/item/weapon/dildo + name = "dildo" + desc = "Floppy!" + icon = 'code/citadel/icons/dildo.dmi' + damtype = BRUTE + force = 0 + throwforce = 0 + icon_state = "dildo_knotted_2" + alpha = 192//transparent + var/can_customize = FALSE + var/dildo_shape = "human" + var/dildo_size = 2 + var/dildo_type = "dildo"//pretty much just used for the icon state + var/random_color = TRUE + var/random_size = FALSE + var/random_shape = FALSE + //these lists are used to generate random icons, stats, and names + var/list/possible_colors = list(//mostly neon colors + "Cyan" = "#00f9ff",//cyan + "Green" = "#49ff00",//green + "Pink" = "#ff4adc",//pink + "Yellow" = "#fdff00",//yellow + "Blue" = "#00d2ff",//blue + "Lime" = "#89ff00",//lime + "Black" = "#101010",//black + "Red" = "#ff0000",//red + "Orange" = "#ff9a00",//orange + "Purple" = "#e300ff"//purple + ) + var/list/possible_shapes = list( + "Human" = "human", + "Knotted" = "knotted", + "Plain" = "plain", + "Flared" = "flared" + ) + var/list/possible_sizes = list( + "Small" = 1, + "Medium" = 2, + "Big" = 3 + ) + +obj/item/weapon/dildo/proc/update_appearance() + icon_state = "[dildo_type]_[dildo_shape]_[dildo_size]" + var/sizeword = "" + switch(dildo_size) + if(1) + sizeword = "small " + if(2) + sizeword = "" + if(3) + sizeword = "big " + if(4) + sizeword = "huge " + if(5) + sizeword = "gigantic " + + name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]" + +obj/item/weapon/dildo/AltClick(mob/living/user) + customize(user) + +obj/item/weapon/dildo/proc/customize(mob/living/user) + if(!can_customize) + return FALSE + if(src && !user.incapacitated() && in_range(user,src)) + var/color_choice = input(user,"Choose a color for your dildo.","Dildo Color") as null|anything in possible_colors + if(src && color_choice && !user.incapacitated() && in_range(user,src)) + sanitize_inlist(color_choice, possible_colors, "Red") + color = possible_colors[color_choice] + update_appearance() + if(src && !user.incapacitated() && in_range(user,src)) + var/shape_choice = input(user,"Choose a shape for your dildo.","Dildo Shape") as null|anything in possible_shapes + if(src && shape_choice && !user.incapacitated() && in_range(user,src)) + sanitize_inlist(shape_choice, possible_colors, "Knotted") + dildo_shape = possible_shapes[shape_choice] + update_appearance() + if(src && !user.incapacitated() && in_range(user,src)) + var/size_choice = input(user,"Choose the size for your dildo.","Dildo Size") as null|anything in possible_sizes + if(src && size_choice && !user.incapacitated() && in_range(user,src)) + sanitize_inlist(size_choice, possible_colors, "Medium") + dildo_size = possible_sizes[size_choice] + update_appearance() + if(src && !user.incapacitated() && in_range(user,src)) + var/transparency_choice = input(user,"Choose the transparency of your dildo. Lower is more transparent!(192-255)","Dildo Transparency") as null|num + if(src && transparency_choice && !user.incapacitated() && in_range(user,src)) + sanitize_integer(transparency_choice, 192, 255, 192) + alpha = transparency_choice + update_appearance() + return TRUE + +obj/item/weapon/dildo/Initialize() + if(random_color == TRUE) + var/randcolor = pick(possible_colors) + color = possible_colors[randcolor] + if(random_shape == TRUE) + var/randshape = pick(possible_shapes) + dildo_shape = possible_shapes[randshape] + if(random_size == TRUE) + var/randsize = pick(possible_sizes) + dildo_size = possible_sizes[randsize] + update_appearance() + alpha = rand(192, 255) + pixel_y = rand(-7,7) + pixel_x = rand(-7,7) + +obj/item/weapon/dildo/examine(mob/user) + ..() + if(can_customize) + user << "Alt-Click \the [src.name] to customize it." + +obj/item/weapon/dildo/random//totally random + name = "random dildo"//this name will show up in vendors and shit so you know what you're vending(or don't, i guess :^)) + random_color = TRUE + random_shape = TRUE + random_size = TRUE + + +obj/item/weapon/dildo/knotted + dildo_shape = "knotted" + name = "knotted dildo" + +obj/item/weapon/dildo/human + dildo_shape = "human" + name = "human dildo" + +obj/item/weapon/dildo/plain + dildo_shape = "plain" + name = "plain dildo" + +obj/item/weapon/dildo/flared + dildo_shape = "flared" + name = "flared dildo" + +obj/item/weapon/dildo/flared/huge + name = "literal horse cock" + desc = "THIS THING IS HUGE!" + dildo_size = 4 + +obj/item/weapon/dildo/custom + name = "customizable dildo" + desc = "Thanks to significant advances in synthetic nanomaterials, this dildo is capable of taking on many different forms to fit the user's preferences! Pricy!" + can_customize = TRUE + random_color = TRUE + random_shape = TRUE + random_size = TRUE \ No newline at end of file diff --git a/code/datums/weather/weather_types.dm b/code/datums/weather/weather_types.dm index aa5f05f5c3..5938bfebde 100644 --- a/code/datums/weather/weather_types.dm +++ b/code/datums/weather/weather_types.dm @@ -124,8 +124,8 @@ weather_message = "You feel waves of heat wash over you! Find shelter!" weather_overlay = "ash_storm" - weather_duration_lower = 600 - weather_duration_upper = 1500 + weather_duration_lower = 100 + weather_duration_upper = 600 weather_color = "green" weather_sound = 'sound/misc/bloblarm.ogg' diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d44c90919b..ad2bafa980 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1168,11 +1168,13 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list( /obj/item/clothing/under/maid = 5, /obj/item/clothing/under/stripper_pink = 5, - /obj/item/clothing/under/stripper_green = 5 + /obj/item/clothing/under/stripper_green = 5, + /obj/item/weapon/dildo/custom = 5 ) contraband = list(/obj/item/weapon/restraints/handcuffs/fake/kinky = 5, - /obj/item/clothing/neck/petcollar=5, - /obj/item/clothing/under/mankini = 1 + /obj/item/clothing/neck/petcollar = 5, + /obj/item/clothing/under/mankini = 1, + /obj/item/weapon/dildo/flared/huge = 1 ) premium = list() refill_canister = /obj/item/weapon/vending_refill/kink diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 94042daf85..248a39f9da 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -75,8 +75,8 @@ /obj/item/weapon/vending_refill/kink machine_name = "KinkMate" icon_state = "refill_kink" - charges = list(6, 4, 0)// of 30 standard, 0 contraband, 15 premium - init_charges = list(6, 4, 0) + charges = list(8, 5, 0)// of 20 standard, 12 contraband, 0 premium + init_charges = list(8, 5, 0) /obj/item/weapon/vending_refill/nazi machine_name = "nazivend" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 6d47bc7f0d..737ecfb14b 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -290,6 +290,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["socks"] >> socks S["backbag"] >> backbag S["uplink_loc"] >> uplink_spawn_loc + S["feature_exhibitionist"] >> features["exhibitionist"] S["feature_mcolor"] >> features["mcolor"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] @@ -432,10 +433,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car 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") + features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], milk_id_list, "milk") //vagina features features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0) - features["vag_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0) + features["vag_color"] = sanitize_hexcolor(features["vag_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)) @@ -480,6 +481,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["uplink_loc"] << uplink_spawn_loc S["flavor_text"] << flavor_text S["species"] << pref_species.id + S["feature_exhibitionist"] << features["exhibitionist"] S["feature_mcolor"] << features["mcolor"] S["feature_mcolor2"] << features["mcolor2"] S["feature_mcolor3"] << features["mcolor3"] diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index a7a6a3564e..61aad3acac 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -1,8 +1,8 @@ /datum/round_event_control/grid_check name = "Grid Check" typepath = /datum/round_event/grid_check - weight = 10 - max_occurrences = 3 + weight = 7 + max_occurrences = 1 /datum/round_event/grid_check announceWhen = 1 diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 581844bb4f..a156a0754a 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -2,6 +2,7 @@ name = "Radiation Storm" typepath = /datum/round_event/radiation_storm max_occurrences = 1 + weight = 7 /datum/round_event/radiation_storm diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index d56d61b22b..14ceb2cb23 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -10,7 +10,8 @@ var/interval = 2 var/list/vents = list() var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube", - "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid") + "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid", + "aphro","aphro+","anaphro","anaphro+","semen") /datum/round_event/vent_clog/announce() priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 1ac5b3edfa..38625b68e4 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -525,6 +525,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") @@ -635,6 +651,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?" diff --git a/icons/obj/citvending.dmi b/icons/obj/citvending.dmi index 74dcffbc01..37c2c8fcf1 100644 Binary files a/icons/obj/citvending.dmi and b/icons/obj/citvending.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index a62f1db360..35b7b57eb9 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index d8627232ec..8eb61deb11 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -147,4 +147,6 @@ BIG IMG.icon {width: 32px; height: 32px;} .memoedit {text-align: center; font-size: 2;} .abductor {color: #800080; font-style: italic;} +.love {color: #FF69Bf;} +.lovebold {color: #FF69Bf; font-weight: bold;} "} diff --git a/sound/music/indeep.ogg b/sound/music/indeep.ogg new file mode 100644 index 0000000000..b56a62d48d Binary files /dev/null and b/sound/music/indeep.ogg differ diff --git a/strings/round_start_sounds.txt b/strings/round_start_sounds.txt index 3ad6b508f5..fdb23dc2da 100644 --- a/strings/round_start_sounds.txt +++ b/strings/round_start_sounds.txt @@ -16,4 +16,5 @@ sound/music/space_oddity.ogg sound/music/starman.ogg sound/music/torvus.ogg sound/music/shootingstars.ogg -sound/music/oceanman.ogg \ No newline at end of file +sound/music/oceanman.ogg +sound/music/indeep.ogg diff --git a/tgstation.dme b/tgstation.dme index 6f6e4bf9a6..ef77ce9728 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -160,6 +160,7 @@ #include "code\citadel\organs\testicles.dm" #include "code\citadel\organs\vagina.dm" #include "code\citadel\organs\womb.dm" +#include "code\citadel\toys\dildos.dm" #include "code\controllers\admin.dm" #include "code\controllers\configuration.dm" #include "code\controllers\configuration_citadel.dm"