diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 153d56be43..62fef2744d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -472,7 +472,7 @@ emp_act mass = I.w_class/THROWNOBJ_KNOCKBACK_DIVISOR var/momentum = speed*mass - if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED) + if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED && !buckled) var/dir = get_dir(O.throw_source, src) visible_message("[src] staggers under the impact!","You stagger under the impact!") diff --git a/code/modules/projectiles/guns/launcher/bows.dm b/code/modules/projectiles/guns/launcher/bows.dm index 7787ea027e..a56e390c87 100644 --- a/code/modules/projectiles/guns/launcher/bows.dm +++ b/code/modules/projectiles/guns/launcher/bows.dm @@ -17,13 +17,21 @@ item_state = "bolt" throwforce = 10 w_class = ITEMSIZE_NORMAL - sharp = FALSE + sharp = TRUE edge = TRUE + embed_chance = 0 // it fizzles! + catchable = FALSE // oh god /obj/item/weapon/arrow/energy/throw_impact(atom/hit_atom) . = ..() qdel(src) +/obj/item/weapon/arrow/energy/equipped() + if(isliving(loc)) + var/mob/living/L = loc + L.drop_from_inventory(src) + qdel(src) // noh + /obj/item/weapon/gun/launcher/crossbow/bow name = "shortbow" desc = "A common shortbow, capable of firing arrows at high speed towards a target. Useful for hunting while keeping quiet." @@ -35,15 +43,20 @@ fire_sound_text = "a solid thunk" fire_delay = 25 slot_flags = SLOT_BACK - tension = 3 + release_force = 20 + release_speed = 15 var/drawn = FALSE +/obj/item/weapon/gun/launcher/crossbow/bow/update_release_force(obj/item/projectile) + return 0 + /obj/item/weapon/gun/launcher/crossbow/bow/proc/unload(mob/user) var/obj/item/weapon/arrow/A = bolt bolt = null drawn = FALSE A.forceMove(get_turf(user)) user.put_in_hands(A) + update_icon() /obj/item/weapon/gun/launcher/crossbow/bow/consume_next_projectile(mob/user) if(!drawn) @@ -57,10 +70,17 @@ update_icon() ..() -/obj/item/weapon/gun/launcher/crossbow/bow/attack_self(mob/living/user) - if(bolt) - user.visible_message("[user] relaxes the tension on [src]'s string and removes [bolt].","You relax the tension on [src]'s string and remove [bolt].") +/obj/item/weapon/gun/launcher/crossbow/bow/attack_hand(mob/living/user) + if(loc == user && bolt && !drawn) + user.visible_message("[user] removes [bolt] from [src].","You remove [bolt] from [src].") unload(user) + else + return ..() + +/obj/item/weapon/gun/launcher/crossbow/bow/attack_self(mob/living/user) + if(drawn) + user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.") + drawn = FALSE update_icon() else draw(user) @@ -75,13 +95,9 @@ current_user = user user.visible_message("[user] begins to draw back the string of [src].","You begin to draw back the string of [src].") - if(do_after(user, 25, src, exclusive = TASK_ALL_EXCLUSIVE)) drawn = TRUE user.visible_message("[user] draws the string on [src] back fully!", "You draw the string on [src] back fully!") - else - user.visible_message("[user] stops drawing and relaxes the string of [src].","You stop drawing back and relax the string of [src].") - drawn = FALSE update_icon() /obj/item/weapon/gun/launcher/crossbow/bow/attackby(obj/item/W as obj, mob/user) @@ -109,6 +125,7 @@ /obj/item/weapon/gun/launcher/crossbow/bow/hardlight/unload(mob/user) qdel_null(bolt) + update_icon() /obj/item/weapon/gun/launcher/crossbow/bow/hardlight/attack_self(mob/living/user) if(drawn)