From c71547055bd105518d05e7fa763e9cb4bd197d43 Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:19:44 -0500 Subject: [PATCH] Tribal claw buff (#3886) * the buff finally * ctrl f --- .../code/modules/martial_arts/tribal_claw.dm | 161 +++++++++++------- .../modules/uplink/uplink_items/species.dm | 2 +- 2 files changed, 104 insertions(+), 59 deletions(-) diff --git a/monkestation/code/modules/martial_arts/tribal_claw.dm b/monkestation/code/modules/martial_arts/tribal_claw.dm index 307820d8d9f5..6d8a4bf8da09 100644 --- a/monkestation/code/modules/martial_arts/tribal_claw.dm +++ b/monkestation/code/modules/martial_arts/tribal_claw.dm @@ -10,99 +10,144 @@ id = MARTIALART_TRIBALCLAW allow_temp_override = FALSE help_verb = /mob/living/carbon/human/proc/tribal_claw_help + var/list/tribal_traits = list(TRAIT_HARDLY_WOUNDED, TRAIT_HARD_SOLES) -/datum/martial_art/tribal_claw/proc/check_streak(mob/living/carbon/human/attacker, mob/living/carbon/human/target) + smashes_tables = TRUE //:3 + + block_chance = 60 //you can use throw mode to block melee attacks... sometimes + //originally wanted to do inverse correlation but it donbt work :pensive: + +/datum/armor/scales + melee = 20 + bullet = 20 + laser = 20 + wound = 20 + +/datum/martial_art/tribal_claw/teach(mob/living/carbon/human/target, make_temporary = FALSE) + . = ..() + if(!.) + return + target.add_traits(tribal_traits) + target.set_armor(target.get_armor().add_other_armor(/datum/armor/scales)) + +/datum/martial_art/tribal_claw/on_remove(mob/living/carbon/human/target) + target.set_armor(target.get_armor().subtract_other_armor(/datum/armor/scales)) + REMOVE_TRAITS_IN(target, tribal_traits) + . = ..() + +/datum/martial_art/tribal_claw/proc/check_streak(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) if(findtext(streak,TAIL_SWEEP_COMBO)) streak = "" - tailSweep(attacker,target) + tailSweep(attacker,defender) return TRUE if(findtext(streak,FACE_SCRATCH_COMBO)) streak = "" - faceScratch(attacker,target) + faceScratch(attacker,defender) return TRUE if(findtext(streak,JUGULAR_CUT_COMBO)) streak = "" - jugularCut(attacker,target) + jugularCut(attacker,defender) return TRUE if(findtext(streak,TAIL_GRAB_COMBO)) streak = "" - tailGrab(attacker,target) + tailGrab(attacker,defender) return TRUE return FALSE //Tail Sweep, triggers an effect similar to Alien Queen's tail sweep but only affects stuff 1 tile next to you, basically 3x3. -/datum/martial_art/tribal_claw/proc/tailSweep(mob/living/carbon/human/attacker, mob/living/carbon/human/target) +/datum/martial_art/tribal_claw/proc/tailSweep(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) if(attacker == current_target) return - log_combat(attacker, target, "tail sweeped(Tribal Claw)", name) - target.visible_message(span_warning("[attacker] sweeps [target]'s legs with their tail!"), \ - span_userdanger("[attacker] sweeps your legs with their tail!")) + log_combat(attacker, defender, "tail sweeped(Tribal Claw)", name) + defender.visible_message(span_warning("[attacker] sweeps [defender] off their legs with their tail!"), \ + span_userdanger("[attacker] sweeps you off your legs with their tail!")) var/static/datum/action/cooldown/spell/aoe/repulse/martial/lizard/tail_sweep = new tail_sweep.cast(attacker) -//Face Scratch, deals 10 brute to head(reduced by armor), blurs the target's vision and gives them the confused effect for a short time. -/datum/martial_art/tribal_claw/proc/faceScratch(mob/living/carbon/human/attacker, mob/living/carbon/human/target) - var/def_check = target.getarmor(BODY_ZONE_HEAD, MELEE) - log_combat(attacker, target, "face scratched (Tribal Claw)", name) - target.visible_message(span_warning("[attacker] scratches [target]'s face with their claws!"), \ +//Face Scratch, deals 30 brute to head(reduced by armor), blurs the defender's vision and gives them the confused effect for a short time. +/datum/martial_art/tribal_claw/proc/faceScratch(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) + var/def_check = defender.getarmor(BODY_ZONE_HEAD, MELEE) + log_combat(attacker, defender, "face scratched (Tribal Claw)", name) + defender.visible_message(span_warning("[attacker] scratches [defender]'s face with their claws!"), \ span_userdanger("[attacker] scratches your face with their claws!")) - target.apply_damage(10, BRUTE, BODY_ZONE_HEAD, def_check) - target.adjust_confusion(5 SECONDS) - target.adjust_eye_blur(5 SECONDS) - attacker.do_attack_animation(target, ATTACK_EFFECT_CLAW) - playsound(get_turf(target), 'sound/weapons/slash.ogg', 50, 1, -1) + defender.apply_damage(30, BRUTE, BODY_ZONE_HEAD, def_check) + defender.adjust_confusion(5 SECONDS) + defender.adjust_eye_blur(5 SECONDS) + attacker.do_attack_animation(defender, ATTACK_EFFECT_CLAW) + playsound(get_turf(defender), 'sound/weapons/slash.ogg', 50, 1, -1) /* -Jugular Cut, can only be done if the target is in crit, being held in a tier 3 grab by the user or if they are sleeping. -Deals 15 brute to head(reduced by armor) and causes a rapid bleeding effect similar to throat slicing someone with a sharp item. +Jugular Cut +Deals 15 damage to the target plus 10 seconds of oxygen loss and 10 oxyloss, with an open laceration +If the target is T3 grabbed or sleeping, instead deal 60 damage with a weeping avulsion alongside the previous. */ -//LIES!! TG completely FUCKED throat slitting and it's EXTREMELY DIFFICULT to replicate. This absolutely sucked to code. - - -/datum/martial_art/tribal_claw/proc/jugularCut(mob/living/carbon/attacker, mob/living/carbon/target) - var/def_check = target.getarmor(BODY_ZONE_HEAD, MELEE) - var/wound_type = /datum/wound/slash/flesh/critical - var/obj/item/bodypart/head = target.get_bodypart(BODY_ZONE_HEAD) - var/datum/wound/slash/flesh/jugcut = new wound_type() - - if((target.health <= target.crit_threshold || (attacker.pulling == target && attacker.grab_state >= GRAB_NECK) || target.IsSleeping())) - log_combat(attacker, target, "jugular cut (Tribal Claw)", name) - target.visible_message(span_warning("[attacker] cuts [target]'s jugular vein with their claws!"), \ - span_userdanger("[attacker] cuts your jugular vein!")) - target.apply_damage(15, BRUTE, BODY_ZONE_HEAD, def_check) +/datum/martial_art/tribal_claw/proc/jugularCut(mob/living/carbon/attacker, mob/living/carbon/defender) + var/def_check = defender.getarmor(BODY_ZONE_HEAD, MELEE) + var/obj/item/bodypart/head = defender.get_bodypart(BODY_ZONE_HEAD) + + var/wound_type = /datum/wound/slash/flesh/severe + var/critical_wound_type = /datum/wound/slash/flesh/critical + var/datum/wound/slash/flesh/laceration = new wound_type() + var/datum/wound/slash/flesh/jugcut = new critical_wound_type() + var/is_jugcut = FALSE + + log_combat(attacker, defender, "jugular cut (Tribal Claw)", name) + + //balance feature, prevents damage bonus + if(LAZYLEN(head?.wounds) > 0) + for(var/i in head.wounds) + if (i == critical_wound_type) + is_jugcut = TRUE + break + + if((defender.health <= defender.crit_threshold || (attacker.pulling == defender && attacker.grab_state >= GRAB_NECK) || defender.IsSleeping()) && !is_jugcut) { + log_combat(attacker, defender, "strong jugular cut (Tribal Claw)", name) + defender.apply_damage(60, BRUTE, BODY_ZONE_HEAD, def_check) + defender.visible_message(span_warning("[attacker] tears out [defender]'s throat with their tail!"), \ + span_userdanger("[attacker] tears out your throat with their tail!")) jugcut.apply_wound(head) - attacker.do_attack_animation(target, ATTACK_EFFECT_CLAW) - playsound(get_turf(target), 'sound/weapons/slash.ogg', 50, 1, -1) - else - //the original code says that this should be a basic attack instead, but not quite sure I could get that to work without fanangling - return MARTIAL_ATTACK_FAIL - - -//Tail Grab, instantly puts your target in a T3 grab and makes them unable to talk for a short time. -/datum/martial_art/tribal_claw/proc/tailGrab(mob/living/carbon/human/attacker, mob/living/carbon/human/target) - log_combat(attacker, target, "tail grabbed (Tribal Claw)", name) - target.visible_message(span_warning("[attacker] grabs [target] with their tail!"), \ + playsound(get_turf(defender), 'sound/effects/wounds/splatter.ogg') + } else { + defender.apply_damage(15, BRUTE, BODY_ZONE_HEAD, def_check) + defender.visible_message(span_warning("[attacker] cuts [defender]'s jugular vein with their claws!"), \ + span_userdanger("[attacker] cuts your jugular vein!")) + laceration.apply_wound(head) + } + //aditional effects + //this should improve lethality + if(defender.losebreath <= 50) + defender.losebreath = clamp(defender.losebreath + 10, 0, 50) + defender.adjustOxyLoss(10) + attacker.do_attack_animation(defender, ATTACK_EFFECT_CLAW) + playsound(get_turf(defender), 'sound/weapons/slash.ogg', 50, 1, -1) + + + +//Tail Grab, instantly puts your defender in a T3 grab and makes them unable to talk for a short time. +/datum/martial_art/tribal_claw/proc/tailGrab(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) + log_combat(attacker, defender, "tail grabbed (Tribal Claw)", name) + defender.visible_message(span_warning("[attacker] grabs [defender] with their tail!"), \ span_userdanger("[attacker] grabs you with their tail!6")) - target.grabbedby(attacker, 1) - target.Knockdown(5) //Without knockdown target still stands up while T3 grabbed. + defender.grabbedby(attacker, 1) + defender.Knockdown(5) //Without knockdown defender still stands up while T3 grabbed. attacker.setGrabState(GRAB_NECK) - target.adjust_silence_up_to(10 SECONDS, 10 SECONDS) + defender.adjust_silence_up_to(10 SECONDS, 10 SECONDS) -/datum/martial_art/tribal_claw/harm_act(mob/living/carbon/human/attacker, mob/living/carbon/human/target) - add_to_streak("H",target) - if(check_streak(attacker,target)) +/datum/martial_art/tribal_claw/harm_act(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) + add_to_streak("H",defender) + if(check_streak(attacker,defender)) return TRUE return FALSE -/datum/martial_art/tribal_claw/disarm_act(mob/living/carbon/human/attacker, mob/living/carbon/human/target) - add_to_streak("D",target) - if(check_streak(attacker,target)) +/datum/martial_art/tribal_claw/disarm_act(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) + add_to_streak("D",defender) + if(check_streak(attacker,defender)) return TRUE return FALSE -/datum/martial_art/tribal_claw/grab_act(mob/living/carbon/human/attacker, mob/living/carbon/human/target) - add_to_streak("G",target) - if(check_streak(attacker,target)) +/datum/martial_art/tribal_claw/grab_act(mob/living/carbon/human/attacker, mob/living/carbon/human/defender) + add_to_streak("G",defender) + if(check_streak(attacker,defender)) return TRUE return FALSE diff --git a/monkestation/code/modules/uplink/uplink_items/species.dm b/monkestation/code/modules/uplink/uplink_items/species.dm index adb036254d37..5c11850bfd05 100644 --- a/monkestation/code/modules/uplink/uplink_items/species.dm +++ b/monkestation/code/modules/uplink/uplink_items/species.dm @@ -26,6 +26,6 @@ /datum/uplink_item/species_restricted/tribal_claw_scroll name = "Silver-Scale Scroll" desc = "A scroll with ancient heritage. It can teach the user the secrets of Tribal Claw, an offensive martial art reliant on one's claws and tail." - cost = 7 + cost = 10 item = /obj/item/book/granter/martial/tribal_claw restricted_species = list(SPECIES_LIZARD)