diff --git a/GainStation13/code/datums/mood_events/needs_events.dm b/GainStation13/code/datums/mood_events/needs_events.dm index 880b45f95f..102a3c2d9b 100644 --- a/GainStation13/code/datums/mood_events/needs_events.dm +++ b/GainStation13/code/datums/mood_events/needs_events.dm @@ -5,3 +5,9 @@ /datum/mood_event/fat_good description = "I'm so fat!\n" mood_change = 4 + +//GS13 Port +/datum/mood_event/lewd_headpat + description = "I love headpats so much!\n" + mood_change = 3 + timeout = 2 MINUTES diff --git a/GainStation13/code/datums/traits.dm b/GainStation13/code/datums/traits.dm index 40f5b77b57..ef7e361a9c 100644 --- a/GainStation13/code/datums/traits.dm +++ b/GainStation13/code/datums/traits.dm @@ -94,3 +94,34 @@ if(H) var/datum/species/species = H.dna.species species.disliked_food = initial(species.disliked_food) + +//GS13 Port +//Port from Shadow +/datum/quirk/donotclone + name = "DNC" + desc = "You have filed a Do Not Clone order, stating that you do not wish to be cloned. You can still be revived by other means." + value = -2 + mob_trait = TRAIT_NEVER_CLONE + medical_record_text = "Patient has a DNC (Do not clone) order on file, and cannot be cloned as a result." + +/datum/quirk/inheat + name = "In Heat" + desc = "Your system burns with the desire to be bred, your body will betray you and alert others' to your desire when examining you. Satisfying your lust will make you happy, but ignoring it may cause you to become sad and needy." + value = 0 + mob_trait = TRAIT_HEAT + gain_text = "You body burns with the desire to be bred." + lose_text = "You feel more in control of your body and thoughts." + +/datum/quirk/headpat_slut + name = "Headpat Slut" + desc = "You like headpats, alot, maybe even a little bit too much. Headpats give you a bigger mood boost and cause arousal" + mob_trait = TRAIT_HEADPAT_SLUT + value = 0 + medical_record_text = "Patient seems overly affectionate." + +/datum/quirk/headpat_hater + name = "Distant" + desc = "You don't seem to show much care for being touched. Whether it's because you're reserved or due to self control, you won't wag your tail outside of your own control should you possess one." + mob_trait = TRAIT_DISTANT + value = 0 + medical_record_text = "Patient cares little with or dislikes being touched." diff --git a/GainStation13/code/modules/research/designs/autolathe.dm b/GainStation13/code/modules/research/designs/autolathe.dm index dddaf1b041..2ee2cd4dba 100644 --- a/GainStation13/code/modules/research/designs/autolathe.dm +++ b/GainStation13/code/modules/research/designs/autolathe.dm @@ -5,3 +5,43 @@ materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) build_path = /obj/item/assembly/infra/fat category = list("initial", "Misc") + +/datum/design/small_cup + name = "Small Gulp Cup" + id = "Small_Gulp" + build_type = AUTOLATHE + materials = list(/datum/material/plastic=200) + build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/small + category = list("initial","Dinnerware") + +/datum/design/medium_cup + name = "Medium Gulp Cup" + id = "Medium_Gulp" + build_type = AUTOLATHE + materials = list(/datum/material/plastic=300) + build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/medium + category = list("initial","Dinnerware") + +/datum/design/small_cup + name = "Big Gulp Cup" + id = "Big_Gulp" + build_type = AUTOLATHE + materials = list(/datum/material/plastic=500) + build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/big + category = list("initial","Dinnerware") + +/datum/design/extra_big_cup + name = "Extra Big Gulp Cup" + id = "Extra_Big_Gulp" + build_type = AUTOLATHE + materials = list(/datum/material/plastic=600) + build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big + category = list("initial","Dinnerware") + +/datum/design/super_extra_big_cup + name = "Super Extra Big Gulp Cup" + id = "Super_Extra_Big_Gulp" + build_type = AUTOLATHE + materials = list(/datum/material/plastic=1000) + build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/super_extra_big + category = list("initial","Dinnerware") diff --git a/GainStation13/code/obj/items/minor_items.dm b/GainStation13/code/obj/items/minor_items.dm index 29efce6407..f45f9d80fb 100644 --- a/GainStation13/code/obj/items/minor_items.dm +++ b/GainStation13/code/obj/items/minor_items.dm @@ -171,3 +171,55 @@ icon = 'icons/obj/module.dmi' icon_state = "datadisk0" desc = "A dusty disk, desconstruction will be needed to recover data." + +//GS 13 Port - Big gulps in all sizes +/obj/item/reagent_containers/food/drinks/flask/paper_cup + name = "paper cup" + icon = 'GainStation13/icons/obj/paper_cups.dmi' + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) + volume = 50 + reagent_flags = OPENCONTAINER + spillable = TRUE + container_HP = 5 + pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' + +/obj/item/reagent_containers/food/drinks/flask/paper_cup/small + name = "Small Gulp Cup" + desc = "A paper cup. It can hold up to 50 units. It's not very strong." + icon_state = "small" + custom_materials = list(/datum/material/plastic=200) + w_class = WEIGHT_CLASS_SMALL + +/obj/item/reagent_containers/food/drinks/flask/paper_cup/medium + name = "Medium Gulp Cup" + desc = "It's a paper cup, but you wouldn't call it 'medium' though. It can hold up to 75 units. It's not very strong." + icon_state = "medium" + volume = 75 + custom_materials = list(/datum/material/plastic=300) + w_class = WEIGHT_CLASS_SMALL + +/obj/item/reagent_containers/food/drinks/flask/paper_cup/big + name = "Big Gulp Cup" + desc = "A huge paper cup, a normal person would struggle to drink it all in one sitting. It can hold up to 120 units. It's not very strong." + icon_state = "big" + volume = 120 + custom_materials = list(/datum/material/plastic=500) + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big + name = "Extra Big Gulp Cup" + desc = "A comically large paper cup. It can hold up to 160 units. It's not very strong." + icon_state = "extra_big" + volume = 160 + custom_materials = list(/datum/material/plastic=600) + w_class = WEIGHT_CLASS_BULKY + +/obj/item/reagent_containers/food/drinks/flask/paper_cup/super_extra_big + name = "Super Extra Big Gulp Cup" + desc = "Its called a paper 'cup', but it looks more like an oversized bucket to you. It can hold up to 250 units. It's not very strong." + icon_state = "super_extra_big" + volume = 250 + custom_materials = list(/datum/material/plastic=1000) + w_class = WEIGHT_CLASS_HUGE diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 18ecc5942c..2bc634bb61 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -289,6 +289,13 @@ #define TRAIT_WATER_SPONGE "water_sponge" #define TRAIT_FATROUSAL "fatrousal" +//GS13 Port +#define TRAIT_HEADPAT_SLUT "headpat_slut" +#define TRAIT_NEVER_CLONE "donotclone" +#define TRAIT_HEAT "heat" +#define TRAIT_DISTANT "headpat_hater" +#define TRAIT_CUM_PLUS "cum_plus" + // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) // BUT FOR NOW, THESE ARE HOOKED TO DO update_mobility() VIA COMSIG IN living_mobility.dm diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 6edb0ab5ea..b715bd4df2 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -54,7 +54,7 @@ mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) mid_length = 2 end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg' - volume = 15 + volume = 5 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -65,12 +65,12 @@ volume = 50 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - +/* /datum/looping_sound/deep_fryer mid_length = 2 mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) volume = 30 - +*/ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/looping_sound/microwave diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 5b00d2e71e..e0793e952a 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -190,7 +190,7 @@ // Get targets var/obj/item/organ/eyes/old_eyes = quirk_holder.getorganslot(ORGAN_SLOT_EYES) var/obj/item/organ/eyes/robotic/glow/new_eyes = new - + // Replace eyes qdel(old_eyes) new_eyes.Insert(quirk_holder) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index e5a41c7b7b..064febb2d2 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -162,6 +162,7 @@ gain_text = "You feel like munching on a can of soda." lose_text = "You no longer feel like you should be eating trash." mob_trait = TRAIT_TRASHCAN + medical_record_text = "Patient has been observed eating inedible garbage." // GS13 EDIT START /datum/quirk/trashcan/add() diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index e9bdce6679..e91504d806 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -410,6 +410,12 @@ if(isbrain(mob_occupant)) dna = B.stored_dna + //GS13 Port - DNC + if(HAS_TRAIT(mob_occupant, TRAIT_NEVER_CLONE)) + scantemp = "Subject has an active DNC record on file. Unable to clone." + playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) + return + if(!can_scan(dna, mob_occupant, FALSE, has_bank_account)) return diff --git a/code/modules/arousal/organs/testicles.dm b/code/modules/arousal/organs/testicles.dm index 2fdb0fb2c2..d47020c8b2 100644 --- a/code/modules/arousal/organs/testicles.dm +++ b/code/modules/arousal/organs/testicles.dm @@ -6,6 +6,7 @@ zone = BODY_ZONE_PRECISE_GROIN slot = ORGAN_SLOT_TESTICLES size = BALLS_SIZE_MIN + fluid_max_volume = 10 arousal_verb = "Your balls ache a little" unarousal_verb = "Your balls finally stop aching, again" linked_organ_slot = ORGAN_SLOT_PENIS diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5d9c7d15a8..2e6c02a21c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3720,6 +3720,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(character.custom_body_size) character.resize(character.custom_body_size) + //GS13 Port - Add back arousal + if(NOAROUSAL in pref_species.species_traits) + character.canbearoused = FALSE + else + character.canbearoused = arousable + //speech stuff if(custom_tongue != "default") var/new_tongue = GLOB.roundstart_tongues[custom_tongue] diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index f51530a972..0449a09c92 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -131,4 +131,3 @@ reagents.reaction(target, TOUCH) reagents.clear_reagents() return - diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index e6aa6abf45..936f8182a6 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -296,20 +296,40 @@ else if(check_zone(M.zone_selected) == BODY_ZONE_HEAD) var/datum/species/S + S = dna.species if(ishuman(src)) - S = dna.species + var/mob/living/carbon/human/H = src + //GS13 Port - Headpat slut stuff + if(HAS_TRAIT(H, TRAIT_DISTANT)) //No mood buff since you're not really liking it. + M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better! They seem annoyed...", \ + "You give [H] a pat on the head to make [p_them()] feel better! They seem annoyed as they're now glaring towards you...") + H.adjustArousal(-5) //Why are you touching me? + if(prob(5)) + M.visible_message("[H] quickly twists [M]\'s arm!", \ + "Your arm gets twisted in [H]\'s grasp. Maybe you should have taken the hint...") + playsound(get_turf(H), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + M.emote("scream") + M.dropItemToGround(M.get_active_held_item()) + M.apply_damage(50, STAMINA, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + M.Knockdown(60)//STOP TOUCHING ME! For those spam head pat individuals + else if(HAS_TRAIT(H, TRAIT_HEADPAT_SLUT)) + M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better! They seem incredibly pleased!", \ + "You give [H] a pat on the head to make [p_them()] feel better! They seem to like it way too much") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "lewd_headpat", /datum/mood_event/lewd_headpat) + H.adjustArousal(5) //Headpats are hot af + else + M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better!", \ + "You give [H] a pat on the head to make [p_them()] feel better!") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) - M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better!", \ - "You give [src] a pat on the head to make [p_them()] feel better!", target = src, - target_message = "[M] gives you a pat on the head to make you feel better!") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) friendly_check = TRUE - if(!(client?.prefs.cit_toggles & NO_AUTO_WAG)) - if(S?.can_wag_tail(src) && !dna.species.is_wagging_tail()) - var/static/list/many_tails = list("tail_human", "tail_lizard", "mam_tail") - for(var/T in many_tails) - if(S.mutant_bodyparts[T] && dna.features[T] != "None") - emote("wag") + if(!(HAS_TRAIT(src, TRAIT_DISTANT))) + if(!(client?.prefs.cit_toggles & NO_AUTO_WAG)) + if(S?.can_wag_tail(src) && !dna.species.is_wagging_tail()) + var/static/list/many_tails = list("tail_human", "tail_lizard", "mam_tail") + for(var/T in many_tails) + if(S.mutant_bodyparts[T] && dna.features[T] != "None") + emote("wag") else if(check_zone(M.zone_selected) == BODY_ZONE_R_ARM || check_zone(M.zone_selected) == BODY_ZONE_L_ARM) if((pulling == M) && (grab_state == GRAB_PASSIVE)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index a8d4bef939..2a176c755b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -107,6 +107,11 @@ if(wear_id) . += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]." + //GS13 Port + //Heat Detection + //if(breedable) + if(HAS_TRAIT(src, TRAIT_HEAT)) + . += "[t_He] [t_is] currently in heat." //Status effects var/effects_exam = status_effect_examines() if(!isnull(effects_exam)) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b62a7f5277..a7113c1a06 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -546,13 +546,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) - //GS13 Port - Add back arousal - if(NOAROUSAL in species_traits) - C.canbearoused = FALSE - else - if(C.client) - C.canbearoused = C.client?.prefs?.arousable - /datum/species/proc/update_species_slowdown(mob/living/carbon/human/H) H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod) diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index c3e5f6ce0e..a71cc8750f 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -35,7 +35,11 @@ /obj/item/reagent_containers/food/drinks/soda_cans/sol_dry = 8, /obj/item/reagent_containers/food/drinks/ice = 10, /obj/item/reagent_containers/food/drinks/flask = 3, - /obj/item/reagent_containers/food/drinks/beer = 6) + /obj/item/reagent_containers/food/drinks/beer = 6, + /obj/item/reagent_containers/food/drinks/flask/paper_cup/small = 20, + /obj/item/reagent_containers/food/drinks/flask/paper_cup/medium = 20, + /obj/item/reagent_containers/food/drinks/flask/paper_cup/big = 20, + /obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big = 15) contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12, /obj/item/reagent_containers/food/drinks/bottle/fernet = 5) premium = list(/obj/item/reagent_containers/glass/bottle/ethanol = 4, diff --git a/hyperstation/code/modules/traits.dm b/hyperstation/code/modules/traits.dm index 60d97af45a..c7c8d169b4 100644 --- a/hyperstation/code/modules/traits.dm +++ b/hyperstation/code/modules/traits.dm @@ -5,7 +5,6 @@ name = "Extra productive genitals" desc = "Your lower bits produce more and hold more than normal." value = 0 - category = CATEGORY_SEXUAL mob_trait = TRAIT_CUM_PLUS gain_text = "You feel pressure in your groin." lose_text = "You feel a weight lifted from your groin." @@ -16,14 +15,14 @@ if(M?.getorganslot("testicles")) var/obj/item/organ/genital/testicles/T = M?.getorganslot("testicles") T?.fluid_mult = 1.5 //Base is 1 - T?.fluid_max_volume = 5 + T?.fluid_max_volume = 20 /datum/quirk/cum_plus/remove() var/mob/living/carbon/M = quirk_holder if(quirk_holder.getorganslot("testicles")) var/obj/item/organ/genital/testicles/T = M?.getorganslot("testicles") T?.fluid_mult = 1 //Base is 1 - T?.fluid_max_volume = 3 //Base is 3 + T?.fluid_max_volume = 10 //Base is 3 /datum/quirk/cum_plus/on_process() var/mob/living/carbon/M = quirk_holder //If you get balls later, then this will still proc @@ -31,4 +30,4 @@ var/obj/item/organ/genital/testicles/T = M?.getorganslot("testicles") if(T?.fluid_max_volume <= 5 || T?.fluid_mult <= 0.2) //INVALID EXPRESSION? T?.fluid_mult = 1.5 //Base is 0.133 - T?.fluid_max_volume = 5 + T?.fluid_max_volume = 20 diff --git a/sound/items/handling/cardboardbox_drop.ogg b/sound/items/handling/cardboardbox_drop.ogg new file mode 100644 index 0000000000..7070ba1c34 Binary files /dev/null and b/sound/items/handling/cardboardbox_drop.ogg differ diff --git a/sound/items/handling/cardboardbox_pickup.ogg b/sound/items/handling/cardboardbox_pickup.ogg new file mode 100644 index 0000000000..aa4e72129b Binary files /dev/null and b/sound/items/handling/cardboardbox_pickup.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 4664a21096..899e5c7c1c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4077,6 +4077,7 @@ #include "hyperstation\code\modules\resize\sizechems.dm" #include "hyperstation\code\modules\resize\sizegun.dm" #include "hyperstation\code\modules\surgery\organs\augments_arms.dm" +#include "hyperstation\code\modules\traits.dm" #include "hyperstation\code\obj\ashtray.dm" #include "hyperstation\code\obj\decal.dm" #include "hyperstation\code\obj\fleshlight.dm"