diff --git a/code/game/objects/items/robot/cyborg_gripper.dm b/code/game/objects/items/robot/cyborg_gripper.dm index ffde5ac0b28..dda6b0f8f56 100644 --- a/code/game/objects/items/robot/cyborg_gripper.dm +++ b/code/game/objects/items/robot/cyborg_gripper.dm @@ -340,7 +340,9 @@ desc = "A grasping tool for cyborgs. This one is covered with hygenic medical-grade silicone rubber. \ Use it to help patients up once surgery is complete, or to substitute for hands in surgical operations." can_help_up = TRUE - can_hold = list( + can_hold = list( + /obj/item/clothing/head, + /obj/item/key/ambulance, // I mean, the paramedic never uses it, so... /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/applicator, @@ -361,13 +363,14 @@ can_help_up = TRUE // Everything in this list is currently for either playing games or otherwise assisting the crew in mundane, non-impactful ways. can_hold = list( + /obj/item/clothing/head, /obj/item/deck, /obj/item/cardhand, /obj/item/coin, /obj/item/paper, /obj/item/photo, /obj/item/toy/plushie, - /obj/item/clothing/mask/cigarette + /obj/item/clothing/mask/cigarette, ) // Mining Gripper @@ -376,9 +379,10 @@ name = "mining gripper" desc = "A grasping tool for cyborgs. This ruggedized version will let you add goliath plating to yourself and activate survival capsules. You could also use it to swing a pickaxe if you don't feel like using your drill." can_hold = list( + /obj/item/clothing/head, /obj/item/pickaxe, // Because the image of a mining borg ignoring its built-in drill and instead choosing to swing an old-fashioned pickaxe is funny. /obj/item/stack/sheet/animalhide/goliath_hide, - /obj/item/survivalcapsule + /obj/item/survivalcapsule, ) // Engineering Gripper @@ -388,6 +392,7 @@ desc = "A grasping tool for cyborgs. This version can hold a wide variety of constructon components for use in engineering work." engineering_machine_interaction = TRUE can_hold = list( + /obj/item/clothing/head, /obj/item/firealarm_electronics, /obj/item/airalarm_electronics, /obj/item/airlock_electronics, @@ -409,3 +414,27 @@ /obj/item/light, /obj/item/nuclear_rod, ) + +// Janitorial Gripper +// For Janitorial borgs. Mostly just to let them put on a hat. +/obj/item/gripper/janitor + name = "janitorial gripper" + desc = "A grasping tool for cyborgs. This version is made from hygenic easy-clean material so you can easily keep it (and everything else) clean." + can_hold = list( + /obj/item/clothing/head, + /obj/item/caution, // Holosigns are overrated! + /obj/item/key/janitor, // It'll be funny I swear. + ) + +// Security Gripper +// For secruity borgs. Mostly just to let them put on a hat. +/obj/item/gripper/security + name = "security gripper" + desc = "A grasping tool for cyborgs. This version can hold a few basic security items, but isn't too useful on the front line." + can_hold = list( + /obj/item/clothing/head, + /obj/item/key/security, // Secway! + /obj/item/taperecorder, + /obj/item/tape, + /obj/item/food/donut, // "Borg! Bring me a donut, with the sprinkles!" + ) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 95f5880f4b6..f1dd095ad7e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -247,6 +247,11 @@ /obj/item/robot_module/proc/update_cells(unlink_cell = FALSE) return +/obj/item/robot_module/emag_act(mob/user) + for(var/obj/item/gripper/G in modules) + G.emag_act() + return ..() + /** * Called when the robot owner of this module has the `unemag()` proc called on them, which is only via admin means. * @@ -254,6 +259,8 @@ */ /obj/item/robot_module/unemag() . = ..() + for(var/obj/item/gripper/G in modules) + G.emag_act() for(var/item in emag_modules) var/obj/item/old_item = item var/obj/item/new_item = new old_item.type(src) @@ -320,7 +327,9 @@ /// Overriden for specific modules if they have storage items. These should have their contents emptied out onto the floor. /obj/item/robot_module/proc/handle_death(mob/living/silicon/robot/R, gibbed) - return + var/obj/item/gripper/G = locate(/obj/item/gripper) in modules + if(G) + G.drop_gripped_item(silent = TRUE) // MARK: Robot Modules // Medical @@ -362,29 +371,18 @@ /obj/item/gun/syringemalf ) -/obj/item/robot_module/medical/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/medical/G = locate(/obj/item/gripper/medical) in modules - if(G) - G.drop_gripped_item(silent = TRUE) - -// Emag the robot's equipment. /obj/item/robot_module/medical/emag_act(mob/user) - . = ..() for(var/obj/item/borg_defib/F in modules) F.emag_act() for(var/obj/item/reagent_containers/borghypo/F in modules) F.emag_act() - for(var/obj/item/gripper/F in modules) - F.emag_act() + return ..() -// Remove the emagging on the robot's equipment. /obj/item/robot_module/medical/unemag() for(var/obj/item/borg_defib/F in modules) F.emag_act() for(var/obj/item/reagent_containers/borghypo/F in modules) F.emag_act() - for(var/obj/item/gripper/F in modules) - F.emag_act() return ..() /// Malf Syringe Gun @@ -482,23 +480,11 @@ special_rechargables = list(/obj/item/extinguisher, /obj/item/extinguisher/mini/cyborg, /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/engineering/G = locate(/obj/item/gripper/engineering) in modules + ..() var/obj/item/storage/part_replacer/P = locate(/obj/item/storage/part_replacer) in modules - if(G) - G.drop_gripped_item(silent = TRUE) if(istype(P)) P.drop_inventory(R) -/obj/item/robot_module/engineering/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/engineering/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // Security /obj/item/robot_module/security name = "security robot module" @@ -540,6 +526,7 @@ /obj/item/borg/push_broom, /obj/item/melee/flyswatter, /obj/item/extinguisher/mini/cyborg, + /obj/item/gripper/janitor, ) emag_override_modules = list(/obj/item/reagent_containers/spray/cyborg_lube) emag_modules = list(/obj/item/reagent_containers/spray/cyborg_facid, /obj/item/borg/push_broom/combat) @@ -552,6 +539,7 @@ ) /obj/item/robot_module/janitor/handle_death(mob/living/silicon/robot/R, gibbed) + ..() var/obj/item/storage/bag/trash/T = locate(/obj/item/storage/bag/trash) in modules if(istype(T)) T.drop_inventory(R) @@ -623,23 +611,11 @@ ) /obj/item/robot_module/butler/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/service/G = locate(/obj/item/gripper/service) in modules + ..() var/obj/item/storage/bag/tray/cyborg/T = locate(/obj/item/storage/bag/tray/cyborg) in modules - if(G) - G.drop_gripped_item(silent = TRUE) if(istype(T)) T.drop_inventory(R) -/obj/item/robot_module/butler/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/butler/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // This is a special type of beer given when emagged, one sip and the target falls asleep. /obj/item/reagent_containers/drinks/bottle/beer/sleepy_beer name = "Mickey Finn's Special Brew" @@ -695,23 +671,11 @@ special_rechargables = list(/obj/item/extinguisher/mini/cyborg, /obj/item/weldingtool/mini) /obj/item/robot_module/miner/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/mining/G = locate(/obj/item/gripper/mining) in modules + ..() var/obj/item/storage/bag/ore/B = locate(/obj/item/storage/bag/ore) in modules - if(G) - G.drop_gripped_item(silent = TRUE) if(istype(B)) B.drop_inventory(R) -/obj/item/robot_module/miner/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/miner/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // This makes it so others can crowbar out KA upgrades from the miner borg. /obj/item/robot_module/miner/handle_custom_removal(component_id, mob/living/user, obj/item/W) if(component_id == "KA modkits") @@ -731,6 +695,7 @@ /obj/item/melee/energy/alien/claws, /obj/item/flash/cyborg/alien, /obj/item/reagent_containers/spray/alien/smoke, + /obj/item/gripper/security, ) emag_override_modules = list(/obj/item/reagent_containers/spray/alien/acid) special_rechargables = list( @@ -778,21 +743,6 @@ /obj/item/lightreplacer/cyborg ) -/obj/item/robot_module/drone/handle_death(mob/living/silicon/robot/R, gibbed) - var/obj/item/gripper/engineering/G = locate(/obj/item/gripper/engineering) in modules - if(G) - G.drop_gripped_item(silent = TRUE) - -/obj/item/robot_module/drone/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/drone/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // Sydicate Assault cyborg module. /obj/item/robot_module/syndicate name = "syndicate assault robot module" @@ -805,6 +755,7 @@ /obj/item/card/emag, /obj/item/crowbar/cyborg/red, /obj/item/pinpointer/operative, + /obj/item/gripper/security, ) // Sydicate Medical cyborg module. @@ -841,16 +792,6 @@ ) special_rechargables = list(/obj/item/extinguisher/mini) -/obj/item/robot_module/syndicate_medical/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/syndicate_medical/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // Sydicate Sabotuer/Engineering cyborg module. /obj/item/robot_module/syndicate_saboteur name = "saboteur robot module" // Disguises are handled in the actual cyborg projector @@ -882,16 +823,6 @@ ) special_rechargables = list(/obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg) -/obj/item/robot_module/syndicate_saboteur/emag_act(mob/user) - . = ..() - for(var/obj/item/gripper/F in modules) - F.emag_act() - -/obj/item/robot_module/syndicate_saboteur/unemag() - for(var/obj/item/gripper/F in modules) - F.emag_act() - return ..() - // Gamma security module. /obj/item/robot_module/combat name = "combat robot module" @@ -908,7 +839,8 @@ /obj/item/melee/baton/loaded, // secondary weapon, for things immune to burn, immune to ranged weapons, or for arresting low-grade threats /obj/item/restraints/handcuffs/cable/zipties/cyborg, /obj/item/pickaxe/drill/jackhammer, // for breaking walls to execute flanking moves - /obj/item/extinguisher/mini/cyborg // for friendly fire from their immolator gun. + /obj/item/extinguisher/mini/cyborg, // for friendly fire from their immolator gun. + /obj/item/gripper/security, ) special_rechargables = list( /obj/item/melee/baton/loaded, @@ -928,7 +860,8 @@ /obj/item/melee/baton/loaded, // secondary weapon, for things immune to burn, immune to ranged weapons, or for arresting low-grade threats /obj/item/restraints/handcuffs/cable/zipties/cyborg, /obj/item/pickaxe/drill/jackhammer, // for breaking walls to execute flanking moves - /obj/item/borg/destroyer/mobility + /obj/item/borg/destroyer/mobility, + /obj/item/gripper/security, ) special_rechargables = list( /obj/item/melee/baton/loaded, @@ -945,6 +878,7 @@ /obj/item/melee/energy/sword/cyborg, /obj/item/gun/energy/pulse/cyborg, /obj/item/crowbar/cyborg/red, + /obj/item/gripper, // They're supposed to be ushering in the end of the round. No such thing as OP. ) special_rechargables = list(/obj/item/gun/energy/pulse/cyborg) diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index fcdf1993728..5cea2ec0f47 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -295,9 +295,9 @@ return 2 -/mob/living/silicon/item_interaction(mob/living/user, obj/item/I, list/modifiers) - if(istype(I, /obj/item/clothing/head) && user.a_intent == INTENT_HELP) - place_on_head(user.get_active_hand(), user) +/mob/living/silicon/item_interaction(mob/living/user, obj/item/used, list/modifiers) + if(istype(used, /obj/item/clothing/head) && user.a_intent == INTENT_HELP) + place_on_head(used, user) return ITEM_INTERACT_COMPLETE return ..()