From bd7c9d11d37cc8f0d2ef4077f8a57876f3c594e5 Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Thu, 16 Jul 2020 02:02:29 +1200 Subject: [PATCH 1/5] oh no --- code/game/objects/items/robot/robot_items.dm | 26 +++++++++++++++---- .../game/objects/structures/tank_dispenser.dm | 3 +++ .../mob/living/silicon/robot/robot_modules.dm | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 1f69cdae2e..a440b95562 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -746,8 +746,8 @@ ***********************************************************************/ /obj/item/weapon/gripper - name = "circuit gripper" - desc = "A simple grasping tool for inserting circuitboards into machinary." + name = "engineering gripper" + desc = "A simple grasping tool for interacting with various engineering related items, such as circuits, gas tanks and conveyer belts. Alt Click to open held item UI" icon = 'icons/obj/device.dmi' icon_state = "gripper" @@ -755,17 +755,33 @@ //Has a list of items that it can hold. var/list/can_hold = list( - /obj/item/circuitboard + /obj/item/circuitboard, + /obj/item/light, + /obj/item/electronics, + /obj/item/tank/internals, + /obj/item/conveyor_switch_construct, + /obj/item/stack/conveyor, + /obj/item/wallframe, + /obj/item/vending_refill ) var/obj/item/wrapped = null // Item currently being held. -/obj/item/weapon/gripper/attack_self() +/obj/item/weapon/gripper/attack_self(mob/user) if(wrapped) wrapped.forceMove(get_turf(wrapped)) + to_chat(user, "You drop the [wrapped].") wrapped = null return ..() +//Used to interact with UI's of held items, such as gas tanks and airlock electronics. +/obj/item/weapon/gripper/AltClick(mob/user) + if(wrapped) + wrapped.loc = user + wrapped.ui_interact(user, "main", null, TRUE, null, GLOB.deep_inventory_state) + wrapped.loc = src + return ..() + /obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params) if(!proximity) @@ -803,7 +819,7 @@ //We can grab the item, finally. if(grab) - to_chat(user, "You collect \the [I].") + to_chat(user, "You collect \the [I].") I.loc = src wrapped = I return diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 6a8175b921..49540918fa 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -74,6 +74,9 @@ ui = new(user, src, ui_key, "tank_dispenser", name, 275, 103, master_ui, state) ui.open() +/obj/structure/tank_dispenser/attack_robot(mob/user) + ui_interact(user) + /obj/structure/tank_dispenser/ui_data(mob/user) var/list/data = list() data["oxygen"] = oxygentanks diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8f103c496e..ccf38a547b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -444,7 +444,7 @@ /obj/item/t_scanner, /obj/item/analyzer, /obj/item/storage/part_replacer/cyborg, - /obj/item/holosign_creator/atmos, + /obj/item/holosign_creator/combifan, /obj/item/weapon/gripper, /obj/item/lightreplacer/cyborg, /obj/item/geiger_counter/cyborg, From 06a4e57de92eda8048db120b6306abd094070e20 Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Thu, 16 Jul 2020 02:11:38 +1200 Subject: [PATCH 2/5] changing this just means they can pick up jetpacks --- code/game/objects/items/robot/robot_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index a440b95562..98ac9a52be 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -758,7 +758,7 @@ /obj/item/circuitboard, /obj/item/light, /obj/item/electronics, - /obj/item/tank/internals, + /obj/item/tank, /obj/item/conveyor_switch_construct, /obj/item/stack/conveyor, /obj/item/wallframe, From fc909cd7c67764f0a15cf9b0471f85c1c7c9240b Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Fri, 17 Jul 2020 01:17:54 +1200 Subject: [PATCH 3/5] Added material sheets and tiles. This took more work than you'd think. --- code/game/objects/items/robot/robot_items.dm | 47 +++++++++---------- .../mob/living/silicon/robot/inventory.dm | 11 +++++ code/modules/tgui/states/hands.dm | 4 +- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 98ac9a52be..ce13e3f24c 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -747,7 +747,7 @@ /obj/item/weapon/gripper name = "engineering gripper" - desc = "A simple grasping tool for interacting with various engineering related items, such as circuits, gas tanks and conveyer belts. Alt Click to open held item UI" + desc = "A simple grasping tool for interacting with various engineering related items, such as circuits, gas tanks and conveyer belts. Alt click to drop instead of use." icon = 'icons/obj/device.dmi' icon_state = "gripper" @@ -762,27 +762,28 @@ /obj/item/conveyor_switch_construct, /obj/item/stack/conveyor, /obj/item/wallframe, - /obj/item/vending_refill + /obj/item/vending_refill, + /obj/item/stack/sheet, + /obj/item/stack/tile, + /obj/item/stack/rods + ) + //Basically a blacklist for any subtypes above we dont want + var/list/cannot_hold = list( + /obj/item/stack/sheet/mineral/plasma, + /obj/item/stack/sheet/plasteel ) var/obj/item/wrapped = null // Item currently being held. -/obj/item/weapon/gripper/attack_self(mob/user) +//Used to interact with UI's of held items, such as gas tanks and airlock electronics. +/obj/item/weapon/gripper/AltClick(mob/user) if(wrapped) wrapped.forceMove(get_turf(wrapped)) to_chat(user, "You drop the [wrapped].") wrapped = null return ..() -//Used to interact with UI's of held items, such as gas tanks and airlock electronics. -/obj/item/weapon/gripper/AltClick(mob/user) - if(wrapped) - wrapped.loc = user - wrapped.ui_interact(user, "main", null, TRUE, null, GLOB.deep_inventory_state) - wrapped.loc = src - return ..() - -/obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params) +/obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/silicon/robot/user, proximity, params) if(!proximity) return @@ -808,14 +809,19 @@ return else if(istype(target,/obj/item)) - var/obj/item/I = target - var/grab = 0 + for(var/typepath in can_hold) if(istype(I,typepath)) - grab = 1 - break + for(var/badpath in cannot_hold) + if(istype(I,badpath)) + if(user.emagged) + grab = 1 + break + else + grab = 1 + break //We can grab the item, finally. if(grab) @@ -828,19 +834,12 @@ /obj/item/weapon/gripper/mining name = "shelter capsule deployer" - desc = "A simple grasping tool for carrying and deploying shelter capsules." + desc = "A simple grasping tool for carrying and deploying shelter capsules. Alt click to drop instead of use." icon_state = "gripper_mining" can_hold = list( /obj/item/survivalcapsule ) -/obj/item/weapon/gripper/mining/attack_self() - if(wrapped) - wrapped.forceMove(get_turf(wrapped)) - wrapped.attack_self() - wrapped = null - return - /obj/item/gun/energy/plasmacutter/cyborg name = "cyborg plasma cutter" desc = "A basic variation of the plasma cutter, compressed into a cyborg chassis. Less effective than normal plasma cutters." diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index bb6c37a010..0d8a0880a8 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -2,7 +2,18 @@ //as they handle all relevant stuff like adding it to the player's screen and such //Returns the thing in our active hand (whatever is in our active module-slot, in this case) +//This proc has been butchered into a proc that overrides borg item holding for the sake of making grippers work. +//I'd be immensely thankful if anyone can figure out a less obtuse way of making grippers work without breaking functionality. /mob/living/silicon/robot/get_active_held_item() + var/item = module_active + if(istype(item, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = item + if(G.wrapped) + if(G.wrapped.loc != G) + G.wrapped = null + return module_active + item = G.wrapped + return item return module_active diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index 5da0e5d500..1cd4ae38f5 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -19,7 +19,7 @@ GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) return UI_INTERACTIVE return UI_CLOSE -/mob/living/silicon/robot/hands_can_use_topic(src_object) - if(activated(src_object)) +/mob/living/silicon/robot/hands_can_use_topic(obj/src_object) + if(activated(src_object) || istype(src_object.loc, /obj/item/weapon/gripper)) return UI_INTERACTIVE return UI_CLOSE From eb9b3da5815bab6cf429c6934183b2c6c9c1a3cc Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Fri, 17 Jul 2020 16:13:18 +1200 Subject: [PATCH 4/5] Blacklist logic fix --- code/game/objects/items/robot/robot_items.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index ce13e3f24c..564f08b14d 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -814,14 +814,12 @@ for(var/typepath in can_hold) if(istype(I,typepath)) + grab = 1 for(var/badpath in cannot_hold) if(istype(I,badpath)) - if(user.emagged) - grab = 1 - break - else - grab = 1 - break + if(!user.emagged) + grab = 0 + continue //We can grab the item, finally. if(grab) From 9b671b7dd1602351399faa1384342c178418ee41 Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Sat, 18 Jul 2020 03:08:52 +1200 Subject: [PATCH 5/5] I'm gonna regret this. Adds stock parts (meaning cells) to the gripper list --- code/game/machinery/cell_charger.dm | 10 ++++++++++ code/game/objects/items/robot/robot_items.dm | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 83b0c0ee2d..15df92c37e 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -103,8 +103,18 @@ removecell() /obj/machinery/cell_charger/attack_ai(mob/user) + if(!charging) + return + + charging.forceMove(loc) + to_chat(user, "You remotely disconnect the battery port and eject [charging] from [src].") + + removecell() return +/obj/machinery/cell_charger/attack_robot(mob/user) + attack_ai(user) + /obj/machinery/cell_charger/emp_act(severity) . = ..() diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 564f08b14d..4b2e022da7 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -765,7 +765,8 @@ /obj/item/vending_refill, /obj/item/stack/sheet, /obj/item/stack/tile, - /obj/item/stack/rods + /obj/item/stack/rods, + /obj/item/stock_parts ) //Basically a blacklist for any subtypes above we dont want var/list/cannot_hold = list(