From 6f5702f77b516f9b7eb3a85e658006fa792a2945 Mon Sep 17 00:00:00 2001 From: oranges Date: Wed, 15 Sep 2021 13:53:50 +1200 Subject: [PATCH] Add french kissing (#61392) If you wear the french beret you get the garlic breath trait added. This also happens if you consume garlic reagent containing items This trait makes your kisses become french and causes your breath to smell of garlic --- code/__DEFINES/traits.dm | 2 ++ code/game/objects/items/hand_items.dm | 16 ++++++++++++++++ code/modules/clothing/head/frenchberet.dm | 3 +++ .../reagents/chemistry/reagents/food_reagents.dm | 8 ++++++++ 4 files changed, 29 insertions(+) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2a234aa3f52..cab2b8c553b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -312,6 +312,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_ANTENNAE "antennae" /// Blowing kisses actually does damage to the victim #define TRAIT_KISS_OF_DEATH "kiss_of_death" +/// Used to activate french kissing +#define TRAIT_GARLIC_BREATH "kiss_of_garlic_death" /// Used on limbs in the process of turning a human into a plasmaman while in plasma lava #define TRAIT_PLASMABURNT "plasma_burnt" /// Addictions don't tick down, basically they're permanently addicted diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 2a1d59d0c7f..9ef7e62e846 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -267,8 +267,11 @@ /// The kind of projectile this version of the kiss blower fires var/kiss_type = /obj/projectile/kiss + /obj/item/kisser/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() + if(HAS_TRAIT(user, TRAIT_GARLIC_BREATH)) + kiss_type = /obj/projectile/kiss/french var/obj/projectile/blown_kiss = new kiss_type(get_turf(user)) user.visible_message("[user] blows \a [blown_kiss] at [target]!", span_notice("You blow \a [blown_kiss] at [target]!")) @@ -378,3 +381,16 @@ var/mob/living/carbon/heartbreakee = target var/obj/item/organ/heart/dont_go_breakin_my_heart = heartbreakee.getorganslot(ORGAN_SLOT_HEART) dont_go_breakin_my_heart.applyOrganDamage(999) + + +/obj/projectile/kiss/french + name = "french kiss (is that a hint of garlic?)" + color = "#f2e9d2" //Scientifically proven to be the colour of garlic + +/obj/projectile/kiss/french/harmless_on_hit(mob/living/living_target) + . = ..() + //Don't stack the garlic + if(! living_target.has_reagent(/datum/reagent/consumable/garlic) ) + //Phwoar + living_target.reagents.add_reagent(/datum/reagent/consumable/garlic, 1) + living_target.visible_message("[living_target] has a funny look on [living_target.p_their()] face.", "Wow, that is a strong after taste of garlic!", vision_distance=COMBAT_MESSAGE_RANGE) diff --git a/code/modules/clothing/head/frenchberet.dm b/code/modules/clothing/head/frenchberet.dm index 2ada3eb1c3d..18f80955e44 100644 --- a/code/modules/clothing/head/frenchberet.dm +++ b/code/modules/clothing/head/frenchberet.dm @@ -11,12 +11,15 @@ . = ..() if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) + ADD_TRAIT(M, TRAIT_GARLIC_BREATH, type) else UnregisterSignal(M, COMSIG_MOB_SAY) + REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type) /obj/item/clothing/head/frenchberet/dropped(mob/M) . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) + REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type) /obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args) SIGNAL_HANDLER diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index dde03f5aa00..3db25a88afd 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -417,6 +417,14 @@ metabolization_rate = 0.15 * REAGENTS_METABOLISM chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/consumable/garlic/on_mob_add(mob/living/L, amount) + . = ..() + ADD_TRAIT(L, TRAIT_GARLIC_BREATH, type) + +/datum/reagent/consumable/garlic/on_mob_delete(mob/living/L) + . = ..() + REMOVE_TRAIT(L, TRAIT_GARLIC_BREATH, type) + /datum/reagent/consumable/garlic/on_mob_life(mob/living/carbon/M, delta_time, times_fired) if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit. if(DT_PROB(min(current_cycle/2, 12.5), delta_time))