diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 0ac014a7c9c..543b23cb503 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -58,6 +58,8 @@ #define STATUS_EFFECT_CHAINSAW_SLAYING /datum/status_effect/chainsaw_slaying // Stun immunity, very slight damage resistance +#define STATUS_EFFECT_BREACH_AND_CLEAVE /datum/status_effect/breaching_and_cleaving // Stamina damage resist, Additional ranged armor + #define STATUS_EFFECT_HOPE /datum/status_effect/hope // Healing that scales when injured (but not in deep crit), and nice messages to keep the hope #define STATUS_EFFECT_DRILL_PAYBACK /datum/status_effect/drill_payback // Slight antistun and healing, along with visual effect. Works only in range of the vault, and for 30 seconds after it ends. diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index e8395f26fb9..1d0e1d9d258 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -627,6 +627,33 @@ H.physiology.burn_mod /=0.8 H.physiology.stamina_mod /= 0.8 +/datum/status_effect/breaching_and_cleaving + id = "breaching_and_cleaving" + duration = -1 + status_type = STATUS_EFFECT_UNIQUE + alert_type = /atom/movable/screen/alert/status_effect/breaching_and_cleaving + var/datum/armor/cleaving_armor_boost = new /datum/armor(0, 30, 30, 30, 0, 0, 50, 0, 0) + +/atom/movable/screen/alert/status_effect/breaching_and_cleaving + name = "Breaching and Cleaving!" + desc = "Doors, people, machines... nothing will stand before your martial prowess!" + icon_state = "breachcleaver" + +/datum/status_effect/breaching_and_cleaving/on_apply() + . = ..() + if(!. || !ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + H.physiology.armor = H.physiology.armor.attachArmor(cleaving_armor_boost) + H.physiology.stamina_mod *= 0.8 + +/datum/status_effect/breaching_and_cleaving/on_remove() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.physiology.armor = H.physiology.armor.detachArmor(cleaving_armor_boost) + H.physiology.stamina_mod /= 0.8 + QDEL_NULL(cleaving_armor_boost) + /datum/status_effect/hope id = "hope" duration = -1 diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index 561c68b15e7..006039d2b94 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -404,6 +404,16 @@ species = list("Drask") surplus = 0 +// Unathi +/datum/uplink_item/species_restricted/breach_cleaver + name = "Breach Cleaver" + desc = "This massive blade harkens back to the wars on Moghes. Wielding it imbues you with the unquenchable desire for martial prowess. \ + Requires two hands to be wielded. Comes in a scabbard. Has different effects based on intent." + reference = "CLV" + item = /obj/item/storage/belt/sheath/breach_cleaver + cost = 65 // Incredibly strong melee weapon on par with a chainsaw. + species = list("Unathi") + // ------------------------------------- // ITEMS BLACKLISTED FROM NUCLEAR AGENTS // ------------------------------------- diff --git a/code/game/objects/items/weapons/melee/melee_misc.dm b/code/game/objects/items/weapons/melee/melee_misc.dm index 750f48bc798..d29fc07c46e 100644 --- a/code/game/objects/items/weapons/melee/melee_misc.dm +++ b/code/game/objects/items/weapons/melee/melee_misc.dm @@ -92,6 +92,127 @@ plastitanium edge that can cause untold harm to a soft target. In the right hands, it can be a terrifying weapon to behold, \ and it’s said that blood runs down the blade in just the right way, to drip artfully from the twin ‘fangs’ at its apex." +// Unathi Sword +/obj/item/melee/breach_cleaver + name = "breach cleaver" + desc = "Massive, heavy, and utterly impractical. This sharpened chunk of steel is too big and too heavy to be called a sword." + lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons_righthand.dmi' + base_icon_state = "breach_cleaver" + icon_state = "breach_cleaver0" + flags = CONDUCT + force = 5 + throwforce = 5 + armour_penetration_flat = 30 + w_class = WEIGHT_CLASS_BULKY + sharp = TRUE + origin_tech = "combat=6;syndicate=5" + attack_verb = list("slashed", "cleaved", "chopped") + hitsound = 'sound/weapons/swordhitheavy.ogg' + materials = list(MAT_METAL = 2000) + /// How much damage the sword does when wielded + var/force_wield = 40 + +/obj/item/melee/breach_cleaver/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, force_wielded = force_wield, force_unwielded = force, icon_wielded = "[base_icon_state]1", wield_callback = CALLBACK(src, PROC_REF(wield)), unwield_callback = CALLBACK(src, PROC_REF(unwield))) + AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS) + +/obj/item/melee/breach_cleaver/examine(mob/user) + . = ..() + if(isAntag(user)) + . += "When wielded, this blade has different effects depending on your intent, similar to a martial art. \ + Help intent will strike with the flat, dealing stamina, disarm intent forces them away, grab intent knocks down the target, \ + and harm intent deals heavy damage." + +/obj/item/melee/breach_cleaver/examine_more(mob/user) + . = ..() + . += "Massive, heavy, and utterly impractical. This sharpened chunk of steel is too big and too heavy to be called a sword." + . += "" + . += "The Unathi Breach Cleaver is a weapon the scaled, warlike race favours for its impressive weight and myriad combat applications. \ + The pinnacle of Moghes' combat technology, it combines all of this knowledge into a massive, heavy slab of alloyed metal that most \ + species find difficult to lift, let alone use in any sort of fight." + . += "" + . += "Actually a little lightweight for its size, a Breach Cleaver is unmatched in combat utility as a weapon, a tool for getting into\ + places and as a slab of armour for the wielder. The leather of the Kar'oche beast, a predator native to Moghes, binds the hilt, \ + allowing it to be gripped securely by its warrior. The wide blade is often etched with scenes depicting military victories or great hunts." + +/obj/item/melee/breach_cleaver/update_icon_state() + icon_state = "[base_icon_state]0" + +/obj/item/melee/breach_cleaver/proc/wield(obj/item/source, mob/living/carbon/human/user) + to_chat(user, "You heave [src] up in both hands.") + user.apply_status_effect(STATUS_EFFECT_BREACH_AND_CLEAVE) + update_icon_state() + +/obj/item/melee/breach_cleaver/proc/unwield(obj/item/source, mob/living/carbon/human/user) + user.remove_status_effect(STATUS_EFFECT_BREACH_AND_CLEAVE) + update_icon_state() + +/obj/item/melee/breach_cleaver/attack_obj(obj/O, mob/living/user, params) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) // Only works good when wielded + return ..() + if(!ismachinery(O) && !isstructure(O)) // This sword hates doors + return ..() + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) + return + if(flags & (NOBLUDGEON)) + return + var/mob/living/carbon/human/H = user + H.changeNext_move(CLICK_CD_MELEE) + H.do_attack_animation(O) + H.visible_message("[H] has hit [O] with [src]!", "You hit [O] with [src]!") + var/damage = force_wield + damage += H.physiology.melee_bonus + O.take_damage(damage * 3, BRUTE, MELEE, TRUE, get_dir(src, H), 30) // Multiplied to do big damage to doors, closets, windows, and machines, but normal damage to mobs. + +/obj/item/melee/breach_cleaver/attack(mob/target, mob/living/user) + if(!HAS_TRAIT(src, TRAIT_WIELDED) || !ishuman(target)) + return ..() + + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/targetlimb = H.get_organ(ran_zone(user.zone_selected)) + + switch(user.a_intent) + if(INTENT_HELP) // Stamina damage + H.visible_message("[user] slams [H] with the flat of the blade!", \ + "[user] slams you with the flat of the blade!", \ + "You hear a thud.") + user.do_attack_animation(H, ATTACK_EFFECT_DISARM) + playsound(loc, 'sound/weapons/swordhit.ogg', 50, TRUE, -1) + H.AdjustConfused(4 SECONDS, 0, 4 SECONDS) + H.apply_damage(40, STAMINA, targetlimb, H.run_armor_check(targetlimb, MELEE)) + add_attack_logs(user, H, "Slammed by a breach cleaver. (Help intent, Stamina)", ATKLOG_ALL) + + if(INTENT_DISARM) // Slams away + if(H.stat != CONSCIOUS || IS_HORIZONTAL(H)) + return ..() + + H.visible_message("[user] smashes [H] with the blade's tip!", \ + "[user] smashes you with the blade's tip!", \ + "You hear crushing.") + + user.do_attack_animation(H, ATTACK_EFFECT_KICK) + playsound(get_turf(user), 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE, -1) + H.apply_damage(25, BRUTE, targetlimb, H.run_armor_check(targetlimb, MELEE)) + var/atom/throw_target = get_edge_target_turf(H, user.dir, TRUE) + H.throw_at(throw_target, 4, 1) + add_attack_logs(user, H, "Smashed away by a breach cleaver. (Disarm intent, Knockback)", ATKLOG_ALL) + + if(INTENT_GRAB) // Knocks down + H.visible_message("[user] cleaves [H] with an overhead strike!", \ + "[user] cleaves you with an overhead strike!", \ + "You hear a chopping noise.") + + user.do_attack_animation(H, ATTACK_EFFECT_DISARM) + playsound(get_turf(user), 'sound/weapons/armblade.ogg', 50, TRUE, -1) + H.apply_damage(30, BRUTE, targetlimb, H.run_armor_check(targetlimb, MELEE), TRUE) + H.KnockDown(4 SECONDS) + add_attack_logs(user, H, "Cleaved overhead with a breach cleaver. (Grab intent, Knockdown)", ATKLOG_ALL) + + if(INTENT_HARM) + return ..() + /obj/item/melee/icepick name = "ice pick" desc = "Used for chopping ice. Also excellent for mafia esque murders." diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 3f6f205721d..be79a9c285b 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -798,6 +798,17 @@ new /obj/item/melee/snakesfang(src) update_appearance(UPDATE_ICON_STATE) +/obj/item/storage/belt/sheath/breach_cleaver + name = "breach cleaver scabbard" + desc = "Can hold massive cleavers." + icon_state = "breachcleaversheath" + item_state = "breachcleaversheath" + can_hold = list(/obj/item/melee/breach_cleaver) + +/obj/item/storage/belt/sheath/breach_cleaver/populate_contents() + new /obj/item/melee/breach_cleaver(src) + update_icon() + // ------------------------------------- // Bluespace Belt // ------------------------------------- diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index 9272241406f..19711d1d457 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/inhands/weapons_lefthand.dmi b/icons/mob/inhands/weapons_lefthand.dmi index 64a2bd06532..2c659e73f85 100644 Binary files a/icons/mob/inhands/weapons_lefthand.dmi and b/icons/mob/inhands/weapons_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons_righthand.dmi b/icons/mob/inhands/weapons_righthand.dmi index 0f1bce7849c..9aee9d8e068 100644 Binary files a/icons/mob/inhands/weapons_righthand.dmi and b/icons/mob/inhands/weapons_righthand.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 82504547e83..b2505aca859 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index b1441ffca92..de7901fa042 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/weapons/melee.dmi b/icons/obj/weapons/melee.dmi index 1c7db290f2c..bcb0fe9d88b 100644 Binary files a/icons/obj/weapons/melee.dmi and b/icons/obj/weapons/melee.dmi differ diff --git a/sound/weapons/swordhit.ogg b/sound/weapons/swordhit.ogg new file mode 100644 index 00000000000..4eb10e0dbd9 Binary files /dev/null and b/sound/weapons/swordhit.ogg differ diff --git a/sound/weapons/swordhitheavy.ogg b/sound/weapons/swordhitheavy.ogg new file mode 100644 index 00000000000..097d31e2cb1 Binary files /dev/null and b/sound/weapons/swordhitheavy.ogg differ