/* Two-handed Weapons * Contains: * Twohanded * Fireaxe * Double-Bladed Energy Swords * Spears * CHAINSAWS * Bone Axe and Spear */ /*################################################################## ##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## ####################################################################*/ //Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn //This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. //It also tidies stuff up elsewhere. /* * Twohanded */ /obj/item/weapon/twohanded var/wielded = 0 var/force_unwielded = 0 var/force_wielded = 0 var/wieldsound = null var/unwieldsound = null /obj/item/weapon/twohanded/proc/unwield(mob/living/carbon/user) if(!wielded || !user) return wielded = 0 if(force_unwielded) force = force_unwielded var/sf = findtext(name," (Wielded)") if(sf) name = copytext(name,1,sf) else //something wrong name = "[initial(name)]" update_icon() if(isrobot(user)) user << "You free up your module." else if(istype(src, /obj/item/weapon/twohanded/required)) user << "You drop \the [name]." else user << "You are now carrying the [name] with one hand." if(unwieldsound) playsound(loc, unwieldsound, 50, 1) var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand() if(O && istype(O)) O.unwield() return /obj/item/weapon/twohanded/proc/wield(mob/living/carbon/user) if(wielded) return if(istype(user,/mob/living/carbon/monkey) ) user << "It's too heavy for you to wield fully." return if(user.get_inactive_hand()) user << "You need your other hand to be empty!" return if(user.get_num_arms() < 2) user << "You don't have enough hands." return wielded = 1 if(force_wielded) force = force_wielded name = "[name] (Wielded)" update_icon() if(isrobot(user)) user << "You dedicate your module to [name]." else user << "You grab the [name] with both hands." if (wieldsound) playsound(loc, wieldsound, 50, 1) var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ O.name = "[name] - offhand" O.desc = "Your second grip on the [name]" user.put_in_inactive_hand(O) return /obj/item/weapon/twohanded/mob_can_equip(mob/M, slot) //Cannot equip wielded items. if(wielded) M << "Unwield the [name] first!" return 0 return ..() /obj/item/weapon/twohanded/dropped(mob/user) ..() //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand if(user) var/obj/item/weapon/twohanded/O = user.get_inactive_hand() if(istype(O)) O.unwield(user) return unwield(user) /obj/item/weapon/twohanded/update_icon() return /obj/item/weapon/twohanded/attack_self(mob/user) ..() if(wielded) //Trying to unwield it unwield(user) else //Trying to wield it wield(user) ///////////OFFHAND/////////////// /obj/item/weapon/twohanded/offhand name = "offhand" icon_state = "offhand" w_class = 5 flags = ABSTRACT /obj/item/weapon/twohanded/offhand/unwield() qdel(src) /obj/item/weapon/twohanded/offhand/wield() qdel(src) ///////////Two hand required objects/////////////// //This is for objects that require two hands to even pick up /obj/item/weapon/twohanded/required/ w_class = 5 /obj/item/weapon/twohanded/required/attack_self() return /obj/item/weapon/twohanded/required/mob_can_equip(mob/M, slot) if(wielded) M << "\The [src] is too cumbersome to carry with anything but your hands!" return 0 return ..() /obj/item/weapon/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty var/obj/item/weapon/twohanded/required/H = user.get_inactive_hand() if(get_dist(src,user) > 1) return 0 if(H != null) user << "\The [src] is too cumbersome to carry in one hand!" return wield(user) ..() /obj/item/weapon/twohanded/ /* * Fireaxe */ /obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri icon_state = "fireaxe0" name = "fire axe" desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" force = 5 throwforce = 15 w_class = 4 slot_flags = SLOT_BACK force_unwielded = 5 force_wielded = 24 // Was 18, Buffed - RobRichards/RR attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP /obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" return /obj/item/weapon/twohanded/fireaxe/suicide_act(mob/user) user.visible_message("[user] axes \himself from head to toe! It looks like \he's trying to commit suicide..") return (BRUTELOSS) /obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) if(!proximity) return if(wielded) //destroys windows and grilles in one hit if(istype(A,/obj/structure/window)) var/obj/structure/window/W = A W.shatter() else if(istype(A,/obj/structure/grille)) var/obj/structure/grille/G = A G.take_damage(16) /* * Double-Bladed Energy Swords - Cheridan */ /obj/item/weapon/twohanded/dualsaber icon_state = "dualsaber0" name = "double-bladed energy sword" desc = "Handle with care." force = 3 throwforce = 5 throw_speed = 3 throw_range = 5 w_class = 2 var/w_class_on = 4 force_unwielded = 3 force_wielded = 34 wieldsound = 'sound/weapons/saberon.ogg' unwieldsound = 'sound/weapons/saberoff.ogg' hitsound = "swing_hit" armour_penetration = 35 origin_tech = "magnets=4;syndicate=5" item_color = "green" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 var/hacked = 0 /obj/item/weapon/twohanded/dualsaber/New() item_color = pick("red", "blue", "green", "purple") /obj/item/weapon/twohanded/dualsaber/update_icon() if(wielded) icon_state = "dualsaber[item_color][wielded]" else icon_state = "dualsaber0" clean_blood()//blood overlays get weird otherwise, because the sprite changes. return /obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) if(user.has_dna()) if(user.dna.check_mutation(HULK)) user << "You grip the blade too hard and accidentally close it!" unwield() return ..() if(user.disabilities & CLUMSY && (wielded) && prob(40)) impale(user) return if((wielded) && prob(50)) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2)) user.setDir(i) if(i == 8) user.emote("flip") sleep(1) /obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user) user << "You twirl around a bit before losing your balance and impaling yourself on \the [src]." if (force_wielded) user.take_organ_damage(20,25) else user.adjustStaminaLoss(25) /obj/item/weapon/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(wielded) return ..() return 0 /obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up if(wielded) user << "You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!" return 1 /obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds. if(M.has_dna()) if(M.dna.check_mutation(HULK)) M << "You lack the grace to wield this!" return sharpness = IS_SHARP w_class = w_class_on ..() hitsound = 'sound/weapons/blade1.ogg' /obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds. sharpness = initial(sharpness) w_class = initial(w_class) ..() hitsound = "swing_hit" /obj/item/weapon/twohanded/dualsaber/IsReflect() if(wielded) return 1 /obj/item/weapon/twohanded/dualsaber/green/New() item_color = "green" /obj/item/weapon/twohanded/dualsaber/red/New() item_color = "red" /obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/device/multitool)) if(hacked == 0) hacked = 1 user << "2XRNBW_ENGAGE" item_color = "rainbow" update_icon() else user << "It's starting to look like a triple rainbow - no, nevermind." else return ..() //spears /obj/item/weapon/twohanded/spear icon_state = "spearglass0" name = "spear" desc = "A haphazardly-constructed yet still deadly weapon of ancient design." force = 10 w_class = 4 slot_flags = SLOT_BACK force_unwielded = 10 force_wielded = 18 throwforce = 20 throw_speed = 4 embedded_impact_pain_multiplier = 3 armour_penetration = 10 materials = list(MAT_METAL=1150, MAT_GLASS=2075) hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP var/obj/item/weapon/grenade/explosive = null var/war_cry = "AAAAARGH!!!" /obj/item/weapon/twohanded/spear/update_icon() if(explosive) icon_state = "spearbomb[wielded]" else icon_state = "spearglass[wielded]" /obj/item/weapon/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity) if(!proximity) return if(istype(AM, /turf/open)) //So you can actually melee with it return if(explosive && wielded) user.say("[war_cry]") explosive.loc = AM explosive.prime() qdel(src) //THIS MIGHT BE UNBALANCED SO I DUNNO // it totally is. /obj/item/weapon/twohanded/spear/throw_impact(atom/target) . = ..() if(!.) //not caught if(explosive) explosive.prime() qdel(src) /obj/item/weapon/twohanded/spear/AltClick() ..() if(!explosive) return if(ismob(loc)) var/mob/M = loc var/input = stripped_input(M,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) if(input) src.war_cry = input /obj/item/weapon/twohanded/spear/CheckParts(list/parts_list) ..() if(explosive) explosive.loc = get_turf(src.loc) explosive = null var/obj/item/weapon/grenade/G = locate() in contents if(G) explosive = G name = "explosive lance" desc = "A makeshift spear with [G] attached to it. Alt+click on the spear to set your war cry!" return update_icon() // CHAINSAW /obj/item/weapon/twohanded/required/chainsaw name = "chainsaw" desc = "A versatile power tool. Useful for limbing trees and delimbing humans." icon_state = "chainsaw_off" flags = CONDUCT force = 13 w_class = 5 throwforce = 13 throw_speed = 2 throw_range = 4 materials = list(MAT_METAL=13000) origin_tech = "materials=3;engineering=4;combat=2" attack_verb = list("sawed", "torn", "cut", "chopped", "diced") hitsound = "swing_hit" sharpness = IS_SHARP actions_types = list(/datum/action/item_action/startchainsaw) var/on = 0 /obj/item/weapon/twohanded/required/chainsaw/attack_self(mob/user) on = !on user << "As you pull the starting cord dangling from \the [src], [on ? "it begins to whirr." : "the chain stops moving."]" force = on ? 21 : 13 throwforce = on ? 21 : 13 icon_state = "chainsaw_[on ? "on" : "off"]" if(hitsound == "swing_hit") hitsound = 'sound/weapons/chainsawhit.ogg' else hitsound = "swing_hit" if(src == user.get_active_hand()) //update inhands user.update_inv_l_hand() user.update_inv_r_hand() for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() /obj/item/weapon/twohanded/required/chainsaw/get_dismemberment_chance() if(wielded) . = ..() /obj/item/weapon/twohanded/required/chainsaw/doomslayer name = "OOOH BABY" desc = "VRRRRRRR!!!" armour_penetration = 100 //GREY TIDE /obj/item/weapon/twohanded/spear/grey_tide icon_state = "spearglass0" name = "\improper Grey Tide" desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." force_unwielded = 15 force_wielded = 25 throwforce = 20 throw_speed = 4 attack_verb = list("gored") /obj/item/weapon/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) ..() if(!proximity) return user.faction |= "greytide(\ref[user])" if(istype(AM, /mob/living)) var/mob/living/L = AM if(istype (L, /mob/living/simple_animal/hostile/illusion)) return if(!L.stat && prob(50)) var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) M.faction = user.faction.Copy() M.Copy_Parent(user, 100, user.health/2.5, 12, 30) M.GiveTarget(L) /obj/item/weapon/twohanded/pitchfork icon_state = "pitchfork0" name = "pitchfork" desc = "A simple tool used for moving hay." force = 7 throwforce = 15 w_class = 4 force_unwielded = 7 force_wielded = 15 attack_verb = list("attacked", "impaled", "pierced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP /obj/item/weapon/twohanded/pitchfork/demonic name = "demonic pitchfork" desc = "A red pitchfork, it looks like the work of the devil." force = 19 throwforce = 24 force_unwielded = 19 force_wielded = 25 /obj/item/weapon/twohanded/pitchfork/demonic/greater force = 24 throwforce = 50 force_unwielded = 24 force_wielded = 34 /obj/item/weapon/twohanded/pitchfork/demonic/ascended force = 100 throwforce = 100 force_unwielded = 100 force_wielded = 500000 // Kills you DEAD. /obj/item/weapon/twohanded/pitchfork/update_icon() icon_state = "pitchfork[wielded]" /obj/item/weapon/twohanded/pitchfork/suicide_act(mob/user) user.visible_message("[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide..") return (BRUTELOSS) /obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/user) if(istype(user, /mob/living)) var/mob/living/U = user if(U.mind && (!U.mind.devilinfo || (U.mind.soulOwner == U.mind))) //Burn hands unless they are a devil or have sold their soul U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ "\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"") if(ishuman(U)) var/mob/living/carbon/human/H = U H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) else U.adjustFireLoss(rand(force/2,force)) /obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) if(user.mind && (!user.mind.devilinfo || (user.mind.soulOwner == user.mind))) user << "The [src] burns in your hands." user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) ..() //HF blade /obj/item/weapon/twohanded/vibro_weapon icon_state = "hfrequency0" name = "vibro sword" desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." force_unwielded = 20 force_wielded = 40 armour_penetration = 100 block_chance = 40 throwforce = 20 throw_speed = 4 sharpness = IS_SHARP attack_verb = list("cut", "sliced", "diced") w_class = 4 slot_flags = SLOT_BACK hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/weapon/twohanded/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) if(wielded) final_block_chance *= 2 if(wielded || attack_type != PROJECTILE_ATTACK) if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message("[owner] deflects [attack_text] with [src]!") playsound(src, pick("sound/weapons/bulletflyby.ogg","sound/weapons/bulletflyby2.ogg","sound/weapons/bulletflyby3.ogg"), 75, 1) return 1 else owner.visible_message("[owner] parries [attack_text] with [src]!") return 1 return 0 /obj/item/weapon/twohanded/vibro_weapon/update_icon() icon_state = "hfrequency[wielded]" /* * Bone Axe */ /obj/item/weapon/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. icon_state = "bone_axe0" name = "bone axe" desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." force_wielded = 23 /obj/item/weapon/twohanded/fireaxe/boneaxe/update_icon() icon_state = "bone_axe[wielded]" /* * Bone Spear */ /obj/item/weapon/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. icon_state = "bone_spear0" name = "bone spear" desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." force = 11 w_class = 4 slot_flags = SLOT_BACK force_unwielded = 11 force_wielded = 20 //I have no idea how to balance throwforce = 22 throw_speed = 4 embedded_impact_pain_multiplier = 3 armour_penetration = 15 //Enhanced armor piercing hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP /obj/item/weapon/twohanded/bonespear/update_icon() icon_state = "bone_spear[wielded]"