From ba914ab08c4ed44ead8ad483be5c82da92f44764 Mon Sep 17 00:00:00 2001 From: zxaber <37497534+zxaber@users.noreply.github.com> Date: Sat, 15 Apr 2023 18:23:02 -0700 Subject: [PATCH 1/3] Adds a Material Stack manipulation apparatus for Engineer Cyborgs, replaces the R-Glass tool (#74297) - Adds a new apparatus for Engineer Cyborgs that can pick up and manipulate material sheet stacks. Once holding a stack, interactions are passed to the stack. - Sheets in the new apparatus will always show as single sheets while held, regardless of the actual count. - Removes the R-Glass tool from Engineer Cyborgs. - Sabotage borgs have the same changes Allows Engiborgs to repair or build with various materials, without (further) destroying the concept of material economy. The R-Glass tool, in my experience, is generally unused, as the RCD can create R-Windows and that's the main use for the sheets. So the tool has been removed to keep the Engineer Borg Toolkit from exploding. The new tool can also pick up R-Glass, if a need for it arises. :cl: balance: Engineer Borgs now have a tool to manipulate material stacks (and also tile stacks). This replaces the R-Glass tool. /:cl: Pictured: Apparatus carrying titanium. ![image](https://user-images.githubusercontent.com/37497534/228021045-0f5a6c76-9caa-47de-ad0a-d20e7e1f4eb2.png) --- code/modules/mob/living/silicon/robot/inventory.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 60ac3f975cd..9197904f956 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -102,6 +102,8 @@ /mob/living/silicon/robot/proc/activated(obj/item/O) if(O in held_items) return TRUE + if(item_module.loc in held_items) //Apparatus check + return TRUE return FALSE //Helper procs for cyborg modules on the UI. From 84bddf75335752cf4cbb11e2eb26e13800c6dfd5 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:23:24 +1200 Subject: [PATCH 2/3] Automatic changelog for PR #74297 [ci skip] --- html/changelogs/AutoChangeLog-pr-74297.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-74297.yml diff --git a/html/changelogs/AutoChangeLog-pr-74297.yml b/html/changelogs/AutoChangeLog-pr-74297.yml new file mode 100644 index 00000000000..0592978201e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-74297.yml @@ -0,0 +1,4 @@ +author: "zxaber" +delete-after: True +changes: + - balance: "Engineer Borgs now have a tool to manipulate material stacks (and also tile stacks). This replaces the R-Glass tool." \ No newline at end of file From c1c9e57c17b5f34e4a73fc10d10286ca2b774d67 Mon Sep 17 00:00:00 2001 From: vect0r <71346830+Vect0r2@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:58:21 -0700 Subject: [PATCH 3/3] init --- code/game/objects/items/robot/robot_items.dm | 34 ++++++++++++++++++ .../game/objects/items/stacks/sheets/glass.dm | 19 +--------- .../mob/living/silicon/robot/inventory.dm | 2 +- .../mob/living/silicon/robot/robot_modules.dm | 9 ++--- icons/mob/robot_items.dmi | Bin 1808 -> 1843 bytes 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 243b84b7e1e..232951f0652 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -894,6 +894,40 @@ RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, TYPE_PROC_REF(/atom, update_icon)) update_appearance() +///Apparatus to allow Engineering/Sabo borgs to manipulate any material sheets. +/obj/item/borg/apparatus/sheet_manipulator + name = "material manipulation apparatus" + desc = "An apparatus for carrying, deploying, and manipulating sheets of material. The device can also carry custom floor tiles." + icon_state = "borg_stack_apparatus" + storable = list(/obj/item/stack/sheet, + /obj/item/stack/tile) + +/obj/item/borg/apparatus/sheet_manipulator/Initialize(mapload) + update_appearance() + return ..() + +/obj/item/borg/apparatus/sheet_manipulator/update_overlays() + . = ..() + var/mutable_appearance/arm = mutable_appearance(icon, "borg_stack_apparatus_arm1") + if(stored) + stored.pixel_x = 0 + stored.pixel_y = 0 + arm.icon_state = "borg_stack_apparatus_arm2" + var/mutable_appearance/stored_copy = new /mutable_appearance(stored) + var/underscore = findtext(stored_copy.icon_state, "_") + if(underscore) + stored_copy.icon_state = initial(stored.icon_state) //how we use the icon_state of single sheets, even with full stacks + stored_copy.layer = FLOAT_LAYER + stored_copy.plane = FLOAT_PLANE + . += stored_copy + . += arm + +/obj/item/borg/apparatus/sheet_manipulator/examine() + . = ..() + if(stored) + . += "The apparatus currently has [stored] secured." + . += span_notice(" Right click/i> has an option to drop the stored sheets. ") + //////////////////// //engi part holder// //////////////////// diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index da08c87a5a3..46ad35e71f1 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -165,24 +165,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ add_fingerprint(user) ..() -/obj/item/stack/sheet/rglass/cyborg - custom_materials = null - var/datum/robot_energy_storage/glasource - var/metcost = 250 - var/glacost = 500 - -/obj/item/stack/sheet/rglass/cyborg/get_amount() - return min(round(source.energy / metcost), round(glasource.energy / glacost)) - -/obj/item/stack/sheet/rglass/cyborg/use(used, transfer = FALSE, check = TRUE) // Requires special checks, because it uses two storages - if(get_amount(used)) //ensure we still have enough energy if called in a do_after chain - source.use_charge(used * metcost) - glasource.use_charge(used * glacost) - return TRUE - -/obj/item/stack/sheet/rglass/cyborg/add(amount) - source.add_charge(amount * metcost) - glasource.add_charge(amount * glacost) + /obj/item/stack/sheet/rglass/get_main_recipes() . = ..() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 9197904f956..a9620306e47 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -102,7 +102,7 @@ /mob/living/silicon/robot/proc/activated(obj/item/O) if(O in held_items) return TRUE - if(item_module.loc in held_items) //Apparatus check + if(O.loc in held_items) //Apparatus check return TRUE return FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 27819d97cf1..f3db764211d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -93,11 +93,6 @@ S.cost = 500 S.source = get_or_create_estorage(/datum/robot_energy_storage/glass) - else if(istype(S, /obj/item/stack/sheet/rglass/cyborg)) - var/obj/item/stack/sheet/rglass/cyborg/G = S - G.source = get_or_create_estorage(/datum/robot_energy_storage/metal) - G.glasource = get_or_create_estorage(/datum/robot_energy_storage/glass) - else if(istype(S, /obj/item/stack/medical)) S.cost = 250 S.source = get_or_create_estorage(/datum/robot_energy_storage/medical) @@ -446,7 +441,7 @@ /obj/item/electroadaptive_pseudocircuit, /obj/item/stack/sheet/metal/cyborg, /obj/item/stack/sheet/glass/cyborg, - /obj/item/stack/sheet/rglass/cyborg, + /obj/item/borg/apparatus/sheet_manipulator, /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, /obj/item/stack/cable_coil/cyborg) @@ -1073,7 +1068,7 @@ /obj/item/multitool/cyborg, /obj/item/stack/sheet/metal/cyborg, /obj/item/stack/sheet/glass/cyborg, - /obj/item/stack/sheet/rglass/cyborg, + /obj/item/borg/apparatus/sheet_manipulator, /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, /obj/item/destTagger/borg, diff --git a/icons/mob/robot_items.dmi b/icons/mob/robot_items.dmi index a3b6237b7374ab13f7ccc7576691dcc839ff4f6e..896279d4a2e5457e7ac1d5ed8ef8433f11dc58be 100644 GIT binary patch delta 1572 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