diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 57a31cdd1d3..04c0a5fbfea 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -21,7 +21,7 @@ if(H.head && (H.head.body_parts_covered & FACE)) user << "Remove their [H.head] first." return - user.visible_message("\The [user] begins taping over \the [H]'s eyes!") + user.visible_message("\The [user] begins taping over \the [H]'s eyes!") if(!do_after(user, 30)) return @@ -30,7 +30,7 @@ if(!H || !src || !H.organs_by_name["head"] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE))) return - user.visible_message("\The [user] has taped up \the [H]'s eyes!") + user.visible_message("\The [user] has taped up \the [H]'s eyes!") H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses) else if(user.zone_sel.selecting == "mouth" || user.zone_sel.selecting == "head") @@ -46,7 +46,7 @@ if(H.head && (H.head.body_parts_covered & FACE)) user << "Remove their [H.head] first." return - user.visible_message("\The [user] begins taping up \the [H]'s mouth!") + user.visible_message("\The [user] begins taping up \the [H]'s mouth!") if(!do_after(user, 30)) return @@ -55,7 +55,7 @@ if(!H || !src || !H.organs_by_name["head"] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE))) return - user.visible_message("\The [user] has taped up \the [H]'s mouth!") + user.visible_message("\The [user] has taped up \the [H]'s mouth!") H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask) else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2e3fc00722d..eef1b952458 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1413,3 +1413,13 @@ get_scooped(H) return return ..() + +/mob/living/carbon/human/verb/pull_punches() + set name = "Pull Punches" + set desc = "Try not to hurt them." + set category = "IC" + + if(stat) return + pulling_punches = !pulling_punches + src << "You are now [pulling_punches ? "pulling your punches" : "not pulling your punches"]." + return diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 6b12d0ea9ba..a0af1f2fcff 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,6 +1,10 @@ /mob/living/carbon/human/proc/get_unarmed_attack(var/mob/living/carbon/human/target, var/hit_zone) for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) if(u_attack.is_usable(src, target, hit_zone)) + if(pulling_punches) + var/datum/unarmed_attack/soft_variant = u_attack.get_sparring_variant() + if(soft_variant) + return soft_variant return u_attack return null @@ -221,7 +225,7 @@ attack.apply_effects(H, src, armour, rand_damage, hit_zone) // Finally, apply damage to target - apply_damage(real_damage, BRUTE, affecting, armour, sharp=attack.sharp, edge=attack.edge) + apply_damage(real_damage, (attack.deal_halloss ? HALLOSS : BRUTE), affecting, armour, sharp=attack.sharp, edge=attack.edge) if(I_DISARM) M.attack_log += text("\[[time_stamp()]\] Disarmed [src.name] ([src.ckey])") diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index bde26ceb600..7ed171a1f1d 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -82,6 +82,7 @@ var/list/flavor_texts = list() var/gunshot_residue + var/pulling_punches // Are you trying not to hurt your opponent? mob_bump_flag = HUMAN mob_push_flags = ~HEAVY diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 289b4a22733..72bf93753ce 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -1,3 +1,5 @@ +var/global/list/sparring_attack_cache = list() + //Species unarmed attacks /datum/unarmed_attack var/attack_verb = list("attack") // Empty hand hurt intent verb. @@ -8,10 +10,19 @@ var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. var/sharp = 0 var/edge = 0 - + + var/deal_halloss + var/sparring_variant_type = /datum/unarmed_attack/light_strike + var/eye_attack_text var/eye_attack_text_victim +/datum/unarmed_attack/proc/get_sparring_variant() + if(sparring_variant_type) + if(!sparring_attack_cache[sparring_variant_type]) + sparring_attack_cache[sparring_variant_type] = new sparring_variant_type() + return sparring_attack_cache[sparring_variant_type] + /datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if(user.restrained()) return 0 @@ -84,7 +95,7 @@ /datum/unarmed_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target) var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"] eyes.take_damage(rand(3,4), 1) - + user.visible_message("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!") target << "You experience[(target.species.flags & NO_PAIN)? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(target.species.flags & NO_PAIN)? "." : "!"]" @@ -233,4 +244,14 @@ switch(attack_damage) if(1 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!") - if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/ \ No newline at end of file + if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/ + +/datum/unarmed_attack/light_strike + deal_halloss = 1 + attack_noun = list("tap","light strike") + attack_verb = list("tapped", "lightly struck") + damage = 2 + shredding = 0 + damage = 0 + sharp = 0 + edge = 0 \ No newline at end of file