diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index a7ee1856f94..d61a34be869 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -60,6 +60,8 @@ #define STATUS_EFFECT_REVOLUTION_PROTECT /datum/status_effect/rev_protection +#define STATUS_EFFECT_BEARSERKER_RAGE /datum/status_effect/bearserker_rage + ///////////// // DEBUFFS // ///////////// diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index d6579063212..21b74fb6328 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -747,3 +747,30 @@ /datum/status_effect/bookwyrm duration = BRAIN_DAMAGE_MOB_TIME alert_type = null + +/datum/status_effect/bearserker_rage + id = "bearserker rage" + duration = 5 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = /obj/screen/alert/status_effect/bearserker_rage + +/obj/screen/alert/status_effect/bearserker_rage + name = "Bearserker Rage" + desc = "Blood flows between your fingers, and Foh'Sie roars; \"MORE BLOOD!\"" + icon_state = "blood" + +/datum/status_effect/bearserker_rage/on_apply() + . = ..() + if(. && ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.stamina_mod *= 0.75 + H.physiology.heat_mod *= 0.5 + add_attack_logs(owner, owner, "gained bearserker rage resistances", ATKLOG_ALL) + owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, TRUE, use_reverb = FALSE) + +/datum/status_effect/bearserker_rage/on_remove() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.stamina_mod /= 0.75 + H.physiology.heat_mod /= 0.5 + add_attack_logs(owner, owner, "lost bearserker rage resistances", ATKLOG_ALL) diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index ecbd9908794..200d399b54e 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -412,6 +412,16 @@ excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) cant_discount = TRUE +/datum/uplink_item/stealthy_weapons/bearserk + name = "Bearserker Pelt" + desc = "A bear pelt that infuses the wearer with bear spirits and knowledge on an occultic martial art known as Rage of the Space Bear. \ + The pelt itself is also armored, providing the wearer great longevity. \ + Made with love, lots of spirits and lots of the other kind of spirits by the Sydnicate-affiliated cult, Children of Ursa Major." + reference = "BSP" + item = /obj/item/clothing/head/bearpelt/bearserk + cost = 65 + excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) + /datum/uplink_item/stealthy_tools/traitor_belt name = "Traitor's Toolbelt" desc = "A robust seven-slot belt made for carrying a broad variety of weapons, ammunition and explosives. It's modelled after the standard NT toolbelt so as to avoid suspicion while wearing it." diff --git a/code/modules/martial_arts/bearserk.dm b/code/modules/martial_arts/bearserk.dm new file mode 100644 index 00000000000..2614e4ef352 --- /dev/null +++ b/code/modules/martial_arts/bearserk.dm @@ -0,0 +1,73 @@ +/datum/martial_art/bearserk + weight = 9 // Higher weight than Krav-Maga, brute force overrules + name = "Rage of the Space Bear" + has_explaination_verb = TRUE + combos = list(/datum/martial_combo/bearserk/bear_jaws, /datum/martial_combo/bearserk/paw_slam, /datum/martial_combo/bearserk/smokey) + +/datum/martial_art/bearserk/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + MARTIAL_ARTS_ACT_CHECK + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + var/atk_verb = pick("punches", "claws", "hits", "mauls") + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + D.visible_message("[A] [atk_verb] [D]!", "[A] [atk_verb] you!") + D.apply_damage(10, BRUTE, A.zone_selected) + if(isliving(D) && D.stat != DEAD) + A.adjustStaminaLoss(-10) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Punched", ATKLOG_ALL) + return TRUE + +/datum/martial_art/bearserk/explaination_header(user) + to_chat(usr, "Quelling the ursine rage for a moment, you ponder on how a Space Bear fights...") + +/datum/martial_art/bearserk/explaination_footer(user) + to_chat(user, "All combos recover stamina and grant a stamina resistance buff, so get aggressive!.") + +/datum/martial_art/bearserk/teach(mob/living/carbon/human/H, make_temporary=0) + ..() + if(HAS_TRAIT(H, TRAIT_PACIFISM)) + to_chat(H, "You feel otherworldly rage flicker briefly in your mind, before you reject such violent thoughts and calm down. \ + At the very least, the weighty pelt still protects your body.") + return + to_chat(H, "Like a berserker of old, you harness the Rage of the Space Bear!") + to_chat(H, "The occultic, ursine might and anger of Foh'Sie and Smoh'Kie flows through your body, making you far more dangerous in unarmed combat. \ + You can learn more about this newfound strength in the Recall Teachings verb in the martial arts tab.") + +/datum/martial_art/bearserk/remove(mob/living/carbon/human/H) + ..() + to_chat(H, "The ancient fury of bears leaves your mind...") + +// The Pelt + +/obj/item/clothing/head/bearpelt/bearserk + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, RAD = 0, FIRE = 10, ACID = 10) + body_parts_covered = UPPER_TORSO|HEAD|ARMS + var/datum/martial_art/bearserk/style + +/obj/item/clothing/head/bearpelt/bearserk/Initialize() + . = ..() + style = new() + +/obj/item/clothing/head/bearpelt/bearserk/equipped(mob/user, slot) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(slot == SLOT_HUD_HEAD) + style.teach(H, TRUE) + H.faction |= "russian" // Russian Hardbass Begins + H.physiology.stun_mod *= 0.80 + +/obj/item/clothing/head/bearpelt/bearserk/dropped(mob/user, datum/reagent/R) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_HUD_HEAD) == src) + H.faction -= "russian" // Hardbass stops + H.physiology.stun_mod /= 0.80 + +/obj/item/clothing/head/bearpelt/bearserk/examine(mob/user) + . = ..() + if(isAntag(user)) + . += "Wearing this armored pelt grants you the strength of the space bear. \ + It also makes wild bears and Russians neutral towards you." diff --git a/code/modules/martial_arts/combos/bearserk/bear_jaws.dm b/code/modules/martial_arts/combos/bearserk/bear_jaws.dm new file mode 100644 index 00000000000..44963659157 --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/bear_jaws.dm @@ -0,0 +1,26 @@ +/datum/martial_combo/bearserk/bear_jaws + name = "Bear Jaws" + steps = list(MARTIAL_COMBO_STEP_HARM, MARTIAL_COMBO_STEP_GRAB) + explaination_text = "Bite your opponent like a true lunatic, with even more savagery against knocked down targets." + +/datum/martial_combo/bearserk/bear_jaws/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + user.do_attack_animation(target, ATTACK_EFFECT_BITE) + playsound(get_turf(target), 'sound/weapons/bite.ogg', 25, vary = TRUE, extrarange = -1) + if(IS_HORIZONTAL(target)) + target.visible_message("[user] leaps onto [target] and bites them!", + "[user] leaps onto you and bites you like a real savage!") + target.apply_damage(20, BRUTE, user.zone_selected, sharp = TRUE) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-30) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [MA] : Bear Jaws", ATKLOG_ALL) + return MARTIAL_COMBO_DONE + var/atk_verb = pick("bites", "gnaws", "tears at") + target.visible_message("[user] [atk_verb] [target]!", + "[user] [atk_verb] you!") + target.apply_damage(10, BRUTE, user.zone_selected, sharp = TRUE) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-15) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [MA] : Bear Jaws", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/bearserk/paw_slam.dm b/code/modules/martial_arts/combos/bearserk/paw_slam.dm new file mode 100644 index 00000000000..0853cb1c5a9 --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/paw_slam.dm @@ -0,0 +1,30 @@ +/datum/martial_combo/bearserk/paw_slam + name = "Paw Slam" + steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_HARM) + explaination_text = "Slap an opponent with a mighty paw, knocking them down. Beats down harder on already knocked down opponents." + +/datum/martial_combo/bearserk/paw_slam/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + if(IS_HORIZONTAL(target)) + user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) + target.visible_message("[user] pounds down on [target] with both fists!", \ + "[user] pounds down on you with both fists!") + playsound(get_turf(target), 'sound/weapons/punch1.ogg', 25, vary = TRUE, extrarange = -1) + target.apply_damage(20, BRUTE, user.zone_selected) + target.Slowed(2 SECONDS) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-15) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Paw Slam", ATKLOG_ALL) + return MARTIAL_COMBO_DONE + user.do_attack_animation(target, ATTACK_EFFECT_DISARM) + target.visible_message("[user] strikes [target] to the ground with a mighty slap!", \ + "[user] slaps you so hard, you fall over!") + playsound(get_turf(user), 'sound/weapons/slap.ogg', 25, vary = TRUE, extrarange = -1) + target.apply_damage(10, BRUTE, user.zone_selected) + target.KnockDown(4 SECONDS) + target.Slowed(6 SECONDS) + if(isliving(target) && target.stat != DEAD) + user.adjustStaminaLoss(-15) + user.apply_status_effect(STATUS_EFFECT_BEARSERKER_RAGE) + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Paw Slam", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/code/modules/martial_arts/combos/bearserk/smokey.dm b/code/modules/martial_arts/combos/bearserk/smokey.dm new file mode 100644 index 00000000000..27737d6cf53 --- /dev/null +++ b/code/modules/martial_arts/combos/bearserk/smokey.dm @@ -0,0 +1,17 @@ +/datum/martial_combo/bearserk/smokey + name = "Smokey" + steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_DISARM) + explaination_text = "Mentally channel the occultic fury of Smoh'Kie to set your opponent aflame!" + +/datum/martial_combo/bearserk/smokey/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA) + if(!isliving(target)) + return + user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) + target.visible_message("[user] sets [target] on fire with otherwordly powers!", \ + "As [user] punches you with a searing fist, these words echo in your mind; \"remember... only YOU can prevent forest fires!\"") + target.apply_damage(10, BURN, user.zone_selected) + playsound(get_turf(user), 'sound/weapons/punch1.ogg', 25, vary = TRUE, extrarange = -1) + target.adjust_fire_stacks(1.5) + target.IgniteMob() + add_attack_logs(user, target, "Melee attacked with martial-art [src] : Smokey", ATKLOG_ALL) + return MARTIAL_COMBO_DONE diff --git a/paradise.dme b/paradise.dme index 6e58f585c00..c3b2f0552d2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1908,6 +1908,7 @@ #include "code\modules\mapping\windoor_access_helpers.dm" #include "code\modules\maptext_alerts\text_blurbs.dm" #include "code\modules\martial_arts\adminfu.dm" +#include "code\modules\martial_arts\bearserk.dm" #include "code\modules\martial_arts\brawling.dm" #include "code\modules\martial_arts\cqc.dm" #include "code\modules\martial_arts\grav_stomp.dm" @@ -1921,6 +1922,9 @@ #include "code\modules\martial_arts\wrestling.dm" #include "code\modules\martial_arts\combos\martial_combo.dm" #include "code\modules\martial_arts\combos\adminfu\healing_palm.dm" +#include "code\modules\martial_arts\combos\bearserk\bear_jaws.dm" +#include "code\modules\martial_arts\combos\bearserk\paw_slam.dm" +#include "code\modules\martial_arts\combos\bearserk\smokey.dm" #include "code\modules\martial_arts\combos\cqc\consecutive.dm" #include "code\modules\martial_arts\combos\cqc\kick.dm" #include "code\modules\martial_arts\combos\cqc\pressure.dm"