diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 684e2d5675c..0e08ce802b9 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -322,6 +322,14 @@ Class Procs: /obj/machinery/attack_robot(mob/user) if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user)) return FALSE + if(Adjacent(user) && can_buckle && has_buckled_mobs()) //so that borgs (but not AIs, sadly (perhaps in a future PR?)) can unbuckle people from machines + if(buckled_mobs.len > 1) + var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in sortNames(buckled_mobs) + if(user_unbuckle_mob(unbuckled,user)) + return TRUE + else + if(user_unbuckle_mob(buckled_mobs[1],user)) + return TRUE return _try_interact(user) /obj/machinery/attack_ai(mob/user) diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index 8daab3a9e16..da8111f5714 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -161,9 +161,4 @@ /obj/machinery/stasis/nap_violation(mob/violator) unbuckle_mob(violator, TRUE) -/obj/machinery/stasis/attack_robot(mob/user) - if(Adjacent(user) && occupant) - unbuckle_mob(occupant) - else - ..() #undef STASIS_TOGGLE_COOLDOWN diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 7d6662a6876..4d483fa8de4 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -20,6 +20,20 @@ if(user_unbuckle_mob(buckled_mobs[1],user)) return 1 +//literally just the above extension of attack_hand(), but for silicons instead (with an adjacency check, since attack_robot() being called doesn't mean that you're adjacent to something) +/atom/movable/attack_robot(mob/living/user) + . = ..() + if(.) + return + if(Adjacent(user) && can_buckle && has_buckled_mobs()) + if(buckled_mobs.len > 1) + var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in sortNames(buckled_mobs) + if(user_unbuckle_mob(unbuckled,user)) + return TRUE + else + if(user_unbuckle_mob(buckled_mobs[1],user)) + return TRUE + /atom/movable/MouseDrop_T(mob/living/M, mob/living/user) . = ..() return mouse_buckle_handling(M, user) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index ba7263617c7..7124551f927 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -4,14 +4,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real /obj/item/clothing/head/chameleon/broken \ ))) -/mob/living/silicon/robot/attack_robot(mob/user) - . = ..() - if(user == src && has_buckled_mobs() && user.a_intent == INTENT_HELP) - for(var/i in buckled_mobs) - var/mob/buckmob = i - unbuckle_mob(buckmob) - - /mob/living/silicon/robot/attackby(obj/item/W, mob/user, params) if(W.tool_behaviour == TOOL_WELDER && (user.a_intent != INTENT_HARM || user == src)) user.changeNext_move(CLICK_CD_MELEE)