Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Berserker Rework! #2588

Merged
merged 3 commits into from
Jul 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 54 additions & 34 deletions code/datums/martial/berserker.dm
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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

Expand Down Expand Up @@ -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("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \
"<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>")
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)
Expand Down Expand Up @@ -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)

Expand All @@ -150,6 +170,6 @@

to_chat(usr, "<span class='notice'>Gutpunch</span>: Harm Harm. Deal additional damage every second punch, with a chance for even more damage!")
to_chat(usr, "<span class='notice'>Shoulder Check</span>: Harm Disarm. Launch people brutally across rooms, and away from you.")
to_chat(usr, "<span class='notice'>Chokeslam</span>: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
to_chat(usr, span_notice("<span class='notice'>Wrist Wrench</span>: 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, "<span class='notice'>Chokeslam</span>: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
2 changes: 1 addition & 1 deletion code/game/objects/items/granters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
8 changes: 7 additions & 1 deletion code/game/objects/items/loadout_beacons.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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