diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 15e8048926..7cab82149d 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -79,6 +79,8 @@
#define ATTACK_EFFECT_SMASH "smash"
#define ATTACK_EFFECT_CLAW "claw"
#define ATTACK_EFFECT_DISARM "disarm"
+#define ATTACK_EFFECT_ASS_SLAP "ass_slap"
+#define ATTACK_EFFECT_FACE_SLAP "face_slap"
#define ATTACK_EFFECT_BITE "bite"
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 1bb68fea05..d68c936909 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1457,39 +1457,51 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
// CITADEL EDIT slap mouthy gits and booty
- var/aim_for_mouth = user.zone_selected == "mouth"
- var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
+ var/aim_for_mouth = user.zone_selected == "mouth"
+ var/target_on_help = target.a_intent == INTENT_HELP
var/target_aiming_for_mouth = target.zone_selected == "mouth"
var/target_restrained = target.restrained()
- if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth))
- playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
- user.visible_message("[user] slaps [target] in the face!",
- "You slap [target] in the face! ",\
- "You hear a slap.")
- if (!target.has_trait(TRAIT_NYMPHO))
- stop_wagging_tail(target)
- return FALSE
+ var/same_dir = (target.dir & user.dir)
var/aim_for_groin = user.zone_selected == "groin"
var/target_aiming_for_groin = target.zone_selected == "groin"
- if(aim_for_groin && (target_on_help_and_unarmed || target_restrained || target_aiming_for_groin))
+
+ if(target.check_block()) //END EDIT
+ target.visible_message("[target] blocks [user]'s disarm attempt!")
+ return 0
+ else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
+ to_chat(user, "You're too exhausted!")
+ return FALSE
+
+ else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
- user.visible_message("[user] slaps [target]'s ass!",
- "You slap [target]'s ass! ",\
- "You hear a slap.")
+
+ user.visible_message(
+ "[user] slaps [target] in the face!",
+ "You slap [user == target ? "yourself" : target] in the face! ",\
+ "You hear a slap."
+ )
+ if (!target.has_trait(TRAIT_NYMPHO))
+ stop_wagging_tail(target)
+ user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
+ user.adjustStaminaLossBuffered(3)
+ return FALSE
+ else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
+ playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
+ user.visible_message(
+ "[user] slaps [target]'s ass!",
+ "You slap [user == target ? "your" : target + "'s"] ass! ",\
+ "You hear a slap."
+ )
if (target.canbearoused)
target.adjustArousalLoss(5)
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
target.mob_climax(forced_climax=TRUE)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
+ user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
+ user.adjustStaminaLossBuffered(3)
return FALSE
- else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "You're too exhausted.")
- return FALSE
- else if(target.check_block()) //END EDIT
- target.visible_message("[target] blocks [user]'s disarm attempt!")
- return 0
- if(attacker_style && attacker_style.disarm_act(user,target))
+ else if(attacker_style && attacker_style.disarm_act(user,target))
return 1
else
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 70a5a71652..29086033c8 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ