diff --git a/code/datums/action.dm b/code/datums/action.dm index 27c38793562..f3f1f9bd731 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -441,6 +441,8 @@ /datum/action/item_action/remove_badge name = "Remove Holobadge" +/datum/action/item_action/drop_gripped_item + name = "Drop gripped item" // Clown Acrobat Shoes /datum/action/item_action/slipping diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 9a110d499ad..8cdf0ede4c6 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -343,7 +343,7 @@ if(try_wallmount(I, user, params)) return // The magnetic gripper does a separate attackby, so bail from this one - if(istype(I, /obj/item/gripper)) + if(istype(I, /obj/item/gripper_engineering)) return return ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index e27f2b1cb54..483f185d0e4 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -1,10 +1,11 @@ //Simple borg hand. //Limited use. -/obj/item/gripper +/obj/item/gripper_engineering // This isn't a drone item, also in engineering cyborg kits name = "magnetic gripper" desc = "A simple grasping tool for synthetic assets." icon = 'icons/obj/device.dmi' icon_state = "gripper" + actions_types = list(/datum/action/item_action/drop_gripped_item) //Has a list of items that it can hold. var/list/can_hold = list( @@ -36,64 +37,60 @@ //Item currently being held. var/obj/item/gripped_item = null -/obj/item/gripper/medical +/obj/item/gripper_medical name = "medical gripper" desc = "A grasping tool used to help patients up once surgery is complete, or to substitute for hands in surgical operations." - can_hold = list() + icon = 'icons/obj/device.dmi' + icon_state = "gripper" -/obj/item/gripper/medical/attack_self(mob/user) - return -/obj/item/gripper/medical/afterattack(atom/target, mob/living/user, proximity, params) - var/mob/living/carbon/human/H - if(!gripped_item && proximity && target && ishuman(target)) - H = target - if(IS_HORIZONTAL(H)) - H.AdjustSleeping(-10 SECONDS) - H.AdjustParalysis(-6 SECONDS) - H.AdjustStunned(-6 SECONDS) - H.AdjustWeakened(-6 SECONDS) - H.AdjustKnockDown(-6 SECONDS) - H.stand_up() - playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - user.visible_message( \ - "[user] shakes [H] trying to wake [H.p_them()] up!",\ - "You shake [H] trying to wake [H.p_them()] up!",\ - ) +/obj/item/gripper_medical/afterattack(atom/target, mob/living/user, proximity, params) + if(!proximity || !target || !ishuman(target)) + return + var/mob/living/carbon/human/pickup_target = target + if(!IS_HORIZONTAL(pickup_target)) + return + pickup_target.AdjustSleeping(-10 SECONDS) + pickup_target.AdjustParalysis(-6 SECONDS) + pickup_target.AdjustStunned(-6 SECONDS) + pickup_target.AdjustWeakened(-6 SECONDS) + pickup_target.AdjustKnockDown(-6 SECONDS) + pickup_target.stand_up() + playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + user.visible_message( \ + "[user] shakes [pickup_target] trying to wake [pickup_target.p_them()] up!",\ + "You shake [pickup_target] trying to wake [pickup_target.p_them()] up!",\ + ) -/obj/item/gripper/New() - ..() +/obj/item/gripper_engineering/Initialize(mapload) + . = ..() can_hold = typecacheof(can_hold) -/obj/item/gripper/verb/drop_item_gripped() - set name = "Drop Gripped Item" - set desc = "Release an item from your magnetic gripper." - set category = "Drone" - +/obj/item/gripper_engineering/ui_action_click(mob/user) drop_gripped_item() -/obj/item/gripper/attack_self(mob/user) - if(gripped_item) - gripped_item.attack_self(user) - else +/obj/item/gripper_engineering/attack_self(mob/user) + if(!gripped_item) to_chat(user, "[src] is empty.") + return + gripped_item.attack_self(user) -/obj/item/gripper/proc/drop_gripped_item(silent = FALSE) - if(gripped_item) - if(!silent) - to_chat(loc, "You drop [gripped_item].") - gripped_item.forceMove(get_turf(src)) - gripped_item = null +/obj/item/gripper_engineering/proc/drop_gripped_item(silent = FALSE) + if(!gripped_item) + return + if(!silent) + to_chat(loc, "You drop [gripped_item].") + gripped_item.forceMove(get_turf(src)) + gripped_item = null -/obj/item/gripper/attack(mob/living/carbon/M, mob/living/carbon/user) +/obj/item/gripper_engineering/attack(mob/living/carbon/M, mob/living/carbon/user) return -/// Grippers are snowflakey so this is needed to to prevent forceMoving grippers after `if(!user.drop_item())` checks done in certain attackby's. -/obj/item/gripper/forceMove(atom/destination) +/// Grippers are snowflakey so this is needed to to prevent forceMoving grippers after `if(!user.drop_item())` checks done in certain attackby's. // What does this even MEAN - GDN +/obj/item/gripper_engineering/forceMove(atom/destination) return -/obj/item/gripper/afterattack(atom/target, mob/living/user, proximity, params) - +/obj/item/gripper_engineering/afterattack(atom/target, mob/living/user, proximity, params) if(!target || !proximity) //Target is invalid or we are not adjacent. return FALSE diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 3357bddc925..2fa67b06613 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -116,7 +116,7 @@ return 0 /mob/living/silicon/robot/drop_item() - var/obj/item/gripper/G = get_active_hand() + var/obj/item/gripper_engineering/G = get_active_hand() if(istype(G)) G.drop_gripped_item(silent = TRUE) return TRUE // The gripper is special because it has a normal item inside that we can drop. diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3ece9058b97..97e03355bfc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1536,7 +1536,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /// Used in `robot.dm` when the user presses "Q" by default. /mob/living/silicon/robot/proc/on_drop_hotkey_press() - var/obj/item/gripper/G = get_active_hand() + var/obj/item/gripper_engineering/G = get_active_hand() if(istype(G) && G.gripped_item) G.drop_gripped_item() // if the active module is a gripper, try to drop its held item. else diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index a9c8e6efd63..408c1013f5a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -317,7 +317,7 @@ /obj/item/stack/medical/ointment/advanced/cyborg, /obj/item/stack/medical/splint/cyborg, /obj/item/stack/nanopaste/cyborg, - /obj/item/gripper/medical + /obj/item/gripper_medical ) emag_modules = list(/obj/item/reagent_containers/spray/cyborg_facid) special_rechargables = list(/obj/item/reagent_containers/spray/cyborg_facid, /obj/item/extinguisher/mini) @@ -364,7 +364,7 @@ /obj/item/analyzer, /obj/item/geiger_counter/cyborg, /obj/item/holosign_creator/engineering, - /obj/item/gripper, + /obj/item/gripper_engineering, /obj/item/matter_decompiler, /obj/item/painter, /obj/item/areaeditor/blueprints/cyborg, @@ -380,7 +380,7 @@ special_rechargables = list(/obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, /obj/item/gun/energy/emitter/cyborg) /obj/item/robot_module/engineering/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/G = locate(/obj/item/gripper) in modules + var/obj/item/gripper_engineering/G = locate(/obj/item/gripper_engineering) in modules if(G) G.drop_gripped_item(silent = TRUE) @@ -636,7 +636,7 @@ /obj/item/stack/nanopaste/cyborg/syndicate, /obj/item/gun/medbeam, /obj/item/extinguisher/mini, - /obj/item/gripper/medical + /obj/item/gripper_medical ) special_rechargables = list(/obj/item/extinguisher/mini) @@ -657,7 +657,7 @@ /obj/item/multitool/cyborg, /obj/item/t_scanner, /obj/item/analyzer, - /obj/item/gripper, + /obj/item/gripper_engineering, /obj/item/melee/energy/sword/cyborg, /obj/item/card/emag, /obj/item/borg_chameleon, @@ -741,7 +741,7 @@ /obj/item/wirecutters/cyborg/drone, /obj/item/multitool/cyborg/drone, /obj/item/lightreplacer/cyborg, - /obj/item/gripper, + /obj/item/gripper_engineering, /obj/item/matter_decompiler, /obj/item/reagent_containers/spray/cleaner/drone, /obj/item/soap, @@ -764,7 +764,7 @@ ) /obj/item/robot_module/drone/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/G = locate(/obj/item/gripper) in modules + var/obj/item/gripper_engineering/G = locate(/obj/item/gripper_engineering) in modules if(G) G.drop_gripped_item(silent = TRUE) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index bdb0b2ff46e..eb3f2efa3a0 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -184,7 +184,7 @@ if(accept_hand) if(!tool) success = TRUE - if(isrobot(user) && istype(tool, /obj/item/gripper/medical)) + if(isrobot(user) && istype(tool, /obj/item/gripper_medical)) success = TRUE if(accept_any_item)