From 1aa877ce5bccca0165fa6b218ce44b789bec564e Mon Sep 17 00:00:00 2001
From: RinPin <89030906+RinPin@users.noreply.github.com>
Date: Sat, 1 Jul 2023 02:42:05 -0300
Subject: [PATCH 1/3] Berserker Rework!
Makes the Berserker martial arts avaliable for players, with some changes to make it more suitable for PVE and keeping in line with the other martial arts
adds the NO_DRUGS trait to it, as well as changing the choke slam move (which was a knock prone stunlock vs players) into a wrist wrench combo, which disarms the active hand of whatever it's being held as well as causing minor damaga and stamina damage. as well as the AUTO CATCH trait to make it in line with boar and bass, removes the pierce immunity trait as well as the no dismemberment.
---
code/datums/martial/berserker.dm | 88 +++++++++++++---------
code/game/objects/items/granters.dm | 2 +-
code/game/objects/items/loadout_beacons.dm | 8 +-
3 files changed, 62 insertions(+), 36 deletions(-)
diff --git a/code/datums/martial/berserker.dm b/code/datums/martial/berserker.dm
index be2b1ad31b9..5e9d679112b 100644
--- a/code/datums/martial/berserker.dm
+++ b/code/datums/martial/berserker.dm
@@ -1,6 +1,6 @@
#define HARD_PUNCH_COMBO "HH"
#define SHOULDERCHECK_COMBO "HD"
-#define CHOKE_SLAM_COMBO "HG"
+#define WRIST_WRENCH_COMBO "DD"
/datum/martial_art/berserker
name = "Berserker Rites"
@@ -18,9 +18,9 @@
streak = ""
shoulderCheck(A,D)
return TRUE
- if(findtext(streak,CHOKE_SLAM_COMBO))
+ if(findtext(streak,WRIST_WRENCH_COMBO))
streak = ""
- chokeSlam(A,D)
+ wristWrench(A,D)
return TRUE
return FALSE
@@ -65,28 +65,44 @@
return TRUE
///chokeslam: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor
-/datum/martial_art/berserker/proc/chokeSlam(mob/living/carbon/human/A, mob/living/carbon/human/D)
- var/damage = damage_roll(A,D)
- A.do_attack_animation(D, ATTACK_EFFECT_KICK)
- var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_HEAD)
- var/armor_block = D.run_armor_check(affecting, "melee")
- playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
- if((D.mobility_flags & MOBILITY_STAND))
- D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
- D.DefaultCombatKnockdown(10, null, TRUE)
- D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) //A cit specific change form the tg port to really punish anyone who tries to stand up
- D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"), \
- span_userdanger("[A] grabs you by the throat, slammed your head into the ground!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
- to_chat(A, span_danger("You chokeslam [D]!"))
- else
- D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
- D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
- D.drop_all_held_items()
- D.visible_message(span_warning("[A] pummels [D]!"), \
- span_userdanger("You are kicked in the head by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
- to_chat(A, span_danger("You pummel [D]!"))
- log_combat(A, D, "chokeslammed (Berserker")
- return TRUE
+//datum/martial_art/berserker/proc/chokeSlam(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ //var/damage = damage_roll(A,D)
+ //A.do_attack_animation(D, ATTACK_EFFECT_KICK)
+ //var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_HEAD)
+ //var/armor_block = D.run_armor_check(affecting, "melee")
+ //playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
+ //if((D.mobility_flags & MOBILITY_STAND))
+ //D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
+ //D.DefaultCombatKnockdown(10, null, TRUE)
+ //D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) //A cit specific change form the tg port to really punish anyone who tries to stand up
+ //D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"), \
+ //span_userdanger("[A] grabs you by the throat, slammed your head into the ground!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
+ //to_chat(A, span_danger("You chokeslam [D]!"))
+ //else
+ //D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
+ //D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
+ //D.drop_all_held_items()
+ //D.visible_message(span_warning("[A] pummels [D]!"), \
+ //span_userdanger("You are kicked in the head by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
+ //to_chat(A, span_danger("You pummel [D]!"))
+ //log_combat(A, D, "chokeslammed (Berserker")
+ //return TRUE
+
+/datum/martial_art/berserker/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ log_combat(A, D, "wrist wrenched (Berserker)")
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
+ "[A] grabs your wrist and violently wrenches it to the side!")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
+ D.emote("scream")
+ D.dropItemToGround(D.get_active_held_item())
+ D.apply_damage(10, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
+ D.apply_damage(20, STAMINA, pick(A.zone_selected))
+ to_chat(A, span_danger("You wrench [D]'s wrist!"))
+ log_combat(A, D, "wrist wrenched (Berserker)")
+
+ return TRUE
+
/datum/martial_art/berserker/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("G",D)
@@ -124,20 +140,24 @@
. = ..()
if(!.)
return
- ADD_TRAIT(H, TRAIT_NOGUNS, BERSERKER_TRAIT)
- ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT)
- ADD_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT)
- ADD_TRAIT(H, TRAIT_BERSERKER, BERSERKER_TRAIT)
+ ADD_TRAIT(H, TRAIT_NODRUGS, TRAIT_BERSERKER)
+ ADD_TRAIT(H, TRAIT_NOGUNS, TRAIT_BERSERKER)
+ //ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT)
+ //ADD_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT)
+ ADD_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, TRAIT_BERSERKER)
+ ADD_TRAIT(H, TRAIT_BERSERKER, TRAIT_BERSERKER)
H.physiology.stamina_mod *= 0.3 //more stamina
H.physiology.stun_mod *= 0.3 //better stun resistance
/datum/martial_art/berserker/on_remove(mob/living/carbon/human/H)
. = ..()
- REMOVE_TRAIT(H, TRAIT_NOGUNS, BERSERKER_TRAIT)
- REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT)
- REMOVE_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT)
+ REMOVE_TRAIT(H, TRAIT_NODRUGS, TRAIT_BERSERKER)
+ REMOVE_TRAIT(H, TRAIT_NOGUNS, TRAIT_BERSERKER)
+ //REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT)
+ //REMOVE_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT)
REMOVE_TRAIT(H, TRAIT_BERSERKER, BERSERKER_TRAIT)
+ REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, TRAIT_BERSERKER)
H.physiology.stamina_mod = initial(H.physiology.stamina_mod)
H.physiology.stun_mod = initial(H.physiology.stun_mod)
@@ -150,6 +170,6 @@
to_chat(usr, "Gutpunch: Harm Harm. Deal additional damage every second punch, with a chance for even more damage!")
to_chat(usr, "Shoulder Check: Harm Disarm. Launch people brutally across rooms, and away from you.")
- to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
+ to_chat(usr, span_notice("Wrist Wrench: Disarm Disarm. Grab and painfully wrench someone's wrist, disarming them and dealing minor brute and stamina damage."))
to_chat(usr, span_notice("In addition, your body is better conditioned, giving you further stamina and increased stun resistance."))
-
+ //to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
\ No newline at end of file
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index f900eff5e90..50533ba303d 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -511,7 +511,7 @@
martial = /datum/martial_art/berserker
name = "berserker's rites"
martialname = "berserkers rites"
- desc = "A paper scroll detailing the sacred rites of the berserker. It is against the law of the Legion for any not walking the path of the berserker to read this."
+ desc = "A paper scroll detailing the sacred rites of a tribal berserker, the words are awash with primal, barely contained fury."
greet = span_sciradio("You have mastered the rites of the berserker. Use the help verb to see your combos.")
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll2"
diff --git a/code/game/objects/items/loadout_beacons.dm b/code/game/objects/items/loadout_beacons.dm
index ee1a8d91518..4f25a243d58 100644
--- a/code/game/objects/items/loadout_beacons.dm
+++ b/code/game/objects/items/loadout_beacons.dm
@@ -2164,7 +2164,7 @@ GLOBAL_LIST_EMPTY(loadout_boxes)
entry_flags = LOADOUT_FLAG_TRIBAL
entry_class = LOADOUT_CAT_MELEE_TWO
spawn_thing = /obj/item/storage/box/gun/tribal/bmprsword
-*/
+*/
/datum/loadout_box/warmace
entry_tag = "Warmace"
@@ -2416,3 +2416,9 @@ GLOBAL_LIST_EMPTY(loadout_boxes)
entry_flags = LOADOUT_FLAG_WASTER
entry_class = LOADOUT_CAT_SHIELD
spawn_thing = /obj/item/shield/coyote/riotweathered
+
+/datum/loadout_box/beserker
+ entry_tag = "Berserker's rites"
+ entry_flags = LOADOUT_FLAG_WASTER
+ entry_class = LOADOUT_CAT_MISC
+ spawn_thing = /obj/item/book/granter/martial/berserker
From a7de05d7907675816b571f22e61f98fe0ae5cbc3 Mon Sep 17 00:00:00 2001
From: Tk420634
Date: Sat, 1 Jul 2023 02:35:01 -0500
Subject: [PATCH 2/3] Adds trailing newline
:)
---
code/datums/martial/berserker.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/datums/martial/berserker.dm b/code/datums/martial/berserker.dm
index 5e9d679112b..a2b203e931d 100644
--- a/code/datums/martial/berserker.dm
+++ b/code/datums/martial/berserker.dm
@@ -172,4 +172,4 @@
to_chat(usr, "Shoulder Check: Harm Disarm. Launch people brutally across rooms, and away from you.")
to_chat(usr, span_notice("Wrist Wrench: Disarm Disarm. Grab and painfully wrench someone's wrist, disarming them and dealing minor brute and stamina damage."))
to_chat(usr, span_notice("In addition, your body is better conditioned, giving you further stamina and increased stun resistance."))
- //to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
\ No newline at end of file
+ //to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
From 871fb7869b6b1e55e4aa5535b3c66c25a183dae3 Mon Sep 17 00:00:00 2001
From: Superlagg
Date: Sat, 1 Jul 2023 11:26:23 -0700
Subject: [PATCH 3/3] Update berserker.dm
---
code/datums/martial/berserker.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/datums/martial/berserker.dm b/code/datums/martial/berserker.dm
index a2b203e931d..e0c06e35828 100644
--- a/code/datums/martial/berserker.dm
+++ b/code/datums/martial/berserker.dm
@@ -75,14 +75,14 @@
//D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
//D.DefaultCombatKnockdown(10, null, TRUE)
//D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) //A cit specific change form the tg port to really punish anyone who tries to stand up
- //D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"), \
+ //D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"),
//span_userdanger("[A] grabs you by the throat, slammed your head into the ground!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
//to_chat(A, span_danger("You chokeslam [D]!"))
//else
//D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
//D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND)
//D.drop_all_held_items()
- //D.visible_message(span_warning("[A] pummels [D]!"), \
+ //D.visible_message(span_warning("[A] pummels [D]!"),
//span_userdanger("You are kicked in the head by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A)
//to_chat(A, span_danger("You pummel [D]!"))
//log_combat(A, D, "chokeslammed (Berserker")