diff --git a/code/datums/martial.dm b/code/datums/martial.dm index dae5cba6967..d69b28cd0b1 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -7,7 +7,6 @@ var/datum/martial_art/base = null // The permanent style var/deflection_chance = 0 //Chance to deflect projectiles var/help_verb = null - var/counter_prob = 0//probability to counter direct melee attacks /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return 0 @@ -18,9 +17,6 @@ /datum/martial_art/proc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return 0 -/datum/martial_art/proc/on_hit(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - return 0 - /datum/martial_art/proc/add_to_streak(element,mob/living/carbon/human/D) if(D != current_target) current_target = D @@ -51,9 +47,7 @@ playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1) D.visible_message("[A] has [atk_verb]ed [D]!", \ "[A] has [atk_verb]ed [D]!") - var/datum/martial_art/MA = D.martial_art - if(MA.on_hit(D,A))//they countered with something - return 1 + D.apply_damage(damage, BRUTE, affecting, armor_block) add_logs(A, D, "punched") @@ -116,9 +110,7 @@ var/armor_block = D.run_armor_check(affecting, "melee") playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1) - var/datum/martial_art/MA = D.martial_art - if(MA.on_hit(D,A)) // they countered with something - return 1 + D.visible_message("[A] has hit [D] with a [atk_verb]!", \ "[A] has hit [D] with a [atk_verb]!") @@ -398,9 +390,6 @@ add_to_streak("H",D) if(check_streak(A,D)) return 1 - var/datum/martial_art/MA = D.martial_art - if(MA.on_hit(D,A)) // they countered with something - return 1 A.do_attack_animation(D) var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams") D.visible_message("[A] [atk_verb] [D]!", \ @@ -587,4 +576,4 @@ /obj/item/weapon/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(wielded) return ..() - return 0 + return 0 \ No newline at end of file diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 2561961770b..3dc54dd3f15 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -1,57 +1,65 @@ /datum/martial_art/krav_maga name = "Krav Maga" - counter_prob = 25 + var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop() + var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep() + var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch() -/datum/martial_art/krav_maga/on_hit(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - if(prob(counter_prob)) - if(prob(50)) - A.visible_message("[A] counters [D]'s hit!", \ - "You counter the hit!") - sleep(5) - playsound(get_turf(A), 'sound/effects/hit_block.ogg', 50, 1, -1) - D.apply_damage(10, BRUTE) - return 1 +/datum/action/neck_chop + name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while." + button_icon_state = "neckchop" - else - A.visible_message("[A] blocks [D]'s hit!", \ - "You block the hit!") - playsound(get_turf(A), 'sound/effects/hit_block.ogg', 50, 1, -1) - return 1 - return 0 +/datum/action/neck_chop/Trigger() + owner << "Your next attack will be a Neck Chop." + owner.visible_message("[owner] assumes the Neck Chop stance!") + var/mob/living/carbon/human/H = owner + H.martial_art.streak = "neck_chop" +/datum/action/leg_sweep + name = "Leg Sweep - Trips the victim, rendering them prone and unable to move for a short time." + button_icon_state = "legsweep" + +/datum/action/leg_sweep/Trigger() + owner << "Your next attack will be a Leg Sweep." + owner.visible_message("[owner] assumes the Leg Sweep stance!") + var/mob/living/carbon/human/H = owner + H.martial_art.streak = "leg_sweep" + +/datum/action/lung_punch//referred to internally as 'quick choke' + name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time." + button_icon_state = "lungpunch" + +/datum/action/lung_punch/Trigger() + owner << "Your next attack will be a Lung Punch." + owner.visible_message("[owner] assumes the Lung Punch stance!") + var/mob/living/carbon/human/H = owner + H.martial_art.streak = "quick_choke"//internal name for lung punch /datum/martial_art/krav_maga/teach(var/mob/living/carbon/human/H,var/make_temporary=0) ..() H << "You know the arts of Krav Maga!" - H << "Recall your teachings using the Access Tutorial verb in the Krav Maga menu, in your verbs menu." - H.verbs += /mob/living/carbon/human/proc/krav_maga_help - H.verbs += /mob/living/carbon/human/proc/neck_chop - H.verbs += /mob/living/carbon/human/proc/head_elbow - H.verbs += /mob/living/carbon/human/proc/leg_sweep - H.verbs += /mob/living/carbon/human/proc/quick_choke + H << "Place your cursor over a move at the top of the screen to see what it does." + neckchop.Grant(H) + legsweep.Grant(H) + lungpunch.Grant(H) /datum/martial_art/krav_maga/remove(var/mob/living/carbon/human/H) ..() - H.verbs -= /mob/living/carbon/human/proc/krav_maga_help - H.verbs -= /mob/living/carbon/human/proc/neck_chop - H.verbs -= /mob/living/carbon/human/proc/head_elbow - H.verbs -= /mob/living/carbon/human/proc/leg_sweep - H.verbs -= /mob/living/carbon/human/proc/quick_choke + H << "You suddenly forget the arts of Krav Maga..." + neckchop.Remove(H) + legsweep.Remove(H) + lungpunch.Remove(H) + /datum/martial_art/krav_maga/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) switch(streak) if("neck_chop") streak = "" neck_chop(A,D) return 1 - if("head_elbow") - streak = "" - head_elbow(A,D) - return 1 if("leg_sweep") streak = "" leg_sweep(A,D) return 1 - if("quick_choke") + if("quick_choke")//is actually lung punch streak = "" quick_choke(A,D) return 1 @@ -64,27 +72,17 @@ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) D.apply_damage(5, BRUTE) - D.Weaken(6) + D.Weaken(4)//originally was 6, lowered since you could kill somebody in one stun return 1 -/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - D.visible_message("[A] grabs and chokes [D]!", \ - "[A] grabs and chokes you!") +/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch + D.visible_message("[A] pounds [D] on the chest!", \ + "[A] slams your chest! You can't breathe!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.losebreath += 5 D.adjustOxyLoss(10) return 1 -/datum/martial_art/krav_maga/proc/head_elbow(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - if(D.stat || D.weakened) - return 0 - D.visible_message("[A] elbows [D] in the face, stunning them!", \ - "[A] elbows you in the face, stunning you!") - playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) - D.apply_damage(10, BRUTE) - D.Stun(3) - return 1 - /datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) D.visible_message("[A] karate chops [D]'s neck!", \ "[A] karate chops your neck, rendering you unable to speak for a short time!") @@ -103,25 +101,20 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi return 1 add_logs(A, D, "punched") A.do_attack_animation(D) - if(D.martial_art) - var/datum/martial_art/MA = D.martial_art - if(MA.on_hit(D,A)) // they countered with something - add_logs(A, D, "countered or blocked") - return 1 var/picked_hit_type = pick("punches", "kicks") - if(picked_hit_type == "kicks") + var/bonus_damage = 10 + if(D.weakened || D.resting || D.lying) + bonus_damage += 5 + picked_hit_type = "stomps on" + D.apply_damage(bonus_damage, BRUTE) + if(picked_hit_type == "kicks" || picked_hit_type == "stomps") playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1) else playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.visible_message("[A] [picked_hit_type] [D]!", \ - "[A] hits you!") - var/bonus_damage = 10 - if(D.weakened) - bonus_damage += 5 - D.apply_damage(bonus_damage, BRUTE) + "[A] [picked_hit_type] you!") return 1 - /datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) return 1 @@ -145,45 +138,7 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) return 1 -/mob/living/carbon/human/proc/krav_maga_help() - set name = "Access Tutorial" - set desc = "Access the Krav Maga tutorial." - set category = "Krav Maga" - - usr << "You recall your Krav Maga teachings..." - usr << "Leg Sweep: Performs a leg sweep, knocking down the target and making him vulnerable to attack." - usr << "Quick Choke: Grabs and chokes the target. Good for speeding up a kill" - usr << "Head Elbow: Elbows the opponent in the face, stunning them, leaving them vulnerable to attacks." - usr << "Neck Chop: Karate chops the opponent's neck, rendering them unable to speak for a short period of time." - usr << "Trigger your moves by activating them with the verb, and then clicking on an opponent with a hostile intent." - -/mob/living/carbon/human/proc/neck_chop() - set name = "Neck Chop" - set desc = "Sets your next move to the Neck Chop." - set category = "Krav Maga" - usr << "Your next attack will be a Neck Chop." - martial_art.streak = "neck_chop" - -/mob/living/carbon/human/proc/head_elbow() - set name = "Head Elbow" - set desc = "Sets your next move to the Head Elbow." - set category = "Krav Maga" - usr << "Your next attack will be a Head Elbow." - martial_art.streak = "head_elbow" - -/mob/living/carbon/human/proc/leg_sweep() - set name = "Leg Sweep" - set desc = "Sets your next move to the Leg Sweep." - set category = "Krav Maga" - usr << "Your next attack will be a Leg Sweep." - martial_art.streak = "leg_sweep" - -/mob/living/carbon/human/proc/quick_choke() - set name = "Quick Choke" - set desc = "Sets your next move to the Quick Choke." - set category = "Krav Maga" - usr << "Your next attack will be a Quick Choke." - martial_art.streak = "quick_choke" +//Krav Maga Gloves /obj/item/clothing/gloves/krav_maga desc = "These gloves can teach you to perform Krav Maga using nanochips." diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f2bf4718c14..638a318f7f0 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -875,9 +875,7 @@ var/armor_block = H.run_armor_check(affecting, "melee") playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1) - var/datum/martial_art/MA = H.martial_art - if(MA.on_hit(H,M)) // they countered with something - return + H.visible_message("[M] has [atk_verb]ed [H]!", \ "[M] has [atk_verb]ed [H]!") @@ -954,10 +952,7 @@ user.do_attack_animation(H) if(H.check_shields(I.force, "the [I.name]", I, MELEE_ATTACK, I.armour_penetration)) return 0 - var/datum/martial_art/MA = H.martial_art - if(MA.on_hit(H,user)) // they countered with something - add_logs(user, H, "countered or blocked") - return 0 + if(I.attack_verb && I.attack_verb.len) H.visible_message("[user] has [pick(I.attack_verb)] [H] in the [hit_area] with [I]!", \ "[user] has [pick(I.attack_verb)] [H] in the [hit_area] with [I]!") @@ -1394,4 +1389,3 @@ #undef COLD_GAS_DAMAGE_LEVEL_1 #undef COLD_GAS_DAMAGE_LEVEL_2 #undef COLD_GAS_DAMAGE_LEVEL_3 - diff --git a/sound/effects/hit_block.ogg b/sound/effects/hit_block.ogg deleted file mode 100644 index 74210e59b58..00000000000 Binary files a/sound/effects/hit_block.ogg and /dev/null differ