diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 2330ed3d88..4e45bf4ac2 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -60,13 +60,27 @@ throwforce = 8 attack_verb = list("drilled", "screwed", "jabbed") toolspeed = 0.25 + var/obj/item/weapon/screwdriver/power/counterpart = null + +/obj/item/weapon/wrench/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/wrench/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + qdel_null(counterpart) + return ..() /obj/item/weapon/wrench/power/attack_self(mob/user) playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) - var/obj/item/weapon/screwdriver/power/s_drill = new /obj/item/weapon/screwdriver/power + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) to_chat(user, "You attach the screw driver bit to [src].") - qdel(src) - user.put_in_active_hand(s_drill) /* * Screwdriver @@ -168,13 +182,27 @@ usesound = 'sound/items/drill_use.ogg' toolspeed = 0.25 random_color = FALSE + var/obj/item/weapon/wrench/power/counterpart = null + +/obj/item/weapon/screwdriver/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/screwdriver/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + qdel_null(counterpart) + return ..() /obj/item/weapon/screwdriver/power/attack_self(mob/user) playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) - var/obj/item/weapon/wrench/power/w_drill = new /obj/item/weapon/wrench/power + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) to_chat(user, "You attach the bolt driver bit to [src].") - qdel(src) - user.put_in_active_hand(w_drill) /* * Wirecutters @@ -245,13 +273,27 @@ force = 15 toolspeed = 0.25 random_color = FALSE + var/obj/item/weapon/crowbar/power/counterpart = null + +/obj/item/weapon/wirecutters/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/wirecutters/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + qdel_null(counterpart) + return ..() /obj/item/weapon/wirecutters/power/attack_self(mob/user) playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) - var/obj/item/weapon/crowbar/power/pryjaws = new /obj/item/weapon/crowbar/power + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) to_chat(user, "You attach the pry jaws to [src].") - qdel(src) - user.put_in_active_hand(pryjaws) /* * Welding Tool @@ -910,13 +952,28 @@ usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 + var/obj/item/weapon/wirecutters/power/counterpart = null + +/obj/item/weapon/crowbar/power/New(newloc, no_counterpart = TRUE) + ..(newloc) + if(!counterpart && no_counterpart) + counterpart = new(src, FALSE) + counterpart.counterpart = src + +/obj/item/weapon/crowbar/power/Destroy() + if(counterpart) + counterpart.counterpart = null // So it can qdel cleanly. + qdel_null(counterpart) + return ..() /obj/item/weapon/crowbar/power/attack_self(mob/user) playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) - var/obj/item/weapon/wirecutters/power/cutjaws = new /obj/item/weapon/wirecutters/power + user.drop_item(src) + counterpart.forceMove(get_turf(src)) + src.forceMove(counterpart) + user.put_in_active_hand(counterpart) to_chat(user, "You attach the cutting jaws to [src].") - qdel(src) - user.put_in_active_hand(cutjaws) + /*/obj/item/weapon/combitool name = "combi-tool" diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index c1aa244d55..60be7fb8b5 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -149,6 +149,11 @@ set category = "Object" set src = usr + if(world.time <= next_click) // This isn't really a 'click' but it'll work for our purposes. + return + + next_click = world.time + 1 + if(istype(loc,/obj/mecha)) return if(hand) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 837f94b5f3..c12975eb3d 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -936,6 +936,11 @@ set category = "IC" set src = usr + if(world.time <= next_click) // Hard check, before anything else, to avoid crashing + return + + next_click = world.time + 1 + var/obj/item/W = get_active_hand() if (W) W.attack_self(src)