From b1bbc87f0a26055c8a2c504cd07a667f95e9b388 Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Sun, 20 Oct 2024 05:49:06 -0500 Subject: [PATCH 1/4] the buff finally --- .../code/modules/martial_arts/tribal_claw.dm | 167 +++++++++++------- .../modules/uplink/uplink_items/species.dm | 2 +- 2 files changed, 107 insertions(+), 62 deletions(-) diff --git a/monkestation/code/modules/martial_arts/tribal_claw.dm b/monkestation/code/modules/martial_arts/tribal_claw.dm index 307820d8d9f5..4e1c5fa6a2e3 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, "jugular gored (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 @@ -114,6 +159,6 @@ Deals 15 brute to head(reduced by armor) and causes a rapid bleeding effect simi to_chat(usr, "You retreat inward and recall the teachings of the Tribal Claw...") to_chat(usr, span_notice("Tail Sweep: Disarm Harm. Pushes everyone around you away and knocks them down.")) - to_chat(usr, span_notice("Face Scratch: Harm Harm. Damages your target's head and confuses them for a short time.")) - to_chat(usr, span_notice("Jugular Cut: Harm Disarm. Causes your target to rapidly lose blood, works only if you grab your target by their neck, if they are sleeping, or in critical condition.")) - to_chat(usr, span_notice("Tail Grab: Disarm Disarm Grab. Grabs your target by their neck and makes them unable to talk for a short time.")) + to_chat(usr, span_notice("Face Scratch: Harm Harm. Damages your defender's head and confuses them for a short time.")) + to_chat(usr, span_notice("Jugular Cut: Harm Disarm. Causes your defender to rapidly lose blood, works only if you grab your defender by their neck, if they are sleeping, or in critical condition.")) + to_chat(usr, span_notice("Tail Grab: Disarm Disarm Grab. Grabs your defender by their neck and makes them unable to talk for a short time.")) 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) From 9360267941734045386d79d2bd7588eaaf35b3bf Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Sun, 20 Oct 2024 05:59:41 -0500 Subject: [PATCH 2/4] ctrl f --- monkestation/code/modules/martial_arts/tribal_claw.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/monkestation/code/modules/martial_arts/tribal_claw.dm b/monkestation/code/modules/martial_arts/tribal_claw.dm index 4e1c5fa6a2e3..6d8a4bf8da09 100644 --- a/monkestation/code/modules/martial_arts/tribal_claw.dm +++ b/monkestation/code/modules/martial_arts/tribal_claw.dm @@ -101,7 +101,7 @@ If the target is T3 grabbed or sleeping, instead deal 60 damage with a weeping a break if((defender.health <= defender.crit_threshold || (attacker.pulling == defender && attacker.grab_state >= GRAB_NECK) || defender.IsSleeping()) && !is_jugcut) { - log_combat(attacker, defender, "jugular gored (Tribal Claw)", name) + 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!")) @@ -159,6 +159,6 @@ If the target is T3 grabbed or sleeping, instead deal 60 damage with a weeping a to_chat(usr, "You retreat inward and recall the teachings of the Tribal Claw...") to_chat(usr, span_notice("Tail Sweep: Disarm Harm. Pushes everyone around you away and knocks them down.")) - to_chat(usr, span_notice("Face Scratch: Harm Harm. Damages your defender's head and confuses them for a short time.")) - to_chat(usr, span_notice("Jugular Cut: Harm Disarm. Causes your defender to rapidly lose blood, works only if you grab your defender by their neck, if they are sleeping, or in critical condition.")) - to_chat(usr, span_notice("Tail Grab: Disarm Disarm Grab. Grabs your defender by their neck and makes them unable to talk for a short time.")) + to_chat(usr, span_notice("Face Scratch: Harm Harm. Damages your target's head and confuses them for a short time.")) + to_chat(usr, span_notice("Jugular Cut: Harm Disarm. Causes your target to rapidly lose blood, works only if you grab your target by their neck, if they are sleeping, or in critical condition.")) + to_chat(usr, span_notice("Tail Grab: Disarm Disarm Grab. Grabs your target by their neck and makes them unable to talk for a short time.")) From 4418514dbd0754ce9434d711934a7895e4b3f31a Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:45:40 -0600 Subject: [PATCH 3/4] we are so back the fix --- monkestation/code/modules/martial_arts/tribal_claw.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monkestation/code/modules/martial_arts/tribal_claw.dm b/monkestation/code/modules/martial_arts/tribal_claw.dm index 6260b3972622..c43956fab89f 100644 --- a/monkestation/code/modules/martial_arts/tribal_claw.dm +++ b/monkestation/code/modules/martial_arts/tribal_claw.dm @@ -96,9 +96,10 @@ If the target is T3 grabbed or sleeping, instead deal 60 damage with a weeping a //balance feature, prevents damage bonus if(LAZYLEN(head?.wounds) > 0) for(var/i in head.wounds) - if (i == critical_wound_type) + if (istype(i, critical_wound_type)) is_jugcut = TRUE break + else is_jugcut = FALSE 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) From 910fadd22e4858ce618c799c85e33ae87ae7c352 Mon Sep 17 00:00:00 2001 From: wraith-54321 <69217972+wraith-54321@users.noreply.github.com> Date: Thu, 28 Nov 2024 00:19:44 -0800 Subject: [PATCH 4/4] Update tribal_claw.dm --- monkestation/code/modules/martial_arts/tribal_claw.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/monkestation/code/modules/martial_arts/tribal_claw.dm b/monkestation/code/modules/martial_arts/tribal_claw.dm index c43956fab89f..3c9f9ad6e69b 100644 --- a/monkestation/code/modules/martial_arts/tribal_claw.dm +++ b/monkestation/code/modules/martial_arts/tribal_claw.dm @@ -95,11 +95,10 @@ If the target is T3 grabbed or sleeping, instead deal 60 damage with a weeping a //balance feature, prevents damage bonus if(LAZYLEN(head?.wounds) > 0) - for(var/i in head.wounds) - if (istype(i, critical_wound_type)) + for(var/wound in head.wounds) + if (istype(wound, critical_wound_type)) is_jugcut = TRUE break - else is_jugcut = FALSE 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)