diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm index 74b1f61949a..958020cd995 100644 --- a/code/__DEFINES/~skyrat_defines/traits.dm +++ b/code/__DEFINES/~skyrat_defines/traits.dm @@ -3,7 +3,7 @@ #define TRAIT_NORUNNING "norunning" // You walk! #define TRAIT_EXCITABLE "wagwag" //Will wag when patted! #define TRAIT_OXYIMMUNE "oxyimmune" // Immune to oxygen damage, ideally give this to all non-breathing species or bad stuff will happen -#define TRAIT_IRONASS "ironass" +#define TRAIT_PERSONALSPACE "personalspace" // Block/counter-attack ass-slaps #define TRAIT_MOOD_NOEXAMINE "mood_noexamine" // Can't assess your own mood #define TRAIT_DNR "cant_revive" //You just can't be revived without supernatural means #define TRAIT_HARD_SOLES "hard_soles" // No step on glass diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index d4c5fd1dcf4..7b6bb7928b1 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -1,4 +1,6 @@ #define SHAKE_ANIMATION_OFFSET 4 +#define PERSONAL_SPACE_DAMAGE 2 +#define ASS_SLAP_EXTRA_RANGE -1 /mob/living/carbon/get_eye_protection() . = ..() @@ -269,19 +271,27 @@ return //SKYRAT EDIT ADDITION BEGIN - EMOTES if(zone_selected == BODY_ZONE_PRECISE_GROIN && target.dir == src.dir) - if(HAS_TRAIT(target, TRAIT_IRONASS)) - var/obj/item/bodypart/affecting = src.get_bodypart("[(src.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - if(affecting?.receive_damage(2)) - src.update_damage_overlays() - visible_message("[src] tried slapping [target]'s ass, however it was much harder than expected!", - "You tried slapping [target]'s ass, but it felt like metal, ouch!",\ - "You hear a sore sounding slap.", ignored_mobs = list(target)) - playsound(target.loc, 'sound/effects/snap.ogg', 50, TRUE, -1) - to_chat(target, "[src] tried slapping your ass, but it was deflected!") - return + if(HAS_TRAIT(target, TRAIT_PERSONALSPACE) && (target.stat != UNCONSCIOUS) && (!target.handcuffed)) //You need to be conscious and uncuffed to use Personal Space + if(target.combat_mode && (!HAS_TRAIT(target, TRAIT_PACIFISM))) //Being pacified prevents violent counters + var/obj/item/bodypart/affecting = src.get_bodypart(BODY_ZONE_HEAD) + if(affecting?.receive_damage(PERSONAL_SPACE_DAMAGE)) + src.update_damage_overlays() + visible_message(span_danger("[src] tried slapping [target]'s ass, but they were slapped instead!"), + span_danger("You tried slapping [target]'s ass, but they hit you back, ouch!"), + "You hear a slap.", ignored_mobs = list(target)) + playsound(target.loc, 'sound/effects/snap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + to_chat(target, span_danger("[src] tried slapping your ass, but you hit them back!")) + return + else + visible_message(span_danger("[src] tried slapping [target]'s ass, but they were blocked!"), + span_danger("You tried slapping [target]'s ass, but they blocked you!"), + "You hear a slap.", ignored_mobs = list(target)) + playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + to_chat(target, span_danger("[src] tried slapping your ass, but you blocked them!")) + return else do_ass_slap_animation(target) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, -1) + playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) visible_message("[src] slaps [target] right on the ass!",\ "You slap [target] on the ass, how satisfying.",\ "You hear a slap.", ignored_mobs = list(target)) @@ -784,3 +794,5 @@ return TRUE #undef SHAKE_ANIMATION_OFFSET +#undef PERSONAL_SPACE_DAMAGE +#undef ASS_SLAP_EXTRA_RANGE diff --git a/modular_skyrat/master_files/code/datums/traits/neutral.dm b/modular_skyrat/master_files/code/datums/traits/neutral.dm index 0c2b284c07a..249763af9a9 100644 --- a/modular_skyrat/master_files/code/datums/traits/neutral.dm +++ b/modular_skyrat/master_files/code/datums/traits/neutral.dm @@ -11,14 +11,14 @@ mob_trait = TRAIT_EXCITABLE icon = "laugh-beam" -/datum/quirk/ironass - name = "Iron Ass" - desc = "Your ass is incredibly firm, so firm infact that anyone slapping it will suffer grave injuries." - gain_text = span_notice("Your ass feels solid!") - lose_text = span_notice("Your ass doesn't feel so solid anymore.") - medical_record_text = "Patient's ass seems incredibly solid." +/datum/quirk/personalspace + name = "Personal Space" + desc = "You'd rather people keep their hands to themselves, and you won't let anyone touch your ass.." + gain_text = span_notice("You'd like it if people kept their hands off your ass.") + lose_text = span_notice("You're less concerned about people touching your ass.") + medical_record_text = "Patient demonstrates negative reactions to their posterior being touched." value = 0 - mob_trait = TRAIT_IRONASS + mob_trait = TRAIT_PERSONALSPACE icon = "hand-paper" /datum/quirk/dnr